diff --git a/.changeset/brave-lions-sing.md b/.changeset/brave-lions-sing.md new file mode 100644 index 00000000..d5044eb9 --- /dev/null +++ b/.changeset/brave-lions-sing.md @@ -0,0 +1,11 @@ +--- +"task-master-ai": minor +--- + +Add Codex CLI provider with OAuth authentication + +- Added codex-cli provider for GPT-5 and GPT-5-Codex models (272K input / 128K output) +- OAuth-first authentication via `codex login` - no API key required +- Optional OPENAI_CODEX_API_KEY support +- Codebase analysis capabilities automatically enabled +- Command-specific settings and approval/sandbox modes diff --git a/.changeset/chore-fix-docs.md b/.changeset/chore-fix-docs.md new file mode 100644 index 00000000..9b73e3a5 --- /dev/null +++ b/.changeset/chore-fix-docs.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Improve `analyze-complexity` cli docs and `--research` flag documentation \ No newline at end of file diff --git a/.changeset/cursor-slash-commands.md b/.changeset/cursor-slash-commands.md new file mode 100644 index 00000000..b4c74573 --- /dev/null +++ b/.changeset/cursor-slash-commands.md @@ -0,0 +1,7 @@ +--- +"task-master-ai": minor +--- + +Add Cursor IDE custom slash command support + +Expose Task Master commands as Cursor slash commands by copying assets/claude/commands to .cursor/commands on profile add and cleaning up on remove. diff --git a/.changeset/curvy-weeks-flow.md b/.changeset/curvy-weeks-flow.md new file mode 100644 index 00000000..028194c7 --- /dev/null +++ b/.changeset/curvy-weeks-flow.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Change parent task back to "pending" when all subtasks are in "pending" state diff --git a/.changeset/easy-spiders-wave.md b/.changeset/easy-spiders-wave.md new file mode 100644 index 00000000..c4c0079a --- /dev/null +++ b/.changeset/easy-spiders-wave.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Do a quick fix on build diff --git a/.changeset/fix-mcp-connection-errors.md b/.changeset/fix-mcp-connection-errors.md new file mode 100644 index 00000000..4f99fe6f --- /dev/null +++ b/.changeset/fix-mcp-connection-errors.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Fix MCP connection errors caused by deprecated generateTaskFiles calls. Resolves "Cannot read properties of null (reading 'toString')" errors when using MCP tools for task management operations. \ No newline at end of file diff --git a/.changeset/fix-mcp-default-tasks-path.md b/.changeset/fix-mcp-default-tasks-path.md new file mode 100644 index 00000000..a124e958 --- /dev/null +++ b/.changeset/fix-mcp-default-tasks-path.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Fix MCP server error when file parameter not provided - now properly constructs default tasks.json path instead of failing with 'tasksJsonPath is required' error. \ No newline at end of file diff --git a/.changeset/flat-cities-say.md b/.changeset/flat-cities-say.md new file mode 100644 index 00000000..eaab97a4 --- /dev/null +++ b/.changeset/flat-cities-say.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": minor +--- + +Added api keys page on docs website: docs.task-master.dev/getting-started/api-keys diff --git a/.changeset/forty-tables-invite.md b/.changeset/forty-tables-invite.md new file mode 100644 index 00000000..ab05ddaf --- /dev/null +++ b/.changeset/forty-tables-invite.md @@ -0,0 +1,10 @@ +--- +"task-master-ai": minor +--- + +Move to AI SDK v5: + +- Works better with claude-code and gemini-cli as ai providers +- Improved openai model family compatibility +- Migrate ollama provider to v2 +- Closes #1223, #1013, #1161, #1174 diff --git a/.changeset/gentle-cats-dance.md b/.changeset/gentle-cats-dance.md new file mode 100644 index 00000000..92612e5e --- /dev/null +++ b/.changeset/gentle-cats-dance.md @@ -0,0 +1,30 @@ +--- +"task-master-ai": minor +--- + +Migrate AI services to use generateObject for structured data generation + +This update migrates all AI service calls from generateText to generateObject, ensuring more reliable and structured responses across all commands. + +### Key Changes: + +- **Unified AI Service**: Replaced separate generateText implementations with a single generateObjectService that handles structured data generation +- **JSON Mode Support**: Added proper JSON mode configuration for providers that support it (OpenAI, Anthropic, Google, Groq) +- **Schema Validation**: Integrated Zod schemas for all AI-generated content with automatic validation +- **Provider Compatibility**: Maintained compatibility with all existing providers while leveraging their native structured output capabilities +- **Improved Reliability**: Structured output generation reduces parsing errors and ensures consistent data formats + +### Technical Improvements: + +- Centralized provider configuration in `ai-providers-unified.js` +- Added `generateObject` support detection for each provider +- Implemented proper error handling for schema validation failures +- Maintained backward compatibility with existing prompt structures + +### Bug Fixes: + +- Fixed subtask ID numbering issue where AI was generating inconsistent IDs (101-105, 601-603) instead of sequential numbering (1, 2, 3...) +- Enhanced prompt instructions to enforce proper ID generation patterns +- Ensured subtasks display correctly as X.1, X.2, X.3 format + +This migration improves the reliability and consistency of AI-generated content throughout the Task Master application. \ No newline at end of file diff --git a/.changeset/mcp-timeout-configuration.md b/.changeset/mcp-timeout-configuration.md new file mode 100644 index 00000000..e12665fb --- /dev/null +++ b/.changeset/mcp-timeout-configuration.md @@ -0,0 +1,13 @@ +--- +"task-master-ai": minor +--- + +Enhanced Roo Code profile with MCP timeout configuration for improved reliability during long-running AI operations. The Roo profile now automatically configures a 300-second timeout for MCP server operations, preventing timeouts during complex tasks like `parse-prd`, `expand-all`, `analyze-complexity`, and `research` operations. This change also replaces static MCP configuration files with programmatic generation for better maintainability. + +**What's New:** +- 300-second timeout for MCP operations (up from default 60 seconds) +- Programmatic MCP configuration generation (replaces static asset files) +- Enhanced reliability for AI-powered operations +- Consistent with other AI coding assistant profiles + +**Migration:** No user action required - existing Roo Code installations will automatically receive the enhanced MCP configuration on next initialization. \ No newline at end of file diff --git a/.changeset/petite-ideas-grab.md b/.changeset/petite-ideas-grab.md new file mode 100644 index 00000000..6ed231d5 --- /dev/null +++ b/.changeset/petite-ideas-grab.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Fix Claude Code settings validation for pathToClaudeCodeExecutable diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 00000000..9f460486 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,26 @@ +{ + "mode": "exit", + "tag": "rc", + "initialVersions": { + "task-master-ai": "0.27.3", + "docs": "0.0.4", + "extension": "0.25.4" + }, + "changesets": [ + "brave-lions-sing", + "chore-fix-docs", + "cursor-slash-commands", + "curvy-weeks-flow", + "easy-spiders-wave", + "fix-mcp-connection-errors", + "fix-mcp-default-tasks-path", + "flat-cities-say", + "forty-tables-invite", + "gentle-cats-dance", + "mcp-timeout-configuration", + "petite-ideas-grab", + "silly-pandas-find", + "sweet-maps-rule", + "whole-pigs-say" + ] +} diff --git a/.changeset/silly-pandas-find.md b/.changeset/silly-pandas-find.md new file mode 100644 index 00000000..564a1338 --- /dev/null +++ b/.changeset/silly-pandas-find.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": patch +--- + +Fix sonar deep research model failing, should be called `sonar-deep-research` diff --git a/.changeset/sweet-maps-rule.md b/.changeset/sweet-maps-rule.md new file mode 100644 index 00000000..6462de36 --- /dev/null +++ b/.changeset/sweet-maps-rule.md @@ -0,0 +1,5 @@ +--- +"task-master-ai": minor +--- + +Upgrade grok-cli ai provider to ai sdk v5 diff --git a/.changeset/whole-pigs-say.md b/.changeset/whole-pigs-say.md new file mode 100644 index 00000000..eca334fe --- /dev/null +++ b/.changeset/whole-pigs-say.md @@ -0,0 +1,8 @@ +--- +"task-master-ai": patch +--- + +Fix complexity score not showing for `task-master show` and `task-master list` + +- Added complexity score on "next task" when running `task-master list` +- Added colors to complexity to reflect complexity (easy, medium, hard) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c977d05..125d3e60 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,9 +6,6 @@ on: - main - next pull_request: - branches: - - main - - next workflow_dispatch: concurrency: diff --git a/.github/workflows/extension-ci.yml b/.github/workflows/extension-ci.yml index 4914852f..8e59a341 100644 --- a/.github/workflows/extension-ci.yml +++ b/.github/workflows/extension-ci.yml @@ -41,8 +41,7 @@ jobs: restore-keys: | ${{ runner.os }}-node- - - name: Install Extension Dependencies - working-directory: apps/extension + - name: Install Monorepo Dependencies run: npm ci timeout-minutes: 5 @@ -68,7 +67,6 @@ jobs: ${{ runner.os }}-node- - name: Install if cache miss - working-directory: apps/extension run: npm ci timeout-minutes: 3 @@ -100,7 +98,6 @@ jobs: ${{ runner.os }}-node- - name: Install if cache miss - working-directory: apps/extension run: npm ci timeout-minutes: 3 diff --git a/.github/workflows/extension-release.yml b/.github/workflows/extension-release.yml index 111bc80f..be536522 100644 --- a/.github/workflows/extension-release.yml +++ b/.github/workflows/extension-release.yml @@ -31,8 +31,7 @@ jobs: restore-keys: | ${{ runner.os }}-node- - - name: Install Extension Dependencies - working-directory: apps/extension + - name: Install Monorepo Dependencies run: npm ci timeout-minutes: 5 diff --git a/CHANGELOG.md b/CHANGELOG.md index e3dbe8d9..e8546109 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,94 @@ # task-master-ai +## 0.28.0-rc.2 + +### Minor Changes + +- [#1273](https://github.com/eyaltoledano/claude-task-master/pull/1273) [`b43b7ce`](https://github.com/eyaltoledano/claude-task-master/commit/b43b7ce201625eee956fb2f8cd332f238bb78c21) Thanks [@ben-vargas](https://github.com/ben-vargas)! - Add Codex CLI provider with OAuth authentication + - Added codex-cli provider for GPT-5 and GPT-5-Codex models (272K input / 128K output) + - OAuth-first authentication via `codex login` - no API key required + - Optional OPENAI_CODEX_API_KEY support + - Codebase analysis capabilities automatically enabled + - Command-specific settings and approval/sandbox modes + +### Patch Changes + +- [#1277](https://github.com/eyaltoledano/claude-task-master/pull/1277) [`7b5a7c4`](https://github.com/eyaltoledano/claude-task-master/commit/7b5a7c4495a68b782f7407fc5d0e0d3ae81f42f5) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix MCP connection errors caused by deprecated generateTaskFiles calls. Resolves "Cannot read properties of null (reading 'toString')" errors when using MCP tools for task management operations. + +- [#1276](https://github.com/eyaltoledano/claude-task-master/pull/1276) [`caee040`](https://github.com/eyaltoledano/claude-task-master/commit/caee040907f856d31a660171c9e6d966f23c632e) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix MCP server error when file parameter not provided - now properly constructs default tasks.json path instead of failing with 'tasksJsonPath is required' error. + +## 0.28.0-rc.1 + +### Patch Changes + +- [#1274](https://github.com/eyaltoledano/claude-task-master/pull/1274) [`4f984f8`](https://github.com/eyaltoledano/claude-task-master/commit/4f984f8a6965da9f9c7edd60ddfd6560ac022917) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Do a quick fix on build + +## 0.28.0-rc.0 + +### Minor Changes + +- [#1215](https://github.com/eyaltoledano/claude-task-master/pull/1215) [`0079b7d`](https://github.com/eyaltoledano/claude-task-master/commit/0079b7defdad550811f704c470fdd01955d91d4d) Thanks [@joedanz](https://github.com/joedanz)! - Add Cursor IDE custom slash command support + + Expose Task Master commands as Cursor slash commands by copying assets/claude/commands to .cursor/commands on profile add and cleaning up on remove. + +- [#1246](https://github.com/eyaltoledano/claude-task-master/pull/1246) [`18aa416`](https://github.com/eyaltoledano/claude-task-master/commit/18aa416035f44345bde1c7321490345733a5d042) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Added api keys page on docs website: docs.task-master.dev/getting-started/api-keys + +- [#1246](https://github.com/eyaltoledano/claude-task-master/pull/1246) [`18aa416`](https://github.com/eyaltoledano/claude-task-master/commit/18aa416035f44345bde1c7321490345733a5d042) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Move to AI SDK v5: + - Works better with claude-code and gemini-cli as ai providers + - Improved openai model family compatibility + - Migrate ollama provider to v2 + - Closes #1223, #1013, #1161, #1174 + +- [#1262](https://github.com/eyaltoledano/claude-task-master/pull/1262) [`738ec51`](https://github.com/eyaltoledano/claude-task-master/commit/738ec51c049a295a12839b2dfddaf05e23b8fede) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Migrate AI services to use generateObject for structured data generation + + This update migrates all AI service calls from generateText to generateObject, ensuring more reliable and structured responses across all commands. + + ### Key Changes: + - **Unified AI Service**: Replaced separate generateText implementations with a single generateObjectService that handles structured data generation + - **JSON Mode Support**: Added proper JSON mode configuration for providers that support it (OpenAI, Anthropic, Google, Groq) + - **Schema Validation**: Integrated Zod schemas for all AI-generated content with automatic validation + - **Provider Compatibility**: Maintained compatibility with all existing providers while leveraging their native structured output capabilities + - **Improved Reliability**: Structured output generation reduces parsing errors and ensures consistent data formats + + ### Technical Improvements: + - Centralized provider configuration in `ai-providers-unified.js` + - Added `generateObject` support detection for each provider + - Implemented proper error handling for schema validation failures + - Maintained backward compatibility with existing prompt structures + + ### Bug Fixes: + - Fixed subtask ID numbering issue where AI was generating inconsistent IDs (101-105, 601-603) instead of sequential numbering (1, 2, 3...) + - Enhanced prompt instructions to enforce proper ID generation patterns + - Ensured subtasks display correctly as X.1, X.2, X.3 format + + This migration improves the reliability and consistency of AI-generated content throughout the Task Master application. + +- [#1112](https://github.com/eyaltoledano/claude-task-master/pull/1112) [`d67b81d`](https://github.com/eyaltoledano/claude-task-master/commit/d67b81d25ddd927fabb6f5deb368e8993519c541) Thanks [@olssonsten](https://github.com/olssonsten)! - Enhanced Roo Code profile with MCP timeout configuration for improved reliability during long-running AI operations. The Roo profile now automatically configures a 300-second timeout for MCP server operations, preventing timeouts during complex tasks like `parse-prd`, `expand-all`, `analyze-complexity`, and `research` operations. This change also replaces static MCP configuration files with programmatic generation for better maintainability. + + **What's New:** + - 300-second timeout for MCP operations (up from default 60 seconds) + - Programmatic MCP configuration generation (replaces static asset files) + - Enhanced reliability for AI-powered operations + - Consistent with other AI coding assistant profiles + + **Migration:** No user action required - existing Roo Code installations will automatically receive the enhanced MCP configuration on next initialization. + +- [#1246](https://github.com/eyaltoledano/claude-task-master/pull/1246) [`986ac11`](https://github.com/eyaltoledano/claude-task-master/commit/986ac117aee00bcd3e6830a0f76e1ad6d10e0bca) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Upgrade grok-cli ai provider to ai sdk v5 + +### Patch Changes + +- [#1235](https://github.com/eyaltoledano/claude-task-master/pull/1235) [`aaacc3d`](https://github.com/eyaltoledano/claude-task-master/commit/aaacc3dae36247b4de72b2d2697f49e5df6d01e3) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Improve `analyze-complexity` cli docs and `--research` flag documentation + +- [#1251](https://github.com/eyaltoledano/claude-task-master/pull/1251) [`0b2c696`](https://github.com/eyaltoledano/claude-task-master/commit/0b2c6967c4605c33a100cff16f6ce8ff09ad06f0) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Change parent task back to "pending" when all subtasks are in "pending" state + +- [#1172](https://github.com/eyaltoledano/claude-task-master/pull/1172) [`b5fe723`](https://github.com/eyaltoledano/claude-task-master/commit/b5fe723f8ead928e9f2dbde13b833ee70ac3382d) Thanks [@jujax](https://github.com/jujax)! - Fix Claude Code settings validation for pathToClaudeCodeExecutable + +- [#1192](https://github.com/eyaltoledano/claude-task-master/pull/1192) [`2b69936`](https://github.com/eyaltoledano/claude-task-master/commit/2b69936ee7b34346d6de5175af20e077359e2e2a) Thanks [@nukunga](https://github.com/nukunga)! - Fix sonar deep research model failing, should be called `sonar-deep-research` + +- [#1270](https://github.com/eyaltoledano/claude-task-master/pull/1270) [`20004a3`](https://github.com/eyaltoledano/claude-task-master/commit/20004a39ea848f747e1ff48981bfe176554e4055) Thanks [@Crunchyman-ralph](https://github.com/Crunchyman-ralph)! - Fix complexity score not showing for `task-master show` and `task-master list` + - Added complexity score on "next task" when running `task-master list` + - Added colors to complexity to reflect complexity (easy, medium, hard) + ## 0.27.3 ### Patch Changes diff --git a/CLAUDE.md b/CLAUDE.md index 57471525..a7dd5e1a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,6 +4,28 @@ **Import Task Master's development workflow commands and guidelines, treat as if import is in the main CLAUDE.md file.** @./.taskmaster/CLAUDE.md +## Test Guidelines + +### Synchronous Tests +- **NEVER use async/await in test functions** unless testing actual asynchronous operations +- Use synchronous top-level imports instead of dynamic `await import()` +- Test bodies should be synchronous whenever possible +- Example: + ```javascript + // āœ… CORRECT - Synchronous imports + import { MyClass } from '../src/my-class.js'; + + it('should verify behavior', () => { + expect(new MyClass().property).toBe(value); + }); + + // āŒ INCORRECT - Async imports + it('should verify behavior', async () => { + const { MyClass } = await import('../src/my-class.js'); + expect(new MyClass().property).toBe(value); + }); + ``` + ## Changeset Guidelines - When creating changesets, remember that it's user-facing, meaning we don't have to get into the specifics of the code, but rather mention what the end-user is getting or fixing from this changeset. \ No newline at end of file diff --git a/README.md b/README.md index 0576e295..45c06892 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,19 @@ The following documentation is also available in the `docs` directory: > **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys. +#### Claude Code Quick Install + +For Claude Code users: + +```bash +claude mcp add taskmaster-ai -- npx -y task-master-ai +``` + +Don't forget to add your API keys to the configuration: +- in the root .env of your Project +- in the "env" section of your mcp config for taskmaster-ai + + ## Requirements Taskmaster utilizes AI across several commands, and those require a separate API key. You can use a variety of models from different AI providers provided you add your API keys. For example, if you want to use Claude 3.7, you'll need an Anthropic API key. @@ -75,8 +88,9 @@ At least one (1) of the following is required: - xAI API Key (for research or main model) - OpenRouter API Key (for research or main model) - Claude Code (no API key required - requires Claude Code CLI) +- Codex CLI (OAuth via ChatGPT subscription - requires Codex CLI) -Using the research model is optional but highly recommended. You will need at least ONE API key (unless using Claude Code). Adding all API keys enables you to seamlessly switch between model providers at will. +Using the research model is optional but highly recommended. You will need at least ONE API key (unless using Claude Code or Codex CLI with OAuth). Adding all API keys enables you to seamlessly switch between model providers at will. ## Quick Start @@ -92,10 +106,11 @@ MCP (Model Control Protocol) lets you run Task Master directly from your editor. | | Project | `/.cursor/mcp.json` | `\.cursor\mcp.json` | `mcpServers` | | **Windsurf** | Global | `~/.codeium/windsurf/mcp_config.json` | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` | `mcpServers` | | **VS Code** | Project | `/.vscode/mcp.json` | `\.vscode\mcp.json` | `servers` | +| **Q CLI** | Global | `~/.aws/amazonq/mcp.json` | | `mcpServers` | ##### Manual Configuration -###### Cursor & Windsurf (`mcpServers`) +###### Cursor & Windsurf & Q Developer CLI (`mcpServers`) ```json { diff --git a/apps/cli/package.json b/apps/cli/package.json index 5e35e20e..6be0dcb7 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -35,7 +35,7 @@ "@types/inquirer": "^9.0.3", "@types/node": "^22.10.5", "tsx": "^4.20.4", - "typescript": "^5.7.3", + "typescript": "^5.9.2", "vitest": "^2.1.8" }, "engines": { diff --git a/apps/cli/src/command-registry.ts b/apps/cli/src/command-registry.ts new file mode 100644 index 00000000..fffc8379 --- /dev/null +++ b/apps/cli/src/command-registry.ts @@ -0,0 +1,255 @@ +/** + * @fileoverview Centralized Command Registry + * Provides a single location for registering all CLI commands + */ + +import { Command } from 'commander'; + +// Import all commands +import { ListTasksCommand } from './commands/list.command.js'; +import { ShowCommand } from './commands/show.command.js'; +import { AuthCommand } from './commands/auth.command.js'; +import { ContextCommand } from './commands/context.command.js'; +import { StartCommand } from './commands/start.command.js'; +import { SetStatusCommand } from './commands/set-status.command.js'; +import { ExportCommand } from './commands/export.command.js'; + +/** + * Command metadata for registration + */ +export interface CommandMetadata { + name: string; + description: string; + commandClass: typeof Command; + category?: 'task' | 'auth' | 'utility' | 'development'; +} + +/** + * Registry of all available commands + */ +export class CommandRegistry { + /** + * All available commands with their metadata + */ + private static commands: CommandMetadata[] = [ + // Task Management Commands + { + name: 'list', + description: 'List all tasks with filtering and status overview', + commandClass: ListTasksCommand as any, + category: 'task' + }, + { + name: 'show', + description: 'Display detailed information about a specific task', + commandClass: ShowCommand as any, + category: 'task' + }, + { + name: 'start', + description: 'Start working on a task with claude-code', + commandClass: StartCommand as any, + category: 'task' + }, + { + name: 'set-status', + description: 'Update the status of one or more tasks', + commandClass: SetStatusCommand as any, + category: 'task' + }, + { + name: 'export', + description: 'Export tasks to external systems', + commandClass: ExportCommand as any, + category: 'task' + }, + + // Authentication & Context Commands + { + name: 'auth', + description: 'Manage authentication with tryhamster.com', + commandClass: AuthCommand as any, + category: 'auth' + }, + { + name: 'context', + description: 'Manage workspace context (organization/brief)', + commandClass: ContextCommand as any, + category: 'auth' + } + ]; + + /** + * Register all commands on a program instance + * @param program - Commander program to register commands on + */ + static registerAll(program: Command): void { + for (const cmd of this.commands) { + this.registerCommand(program, cmd); + } + } + + /** + * Register specific commands by category + * @param program - Commander program to register commands on + * @param category - Category of commands to register + */ + static registerByCategory( + program: Command, + category: 'task' | 'auth' | 'utility' | 'development' + ): void { + const categoryCommands = this.commands.filter( + (cmd) => cmd.category === category + ); + + for (const cmd of categoryCommands) { + this.registerCommand(program, cmd); + } + } + + /** + * Register a single command by name + * @param program - Commander program to register the command on + * @param name - Name of the command to register + */ + static registerByName(program: Command, name: string): void { + const cmd = this.commands.find((c) => c.name === name); + if (cmd) { + this.registerCommand(program, cmd); + } else { + throw new Error(`Command '${name}' not found in registry`); + } + } + + /** + * Register a single command + * @param program - Commander program to register the command on + * @param metadata - Command metadata + */ + private static registerCommand( + program: Command, + metadata: CommandMetadata + ): void { + const CommandClass = metadata.commandClass as any; + + // Use the static registration method that all commands have + if (CommandClass.registerOn) { + CommandClass.registerOn(program); + } else if (CommandClass.register) { + CommandClass.register(program); + } else { + // Fallback to creating instance and adding + const instance = new CommandClass(); + program.addCommand(instance); + } + } + + /** + * Get all registered command names + */ + static getCommandNames(): string[] { + return this.commands.map((cmd) => cmd.name); + } + + /** + * Get commands by category + */ + static getCommandsByCategory( + category: 'task' | 'auth' | 'utility' | 'development' + ): CommandMetadata[] { + return this.commands.filter((cmd) => cmd.category === category); + } + + /** + * Add a new command to the registry + * @param metadata - Command metadata to add + */ + static addCommand(metadata: CommandMetadata): void { + // Check if command already exists + if (this.commands.some((cmd) => cmd.name === metadata.name)) { + throw new Error(`Command '${metadata.name}' already exists in registry`); + } + + this.commands.push(metadata); + } + + /** + * Remove a command from the registry + * @param name - Name of the command to remove + */ + static removeCommand(name: string): boolean { + const index = this.commands.findIndex((cmd) => cmd.name === name); + if (index >= 0) { + this.commands.splice(index, 1); + return true; + } + return false; + } + + /** + * Get command metadata by name + * @param name - Name of the command + */ + static getCommand(name: string): CommandMetadata | undefined { + return this.commands.find((cmd) => cmd.name === name); + } + + /** + * Check if a command exists + * @param name - Name of the command + */ + static hasCommand(name: string): boolean { + return this.commands.some((cmd) => cmd.name === name); + } + + /** + * Get a formatted list of all commands for display + */ + static getFormattedCommandList(): string { + const categories = { + task: 'Task Management', + auth: 'Authentication & Context', + utility: 'Utilities', + development: 'Development' + }; + + let output = ''; + + for (const [category, title] of Object.entries(categories)) { + const cmds = this.getCommandsByCategory( + category as keyof typeof categories + ); + if (cmds.length > 0) { + output += `\n${title}:\n`; + for (const cmd of cmds) { + output += ` ${cmd.name.padEnd(20)} ${cmd.description}\n`; + } + } + } + + return output; + } +} + +/** + * Convenience function to register all CLI commands + * @param program - Commander program instance + */ +export function registerAllCommands(program: Command): void { + CommandRegistry.registerAll(program); +} + +/** + * Convenience function to register commands by category + * @param program - Commander program instance + * @param category - Category to register + */ +export function registerCommandsByCategory( + program: Command, + category: 'task' | 'auth' | 'utility' | 'development' +): void { + CommandRegistry.registerByCategory(program, category); +} + +// Export the registry for direct access if needed +export default CommandRegistry; diff --git a/apps/cli/src/commands/auth.command.ts b/apps/cli/src/commands/auth.command.ts index c79ff6bb..8053311d 100644 --- a/apps/cli/src/commands/auth.command.ts +++ b/apps/cli/src/commands/auth.command.ts @@ -493,18 +493,7 @@ export class AuthCommand extends Command { } /** - * Static method to register this command on an existing program - * This is for gradual migration - allows commands.js to use this - */ - static registerOn(program: Command): Command { - const authCommand = new AuthCommand(); - program.addCommand(authCommand); - return authCommand; - } - - /** - * Alternative registration that returns the command for chaining - * Can also configure the command name if needed + * Register this command on an existing program */ static register(program: Command, name?: string): AuthCommand { const authCommand = new AuthCommand(name); diff --git a/apps/cli/src/commands/context.command.ts b/apps/cli/src/commands/context.command.ts index e4c0a73f..04d475f3 100644 --- a/apps/cli/src/commands/context.command.ts +++ b/apps/cli/src/commands/context.command.ts @@ -694,16 +694,7 @@ export class ContextCommand extends Command { } /** - * Static method to register this command on an existing program - */ - static registerOn(program: Command): Command { - const contextCommand = new ContextCommand(); - program.addCommand(contextCommand); - return contextCommand; - } - - /** - * Alternative registration that returns the command for chaining + * Register this command on an existing program */ static register(program: Command, name?: string): ContextCommand { const contextCommand = new ContextCommand(name); diff --git a/apps/cli/src/commands/export.command.ts b/apps/cli/src/commands/export.command.ts new file mode 100644 index 00000000..0d09efe3 --- /dev/null +++ b/apps/cli/src/commands/export.command.ts @@ -0,0 +1,379 @@ +/** + * @fileoverview Export command for exporting tasks to external systems + * Provides functionality to export tasks to Hamster briefs + */ + +import { Command } from 'commander'; +import chalk from 'chalk'; +import inquirer from 'inquirer'; +import ora, { Ora } from 'ora'; +import { + AuthManager, + AuthenticationError, + type UserContext +} from '@tm/core/auth'; +import { TaskMasterCore, type ExportResult } from '@tm/core'; +import * as ui from '../utils/ui.js'; + +/** + * Result type from export command + */ +export interface ExportCommandResult { + success: boolean; + action: 'export' | 'validate' | 'cancelled'; + result?: ExportResult; + message?: string; +} + +/** + * ExportCommand extending Commander's Command class + * Handles task export to external systems + */ +export class ExportCommand extends Command { + private authManager: AuthManager; + private taskMasterCore?: TaskMasterCore; + private lastResult?: ExportCommandResult; + + constructor(name?: string) { + super(name || 'export'); + + // Initialize auth manager + this.authManager = AuthManager.getInstance(); + + // Configure the command + this.description('Export tasks to external systems (e.g., Hamster briefs)'); + + // Add options + this.option('--org ', 'Organization ID to export to'); + this.option('--brief ', 'Brief ID to export tasks to'); + this.option('--tag ', 'Export tasks from a specific tag'); + this.option( + '--status ', + 'Filter tasks by status (pending, in-progress, done, etc.)' + ); + this.option('--exclude-subtasks', 'Exclude subtasks from export'); + this.option('-y, --yes', 'Skip confirmation prompt'); + + // Accept optional positional argument for brief ID or Hamster URL + this.argument('[briefOrUrl]', 'Brief ID or Hamster brief URL'); + + // Default action + this.action(async (briefOrUrl?: string, options?: any) => { + await this.executeExport(briefOrUrl, options); + }); + } + + /** + * Initialize the TaskMasterCore + */ + private async initializeServices(): Promise { + if (this.taskMasterCore) { + return; + } + + try { + // Initialize TaskMasterCore + this.taskMasterCore = await TaskMasterCore.create({ + projectPath: process.cwd() + }); + } catch (error) { + throw new Error( + `Failed to initialize services: ${(error as Error).message}` + ); + } + } + + /** + * Execute the export command + */ + private async executeExport( + briefOrUrl?: string, + options?: any + ): Promise { + let spinner: Ora | undefined; + + try { + // Check authentication + if (!this.authManager.isAuthenticated()) { + ui.displayError('Not authenticated. Run "tm auth login" first.'); + process.exit(1); + } + + // Initialize services + await this.initializeServices(); + + // Get current context + const context = this.authManager.getContext(); + + // Determine org and brief IDs + let orgId = options?.org || context?.orgId; + let briefId = options?.brief || briefOrUrl || context?.briefId; + + // If a URL/ID was provided as argument, resolve it + if (briefOrUrl && !options?.brief) { + spinner = ora('Resolving brief...').start(); + const resolvedBrief = await this.resolveBriefInput(briefOrUrl); + if (resolvedBrief) { + briefId = resolvedBrief.briefId; + orgId = resolvedBrief.orgId; + spinner.succeed('Brief resolved'); + } else { + spinner.fail('Could not resolve brief'); + process.exit(1); + } + } + + // Validate we have necessary IDs + if (!orgId) { + ui.displayError( + 'No organization selected. Run "tm context org" or use --org flag.' + ); + process.exit(1); + } + + if (!briefId) { + ui.displayError( + 'No brief specified. Run "tm context brief", provide a brief ID/URL, or use --brief flag.' + ); + process.exit(1); + } + + // Confirm export if not auto-confirmed + if (!options?.yes) { + const confirmed = await this.confirmExport(orgId, briefId, context); + if (!confirmed) { + ui.displayWarning('Export cancelled'); + this.lastResult = { + success: false, + action: 'cancelled', + message: 'User cancelled export' + }; + process.exit(0); + } + } + + // Perform export + spinner = ora('Exporting tasks...').start(); + + const exportResult = await this.taskMasterCore!.exportTasks({ + orgId, + briefId, + tag: options?.tag, + status: options?.status, + excludeSubtasks: options?.excludeSubtasks || false + }); + + if (exportResult.success) { + spinner.succeed( + `Successfully exported ${exportResult.taskCount} task(s) to brief` + ); + + // Display summary + console.log(chalk.cyan('\nšŸ“¤ Export Summary\n')); + console.log(chalk.white(` Organization: ${orgId}`)); + console.log(chalk.white(` Brief: ${briefId}`)); + console.log(chalk.white(` Tasks exported: ${exportResult.taskCount}`)); + if (options?.tag) { + console.log(chalk.gray(` Tag: ${options.tag}`)); + } + if (options?.status) { + console.log(chalk.gray(` Status filter: ${options.status}`)); + } + + if (exportResult.message) { + console.log(chalk.gray(`\n ${exportResult.message}`)); + } + } else { + spinner.fail('Export failed'); + if (exportResult.error) { + console.error(chalk.red(`\nāœ— ${exportResult.error.message}`)); + } + } + + this.lastResult = { + success: exportResult.success, + action: 'export', + result: exportResult + }; + } catch (error: any) { + if (spinner?.isSpinning) spinner.fail('Export failed'); + this.handleError(error); + process.exit(1); + } + } + + /** + * Resolve brief input to get brief and org IDs + */ + private async resolveBriefInput( + briefOrUrl: string + ): Promise<{ briefId: string; orgId: string } | null> { + try { + // Extract brief ID from input + const briefId = this.extractBriefId(briefOrUrl); + if (!briefId) { + return null; + } + + // Fetch brief to get organization + const brief = await this.authManager.getBrief(briefId); + if (!brief) { + ui.displayError('Brief not found or you do not have access'); + return null; + } + + return { + briefId: brief.id, + orgId: brief.accountId + }; + } catch (error) { + console.error(chalk.red(`Failed to resolve brief: ${error}`)); + return null; + } + } + + /** + * Extract a brief ID from raw input (ID or URL) + */ + private extractBriefId(input: string): string | null { + const raw = input?.trim() ?? ''; + if (!raw) return null; + + const parseUrl = (s: string): URL | null => { + try { + return new URL(s); + } catch {} + try { + return new URL(`https://${s}`); + } catch {} + return null; + }; + + const fromParts = (path: string): string | null => { + const parts = path.split('/').filter(Boolean); + const briefsIdx = parts.lastIndexOf('briefs'); + const candidate = + briefsIdx >= 0 && parts.length > briefsIdx + 1 + ? parts[briefsIdx + 1] + : parts[parts.length - 1]; + return candidate?.trim() || null; + }; + + // Try URL parsing + const url = parseUrl(raw); + if (url) { + const qId = url.searchParams.get('id') || url.searchParams.get('briefId'); + const candidate = (qId || fromParts(url.pathname)) ?? null; + if (candidate) { + if (this.isLikelyId(candidate) || candidate.length >= 8) { + return candidate; + } + } + } + + // Check if it looks like a path + if (raw.includes('/')) { + const candidate = fromParts(raw); + if (candidate && (this.isLikelyId(candidate) || candidate.length >= 8)) { + return candidate; + } + } + + // Return raw if it looks like an ID + return raw; + } + + /** + * Check if a string looks like a brief ID + */ + private isLikelyId(value: string): boolean { + const uuidRegex = + /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; + const ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i; + const slugRegex = /^[A-Za-z0-9_-]{16,}$/; + return ( + uuidRegex.test(value) || ulidRegex.test(value) || slugRegex.test(value) + ); + } + + /** + * Confirm export with the user + */ + private async confirmExport( + orgId: string, + briefId: string, + context: UserContext | null + ): Promise { + console.log(chalk.cyan('\nšŸ“¤ Export Tasks\n')); + + // Show org name if available + if (context?.orgName) { + console.log(chalk.white(` Organization: ${context.orgName}`)); + console.log(chalk.gray(` ID: ${orgId}`)); + } else { + console.log(chalk.white(` Organization ID: ${orgId}`)); + } + + // Show brief info + if (context?.briefName) { + console.log(chalk.white(`\n Brief: ${context.briefName}`)); + console.log(chalk.gray(` ID: ${briefId}`)); + } else { + console.log(chalk.white(`\n Brief ID: ${briefId}`)); + } + + const { confirmed } = await inquirer.prompt([ + { + type: 'confirm', + name: 'confirmed', + message: 'Do you want to proceed with export?', + default: true + } + ]); + + return confirmed; + } + + /** + * Handle errors + */ + private handleError(error: any): void { + if (error instanceof AuthenticationError) { + console.error(chalk.red(`\nāœ— ${error.message}`)); + + if (error.code === 'NOT_AUTHENTICATED') { + ui.displayWarning('Please authenticate first: tm auth login'); + } + } else { + const msg = error?.message ?? String(error); + console.error(chalk.red(`Error: ${msg}`)); + + if (error.stack && process.env.DEBUG) { + console.error(chalk.gray(error.stack)); + } + } + } + + /** + * Get the last export result (useful for testing) + */ + public getLastResult(): ExportCommandResult | undefined { + return this.lastResult; + } + + /** + * Clean up resources + */ + async cleanup(): Promise { + // No resources to clean up + } + + /** + * Register this command on an existing program + */ + static register(program: Command, name?: string): ExportCommand { + const exportCommand = new ExportCommand(name); + program.addCommand(exportCommand); + return exportCommand; + } +} diff --git a/apps/cli/src/commands/list.command.ts b/apps/cli/src/commands/list.command.ts index 57adf824..38e4184b 100644 --- a/apps/cli/src/commands/list.command.ts +++ b/apps/cli/src/commands/list.command.ts @@ -246,7 +246,7 @@ export class ListTasksCommand extends Command { task.subtasks.forEach((subtask) => { const subIcon = STATUS_ICONS[subtask.status]; console.log( - ` ${chalk.gray(`${task.id}.${subtask.id}`)} ${subIcon} ${chalk.gray(subtask.title)}` + ` ${chalk.gray(String(subtask.id))} ${subIcon} ${chalk.gray(subtask.title)}` ); }); } @@ -281,9 +281,14 @@ export class ListTasksCommand extends Command { const priorityBreakdown = getPriorityBreakdown(tasks); // Find next task following the same logic as findNextTask - const nextTask = this.findNextTask(tasks); + const nextTaskInfo = this.findNextTask(tasks); - // Display dashboard boxes + // Get the full task object with complexity data already included + const nextTask = nextTaskInfo + ? tasks.find((t) => String(t.id) === String(nextTaskInfo.id)) + : undefined; + + // Display dashboard boxes (nextTask already has complexity from storage enrichment) displayDashboards( taskStats, subtaskStats, @@ -292,7 +297,7 @@ export class ListTasksCommand extends Command { nextTask ); - // Task table - no title, just show the table directly + // Task table console.log( ui.createTaskTable(tasks, { showSubtasks: withSubtasks, @@ -303,14 +308,16 @@ export class ListTasksCommand extends Command { // Display recommended next task section immediately after table if (nextTask) { - // Find the full task object to get description - const fullTask = tasks.find((t) => String(t.id) === String(nextTask.id)); - const description = fullTask ? getTaskDescription(fullTask) : undefined; + const description = getTaskDescription(nextTask); displayRecommendedNextTask({ - ...nextTask, - status: 'pending', // Next task is typically pending - description + id: nextTask.id, + title: nextTask.title, + priority: nextTask.priority, + status: nextTask.status, + dependencies: nextTask.dependencies, + description, + complexity: nextTask.complexity as number | undefined }); } else { displayRecommendedNextTask(undefined); @@ -467,18 +474,7 @@ export class ListTasksCommand extends Command { } /** - * Static method to register this command on an existing program - * This is for gradual migration - allows commands.js to use this - */ - static registerOn(program: Command): Command { - const listCommand = new ListTasksCommand(); - program.addCommand(listCommand); - return listCommand; - } - - /** - * Alternative registration that returns the command for chaining - * Can also configure the command name if needed + * Register this command on an existing program */ static register(program: Command, name?: string): ListTasksCommand { const listCommand = new ListTasksCommand(name); diff --git a/apps/cli/src/commands/set-status.command.ts b/apps/cli/src/commands/set-status.command.ts index d6ae39c7..25dc40bd 100644 --- a/apps/cli/src/commands/set-status.command.ts +++ b/apps/cli/src/commands/set-status.command.ts @@ -258,9 +258,6 @@ export class SetStatusCommand extends Command { ) ); } - - // Show storage info - console.log(chalk.gray(`\nUsing ${result.storageType} storage`)); } /** @@ -290,18 +287,7 @@ export class SetStatusCommand extends Command { } /** - * Static method to register this command on an existing program - * This is for gradual migration - allows commands.js to use this - */ - static registerOn(program: Command): Command { - const setStatusCommand = new SetStatusCommand(); - program.addCommand(setStatusCommand); - return setStatusCommand; - } - - /** - * Alternative registration that returns the command for chaining - * Can also configure the command name if needed + * Register this command on an existing program */ static register(program: Command, name?: string): SetStatusCommand { const setStatusCommand = new SetStatusCommand(name); diff --git a/apps/cli/src/commands/show.command.ts b/apps/cli/src/commands/show.command.ts index ba19779c..f41cb786 100644 --- a/apps/cli/src/commands/show.command.ts +++ b/apps/cli/src/commands/show.command.ts @@ -322,18 +322,7 @@ export class ShowCommand extends Command { } /** - * Static method to register this command on an existing program - * This is for gradual migration - allows commands.js to use this - */ - static registerOn(program: Command): Command { - const showCommand = new ShowCommand(); - program.addCommand(showCommand); - return showCommand; - } - - /** - * Alternative registration that returns the command for chaining - * Can also configure the command name if needed + * Register this command on an existing program */ static register(program: Command, name?: string): ShowCommand { const showCommand = new ShowCommand(name); diff --git a/apps/cli/src/commands/start.command.ts b/apps/cli/src/commands/start.command.ts index f5ca0a5b..ec82c2e5 100644 --- a/apps/cli/src/commands/start.command.ts +++ b/apps/cli/src/commands/start.command.ts @@ -493,16 +493,7 @@ export class StartCommand extends Command { } /** - * Static method to register this command on an existing program - */ - static registerOn(program: Command): Command { - const startCommand = new StartCommand(); - program.addCommand(startCommand); - return startCommand; - } - - /** - * Alternative registration that returns the command for chaining + * Register this command on an existing program */ static register(program: Command, name?: string): StartCommand { const startCommand = new StartCommand(name); diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index ce0405ee..fbf8757a 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -10,6 +10,15 @@ export { AuthCommand } from './commands/auth.command.js'; export { ContextCommand } from './commands/context.command.js'; export { StartCommand } from './commands/start.command.js'; export { SetStatusCommand } from './commands/set-status.command.js'; +export { ExportCommand } from './commands/export.command.js'; + +// Command Registry +export { + CommandRegistry, + registerAllCommands, + registerCommandsByCategory, + type CommandMetadata +} from './command-registry.js'; // UI utilities (for other commands to use) export * as ui from './utils/ui.js'; diff --git a/apps/cli/src/ui/components/dashboard.component.ts b/apps/cli/src/ui/components/dashboard.component.ts index 56ffeb70..2f21d0c2 100644 --- a/apps/cli/src/ui/components/dashboard.component.ts +++ b/apps/cli/src/ui/components/dashboard.component.ts @@ -6,6 +6,7 @@ import chalk from 'chalk'; import boxen from 'boxen'; import type { Task, TaskPriority } from '@tm/core/types'; +import { getComplexityWithColor } from '../../utils/ui.js'; /** * Statistics for task collection @@ -479,7 +480,7 @@ export function displayDependencyDashboard( ? chalk.cyan(nextTask.dependencies.join(', ')) : chalk.gray('None') }\n` + - `Complexity: ${nextTask?.complexity || chalk.gray('N/A')}`; + `Complexity: ${nextTask?.complexity !== undefined ? getComplexityWithColor(nextTask.complexity) : chalk.gray('N/A')}`; return content; } diff --git a/apps/cli/src/ui/components/next-task.component.ts b/apps/cli/src/ui/components/next-task.component.ts index beb5d7cc..91822a45 100644 --- a/apps/cli/src/ui/components/next-task.component.ts +++ b/apps/cli/src/ui/components/next-task.component.ts @@ -6,6 +6,7 @@ import chalk from 'chalk'; import boxen from 'boxen'; import type { Task } from '@tm/core/types'; +import { getComplexityWithColor } from '../../utils/ui.js'; /** * Next task display options @@ -17,6 +18,7 @@ export interface NextTaskDisplayOptions { status?: string; dependencies?: (string | number)[]; description?: string; + complexity?: number; } /** @@ -82,6 +84,11 @@ export function displayRecommendedNextTask( : chalk.cyan(task.dependencies.join(', ')); content.push(`Dependencies: ${depsDisplay}`); + // Complexity with color and label + if (typeof task.complexity === 'number') { + content.push(`Complexity: ${getComplexityWithColor(task.complexity)}`); + } + // Description if available if (task.description) { content.push(''); diff --git a/apps/cli/src/ui/components/task-detail.component.ts b/apps/cli/src/ui/components/task-detail.component.ts index 218d46dc..2f874d2b 100644 --- a/apps/cli/src/ui/components/task-detail.component.ts +++ b/apps/cli/src/ui/components/task-detail.component.ts @@ -9,7 +9,11 @@ import Table from 'cli-table3'; import { marked, MarkedExtension } from 'marked'; import { markedTerminal } from 'marked-terminal'; import type { Task } from '@tm/core/types'; -import { getStatusWithColor, getPriorityWithColor } from '../../utils/ui.js'; +import { + getStatusWithColor, + getPriorityWithColor, + getComplexityWithColor +} from '../../utils/ui.js'; // Configure marked to use terminal renderer with subtle colors marked.use( @@ -108,7 +112,9 @@ export function displayTaskProperties(task: Task): void { getStatusWithColor(task.status), getPriorityWithColor(task.priority), deps, - 'N/A', + typeof task.complexity === 'number' + ? getComplexityWithColor(task.complexity) + : chalk.gray('N/A'), task.description || '' ].join('\n'); @@ -186,8 +192,7 @@ export function displaySubtasks( status: any; description?: string; dependencies?: string[]; - }>, - parentId: string | number + }> ): void { const terminalWidth = process.stdout.columns * 0.95 || 100; // Display subtasks header @@ -222,7 +227,7 @@ export function displaySubtasks( }); subtasks.forEach((subtask) => { - const subtaskId = `${parentId}.${subtask.id}`; + const subtaskId = String(subtask.id); // Format dependencies const deps = @@ -323,7 +328,7 @@ export function displayTaskDetails( console.log(chalk.gray(` No subtasks with status '${statusFilter}'`)); } else if (filteredSubtasks.length > 0) { console.log(); // Empty line for spacing - displaySubtasks(filteredSubtasks, task.id); + displaySubtasks(filteredSubtasks); } } diff --git a/apps/cli/src/utils/auto-update.ts b/apps/cli/src/utils/auto-update.ts index 7b2f762d..3ad0f911 100644 --- a/apps/cli/src/utils/auto-update.ts +++ b/apps/cli/src/utils/auto-update.ts @@ -158,10 +158,18 @@ export function displayUpgradeNotification( export async function performAutoUpdate( latestVersion: string ): Promise { - if (process.env.TASKMASTER_SKIP_AUTO_UPDATE === '1' || process.env.CI) { - console.log( - chalk.dim('Skipping auto-update (TASKMASTER_SKIP_AUTO_UPDATE/CI).') - ); + if ( + process.env.TASKMASTER_SKIP_AUTO_UPDATE === '1' || + process.env.CI || + process.env.NODE_ENV === 'test' + ) { + const reason = + process.env.TASKMASTER_SKIP_AUTO_UPDATE === '1' + ? 'TASKMASTER_SKIP_AUTO_UPDATE=1' + : process.env.CI + ? 'CI environment' + : 'NODE_ENV=test'; + console.log(chalk.dim(`Skipping auto-update (${reason})`)); return false; } const spinner = ora({ diff --git a/apps/cli/src/utils/ui.ts b/apps/cli/src/utils/ui.ts index 8c8a7141..533bfb0f 100644 --- a/apps/cli/src/utils/ui.ts +++ b/apps/cli/src/utils/ui.ts @@ -84,7 +84,23 @@ export function getPriorityWithColor(priority: TaskPriority): string { } /** - * Get colored complexity display + * Get complexity color and label based on score thresholds + */ +function getComplexityLevel(score: number): { + color: (text: string) => string; + label: string; +} { + if (score >= 7) { + return { color: chalk.hex('#CC0000'), label: 'High' }; + } else if (score >= 4) { + return { color: chalk.hex('#FF8800'), label: 'Medium' }; + } else { + return { color: chalk.green, label: 'Low' }; + } +} + +/** + * Get colored complexity display with dot indicator (simple format) */ export function getComplexityWithColor(complexity: number | string): string { const score = @@ -94,13 +110,20 @@ export function getComplexityWithColor(complexity: number | string): string { return chalk.gray('N/A'); } - if (score >= 8) { - return chalk.red.bold(`${score} (High)`); - } else if (score >= 5) { - return chalk.yellow(`${score} (Medium)`); - } else { - return chalk.green(`${score} (Low)`); + const { color } = getComplexityLevel(score); + return color(`ā— ${score}`); +} + +/** + * Get colored complexity display with /10 format (for dashboards) + */ +export function getComplexityWithScore(complexity: number | undefined): string { + if (typeof complexity !== 'number') { + return chalk.gray('N/A'); } + + const { color, label } = getComplexityLevel(complexity); + return color(`${complexity}/10 (${label})`); } /** @@ -263,12 +286,12 @@ export function createTaskTable( // Adjust column widths to better match the original layout const baseColWidths = showComplexity ? [ - Math.floor(terminalWidth * 0.06), + Math.floor(terminalWidth * 0.1), Math.floor(terminalWidth * 0.4), Math.floor(terminalWidth * 0.15), - Math.floor(terminalWidth * 0.12), + Math.floor(terminalWidth * 0.1), Math.floor(terminalWidth * 0.2), - Math.floor(terminalWidth * 0.12) + Math.floor(terminalWidth * 0.1) ] // ID, Title, Status, Priority, Dependencies, Complexity : [ Math.floor(terminalWidth * 0.08), @@ -323,8 +346,12 @@ export function createTaskTable( } if (showComplexity) { - // Show N/A if no complexity score - row.push(chalk.gray('N/A')); + // Show complexity score from report if available + if (typeof task.complexity === 'number') { + row.push(getComplexityWithColor(task.complexity)); + } else { + row.push(chalk.gray('N/A')); + } } table.push(row); @@ -350,7 +377,11 @@ export function createTaskTable( } if (showComplexity) { - subRow.push(chalk.gray('--')); + const complexityDisplay = + typeof subtask.complexity === 'number' + ? getComplexityWithColor(subtask.complexity) + : '--'; + subRow.push(chalk.gray(complexityDisplay)); } table.push(subRow); diff --git a/apps/docs/README.md b/apps/docs/README.md index 9b1824d4..3998feeb 100644 --- a/apps/docs/README.md +++ b/apps/docs/README.md @@ -1,22 +1,24 @@ # Task Master Documentation -Welcome to the Task Master documentation. Use the links below to navigate to the information you need: +Welcome to the Task Master documentation. This documentation site provides comprehensive guides for getting started with Task Master. ## Getting Started -- [Configuration Guide](archive/configuration.md) - Set up environment variables and customize Task Master -- [Tutorial](archive/ctutorial.md) - Step-by-step guide to getting started with Task Master +- [Quick Start Guide](/getting-started/quick-start) - Complete setup and first-time usage guide +- [Requirements](/getting-started/quick-start/requirements) - What you need to get started +- [Installation](/getting-started/quick-start/installation) - How to install Task Master -## Reference +## Core Capabilities -- [Command Reference](archive/ccommand-reference.md) - Complete list of all available commands -- [Task Structure](archive/ctask-structure.md) - Understanding the task format and features +- [MCP Tools](/capabilities/mcp) - Model Control Protocol integration +- [CLI Commands](/capabilities/cli-root-commands) - Command line interface reference +- [Task Structure](/capabilities/task-structure) - Understanding tasks and subtasks -## Examples & Licensing +## Best Practices -- [Example Interactions](archive/cexamples.md) - Common Cursor AI interaction examples -- [Licensing Information](archive/clicensing.md) - Detailed information about the license +- [Advanced Configuration](/best-practices/configuration-advanced) - Detailed configuration options +- [Advanced Tasks](/best-practices/advanced-tasks) - Working with complex task structures ## Need More Help? -If you can't find what you're looking for in these docs, please check the [main README](../README.md) or visit our [GitHub repository](https://github.com/eyaltoledano/claude-task-master). +If you can't find what you're looking for in these docs, please check the root README.md or visit our [GitHub repository](https://github.com/eyaltoledano/claude-task-master). diff --git a/apps/docs/capabilities/cli-root-commands.mdx b/apps/docs/capabilities/cli-root-commands.mdx index bfe2591b..3a7cbf49 100644 --- a/apps/docs/capabilities/cli-root-commands.mdx +++ b/apps/docs/capabilities/cli-root-commands.mdx @@ -156,7 +156,7 @@ sidebarTitle: "CLI Commands" # Use an alternative tasks file task-master analyze-complexity --file=custom-tasks.json - # Use Perplexity AI for research-backed complexity analysis + # Use your configured research model for research-backed complexity analysis task-master analyze-complexity --research ``` diff --git a/apps/docs/docs.json b/apps/docs/docs.json index 973ec67d..787a85e0 100644 --- a/apps/docs/docs.json +++ b/apps/docs/docs.json @@ -32,6 +32,7 @@ "getting-started/quick-start/execute-quick" ] }, + "getting-started/api-keys", "getting-started/faq", "getting-started/contribute" ] diff --git a/apps/docs/getting-started/api-keys.mdx b/apps/docs/getting-started/api-keys.mdx new file mode 100644 index 00000000..a888a4fb --- /dev/null +++ b/apps/docs/getting-started/api-keys.mdx @@ -0,0 +1,267 @@ +# API Keys Configuration + +Task Master supports multiple AI providers through environment variables. This page lists all available API keys and their configuration requirements. + +## Required API Keys + +> **Note**: At least one required API key must be configured for Task Master to function. +> +> "Required: Yes" below means "required to use that specific provider," not "required globally." You only need at least one provider configured. + +### ANTHROPIC_API_KEY (Recommended) +- **Provider**: Anthropic Claude models +- **Format**: `sk-ant-api03-...` +- **Required**: āœ… **Yes** +- **Models**: Claude 3.5 Sonnet, Claude 3 Haiku, Claude 3 Opus +- **Get Key**: [Anthropic Console](https://console.anthropic.com/) + +```bash +ANTHROPIC_API_KEY="sk-ant-api03-your-key-here" +``` + +### PERPLEXITY_API_KEY (Highly Recommended for Research) +- **Provider**: Perplexity AI (Research features) +- **Format**: `pplx-...` +- **Required**: āœ… **Yes** +- **Purpose**: Enables research-backed task expansions and updates +- **Models**: Perplexity Sonar models +- **Get Key**: [Perplexity API](https://www.perplexity.ai/settings/api) + +```bash +PERPLEXITY_API_KEY="pplx-your-key-here" +``` + +### OPENAI_API_KEY +- **Provider**: OpenAI GPT models +- **Format**: `sk-proj-...` or `sk-...` +- **Required**: āœ… **Yes** +- **Models**: GPT-4, GPT-4 Turbo, GPT-3.5 Turbo, O1 models +- **Get Key**: [OpenAI Platform](https://platform.openai.com/api-keys) + +```bash +OPENAI_API_KEY="sk-proj-your-key-here" +``` + +### GOOGLE_API_KEY +- **Provider**: Google Gemini models +- **Format**: Various formats +- **Required**: āœ… **Yes** +- **Models**: Gemini Pro, Gemini Flash, Gemini Ultra +- **Get Key**: [Google AI Studio](https://aistudio.google.com/app/apikey) +- **Alternative**: Use `GOOGLE_APPLICATION_CREDENTIALS` for service account (Google Vertex) + +```bash +GOOGLE_API_KEY="your-google-api-key-here" +``` + +### GROQ_API_KEY +- **Provider**: Groq (High-performance inference) +- **Required**: āœ… **Yes** +- **Models**: Llama models, Mixtral models (via Groq) +- **Get Key**: [Groq Console](https://console.groq.com/keys) + +```bash +GROQ_API_KEY="your-groq-key-here" +``` + +### OPENROUTER_API_KEY +- **Provider**: OpenRouter (Multiple model access) +- **Required**: āœ… **Yes** +- **Models**: Access to various models through single API +- **Get Key**: [OpenRouter](https://openrouter.ai/keys) + +```bash +OPENROUTER_API_KEY="your-openrouter-key-here" +``` + +### AZURE_OPENAI_API_KEY +- **Provider**: Azure OpenAI Service +- **Required**: āœ… **Yes** +- **Requirements**: Also requires `AZURE_OPENAI_ENDPOINT` configuration +- **Models**: GPT models via Azure +- **Get Key**: [Azure Portal](https://portal.azure.com/) + +```bash +AZURE_OPENAI_API_KEY="your-azure-key-here" +``` + +### XAI_API_KEY +- **Provider**: xAI (Grok) models +- **Required**: āœ… **Yes** +- **Models**: Grok models +- **Get Key**: [xAI Console](https://console.x.ai/) + +```bash +XAI_API_KEY="your-xai-key-here" +``` + +## Optional API Keys + +> **Note**: These API keys are optional - providers will work without them or use alternative authentication methods. + +### AWS_ACCESS_KEY_ID (Bedrock) +- **Provider**: AWS Bedrock +- **Required**: āŒ **No** (uses AWS credential chain) +- **Models**: Claude models via AWS Bedrock +- **Authentication**: Uses AWS credential chain (profiles, IAM roles, etc.) +- **Get Key**: [AWS Console](https://console.aws.amazon.com/iam/) + +```bash +# Optional - AWS credential chain is preferred +AWS_ACCESS_KEY_ID="your-aws-access-key" +AWS_SECRET_ACCESS_KEY="your-aws-secret-key" +``` + +### CLAUDE_CODE_API_KEY +- **Provider**: Claude Code CLI +- **Required**: āŒ **No** (uses OAuth tokens) +- **Purpose**: Integration with local Claude Code CLI +- **Authentication**: Uses OAuth tokens, no API key needed + +```bash +# Not typically needed +CLAUDE_CODE_API_KEY="not-usually-required" +``` + +### GEMINI_API_KEY +- **Provider**: Gemini CLI +- **Required**: āŒ **No** (uses OAuth authentication) +- **Purpose**: Integration with Gemini CLI +- **Authentication**: Primarily uses OAuth via CLI, API key is optional + +```bash +# Optional - OAuth via CLI is preferred +GEMINI_API_KEY="your-gemini-key-here" +``` + +### GROK_CLI_API_KEY +- **Provider**: Grok CLI +- **Required**: āŒ **No** (can use CLI config) +- **Purpose**: Integration with Grok CLI +- **Authentication**: Can use Grok CLI's own config file + +```bash +# Optional - CLI config is preferred +GROK_CLI_API_KEY="your-grok-cli-key" +``` + +### OLLAMA_API_KEY +- **Provider**: Ollama (Local/Remote) +- **Required**: āŒ **No** (local installation doesn't need key) +- **Purpose**: For remote Ollama servers that require authentication +- **Requirements**: Only needed for remote servers with authentication +- **Note**: Not needed for local Ollama installations + +```bash +# Only needed for remote Ollama servers +OLLAMA_API_KEY="your-ollama-api-key-here" +``` + +### GITHUB_API_KEY +- **Provider**: GitHub (Import/Export features) +- **Format**: `ghp_...` or `github_pat_...` +- **Required**: āŒ **No** (for GitHub features only) +- **Purpose**: GitHub import/export features +- **Get Key**: [GitHub Settings](https://github.com/settings/tokens) + +```bash +GITHUB_API_KEY="ghp-your-github-key-here" +``` + +## Configuration Methods + +### Method 1: Environment File (.env) +Create a `.env` file in your project root: + +```bash +# Copy from .env.example +cp .env.example .env + +# Edit with your keys +vim .env +``` + +### Method 2: System Environment Variables +```bash +export ANTHROPIC_API_KEY="your-key-here" +export PERPLEXITY_API_KEY="your-key-here" +# ... other keys +``` + +### Method 3: MCP Server Configuration +For Claude Code integration, configure keys in `.mcp.json`: + +```json +{ + "mcpServers": { + "task-master-ai": { + "command": "npx", + "args": ["-y", "task-master-ai"], + "env": { + "ANTHROPIC_API_KEY": "your-key-here", + "PERPLEXITY_API_KEY": "your-key-here", + "OPENAI_API_KEY": "your-key-here" + } + } + } +} +``` + +## Key Requirements + +### Minimum Requirements +- **At least one** AI provider key is required +- **ANTHROPIC_API_KEY** is recommended as the primary provider +- **PERPLEXITY_API_KEY** is highly recommended for research features + +### Provider-Specific Requirements +- **Azure OpenAI**: Requires both `AZURE_OPENAI_API_KEY` and `AZURE_OPENAI_ENDPOINT` configuration +- **Google Vertex**: Requires `VERTEX_PROJECT_ID` and `VERTEX_LOCATION` environment variables +- **AWS Bedrock**: Uses AWS credential chain (profiles, IAM roles, etc.) instead of API keys +- **Ollama**: Only needs API key for remote servers with authentication +- **CLI Providers**: Gemini CLI, Grok CLI, and Claude Code use OAuth/CLI config instead of API keys + +## Model Configuration + +After setting up API keys, configure which models to use: + +```bash +# Interactive model setup +task-master models --setup + +# Set specific models +task-master models --set-main claude-3-5-sonnet-20241022 +task-master models --set-research perplexity-llama-3.1-sonar-large-128k-online +task-master models --set-fallback gpt-4o-mini +``` + +## Security Best Practices + +1. **Never commit API keys** to version control +2. **Use .env files** and add them to `.gitignore` +3. **Rotate keys regularly** especially if compromised +4. **Use minimal permissions** for service accounts +5. **Monitor usage** to detect unauthorized access + +## Troubleshooting + +### Key Validation +```bash +# Check if keys are properly configured +task-master models + +# Test specific provider +task-master add-task --prompt="test task" --model=claude-3-5-sonnet-20241022 +``` + +### Common Issues +- **Invalid key format**: Check the expected format for each provider +- **Insufficient permissions**: Ensure keys have necessary API access +- **Rate limits**: Some providers have usage limits +- **Regional restrictions**: Some models may not be available in all regions + +### Getting Help +If you encounter issues with API key configuration: +- Check the [FAQ](/getting-started/faq) for common solutions +- Join our [Discord community](https://discord.gg/fWJkU7rf) for support +- Report issues on [GitHub](https://github.com/eyaltoledano/claude-task-master/issues) \ No newline at end of file diff --git a/apps/docs/getting-started/quick-start/configuration-quick.mdx b/apps/docs/getting-started/quick-start/configuration-quick.mdx index 17908753..74325602 100644 --- a/apps/docs/getting-started/quick-start/configuration-quick.mdx +++ b/apps/docs/getting-started/quick-start/configuration-quick.mdx @@ -108,5 +108,5 @@ You don’t need to configure everything up front. Most settings can be left as -For advanced configuration options and detailed customization, see our [Advanced Configuration Guide](/docs/best-practices/configuration-advanced) page. +For advanced configuration options and detailed customization, see our [Advanced Configuration Guide](/best-practices/configuration-advanced) page. \ No newline at end of file diff --git a/apps/docs/getting-started/quick-start/execute-quick.mdx b/apps/docs/getting-started/quick-start/execute-quick.mdx index 3c4e884d..80ccdac6 100644 --- a/apps/docs/getting-started/quick-start/execute-quick.mdx +++ b/apps/docs/getting-started/quick-start/execute-quick.mdx @@ -56,4 +56,4 @@ If you ran into problems and had to debug errors you can create new rules as you By now you have all you need to get started executing code faster and smarter with Task Master. -If you have any questions please check out [Frequently Asked Questions](/docs/getting-started/faq) +If you have any questions please check out [Frequently Asked Questions](/getting-started/faq) diff --git a/apps/docs/getting-started/quick-start/installation.mdx b/apps/docs/getting-started/quick-start/installation.mdx index 8fd128e5..08120c39 100644 --- a/apps/docs/getting-started/quick-start/installation.mdx +++ b/apps/docs/getting-started/quick-start/installation.mdx @@ -30,6 +30,19 @@ cursor://anysphere.cursor-deeplink/mcp/install?name=taskmaster-ai&config=eyJjb21 ``` > **Note:** After clicking the link, you'll still need to add your API keys to the configuration. The link installs the MCP server with placeholder keys that you'll need to replace with your actual API keys. + +### Claude Code Quick Install + +For Claude Code users: + +```bash +claude mcp add taskmaster-ai -- npx -y task-master-ai +``` + +Don't forget to add your API keys to the configuration: +- in the root .env of your Project +- in the "env" section of your mcp config for taskmaster-ai + ## Installation Options diff --git a/apps/docs/getting-started/quick-start/quick-start.mdx b/apps/docs/getting-started/quick-start/quick-start.mdx index c1f44a16..f2b349a3 100644 --- a/apps/docs/getting-started/quick-start/quick-start.mdx +++ b/apps/docs/getting-started/quick-start/quick-start.mdx @@ -6,13 +6,13 @@ sidebarTitle: "Quick Start" This guide is for new users who want to start using Task Master with minimal setup time. It covers: -- [Requirements](/docs/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key. -- [Installation](/docs/getting-started/quick-start/installation): How to Install Task Master. -- [Configuration](/docs/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more. -- [PRD](/docs/getting-started/quick-start/prd-quick): Writing and parsing your first PRD. -- [Task Setup](/docs/getting-started/quick-start/tasks-quick): Preparing your tasks for execution. -- [Executing Tasks](/docs/getting-started/quick-start/execute-quick): Using Task Master to execute tasks. -- [Rules & Context](/docs/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time. +- [Requirements](/getting-started/quick-start/requirements): You will need Node.js and an AI model API Key. +- [Installation](/getting-started/quick-start/installation): How to Install Task Master. +- [Configuration](/getting-started/quick-start/configuration-quick): Setting up your API Key, MCP, and more. +- [PRD](/getting-started/quick-start/prd-quick): Writing and parsing your first PRD. +- [Task Setup](/getting-started/quick-start/tasks-quick): Preparing your tasks for execution. +- [Executing Tasks](/getting-started/quick-start/execute-quick): Using Task Master to execute tasks. +- [Rules & Context](/getting-started/quick-start/rules-quick): Learn how and why to build context in your project over time. By the end of this guide, you'll have everything you need to begin working productively with Task Master. diff --git a/apps/docs/getting-started/quick-start/tasks-quick.mdx b/apps/docs/getting-started/quick-start/tasks-quick.mdx index 85ce8f1b..eef7c634 100644 --- a/apps/docs/getting-started/quick-start/tasks-quick.mdx +++ b/apps/docs/getting-started/quick-start/tasks-quick.mdx @@ -61,9 +61,25 @@ Task Master can provide a complexity report which can be helpful to read before Can you analyze the complexity of our tasks to help me understand which ones need to be broken down further? ``` +The agent will use the `analyze_project_complexity` MCP tool, or you can run it directly with the CLI command: +```bash +task-master analyze-complexity +``` + +For more comprehensive analysis using your configured research model, you can use: +```bash +task-master analyze-complexity --research +``` + + +The `--research` flag uses whatever research model you have configured in `.taskmaster/config.json` (configurable via `task-master models --setup`) for research-backed complexity analysis, providing more informed recommendations. + + You can view the report in a friendly table using: ``` Can you show me the complexity report in a more readable format? ``` -Now you are ready to begin [executing tasks](/docs/getting-started/quick-start/execute-quick) \ No newline at end of file +For more detailed CLI options, see the [Analyze Task Complexity](/capabilities/cli-root-commands#analyze-task-complexity) section. + +Now you are ready to begin [executing tasks](/getting-started/quick-start/execute-quick) \ No newline at end of file diff --git a/apps/docs/introduction.mdx b/apps/docs/introduction.mdx index 17f89164..42ecc560 100644 --- a/apps/docs/introduction.mdx +++ b/apps/docs/introduction.mdx @@ -4,7 +4,7 @@ Welcome to v1 of the Task Master Docs. Expect weekly updates as we expand and re We've organized the docs into three sections depending on your experience level and goals: -### Getting Started - Jump in to [Quick Start](/docs/getting-started/quick-start) +### Getting Started - Jump in to [Quick Start](/getting-started/quick-start) Designed for first-time users. Get set up, create your first PRD, and run your first task. ### Best Practices diff --git a/apps/extension/CHANGELOG.md b/apps/extension/CHANGELOG.md index 5b7cdea4..06aa72f7 100644 --- a/apps/extension/CHANGELOG.md +++ b/apps/extension/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 0.25.5-rc.0 + +### Patch Changes + +- Updated dependencies [[`aaacc3d`](https://github.com/eyaltoledano/claude-task-master/commit/aaacc3dae36247b4de72b2d2697f49e5df6d01e3), [`0079b7d`](https://github.com/eyaltoledano/claude-task-master/commit/0079b7defdad550811f704c470fdd01955d91d4d), [`0b2c696`](https://github.com/eyaltoledano/claude-task-master/commit/0b2c6967c4605c33a100cff16f6ce8ff09ad06f0), [`18aa416`](https://github.com/eyaltoledano/claude-task-master/commit/18aa416035f44345bde1c7321490345733a5d042), [`18aa416`](https://github.com/eyaltoledano/claude-task-master/commit/18aa416035f44345bde1c7321490345733a5d042), [`738ec51`](https://github.com/eyaltoledano/claude-task-master/commit/738ec51c049a295a12839b2dfddaf05e23b8fede), [`d67b81d`](https://github.com/eyaltoledano/claude-task-master/commit/d67b81d25ddd927fabb6f5deb368e8993519c541), [`b5fe723`](https://github.com/eyaltoledano/claude-task-master/commit/b5fe723f8ead928e9f2dbde13b833ee70ac3382d), [`2b69936`](https://github.com/eyaltoledano/claude-task-master/commit/2b69936ee7b34346d6de5175af20e077359e2e2a), [`986ac11`](https://github.com/eyaltoledano/claude-task-master/commit/986ac117aee00bcd3e6830a0f76e1ad6d10e0bca), [`20004a3`](https://github.com/eyaltoledano/claude-task-master/commit/20004a39ea848f747e1ff48981bfe176554e4055)]: + - task-master-ai@0.28.0-rc.0 + ## 0.25.4 ### Patch Changes diff --git a/apps/extension/package.json b/apps/extension/package.json index 705cb9bd..69fc26c4 100644 --- a/apps/extension/package.json +++ b/apps/extension/package.json @@ -3,7 +3,7 @@ "private": true, "displayName": "TaskMaster", "description": "A visual Kanban board interface for TaskMaster projects in VS Code", - "version": "0.25.4", + "version": "0.25.5-rc.0", "publisher": "Hamster", "icon": "assets/icon.png", "engines": { @@ -240,7 +240,7 @@ "check-types": "tsc --noEmit" }, "dependencies": { - "task-master-ai": "0.27.3" + "task-master-ai": "*" }, "devDependencies": { "@dnd-kit/core": "^6.3.1", @@ -276,7 +276,8 @@ "react-dom": "^19.0.0", "tailwind-merge": "^3.3.1", "tailwindcss": "4.1.11", - "typescript": "^5.7.3" + "typescript": "^5.9.2", + "@tm/core": "*" }, "overrides": { "glob@<8": "^10.4.5", diff --git a/apps/extension/package.publish.json b/apps/extension/package.publish.json index 97e6063e..29b17f13 100644 --- a/apps/extension/package.publish.json +++ b/apps/extension/package.publish.json @@ -2,7 +2,7 @@ "name": "task-master-hamster", "displayName": "Taskmaster AI", "description": "A visual Kanban board interface for Taskmaster projects in VS Code", - "version": "0.23.1", + "version": "0.25.3", "publisher": "Hamster", "icon": "assets/icon.png", "engines": { diff --git a/apps/extension/tsconfig.json b/apps/extension/tsconfig.json index 46740e8e..b8d85d25 100644 --- a/apps/extension/tsconfig.json +++ b/apps/extension/tsconfig.json @@ -5,7 +5,6 @@ "outDir": "out", "lib": ["ES2022", "DOM"], "sourceMap": true, - "rootDir": "src", "strict": true /* enable all strict type-checking options */, "moduleResolution": "Node", "esModuleInterop": true, @@ -21,8 +20,10 @@ "@/*": ["./src/*"], "@/components/*": ["./src/components/*"], "@/lib/*": ["./src/lib/*"], - "@tm/core": ["../core/src"] + "@tm/core": ["../../packages/tm-core/src/index.ts"], + "@tm/core/*": ["../../packages/tm-core/src/*"] } }, + "include": ["src/**/*"], "exclude": ["node_modules", ".vscode-test", "out", "dist"] } diff --git a/docs/claude-code-integration.md b/docs/claude-code-integration.md new file mode 100644 index 00000000..dba1c5b9 --- /dev/null +++ b/docs/claude-code-integration.md @@ -0,0 +1,231 @@ +# TODO: Move to apps/docs inside our documentation website + +# Claude Code Integration Guide + +This guide covers how to use Task Master with Claude Code AI SDK integration for enhanced AI-powered development workflows. + +## Overview + +Claude Code integration allows Task Master to leverage the Claude Code CLI for AI operations without requiring direct API keys. The integration uses OAuth tokens managed by the Claude Code CLI itself. + +## Authentication Setup + +The Claude Code provider uses token authentication managed by the Claude Code CLI. + +### Prerequisites + +1. **Install Claude Code CLI** (if not already installed): + + ```bash + # Installation method depends on your system + # Follow Claude Code documentation for installation + ``` + +2. **Set up OAuth token** using Claude Code CLI: + + ```bash + claude setup-token + ``` + + This command will: + - Guide you through OAuth authentication + - Store the token securely for CLI usage + - Enable Task Master to use Claude Code without manual API key configuration + +### Authentication Priority + +Task Master will attempt authentication in this order: + +1. **Environment Variable** (optional): `CLAUDE_CODE_OAUTH_TOKEN` + - Useful for CI/CD environments or when you want to override the default token + - Not required if you've set up the CLI token + +2. **Claude Code CLI Token** (recommended): Token managed by `claude setup-token` + - Automatically used when available + - Most convenient for local development + +3. **Fallback**: Error if neither is available + +## Configuration + +### Basic Configuration + +Add Claude Code to your Task Master configuration: + +```javascript +// In your .taskmaster/config.json or via task-master models command +{ + "models": { + "main": "claude-code:sonnet", // Use Claude Code with Sonnet + "research": "perplexity-llama-3.1-sonar-large-128k-online", + "fallback": "claude-code:opus" // Use Claude Code with Opus as fallback + } +} +``` + +### Supported Models + +- `claude-code:sonnet` - Claude 3.5 Sonnet via Claude Code CLI +- `claude-code:opus` - Claude 3 Opus via Claude Code CLI + +### Environment Variables (Optional) + +While not required, you can optionally set: + +```bash +export CLAUDE_CODE_OAUTH_TOKEN="your_oauth_token_here" +``` + +This is only needed in specific scenarios like: + +- CI/CD pipelines +- Docker containers +- When you want to use a different token than the CLI default + +## Usage Examples + +### Basic Task Operations + +```bash +# Use Claude Code for task operations +task-master add-task --prompt="Implement user authentication system" --research +task-master expand --id=1 --research +task-master update-task --id=1.1 --prompt="Add JWT token validation" +``` + +### Model Configuration Commands + +```bash +# Set Claude Code as main model +task-master models --set-main claude-code:sonnet + +# Use interactive setup +task-master models --setup +# Then select "claude-code" from the provider list +``` + +## Troubleshooting + +### Common Issues + +#### 1. "Claude Code CLI not available" Error + +**Problem**: Task Master cannot connect to Claude Code CLI. + +**Solutions**: + +- Ensure Claude Code CLI is installed and in your PATH +- Run `claude setup-token` to configure authentication +- Verify Claude Code CLI works: `claude --help` + +#### 2. Authentication Failures + +**Problem**: Token authentication is failing. + +**Solutions**: + +- Re-run `claude setup-token` to refresh your OAuth token +- Check if your token has expired +- Verify Claude Code CLI can authenticate: try a simple `claude` command + +#### 3. Model Not Available + +**Problem**: Specified Claude Code model is not supported. + +**Solutions**: + +- Use supported models: `sonnet` or `opus` +- Check model availability: `task-master models --list` +- Verify your Claude Code CLI has access to the requested model + +### Debug Steps + +1. **Test Claude Code CLI directly**: + + ```bash + claude --help + # Should show help without errors + ``` + +2. **Test authentication**: + + ```bash + claude setup-token --verify + # Should confirm token is valid + ``` + +3. **Test Task Master integration**: + + ```bash + task-master models --test claude-code:sonnet + # Should successfully connect and test the model + ``` + +4. **Check logs**: + - Task Master logs will show detailed error messages + - Use `--verbose` flag for more detailed output + +### Environment-Specific Configuration + +#### Docker/Containers + +When running in Docker, you'll need to: + +1. Install Claude Code CLI in your container +2. Set up authentication via environment variable: + + ```dockerfile + ENV CLAUDE_CODE_OAUTH_TOKEN="your_token_here" + ``` + +#### CI/CD Pipelines + +For automated environments: + +1. Set up a service account token or use environment variables +2. Ensure Claude Code CLI is available in the pipeline environment +3. Configure authentication before running Task Master commands + +## Integration with AI SDK + +Task Master's Claude Code integration uses the official `ai-sdk-provider-claude-code` package, providing: + +- **Streaming Support**: Real-time token streaming for interactive experiences +- **Full AI SDK Compatibility**: Works with generateText, streamText, and other AI SDK functions +- **Automatic Error Handling**: Graceful degradation when Claude Code is unavailable +- **Type Safety**: Full TypeScript support with proper type definitions + +### Example AI SDK Usage + +```javascript +import { generateText } from 'ai'; +import { ClaudeCodeProvider } from './src/ai-providers/claude-code.js'; + +const provider = new ClaudeCodeProvider(); +const client = provider.getClient(); + +const result = await generateText({ + model: client('sonnet'), + messages: [ + { role: 'user', content: 'Hello Claude!' } + ] +}); + +console.log(result.text); +``` + +## Security Notes + +- OAuth tokens are managed securely by Claude Code CLI +- No API keys need to be stored in your project files +- Tokens are automatically refreshed by the Claude Code CLI +- Environment variables should only be used in secure environments + +## Getting Help + +If you encounter issues: + +1. Check the Claude Code CLI documentation +2. Verify your authentication setup with `claude setup-token --verify` +3. Review Task Master logs for detailed error messages +4. Open an issue with both Task Master and Claude Code version information diff --git a/docs/command-reference.md b/docs/command-reference.md index d7935447..f51d7f59 100644 --- a/docs/command-reference.md +++ b/docs/command-reference.md @@ -383,6 +383,12 @@ task-master models --set-main=my-local-llama --ollama # Set a custom OpenRouter model for the research role task-master models --set-research=google/gemini-pro --openrouter +# Set Codex CLI model for the main role (uses ChatGPT subscription via OAuth) +task-master models --set-main=gpt-5-codex --codex-cli + +# Set Codex CLI model for the fallback role +task-master models --set-fallback=gpt-5 --codex-cli + # Run interactive setup to configure models, including custom ones task-master models --setup ``` diff --git a/docs/configuration.md b/docs/configuration.md index 6cf2fdbb..e5c97deb 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -235,6 +235,60 @@ node scripts/init.js - "MCP provider requires session context" → Ensure running in MCP environment - See the [MCP Provider Guide](./mcp-provider-guide.md) for detailed troubleshooting +### MCP Timeout Configuration + +Long-running AI operations in taskmaster-ai can exceed the default 60-second MCP timeout. Operations like `parse_prd`, `expand_task`, `research`, and `analyze_project_complexity` may take 2-5 minutes to complete. + +#### Adding Timeout Configuration + +Add a `timeout` parameter to your MCP configuration to extend the timeout limit. The timeout configuration works identically across MCP clients including Cursor, Windsurf, and RooCode: + +```json +{ + "mcpServers": { + "task-master-ai": { + "command": "npx", + "args": ["-y", "--package=task-master-ai", "task-master-ai"], + "timeout": 300, + "env": { + "ANTHROPIC_API_KEY": "your-anthropic-api-key" + } + } + } +} +``` + +**Configuration Details:** +- **`timeout: 300`** - Sets timeout to 300 seconds (5 minutes) +- **Value range**: 1-3600 seconds (1 second to 1 hour) +- **Recommended**: 300 seconds provides sufficient time for most AI operations +- **Format**: Integer value in seconds (not milliseconds) + +#### Automatic Setup + +When adding taskmaster rules for supported editors, the timeout configuration is automatically included: + +```bash +# Automatically includes timeout configuration +task-master rules add cursor +task-master rules add roo +task-master rules add windsurf +task-master rules add vscode +``` + +#### Troubleshooting Timeouts + +If you're still experiencing timeout errors: + +1. **Verify configuration**: Check that `timeout: 300` is present in your MCP config +2. **Restart editor**: Restart your editor after making configuration changes +3. **Increase timeout**: For very complex operations, try `timeout: 600` (10 minutes) +4. **Check API keys**: Ensure required API keys are properly configured + +**Expected behavior:** +- **Before fix**: Operations fail after 60 seconds with `MCP request timed out after 60000ms` +- **After fix**: Operations complete successfully within the configured timeout limit + ### Google Vertex AI Configuration Google Vertex AI is Google Cloud's enterprise AI platform and requires specific configuration: @@ -375,3 +429,153 @@ Azure OpenAI provides enterprise-grade OpenAI models through Microsoft's Azure c - Verify the deployment name matches your configuration exactly (case-sensitive) - Ensure the model deployment is in a "Succeeded" state in Azure OpenAI Studio - Ensure youre not getting rate limited by `maxTokens` maintain appropriate Tokens per Minute Rate Limit (TPM) in your deployment. + +### Codex CLI Provider + +The Codex CLI provider integrates Task Master with OpenAI's Codex CLI, allowing you to use ChatGPT subscription models via OAuth authentication. + +1. **Prerequisites**: + - Node.js >= 18 + - Codex CLI >= 0.42.0 (>= 0.44.0 recommended) + - ChatGPT subscription: Plus, Pro, Business, Edu, or Enterprise (for OAuth access to GPT-5 models) + +2. **Installation**: + ```bash + npm install -g @openai/codex + ``` + +3. **Authentication** (OAuth - Primary Method): + ```bash + codex login + ``` + This will open a browser window for OAuth authentication with your ChatGPT account. Once authenticated, Task Master will automatically use these credentials. + +4. **Optional API Key Method**: + While OAuth is the primary and recommended authentication method, you can optionally set an OpenAI API key: + ```bash + # In .env file + OPENAI_API_KEY=sk-your-openai-api-key-here + ``` + **Note**: The API key will only be injected if explicitly provided. OAuth is always preferred. + +5. **Configuration**: + ```json + // In .taskmaster/config.json + { + "models": { + "main": { + "provider": "codex-cli", + "modelId": "gpt-5-codex", + "maxTokens": 128000, + "temperature": 0.2 + }, + "fallback": { + "provider": "codex-cli", + "modelId": "gpt-5", + "maxTokens": 128000, + "temperature": 0.2 + } + }, + "codexCli": { + "allowNpx": true, + "skipGitRepoCheck": true, + "approvalMode": "on-failure", + "sandboxMode": "workspace-write" + } + } + ``` + +6. **Available Models**: + - `gpt-5` - Latest GPT-5 model (272K max input, 128K max output) + - `gpt-5-codex` - GPT-5 optimized for agentic software engineering (272K max input, 128K max output) + +7. **Codex CLI Settings (`codexCli` section)**: + + The `codexCli` section in your configuration file supports the following options: + + - **`allowNpx`** (boolean, default: `false`): Allow fallback to `npx @openai/codex` if CLI not found on PATH + - **`skipGitRepoCheck`** (boolean, default: `false`): Skip git repository safety check (recommended for CI/non-repo usage) + - **`approvalMode`** (string): Control command execution approval + - `"untrusted"`: Require approval for all commands + - `"on-failure"`: Only require approval after a command fails (default) + - `"on-request"`: Approve only when explicitly requested + - `"never"`: Never require approval (not recommended) + - **`sandboxMode`** (string): Control filesystem access + - `"read-only"`: Read-only access + - `"workspace-write"`: Allow writes to workspace (default) + - `"danger-full-access"`: Full filesystem access (use with caution) + - **`codexPath`** (string, optional): Custom path to codex CLI executable + - **`cwd`** (string, optional): Working directory for Codex CLI execution + - **`fullAuto`** (boolean, optional): Fully automatic mode (equivalent to `--full-auto` flag) + - **`dangerouslyBypassApprovalsAndSandbox`** (boolean, optional): Bypass all safety checks (dangerous!) + - **`color`** (string, optional): Color handling - `"always"`, `"never"`, or `"auto"` + - **`outputLastMessageFile`** (string, optional): Write last agent message to specified file + - **`verbose`** (boolean, optional): Enable verbose logging + - **`env`** (object, optional): Additional environment variables for Codex CLI + +8. **Command-Specific Settings** (optional): + You can override settings for specific Task Master commands: + ```json + { + "codexCli": { + "allowNpx": true, + "approvalMode": "on-failure", + "commandSpecific": { + "parse-prd": { + "approvalMode": "never", + "verbose": true + }, + "expand": { + "sandboxMode": "read-only" + } + } + } + } + ``` + +9. **Codebase Features**: + The Codex CLI provider is codebase-capable, meaning it can analyze and interact with your project files. Codebase analysis features are automatically enabled when using `codex-cli` as your provider and `enableCodebaseAnalysis` is set to `true` in your global configuration (default). + +10. **Setup Commands**: + ```bash + # Set Codex CLI for main role + task-master models --set-main gpt-5-codex --codex-cli + + # Set Codex CLI for fallback role + task-master models --set-fallback gpt-5 --codex-cli + + # Verify configuration + task-master models + ``` + +11. **Troubleshooting**: + + **"codex: command not found" error:** + - Install Codex CLI globally: `npm install -g @openai/codex` + - Verify installation: `codex --version` + - Alternatively, enable `allowNpx: true` in your codexCli configuration + + **"Not logged in" errors:** + - Run `codex login` to authenticate with your ChatGPT account + - Verify authentication status: `codex` (opens interactive CLI) + + **"Old version" warnings:** + - Check version: `codex --version` + - Upgrade: `npm install -g @openai/codex@latest` + - Minimum version: 0.42.0, recommended: >= 0.44.0 + + **"Model not available" errors:** + - Only `gpt-5` and `gpt-5-codex` are available via OAuth subscription + - Verify your ChatGPT subscription is active + - For other OpenAI models, use the standard `openai` provider with an API key + + **API key not being used:** + - API key is only injected when explicitly provided + - OAuth authentication is always preferred + - If you want to use an API key, ensure `OPENAI_API_KEY` is set in your `.env` file + +12. **Important Notes**: + - OAuth subscription required for model access (no API key needed for basic operation) + - Limited to OAuth-available models only (`gpt-5` and `gpt-5-codex`) + - Pricing information is not available for OAuth models (shows as "Unknown" in cost calculations) + - See [Codex CLI Provider Documentation](./providers/codex-cli.md) for more details diff --git a/docs/examples/codex-cli-usage.md b/docs/examples/codex-cli-usage.md new file mode 100644 index 00000000..8139777e --- /dev/null +++ b/docs/examples/codex-cli-usage.md @@ -0,0 +1,463 @@ +# Codex CLI Provider Usage Examples + +This guide provides practical examples of using Task Master with the Codex CLI provider. + +## Prerequisites + +Before using these examples, ensure you have: + +```bash +# 1. Codex CLI installed +npm install -g @openai/codex + +# 2. Authenticated with ChatGPT +codex login + +# 3. Codex CLI configured as your provider +task-master models --set-main gpt-5-codex --codex-cli +``` + +## Example 1: Basic Task Creation + +Use Codex CLI to create tasks from a simple description: + +```bash +# Add a task with AI-powered enhancement +task-master add-task --prompt="Implement user authentication with JWT" --research +``` + +**What happens**: +1. Task Master sends your prompt to GPT-5-Codex via the CLI +2. The AI analyzes your request and generates a detailed task +3. The task is added to your `.taskmaster/tasks/tasks.json` +4. OAuth credentials are automatically used (no API key needed) + +## Example 2: Parsing a Product Requirements Document + +Create a comprehensive task list from a PRD: + +```bash +# Create your PRD +cat > my-feature.txt < feature-prd.txt <> .taskmaster/config.json <> .taskmaster/config.json < ~/.codex-auth + env: + OPENAI_CODEX_API_KEY: ${{ secrets.OPENAI_CODEX_API_KEY }} + + - name: Configure Task Master + run: | + cat > .taskmaster/config.json <= 18.0.0 +- **Codex CLI**: >= 0.42.0 (>= 0.44.0 recommended) +- **ChatGPT Subscription**: Required for OAuth access (Plus, Pro, Business, Edu, or Enterprise) +- **Task Master**: >= 0.27.3 (version with Codex CLI support) + +### Checking Your Versions + +```bash +# Check Node.js version +node --version + +# Check Codex CLI version +codex --version + +# Check Task Master version +task-master --version +``` + +## Installation + +### Install Codex CLI + +```bash +# Install globally via npm +npm install -g @openai/codex + +# Verify installation +codex --version +``` + +Expected output: `v0.44.0` or higher + +### Install Task Master (if not already installed) + +```bash +# Install globally +npm install -g task-master-ai + +# Or install in your project +npm install --save-dev task-master-ai +``` + +## Authentication + +### OAuth Authentication (Primary Method - Recommended) + +The Codex CLI provider is designed to use OAuth authentication with your ChatGPT subscription: + +```bash +# Launch Codex CLI and authenticate +codex login +``` + +This will: +1. Open a browser window for OAuth authentication +2. Prompt you to log in with your ChatGPT account +3. Store authentication credentials locally +4. Allow Task Master to automatically use these credentials + +To verify your authentication: +```bash +# Open interactive Codex CLI +codex + +# Use /about command to see auth status +/about +``` + +### Optional: API Key Method + +While OAuth is the primary and recommended method, you can optionally use an OpenAI API key: + +```bash +# In your .env file +OPENAI_CODEX_API_KEY=sk-your-openai-api-key-here +``` + +**Important Notes**: +- The API key will **only** be injected when explicitly provided +- OAuth authentication is always preferred when available +- Using an API key doesn't provide access to subscription-only models like GPT-5-Codex +- For full OpenAI API access with non-subscription models, consider using the standard `openai` provider instead +- `OPENAI_CODEX_API_KEY` is specific to the codex-cli provider to avoid conflicts with the `openai` provider's `OPENAI_API_KEY` + +## Available Models + +The Codex CLI provider supports only models available through ChatGPT subscription: + +| Model ID | Description | Max Input Tokens | Max Output Tokens | +|----------|-------------|------------------|-------------------| +| `gpt-5` | Latest GPT-5 model | 272K | 128K | +| `gpt-5-codex` | GPT-5 optimized for agentic software engineering | 272K | 128K | + +**Note**: These models are only available via OAuth subscription through Codex CLI (ChatGPT Plus, Pro, Business, Edu, or Enterprise plans). For other OpenAI models, use the standard `openai` provider with an API key. + +**Research Capabilities**: Both GPT-5 models support web search tools, making them suitable for the `research` role in addition to `main` and `fallback` roles. + +## Configuration + +### Basic Configuration + +Add Codex CLI to your `.taskmaster/config.json`: + +```json +{ + "models": { + "main": { + "provider": "codex-cli", + "modelId": "gpt-5-codex", + "maxTokens": 128000, + "temperature": 0.2 + }, + "fallback": { + "provider": "codex-cli", + "modelId": "gpt-5", + "maxTokens": 128000, + "temperature": 0.2 + } + } +} +``` + +### Advanced Configuration with Codex CLI Settings + +The `codexCli` section allows you to customize Codex CLI behavior: + +```json +{ + "models": { + "main": { + "provider": "codex-cli", + "modelId": "gpt-5-codex", + "maxTokens": 128000, + "temperature": 0.2 + } + }, + "codexCli": { + "allowNpx": true, + "skipGitRepoCheck": true, + "approvalMode": "on-failure", + "sandboxMode": "workspace-write", + "verbose": false + } +} +``` + +### Codex CLI Settings Reference + +#### Core Settings + +- **`allowNpx`** (boolean, default: `false`) + - Allow fallback to `npx @openai/codex` if the CLI is not found on PATH + - Useful for CI environments or systems without global npm installations + - Example: `"allowNpx": true` + +- **`skipGitRepoCheck`** (boolean, default: `false`) + - Skip git repository safety check before execution + - Recommended for CI environments or non-repository usage + - Example: `"skipGitRepoCheck": true` + +#### Execution Control + +- **`approvalMode`** (string) + - Controls when to require user approval for command execution + - Options: + - `"untrusted"`: Require approval for all commands + - `"on-failure"`: Only require approval after a command fails (default) + - `"on-request"`: Approve only when explicitly requested + - `"never"`: Never require approval (use with caution) + - Example: `"approvalMode": "on-failure"` + +- **`sandboxMode`** (string) + - Controls filesystem access permissions + - Options: + - `"read-only"`: Read-only access to filesystem + - `"workspace-write"`: Allow writes to workspace directory (default) + - `"danger-full-access"`: Full filesystem access (use with extreme caution) + - Example: `"sandboxMode": "workspace-write"` + +#### Path and Environment + +- **`codexPath`** (string, optional) + - Custom path to Codex CLI executable + - Useful when Codex is installed in a non-standard location + - Example: `"codexPath": "/usr/local/bin/codex"` + +- **`cwd`** (string, optional) + - Working directory for Codex CLI execution + - Defaults to current working directory + - Example: `"cwd": "/path/to/project"` + +- **`env`** (object, optional) + - Additional environment variables for Codex CLI + - Example: `"env": { "DEBUG": "true" }` + +#### Advanced Settings + +- **`fullAuto`** (boolean, optional) + - Fully automatic mode (equivalent to `--full-auto` flag) + - Bypasses most approvals for fully automated workflows + - Example: `"fullAuto": true` + +- **`dangerouslyBypassApprovalsAndSandbox`** (boolean, optional) + - Bypass all safety checks including approvals and sandbox + - **WARNING**: Use with extreme caution - can execute arbitrary code + - Example: `"dangerouslyBypassApprovalsAndSandbox": false` + +- **`color`** (string, optional) + - Force color handling in Codex CLI output + - Options: `"always"`, `"never"`, `"auto"` + - Example: `"color": "auto"` + +- **`outputLastMessageFile`** (string, optional) + - Write last agent message to specified file + - Useful for debugging or logging + - Example: `"outputLastMessageFile": "./last-message.txt"` + +- **`verbose`** (boolean, optional) + - Enable verbose provider logging + - Helpful for debugging issues + - Example: `"verbose": true` + +### Command-Specific Settings + +Override settings for specific Task Master commands: + +```json +{ + "codexCli": { + "allowNpx": true, + "approvalMode": "on-failure", + "commandSpecific": { + "parse-prd": { + "approvalMode": "never", + "verbose": true + }, + "expand": { + "sandboxMode": "read-only" + }, + "add-task": { + "approvalMode": "untrusted" + } + } + } +} +``` + +## Usage + +### Setting Codex CLI Models + +```bash +# Set Codex CLI for main role +task-master models --set-main gpt-5-codex --codex-cli + +# Set Codex CLI for fallback role +task-master models --set-fallback gpt-5 --codex-cli + +# Set Codex CLI for research role +task-master models --set-research gpt-5 --codex-cli + +# Verify configuration +task-master models +``` + +### Using Codex CLI with Task Master Commands + +Once configured, use Task Master commands as normal: + +```bash +# Parse a PRD with Codex CLI +task-master parse-prd my-requirements.txt + +# Analyze project complexity +task-master analyze-complexity --research + +# Expand a task into subtasks +task-master expand --id=1.2 + +# Add a new task with AI assistance +task-master add-task --prompt="Implement user authentication" --research +``` + +The provider will automatically use your OAuth credentials when Codex CLI is configured. + +## Codebase Features + +The Codex CLI provider is **codebase-capable**, meaning it can analyze and interact with your project files. This enables advanced features like: + +- **Code Analysis**: Understanding your project structure and dependencies +- **Intelligent Suggestions**: Context-aware task recommendations +- **File Operations**: Reading and analyzing project files for better task generation +- **Pattern Recognition**: Identifying common patterns and best practices in your codebase + +### Enabling Codebase Analysis + +Codebase analysis is automatically enabled when: +1. Your provider is set to `codex-cli` +2. `enableCodebaseAnalysis` is `true` in your global configuration (default) + +To verify or configure: + +```json +{ + "global": { + "enableCodebaseAnalysis": true + } +} +``` + +## Troubleshooting + +### "codex: command not found" Error + +**Symptoms**: Task Master reports that the Codex CLI is not found. + +**Solutions**: +1. **Install Codex CLI globally**: + ```bash + npm install -g @openai/codex + ``` + +2. **Verify installation**: + ```bash + codex --version + ``` + +3. **Alternative: Enable npx fallback**: + ```json + { + "codexCli": { + "allowNpx": true + } + } + ``` + +### "Not logged in" Errors + +**Symptoms**: Authentication errors when trying to use Codex CLI. + +**Solutions**: +1. **Authenticate with OAuth**: + ```bash + codex login + ``` + +2. **Verify authentication status**: + ```bash + codex + # Then use /about command + ``` + +3. **Re-authenticate if needed**: + ```bash + # Logout first + codex + # Use /auth command to change auth method + + # Then login again + codex login + ``` + +### "Old version" Warnings + +**Symptoms**: Warnings about Codex CLI version being outdated. + +**Solutions**: +1. **Check current version**: + ```bash + codex --version + ``` + +2. **Upgrade to latest version**: + ```bash + npm install -g @openai/codex@latest + ``` + +3. **Verify upgrade**: + ```bash + codex --version + ``` + Should show >= 0.44.0 + +### "Model not available" Errors + +**Symptoms**: Error indicating the requested model is not available. + +**Causes and Solutions**: + +1. **Using unsupported model**: + - Only `gpt-5` and `gpt-5-codex` are available via Codex CLI + - For other OpenAI models, use the standard `openai` provider + +2. **Subscription not active**: + - Verify your ChatGPT subscription is active + - Check subscription status at + +3. **Wrong provider selected**: + - Verify you're using `--codex-cli` flag when setting models + - Check `.taskmaster/config.json` shows `"provider": "codex-cli"` + +### API Key Not Being Used + +**Symptoms**: You've set `OPENAI_CODEX_API_KEY` but it's not being used. + +**Expected Behavior**: +- OAuth authentication is always preferred +- API key is only injected when explicitly provided +- API key doesn't grant access to subscription-only models + +**Solutions**: +1. **Verify OAuth is working**: + ```bash + codex + # Check /about for auth status + ``` + +2. **If you want to force API key usage**: + - This is not recommended with Codex CLI + - Consider using the standard `openai` provider instead + +3. **Verify .env file is being loaded**: + ```bash + # Check if .env exists in project root + ls -la .env + + # Verify OPENAI_CODEX_API_KEY is set + grep OPENAI_CODEX_API_KEY .env + ``` + +### Approval/Sandbox Issues + +**Symptoms**: Commands are blocked or filesystem access is denied. + +**Solutions**: + +1. **Adjust approval mode**: + ```json + { + "codexCli": { + "approvalMode": "on-request" + } + } + ``` + +2. **Adjust sandbox mode**: + ```json + { + "codexCli": { + "sandboxMode": "workspace-write" + } + } + ``` + +3. **For fully automated workflows** (use cautiously): + ```json + { + "codexCli": { + "fullAuto": true + } + } + ``` + +## Important Notes + +- **OAuth subscription required**: No API key needed for basic operation, but requires active ChatGPT subscription +- **Limited model selection**: Only `gpt-5` and `gpt-5-codex` available via OAuth +- **Pricing information**: Not available for OAuth models (shows as "Unknown" in cost calculations) +- **No automatic dependency**: The `@openai/codex` package is not added to Task Master's dependencies - install it globally or enable `allowNpx` +- **Codebase analysis**: Automatically enabled when using `codex-cli` provider +- **Safety first**: Default settings prioritize safety with `approvalMode: "on-failure"` and `sandboxMode: "workspace-write"` + +## See Also + +- [Configuration Guide](../configuration.md#codex-cli-provider) - Complete Codex CLI configuration reference +- [Command Reference](../command-reference.md) - Using `--codex-cli` flag with commands +- [Gemini CLI Provider](./gemini-cli.md) - Similar CLI-based provider for Google Gemini +- [Claude Code Integration](../claude-code-integration.md) - Another CLI-based provider +- [ai-sdk-provider-codex-cli](https://github.com/ben-vargas/ai-sdk-provider-codex-cli) - Source code for the provider package diff --git a/mcp-server/src/core/utils/path-utils.js b/mcp-server/src/core/utils/path-utils.js index 9aa5ef6d..af47ba5f 100644 --- a/mcp-server/src/core/utils/path-utils.js +++ b/mcp-server/src/core/utils/path-utils.js @@ -69,11 +69,29 @@ export function resolveTasksPath(args, log = silentLogger) { // Use core findTasksPath with explicit path and normalized projectRoot context if (projectRoot) { - return coreFindTasksPath(explicitPath, { projectRoot }, log); + const foundPath = coreFindTasksPath(explicitPath, { projectRoot }, log); + // If core function returns null and no explicit path was provided, + // construct the expected default path as documented + if (foundPath === null && !explicitPath) { + const defaultPath = path.join( + projectRoot, + '.taskmaster', + 'tasks', + 'tasks.json' + ); + log?.info?.( + `Core findTasksPath returned null, using default path: ${defaultPath}` + ); + return defaultPath; + } + return foundPath; } // Fallback to core function without projectRoot context - return coreFindTasksPath(explicitPath, null, log); + const foundPath = coreFindTasksPath(explicitPath, null, log); + // Note: When no projectRoot is available, we can't construct a default path + // so we return null and let the calling code handle the error + return foundPath; } /** diff --git a/mcp-server/src/custom-sdk/schema-converter.js b/mcp-server/src/custom-sdk/schema-converter.js index d1382110..f6acce22 100644 --- a/mcp-server/src/custom-sdk/schema-converter.js +++ b/mcp-server/src/custom-sdk/schema-converter.js @@ -75,13 +75,50 @@ function generateExampleFromSchema(schema) { return result; case 'ZodString': - return 'string'; + // Check for min/max length constraints + if (def.checks) { + const minCheck = def.checks.find((c) => c.kind === 'min'); + const maxCheck = def.checks.find((c) => c.kind === 'max'); + if (minCheck && maxCheck) { + return ( + '' + ); + } else if (minCheck) { + return ''; + } else if (maxCheck) { + return ''; + } + } + return ''; case 'ZodNumber': - return 0; + // Check for int, positive, min/max constraints + if (def.checks) { + const intCheck = def.checks.find((c) => c.kind === 'int'); + const minCheck = def.checks.find((c) => c.kind === 'min'); + const maxCheck = def.checks.find((c) => c.kind === 'max'); + + if (intCheck && minCheck && minCheck.value > 0) { + return ''; + } else if (intCheck) { + return ''; + } else if (minCheck || maxCheck) { + return ( + '= ' + minCheck.value : '') + + (maxCheck ? ' <= ' + maxCheck.value : '') + + '>' + ); + } + } + return ''; case 'ZodBoolean': - return false; + return ''; case 'ZodArray': const elementExample = generateExampleFromSchema(def.type); diff --git a/package-lock.json b/package-lock.json index aca4e236..51d2fda6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,568 @@ { "name": "task-master-ai", - "version": "0.27.3", + "version": "0.28.0-rc.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-master-ai", - "version": "0.27.3", + "version": "0.28.0-rc.1", + "license": "MIT WITH Commons-Clause", + "workspaces": [ + "apps/*", + "packages/*", + "." + ], + "dependencies": { + "@ai-sdk/amazon-bedrock": "^3.0.23", + "@ai-sdk/anthropic": "^2.0.18", + "@ai-sdk/azure": "^2.0.34", + "@ai-sdk/google": "^2.0.16", + "@ai-sdk/google-vertex": "^3.0.29", + "@ai-sdk/groq": "^2.0.21", + "@ai-sdk/mistral": "^2.0.16", + "@ai-sdk/openai": "^2.0.34", + "@ai-sdk/perplexity": "^2.0.10", + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.10", + "@ai-sdk/xai": "^2.0.22", + "@aws-sdk/credential-providers": "^3.895.0", + "@inquirer/search": "^3.0.15", + "@openrouter/ai-sdk-provider": "^1.2.0", + "@streamparser/json": "^0.0.22", + "@supabase/supabase-js": "^2.57.4", + "ai": "^5.0.51", + "ai-sdk-provider-claude-code": "^1.1.4", + "ai-sdk-provider-codex-cli": "^0.3.0", + "ai-sdk-provider-gemini-cli": "^1.1.1", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "boxen": "^8.0.1", + "chalk": "5.6.2", + "cli-highlight": "^2.1.11", + "cli-progress": "^3.12.0", + "cli-table3": "^0.6.5", + "commander": "^12.1.0", + "cors": "^2.8.5", + "dotenv": "^16.6.1", + "express": "^4.21.2", + "fastmcp": "^3.5.0", + "figlet": "^1.8.0", + "fuse.js": "^7.1.0", + "gpt-tokens": "^1.3.14", + "gradient-string": "^3.0.0", + "helmet": "^8.1.0", + "inquirer": "^12.5.0", + "jsonc-parser": "^3.3.1", + "jsonrepair": "^3.13.0", + "jsonwebtoken": "^9.0.2", + "lru-cache": "^10.2.0", + "marked": "^15.0.12", + "marked-terminal": "^7.3.0", + "ollama-ai-provider-v2": "^1.3.1", + "ora": "^8.2.0", + "uuid": "^11.1.0", + "zod": "^4.1.11" + }, + "bin": { + "task-master": "dist/task-master.js", + "task-master-ai": "dist/mcp-server.js", + "task-master-mcp": "dist/mcp-server.js" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@changesets/changelog-github": "^0.5.1", + "@changesets/cli": "^2.28.1", + "@manypkg/cli": "^0.25.1", + "@tm/ai-sdk-provider-grok-cli": "*", + "@tm/cli": "*", + "@types/jest": "^29.5.14", + "@types/marked-terminal": "^6.1.1", + "concurrently": "^9.2.1", + "cross-env": "^10.0.0", + "execa": "^8.0.1", + "jest": "^29.7.0", + "jest-environment-node": "^29.7.0", + "mock-fs": "^5.5.0", + "prettier": "^3.5.3", + "supertest": "^7.1.0", + "ts-jest": "^29.4.2", + "tsdown": "^0.15.2", + "tsx": "^4.20.4", + "turbo": "2.5.6", + "typescript": "^5.9.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@anthropic-ai/claude-code": "^1.0.88", + "@biomejs/cli-linux-x64": "^1.9.4" + } + }, + "apps/cli": { + "name": "@tm/cli", + "license": "MIT", + "dependencies": { + "@tm/core": "*", + "boxen": "^8.0.1", + "chalk": "5.6.2", + "cli-table3": "^0.6.5", + "commander": "^12.1.0", + "inquirer": "^12.5.0", + "ora": "^8.2.0" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@types/inquirer": "^9.0.3", + "@types/node": "^22.10.5", + "tsx": "^4.20.4", + "typescript": "^5.9.2", + "vitest": "^2.1.8" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "apps/docs": { + "version": "0.0.4", + "devDependencies": { + "mintlify": "^4.2.111" + } + }, + "apps/extension": { + "version": "0.25.5-rc.0", + "dependencies": { + "task-master-ai": "*" + }, + "devDependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@modelcontextprotocol/sdk": "1.13.3", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-portal": "^1.1.9", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slot": "^1.2.3", + "@tailwindcss/postcss": "^4.1.11", + "@tanstack/react-query": "^5.83.0", + "@tm/core": "*", + "@types/mocha": "^10.0.10", + "@types/node": "^22.10.5", + "@types/react": "19.1.8", + "@types/react-dom": "19.1.6", + "@types/vscode": "^1.101.0", + "@vscode/test-cli": "^0.0.11", + "@vscode/test-electron": "^2.5.2", + "@vscode/vsce": "^2.32.0", + "autoprefixer": "10.4.21", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "esbuild": "^0.25.3", + "esbuild-postcss": "^0.0.4", + "fs-extra": "^11.3.0", + "lucide-react": "^0.525.0", + "npm-run-all": "^4.1.5", + "postcss": "8.5.6", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "tailwind-merge": "^3.3.1", + "tailwindcss": "4.1.11", + "typescript": "^5.9.2" + }, + "engines": { + "vscode": "^1.93.0" + } + }, + "apps/extension/node_modules/@ai-sdk/amazon-bedrock": { + "version": "2.2.12", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "aws4fetch": "^1.0.20" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/anthropic": { + "version": "1.2.12", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/azure": { + "version": "1.3.25", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/openai": "1.3.24", + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/google": { + "version": "1.2.22", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/google-vertex": { + "version": "2.2.27", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/anthropic": "1.2.12", + "@ai-sdk/google": "1.2.22", + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "google-auth-library": "^9.15.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/groq": { + "version": "1.2.9", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/mistral": { + "version": "1.2.8", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/openai": { + "version": "1.3.24", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/openai-compatible": { + "version": "0.2.16", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/perplexity": { + "version": "1.1.9", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@ai-sdk/provider": { + "version": "1.1.3", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "apps/extension/node_modules/@ai-sdk/provider-utils": { + "version": "2.2.8", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "nanoid": "^3.3.8", + "secure-json-parse": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "apps/extension/node_modules/@ai-sdk/react": { + "version": "1.2.12", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/ui-utils": "1.2.11", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "apps/extension/node_modules/@ai-sdk/ui-utils": { + "version": "1.2.11", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "apps/extension/node_modules/@ai-sdk/xai": { + "version": "1.2.18", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/openai-compatible": "0.2.16", + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@openrouter/ai-sdk-provider": { + "version": "0.4.6", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.0.9", + "@ai-sdk/provider-utils": "2.1.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "apps/extension/node_modules/@openrouter/ai-sdk-provider/node_modules/@ai-sdk/provider": { + "version": "1.0.9", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "apps/extension/node_modules/@openrouter/ai-sdk-provider/node_modules/@ai-sdk/provider-utils": { + "version": "2.1.10", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.0.9", + "eventsource-parser": "^3.0.0", + "nanoid": "^3.3.8", + "secure-json-parse": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "apps/extension/node_modules/ai": { + "version": "4.3.19", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/react": "1.2.12", + "@ai-sdk/ui-utils": "1.2.11", + "@opentelemetry/api": "1.9.0", + "jsondiffpatch": "0.6.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "apps/extension/node_modules/ai-sdk-provider-gemini-cli": { + "version": "0.1.3", + "license": "MIT", + "optional": true, + "dependencies": { + "@ai-sdk/provider": "^1.1.3", + "@ai-sdk/provider-utils": "^2.2.8", + "@google/gemini-cli-core": "0.1.22", + "@google/genai": "^1.7.0", + "google-auth-library": "^9.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "apps/extension/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "apps/extension/node_modules/ollama-ai-provider": { + "version": "1.2.0", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "^1.0.0", + "@ai-sdk/provider-utils": "^2.0.0", + "partial-json": "0.1.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "apps/extension/node_modules/openai": { + "version": "4.104.0", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "apps/extension/node_modules/openai/node_modules/@types/node": { + "version": "18.19.127", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "apps/extension/node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "apps/extension/node_modules/task-master-ai": { + "version": "0.27.1", "license": "MIT WITH Commons-Clause", "workspaces": [ "apps/*", @@ -67,29 +623,6 @@ "task-master-ai": "dist/mcp-server.js", "task-master-mcp": "dist/mcp-server.js" }, - "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@changesets/changelog-github": "^0.5.1", - "@changesets/cli": "^2.28.1", - "@manypkg/cli": "^0.25.1", - "@tm/cli": "*", - "@types/jest": "^29.5.14", - "@types/marked-terminal": "^6.1.1", - "concurrently": "^9.2.1", - "cross-env": "^10.0.0", - "dotenv-mono": "^1.5.1", - "execa": "^8.0.1", - "jest": "^29.7.0", - "jest-environment-node": "^29.7.0", - "mock-fs": "^5.5.0", - "prettier": "^3.5.3", - "supertest": "^7.1.0", - "ts-jest": "^29.4.2", - "tsdown": "^0.15.2", - "tsx": "^4.20.4", - "turbo": "^2.5.6", - "typescript": "^5.7.3" - }, "engines": { "node": ">=18.0.0" }, @@ -99,326 +632,27 @@ "ai-sdk-provider-gemini-cli": "^0.1.3" } }, - "apps/cli": { - "name": "@tm/cli", + "apps/extension/node_modules/zod": { + "version": "3.25.76", "license": "MIT", - "dependencies": { - "@tm/core": "*", - "boxen": "^8.0.1", - "chalk": "5.6.2", - "cli-table3": "^0.6.5", - "commander": "^12.1.0", - "inquirer": "^12.5.0", - "ora": "^8.2.0" - }, - "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@types/inquirer": "^9.0.3", - "@types/node": "^22.10.5", - "tsx": "^4.20.4", - "typescript": "^5.7.3", - "vitest": "^2.1.8" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "apps/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/colinhacks" } }, - "apps/cli/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/cli/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "apps/cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "apps/cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "apps/cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "apps/cli/node_modules/inquirer": { - "version": "9.3.8", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.8.tgz", - "integrity": "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.2", - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "apps/cli/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "apps/cli/node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/cli/node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "apps/cli/node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "apps/cli/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "apps/cli/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "apps/cli/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "apps/cli/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "apps/cli/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "apps/cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "apps/docs": { - "version": "0.0.4", - "devDependencies": { - "mintlify": "^4.2.111" - } - }, - "apps/extension": { - "version": "0.25.4", - "dependencies": { - "task-master-ai": "0.27.3" - }, - "devDependencies": { - "@dnd-kit/core": "^6.3.1", - "@dnd-kit/modifiers": "^9.0.0", - "@modelcontextprotocol/sdk": "1.13.3", - "@radix-ui/react-collapsible": "^1.1.11", - "@radix-ui/react-dropdown-menu": "^2.1.15", - "@radix-ui/react-label": "^2.1.7", - "@radix-ui/react-portal": "^1.1.9", - "@radix-ui/react-scroll-area": "^1.2.9", - "@radix-ui/react-separator": "^1.1.7", - "@radix-ui/react-slot": "^1.2.3", - "@tailwindcss/postcss": "^4.1.11", - "@tanstack/react-query": "^5.83.0", - "@types/mocha": "^10.0.10", - "@types/node": "^22.10.5", - "@types/react": "19.1.8", - "@types/react-dom": "19.1.6", - "@types/vscode": "^1.101.0", - "@vscode/test-cli": "^0.0.11", - "@vscode/test-electron": "^2.5.2", - "@vscode/vsce": "^2.32.0", - "autoprefixer": "10.4.21", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "esbuild": "^0.25.3", - "esbuild-postcss": "^0.0.4", - "fs-extra": "^11.3.0", - "lucide-react": "^0.525.0", - "npm-run-all": "^4.1.5", - "postcss": "8.5.6", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "tailwind-merge": "^3.3.1", - "tailwindcss": "4.1.11", - "typescript": "^5.7.3" - }, - "engines": { - "vscode": "^1.93.0" - } - }, - "apps/extension/node_modules/@types/node": { - "version": "20.19.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.16.tgz", - "integrity": "sha512-VS6TTONVdgwJwtJr7U+ghEjpfmQdqehLLpg/iMYGOd1+ilaFjdBJwFuPggJ4EAYPDCzWfDUHoIxyVnu+tOWVuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "apps/extension/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" } }, "node_modules/@ai-sdk/amazon-bedrock": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@ai-sdk/amazon-bedrock/-/amazon-bedrock-2.2.12.tgz", - "integrity": "sha512-m8gARnh45pr1s08Uu4J/Pm8913mwJPejPOm59b+kUqMsP9ilhUtH/bp8432Ra/v+vHuMoBrglG2ZvXtctAaH2g==", + "version": "3.0.25", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/anthropic": "2.0.20", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" @@ -427,161 +661,155 @@ "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/anthropic": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@ai-sdk/anthropic/-/anthropic-1.2.12.tgz", - "integrity": "sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==", + "version": "2.0.20", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/azure": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@ai-sdk/azure/-/azure-1.3.25.tgz", - "integrity": "sha512-cTME89A9UYrza0t5pbY9b80yYY02Q5ALQdB2WP3R7/Yl1PLwbFChx994Q3Un0G2XV5h3arlm4fZTViY10isjhQ==", + "version": "2.0.39", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/openai": "1.3.24", - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/openai": "2.0.39", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/gateway": { + "version": "1.0.30", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/google": { - "version": "1.2.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/google/-/google-1.2.22.tgz", - "integrity": "sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==", + "version": "2.0.17", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/google-vertex": { - "version": "2.2.27", - "resolved": "https://registry.npmjs.org/@ai-sdk/google-vertex/-/google-vertex-2.2.27.tgz", - "integrity": "sha512-iDGX/2yrU4OOL1p/ENpfl3MWxuqp9/bE22Z8Ip4DtLCUx6ismUNtrKO357igM1/3jrM6t9C6egCPniHqBsHOJA==", + "version": "3.0.31", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/anthropic": "1.2.12", - "@ai-sdk/google": "1.2.22", - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/anthropic": "2.0.20", + "@ai-sdk/google": "2.0.17", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10", "google-auth-library": "^9.15.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/groq": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@ai-sdk/groq/-/groq-1.2.9.tgz", - "integrity": "sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg==", + "version": "2.0.22", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/mistral": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@ai-sdk/mistral/-/mistral-1.2.8.tgz", - "integrity": "sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==", + "version": "2.0.17", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/openai": { - "version": "1.3.24", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.24.tgz", - "integrity": "sha512-GYXnGJTHRTZc4gJMSmFRgEQudjqd4PUN0ZjQhPwOAYH1yOAvQoG/Ikqs+HyISRbLPCrhbZnPKCNHuRU4OfpW0Q==", + "version": "2.0.39", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/openai-compatible": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai-compatible/-/openai-compatible-0.2.16.tgz", - "integrity": "sha512-LkvfcM8slJedRyJa/MiMiaOzcMjV1zNDwzTHEGz7aAsgsQV0maLfmJRi/nuSwf5jmp0EouC+JXXDUj2l94HgQw==", + "version": "1.0.19", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/perplexity": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@ai-sdk/perplexity/-/perplexity-1.1.9.tgz", - "integrity": "sha512-Ytolh/v2XupXbTvjE18EFBrHLoNMH0Ueji3lfSPhCoRUfkwrgZ2D9jlNxvCNCCRiGJG5kfinSHvzrH5vGDklYA==", + "version": "2.0.11", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/provider": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", - "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", + "version": "2.0.0", "license": "Apache-2.0", "dependencies": { "json-schema": "^0.4.0" @@ -591,84 +819,37 @@ } }, "node_modules/@ai-sdk/provider-utils": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", - "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", + "version": "3.0.10", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "nanoid": "^3.3.8", - "secure-json-parse": "^2.7.0" + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.5" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.23.8" - } - }, - "node_modules/@ai-sdk/react": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.12.tgz", - "integrity": "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==", - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider-utils": "2.2.8", - "@ai-sdk/ui-utils": "1.2.11", - "swr": "^2.2.5", - "throttleit": "2.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/ui-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.11.tgz", - "integrity": "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==", - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.23.8" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@ai-sdk/xai": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@ai-sdk/xai/-/xai-1.2.18.tgz", - "integrity": "sha512-T70WEu+UKXD/Fdj9ck+ujIqUp5ru06mJ/7usePXeXL5EeTi8KXevXF9AMIDdhyD5MZPT2jI8t19lEr8Bhuh/Bg==", + "version": "2.0.23", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/openai-compatible": "0.2.16", - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" + "@ai-sdk/openai-compatible": "1.0.19", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" + "zod": "^3.25.76 || ^4.1.8" } }, "node_modules/@alcalzone/ansi-tokenize": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.0.tgz", - "integrity": "sha512-qI/5TaaaCZE4yeSZ83lu0+xi1r88JSxUjnH4OP/iZF7+KKZ75u3ee5isd0LxX+6N8U0npL61YrpbthILHB6BnA==", "dev": true, "license": "MIT", "dependencies": { @@ -681,8 +862,6 @@ }, "node_modules/@alcalzone/ansi-tokenize/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -694,8 +873,6 @@ }, "node_modules/@alcalzone/ansi-tokenize/node_modules/is-fullwidth-code-point": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -710,8 +887,6 @@ }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true, "license": "MIT", "engines": { @@ -723,8 +898,6 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -736,9 +909,7 @@ } }, "node_modules/@anthropic-ai/claude-code": { - "version": "1.0.117", - "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-1.0.117.tgz", - "integrity": "sha512-ZSBFpwPqMZJZq9//BYSW0MLGQY0svAtncPe2EVxohO87Gym6Dqi+IRSVZkWSwF07gmzZH3luqrepX3q33l7T+Q==", + "version": "1.0.128", "license": "SEE LICENSE IN README.md", "optional": true, "bin": { @@ -758,8 +929,6 @@ }, "node_modules/@anthropic-ai/sdk": { "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.39.0.tgz", - "integrity": "sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==", "license": "MIT", "dependencies": { "@types/node": "^18.11.18", @@ -772,9 +941,7 @@ } }, "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { - "version": "18.19.126", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.126.tgz", - "integrity": "sha512-8AXQlBfrGmtYJEJUPs63F/uZQqVeFiN9o6NUjbDJYfxNxFnArlZufANPw4h6dGhYGKxcyw+TapXFvEsguzIQow==", + "version": "18.19.127", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -782,14 +949,10 @@ }, "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, "node_modules/@ark/schema": { "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.49.0.tgz", - "integrity": "sha512-GphZBLpW72iS0v4YkeUtV3YIno35Gimd7+ezbPO9GwEi9kzdUrPVjvf6aXSBAfHikaFc/9pqZOpv3pOXnC71tw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -798,15 +961,11 @@ }, "node_modules/@ark/util": { "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.49.0.tgz", - "integrity": "sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==", "devOptional": true, "license": "MIT" }, "node_modules/@asyncapi/parser": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@asyncapi/parser/-/parser-3.4.0.tgz", - "integrity": "sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -833,8 +992,6 @@ }, "node_modules/@asyncapi/parser/node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -851,15 +1008,11 @@ }, "node_modules/@asyncapi/parser/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/@asyncapi/parser/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -871,8 +1024,6 @@ }, "node_modules/@asyncapi/specs": { "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-6.10.0.tgz", - "integrity": "sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -881,8 +1032,6 @@ }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", @@ -895,8 +1044,6 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", @@ -910,8 +1057,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -922,8 +1067,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", @@ -935,8 +1078,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", @@ -948,8 +1089,6 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", @@ -962,8 +1101,6 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -971,8 +1108,6 @@ }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", @@ -982,8 +1117,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -994,8 +1127,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", @@ -1007,8 +1138,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", @@ -1019,45 +1148,43 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.891.0.tgz", - "integrity": "sha512-DdIoeB+JnA9YtY+aNaaWQBYW99mqM+ERGcIPIYlwM9vJMi0NhU028avTT2hDgNzgoFtMbnxQP0keeJpQgnCvAg==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.890.0", - "@aws-sdk/credential-provider-node": "3.891.0", - "@aws-sdk/middleware-host-header": "3.891.0", - "@aws-sdk/middleware-logger": "3.891.0", - "@aws-sdk/middleware-recursion-detection": "3.891.0", - "@aws-sdk/middleware-user-agent": "3.891.0", - "@aws-sdk/region-config-resolver": "3.890.0", - "@aws-sdk/types": "3.887.0", - "@aws-sdk/util-endpoints": "3.891.0", - "@aws-sdk/util-user-agent-browser": "3.887.0", - "@aws-sdk/util-user-agent-node": "3.891.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/credential-provider-node": "3.896.0", + "@aws-sdk/middleware-host-header": "3.893.0", + "@aws-sdk/middleware-logger": "3.893.0", + "@aws-sdk/middleware-recursion-detection": "3.893.0", + "@aws-sdk/middleware-user-agent": "3.896.0", + "@aws-sdk/region-config-resolver": "3.893.0", + "@aws-sdk/types": "3.893.0", + "@aws-sdk/util-endpoints": "3.895.0", + "@aws-sdk/util-user-agent-browser": "3.893.0", + "@aws-sdk/util-user-agent-node": "3.896.0", "@smithy/config-resolver": "^4.2.2", - "@smithy/core": "^3.11.0", + "@smithy/core": "^3.12.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", - "@smithy/middleware-endpoint": "^4.2.2", - "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-endpoint": "^4.2.4", + "@smithy/middleware-retry": "^4.3.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", - "@smithy/smithy-client": "^4.6.2", + "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", - "@smithy/util-defaults-mode-browser": "^4.1.2", - "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-defaults-mode-browser": "^4.1.4", + "@smithy/util-defaults-mode-node": "^4.1.4", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", @@ -1069,44 +1196,42 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.891.0.tgz", - "integrity": "sha512-QMDaD9GhJe7l0KQp3Tt7dzqFCz/H2XuyNjQgvi10nM1MfI1RagmLtmEhZveQxMPhZ/AtohLSK0Tisp/I5tR8RQ==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.890.0", - "@aws-sdk/middleware-host-header": "3.891.0", - "@aws-sdk/middleware-logger": "3.891.0", - "@aws-sdk/middleware-recursion-detection": "3.891.0", - "@aws-sdk/middleware-user-agent": "3.891.0", - "@aws-sdk/region-config-resolver": "3.890.0", - "@aws-sdk/types": "3.887.0", - "@aws-sdk/util-endpoints": "3.891.0", - "@aws-sdk/util-user-agent-browser": "3.887.0", - "@aws-sdk/util-user-agent-node": "3.891.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/middleware-host-header": "3.893.0", + "@aws-sdk/middleware-logger": "3.893.0", + "@aws-sdk/middleware-recursion-detection": "3.893.0", + "@aws-sdk/middleware-user-agent": "3.896.0", + "@aws-sdk/region-config-resolver": "3.893.0", + "@aws-sdk/types": "3.893.0", + "@aws-sdk/util-endpoints": "3.895.0", + "@aws-sdk/util-user-agent-browser": "3.893.0", + "@aws-sdk/util-user-agent-node": "3.896.0", "@smithy/config-resolver": "^4.2.2", - "@smithy/core": "^3.11.0", + "@smithy/core": "^3.12.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", - "@smithy/middleware-endpoint": "^4.2.2", - "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-endpoint": "^4.2.4", + "@smithy/middleware-retry": "^4.3.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", - "@smithy/smithy-client": "^4.6.2", + "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", - "@smithy/util-defaults-mode-browser": "^4.1.2", - "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-defaults-mode-browser": "^4.1.4", + "@smithy/util-defaults-mode-node": "^4.1.4", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", @@ -1118,25 +1243,21 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.890.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.890.0.tgz", - "integrity": "sha512-CT+yjhytHdyKvV3Nh/fqBjnZ8+UiQZVz4NMm4LrPATgVSOdfygXHqrWxrPTVgiBtuJWkotg06DF7+pTd5ekLBw==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", - "@aws-sdk/xml-builder": "3.887.0", - "@smithy/core": "^3.11.0", + "@aws-sdk/types": "3.893.0", + "@aws-sdk/xml-builder": "3.894.0", + "@smithy/core": "^3.12.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/signature-v4": "^5.2.1", - "@smithy/smithy-client": "^4.6.2", + "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "@smithy/util-base64": "^4.1.0", - "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-utf8": "^4.1.0", - "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { @@ -1144,13 +1265,11 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.891.0.tgz", - "integrity": "sha512-3dKE1bMEyEuvEe+xx/rCUn4GsJxykwlzIXfPwECUqDWVZJDVjZTmsIhAnnhkVMmBOULPCXSaFXB0itJErWm/Wg==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/client-cognito-identity": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" @@ -1160,13 +1279,11 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.890.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.890.0.tgz", - "integrity": "sha512-BtsUa2y0Rs8phmB2ScZ5RuPqZVmxJJXjGfeiXctmLFTxTwoayIK1DdNzOWx6SRMPVc3s2RBGN4vO7T1TwN+ajA==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" @@ -1176,20 +1293,18 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.890.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.890.0.tgz", - "integrity": "sha512-0sru3LVwsuGYyzbD90EC/d5HnCZ9PL4O9BA2LYT6b9XceC005Oj86uzE47LXb+mDhTAt3T6ZO0+ZcVQe0DDi8w==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/node-http-handler": "^4.2.1", "@smithy/property-provider": "^4.1.1", "@smithy/protocol-http": "^5.2.1", - "@smithy/smithy-client": "^4.6.2", + "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", - "@smithy/util-stream": "^4.3.1", + "@smithy/util-stream": "^4.3.2", "tslib": "^2.6.2" }, "engines": { @@ -1197,19 +1312,17 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.891.0.tgz", - "integrity": "sha512-9LOfm97oy2d2frwCQjl53XLkoEYG6/rsNM3Y6n8UtRU3bzGAEjixdIuv3b6Z/Mk/QLeikcQEJ9FMC02DuQh2Yw==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/credential-provider-env": "3.890.0", - "@aws-sdk/credential-provider-http": "3.890.0", - "@aws-sdk/credential-provider-process": "3.890.0", - "@aws-sdk/credential-provider-sso": "3.891.0", - "@aws-sdk/credential-provider-web-identity": "3.891.0", - "@aws-sdk/nested-clients": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/credential-provider-env": "3.896.0", + "@aws-sdk/credential-provider-http": "3.896.0", + "@aws-sdk/credential-provider-process": "3.896.0", + "@aws-sdk/credential-provider-sso": "3.896.0", + "@aws-sdk/credential-provider-web-identity": "3.896.0", + "@aws-sdk/nested-clients": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", @@ -1221,18 +1334,16 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.891.0.tgz", - "integrity": "sha512-IjGvQJhpCN512xlT1DFGaPeE1q0YEm/X62w7wHsRpBindW//M+heSulJzP4KPkoJvmJNVu1NxN26/p4uH+M8TQ==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.890.0", - "@aws-sdk/credential-provider-http": "3.890.0", - "@aws-sdk/credential-provider-ini": "3.891.0", - "@aws-sdk/credential-provider-process": "3.890.0", - "@aws-sdk/credential-provider-sso": "3.891.0", - "@aws-sdk/credential-provider-web-identity": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/credential-provider-env": "3.896.0", + "@aws-sdk/credential-provider-http": "3.896.0", + "@aws-sdk/credential-provider-ini": "3.896.0", + "@aws-sdk/credential-provider-process": "3.896.0", + "@aws-sdk/credential-provider-sso": "3.896.0", + "@aws-sdk/credential-provider-web-identity": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", @@ -1244,13 +1355,11 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.890.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.890.0.tgz", - "integrity": "sha512-dWZ54TI1Q+UerF5YOqGiCzY+x2YfHsSQvkyM3T4QDNTJpb/zjiVv327VbSOULOlI7gHKWY/G3tMz0D9nWI7YbA==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", @@ -1261,15 +1370,13 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.891.0.tgz", - "integrity": "sha512-RtF9BwUIZqc/7sFbK6n6qhe0tNaWJQwin89nSeZ1HOsA0Z7TfTOelX8Otd0L5wfeVBMVcgiN3ofqrcZgjFjQjA==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.891.0", - "@aws-sdk/core": "3.890.0", - "@aws-sdk/token-providers": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/client-sso": "3.896.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/token-providers": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", @@ -1280,14 +1387,12 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.891.0.tgz", - "integrity": "sha512-yq7kzm1sHZ0GZrtS+qpjMUp4ES66UoT1+H2xxrOuAZkvUnkpQq1iSjOgBgJJ9FW1EsDUEmlgn94i4hJTNvm7fg==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/nested-clients": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/nested-clients": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", @@ -1298,25 +1403,23 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.891.0.tgz", - "integrity": "sha512-zIrMjHMrbOtqu3E7Kp/YUeEasE6OHLupWeUWJZhSduAzu4BOZXK8mflkat1Ul4OMtLh0Zlk2pztW6NedMpkYZA==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.891.0", - "@aws-sdk/core": "3.890.0", - "@aws-sdk/credential-provider-cognito-identity": "3.891.0", - "@aws-sdk/credential-provider-env": "3.890.0", - "@aws-sdk/credential-provider-http": "3.890.0", - "@aws-sdk/credential-provider-ini": "3.891.0", - "@aws-sdk/credential-provider-node": "3.891.0", - "@aws-sdk/credential-provider-process": "3.890.0", - "@aws-sdk/credential-provider-sso": "3.891.0", - "@aws-sdk/credential-provider-web-identity": "3.891.0", - "@aws-sdk/nested-clients": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/client-cognito-identity": "3.896.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/credential-provider-cognito-identity": "3.896.0", + "@aws-sdk/credential-provider-env": "3.896.0", + "@aws-sdk/credential-provider-http": "3.896.0", + "@aws-sdk/credential-provider-ini": "3.896.0", + "@aws-sdk/credential-provider-node": "3.896.0", + "@aws-sdk/credential-provider-process": "3.896.0", + "@aws-sdk/credential-provider-sso": "3.896.0", + "@aws-sdk/credential-provider-web-identity": "3.896.0", + "@aws-sdk/nested-clients": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/config-resolver": "^4.2.2", - "@smithy/core": "^3.11.0", + "@smithy/core": "^3.12.0", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", @@ -1328,12 +1431,10 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.891.0.tgz", - "integrity": "sha512-OYaxbqNDeo/noE7MfYWWQDu86cF/R/bMXdZ2QZwpWpX2yjy8xMwxSg7c/4tEK/OtiDZTKRXXrvPxRxG2+1bnJw==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" @@ -1343,12 +1444,10 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.891.0.tgz", - "integrity": "sha512-azL4mg1H1FLpOAECiFtU+r+9VDhpeF6Vh9pzD4m51BWPJ60CVnyHayeI/0gqPsL60+5l90/b9VWonoA8DvAvpg==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" }, @@ -1357,12 +1456,10 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.891.0.tgz", - "integrity": "sha512-n++KwAEnNlvx5NZdIQZnvl2GjSH/YE3xGSqW2GmPB5780tFY5lOYSb1uA+EUzJSVX4oAKAkSPdR2AOW09kzoew==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@aws/lambda-invoke-store": "^0.0.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", @@ -1373,15 +1470,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.891.0.tgz", - "integrity": "sha512-xyxIZtR7FunCWymPAxEm61VUq9lruXxWIYU5AIh5rt0av7nXa2ayAAlscQ7ch9jUlw+lbC2PVbw0K/OYrMovuA==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/types": "3.887.0", - "@aws-sdk/util-endpoints": "3.891.0", - "@smithy/core": "^3.11.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/types": "3.893.0", + "@aws-sdk/util-endpoints": "3.895.0", + "@smithy/core": "^3.12.0", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" @@ -1391,44 +1486,42 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.891.0.tgz", - "integrity": "sha512-cpol+Yk4T3GXPXbRfUyN2u6tpMEHUxAiesZgrfMm11QGHV+pmzyejJV/QZ0pdJKj5sXKaCr4DCntoJ5iBx++Cw==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.890.0", - "@aws-sdk/middleware-host-header": "3.891.0", - "@aws-sdk/middleware-logger": "3.891.0", - "@aws-sdk/middleware-recursion-detection": "3.891.0", - "@aws-sdk/middleware-user-agent": "3.891.0", - "@aws-sdk/region-config-resolver": "3.890.0", - "@aws-sdk/types": "3.887.0", - "@aws-sdk/util-endpoints": "3.891.0", - "@aws-sdk/util-user-agent-browser": "3.887.0", - "@aws-sdk/util-user-agent-node": "3.891.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/middleware-host-header": "3.893.0", + "@aws-sdk/middleware-logger": "3.893.0", + "@aws-sdk/middleware-recursion-detection": "3.893.0", + "@aws-sdk/middleware-user-agent": "3.896.0", + "@aws-sdk/region-config-resolver": "3.893.0", + "@aws-sdk/types": "3.893.0", + "@aws-sdk/util-endpoints": "3.895.0", + "@aws-sdk/util-user-agent-browser": "3.893.0", + "@aws-sdk/util-user-agent-node": "3.896.0", "@smithy/config-resolver": "^4.2.2", - "@smithy/core": "^3.11.0", + "@smithy/core": "^3.12.0", "@smithy/fetch-http-handler": "^5.2.1", "@smithy/hash-node": "^4.1.1", "@smithy/invalid-dependency": "^4.1.1", "@smithy/middleware-content-length": "^4.1.1", - "@smithy/middleware-endpoint": "^4.2.2", - "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-endpoint": "^4.2.4", + "@smithy/middleware-retry": "^4.3.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/middleware-stack": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/node-http-handler": "^4.2.1", "@smithy/protocol-http": "^5.2.1", - "@smithy/smithy-client": "^4.6.2", + "@smithy/smithy-client": "^4.6.4", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-base64": "^4.1.0", "@smithy/util-body-length-browser": "^4.1.0", "@smithy/util-body-length-node": "^4.1.0", - "@smithy/util-defaults-mode-browser": "^4.1.2", - "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-defaults-mode-browser": "^4.1.4", + "@smithy/util-defaults-mode-node": "^4.1.4", "@smithy/util-endpoints": "^3.1.2", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", @@ -1440,12 +1533,10 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.890.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.890.0.tgz", - "integrity": "sha512-VfdT+tkF9groRYNzKvQCsCGDbOQdeBdzyB1d6hWiq22u13UafMIoskJ1ec0i0H1X29oT6mjTitfnvPq1UiKwzQ==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "@smithy/util-config-provider": "^4.1.0", @@ -1457,14 +1548,12 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.891.0.tgz", - "integrity": "sha512-n31JDMWhj/53QX33C97+1W63JGtgO8pg1/Tfmv4f9TR2VSGf1rFwYH7cPZ7dVIMmcUBeI2VCVhwUIabGNHw86Q==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.890.0", - "@aws-sdk/nested-clients": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/core": "3.896.0", + "@aws-sdk/nested-clients": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/property-provider": "^4.1.1", "@smithy/shared-ini-file-loader": "^4.2.0", "@smithy/types": "^4.5.0", @@ -1475,9 +1564,7 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.887.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.887.0.tgz", - "integrity": "sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -1488,12 +1575,10 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.891.0.tgz", - "integrity": "sha512-MgxvmHIQJbUK+YquX4bdjDw1MjdBqTRJGHs6iU2KM8nN1ut0bPwvavkq7NrY/wB3ZKKECqmv6J/nw+hYKKUIHA==", + "version": "3.895.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@smithy/types": "^4.5.0", "@smithy/url-parser": "^4.1.1", "@smithy/util-endpoints": "^3.1.2", @@ -1504,9 +1589,7 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.873.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz", - "integrity": "sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1516,25 +1599,21 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.887.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.887.0.tgz", - "integrity": "sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA==", + "version": "3.893.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.887.0", + "@aws-sdk/types": "3.893.0", "@smithy/types": "^4.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.891.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.891.0.tgz", - "integrity": "sha512-/mmvVL2PJE2NMTWj9JSY98OISx7yov0mi72eOViWCHQMRYJCN12DY54i1rc4Q/oPwJwTwIrx69MLjVhQ1OZsgw==", + "version": "3.896.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.891.0", - "@aws-sdk/types": "3.887.0", + "@aws-sdk/middleware-user-agent": "3.896.0", + "@aws-sdk/types": "3.893.0", "@smithy/node-config-provider": "^4.2.2", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" @@ -1552,12 +1631,11 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.887.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.887.0.tgz", - "integrity": "sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ==", + "version": "3.894.0", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", + "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, "engines": { @@ -1566,8 +1644,6 @@ }, "node_modules/@aws/lambda-invoke-store": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", - "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -1575,8 +1651,6 @@ }, "node_modules/@azure/abort-controller": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "license": "MIT", "dependencies": { @@ -1588,8 +1662,6 @@ }, "node_modules/@azure/core-auth": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "dev": true, "license": "MIT", "dependencies": { @@ -1603,8 +1675,6 @@ }, "node_modules/@azure/core-client": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", "dev": true, "license": "MIT", "dependencies": { @@ -1622,8 +1692,6 @@ }, "node_modules/@azure/core-rest-pipeline": { "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.1.tgz", - "integrity": "sha512-UVZlVLfLyz6g3Hy7GNDpooMQonUygH7ghdiSASOOHy97fKj/mPLqgDX7aidOijn+sCMU+WU8NjlPlNTgnvbcGA==", "dev": true, "license": "MIT", "dependencies": { @@ -1641,8 +1709,6 @@ }, "node_modules/@azure/core-tracing": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1654,8 +1720,6 @@ }, "node_modules/@azure/core-util": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "dev": true, "license": "MIT", "dependencies": { @@ -1669,8 +1733,6 @@ }, "node_modules/@azure/identity": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.12.0.tgz", - "integrity": "sha512-6vuh2R3Cte6SD6azNalLCjIDoryGdcvDVEV7IDRPtm5lHX5ffkDlIalaoOp5YJU08e4ipjJENel20kSMDLAcug==", "dev": true, "license": "MIT", "dependencies": { @@ -1692,8 +1754,6 @@ }, "node_modules/@azure/logger": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1705,22 +1765,18 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.23.0.tgz", - "integrity": "sha512-uHnfRwGAEHaYVXzpCtYsruy6PQxL2v76+MJ3+n/c/3PaTiTIa5ch7VofTUNoA39nHyjJbdiqTwFZK40OOTOkjw==", + "version": "4.24.0", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.12.0" + "@azure/msal-common": "15.13.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.12.0.tgz", - "integrity": "sha512-4ucXbjVw8KJ5QBgnGJUeA07c8iznwlk5ioHIhI4ASXcXgcf2yRFhWzYOyWg/cI49LC9ekpFJeQtO3zjDTbl6TQ==", + "version": "15.13.0", "dev": true, "license": "MIT", "engines": { @@ -1728,13 +1784,11 @@ } }, "node_modules/@azure/msal-node": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.7.4.tgz", - "integrity": "sha512-fjqvhrThwzzPvqhFOdkkGRJCHPQZTNijpceVy8QjcfQuH482tOVEjHyamZaioOhVtx+FK1u+eMpJA2Zz4U9LVg==", + "version": "3.8.0", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.12.0", + "@azure/msal-common": "15.13.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -1744,8 +1798,6 @@ }, "node_modules/@azure/msal-node/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "license": "MIT", "bin": { @@ -1754,8 +1806,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { @@ -1769,8 +1819,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", "dev": true, "license": "MIT", "engines": { @@ -1779,8 +1827,6 @@ }, "node_modules/@babel/core": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", - "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", "dependencies": { @@ -1808,10 +1854,29 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1820,8 +1885,6 @@ }, "node_modules/@babel/generator": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { @@ -1837,8 +1900,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1854,8 +1915,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -1864,8 +1923,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1874,15 +1931,11 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -1891,8 +1944,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { @@ -1905,8 +1956,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { @@ -1923,8 +1972,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -1933,8 +1980,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -1943,8 +1988,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -1953,8 +1996,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -1963,8 +2004,6 @@ }, "node_modules/@babel/helpers": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { @@ -1977,8 +2016,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "dev": true, "license": "MIT", "dependencies": { @@ -1993,8 +2030,6 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { @@ -2006,8 +2041,6 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", "dependencies": { @@ -2019,8 +2052,6 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { @@ -2032,8 +2063,6 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -2048,8 +2077,6 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { @@ -2064,8 +2091,6 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", "dependencies": { @@ -2077,8 +2102,6 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", "dependencies": { @@ -2090,8 +2113,6 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { @@ -2106,8 +2127,6 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", "dependencies": { @@ -2119,8 +2138,6 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2132,8 +2149,6 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", "dependencies": { @@ -2145,8 +2160,6 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", "dependencies": { @@ -2158,8 +2171,6 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2171,8 +2182,6 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", "dependencies": { @@ -2184,8 +2193,6 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", "dependencies": { @@ -2200,8 +2207,6 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", "dependencies": { @@ -2216,8 +2221,6 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2232,8 +2235,6 @@ }, "node_modules/@babel/runtime": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "dev": true, "license": "MIT", "engines": { @@ -2242,8 +2243,6 @@ }, "node_modules/@babel/template": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { @@ -2257,8 +2256,6 @@ }, "node_modules/@babel/traverse": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2274,10 +2271,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/types": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2290,15 +2306,11 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, "license": "MIT" }, "node_modules/@biomejs/biome": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", - "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", "dev": true, "hasInstallScript": true, "license": "MIT OR Apache-2.0", @@ -2325,8 +2337,6 @@ }, "node_modules/@biomejs/cli-darwin-arm64": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", - "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", "cpu": [ "arm64" ], @@ -2340,57 +2350,6 @@ "node": ">=14.21.3" } }, - "node_modules/@biomejs/cli-darwin-x64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", - "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-arm64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", - "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", - "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, "node_modules/@biomejs/cli-linux-x64": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", @@ -2407,61 +2366,8 @@ "node": ">=14.21.3" } }, - "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", - "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-win32-arm64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", - "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-win32-x64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", - "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.21.3" - } - }, "node_modules/@borewit/text-codec": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", - "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", "license": "MIT", "funding": { "type": "github", @@ -2470,8 +2376,6 @@ }, "node_modules/@changesets/apply-release-plan": { "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.13.tgz", - "integrity": "sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==", "dev": true, "license": "MIT", "dependencies": { @@ -2490,35 +2394,8 @@ "semver": "^7.5.3" } }, - "node_modules/@changesets/apply-release-plan/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/apply-release-plan/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/@changesets/apply-release-plan/node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -2531,20 +2408,8 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@changesets/apply-release-plan/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2558,8 +2423,6 @@ }, "node_modules/@changesets/changelog-git": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2568,8 +2431,6 @@ }, "node_modules/@changesets/changelog-github": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.5.1.tgz", - "integrity": "sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2580,8 +2441,6 @@ }, "node_modules/@changesets/changelog-github/node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -2590,8 +2449,6 @@ }, "node_modules/@changesets/cli": { "version": "2.29.7", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.7.tgz", - "integrity": "sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2628,45 +2485,8 @@ "changeset": "bin.js" } }, - "node_modules/@changesets/cli/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@changesets/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@changesets/config": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", - "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", "dev": true, "license": "MIT", "dependencies": { @@ -2679,45 +2499,8 @@ "micromatch": "^4.0.8" } }, - "node_modules/@changesets/config/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/config/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@changesets/config/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@changesets/errors": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, "license": "MIT", "dependencies": { @@ -2726,8 +2509,6 @@ }, "node_modules/@changesets/get-dependents-graph": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2739,8 +2520,6 @@ }, "node_modules/@changesets/get-github-info": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.6.0.tgz", - "integrity": "sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==", "dev": true, "license": "MIT", "dependencies": { @@ -2750,8 +2529,6 @@ }, "node_modules/@changesets/get-release-plan": { "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz", - "integrity": "sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==", "dev": true, "license": "MIT", "dependencies": { @@ -2765,15 +2542,11 @@ }, "node_modules/@changesets/get-version-range-type": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", "dev": true, "license": "MIT" }, "node_modules/@changesets/git": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -2786,8 +2559,6 @@ }, "node_modules/@changesets/logger": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, "license": "MIT", "dependencies": { @@ -2796,8 +2567,6 @@ }, "node_modules/@changesets/parse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.1.tgz", - "integrity": "sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2807,8 +2576,6 @@ }, "node_modules/@changesets/pre": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -2818,45 +2585,8 @@ "fs-extra": "^7.0.1" } }, - "node_modules/@changesets/pre/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/pre/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@changesets/pre/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@changesets/read": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.5.tgz", - "integrity": "sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==", "dev": true, "license": "MIT", "dependencies": { @@ -2869,45 +2599,8 @@ "picocolors": "^1.1.0" } }, - "node_modules/@changesets/read/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/read/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@changesets/read/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@changesets/should-skip-package": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", "dev": true, "license": "MIT", "dependencies": { @@ -2917,15 +2610,11 @@ }, "node_modules/@changesets/types": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", "dev": true, "license": "MIT" }, "node_modules/@changesets/write": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2935,35 +2624,8 @@ "prettier": "^2.7.1" } }, - "node_modules/@changesets/write/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@changesets/write/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/@changesets/write/node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -2976,54 +2638,16 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@changesets/write/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@dnd-kit/accessibility": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", - "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", "dev": true, "license": "MIT", "dependencies": { @@ -3035,8 +2659,6 @@ }, "node_modules/@dnd-kit/core": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", - "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3051,8 +2673,6 @@ }, "node_modules/@dnd-kit/modifiers": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-9.0.0.tgz", - "integrity": "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==", "dev": true, "license": "MIT", "dependencies": { @@ -3066,8 +2686,6 @@ }, "node_modules/@dnd-kit/utilities": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", - "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "dev": true, "license": "MIT", "dependencies": { @@ -3079,8 +2697,6 @@ }, "node_modules/@emnapi/core": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", "dev": true, "license": "MIT", "optional": true, @@ -3091,8 +2707,6 @@ }, "node_modules/@emnapi/runtime": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", "dev": true, "license": "MIT", "optional": true, @@ -3102,8 +2716,6 @@ }, "node_modules/@emnapi/wasi-threads": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "dev": true, "license": "MIT", "optional": true, @@ -3113,79 +2725,11 @@ }, "node_modules/@epic-web/invariant": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", - "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", "dev": true, "license": "MIT" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", "cpu": [ "arm64" ], @@ -3198,346 +2742,8 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@floating-ui/core": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", "dev": true, "license": "MIT", "dependencies": { @@ -3546,8 +2752,6 @@ }, "node_modules/@floating-ui/dom": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", "dev": true, "license": "MIT", "dependencies": { @@ -3557,8 +2761,6 @@ }, "node_modules/@floating-ui/react-dom": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", "dev": true, "license": "MIT", "dependencies": { @@ -3571,16 +2773,11 @@ }, "node_modules/@floating-ui/utils": { "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "dev": true, "license": "MIT" }, "node_modules/@google/gemini-cli-core": { "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@google/gemini-cli-core/-/gemini-cli-core-0.1.22.tgz", - "integrity": "sha512-PvIod0b8+vB8Wfdpr4axiDopL6sxeQ/4qF4Q1zdXOD3ANUYSLuhq3Af8OrugA0so6vCjDMllyKcnOmGT6s6+ag==", - "optional": true, "dependencies": { "@google/genai": "1.13.0", "@modelcontextprotocol/sdk": "^1.11.0", @@ -3623,10 +2820,7 @@ }, "node_modules/@google/gemini-cli-core/node_modules/@google/genai": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.13.0.tgz", - "integrity": "sha512-BxilXzE8cJ0zt5/lXk6KwuBcIT9P2Lbi2WXhwWMbxf1RNeC68/8DmYQqMrzQP333CieRMdbDXs0eNCphLoScWg==", "license": "Apache-2.0", - "optional": true, "dependencies": { "google-auth-library": "^9.14.2", "ws": "^8.18.0" @@ -3645,10 +2839,7 @@ }, "node_modules/@google/gemini-cli-core/node_modules/dotenv": { "version": "17.2.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", - "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==", "license": "BSD-2-Clause", - "optional": true, "engines": { "node": ">=12" }, @@ -3656,28 +2847,9 @@ "url": "https://dotenvx.com" } }, - "node_modules/@google/gemini-cli-core/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@google/genai": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.20.0.tgz", - "integrity": "sha512-QdShxO9LX35jFogy3iKprQNqgKKveux4H2QjOnyIvyHRuGi6PHiz3fjNf8Y0VPY8o5V2fHqR2XqiSVoz7yZs0w==", + "version": "1.14.0", "license": "Apache-2.0", - "optional": true, "dependencies": { "google-auth-library": "^9.14.2", "ws": "^8.18.0" @@ -3686,7 +2858,7 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.11.4" + "@modelcontextprotocol/sdk": "^1.11.0" }, "peerDependenciesMeta": { "@modelcontextprotocol/sdk": { @@ -3696,10 +2868,7 @@ }, "node_modules/@grpc/grpc-js": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", - "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" @@ -3710,10 +2879,7 @@ }, "node_modules/@grpc/proto-loader": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", - "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -3729,8 +2895,6 @@ }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", "cpu": [ "arm64" ], @@ -3749,32 +2913,8 @@ "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", "cpu": [ "arm64" ], @@ -3787,319 +2927,8 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@inquirer/ansi": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", - "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", "license": "MIT", "engines": { "node": ">=18" @@ -4107,8 +2936,6 @@ }, "node_modules/@inquirer/checkbox": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.4.tgz", - "integrity": "sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^1.0.0", @@ -4131,8 +2958,6 @@ }, "node_modules/@inquirer/confirm": { "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", - "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4152,8 +2977,6 @@ }, "node_modules/@inquirer/core": { "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", - "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^1.0.0", @@ -4177,86 +3000,8 @@ } } }, - "node_modules/@inquirer/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@inquirer/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@inquirer/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/@inquirer/core/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/core/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@inquirer/editor": { "version": "4.2.20", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.20.tgz", - "integrity": "sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4277,8 +3022,6 @@ }, "node_modules/@inquirer/expand": { "version": "4.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.20.tgz", - "integrity": "sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4299,8 +3042,6 @@ }, "node_modules/@inquirer/external-editor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "license": "MIT", "dependencies": { "chardet": "^2.1.0", @@ -4320,8 +3061,6 @@ }, "node_modules/@inquirer/figures": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", "license": "MIT", "engines": { "node": ">=18" @@ -4329,8 +3068,6 @@ }, "node_modules/@inquirer/input": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.4.tgz", - "integrity": "sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4350,8 +3087,6 @@ }, "node_modules/@inquirer/number": { "version": "3.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.20.tgz", - "integrity": "sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4371,8 +3106,6 @@ }, "node_modules/@inquirer/password": { "version": "4.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.20.tgz", - "integrity": "sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^1.0.0", @@ -4393,8 +3126,6 @@ }, "node_modules/@inquirer/prompts": { "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.6.tgz", - "integrity": "sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==", "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.2.4", @@ -4422,8 +3153,6 @@ }, "node_modules/@inquirer/rawlist": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.8.tgz", - "integrity": "sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4444,8 +3173,6 @@ }, "node_modules/@inquirer/search": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.3.tgz", - "integrity": "sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.2.2", @@ -4467,8 +3194,6 @@ }, "node_modules/@inquirer/select": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.4.tgz", - "integrity": "sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^1.0.0", @@ -4491,8 +3216,6 @@ }, "node_modules/@inquirer/type": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", - "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", "license": "MIT", "engines": { "node": ">=18" @@ -4508,8 +3231,6 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -4523,25 +3244,52 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", "dependencies": { @@ -4553,8 +3301,6 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4570,8 +3316,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -4580,8 +3324,6 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -4590,8 +3332,6 @@ }, "node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "license": "MIT", "dependencies": { @@ -4608,8 +3348,6 @@ }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -4624,8 +3362,6 @@ }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -4641,8 +3377,6 @@ }, "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4654,15 +3388,11 @@ }, "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -4674,8 +3404,6 @@ }, "node_modules/@jest/core": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "license": "MIT", "dependencies": { @@ -4720,10 +3448,16 @@ } } }, + "node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -4738,8 +3472,6 @@ }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -4755,8 +3487,6 @@ }, "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4768,15 +3498,22 @@ }, "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -4788,8 +3525,6 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "license": "MIT", "dependencies": { @@ -4804,8 +3539,6 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4818,8 +3551,6 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { @@ -4831,8 +3562,6 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4849,8 +3578,6 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4865,8 +3592,6 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "license": "MIT", "dependencies": { @@ -4907,10 +3632,16 @@ } } }, + "node_modules/@jest/reporters/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -4925,8 +3656,6 @@ }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -4936,8 +3665,6 @@ }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -4953,8 +3680,6 @@ }, "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4966,16 +3691,11 @@ }, "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -4993,25 +3713,8 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@jest/reporters/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -5021,10 +3724,19 @@ "node": "*" } }, + "node_modules/@jest/reporters/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -5036,8 +3748,6 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -5049,8 +3759,6 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "license": "MIT", "dependencies": { @@ -5064,8 +3772,6 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "license": "MIT", "dependencies": { @@ -5080,8 +3786,6 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "license": "MIT", "dependencies": { @@ -5096,8 +3800,6 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -5123,8 +3825,6 @@ }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -5139,8 +3839,6 @@ }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -5156,8 +3854,6 @@ }, "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5169,15 +3865,11 @@ }, "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -5189,8 +3881,6 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { @@ -5207,8 +3897,6 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -5223,8 +3911,6 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -5240,8 +3926,6 @@ }, "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5253,15 +3937,11 @@ }, "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -5273,8 +3953,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -5283,8 +3961,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5294,8 +3970,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -5303,14 +3977,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -5319,10 +3989,7 @@ }, "node_modules/@js-sdsl/ordered-map": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", "license": "MIT", - "optional": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -5330,8 +3997,6 @@ }, "node_modules/@jsep-plugin/assignment": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", - "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", "dev": true, "license": "MIT", "engines": { @@ -5343,8 +4008,6 @@ }, "node_modules/@jsep-plugin/regex": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", - "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", "dev": true, "license": "MIT", "engines": { @@ -5356,8 +4019,6 @@ }, "node_modules/@jsep-plugin/ternary": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@jsep-plugin/ternary/-/ternary-1.1.4.tgz", - "integrity": "sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==", "dev": true, "license": "MIT", "engines": { @@ -5369,32 +4030,41 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "license": "MIT", - "optional": true, "dependencies": { "debug": "^4.1.1" } }, + "node_modules/@kwsites/file-exists/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@kwsites/file-exists/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/cli": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@manypkg/cli/-/cli-0.25.1.tgz", - "integrity": "sha512-lag906FyiNxzZjsRErkUD5/to174I2JzPk5bZubuJp6loMKKJn73zrtqeU7nHlVkHBg3tgXDTJj22HxUDxLRXw==", "dev": true, "license": "MIT", "dependencies": { @@ -5419,8 +4089,6 @@ }, "node_modules/@manypkg/cli/node_modules/@manypkg/find-root": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-3.1.0.tgz", - "integrity": "sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA==", "dev": true, "license": "MIT", "dependencies": { @@ -5432,8 +4100,6 @@ }, "node_modules/@manypkg/cli/node_modules/@manypkg/get-packages": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-3.1.0.tgz", - "integrity": "sha512-0TbBVyvPrP7xGYBI/cP8UP+yl/z+HtbTttAD7FMAJgn/kXOTwh5/60TsqP9ZYY710forNfyV0N8P/IE/ujGZJg==", "dev": true, "license": "MIT", "dependencies": { @@ -5446,8 +4112,6 @@ }, "node_modules/@manypkg/cli/node_modules/detect-indent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", - "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", "dev": true, "license": "MIT", "engines": { @@ -5459,8 +4123,6 @@ }, "node_modules/@manypkg/cli/node_modules/p-limit": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", "dev": true, "license": "MIT", "dependencies": { @@ -5473,23 +4135,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@manypkg/cli/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@manypkg/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, "license": "MIT", "dependencies": { @@ -5501,15 +4148,11 @@ }, "node_modules/@manypkg/find-root/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/find-root/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5523,8 +4166,6 @@ }, "node_modules/@manypkg/find-root/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -5533,8 +4174,6 @@ }, "node_modules/@manypkg/find-root/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -5543,8 +4182,6 @@ }, "node_modules/@manypkg/get-packages": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, "license": "MIT", "dependencies": { @@ -5558,15 +4195,11 @@ }, "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", "dev": true, "license": "MIT" }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5580,8 +4213,6 @@ }, "node_modules/@manypkg/get-packages/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -5590,8 +4221,6 @@ }, "node_modules/@manypkg/get-packages/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -5600,8 +4229,6 @@ }, "node_modules/@manypkg/tools": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/tools/-/tools-2.1.0.tgz", - "integrity": "sha512-0FOIepYR4ugPYaHwK7hDeHDkfPOBVvayt9QpvRbi2LT/h2b0GaE/gM9Gag7fsnyYyNaTZ2IGyOuVg07IYepvYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5615,15 +4242,11 @@ }, "node_modules/@manypkg/tools/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/@manypkg/tools/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5635,8 +4258,6 @@ }, "node_modules/@mdx-js/mdx": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", - "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5673,8 +4294,6 @@ }, "node_modules/@mdx-js/mdx/node_modules/source-map": { "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5683,8 +4302,6 @@ }, "node_modules/@mdx-js/react": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", - "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "dev": true, "license": "MIT", "dependencies": { @@ -5700,18 +4317,16 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.721", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.721.tgz", - "integrity": "sha512-6hb5Ka+AvCMxAYoU/PdxKRa0bDONprab1V3K100JD7EKlxj1/GLqGRY9ZAk1sm1NuWidK8cOpw7W7PmGDFmV2Q==", + "version": "4.0.735", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.531", - "@mintlify/link-rot": "3.0.668", - "@mintlify/models": "0.0.229", - "@mintlify/prebuild": "1.0.655", - "@mintlify/previewing": "4.0.704", - "@mintlify/validation": "0.1.469", + "@mintlify/common": "1.0.545", + "@mintlify/link-rot": "3.0.682", + "@mintlify/models": "0.0.230", + "@mintlify/prebuild": "1.0.669", + "@mintlify/previewing": "4.0.718", + "@mintlify/validation": "0.1.476", "chalk": "^5.2.0", "detect-port": "^1.5.1", "fs-extra": "^11.2.0", @@ -5733,15 +4348,24 @@ }, "node_modules/@mintlify/cli/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, + "node_modules/@mintlify/cli/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/cli/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5752,17 +4376,15 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.531", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.531.tgz", - "integrity": "sha512-G8goOB2b/Pgf9m59vOUspB6bIhAq9nEig9IzcLsnh0yJqjCoHmULoNfM9MPiujxBbdQCSrTttkurzZvqy5hIEQ==", + "version": "1.0.545", "dev": true, "license": "ISC", "dependencies": { "@asyncapi/parser": "^3.4.0", - "@mintlify/mdx": "^2.0.5", - "@mintlify/models": "0.0.229", - "@mintlify/openapi-parser": "^0.0.7", - "@mintlify/validation": "0.1.469", + "@mintlify/mdx": "2.0.13", + "@mintlify/models": "0.0.230", + "@mintlify/openapi-parser": "^0.0.8", + "@mintlify/validation": "0.1.476", "@sindresorhus/slugify": "^2.1.1", "acorn": "^8.11.2", "acorn-jsx": "^5.3.2", @@ -5802,15 +4424,17 @@ } }, "node_modules/@mintlify/common/node_modules/@mintlify/mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@mintlify/mdx/-/mdx-2.0.5.tgz", - "integrity": "sha512-9WpFDRFqET1ovHWooi+fvWJorvYgEf2BjG65R8tUjqjTWzWqBbNVpumpoAojNqi7i7m0NeZami2oAOxqCyoy4g==", + "version": "2.0.13", "dev": true, "license": "MIT", "dependencies": { "@shikijs/transformers": "^3.11.0", + "@shikijs/twoslash": "^3.12.2", "hast-util-to-string": "^3.0.1", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-gfm": "^3.1.0", "mdast-util-mdx-jsx": "^3.2.0", + "mdast-util-to-hast": "^13.2.0", "next-mdx-remote-client": "^1.0.3", "rehype-katex": "^7.0.1", "remark-gfm": "^4.0.0", @@ -5821,28 +4445,18 @@ "unist-util-visit": "^5.0.0" }, "peerDependencies": { + "@radix-ui/react-popover": "^1.1.15", "react": "^18.3.1", "react-dom": "^18.3.1" } }, - "node_modules/@mintlify/common/node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, "node_modules/@mintlify/common/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/@mintlify/common/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -5854,8 +4468,6 @@ }, "node_modules/@mintlify/common/node_modules/jiti": { "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", "bin": { @@ -5864,8 +4476,6 @@ }, "node_modules/@mintlify/common/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -5877,8 +4487,6 @@ }, "node_modules/@mintlify/common/node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -5890,8 +4498,6 @@ }, "node_modules/@mintlify/common/node_modules/next-mdx-remote-client": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/next-mdx-remote-client/-/next-mdx-remote-client-1.1.2.tgz", - "integrity": "sha512-LZJxBU420dTZsbWOrNYZXkahGJu8lNKxLTrQrZl4JUsKeFtp91yA78dHMTfOcp7UAud3txhM1tayyoKFq4tw7A==", "dev": true, "license": "MPL 2.0", "dependencies": { @@ -5913,8 +4519,6 @@ }, "node_modules/@mintlify/common/node_modules/postcss-load-config": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, "funding": [ { @@ -5949,8 +4553,6 @@ }, "node_modules/@mintlify/common/node_modules/react": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "license": "MIT", "peer": true, @@ -5963,8 +4565,6 @@ }, "node_modules/@mintlify/common/node_modules/react-dom": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dev": true, "license": "MIT", "peer": true, @@ -5978,8 +4578,6 @@ }, "node_modules/@mintlify/common/node_modules/scheduler": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "license": "MIT", "peer": true, @@ -5989,8 +4587,6 @@ }, "node_modules/@mintlify/common/node_modules/tailwindcss": { "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", "dependencies": { @@ -6027,8 +4623,6 @@ }, "node_modules/@mintlify/common/node_modules/yaml": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { @@ -6039,16 +4633,14 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.668", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.668.tgz", - "integrity": "sha512-49r/nnscqsIL7RjdoYbrMVHLPB9Ztw7KfuOpPiJsp6EdV1gqjBcB/pbCbC4mt31qgj7ZCIEEn6v0WYhYanayKQ==", + "version": "3.0.682", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.531", - "@mintlify/prebuild": "1.0.655", - "@mintlify/previewing": "4.0.704", - "@mintlify/validation": "0.1.469", + "@mintlify/common": "1.0.545", + "@mintlify/prebuild": "1.0.669", + "@mintlify/previewing": "4.0.718", + "@mintlify/validation": "0.1.476", "fs-extra": "^11.1.0", "unist-util-visit": "^4.1.1" }, @@ -6058,15 +4650,24 @@ }, "node_modules/@mintlify/link-rot/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, "license": "MIT" }, + "node_modules/@mintlify/link-rot/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/link-rot/node_modules/unist-util-is": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, "license": "MIT", "dependencies": { @@ -6079,8 +4680,6 @@ }, "node_modules/@mintlify/link-rot/node_modules/unist-util-visit": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, "license": "MIT", "dependencies": { @@ -6095,8 +4694,6 @@ }, "node_modules/@mintlify/link-rot/node_modules/unist-util-visit-parents": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, "license": "MIT", "dependencies": { @@ -6109,9 +4706,7 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.229", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.229.tgz", - "integrity": "sha512-1P3R6dQFNzjTbmVDCQf/vAGFGOEUdUv6sCaJAmZCNWY2mhwgvDU/Oa2YLiNmVrAqnWDH1Pkz5nq+i7gClrdXgA==", + "version": "0.0.230", "dev": true, "license": "Elastic-2.0", "dependencies": { @@ -6123,9 +4718,7 @@ } }, "node_modules/@mintlify/openapi-parser": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@mintlify/openapi-parser/-/openapi-parser-0.0.7.tgz", - "integrity": "sha512-3ecbkzPbsnkKVZJypVL0H5pCTR7a4iLv4cP7zbffzAwy+vpH70JmPxNVpPPP62yLrdZlfNcMxu5xKeT7fllgMg==", + "version": "0.0.8", "dev": true, "license": "MIT", "dependencies": { @@ -6142,8 +4735,6 @@ }, "node_modules/@mintlify/openapi-parser/node_modules/leven": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-4.1.0.tgz", - "integrity": "sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==", "dev": true, "license": "MIT", "engines": { @@ -6155,8 +4746,6 @@ }, "node_modules/@mintlify/openapi-parser/node_modules/yaml": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { @@ -6167,16 +4756,14 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.655", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.655.tgz", - "integrity": "sha512-3A52dck+vkxCdOGMaOxsXBY3tevx7oKOZCOPgBE5NFfoTO/ra36+KdJ1imJLk1UwWU+GkKILReOvr01b7wqt5Q==", + "version": "1.0.669", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.531", - "@mintlify/openapi-parser": "^0.0.7", - "@mintlify/scraping": "4.0.390", - "@mintlify/validation": "0.1.469", + "@mintlify/common": "1.0.545", + "@mintlify/openapi-parser": "^0.0.8", + "@mintlify/scraping": "4.0.404", + "@mintlify/validation": "0.1.476", "chalk": "^5.3.0", "favicons": "^7.2.0", "fs-extra": "^11.1.0", @@ -6189,22 +4776,29 @@ }, "node_modules/@mintlify/prebuild/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, "license": "MIT" }, "node_modules/@mintlify/prebuild/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, + "node_modules/@mintlify/prebuild/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/prebuild/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6216,8 +4810,6 @@ }, "node_modules/@mintlify/prebuild/node_modules/unist-util-is": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, "license": "MIT", "dependencies": { @@ -6230,8 +4822,6 @@ }, "node_modules/@mintlify/prebuild/node_modules/unist-util-visit": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, "license": "MIT", "dependencies": { @@ -6246,8 +4836,6 @@ }, "node_modules/@mintlify/prebuild/node_modules/unist-util-visit-parents": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, "license": "MIT", "dependencies": { @@ -6260,15 +4848,13 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.704", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.704.tgz", - "integrity": "sha512-gR2e9H1kR0L8e6My7sMQQLVmmR5jU5dKkiCERI+jnd6R1xuEdlHAUlmXa8dEfpWTt1xBfsSK53i2FrYSfhp49w==", + "version": "4.0.718", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.531", - "@mintlify/prebuild": "1.0.655", - "@mintlify/validation": "0.1.469", + "@mintlify/common": "1.0.545", + "@mintlify/prebuild": "1.0.669", + "@mintlify/validation": "0.1.476", "better-opn": "^3.0.2", "chalk": "^5.1.0", "chokidar": "^3.5.3", @@ -6294,32 +4880,37 @@ }, "node_modules/@mintlify/previewing/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, "license": "MIT" }, "node_modules/@mintlify/previewing/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/@mintlify/previewing/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "license": "ISC", "engines": { "node": ">=10" } }, + "node_modules/@mintlify/previewing/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/previewing/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6331,8 +4922,6 @@ }, "node_modules/@mintlify/previewing/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "license": "ISC", "engines": { @@ -6341,8 +4930,6 @@ }, "node_modules/@mintlify/previewing/node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "license": "MIT", "dependencies": { @@ -6355,8 +4942,6 @@ }, "node_modules/@mintlify/previewing/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -6366,23 +4951,8 @@ "node": ">=8" } }, - "node_modules/@mintlify/previewing/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@mintlify/previewing/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "license": "ISC", "dependencies": { @@ -6399,8 +4969,6 @@ }, "node_modules/@mintlify/previewing/node_modules/unist-util-is": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, "license": "MIT", "dependencies": { @@ -6413,8 +4981,6 @@ }, "node_modules/@mintlify/previewing/node_modules/unist-util-visit": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, "license": "MIT", "dependencies": { @@ -6429,8 +4995,6 @@ }, "node_modules/@mintlify/previewing/node_modules/unist-util-visit-parents": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, "license": "MIT", "dependencies": { @@ -6444,20 +5008,16 @@ }, "node_modules/@mintlify/previewing/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/@mintlify/scraping": { - "version": "4.0.390", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.390.tgz", - "integrity": "sha512-KdJodHrEQpUApanM7nFjU4ricbxgKH3h+wj2I3KSbV8mHwnpwpBEcpx5o9IGhyCzaUerLYnxCpZSE2VsTAYmFA==", + "version": "4.0.404", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.531", - "@mintlify/openapi-parser": "^0.0.7", + "@mintlify/common": "1.0.545", + "@mintlify/openapi-parser": "^0.0.8", "fs-extra": "^11.1.1", "hast-util-to-mdast": "^10.1.0", "js-yaml": "^4.1.0", @@ -6483,15 +5043,24 @@ }, "node_modules/@mintlify/scraping/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, + "node_modules/@mintlify/scraping/node_modules/fs-extra": { + "version": "11.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/scraping/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6501,14 +5070,21 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@mintlify/scraping/node_modules/zod": { + "version": "3.25.76", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@mintlify/validation": { - "version": "0.1.469", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.469.tgz", - "integrity": "sha512-6u2AcDN+DvRMZexUZ6GneXLuNWbuPIzfMx+YJbefqyK/8au4xGwojjN0pS7Diy+/NxAxS7fXidKwppoZ385SuQ==", + "version": "0.1.476", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/models": "0.0.229", + "@mintlify/mdx": "2.0.13", + "@mintlify/models": "0.0.230", "arktype": "^2.1.20", "lcm": "^0.0.3", "lodash": "^4.17.21", @@ -6517,11 +5093,106 @@ "zod-to-json-schema": "^3.20.3" } }, + "node_modules/@mintlify/validation/node_modules/@mintlify/mdx": { + "version": "2.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/transformers": "^3.11.0", + "@shikijs/twoslash": "^3.12.2", + "hast-util-to-string": "^3.0.1", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-gfm": "^3.1.0", + "mdast-util-mdx-jsx": "^3.2.0", + "mdast-util-to-hast": "^13.2.0", + "next-mdx-remote-client": "^1.0.3", + "rehype-katex": "^7.0.1", + "remark-gfm": "^4.0.0", + "remark-math": "^6.0.0", + "remark-smartypants": "^3.0.2", + "shiki": "^3.11.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "peerDependencies": { + "@radix-ui/react-popover": "^1.1.15", + "react": "^18.3.1", + "react-dom": "^18.3.1" + } + }, + "node_modules/@mintlify/validation/node_modules/next-mdx-remote-client": { + "version": "1.1.2", + "dev": true, + "license": "MPL 2.0", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@mdx-js/mdx": "^3.1.0", + "@mdx-js/react": "^3.1.0", + "remark-mdx-remove-esm": "^1.2.0", + "serialize-error": "^12.0.0", + "vfile": "^6.0.3", + "vfile-matter": "^5.0.1" + }, + "engines": { + "node": ">=18.18.0" + }, + "peerDependencies": { + "react": ">= 18.3.0 < 19.0.0", + "react-dom": ">= 18.3.0 < 19.0.0" + } + }, + "node_modules/@mintlify/validation/node_modules/react": { + "version": "18.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mintlify/validation/node_modules/react-dom": { + "version": "18.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/@mintlify/validation/node_modules/scheduler": { + "version": "0.23.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/@mintlify/validation/node_modules/zod": { + "version": "3.25.76", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@mintlify/validation/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.13.3.tgz", - "integrity": "sha512-bGwA78F/U5G2jrnsdRkPY3IwIwZeWUEfb5o764b79lb0rJmMT76TLwKhdNZOWakOQtedYefwIR4emisEMvInKA==", - "devOptional": true, "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -6543,9 +5214,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "devOptional": true, "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -6557,9 +5225,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6574,9 +5239,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "devOptional": true, "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -6595,9 +5257,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "devOptional": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -6608,19 +5267,28 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=6.6.0" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@modelcontextprotocol/sdk/node_modules/express": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "devOptional": true, "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -6661,9 +5329,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "devOptional": true, "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -6679,9 +5344,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6689,9 +5351,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "devOptional": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6702,16 +5361,10 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true, "license": "MIT" }, "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6719,9 +5372,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -6732,9 +5382,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6742,9 +5389,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "devOptional": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -6753,11 +5397,12 @@ "node": ">= 0.6" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6765,9 +5410,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "devOptional": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -6781,9 +5423,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/send": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "devOptional": true, "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -6804,9 +5443,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "devOptional": true, "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -6820,9 +5456,6 @@ }, "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "devOptional": true, "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -6833,10 +5466,22 @@ "node": ">= 0.6" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/zod": { + "version": "3.25.76", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz", - "integrity": "sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==", "dev": true, "license": "MIT", "optional": true, @@ -6848,8 +5493,6 @@ }, "node_modules/@noble/hashes": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "license": "MIT", "engines": { @@ -6861,8 +5504,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -6875,8 +5516,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -6885,8 +5524,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -6897,10 +5534,21 @@ "node": ">= 8" } }, + "node_modules/@openai/codex": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.44.0.tgz", + "integrity": "sha512-5QNxwcuNn1aZMIzBs9E//vVLLRTZ8jkJRZas2XJgYdBNiSSlGzIuOfPBPXPNiQ2hRPKVqI4/APWIck4jxhw2KA==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "codex": "bin/codex.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@openapi-contrib/openapi-schema-to-json-schema": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@openapi-contrib/openapi-schema-to-json-schema/-/openapi-schema-to-json-schema-3.2.0.tgz", - "integrity": "sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==", "dev": true, "license": "MIT", "dependencies": { @@ -6908,60 +5556,18 @@ } }, "node_modules/@openrouter/ai-sdk-provider": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/@openrouter/ai-sdk-provider/-/ai-sdk-provider-0.4.6.tgz", - "integrity": "sha512-oUa8xtssyUhiKEU/aW662lsZ0HUvIUTRk8vVIF3Ha3KI/DnqX54zmVIuzYnaDpermqhy18CHqblAY4dDt1JW3g==", + "version": "1.2.0", "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.0.9", - "@ai-sdk/provider-utils": "2.1.10" - }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" - } - }, - "node_modules/@openrouter/ai-sdk-provider/node_modules/@ai-sdk/provider": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.0.9.tgz", - "integrity": "sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==", - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@openrouter/ai-sdk-provider/node_modules/@ai-sdk/provider-utils": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.1.10.tgz", - "integrity": "sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==", - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.0.9", - "eventsource-parser": "^3.0.0", - "nanoid": "^3.3.8", - "secure-json-parse": "^2.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "ai": "^5.0.0", + "zod": "^3.24.1 || ^v4" } }, "node_modules/@opentelemetry/api": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" @@ -6969,10 +5575,7 @@ }, "node_modules/@opentelemetry/api-logs": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", - "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -6982,10 +5585,7 @@ }, "node_modules/@opentelemetry/context-async-hooks": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", - "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=14" }, @@ -6995,10 +5595,7 @@ }, "node_modules/@opentelemetry/core": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.25.1" }, @@ -7011,10 +5608,7 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-sXgcp4fsL3zCo96A0LmFIGYOj2LSEDI6wD7nBYRhuDDxeRsk18NQgqRVlCf4VIyTBZzGu1M7yOtdFukQPgII1A==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.25.1", @@ -7031,10 +5625,7 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.52.1.tgz", - "integrity": "sha512-qKgywId2DbdowPZpOBXQKp0B8DfhfIArmSic15z13Nk/JAOccBUQdPwDjDnjsM5f0ckZFMVR2t/tijTUAqDZoA==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", @@ -7051,10 +5642,7 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-CE0f1IEE1GQj8JWl/BxKvKwx9wBTLR09OpPQHaIs5LGBw3ODu8ek5kcbrHPNsFYh/pWh+pcjbZQoxq3CqvQVnA==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.25.1", @@ -7074,10 +5662,7 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.52.1.tgz", - "integrity": "sha512-oAHPOy1sZi58bwqXaucd19F/v7+qE2EuVslQOEeLQT94CDuZJJ4tbWzx8DpYBTrOSzKqqrMtx9+PMxkrcbxOyQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-exporter-base": "0.52.1", @@ -7094,10 +5679,7 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.25.1", @@ -7115,10 +5697,7 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-http": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", - "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-exporter-base": "0.52.1", @@ -7135,10 +5714,7 @@ }, "node_modules/@opentelemetry/exporter-trace-otlp-proto": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", - "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-exporter-base": "0.52.1", @@ -7155,10 +5731,7 @@ }, "node_modules/@opentelemetry/exporter-zipkin": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", - "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", @@ -7174,10 +5747,7 @@ }, "node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", - "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@types/shimmer": "^1.0.2", @@ -7195,10 +5765,7 @@ }, "node_modules/@opentelemetry/instrumentation-http": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", - "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/instrumentation": "0.52.1", @@ -7214,10 +5781,7 @@ }, "node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", - "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/otlp-transformer": "0.52.1" @@ -7231,10 +5795,7 @@ }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", - "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.25.1", @@ -7250,10 +5811,7 @@ }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", - "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", @@ -7272,10 +5830,7 @@ }, "node_modules/@opentelemetry/propagator-b3": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", - "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1" }, @@ -7288,10 +5843,7 @@ }, "node_modules/@opentelemetry/propagator-jaeger": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", - "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1" }, @@ -7304,10 +5856,7 @@ }, "node_modules/@opentelemetry/resources": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" @@ -7321,10 +5870,7 @@ }, "node_modules/@opentelemetry/sdk-logs": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", - "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", @@ -7339,10 +5885,7 @@ }, "node_modules/@opentelemetry/sdk-metrics": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", - "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", @@ -7357,10 +5900,7 @@ }, "node_modules/@opentelemetry/sdk-node": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", - "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@opentelemetry/core": "1.25.1", @@ -7385,10 +5925,7 @@ }, "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", @@ -7403,10 +5940,7 @@ }, "node_modules/@opentelemetry/sdk-trace-node": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", - "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@opentelemetry/context-async-hooks": "1.25.1", "@opentelemetry/core": "1.25.1", @@ -7424,18 +5958,15 @@ }, "node_modules/@opentelemetry/semantic-conventions": { "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=14" } }, "node_modules/@oxc-project/types": { - "version": "0.89.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.89.0.tgz", - "integrity": "sha512-yuo+ECPIW5Q9mSeNmCDC2im33bfKuwW18mwkaHMQh8KakHYDzj4ci/q7wxf2qS3dMlVVCIyrs3kFtH5LmnlYnw==", + "version": "0.93.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.93.0.tgz", + "integrity": "sha512-yNtwmWZIBtJsMr5TEfoZFDxIWV6OdScOpza/f5YxbqUMJk+j6QX3Cf3jgZShGEFYWQJ5j9mJ6jM0tZHu2J9Yrg==", "dev": true, "license": "MIT", "funding": { @@ -7444,8 +5975,6 @@ }, "node_modules/@paralleldrive/cuid2": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", "dev": true, "license": "MIT", "dependencies": { @@ -7454,8 +5983,6 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, "engines": { @@ -7464,8 +5991,6 @@ }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, "license": "MIT", "engines": { @@ -7474,8 +5999,6 @@ }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, "license": "MIT", "dependencies": { @@ -7487,15 +6010,11 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true, "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "license": "MIT", "dependencies": { @@ -7509,38 +6028,23 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "license": "BSD-3-Clause", - "optional": true, "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -7548,43 +6052,26 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/@puppeteer/browsers": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", - "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7604,10 +6091,29 @@ "node": ">=18" } }, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", - "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, "license": "MIT", "dependencies": { @@ -7621,8 +6127,6 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7633,8 +6137,6 @@ }, "node_modules/@quansync/fs": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-0.1.5.tgz", - "integrity": "sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==", "dev": true, "license": "MIT", "dependencies": { @@ -7646,22 +6148,16 @@ }, "node_modules/@radix-ui/number": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", "dev": true, "license": "MIT" }, "node_modules/@radix-ui/primitive": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", "dev": true, "license": "MIT" }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", "dev": true, "license": "MIT", "dependencies": { @@ -7684,8 +6180,6 @@ }, "node_modules/@radix-ui/react-collapsible": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", "dev": true, "license": "MIT", "dependencies": { @@ -7715,8 +6209,6 @@ }, "node_modules/@radix-ui/react-collection": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "dev": true, "license": "MIT", "dependencies": { @@ -7742,8 +6234,6 @@ }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7758,8 +6248,6 @@ }, "node_modules/@radix-ui/react-context": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7774,8 +6262,6 @@ }, "node_modules/@radix-ui/react-direction": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7790,8 +6276,6 @@ }, "node_modules/@radix-ui/react-dismissable-layer": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "dev": true, "license": "MIT", "dependencies": { @@ -7818,8 +6302,6 @@ }, "node_modules/@radix-ui/react-dropdown-menu": { "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", "dev": true, "license": "MIT", "dependencies": { @@ -7848,8 +6330,6 @@ }, "node_modules/@radix-ui/react-focus-guards": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7864,8 +6344,6 @@ }, "node_modules/@radix-ui/react-focus-scope": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "dev": true, "license": "MIT", "dependencies": { @@ -7890,8 +6368,6 @@ }, "node_modules/@radix-ui/react-id": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "dev": true, "license": "MIT", "dependencies": { @@ -7909,8 +6385,6 @@ }, "node_modules/@radix-ui/react-label": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7933,8 +6407,6 @@ }, "node_modules/@radix-ui/react-menu": { "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7972,10 +6444,45 @@ } } }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "dev": true, "license": "MIT", "dependencies": { @@ -8007,8 +6514,6 @@ }, "node_modules/@radix-ui/react-portal": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8032,8 +6537,6 @@ }, "node_modules/@radix-ui/react-presence": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8057,8 +6560,6 @@ }, "node_modules/@radix-ui/react-primitive": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8081,8 +6582,6 @@ }, "node_modules/@radix-ui/react-roving-focus": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", "dev": true, "license": "MIT", "dependencies": { @@ -8113,8 +6612,6 @@ }, "node_modules/@radix-ui/react-scroll-area": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", "dev": true, "license": "MIT", "dependencies": { @@ -8145,8 +6642,6 @@ }, "node_modules/@radix-ui/react-separator": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", - "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", "dev": true, "license": "MIT", "dependencies": { @@ -8169,8 +6664,6 @@ }, "node_modules/@radix-ui/react-slot": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8188,8 +6681,6 @@ }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8204,8 +6695,6 @@ }, "node_modules/@radix-ui/react-use-controllable-state": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "dev": true, "license": "MIT", "dependencies": { @@ -8224,8 +6713,6 @@ }, "node_modules/@radix-ui/react-use-effect-event": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "dev": true, "license": "MIT", "dependencies": { @@ -8243,8 +6730,6 @@ }, "node_modules/@radix-ui/react-use-escape-keydown": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "dev": true, "license": "MIT", "dependencies": { @@ -8262,8 +6747,6 @@ }, "node_modules/@radix-ui/react-use-layout-effect": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8278,8 +6761,6 @@ }, "node_modules/@radix-ui/react-use-rect": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", "dev": true, "license": "MIT", "dependencies": { @@ -8297,8 +6778,6 @@ }, "node_modules/@radix-ui/react-use-size": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8316,15 +6795,13 @@ }, "node_modules/@radix-ui/rect": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", "dev": true, "license": "MIT" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.38.tgz", - "integrity": "sha512-AE3HFQrjWCKLFZD1Vpiy+qsqTRwwoil1oM5WsKPSmfQ5fif/A+ZtOZetF32erZdsR7qyvns6qHEteEsF6g6rsQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.41.tgz", + "integrity": "sha512-Edflndd9lU7JVhVIvJlZhdCj5DkhYDJPIRn4Dx0RUdfc8asP9xHOI5gMd8MesDDx+BJpdIT/uAmVTearteU/mQ==", "cpu": [ "arm64" ], @@ -8339,9 +6816,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.38.tgz", - "integrity": "sha512-RaoWOKc0rrFsVmKOjQpebMY6c6/I7GR1FBc25v7L/R7NlM0166mUotwGEv7vxu7ruXH4SJcFeVrfADFUUXUmmQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.41.tgz", + "integrity": "sha512-XGCzqfjdk7550PlyZRTBKbypXrB7ATtXhw/+bjtxnklLQs0mKP/XkQVOKyn9qGKSlvH8I56JLYryVxl0PCvSNw==", "cpu": [ "arm64" ], @@ -8356,9 +6833,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.38.tgz", - "integrity": "sha512-Ymojqc2U35iUc8NFU2XX1WQPfBRRHN6xHcrxAf9WS8BFFBn8pDrH5QPvH1tYs3lDkw6UGGbanr1RGzARqdUp1g==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.41.tgz", + "integrity": "sha512-Ho6lIwGJed98zub7n0xcRKuEtnZgbxevAmO4x3zn3C3N4GVXZD5xvCvTVxSMoeBJwTcIYzkVDRTIhylQNsTgLQ==", "cpu": [ "x64" ], @@ -8373,9 +6850,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.38.tgz", - "integrity": "sha512-0ermTQ//WzSI0nOL3z/LUWMNiE9xeM5cLGxjewPFEexqxV/0uM8/lNp9QageQ8jfc/VO1OURsGw34HYO5PaL8w==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.41.tgz", + "integrity": "sha512-ijAZETywvL+gACjbT4zBnCp5ez1JhTRs6OxRN4J+D6AzDRbU2zb01Esl51RP5/8ZOlvB37xxsRQ3X4YRVyYb3g==", "cpu": [ "x64" ], @@ -8390,9 +6867,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.38.tgz", - "integrity": "sha512-GADxzVUTCTp6EWI52831A29Tt7PukFe94nhg/SUsfkI33oTiNQtPxyLIT/3oRegizGuPSZSlrdBurkjDwxyEUQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.41.tgz", + "integrity": "sha512-EgIOZt7UildXKFEFvaiLNBXm+4ggQyGe3E5Z1QP9uRcJJs9omihOnm897FwOBQdCuMvI49iBgjFrkhH+wMJ2MA==", "cpu": [ "arm" ], @@ -8407,9 +6884,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.38.tgz", - "integrity": "sha512-SKO7Exl5Yem/OSNoA5uLHzyrptUQ8Hg70kHDxuwEaH0+GUg+SQe9/7PWmc4hFKBMrJGdQtii8WZ0uIz9Dofg5Q==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.41.tgz", + "integrity": "sha512-F8bUwJq8v/JAU8HSwgF4dztoqJ+FjdyjuvX4//3+Fbe2we9UktFeZ27U4lRMXF1vxWtdV4ey6oCSqI7yUrSEeg==", "cpu": [ "arm64" ], @@ -8424,9 +6901,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.38.tgz", - "integrity": "sha512-SOo6+WqhXPBaShLxLT0eCgH17d3Yu1lMAe4mFP0M9Bvr/kfMSOPQXuLxBcbBU9IFM9w3N6qP9xWOHO+oUJvi8Q==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.41.tgz", + "integrity": "sha512-MioXcCIX/wB1pBnBoJx8q4OGucUAfC1+/X1ilKFsjDK05VwbLZGRgOVD5OJJpUQPK86DhQciNBrfOKDiatxNmg==", "cpu": [ "arm64" ], @@ -8441,9 +6918,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.38.tgz", - "integrity": "sha512-yvsQ3CyrodOX+lcoi+lejZGCOvJZa9xTsNB8OzpMDmHeZq3QzJfpYjXSAS6vie70fOkLVJb77UqYO193Cl8XBQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.41.tgz", + "integrity": "sha512-m66M61fizvRCwt5pOEiZQMiwBL9/y0bwU/+Kc4Ce/Pef6YfoEkR28y+DzN9rMdjo8Z28NXjsDPq9nH4mXnAP0g==", "cpu": [ "x64" ], @@ -8458,9 +6935,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.38.tgz", - "integrity": "sha512-84qzKMwUwikfYeOuJ4Kxm/3z15rt0nFGGQArHYIQQNSTiQdxGHxOkqXtzPFqrVfBJUdxBAf+jYzR1pttFJuWyg==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.41.tgz", + "integrity": "sha512-yRxlSfBvWnnfrdtJfvi9lg8xfG5mPuyoSHm0X01oiE8ArmLRvoJGHUTJydCYz+wbK2esbq5J4B4Tq9WAsOlP1Q==", "cpu": [ "x64" ], @@ -8475,9 +6952,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.38.tgz", - "integrity": "sha512-QrNiWlce01DYH0rL8K3yUBu+lNzY+B0DyCbIc2Atan6/S6flxOL0ow5DLQvMamOI/oKhrJ4xG+9MkMb9dDHbLQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.41.tgz", + "integrity": "sha512-PHVxYhBpi8UViS3/hcvQQb9RFqCtvFmFU1PvUoTRiUdBtgHA6fONNHU4x796lgzNlVSD3DO/MZNk1s5/ozSMQg==", "cpu": [ "arm64" ], @@ -8492,9 +6969,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.38.tgz", - "integrity": "sha512-fnLtHyjwEsG4/aNV3Uv3Qd1ZbdH+CopwJNoV0RgBqrcQB8V6/Qdikd5JKvnO23kb3QvIpP+dAMGZMv1c2PJMzw==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.41.tgz", + "integrity": "sha512-OAfcO37ME6GGWmj9qTaDT7jY4rM0T2z0/8ujdQIJQ2x2nl+ztO32EIwURfmXOK0U1tzkyuaKYvE34Pug/ucXlQ==", "cpu": [ "wasm32" ], @@ -8509,9 +6986,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.38.tgz", - "integrity": "sha512-19cTfnGedem+RY+znA9J6ARBOCEFD4YSjnx0p5jiTm9tR6pHafRfFIfKlTXhun+NL0WWM/M0eb2IfPPYUa8+wg==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.41.tgz", + "integrity": "sha512-NIYGuCcuXaq5BC4Q3upbiMBvmZsTsEPG9k/8QKQdmrch+ocSy5Jv9tdpdmXJyighKqm182nh/zBt+tSJkYoNlg==", "cpu": [ "arm64" ], @@ -8526,9 +7003,9 @@ } }, "node_modules/@rolldown/binding-win32-ia32-msvc": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.38.tgz", - "integrity": "sha512-HcICm4YzFJZV+fI0O0bFLVVlsWvRNo/AB9EfUXvNYbtAxakCnQZ15oq22deFdz6sfi9Y4/SagH2kPU723dhCFA==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.41.tgz", + "integrity": "sha512-kANdsDbE5FkEOb5NrCGBJBCaZ2Sabp3D7d4PRqMYJqyLljwh9mDyYyYSv5+QNvdAmifj+f3lviNEUUuUZPEFPw==", "cpu": [ "ia32" ], @@ -8543,9 +7020,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.38.tgz", - "integrity": "sha512-4Qx6cgEPXLb0XsCyLoQcUgYBpfL0sjugftob+zhUH0EOk/NVCAIT+h0NJhY+jn7pFpeKxhNMqhvTNx3AesxIAQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.41.tgz", + "integrity": "sha512-UlpxKmFdik0Y2VjZrgUCgoYArZJiZllXgIipdBRV1hw6uK45UbQabSTW6Kp6enuOu7vouYWftwhuxfpE8J2JAg==", "cpu": [ "x64" ], @@ -8560,42 +7037,14 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.38.tgz", - "integrity": "sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.41.tgz", + "integrity": "sha512-ycMEPrS3StOIeb87BT3/+bu+blEtyvwQ4zmo2IcJQy0Rd1DAAhKksA0iUZ3MYSpJtjlPhg0Eo6mvVS6ggPhRbw==", "dev": true, "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz", - "integrity": "sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz", - "integrity": "sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz", - "integrity": "sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==", + "version": "4.52.3", "cpu": [ "arm64" ], @@ -8605,252 +7054,13 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz", - "integrity": "sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz", - "integrity": "sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz", - "integrity": "sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz", - "integrity": "sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz", - "integrity": "sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz", - "integrity": "sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz", - "integrity": "sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz", - "integrity": "sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz", - "integrity": "sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz", - "integrity": "sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz", - "integrity": "sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz", - "integrity": "sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz", - "integrity": "sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz", - "integrity": "sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz", - "integrity": "sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz", - "integrity": "sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz", - "integrity": "sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz", - "integrity": "sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "license": "MIT" }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", - "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", "license": "MIT", - "optional": true, "dependencies": { "domhandler": "^5.0.3", "selderee": "^0.11.0" @@ -8860,76 +7070,75 @@ } }, "node_modules/@shikijs/core": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.12.2.tgz", - "integrity": "sha512-L1Safnhra3tX/oJK5kYHaWmLEBJi1irASwewzY3taX5ibyXyMkkSDZlq01qigjryOBwrXSdFgTiZ3ryzSNeu7Q==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.12.2", + "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.12.2.tgz", - "integrity": "sha512-Nm3/azSsaVS7hk6EwtHEnTythjQfwvrO5tKqMlaH9TwG1P+PNaR8M0EAKZ+GaH2DFwvcr4iSfTveyxMIvXEHMw==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.12.2", + "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.12.2.tgz", - "integrity": "sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.12.2", + "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.12.2.tgz", - "integrity": "sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.12.2" + "@shikijs/types": "3.13.0" } }, "node_modules/@shikijs/themes": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.12.2.tgz", - "integrity": "sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.12.2" + "@shikijs/types": "3.13.0" } }, "node_modules/@shikijs/transformers": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.12.2.tgz", - "integrity": "sha512-+z1aMq4N5RoNGY8i7qnTYmG2MBYzFmwkm/yOd6cjEI7OVzcldVvzQCfxU1YbIVgsyB0xHVc2jFe1JhgoXyUoSQ==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.12.2", - "@shikijs/types": "3.12.2" + "@shikijs/core": "3.13.0", + "@shikijs/types": "3.13.0" + } + }, + "node_modules/@shikijs/twoslash": { + "version": "3.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.13.0", + "@shikijs/types": "3.13.0", + "twoslash": "^0.3.4" + }, + "peerDependencies": { + "typescript": ">=5.5.0" } }, "node_modules/@shikijs/types": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.12.2.tgz", - "integrity": "sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { @@ -8939,22 +7148,16 @@ }, "node_modules/@shikijs/vscode-textmate": { "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, "license": "MIT" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "license": "MIT", "engines": { "node": ">=10" @@ -8965,8 +7168,6 @@ }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "license": "MIT", "engines": { "node": ">=18" @@ -8977,8 +7178,6 @@ }, "node_modules/@sindresorhus/slugify": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", - "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", "dev": true, "license": "MIT", "dependencies": { @@ -8994,8 +7193,6 @@ }, "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -9007,8 +7204,6 @@ }, "node_modules/@sindresorhus/transliterate": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", - "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9023,8 +7218,6 @@ }, "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -9036,8 +7229,6 @@ }, "node_modules/@sinonjs/commons": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9046,8 +7237,6 @@ }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9056,8 +7245,6 @@ }, "node_modules/@smithy/abort-controller": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.1.1.tgz", - "integrity": "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9069,8 +7256,6 @@ }, "node_modules/@smithy/config-resolver": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.2.2.tgz", - "integrity": "sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.2.2", @@ -9084,9 +7269,7 @@ } }, "node_modules/@smithy/core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.11.1.tgz", - "integrity": "sha512-REH7crwORgdjSpYs15JBiIWOYjj0hJNC3aCecpJvAlMMaaqL5i2CLb1i6Hc4yevToTKSqslLMI9FKjhugEwALA==", + "version": "3.13.0", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.1.1", @@ -9097,31 +7280,15 @@ "@smithy/util-middleware": "^4.1.1", "@smithy/util-stream": "^4.3.2", "@smithy/util-utf8": "^4.1.0", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/uuid": "^1.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/core/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@smithy/credential-provider-imds": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz", - "integrity": "sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.2.2", @@ -9136,8 +7303,6 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.1.1.tgz", - "integrity": "sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", @@ -9151,8 +7316,6 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz", - "integrity": "sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.2.1", @@ -9167,8 +7330,6 @@ }, "node_modules/@smithy/hash-node": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.1.1.tgz", - "integrity": "sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9182,8 +7343,6 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz", - "integrity": "sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9195,8 +7354,6 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz", - "integrity": "sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9207,8 +7364,6 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz", - "integrity": "sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.2.1", @@ -9220,12 +7375,10 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.3.tgz", - "integrity": "sha512-+1H5A28DeffRVrqmVmtqtRraEjoaC6JVap3xEQdVoBh2EagCVY7noPmcBcG4y7mnr9AJitR1ZAse2l+tEtK5vg==", + "version": "4.2.5", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.11.1", + "@smithy/core": "^3.13.0", "@smithy/middleware-serde": "^4.1.1", "@smithy/node-config-provider": "^4.2.2", "@smithy/shared-ini-file-loader": "^4.2.0", @@ -9239,43 +7392,25 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.2.4.tgz", - "integrity": "sha512-amyqYQFewnAviX3yy/rI/n1HqAgfvUdkEhc04kDjxsngAUREKuOI24iwqQUirrj6GtodWmR4iO5Zeyl3/3BwWg==", + "version": "4.3.1", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.2.2", "@smithy/protocol-http": "^5.2.1", "@smithy/service-error-classification": "^4.1.2", - "@smithy/smithy-client": "^4.6.3", + "@smithy/smithy-client": "^4.6.5", "@smithy/types": "^4.5.0", "@smithy/util-middleware": "^4.1.1", "@smithy/util-retry": "^4.1.2", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/uuid": "^1.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@smithy/middleware-serde": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz", - "integrity": "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.2.1", @@ -9288,8 +7423,6 @@ }, "node_modules/@smithy/middleware-stack": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz", - "integrity": "sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9301,8 +7434,6 @@ }, "node_modules/@smithy/node-config-provider": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz", - "integrity": "sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.1.1", @@ -9316,8 +7447,6 @@ }, "node_modules/@smithy/node-http-handler": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz", - "integrity": "sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.1.1", @@ -9332,8 +7461,6 @@ }, "node_modules/@smithy/property-provider": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.1.1.tgz", - "integrity": "sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9345,8 +7472,6 @@ }, "node_modules/@smithy/protocol-http": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.2.1.tgz", - "integrity": "sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9358,8 +7483,6 @@ }, "node_modules/@smithy/querystring-builder": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz", - "integrity": "sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9372,8 +7495,6 @@ }, "node_modules/@smithy/querystring-parser": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz", - "integrity": "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9385,8 +7506,6 @@ }, "node_modules/@smithy/service-error-classification": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz", - "integrity": "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0" @@ -9397,8 +7516,6 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz", - "integrity": "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9410,8 +7527,6 @@ }, "node_modules/@smithy/signature-v4": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.2.1.tgz", - "integrity": "sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.1.0", @@ -9428,13 +7543,11 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.6.3.tgz", - "integrity": "sha512-K27LqywsaqKz4jusdUQYJh/YP2VbnbdskZ42zG8xfV+eovbTtMc2/ZatLWCfSkW0PDsTUXlpvlaMyu8925HsOw==", + "version": "4.6.5", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.11.1", - "@smithy/middleware-endpoint": "^4.2.3", + "@smithy/core": "^3.13.0", + "@smithy/middleware-endpoint": "^4.2.5", "@smithy/middleware-stack": "^4.1.1", "@smithy/protocol-http": "^5.2.1", "@smithy/types": "^4.5.0", @@ -9447,8 +7560,6 @@ }, "node_modules/@smithy/types": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.5.0.tgz", - "integrity": "sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9459,8 +7570,6 @@ }, "node_modules/@smithy/url-parser": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.1.1.tgz", - "integrity": "sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==", "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^4.1.1", @@ -9473,8 +7582,6 @@ }, "node_modules/@smithy/util-base64": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.1.0.tgz", - "integrity": "sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.1.0", @@ -9487,8 +7594,6 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz", - "integrity": "sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9499,8 +7604,6 @@ }, "node_modules/@smithy/util-body-length-node": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz", - "integrity": "sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9511,8 +7614,6 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz", - "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.1.0", @@ -9524,8 +7625,6 @@ }, "node_modules/@smithy/util-config-provider": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz", - "integrity": "sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9535,13 +7634,11 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.3.tgz", - "integrity": "sha512-5fm3i2laE95uhY6n6O6uGFxI5SVbqo3/RWEuS3YsT0LVmSZk+0eUqPhKd4qk0KxBRPaT5VNT/WEBUqdMyYoRgg==", + "version": "4.1.5", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.1.1", - "@smithy/smithy-client": "^4.6.3", + "@smithy/smithy-client": "^4.6.5", "@smithy/types": "^4.5.0", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -9551,16 +7648,14 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.3.tgz", - "integrity": "sha512-lwnMzlMslZ9GJNt+/wVjz6+fe9Wp5tqR1xAyQn+iywmP+Ymj0F6NhU/KfHM5jhGPQchRSCcau5weKhFdLIM4cA==", + "version": "4.1.5", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.2.2", "@smithy/credential-provider-imds": "^4.1.2", "@smithy/node-config-provider": "^4.2.2", "@smithy/property-provider": "^4.1.1", - "@smithy/smithy-client": "^4.6.3", + "@smithy/smithy-client": "^4.6.5", "@smithy/types": "^4.5.0", "tslib": "^2.6.2" }, @@ -9570,8 +7665,6 @@ }, "node_modules/@smithy/util-endpoints": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz", - "integrity": "sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.2.2", @@ -9584,8 +7677,6 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz", - "integrity": "sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9596,8 +7687,6 @@ }, "node_modules/@smithy/util-middleware": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.1.1.tgz", - "integrity": "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.5.0", @@ -9609,8 +7698,6 @@ }, "node_modules/@smithy/util-retry": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.1.2.tgz", - "integrity": "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==", "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^4.1.2", @@ -9623,8 +7710,6 @@ }, "node_modules/@smithy/util-stream": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.3.2.tgz", - "integrity": "sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==", "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.2.1", @@ -9642,8 +7727,6 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz", - "integrity": "sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -9654,8 +7737,6 @@ }, "node_modules/@smithy/util-utf8": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.1.0.tgz", - "integrity": "sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.1.0", @@ -9665,23 +7746,27 @@ "node": ">=18.0.0" } }, + "node_modules/@smithy/uuid": { + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "dev": true, "license": "MIT" }, "node_modules/@standard-schema/spec": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", "license": "MIT" }, "node_modules/@stoplight/better-ajv-errors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz", - "integrity": "sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9697,8 +7782,6 @@ }, "node_modules/@stoplight/json": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.0.tgz", - "integrity": "sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9715,8 +7798,6 @@ }, "node_modules/@stoplight/json-ref-readers": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", - "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9729,15 +7810,11 @@ }, "node_modules/@stoplight/json-ref-readers/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/@stoplight/json-ref-resolver": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.6.tgz", - "integrity": "sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9758,15 +7835,11 @@ }, "node_modules/@stoplight/json/node_modules/jsonc-parser": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==", "dev": true, "license": "MIT" }, "node_modules/@stoplight/ordered-object-literal": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.5.tgz", - "integrity": "sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9775,8 +7848,6 @@ }, "node_modules/@stoplight/path": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9785,8 +7856,6 @@ }, "node_modules/@stoplight/spectral-core": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.20.0.tgz", - "integrity": "sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9818,8 +7887,6 @@ }, "node_modules/@stoplight/spectral-core/node_modules/@stoplight/types": { "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", - "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9832,8 +7899,6 @@ }, "node_modules/@stoplight/spectral-core/node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -9850,8 +7915,6 @@ }, "node_modules/@stoplight/spectral-core/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -9861,8 +7924,6 @@ }, "node_modules/@stoplight/spectral-core/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -9874,8 +7935,6 @@ }, "node_modules/@stoplight/spectral-formats": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.8.2.tgz", - "integrity": "sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9890,8 +7949,6 @@ }, "node_modules/@stoplight/spectral-functions": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.10.1.tgz", - "integrity": "sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9913,8 +7970,6 @@ }, "node_modules/@stoplight/spectral-functions/node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -9931,8 +7986,6 @@ }, "node_modules/@stoplight/spectral-parsers": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.5.tgz", - "integrity": "sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9947,8 +8000,6 @@ }, "node_modules/@stoplight/spectral-parsers/node_modules/@stoplight/types": { "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.1.tgz", - "integrity": "sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9961,8 +8012,6 @@ }, "node_modules/@stoplight/spectral-ref-resolver": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.5.tgz", - "integrity": "sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9978,8 +8027,6 @@ }, "node_modules/@stoplight/spectral-runtime": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.4.tgz", - "integrity": "sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9997,8 +8044,6 @@ }, "node_modules/@stoplight/types": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", - "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10011,8 +8056,6 @@ }, "node_modules/@stoplight/yaml": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.3.0.tgz", - "integrity": "sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10027,15 +8070,11 @@ }, "node_modules/@stoplight/yaml-ast-parser": { "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.50.tgz", - "integrity": "sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.1.tgz", - "integrity": "sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10048,23 +8087,17 @@ }, "node_modules/@streamparser/json": { "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.22.tgz", - "integrity": "sha512-b6gTSBjJ8G8SuO3Gbbj+zXbVx8NSs1EbpbMKpzGLWMdkR+98McH9bEjSz3+0mPJf68c5nxa3CrJHp5EQNXM6zQ==", "license": "MIT" }, "node_modules/@supabase/auth-js": { - "version": "2.71.1", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.71.1.tgz", - "integrity": "sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q==", + "version": "2.72.0", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/functions-js": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.6.tgz", - "integrity": "sha512-bhjZ7rmxAibjgmzTmQBxJU6ZIBCCJTc3Uwgvdi4FewueUTAGO5hxZT1Sj6tiD+0dSXf9XI87BDdJrg12z8Uaew==", + "version": "2.5.0", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" @@ -10072,8 +8105,6 @@ }, "node_modules/@supabase/node-fetch": { "version": "2.6.15", - "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", - "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -10084,8 +8115,6 @@ }, "node_modules/@supabase/postgrest-js": { "version": "1.21.4", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.21.4.tgz", - "integrity": "sha512-TxZCIjxk6/dP9abAi89VQbWWMBbybpGWyvmIzTd79OeravM13OjR/YEYeyUOPcM1C3QyvXkvPZhUfItvmhY1IQ==", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" @@ -10093,8 +8122,6 @@ }, "node_modules/@supabase/realtime-js": { "version": "2.15.5", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.15.5.tgz", - "integrity": "sha512-/Rs5Vqu9jejRD8ZeuaWXebdkH+J7V6VySbCZ/zQM93Ta5y3mAmocjioa/nzlB6qvFmyylUgKVS1KpE212t30OA==", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.13", @@ -10104,32 +8131,26 @@ } }, "node_modules/@supabase/storage-js": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.12.1.tgz", - "integrity": "sha512-QWg3HV6Db2J81VQx0PqLq0JDBn4Q8B1FYn1kYcbla8+d5WDmTdwwMr+EJAxNOSs9W4mhKMv+EYCpCrTFlTj4VQ==", + "version": "2.12.2", "license": "MIT", "dependencies": { "@supabase/node-fetch": "^2.6.14" } }, "node_modules/@supabase/supabase-js": { - "version": "2.57.4", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.57.4.tgz", - "integrity": "sha512-LcbTzFhHYdwfQ7TRPfol0z04rLEyHabpGYANME6wkQ/kLtKNmI+Vy+WEM8HxeOZAtByUFxoUTTLwhXmrh+CcVw==", + "version": "2.58.0", "license": "MIT", "dependencies": { - "@supabase/auth-js": "2.71.1", - "@supabase/functions-js": "2.4.6", + "@supabase/auth-js": "2.72.0", + "@supabase/functions-js": "2.5.0", "@supabase/node-fetch": "2.6.15", "@supabase/postgrest-js": "1.21.4", "@supabase/realtime-js": "2.15.5", - "@supabase/storage-js": "2.12.1" + "@supabase/storage-js": "2.12.2" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "license": "MIT", "dependencies": { @@ -10141,8 +8162,6 @@ }, "node_modules/@tailwindcss/node": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", - "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", "dev": true, "license": "MIT", "dependencies": { @@ -10157,15 +8176,11 @@ }, "node_modules/@tailwindcss/node/node_modules/tailwindcss": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", - "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", "dev": true, "license": "MIT" }, "node_modules/@tailwindcss/oxide": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", - "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -10191,27 +8206,8 @@ "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" } }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", - "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@tailwindcss/oxide-darwin-arm64": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", - "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", "cpu": [ "arm64" ], @@ -10225,193 +8221,8 @@ "node": ">= 10" } }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", - "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", - "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", - "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", - "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", - "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", - "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", - "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", - "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.5", - "@emnapi/runtime": "^1.4.5", - "@emnapi/wasi-threads": "^1.0.4", - "@napi-rs/wasm-runtime": "^0.2.12", - "@tybys/wasm-util": "^0.10.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", - "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", - "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@tailwindcss/postcss": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.13.tgz", - "integrity": "sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10424,15 +8235,11 @@ }, "node_modules/@tailwindcss/postcss/node_modules/tailwindcss": { "version": "4.1.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", - "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", "dev": true, "license": "MIT" }, "node_modules/@tanstack/query-core": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.89.0.tgz", - "integrity": "sha512-joFV1MuPhSLsKfTzwjmPDrp8ENfZ9N23ymFu07nLfn3JCkSHy0CFgsyhHTJOmWaumC/WiNIKM0EJyduCF/Ih/Q==", + "version": "5.90.2", "dev": true, "license": "MIT", "funding": { @@ -10441,13 +8248,11 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.89.0.tgz", - "integrity": "sha512-SXbtWSTSRXyBOe80mszPxpEbaN4XPRUp/i0EfQK1uyj3KCk/c8FuPJNIRwzOVe/OU3rzxrYtiNabsAmk1l714A==", + "version": "5.90.2", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.89.0" + "@tanstack/query-core": "5.90.2" }, "funding": { "type": "github", @@ -10457,6 +8262,10 @@ "react": "^18 || ^19" } }, + "node_modules/@tm/ai-sdk-provider-grok-cli": { + "resolved": "packages/ai-sdk-provider-grok-cli", + "link": true + }, "node_modules/@tm/build-config": { "resolved": "packages/build-config", "link": true @@ -10471,8 +8280,6 @@ }, "node_modules/@tokenizer/inflate": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -10487,51 +8294,36 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/@tokenizer/inflate/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@tokenizer/inflate/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", "optional": true, @@ -10541,8 +8333,6 @@ }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -10555,8 +8345,6 @@ }, "node_modules/@types/babel__generator": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -10565,8 +8353,6 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", "dependencies": { @@ -10576,8 +8362,6 @@ }, "node_modules/@types/babel__traverse": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10586,15 +8370,19 @@ }, "node_modules/@types/cardinal": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-/xCVwg8lWvahHsV2wXZt4i64H1sdL+sN1Uoq7fAc8/FA6uYHjuIveDwPwvGUYp4VZiv85dVl6J/Bum3NDAOm8g==", "dev": true, "license": "MIT" }, + "node_modules/@types/chai": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, "node_modules/@types/cors": { "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dev": true, "license": "MIT", "dependencies": { @@ -10603,24 +8391,23 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "license": "MIT", "dependencies": { "@types/ms": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "dev": true, + "license": "MIT" + }, "node_modules/@types/diff-match-patch": { "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", - "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", "license": "MIT" }, "node_modules/@types/es-aggregate-error": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.6.tgz", - "integrity": "sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==", "dev": true, "license": "MIT", "dependencies": { @@ -10629,14 +8416,10 @@ }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "license": "MIT", "dependencies": { @@ -10645,10 +8428,7 @@ }, "node_modules/@types/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "license": "MIT", - "optional": true, "dependencies": { "@types/minimatch": "^5.1.2", "@types/node": "*" @@ -10656,8 +8436,6 @@ }, "node_modules/@types/graceful-fs": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10666,8 +8444,6 @@ }, "node_modules/@types/hast": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10676,22 +8452,15 @@ }, "node_modules/@types/html-to-text": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz", - "integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/inquirer": { "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.9.tgz", - "integrity": "sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==", "dev": true, "license": "MIT", "dependencies": { @@ -10701,15 +8470,11 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", "dependencies": { @@ -10718,8 +8483,6 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10728,8 +8491,6 @@ }, "node_modules/@types/jest": { "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10739,22 +8500,16 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/katex": { "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", "dev": true, "license": "MIT" }, "node_modules/@types/marked-terminal": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/marked-terminal/-/marked-terminal-6.1.1.tgz", - "integrity": "sha512-DfoUqkmFDCED7eBY9vFUhJ9fW8oZcMAK5EwRDQ9drjTbpQa+DnBTQQCwWhTFVf4WsZ6yYcJTI8D91wxTWXRZZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10766,8 +8521,6 @@ }, "node_modules/@types/marked-terminal/node_modules/marked": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", - "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", "dev": true, "license": "MIT", "bin": { @@ -10779,8 +8532,6 @@ }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", "dependencies": { @@ -10789,36 +8540,25 @@ }, "node_modules/@types/mdx": { "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true, "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, "node_modules/@types/nlcst": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", - "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", "dev": true, "license": "MIT", "dependencies": { @@ -10826,9 +8566,7 @@ } }, "node_modules/@types/node": { - "version": "22.18.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.5.tgz", - "integrity": "sha512-g9BpPfJvxYBXUWI9bV37j6d6LTMNQ88hPwdWWUeYZnMhlo66FIg9gCc1/DZb15QylJSKwOZjwrckvOTWpOiChg==", + "version": "22.18.6", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -10836,8 +8574,6 @@ }, "node_modules/@types/node-fetch": { "version": "2.6.13", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -10846,14 +8582,10 @@ }, "node_modules/@types/phoenix": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz", - "integrity": "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==", "license": "MIT" }, "node_modules/@types/react": { "version": "19.1.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz", - "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", "dev": true, "license": "MIT", "dependencies": { @@ -10862,8 +8594,6 @@ }, "node_modules/@types/react-dom": { "version": "19.1.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz", - "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -10872,22 +8602,15 @@ }, "node_modules/@types/shimmer": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, "license": "MIT" }, "node_modules/@types/through": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", - "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10896,41 +8619,25 @@ }, "node_modules/@types/tinycolor2": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, "node_modules/@types/urijs": { "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==", "dev": true, "license": "MIT" }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "license": "MIT" - }, "node_modules/@types/vscode": { "version": "1.104.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.104.0.tgz", - "integrity": "sha512-0KwoU2rZ2ecsTGFxo4K1+f+AErRsYW0fsp6A0zufzGuhyczc2IoKqYqcwXidKXmy2u8YB2GsYsOtiI9Izx3Tig==", "dev": true, "license": "MIT" }, "node_modules/@types/ws": { "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -10938,8 +8645,6 @@ }, "node_modules/@types/yargs": { "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { @@ -10948,15 +8653,11 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "license": "MIT", "optional": true, @@ -10964,10 +8665,40 @@ "@types/node": "*" } }, + "node_modules/@typescript/vfs": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@typescript/vfs/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript/vfs/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/@typespec/ts-http-runtime": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", - "integrity": "sha512-SnbaqayTVFEA6/tYumdF0UmybY0KHyKwGPBXnyckFlrrKdhWFrL3a2HIPXHjht5ZOElKGcXfD2D63P36btb+ww==", "dev": true, "license": "MIT", "dependencies": { @@ -10981,48 +8712,11 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, - "node_modules/@vitest/coverage-v8": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.9.tgz", - "integrity": "sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.7", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", - "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.12", - "magicast": "^0.3.5", - "std-env": "^3.8.0", - "test-exclude": "^7.0.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "2.1.9", - "vitest": "2.1.9" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } - } - }, "node_modules/@vitest/expect": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", - "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", "dev": true, "license": "MIT", "dependencies": { @@ -11037,8 +8731,6 @@ }, "node_modules/@vitest/mocker": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", - "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", "dev": true, "license": "MIT", "dependencies": { @@ -11064,8 +8756,6 @@ }, "node_modules/@vitest/pretty-format": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11077,8 +8767,6 @@ }, "node_modules/@vitest/runner": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", - "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", "dev": true, "license": "MIT", "dependencies": { @@ -11091,15 +8779,11 @@ }, "node_modules/@vitest/runner/node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true, "license": "MIT" }, "node_modules/@vitest/snapshot": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", - "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11113,15 +8797,11 @@ }, "node_modules/@vitest/snapshot/node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true, "license": "MIT" }, "node_modules/@vitest/spy": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", - "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11133,8 +8813,6 @@ }, "node_modules/@vitest/utils": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11148,8 +8826,6 @@ }, "node_modules/@vscode/test-cli": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.11.tgz", - "integrity": "sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11172,8 +8848,6 @@ }, "node_modules/@vscode/test-electron": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", - "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", "dev": true, "license": "MIT", "dependencies": { @@ -11189,8 +8863,6 @@ }, "node_modules/@vscode/vsce": { "version": "2.32.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.32.0.tgz", - "integrity": "sha512-3EFJfsgrSftIqt3EtdRcAygy/OJ3hstyI1cDmIgkU9CFZW5C+3djr6mfosndCUqcVYuyjmxOK1xmFp/Bq7+NIg==", "dev": true, "license": "MIT", "dependencies": { @@ -11230,56 +8902,24 @@ } }, "node_modules/@vscode/vsce-sign": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.6.tgz", - "integrity": "sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==", + "version": "2.0.7", "dev": true, "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.txt", "optionalDependencies": { - "@vscode/vsce-sign-alpine-arm64": "2.0.5", - "@vscode/vsce-sign-alpine-x64": "2.0.5", - "@vscode/vsce-sign-darwin-arm64": "2.0.5", - "@vscode/vsce-sign-darwin-x64": "2.0.5", - "@vscode/vsce-sign-linux-arm": "2.0.5", - "@vscode/vsce-sign-linux-arm64": "2.0.5", - "@vscode/vsce-sign-linux-x64": "2.0.5", - "@vscode/vsce-sign-win32-arm64": "2.0.5", - "@vscode/vsce-sign-win32-x64": "2.0.5" + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" } }, - "node_modules/@vscode/vsce-sign-alpine-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.5.tgz", - "integrity": "sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "alpine" - ] - }, - "node_modules/@vscode/vsce-sign-alpine-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.5.tgz", - "integrity": "sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "alpine" - ] - }, "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.5.tgz", - "integrity": "sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==", + "version": "2.0.6", "cpu": [ "arm64" ], @@ -11290,94 +8930,8 @@ "darwin" ] }, - "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.5.tgz", - "integrity": "sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@vscode/vsce-sign-linux-arm": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.5.tgz", - "integrity": "sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@vscode/vsce-sign-linux-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.5.tgz", - "integrity": "sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.5.tgz", - "integrity": "sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@vscode/vsce-sign-win32-arm64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.5.tgz", - "integrity": "sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@vscode/vsce-sign-win32-x64": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.5.tgz", - "integrity": "sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@vscode/vsce/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -11387,8 +8941,6 @@ }, "node_modules/@vscode/vsce/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11402,8 +8954,6 @@ }, "node_modules/@vscode/vsce/node_modules/commander": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "license": "MIT", "engines": { @@ -11412,8 +8962,6 @@ }, "node_modules/@vscode/vsce/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -11422,9 +8970,6 @@ }, "node_modules/@vscode/vsce/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -11444,8 +8989,6 @@ }, "node_modules/@vscode/vsce/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -11454,8 +8997,6 @@ }, "node_modules/@vscode/vsce/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -11467,8 +9008,6 @@ }, "node_modules/@vscode/vsce/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -11480,8 +9019,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -11492,8 +9029,6 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -11505,8 +9040,6 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -11517,41 +9050,21 @@ }, "node_modules/acorn-import-attributes": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "license": "MIT", - "optional": true, "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/address": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true, "license": "MIT", "engines": { @@ -11560,8 +9073,6 @@ }, "node_modules/agent-base": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { "node": ">= 14" @@ -11569,8 +9080,6 @@ }, "node_modules/agentkeepalive": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" @@ -11581,8 +9090,6 @@ }, "node_modules/aggregate-error": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "license": "MIT", "dependencies": { @@ -11597,57 +9104,226 @@ } }, "node_modules/ai": { - "version": "4.3.19", - "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.19.tgz", - "integrity": "sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q==", + "version": "5.0.57", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", - "@ai-sdk/react": "1.2.12", - "@ai-sdk/ui-utils": "1.2.11", - "@opentelemetry/api": "1.9.0", - "jsondiffpatch": "0.6.0" + "@ai-sdk/gateway": "1.0.30", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.10", + "@opentelemetry/api": "1.9.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "zod": "^3.23.8" + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ai-sdk-provider-claude-code": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.3", + "@anthropic-ai/claude-code": "1.0.94", + "jsonc-parser": "^3.3.1" }, - "peerDependenciesMeta": { - "react": { - "optional": true - } + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/ai-sdk-provider-claude-code/node_modules/@ai-sdk/provider-utils": { + "version": "3.0.3", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4" + } + }, + "node_modules/ai-sdk-provider-claude-code/node_modules/@ai-sdk/provider-utils/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/ai-sdk-provider-claude-code/node_modules/@anthropic-ai/claude-code": { + "version": "1.0.94", + "license": "SEE LICENSE IN README.md", + "bin": { + "claude": "cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "^0.33.5", + "@img/sharp-darwin-x64": "^0.33.5", + "@img/sharp-linux-arm": "^0.33.5", + "@img/sharp-linux-arm64": "^0.33.5", + "@img/sharp-linux-x64": "^0.33.5", + "@img/sharp-win32-x64": "^0.33.5" + } + }, + "node_modules/ai-sdk-provider-codex-cli": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ai-sdk-provider-codex-cli/-/ai-sdk-provider-codex-cli-0.3.0.tgz", + "integrity": "sha512-Qz3fQMC4XqTpvaTOk+Zu9I70lf1mq74komvkc8Vp4hwVOglrqZbGWWCniZ1/4v7m7SFEoG6xK6c8QgsSozLq6g==", + "license": "MIT", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.3", + "jsonc-parser": "^3.3.1" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@openai/codex": "^0.44.0" + }, + "peerDependencies": { + "zod": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/ai-sdk-provider-codex-cli/node_modules/@ai-sdk/provider-utils": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.3.tgz", + "integrity": "sha512-kAxIw1nYmFW1g5TvE54ZB3eNtgZna0RnLjPUp1ltz1+t9xkXJIuDT4atrwfau9IbS0BOef38wqrI8CjFfQrxhw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4" + } + }, + "node_modules/ai-sdk-provider-codex-cli/node_modules/@ai-sdk/provider-utils/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" } }, "node_modules/ai-sdk-provider-gemini-cli": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ai-sdk-provider-gemini-cli/-/ai-sdk-provider-gemini-cli-0.1.3.tgz", - "integrity": "sha512-hNsp2YIDLr+nVqxk8l6UzRozj3e1sfh3nzjyNSHB4f47dMBReb9qTq/1GwOlpKGEPcLK7OoibbX9wFC/eWBlvA==", + "version": "1.1.1", "license": "MIT", - "optional": true, "dependencies": { - "@ai-sdk/provider": "^1.1.3", - "@ai-sdk/provider-utils": "^2.2.8", + "@ai-sdk/provider": "2.0.0", + "@ai-sdk/provider-utils": "3.0.3", "@google/gemini-cli-core": "0.1.22", - "@google/genai": "^1.7.0", - "google-auth-library": "^9.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.3" + "@google/genai": "1.14.0", + "google-auth-library": "10.2.1", + "zod-to-json-schema": "3.24.6" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.23.8" + "zod": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/@ai-sdk/provider-utils": { + "version": "3.0.3", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/gaxios": { + "version": "7.1.2", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/gcp-metadata": { + "version": "7.0.1", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/google-auth-library": { + "version": "10.2.1", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^7.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/google-logging-utils": { + "version": "1.1.1", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/gtoken": { + "version": "8.0.0", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ai-sdk-provider-gemini-cli/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" } }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -11662,8 +9338,6 @@ }, "node_modules/ajv-draft-04": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -11677,8 +9351,6 @@ }, "node_modules/ajv-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -11687,8 +9359,6 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -11704,23 +9374,24 @@ }, "node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-align/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/ansi-align/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11731,10 +9402,18 @@ "node": ">=8" } }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -11743,8 +9422,7 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -11758,8 +9436,7 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -11770,8 +9447,6 @@ }, "node_modules/ansi-regex": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -11782,8 +9457,6 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -11794,9 +9467,7 @@ } }, "node_modules/ansis": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", - "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", + "version": "4.2.0", "dev": true, "license": "ISC", "engines": { @@ -11805,14 +9476,10 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -11825,8 +9492,6 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -11837,16 +9502,12 @@ } }, "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "version": "5.0.2", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -11855,8 +9516,6 @@ }, "node_modules/aria-hidden": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "dev": true, "license": "MIT", "dependencies": { @@ -11868,8 +9527,6 @@ }, "node_modules/arktype": { "version": "2.1.22", - "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.1.22.tgz", - "integrity": "sha512-xdzl6WcAhrdahvRRnXaNwsipCgHuNoLobRqhiP8RjnfL9Gp947abGlo68GAIyLtxbD+MLzNyH2YR4kEqioMmYQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -11879,8 +9536,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -11896,14 +9551,10 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, "node_modules/array-iterate": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", "dev": true, "license": "MIT", "funding": { @@ -11913,8 +9564,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -11923,8 +9572,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11945,15 +9592,11 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { @@ -11962,8 +9605,6 @@ }, "node_modules/ast-kit": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.1.2.tgz", - "integrity": "sha512-cl76xfBQM6pztbrFWRnxbrDm9EOqDr1BF6+qQnnDZG2Co2LjyUktkN9GTJfBAfdae+DbT2nJf2nCGAdDDN7W2g==", "dev": true, "license": "MIT", "dependencies": { @@ -11979,8 +9620,6 @@ }, "node_modules/ast-types": { "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, "license": "MIT", "dependencies": { @@ -11990,10 +9629,23 @@ "node": ">=4" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.30", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "9.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/astring": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "dev": true, "license": "MIT", "bin": { @@ -12002,8 +9654,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -12012,14 +9662,10 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/auto-bind": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", - "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", "dev": true, "license": "MIT", "engines": { @@ -12031,8 +9677,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "funding": [ { @@ -12069,8 +9713,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12085,8 +9727,6 @@ }, "node_modules/avsc": { "version": "5.7.9", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.9.tgz", - "integrity": "sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==", "dev": true, "license": "MIT", "engines": { @@ -12095,14 +9735,10 @@ }, "node_modules/aws4fetch": { "version": "1.0.20", - "resolved": "https://registry.npmjs.org/aws4fetch/-/aws4fetch-1.0.20.tgz", - "integrity": "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==", "license": "MIT" }, "node_modules/axios": { "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dev": true, "license": "MIT", "dependencies": { @@ -12113,8 +9749,6 @@ }, "node_modules/azure-devops-node-api": { "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, "license": "MIT", "dependencies": { @@ -12123,9 +9757,7 @@ } }, "node_modules/b4a": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.1.tgz", - "integrity": "sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==", + "version": "1.7.3", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -12139,8 +9771,6 @@ }, "node_modules/babel-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { @@ -12161,8 +9791,6 @@ }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -12177,8 +9805,6 @@ }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -12194,8 +9820,6 @@ }, "node_modules/babel-jest/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12207,15 +9831,11 @@ }, "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/babel-jest/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -12227,8 +9847,6 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12242,43 +9860,8 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12292,48 +9875,16 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/babel-plugin-istanbul/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/babel-plugin-istanbul/node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "license": "MIT", "dependencies": { @@ -12348,8 +9899,6 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -12375,8 +9924,6 @@ }, "node_modules/babel-preset-jest": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "license": "MIT", "dependencies": { @@ -12392,8 +9939,6 @@ }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, "license": "MIT", "funding": { @@ -12403,22 +9948,15 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/bare-events": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", "dev": true, - "license": "Apache-2.0", - "optional": true + "license": "Apache-2.0" }, "node_modules/bare-fs": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.4.4.tgz", - "integrity": "sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==", + "version": "4.4.5", "dev": true, "license": "Apache-2.0", "optional": true, @@ -12443,8 +9981,6 @@ }, "node_modules/bare-os": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", - "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -12454,8 +9990,6 @@ }, "node_modules/bare-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -12465,8 +9999,6 @@ }, "node_modules/bare-stream": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", - "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -12488,8 +10020,6 @@ }, "node_modules/bare-url": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.2.2.tgz", - "integrity": "sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -12499,8 +10029,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -12519,8 +10047,6 @@ }, "node_modules/base64id": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, "license": "MIT", "engines": { @@ -12528,9 +10054,7 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.5.tgz", - "integrity": "sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==", + "version": "2.8.9", "dev": true, "license": "Apache-2.0", "bin": { @@ -12539,8 +10063,6 @@ }, "node_modules/basic-ftp": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, "license": "MIT", "engines": { @@ -12549,8 +10071,6 @@ }, "node_modules/better-opn": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12562,8 +10082,6 @@ }, "node_modules/better-opn/node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { @@ -12572,8 +10090,6 @@ }, "node_modules/better-opn/node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -12588,8 +10104,6 @@ }, "node_modules/better-opn/node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -12601,8 +10115,6 @@ }, "node_modules/better-opn/node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12619,8 +10131,6 @@ }, "node_modules/better-path-resolve": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "license": "MIT", "dependencies": { @@ -12632,8 +10142,6 @@ }, "node_modules/bignumber.js": { "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", "engines": { "node": "*" @@ -12641,8 +10149,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { @@ -12653,9 +10159,7 @@ } }, "node_modules/birpc": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", - "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "version": "2.6.1", "dev": true, "license": "MIT", "funding": { @@ -12664,9 +10168,9 @@ }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -12675,9 +10179,9 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12689,8 +10193,6 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -12711,19 +10213,8 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -12732,16 +10223,8 @@ "node": ">=0.10.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/body-parser/node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -12755,21 +10238,15 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, "license": "ISC" }, "node_modules/bowser": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", "license": "MIT" }, "node_modules/boxen": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", @@ -12790,8 +10267,6 @@ }, "node_modules/boxen/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { "node": ">=12" @@ -12800,87 +10275,8 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/boxen/node_modules/wrap-ansi": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -12896,8 +10292,6 @@ }, "node_modules/brace-expansion": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -12905,9 +10299,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -12918,15 +10309,11 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { "version": "4.26.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", - "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", "dev": true, "funding": [ { @@ -12959,8 +10346,6 @@ }, "node_modules/bs-logger": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", "dependencies": { @@ -12972,8 +10357,6 @@ }, "node_modules/bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12982,8 +10365,7 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -13006,8 +10388,6 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", "engines": { @@ -13016,22 +10396,15 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "devOptional": true, "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -13045,8 +10418,6 @@ }, "node_modules/bundle-require": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", "license": "MIT", "dependencies": { "load-tsconfig": "^0.2.3" @@ -13060,8 +10431,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -13069,8 +10438,6 @@ }, "node_modules/c8": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", "dev": true, "license": "ISC", "dependencies": { @@ -13093,21 +10460,8 @@ "node": ">=14.14.0" } }, - "node_modules/c8/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/c8/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -13121,32 +10475,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/c8/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -13159,23 +10489,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/c8/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13190,8 +10505,6 @@ }, "node_modules/c8/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -13204,25 +10517,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/c8/node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cac": { "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "license": "MIT", "engines": { "node": ">=8" @@ -13230,8 +10537,6 @@ }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "license": "MIT", "engines": { @@ -13240,8 +10545,6 @@ }, "node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13259,8 +10562,6 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -13272,8 +10573,6 @@ }, "node_modules/cacheable-request/node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "license": "MIT", "engines": { @@ -13285,8 +10584,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -13304,8 +10601,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -13317,8 +10612,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -13333,8 +10626,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -13342,12 +10633,10 @@ } }, "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "version": "8.0.0", "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13355,8 +10644,6 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, "license": "MIT", "engines": { @@ -13364,9 +10651,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001743", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", - "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "version": "1.0.30001745", "dev": true, "funding": [ { @@ -13386,8 +10671,6 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, "license": "MIT", "funding": { @@ -13397,8 +10680,6 @@ }, "node_modules/chai": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -13414,8 +10695,6 @@ }, "node_modules/chalk": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -13426,8 +10705,6 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "license": "MIT", "engines": { "node": ">=10" @@ -13435,8 +10712,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", "funding": { @@ -13446,8 +10721,6 @@ }, "node_modules/character-entities-html4": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, "license": "MIT", "funding": { @@ -13457,8 +10730,6 @@ }, "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, "license": "MIT", "funding": { @@ -13468,8 +10739,6 @@ }, "node_modules/character-reference-invalid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, "license": "MIT", "funding": { @@ -13479,14 +10748,10 @@ }, "node_modules/chardet": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "license": "MIT" }, "node_modules/check-error": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, "license": "MIT", "engines": { @@ -13495,8 +10760,6 @@ }, "node_modules/cheerio": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", - "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", "dev": true, "license": "MIT", "dependencies": { @@ -13521,8 +10784,6 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13539,8 +10800,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -13564,8 +10823,6 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -13574,8 +10831,6 @@ }, "node_modules/chromium-bidi": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", - "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13589,8 +10844,6 @@ }, "node_modules/chromium-bidi/node_modules/zod": { "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, "license": "MIT", "funding": { @@ -13599,8 +10852,6 @@ }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -13615,15 +10866,10 @@ }, "node_modules/cjs-module-lexer": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "devOptional": true, "license": "MIT" }, "node_modules/class-variance-authority": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13635,8 +10881,6 @@ }, "node_modules/clean-stack": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, "license": "MIT", "dependencies": { @@ -13651,8 +10895,6 @@ }, "node_modules/clean-stack/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -13664,8 +10906,6 @@ }, "node_modules/cli-boxes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "license": "MIT", "engines": { "node": ">=10" @@ -13676,8 +10916,6 @@ }, "node_modules/cli-cursor": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" @@ -13691,8 +10929,6 @@ }, "node_modules/cli-highlight": { "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "license": "ISC", "dependencies": { "chalk": "^4.0.0", @@ -13710,10 +10946,15 @@ "npm": ">=5.0.0" } }, + "node_modules/cli-highlight/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -13727,8 +10968,6 @@ }, "node_modules/cli-highlight/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -13743,8 +10982,6 @@ }, "node_modules/cli-highlight/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -13754,8 +10991,6 @@ }, "node_modules/cli-highlight/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -13766,26 +11001,18 @@ }, "node_modules/cli-highlight/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/cli-highlight/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/cli-highlight/node_modules/parse5": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "license": "MIT" }, "node_modules/cli-highlight/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "license": "MIT", "dependencies": { "parse5": "^6.0.1" @@ -13793,14 +11020,10 @@ }, "node_modules/cli-highlight/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "license": "MIT" }, "node_modules/cli-highlight/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -13811,10 +11034,18 @@ "node": ">=8" } }, + "node_modules/cli-highlight/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -13825,8 +11056,6 @@ }, "node_modules/cli-highlight/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -13842,8 +11071,6 @@ }, "node_modules/cli-highlight/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "license": "MIT", "dependencies": { "cliui": "^7.0.2", @@ -13860,8 +11087,6 @@ }, "node_modules/cli-highlight/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "license": "ISC", "engines": { "node": ">=10" @@ -13869,8 +11094,6 @@ }, "node_modules/cli-progress": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", "license": "MIT", "dependencies": { "string-width": "^4.2.3" @@ -13879,16 +11102,19 @@ "node": ">=4" } }, + "node_modules/cli-progress/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-progress/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/cli-progress/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -13899,10 +11125,18 @@ "node": ">=8" } }, + "node_modules/cli-progress/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "license": "MIT", "engines": { "node": ">=6" @@ -13913,8 +11147,6 @@ }, "node_modules/cli-table3": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "license": "MIT", "dependencies": { "string-width": "^4.2.0" @@ -13926,16 +11158,19 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-table3/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/cli-table3/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -13946,10 +11181,18 @@ "node": ">=8" } }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-truncate": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { @@ -13965,8 +11208,6 @@ }, "node_modules/cli-truncate/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -13976,17 +11217,8 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" - }, "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { @@ -13998,8 +11230,6 @@ }, "node_modules/cli-truncate/node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14013,44 +11243,8 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/cli-width": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", "engines": { "node": ">= 12" @@ -14058,9 +11252,6 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -14071,11 +11262,15 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14089,9 +11284,6 @@ }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14102,23 +11294,14 @@ }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, "license": "MIT" }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, "license": "MIT" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -14129,11 +11312,18 @@ "node": ">=8" } }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14147,19 +11337,8 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "dev": true, "license": "MIT", "engines": { @@ -14168,8 +11347,6 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", "engines": { @@ -14179,8 +11356,6 @@ }, "node_modules/cockatiel": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", - "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", "dev": true, "license": "MIT", "engines": { @@ -14189,8 +11364,6 @@ }, "node_modules/code-excerpt": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, "license": "MIT", "dependencies": { @@ -14202,8 +11375,6 @@ }, "node_modules/collapse-white-space": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "dev": true, "license": "MIT", "funding": { @@ -14213,15 +11384,11 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true, "license": "MIT" }, "node_modules/color": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, "license": "MIT", "dependencies": { @@ -14234,8 +11401,6 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -14244,15 +11409,11 @@ }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -14262,8 +11423,6 @@ }, "node_modules/color/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14275,15 +11434,11 @@ }, "node_modules/color/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -14294,8 +11449,6 @@ }, "node_modules/comma-separated-tokens": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "dev": true, "license": "MIT", "funding": { @@ -14305,8 +11458,6 @@ }, "node_modules/commander": { "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", "engines": { "node": ">=18" @@ -14314,8 +11465,6 @@ }, "node_modules/component-emitter": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", "funding": { @@ -14324,15 +11473,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/concurrently": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", - "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, "license": "MIT", "dependencies": { @@ -14356,8 +11501,6 @@ }, "node_modules/concurrently/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -14372,8 +11515,6 @@ }, "node_modules/concurrently/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -14389,8 +11530,6 @@ }, "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -14402,8 +11541,6 @@ }, "node_modules/concurrently/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14415,15 +11552,11 @@ }, "node_modules/concurrently/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/concurrently/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14438,14 +11571,10 @@ }, "node_modules/confbox": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14455,8 +11584,6 @@ }, "node_modules/consola": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -14464,8 +11591,6 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -14476,8 +11601,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14485,15 +11608,11 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/convert-to-spaces": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, "license": "MIT", "engines": { @@ -14502,8 +11621,6 @@ }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14511,28 +11628,20 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/cookiejar": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -14544,8 +11653,6 @@ }, "node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -14571,15 +11678,11 @@ }, "node_modules/cosmiconfig/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -14591,8 +11694,6 @@ }, "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14613,8 +11714,6 @@ }, "node_modules/create-jest/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -14629,8 +11728,6 @@ }, "node_modules/create-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -14646,8 +11743,6 @@ }, "node_modules/create-jest/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14659,15 +11754,11 @@ }, "node_modules/create-jest/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/create-jest/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -14677,17 +11768,8 @@ "node": ">=8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/cross-env": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.0.0.tgz", - "integrity": "sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14704,8 +11786,6 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -14718,8 +11798,6 @@ }, "node_modules/css-select": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14735,8 +11813,6 @@ }, "node_modules/css-what": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -14748,8 +11824,6 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -14761,15 +11835,11 @@ }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true, "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, "license": "MIT", "engines": { @@ -14778,8 +11848,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14796,8 +11864,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14814,8 +11880,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14832,32 +11896,18 @@ }, "node_modules/dataloader": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "version": "2.6.9", "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "2.0.0" } }, "node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -14869,14 +11919,10 @@ }, "node_modules/decimal.js": { "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "license": "MIT" }, "node_modules/decode-named-character-reference": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14889,8 +11935,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14905,8 +11949,6 @@ }, "node_modules/dedent": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -14920,8 +11962,6 @@ }, "node_modules/deep-eql": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "license": "MIT", "engines": { @@ -14930,8 +11970,6 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", "engines": { @@ -14940,9 +11978,6 @@ }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14950,9 +11985,6 @@ }, "node_modules/default-browser": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "devOptional": true, "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -14967,9 +11999,6 @@ }, "node_modules/default-browser-id": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -14978,22 +12007,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -15002,8 +12017,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -15020,9 +12033,6 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=12" @@ -15033,8 +12043,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -15051,15 +12059,11 @@ }, "node_modules/defu": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "dev": true, "license": "MIT" }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15073,8 +12077,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -15082,8 +12084,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -15091,8 +12091,6 @@ }, "node_modules/dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, "license": "MIT", "engines": { @@ -15101,8 +12099,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" @@ -15110,8 +12106,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -15120,8 +12114,6 @@ }, "node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", "engines": { @@ -15129,9 +12121,7 @@ } }, "node_modules/detect-libc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", - "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "version": "2.1.1", "dev": true, "license": "Apache-2.0", "engines": { @@ -15140,8 +12130,6 @@ }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", "engines": { @@ -15150,15 +12138,11 @@ }, "node_modules/detect-node-es": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "dev": true, "license": "MIT" }, "node_modules/detect-port": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15173,10 +12157,29 @@ "node": ">= 4.0.0" } }, + "node_modules/detect-port/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { @@ -15189,15 +12192,11 @@ }, "node_modules/devtools-protocol": { "version": "0.0.1312386", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", - "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/dezalgo": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "license": "ISC", "dependencies": { @@ -15207,16 +12206,11 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true, "license": "Apache-2.0" }, "node_modules/diff": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -15224,14 +12218,10 @@ }, "node_modules/diff-match-patch": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", "license": "Apache-2.0" }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", "engines": { @@ -15240,8 +12230,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -15253,15 +12241,11 @@ }, "node_modules/dlv": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, "license": "MIT" }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "license": "MIT", "dependencies": { @@ -15273,8 +12257,6 @@ }, "node_modules/dns-socket": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz", - "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==", "dev": true, "license": "MIT", "dependencies": { @@ -15290,9 +12272,6 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "devOptional": true, "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -15305,9 +12284,6 @@ }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "devOptional": true, "funding": [ { "type": "github", @@ -15318,9 +12294,6 @@ }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -15334,9 +12307,6 @@ }, "node_modules/domutils": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -15349,54 +12319,6 @@ }, "node_modules/dotenv": { "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", - "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-mono": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dotenv-mono/-/dotenv-mono-1.5.1.tgz", - "integrity": "sha512-dt7bK/WKQvL0gcdTxjI7wD4MhVR5F4bCk70XMAgnrbWN3fdhpyhWCypYbZalr/vjLURLA7Ib9/VCzazRLJnp1Q==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "cross-spawn": "^7.0.6", - "dotenv": "^17.2.0", - "dotenv-expand": "^12.0.2", - "minimist": "^1.2.8" - }, - "bin": { - "dotenv": "dist/cli.js", - "dotenv-mono": "dist/cli.js" - } - }, - "node_modules/dotenv-mono/node_modules/dotenv": { - "version": "17.2.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", - "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -15407,8 +12329,6 @@ }, "node_modules/dts-resolver": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-2.1.2.tgz", - "integrity": "sha512-xeXHBQkn2ISSXxbJWD828PFjtyg+/UrMDo7W4Ffcs7+YWCquxU8YjV1KoxuiL+eJ5pg3ll+bC6flVv61L3LKZg==", "dev": true, "license": "MIT", "engines": { @@ -15428,8 +12348,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -15442,14 +12360,10 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -15457,21 +12371,15 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.221", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.221.tgz", - "integrity": "sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==", + "version": "1.5.227", "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", "engines": { @@ -15482,21 +12390,15 @@ } }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.5.0", "license": "MIT" }, "node_modules/emojilib": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", "license": "MIT" }, "node_modules/empathic": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", - "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", "dev": true, "license": "MIT", "engines": { @@ -15505,8 +12407,6 @@ }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -15514,8 +12414,6 @@ }, "node_modules/encoding-sniffer": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", "dev": true, "license": "MIT", "dependencies": { @@ -15528,8 +12426,6 @@ }, "node_modules/encoding-sniffer/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -15541,8 +12437,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -15551,8 +12445,6 @@ }, "node_modules/engine.io": { "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", - "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "dev": true, "license": "MIT", "dependencies": { @@ -15572,8 +12464,6 @@ }, "node_modules/engine.io-parser": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, "license": "MIT", "engines": { @@ -15582,8 +12472,6 @@ }, "node_modules/engine.io/node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -15592,8 +12480,6 @@ }, "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15608,10 +12494,13 @@ } } }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/engine.io/node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", "engines": { @@ -15632,8 +12521,6 @@ }, "node_modules/enhanced-resolve": { "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -15646,8 +12533,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15658,11 +12543,27 @@ "node": ">=8.6" } }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "devOptional": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -15673,8 +12574,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -15683,8 +12582,6 @@ }, "node_modules/environment": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "license": "MIT", "engines": { "node": ">=18" @@ -15695,8 +12592,6 @@ }, "node_modules/error-ex": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15705,8 +12600,6 @@ }, "node_modules/es-abstract": { "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -15774,8 +12667,6 @@ }, "node_modules/es-aggregate-error": { "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.14.tgz", - "integrity": "sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==", "dev": true, "license": "MIT", "dependencies": { @@ -15797,8 +12688,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15806,8 +12695,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15815,15 +12702,11 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -15834,8 +12717,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -15849,8 +12730,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -15867,8 +12746,6 @@ }, "node_modules/es-toolkit": { "version": "1.39.10", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.10.tgz", - "integrity": "sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==", "dev": true, "license": "MIT", "workspaces": [ @@ -15878,8 +12755,6 @@ }, "node_modules/esast-util-from-estree": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15895,8 +12770,6 @@ }, "node_modules/esast-util-from-js": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "dev": true, "license": "MIT", "dependencies": { @@ -15912,8 +12785,6 @@ }, "node_modules/esbuild": { "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -15953,8 +12824,6 @@ }, "node_modules/esbuild-postcss": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/esbuild-postcss/-/esbuild-postcss-0.0.4.tgz", - "integrity": "sha512-CKYibp+aCswskE+gBPnGZ0b9YyuY0n9w2dxyMaoLYEvGTwmjkRj5SV8l1zGJpw8KylqmcMTK0Gr349RnOLd+8A==", "dev": true, "license": "MIT", "dependencies": { @@ -15967,8 +12836,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -15976,14 +12843,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -15995,8 +12858,6 @@ }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -16017,8 +12878,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -16031,8 +12890,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -16041,8 +12898,6 @@ }, "node_modules/estree-util-attach-comments": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "dev": true, "license": "MIT", "dependencies": { @@ -16055,8 +12910,6 @@ }, "node_modules/estree-util-build-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16072,8 +12925,6 @@ }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "dev": true, "license": "MIT", "funding": { @@ -16083,8 +12934,6 @@ }, "node_modules/estree-util-scope": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16098,8 +12947,6 @@ }, "node_modules/estree-util-to-js": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "dev": true, "license": "MIT", "dependencies": { @@ -16114,8 +12961,6 @@ }, "node_modules/estree-util-to-js/node_modules/source-map": { "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -16124,8 +12969,6 @@ }, "node_modules/estree-util-visit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "dev": true, "license": "MIT", "dependencies": { @@ -16139,8 +12982,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { @@ -16149,8 +12990,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -16159,8 +12998,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16168,17 +13005,21 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/eventsource": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -16189,8 +13030,6 @@ }, "node_modules/eventsource-parser": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -16198,8 +13037,6 @@ }, "node_modules/execa": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "license": "MIT", "dependencies": { @@ -16222,8 +13059,6 @@ }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -16231,8 +13066,6 @@ }, "node_modules/expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, "license": "(MIT OR WTFPL)", "optional": true, @@ -16242,8 +13075,6 @@ }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "license": "MIT", "dependencies": { @@ -16259,8 +13090,6 @@ }, "node_modules/expect-type": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -16269,8 +13098,6 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -16315,8 +13142,6 @@ }, "node_modules/express-rate-limit": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "license": "MIT", "engines": { "node": ">= 16" @@ -16328,31 +13153,12 @@ "express": ">= 4.11" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -16364,8 +13170,6 @@ }, "node_modules/extendable-error": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", "dev": true, "license": "MIT" }, @@ -16375,8 +13179,6 @@ }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -16394,10 +13196,24 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "license": "MIT", "dependencies": { @@ -16410,23 +13226,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -16442,28 +13257,20 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, "node_modules/fast-memoize": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==", "dev": true, "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -16478,8 +13285,6 @@ }, "node_modules/fast-xml-parser": { "version": "5.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", - "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", "funding": [ { "type": "github", @@ -16495,9 +13300,7 @@ } }, "node_modules/fastmcp": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/fastmcp/-/fastmcp-3.17.0.tgz", - "integrity": "sha512-mNSPP/oG0qXFkPMA5TFXde8Zg5IjBvZE6QP/TMqcMpYYLTRJX1UJGDG7WyCKaPDF8JtgTWJigi1Osqo5rri+6A==", + "version": "3.18.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.17.2", @@ -16519,9 +13322,7 @@ } }, "node_modules/fastmcp/node_modules/@modelcontextprotocol/sdk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.18.0.tgz", - "integrity": "sha512-JvKyB6YwS3quM+88JPR0axeRgvdDu3Pv6mdZUy+w4qVkCzGgumb9bXG/TmtDRQv+671yaofVfXSQmFLlWU5qPQ==", + "version": "1.18.2", "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -16543,8 +13344,6 @@ }, "node_modules/fastmcp/node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -16556,8 +13355,6 @@ }, "node_modules/fastmcp/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -16572,8 +13369,6 @@ }, "node_modules/fastmcp/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { "node": ">=12" @@ -16584,8 +13379,6 @@ }, "node_modules/fastmcp/node_modules/body-parser": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -16604,8 +13397,6 @@ }, "node_modules/fastmcp/node_modules/cliui": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -16618,8 +13409,6 @@ }, "node_modules/fastmcp/node_modules/content-disposition": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -16630,23 +13419,28 @@ }, "node_modules/fastmcp/node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" } }, - "node_modules/fastmcp/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "license": "MIT" + "node_modules/fastmcp/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, "node_modules/fastmcp/node_modules/execa": { "version": "9.6.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", - "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", @@ -16671,8 +13465,6 @@ }, "node_modules/fastmcp/node_modules/express": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -16713,8 +13505,6 @@ }, "node_modules/fastmcp/node_modules/finalhandler": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -16730,8 +13520,6 @@ }, "node_modules/fastmcp/node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16739,8 +13527,6 @@ }, "node_modules/fastmcp/node_modules/get-stream": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "license": "MIT", "dependencies": { "@sec-ant/readable-stream": "^0.4.1", @@ -16755,8 +13541,6 @@ }, "node_modules/fastmcp/node_modules/human-signals": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "license": "Apache-2.0", "engines": { "node": ">=18.18.0" @@ -16764,8 +13548,6 @@ }, "node_modules/fastmcp/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -16776,8 +13558,6 @@ }, "node_modules/fastmcp/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", "engines": { "node": ">=12" @@ -16788,8 +13568,6 @@ }, "node_modules/fastmcp/node_modules/is-stream": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "license": "MIT", "engines": { "node": ">=18" @@ -16800,14 +13578,10 @@ }, "node_modules/fastmcp/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/fastmcp/node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16815,8 +13589,6 @@ }, "node_modules/fastmcp/node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { "node": ">=18" @@ -16827,8 +13599,6 @@ }, "node_modules/fastmcp/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16836,8 +13606,6 @@ }, "node_modules/fastmcp/node_modules/mime-types": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -16846,10 +13614,12 @@ "node": ">= 0.6" } }, + "node_modules/fastmcp/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/fastmcp/node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16857,8 +13627,6 @@ }, "node_modules/fastmcp/node_modules/npm-run-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "license": "MIT", "dependencies": { "path-key": "^4.0.0", @@ -16873,8 +13641,6 @@ }, "node_modules/fastmcp/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "license": "MIT", "engines": { "node": ">=12" @@ -16885,8 +13651,6 @@ }, "node_modules/fastmcp/node_modules/qs": { "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -16900,8 +13664,6 @@ }, "node_modules/fastmcp/node_modules/send": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { "debug": "^4.3.5", @@ -16922,8 +13684,6 @@ }, "node_modules/fastmcp/node_modules/serve-static": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -16935,42 +13695,8 @@ "node": ">= 18" } }, - "node_modules/fastmcp/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fastmcp/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/fastmcp/node_modules/strip-final-newline": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "license": "MIT", "engines": { "node": ">=18" @@ -16981,8 +13707,6 @@ }, "node_modules/fastmcp/node_modules/type-is": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -16995,8 +13719,6 @@ }, "node_modules/fastmcp/node_modules/wrap-ansi": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -17010,10 +13732,40 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/fastmcp/node_modules/xsschema": { + "version": "0.3.5", + "license": "MIT", + "peerDependencies": { + "@valibot/to-json-schema": "^1.0.0", + "arktype": "^2.1.20", + "effect": "^3.16.0", + "sury": "^10.0.0", + "zod": "^3.25.0 || ^4.0.0", + "zod-to-json-schema": "^3.24.5" + }, + "peerDependenciesMeta": { + "@valibot/to-json-schema": { + "optional": true + }, + "arktype": { + "optional": true + }, + "effect": { + "optional": true + }, + "sury": { + "optional": true + }, + "zod": { + "optional": true + }, + "zod-to-json-schema": { + "optional": true + } + } + }, "node_modules/fastmcp/node_modules/yargs": { "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -17029,17 +13781,27 @@ }, "node_modules/fastmcp/node_modules/yargs-parser": { "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" } }, + "node_modules/fastmcp/node_modules/zod": { + "version": "3.25.76", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/fastmcp/node_modules/zod-to-json-schema": { + "version": "3.24.6", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -17048,8 +13810,6 @@ }, "node_modules/fault": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17062,8 +13822,6 @@ }, "node_modules/favicons": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/favicons/-/favicons-7.2.0.tgz", - "integrity": "sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -17077,8 +13835,6 @@ }, "node_modules/favicons/node_modules/xml2js": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, "license": "MIT", "dependencies": { @@ -17091,8 +13847,6 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17101,8 +13855,6 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "license": "MIT", "dependencies": { @@ -17111,8 +13863,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", "engines": { "node": ">=12.0.0" @@ -17128,14 +13878,10 @@ }, "node_modules/fflate": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "license": "MIT" }, "node_modules/figlet": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.9.2.tgz", - "integrity": "sha512-rRnXvw0JtuEQtN6jlqa7nZ/N2RY49VsGTKTSj8rk5D7z9gY/0F7Gkt57Er7r/xZZ7UGNHsHUwhIA09URknhyVA==", + "version": "1.9.3", "license": "MIT", "dependencies": { "commander": "^14.0.0" @@ -17149,8 +13895,6 @@ }, "node_modules/figlet/node_modules/commander": { "version": "14.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", - "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", "license": "MIT", "engines": { "node": ">=20" @@ -17158,8 +13902,6 @@ }, "node_modules/figures": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "license": "MIT", "dependencies": { "is-unicode-supported": "^2.0.0" @@ -17173,8 +13915,6 @@ }, "node_modules/figures/node_modules/is-unicode-supported": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "license": "MIT", "engines": { "node": ">=18" @@ -17185,8 +13925,6 @@ }, "node_modules/file-type": { "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", "license": "MIT", "dependencies": { "@tokenizer/inflate": "^0.2.7", @@ -17203,9 +13941,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -17216,8 +13951,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -17232,25 +13965,8 @@ "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -17263,8 +13979,6 @@ }, "node_modules/fix-dts-default-cjs-exports": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", - "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", "license": "MIT", "dependencies": { "magic-string": "^0.30.17", @@ -17274,8 +13988,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -17284,8 +13996,6 @@ }, "node_modules/follow-redirects": { "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -17305,8 +14015,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -17321,8 +14029,6 @@ }, "node_modules/foreground-child": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -17337,8 +14043,6 @@ }, "node_modules/form-data": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -17353,14 +14057,10 @@ }, "node_modules/form-data-encoder": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", "license": "MIT" }, "node_modules/format": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, "engines": { "node": ">=0.4.x" @@ -17368,8 +14068,6 @@ }, "node_modules/formdata-node": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", "license": "MIT", "dependencies": { "node-domexception": "1.0.0", @@ -17381,8 +14079,6 @@ }, "node_modules/formidable": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, "license": "MIT", "dependencies": { @@ -17399,8 +14095,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -17408,8 +14102,6 @@ }, "node_modules/fraction.js": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "license": "MIT", "engines": { @@ -17422,8 +14114,6 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -17431,31 +14121,41 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT", "optional": true }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=14.14" + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" } }, "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "license": "ISC", "dependencies": { @@ -17467,8 +14167,6 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { @@ -17480,23 +14178,16 @@ }, "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -17508,8 +14199,6 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17517,8 +14206,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17538,8 +14225,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -17548,8 +14233,6 @@ }, "node_modules/fuse.js": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", - "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", "license": "Apache-2.0", "engines": { "node": ">=10" @@ -17557,15 +14240,10 @@ }, "node_modules/fzf": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz", - "integrity": "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==", - "license": "BSD-3-Clause", - "optional": true + "license": "BSD-3-Clause" }, "node_modules/gaxios": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", - "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", "license": "Apache-2.0", "dependencies": { "extend": "^3.0.2", @@ -17580,8 +14258,6 @@ }, "node_modules/gaxios/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" @@ -17592,8 +14268,6 @@ }, "node_modules/gaxios/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -17605,15 +14279,11 @@ }, "node_modules/gcd": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/gcd/-/gcd-0.0.1.tgz", - "integrity": "sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==", "dev": true, "license": "MIT" }, "node_modules/gcp-metadata": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", - "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", "license": "Apache-2.0", "dependencies": { "gaxios": "^6.1.1", @@ -17626,8 +14296,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -17636,8 +14304,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -17645,8 +14311,6 @@ }, "node_modules/get-east-asian-width": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "license": "MIT", "engines": { "node": ">=18" @@ -17657,8 +14321,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -17681,8 +14343,6 @@ }, "node_modules/get-nonce": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", "dev": true, "license": "MIT", "engines": { @@ -17691,8 +14351,6 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -17701,8 +14359,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -17714,8 +14370,6 @@ }, "node_modules/get-stream": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", "engines": { @@ -17727,8 +14381,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -17745,8 +14397,6 @@ }, "node_modules/get-tsconfig": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -17758,8 +14408,6 @@ }, "node_modules/get-uri": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, "license": "MIT", "dependencies": { @@ -17771,18 +14419,35 @@ "node": ">= 14" } }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/get-uri/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/github-from-package": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, "license": "MIT", "optional": true }, "node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -17801,8 +14466,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -17814,8 +14477,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17831,8 +14492,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -17852,8 +14511,6 @@ }, "node_modules/globby/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -17862,8 +14519,6 @@ }, "node_modules/google-auth-library": { "version": "9.15.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", - "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", @@ -17879,8 +14534,6 @@ }, "node_modules/google-logging-utils": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", - "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -17888,8 +14541,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -17900,8 +14551,6 @@ }, "node_modules/got": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", "dev": true, "license": "MIT", "dependencies": { @@ -17926,8 +14575,6 @@ }, "node_modules/got/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, "license": "MIT", "engines": { @@ -17939,8 +14586,6 @@ }, "node_modules/got/node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "license": "MIT", "engines": { @@ -17949,8 +14594,6 @@ }, "node_modules/got/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -17962,8 +14605,6 @@ }, "node_modules/gpt-tokens": { "version": "1.3.14", - "resolved": "https://registry.npmjs.org/gpt-tokens/-/gpt-tokens-1.3.14.tgz", - "integrity": "sha512-cFNErQQYGWRwYmew0wVqhCBZxTvGNr96/9pMwNXqSNu9afxqB5PNHOKHlWtUC/P4UW6Ne2UQHHaO2PaWWLpqWQ==", "license": "MIT", "dependencies": { "decimal.js": "^10.4.3", @@ -17973,15 +14614,11 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/gradient-string": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-3.0.0.tgz", - "integrity": "sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==", "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -17993,8 +14630,6 @@ }, "node_modules/gray-matter": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18009,8 +14644,6 @@ }, "node_modules/gtoken": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", - "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", "license": "MIT", "dependencies": { "gaxios": "^6.0.0", @@ -18022,8 +14655,6 @@ }, "node_modules/handlebars": { "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18044,8 +14675,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -18057,8 +14686,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -18066,8 +14693,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -18079,8 +14704,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18095,8 +14718,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -18107,8 +14728,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -18122,8 +14741,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -18134,8 +14751,6 @@ }, "node_modules/hast-util-embedded": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", - "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", "dev": true, "license": "MIT", "dependencies": { @@ -18149,8 +14764,6 @@ }, "node_modules/hast-util-from-dom": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", - "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", "dev": true, "license": "ISC", "dependencies": { @@ -18165,8 +14778,6 @@ }, "node_modules/hast-util-from-html": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", "dev": true, "license": "MIT", "dependencies": { @@ -18184,8 +14795,6 @@ }, "node_modules/hast-util-from-html-isomorphic": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", - "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", "dev": true, "license": "MIT", "dependencies": { @@ -18201,8 +14810,6 @@ }, "node_modules/hast-util-from-parse5": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "dev": true, "license": "MIT", "dependencies": { @@ -18222,8 +14829,6 @@ }, "node_modules/hast-util-has-property": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", - "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", "dev": true, "license": "MIT", "dependencies": { @@ -18236,8 +14841,6 @@ }, "node_modules/hast-util-is-body-ok-link": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.1.tgz", - "integrity": "sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18250,8 +14853,6 @@ }, "node_modules/hast-util-is-element": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", "dev": true, "license": "MIT", "dependencies": { @@ -18264,8 +14865,6 @@ }, "node_modules/hast-util-minify-whitespace": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hast-util-minify-whitespace/-/hast-util-minify-whitespace-1.0.1.tgz", - "integrity": "sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==", "dev": true, "license": "MIT", "dependencies": { @@ -18282,8 +14881,6 @@ }, "node_modules/hast-util-parse-selector": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dev": true, "license": "MIT", "dependencies": { @@ -18296,8 +14893,6 @@ }, "node_modules/hast-util-phrasing": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18314,8 +14909,6 @@ }, "node_modules/hast-util-to-estree": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", - "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "dev": true, "license": "MIT", "dependencies": { @@ -18343,8 +14936,6 @@ }, "node_modules/hast-util-to-html": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "dev": true, "license": "MIT", "dependencies": { @@ -18367,8 +14958,6 @@ }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "dev": true, "license": "MIT", "dependencies": { @@ -18395,8 +14984,6 @@ }, "node_modules/hast-util-to-mdast": { "version": "10.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.2.tgz", - "integrity": "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18422,8 +15009,6 @@ }, "node_modules/hast-util-to-string": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", - "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", "dev": true, "license": "MIT", "dependencies": { @@ -18436,8 +15021,6 @@ }, "node_modules/hast-util-to-text": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", - "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", "dev": true, "license": "MIT", "dependencies": { @@ -18453,8 +15036,6 @@ }, "node_modules/hast-util-whitespace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dev": true, "license": "MIT", "dependencies": { @@ -18467,8 +15048,6 @@ }, "node_modules/hastscript": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", "dev": true, "license": "MIT", "dependencies": { @@ -18485,8 +15064,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -18495,8 +15072,6 @@ }, "node_modules/helmet": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", - "integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -18504,8 +15079,6 @@ }, "node_modules/highlight.js": { "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "license": "BSD-3-Clause", "engines": { "node": "*" @@ -18513,15 +15086,11 @@ }, "node_modules/hookable": { "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", "dev": true, "license": "MIT" }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -18533,8 +15102,6 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -18546,24 +15113,17 @@ }, "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/html-to-text": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", - "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", "license": "MIT", - "optional": true, "dependencies": { "@selderee/plugin-htmlparser2": "^0.11.0", "deepmerge": "^4.3.1", @@ -18577,8 +15137,6 @@ }, "node_modules/html-to-text/node_modules/htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -18587,7 +15145,6 @@ } ], "license": "MIT", - "optional": true, "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -18597,8 +15154,6 @@ }, "node_modules/html-void-elements": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "dev": true, "license": "MIT", "funding": { @@ -18608,8 +15163,6 @@ }, "node_modules/htmlparser2": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -18628,8 +15181,6 @@ }, "node_modules/htmlparser2/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -18641,15 +15192,11 @@ }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -18664,8 +15211,6 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -18676,10 +15221,29 @@ "node": ">= 14" } }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18692,8 +15256,6 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -18703,10 +15265,27 @@ "node": ">= 14" } }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/human-id": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", - "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", "dev": true, "license": "MIT", "bin": { @@ -18715,8 +15294,6 @@ }, "node_modules/human-signals": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -18725,8 +15302,6 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", "dependencies": { "ms": "^2.0.0" @@ -18734,8 +15309,6 @@ }, "node_modules/iconv-lite": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -18750,8 +15323,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -18770,25 +15341,18 @@ }, "node_modules/ignore": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "license": "MIT", - "optional": true, "engines": { "node": ">= 4" } }, "node_modules/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true, "license": "MIT" }, "node_modules/immer": { "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "dev": true, "license": "MIT", "funding": { @@ -18798,8 +15362,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18815,8 +15377,6 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -18824,11 +15384,8 @@ } }, "node_modules/import-in-the-middle": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", - "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", + "version": "1.14.4", "license": "Apache-2.0", - "optional": true, "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", @@ -18838,8 +15395,6 @@ }, "node_modules/import-local": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { @@ -18858,8 +15413,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -18868,8 +15421,6 @@ }, "node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -18881,9 +15432,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -18893,21 +15441,15 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/ink": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ink/-/ink-6.3.0.tgz", - "integrity": "sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ==", + "version": "6.3.1", "dev": true, "license": "MIT", "dependencies": { @@ -18941,7 +15483,7 @@ "peerDependencies": { "@types/react": ">=19.0.0", "react": ">=19.0.0", - "react-devtools-core": "^4.19.1" + "react-devtools-core": "^6.1.2" }, "peerDependenciesMeta": { "@types/react": { @@ -18954,8 +15496,6 @@ }, "node_modules/ink-spinner": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-5.0.0.tgz", - "integrity": "sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==", "dev": true, "license": "MIT", "dependencies": { @@ -18970,9 +15510,7 @@ } }, "node_modules/ink/node_modules/ansi-escapes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.0.tgz", - "integrity": "sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==", + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { @@ -18987,8 +15525,6 @@ }, "node_modules/ink/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -19000,8 +15536,6 @@ }, "node_modules/ink/node_modules/cli-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "license": "MIT", "dependencies": { @@ -19014,17 +15548,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ink/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true, - "license": "MIT" - }, "node_modules/ink/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -19033,8 +15558,6 @@ }, "node_modules/ink/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -19049,8 +15572,6 @@ }, "node_modules/ink/node_modules/restore-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "license": "MIT", "dependencies": { @@ -19066,78 +15587,11 @@ }, "node_modules/ink/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, - "node_modules/ink/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/ink/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ink/node_modules/wrap-ansi": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", "dependencies": { @@ -19154,15 +15608,11 @@ }, "node_modules/inline-style-parser": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", "dev": true, "license": "MIT" }, "node_modules/inquirer": { "version": "12.9.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", - "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^1.0.0", @@ -19185,28 +15635,8 @@ } } }, - "node_modules/inquirer/node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/inquirer/node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -19220,8 +15650,6 @@ }, "node_modules/ip-address": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", "dev": true, "license": "MIT", "engines": { @@ -19230,8 +15658,6 @@ }, "node_modules/ip-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, "license": "MIT", "engines": { @@ -19240,8 +15666,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -19249,8 +15673,6 @@ }, "node_modules/is-alphabetical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "dev": true, "license": "MIT", "funding": { @@ -19260,8 +15682,6 @@ }, "node_modules/is-alphanumerical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, "license": "MIT", "dependencies": { @@ -19275,8 +15695,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -19293,15 +15711,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19320,8 +15734,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19336,8 +15748,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -19349,8 +15759,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -19366,8 +15774,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -19379,9 +15785,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "devOptional": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -19395,8 +15798,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -19413,8 +15814,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -19430,8 +15829,6 @@ }, "node_modules/is-decimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "dev": true, "license": "MIT", "funding": { @@ -19441,9 +15838,6 @@ }, "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "devOptional": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -19457,8 +15851,6 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -19467,8 +15859,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -19477,8 +15867,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -19493,8 +15881,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -19502,8 +15888,6 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "license": "MIT", "engines": { @@ -19512,8 +15896,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19531,8 +15913,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -19544,8 +15924,6 @@ }, "node_modules/is-hexadecimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, "license": "MIT", "funding": { @@ -19555,8 +15933,6 @@ }, "node_modules/is-in-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", - "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", "dev": true, "license": "MIT", "bin": { @@ -19571,9 +15947,6 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "devOptional": true, "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -19590,8 +15963,6 @@ }, "node_modules/is-interactive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "license": "MIT", "engines": { "node": ">=12" @@ -19602,8 +15973,6 @@ }, "node_modules/is-ip": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19615,8 +15984,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -19628,8 +15995,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -19641,9 +16006,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -19651,8 +16013,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -19668,8 +16028,6 @@ }, "node_modules/is-online": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/is-online/-/is-online-10.0.0.tgz", - "integrity": "sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==", "dev": true, "license": "MIT", "dependencies": { @@ -19687,8 +16045,6 @@ }, "node_modules/is-online/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, "license": "MIT", "engines": { @@ -19700,8 +16056,6 @@ }, "node_modules/is-online/node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "license": "MIT", "engines": { @@ -19710,8 +16064,6 @@ }, "node_modules/is-online/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -19723,8 +16075,6 @@ }, "node_modules/is-online/node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19749,8 +16099,6 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -19759,14 +16107,10 @@ }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -19784,8 +16128,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -19797,8 +16139,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -19813,8 +16153,6 @@ }, "node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { @@ -19826,8 +16164,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -19843,8 +16179,6 @@ }, "node_modules/is-subdir": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -19856,8 +16190,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -19874,8 +16206,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19890,8 +16220,7 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -19902,8 +16231,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -19915,8 +16242,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -19931,8 +16256,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19948,8 +16271,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -19958,9 +16279,6 @@ }, "node_modules/is-wsl": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "devOptional": true, "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -19974,21 +16292,15 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -19997,8 +16309,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -20014,8 +16324,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -20029,8 +16337,6 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20041,24 +16347,41 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "version": "4.0.1", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/istanbul-reports": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -20071,8 +16394,6 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -20086,8 +16407,6 @@ }, "node_modules/jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", "dependencies": { @@ -20113,8 +16432,6 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", "dependencies": { @@ -20128,8 +16445,6 @@ }, "node_modules/jest-changed-files/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -20152,8 +16467,6 @@ }, "node_modules/jest-changed-files/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -20165,8 +16478,6 @@ }, "node_modules/jest-changed-files/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -20175,8 +16486,6 @@ }, "node_modules/jest-changed-files/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -20188,8 +16497,6 @@ }, "node_modules/jest-changed-files/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -20198,8 +16505,6 @@ }, "node_modules/jest-changed-files/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -20211,8 +16516,6 @@ }, "node_modules/jest-changed-files/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -20227,8 +16530,6 @@ }, "node_modules/jest-changed-files/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20243,25 +16544,30 @@ }, "node_modules/jest-changed-files/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/jest-changed-files/node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/jest-changed-files/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-circus": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", "dependencies": { @@ -20292,8 +16598,6 @@ }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20308,8 +16612,6 @@ }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20325,8 +16627,6 @@ }, "node_modules/jest-circus/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20338,15 +16638,11 @@ }, "node_modules/jest-circus/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-circus/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20361,8 +16657,6 @@ }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20372,10 +16666,19 @@ "node": ">=8" } }, + "node_modules/jest-circus/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "license": "MIT", "dependencies": { @@ -20408,8 +16711,6 @@ }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20424,8 +16725,6 @@ }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20441,8 +16740,6 @@ }, "node_modules/jest-cli/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20454,15 +16751,11 @@ }, "node_modules/jest-cli/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20474,8 +16767,6 @@ }, "node_modules/jest-config": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20520,8 +16811,6 @@ }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20536,8 +16825,6 @@ }, "node_modules/jest-config/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -20547,8 +16834,6 @@ }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20564,8 +16849,6 @@ }, "node_modules/jest-config/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20577,16 +16860,11 @@ }, "node_modules/jest-config/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -20606,8 +16884,6 @@ }, "node_modules/jest-config/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -20619,8 +16895,6 @@ }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20632,8 +16906,6 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -20648,8 +16920,6 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20664,8 +16934,6 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20681,8 +16949,6 @@ }, "node_modules/jest-diff/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20694,15 +16960,11 @@ }, "node_modules/jest-diff/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20714,8 +16976,6 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", "dependencies": { @@ -20727,8 +16987,6 @@ }, "node_modules/jest-each": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20744,8 +17002,6 @@ }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20760,8 +17016,6 @@ }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20777,8 +17031,6 @@ }, "node_modules/jest-each/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20790,15 +17042,11 @@ }, "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20810,8 +17058,6 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", "dependencies": { @@ -20828,8 +17074,6 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -20838,8 +17082,6 @@ }, "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "license": "MIT", "dependencies": { @@ -20864,8 +17106,6 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "license": "MIT", "dependencies": { @@ -20878,8 +17118,6 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { @@ -20894,8 +17132,6 @@ }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20910,8 +17146,6 @@ }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -20927,8 +17161,6 @@ }, "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20940,15 +17172,11 @@ }, "node_modules/jest-matcher-utils/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20960,8 +17188,6 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { @@ -20981,8 +17207,6 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -20997,8 +17221,6 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21014,8 +17236,6 @@ }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21027,15 +17247,11 @@ }, "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21047,8 +17263,6 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", "dependencies": { @@ -21062,8 +17276,6 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", "engines": { @@ -21080,8 +17292,6 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "license": "MIT", "engines": { @@ -21090,8 +17300,6 @@ }, "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", "dependencies": { @@ -21111,8 +17319,6 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "license": "MIT", "dependencies": { @@ -21125,8 +17331,6 @@ }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21141,8 +17345,6 @@ }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21158,8 +17360,6 @@ }, "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21171,15 +17371,11 @@ }, "node_modules/jest-resolve/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21191,8 +17387,6 @@ }, "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21224,8 +17418,6 @@ }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21240,8 +17432,6 @@ }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21257,8 +17447,6 @@ }, "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21270,15 +17458,11 @@ }, "node_modules/jest-runner/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-runner/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21293,8 +17477,6 @@ }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21304,10 +17486,19 @@ "node": ">=8" } }, + "node_modules/jest-runner/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21340,8 +17531,6 @@ }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21356,8 +17545,6 @@ }, "node_modules/jest-runtime/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -21367,8 +17554,6 @@ }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21384,8 +17569,6 @@ }, "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21397,16 +17580,11 @@ }, "node_modules/jest-runtime/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -21426,8 +17604,6 @@ }, "node_modules/jest-runtime/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -21439,8 +17615,6 @@ }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21452,8 +17626,6 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { @@ -21484,8 +17656,6 @@ }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21500,8 +17670,6 @@ }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21517,8 +17685,6 @@ }, "node_modules/jest-snapshot/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21530,15 +17696,11 @@ }, "node_modules/jest-snapshot/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21550,8 +17712,6 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { @@ -21568,8 +17728,6 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21584,8 +17742,6 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21601,8 +17757,6 @@ }, "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21614,15 +17768,11 @@ }, "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -21634,8 +17784,6 @@ }, "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21647,8 +17795,6 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", "dependencies": { @@ -21665,8 +17811,6 @@ }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21681,8 +17825,6 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -21694,8 +17836,6 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21711,8 +17851,6 @@ }, "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21724,15 +17862,11 @@ }, "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21744,8 +17878,6 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { @@ -21764,8 +17896,6 @@ }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -21780,8 +17910,6 @@ }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -21797,8 +17925,6 @@ }, "node_modules/jest-watcher/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -21810,15 +17936,11 @@ }, "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -21830,8 +17952,6 @@ }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -21846,8 +17966,6 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -21861,9 +17979,7 @@ } }, "node_modules/jiti": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", - "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "version": "2.6.0", "devOptional": true, "license": "MIT", "bin": { @@ -21872,15 +17988,11 @@ }, "node_modules/jju": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true, "license": "MIT" }, "node_modules/joycon": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "license": "MIT", "engines": { "node": ">=10" @@ -21888,8 +18000,6 @@ }, "node_modules/js-tiktoken": { "version": "1.0.21", - "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", - "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", "license": "MIT", "dependencies": { "base64-js": "^1.5.1" @@ -21897,15 +18007,11 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -21918,8 +18024,6 @@ }, "node_modules/jsep": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", - "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "dev": true, "license": "MIT", "engines": { @@ -21928,8 +18032,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -21941,8 +18043,6 @@ }, "node_modules/json-bigint": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" @@ -21950,41 +18050,29 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -21996,14 +18084,10 @@ }, "node_modules/jsonc-parser": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "license": "MIT" }, "node_modules/jsondiffpatch": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", - "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", "license": "MIT", "dependencies": { "@types/diff-match-patch": "^1.0.36", @@ -22019,8 +18103,6 @@ }, "node_modules/jsonfile": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -22032,8 +18114,6 @@ }, "node_modules/jsonpath-plus": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", - "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", "dev": true, "license": "MIT", "dependencies": { @@ -22051,8 +18131,6 @@ }, "node_modules/jsonpointer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, "license": "MIT", "engines": { @@ -22060,9 +18138,7 @@ } }, "node_modules/jsonrepair": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.13.0.tgz", - "integrity": "sha512-5YRzlAQ7tuzV1nAJu3LvDlrKtBFIALHN2+a+I1MGJCt3ldRDBF/bZuvIPzae8Epot6KBXd0awRZZcuoeAsZ/mw==", + "version": "3.13.1", "license": "ISC", "bin": { "jsonrepair": "bin/cli.js" @@ -22070,8 +18146,6 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "license": "MIT", "dependencies": { "jws": "^3.2.2", @@ -22092,8 +18166,6 @@ }, "node_modules/jsonwebtoken/node_modules/jwa": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -22103,18 +18175,18 @@ }, "node_modules/jsonwebtoken/node_modules/jws": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/jszip": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { @@ -22126,8 +18198,6 @@ }, "node_modules/jwa": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -22137,8 +18207,6 @@ }, "node_modules/jws": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "license": "MIT", "dependencies": { "jwa": "^2.0.0", @@ -22147,8 +18215,6 @@ }, "node_modules/katex": { "version": "0.16.22", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -22164,8 +18230,6 @@ }, "node_modules/katex/node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -22174,8 +18238,6 @@ }, "node_modules/keytar": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -22187,8 +18249,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -22197,8 +18257,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -22207,8 +18265,6 @@ }, "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "license": "MIT", "engines": { @@ -22216,9 +18272,7 @@ } }, "node_modules/ky": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz", - "integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==", + "version": "1.11.0", "dev": true, "license": "MIT", "engines": { @@ -22230,8 +18284,6 @@ }, "node_modules/lcm": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz", - "integrity": "sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22240,18 +18292,13 @@ }, "node_modules/leac": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", - "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", "license": "MIT", - "optional": true, "funding": { "url": "https://ko-fi.com/killymxi" } }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", "engines": { @@ -22260,8 +18307,6 @@ }, "node_modules/lie": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22270,8 +18315,6 @@ }, "node_modules/lightningcss": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -22297,10 +18340,28 @@ "lightningcss-win32-x64-msvc": "1.30.1" } }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "license": "MIT", "engines": { @@ -22309,14 +18370,10 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, "node_modules/linkify-it": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22325,8 +18382,6 @@ }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -22341,8 +18396,6 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -22355,8 +18408,6 @@ }, "node_modules/load-json-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -22365,8 +18416,6 @@ }, "node_modules/load-tsconfig": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -22374,8 +18423,6 @@ }, "node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -22387,92 +18434,63 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, "license": "MIT" }, "node_modules/lodash.topath": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==", "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -22487,8 +18505,7 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -22502,8 +18519,7 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -22518,8 +18534,7 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -22530,14 +18545,12 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -22548,15 +18561,10 @@ }, "node_modules/long": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", - "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", - "license": "Apache-2.0", - "optional": true + "license": "Apache-2.0" }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", "funding": { @@ -22566,8 +18574,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "peer": true, @@ -22580,15 +18586,11 @@ }, "node_modules/loupe": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "license": "MIT", "engines": { @@ -22600,14 +18602,10 @@ }, "node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/lucide-react": { "version": "0.525.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", - "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", "dev": true, "license": "ISC", "peerDependencies": { @@ -22616,8 +18614,6 @@ }, "node_modules/magic-string": { "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -22625,8 +18621,6 @@ }, "node_modules/magicast": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22637,8 +18631,6 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -22653,15 +18645,11 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -22670,8 +18658,6 @@ }, "node_modules/markdown-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "dev": true, "license": "MIT", "engines": { @@ -22683,8 +18669,6 @@ }, "node_modules/markdown-it": { "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "license": "MIT", "dependencies": { @@ -22700,15 +18684,11 @@ }, "node_modules/markdown-it/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/markdown-it/node_modules/entities": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, "license": "BSD-2-Clause", "funding": { @@ -22717,8 +18697,6 @@ }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, "license": "MIT", "funding": { @@ -22728,8 +18706,6 @@ }, "node_modules/marked": { "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -22740,8 +18716,6 @@ }, "node_modules/marked-terminal": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", - "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", @@ -22760,9 +18734,7 @@ } }, "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.0.tgz", - "integrity": "sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==", + "version": "7.1.1", "license": "MIT", "dependencies": { "environment": "^1.0.0" @@ -22776,17 +18748,13 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/mcp-proxy": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/mcp-proxy/-/mcp-proxy-5.6.0.tgz", - "integrity": "sha512-sms4GHO/sX2d0uTdiUVOLXJMpNRc+4VZAdIRpj+DUZJovGXtXaYwF4YM1BTcQeCKEJkfwGPHoO24AQlR0TWOqA==", + "version": "5.6.1", "license": "MIT", "bin": { "mcp-proxy": "dist/bin/mcp-proxy.js" @@ -22794,16 +18762,11 @@ }, "node_modules/mdast": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast/-/mdast-3.0.0.tgz", - "integrity": "sha512-xySmf8g4fPKMeC07jXGz971EkLbWAJ83s4US2Tj9lEdnZ142UP5grN73H1Xd3HzrdbU5o9GYYP/y8F9ZSwLE9g==", - "deprecated": "`mdast` was renamed to `remark`", "dev": true, "license": "MIT" }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, "license": "MIT", "dependencies": { @@ -22819,8 +18782,6 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -22832,8 +18793,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "dev": true, "license": "MIT", "dependencies": { @@ -22857,8 +18816,6 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dev": true, "license": "MIT", "dependencies": { @@ -22876,8 +18833,6 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -22889,8 +18844,6 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22909,8 +18862,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22927,8 +18878,6 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22945,8 +18894,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, "license": "MIT", "dependencies": { @@ -22961,8 +18908,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, "license": "MIT", "dependencies": { @@ -22979,8 +18924,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22996,8 +18939,6 @@ }, "node_modules/mdast-util-math": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", - "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", "dev": true, "license": "MIT", "dependencies": { @@ -23016,8 +18957,6 @@ }, "node_modules/mdast-util-mdx": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "dev": true, "license": "MIT", "dependencies": { @@ -23034,8 +18973,6 @@ }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23053,8 +18990,6 @@ }, "node_modules/mdast-util-mdx-jsx": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -23078,8 +19013,6 @@ }, "node_modules/mdast-util-mdxjs-esm": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "dev": true, "license": "MIT", "dependencies": { @@ -23097,8 +19030,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { @@ -23112,8 +19043,6 @@ }, "node_modules/mdast-util-to-hast": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dev": true, "license": "MIT", "dependencies": { @@ -23134,8 +19063,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, "license": "MIT", "dependencies": { @@ -23156,8 +19083,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "license": "MIT", "dependencies": { @@ -23170,15 +19095,11 @@ }, "node_modules/mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true, "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -23186,8 +19107,6 @@ }, "node_modules/memorystream": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -23195,8 +19114,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23204,15 +19121,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -23221,8 +19134,6 @@ }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -23230,8 +19141,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, "funding": [ { @@ -23266,8 +19175,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, "funding": [ { @@ -23301,8 +19208,6 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dev": true, "license": "MIT", "dependencies": { @@ -23318,8 +19223,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dev": true, "license": "MIT", "dependencies": { @@ -23339,8 +19242,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "license": "MIT", "dependencies": { @@ -23356,8 +19257,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "license": "MIT", "dependencies": { @@ -23377,8 +19276,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, "license": "MIT", "dependencies": { @@ -23396,8 +19293,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -23414,8 +19309,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, "license": "MIT", "dependencies": { @@ -23428,8 +19321,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, "license": "MIT", "dependencies": { @@ -23446,8 +19337,6 @@ }, "node_modules/micromark-extension-math": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, "license": "MIT", "dependencies": { @@ -23466,8 +19355,6 @@ }, "node_modules/micromark-extension-mdx-expression": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", - "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", "dev": true, "funding": [ { @@ -23493,8 +19380,6 @@ }, "node_modules/micromark-extension-mdx-jsx": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23516,8 +19401,6 @@ }, "node_modules/micromark-extension-mdx-md": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23530,8 +19413,6 @@ }, "node_modules/micromark-extension-mdxjs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23551,8 +19432,6 @@ }, "node_modules/micromark-extension-mdxjs-esm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "dev": true, "license": "MIT", "dependencies": { @@ -23573,8 +19452,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, "funding": [ { @@ -23595,8 +19472,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, "funding": [ { @@ -23618,8 +19493,6 @@ }, "node_modules/micromark-factory-mdx-expression": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", - "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", "dev": true, "funding": [ { @@ -23646,8 +19519,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "dev": true, "funding": [ { @@ -23667,8 +19538,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "dev": true, "funding": [ { @@ -23690,8 +19559,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, "funding": [ { @@ -23713,8 +19580,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, "funding": [ { @@ -23734,8 +19599,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, "funding": [ { @@ -23754,8 +19617,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, "funding": [ { @@ -23776,8 +19637,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, "funding": [ { @@ -23797,8 +19656,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, "funding": [ { @@ -23817,8 +19674,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, "funding": [ { @@ -23840,8 +19695,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, "funding": [ { @@ -23857,8 +19710,6 @@ }, "node_modules/micromark-util-events-to-acorn": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", - "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", "dev": true, "funding": [ { @@ -23883,8 +19734,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, "funding": [ { @@ -23900,8 +19749,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, "funding": [ { @@ -23920,8 +19767,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, "funding": [ { @@ -23940,8 +19785,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, "funding": [ { @@ -23962,8 +19805,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -23985,8 +19826,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, "funding": [ { @@ -24002,8 +19841,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, "funding": [ { @@ -24017,11 +19854,29 @@ ], "license": "MIT" }, + "node_modules/micromark/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "devOptional": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -24033,9 +19888,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -24046,8 +19898,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -24058,8 +19908,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -24067,8 +19915,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -24079,8 +19925,6 @@ }, "node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", "engines": { @@ -24092,8 +19936,6 @@ }, "node_modules/mimic-function": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "license": "MIT", "engines": { "node": ">=18" @@ -24104,8 +19946,6 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", "engines": { @@ -24117,8 +19957,6 @@ }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -24132,8 +19970,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -24142,17 +19978,13 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { @@ -24163,13 +19995,11 @@ } }, "node_modules/mintlify": { - "version": "4.2.117", - "resolved": "https://registry.npmjs.org/mintlify/-/mintlify-4.2.117.tgz", - "integrity": "sha512-YNP478CTf/C8iHylRCgIAQdExTzm2wULi0+WLJjC5TMl5QEKDE/2Q1VQgHypP4ZZeDGuM2weZqr6AQLI/pGKuA==", + "version": "4.2.131", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.721" + "@mintlify/cli": "4.0.735" }, "bin": { "mint": "index.js", @@ -24181,39 +20011,28 @@ }, "node_modules/mitt": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true, "license": "MIT" }, "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "version": "1.0.4", "dev": true, "license": "MIT", "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, "license": "MIT", "optional": true }, "node_modules/mlly": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", "license": "MIT", "dependencies": { "acorn": "^8.15.0", @@ -24224,18 +20043,13 @@ }, "node_modules/mnemonist": { "version": "0.40.3", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.40.3.tgz", - "integrity": "sha512-Vjyr90sJ23CKKH/qPAgUKicw/v6pRoamxIEDFOF8uSgFME7DqPRpHgRTejWVjkdGg5dXj0/NyxZHZ9bcjH+2uQ==", "license": "MIT", - "optional": true, "dependencies": { "obliterator": "^2.0.4" } }, "node_modules/mocha": { "version": "11.7.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.2.tgz", - "integrity": "sha512-lkqVJPmqqG/w5jmmFtiRvtA2jkDyNVUcefFJKb2uyX4dekk8Okgqop3cgbFiaIvj8uCRJVTP5x9dfxGyXm2jvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24270,15 +20084,11 @@ }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/mocha/node_modules/chokidar": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { @@ -24291,10 +20101,24 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/mocha/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -24310,8 +20134,6 @@ }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -24323,8 +20145,6 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -24337,10 +20157,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24355,8 +20178,6 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -24371,8 +20192,6 @@ }, "node_modules/mocha/node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { @@ -24385,8 +20204,6 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -24399,10 +20216,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mocha/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mock-fs": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.5.0.tgz", - "integrity": "sha512-d/P1M/RacgM3dB0sJ8rjeRNXxtapkPCUnMGmIN0ixJ16F/E4GUZCvWcSGfWGz8eaXYvn1s9baUwNjI4LOPEjiA==", "dev": true, "license": "MIT", "engines": { @@ -24411,15 +20237,10 @@ }, "node_modules/module-details-from-path": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { @@ -24427,24 +20248,18 @@ } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "version": "2.0.0", "license": "MIT" }, "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "version": "2.0.0", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/mz": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "license": "MIT", "dependencies": { "any-promise": "^1.0.0", @@ -24454,8 +20269,6 @@ }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -24472,23 +20285,17 @@ }, "node_modules/napi-build-utils": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", "dev": true, "license": "MIT", "optional": true }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -24496,15 +20303,11 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, "node_modules/neotraverse": { "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "dev": true, "license": "MIT", "engines": { @@ -24513,8 +20316,6 @@ }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, "license": "MIT", "engines": { @@ -24523,15 +20324,11 @@ }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "license": "MIT" }, "node_modules/nimma": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.3.tgz", - "integrity": "sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -24550,8 +20347,6 @@ }, "node_modules/nlcst-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", - "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", "dev": true, "license": "MIT", "dependencies": { @@ -24564,8 +20359,6 @@ }, "node_modules/node-abi": { "version": "3.77.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", "dev": true, "license": "MIT", "optional": true, @@ -24578,17 +20371,12 @@ }, "node_modules/node-addon-api": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "dev": true, "license": "MIT", "optional": true }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -24606,8 +20394,6 @@ }, "node_modules/node-emoji": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.6.0", @@ -24621,8 +20407,6 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -24641,22 +20425,16 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -24668,15 +20446,11 @@ }, "node_modules/normalize-package-data/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -24685,8 +20459,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { @@ -24695,8 +20467,6 @@ }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "license": "MIT", "engines": { @@ -24705,8 +20475,6 @@ }, "node_modules/normalize-url": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "dev": true, "license": "MIT", "engines": { @@ -24718,8 +20486,6 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24744,8 +20510,6 @@ }, "node_modules/npm-run-all/node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -24755,8 +20519,6 @@ }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24770,8 +20532,6 @@ }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "license": "MIT", "dependencies": { @@ -24787,8 +20547,6 @@ }, "node_modules/npm-run-all/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -24797,8 +20555,6 @@ }, "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -24807,8 +20563,6 @@ }, "node_modules/npm-run-all/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -24820,8 +20574,6 @@ }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { @@ -24830,8 +20582,6 @@ }, "node_modules/npm-run-all/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -24840,8 +20590,6 @@ }, "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -24853,8 +20601,6 @@ }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { @@ -24863,8 +20609,6 @@ }, "node_modules/npm-run-all/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -24876,8 +20620,6 @@ }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -24889,8 +20631,6 @@ }, "node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24905,8 +20645,6 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", "engines": { @@ -24918,8 +20656,6 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -24931,8 +20667,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -24940,8 +20674,6 @@ }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, "license": "MIT", "engines": { @@ -24950,8 +20682,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -24962,8 +20692,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -24972,8 +20700,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -24993,37 +20719,24 @@ }, "node_modules/obliterator": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", - "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "license": "MIT", - "optional": true + "license": "MIT" }, - "node_modules/ollama-ai-provider": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ollama-ai-provider/-/ollama-ai-provider-1.2.0.tgz", - "integrity": "sha512-jTNFruwe3O/ruJeppI/quoOUxG7NA6blG3ZyQj3lei4+NnJo7bi3eIRWqlVpRlu/mbzbFXeJSBuYQWF6pzGKww==", + "node_modules/ollama-ai-provider-v2": { + "version": "1.3.1", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "^1.0.0", - "@ai-sdk/provider-utils": "^2.0.0", - "partial-json": "0.1.7" + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.7" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "zod": "^4.0.16" } }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -25034,8 +20747,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -25043,8 +20754,6 @@ }, "node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25059,15 +20768,11 @@ }, "node_modules/oniguruma-parser": { "version": "0.12.1", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", - "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", "dev": true, "license": "MIT" }, "node_modules/oniguruma-to-es": { "version": "4.3.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", - "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", "dev": true, "license": "MIT", "dependencies": { @@ -25078,9 +20783,6 @@ }, "node_modules/open": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "devOptional": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", @@ -25095,71 +20797,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openai": { - "version": "4.104.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", - "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "ws": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, "node_modules/openai-chat-tokens": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/openai-chat-tokens/-/openai-chat-tokens-0.2.8.tgz", - "integrity": "sha512-nW7QdFDIZlAYe6jsCT/VPJ/Lam3/w2DX9oxf/5wHpebBT49KI3TN43PPhYlq1klq2ajzXWKNOLY6U4FNZM7AoA==", "license": "MIT", "dependencies": { "js-tiktoken": "^1.0.7" } }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.126", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.126.tgz", - "integrity": "sha512-8AXQlBfrGmtYJEJUPs63F/uZQqVeFiN9o6NUjbDJYfxNxFnArlZufANPw4h6dGhYGKxcyw+TapXFvEsguzIQow==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, "node_modules/openapi-types": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", "dev": true, "license": "MIT" }, "node_modules/ora": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -25179,16 +20830,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "license": "MIT" - }, "node_modules/ora/node_modules/is-unicode-supported": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "license": "MIT", "engines": { "node": ">=18" @@ -25199,8 +20842,6 @@ }, "node_modules/ora/node_modules/log-symbols": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -25215,8 +20856,6 @@ }, "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "license": "MIT", "engines": { "node": ">=12" @@ -25225,49 +20864,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/outdent": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", "dev": true, "license": "MIT" }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -25284,8 +20887,6 @@ }, "node_modules/p-any": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-4.0.0.tgz", - "integrity": "sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==", "dev": true, "license": "MIT", "dependencies": { @@ -25301,8 +20902,6 @@ }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "license": "MIT", "engines": { @@ -25311,8 +20910,6 @@ }, "node_modules/p-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "license": "MIT", "dependencies": { @@ -25324,8 +20921,6 @@ }, "node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -25340,8 +20935,6 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -25353,8 +20946,6 @@ }, "node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, "license": "MIT", "engines": { @@ -25363,8 +20954,6 @@ }, "node_modules/p-some": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-6.0.0.tgz", - "integrity": "sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==", "dev": true, "license": "MIT", "dependencies": { @@ -25380,8 +20969,6 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, "license": "MIT", "engines": { @@ -25393,8 +20980,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -25403,8 +20988,6 @@ }, "node_modules/pac-proxy-agent": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, "license": "MIT", "dependencies": { @@ -25421,10 +21004,29 @@ "node": ">= 14" } }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/pac-resolver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, "license": "MIT", "dependencies": { @@ -25437,8 +21039,6 @@ }, "node_modules/package-json": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", "dev": true, "license": "MIT", "dependencies": { @@ -25456,14 +21056,10 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25472,15 +21068,11 @@ }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -25492,8 +21084,6 @@ }, "node_modules/parse-entities": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "dev": true, "license": "MIT", "dependencies": { @@ -25512,15 +21102,11 @@ }, "node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, "license": "MIT" }, "node_modules/parse-github-url": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", - "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", "dev": true, "license": "MIT", "bin": { @@ -25532,8 +21118,6 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -25551,8 +21135,6 @@ }, "node_modules/parse-latin": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", - "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25570,8 +21152,6 @@ }, "node_modules/parse-ms": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "license": "MIT", "engines": { "node": ">=18" @@ -25582,8 +21162,6 @@ }, "node_modules/parse-semver": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25592,8 +21170,6 @@ }, "node_modules/parse-semver/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -25602,8 +21178,6 @@ }, "node_modules/parse5": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "license": "MIT", "dependencies": { @@ -25615,8 +21189,6 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, "license": "MIT", "dependencies": { @@ -25629,8 +21201,6 @@ }, "node_modules/parse5-parser-stream": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, "license": "MIT", "dependencies": { @@ -25642,8 +21212,6 @@ }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -25655,10 +21223,7 @@ }, "node_modules/parseley": { "version": "0.12.1", - "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", - "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", "license": "MIT", - "optional": true, "dependencies": { "leac": "^0.6.0", "peberminta": "^0.9.0" @@ -25669,8 +21234,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -25678,14 +21241,10 @@ }, "node_modules/partial-json": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", - "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", "license": "MIT" }, "node_modules/patch-console": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", - "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", "dev": true, "license": "MIT", "engines": { @@ -25694,8 +21253,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -25704,8 +21261,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -25714,8 +21269,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -25723,15 +21276,10 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "devOptional": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -25746,14 +21294,10 @@ }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -25762,14 +21306,10 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { @@ -25778,31 +21318,22 @@ }, "node_modules/peberminta": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", - "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", "license": "MIT", - "optional": true, "funding": { "url": "https://ko-fi.com/killymxi" } }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -25813,8 +21344,6 @@ }, "node_modules/pidtree": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, "license": "MIT", "bin": { @@ -25826,8 +21355,6 @@ }, "node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -25836,8 +21363,6 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { "node": ">= 6" @@ -25845,8 +21370,6 @@ }, "node_modules/pkce-challenge": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -25854,8 +21377,6 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25867,8 +21388,6 @@ }, "node_modules/pkg-types": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "license": "MIT", "dependencies": { "confbox": "^0.1.8", @@ -25878,8 +21397,6 @@ }, "node_modules/pony-cause": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", - "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==", "dev": true, "license": "0BSD", "engines": { @@ -25888,8 +21405,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -25898,8 +21413,6 @@ }, "node_modules/postcss": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "devOptional": true, "funding": [ { @@ -25927,8 +21440,6 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "license": "MIT", "dependencies": { @@ -25945,8 +21456,6 @@ }, "node_modules/postcss-js": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "dev": true, "funding": [ { @@ -25971,8 +21480,6 @@ }, "node_modules/postcss-load-config": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "license": "MIT", "dependencies": { @@ -26001,8 +21508,6 @@ }, "node_modules/postcss-nested": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, "funding": [ { @@ -26027,8 +21532,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -26041,15 +21544,11 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true, "license": "MIT" }, "node_modules/prebuild-install": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", "dev": true, "license": "MIT", "optional": true, @@ -26076,8 +21575,6 @@ }, "node_modules/prettier": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -26092,8 +21589,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26107,8 +21602,6 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -26120,8 +21613,6 @@ }, "node_modules/pretty-ms": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "license": "MIT", "dependencies": { "parse-ms": "^4.0.0" @@ -26135,15 +21626,11 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", "engines": { @@ -26152,8 +21639,6 @@ }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -26166,8 +21651,6 @@ }, "node_modules/property-information": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "dev": true, "license": "MIT", "funding": { @@ -26177,18 +21660,13 @@ }, "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "license": "ISC" }, "node_modules/protobufjs": { "version": "7.5.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", - "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", "hasInstallScript": true, "license": "BSD-3-Clause", - "optional": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -26209,8 +21687,6 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -26222,8 +21698,6 @@ }, "node_modules/proxy-agent": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "license": "MIT", "dependencies": { @@ -26240,27 +21714,42 @@ "node": ">= 14" } }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/proxy-agent/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/public-ip": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-5.0.0.tgz", - "integrity": "sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==", "dev": true, "license": "MIT", "dependencies": { @@ -26277,8 +21766,6 @@ }, "node_modules/public-ip/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, "license": "MIT", "engines": { @@ -26290,8 +21777,6 @@ }, "node_modules/public-ip/node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "license": "MIT", "engines": { @@ -26300,8 +21785,6 @@ }, "node_modules/public-ip/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -26313,8 +21796,6 @@ }, "node_modules/public-ip/node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26339,8 +21820,6 @@ }, "node_modules/pump": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, "license": "MIT", "dependencies": { @@ -26350,8 +21829,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -26359,9 +21836,6 @@ }, "node_modules/puppeteer": { "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", - "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", - "deprecated": "< 24.10.2 is no longer supported", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -26380,8 +21854,6 @@ }, "node_modules/puppeteer-core": { "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", - "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -26395,10 +21867,29 @@ "node": ">=18" } }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/pure-rand": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -26414,8 +21905,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -26429,8 +21918,6 @@ }, "node_modules/quansync": { "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "dev": true, "funding": [ { @@ -26446,8 +21933,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -26467,8 +21952,6 @@ }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -26480,8 +21963,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26490,8 +21971,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -26499,8 +21978,6 @@ }, "node_modules/raw-body": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -26514,8 +21991,6 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -26530,8 +22005,6 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { @@ -26540,8 +22013,6 @@ }, "node_modules/react": { "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -26549,8 +22020,6 @@ }, "node_modules/react-dom": { "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "dev": true, "license": "MIT", "dependencies": { @@ -26562,15 +22031,11 @@ }, "node_modules/react-is": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, "node_modules/react-reconciler": { "version": "0.32.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.32.0.tgz", - "integrity": "sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26585,8 +22050,6 @@ }, "node_modules/react-remove-scroll": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "dev": true, "license": "MIT", "dependencies": { @@ -26611,8 +22074,6 @@ }, "node_modules/react-remove-scroll-bar": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dev": true, "license": "MIT", "dependencies": { @@ -26634,8 +22095,6 @@ }, "node_modules/react-style-singleton": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26657,8 +22116,6 @@ }, "node_modules/read": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "license": "ISC", "dependencies": { @@ -26670,8 +22127,6 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "license": "MIT", "dependencies": { @@ -26680,8 +22135,6 @@ }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -26690,8 +22143,6 @@ }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "license": "MIT", "dependencies": { @@ -26705,8 +22156,6 @@ }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -26718,8 +22167,6 @@ }, "node_modules/read-yaml-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, "license": "MIT", "dependencies": { @@ -26734,8 +22181,6 @@ }, "node_modules/read-yaml-file/node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -26744,8 +22189,6 @@ }, "node_modules/read-yaml-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -26754,15 +22197,11 @@ }, "node_modules/read/node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -26777,15 +22216,11 @@ }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { @@ -26797,8 +22232,6 @@ }, "node_modules/readdirp/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -26810,8 +22243,6 @@ }, "node_modules/recma-build-jsx": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "dev": true, "license": "MIT", "dependencies": { @@ -26826,8 +22257,6 @@ }, "node_modules/recma-jsx": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", - "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "dev": true, "license": "MIT", "dependencies": { @@ -26847,8 +22276,6 @@ }, "node_modules/recma-parse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -26864,8 +22291,6 @@ }, "node_modules/recma-stringify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "dev": true, "license": "MIT", "dependencies": { @@ -26881,8 +22306,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -26904,8 +22327,6 @@ }, "node_modules/regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", "dev": true, "license": "MIT", "dependencies": { @@ -26914,8 +22335,6 @@ }, "node_modules/regex-recursion": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", "dev": true, "license": "MIT", "dependencies": { @@ -26924,15 +22343,11 @@ }, "node_modules/regex-utilities": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -26952,8 +22367,6 @@ }, "node_modules/registry-auth-token": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, "license": "MIT", "dependencies": { @@ -26965,8 +22378,6 @@ }, "node_modules/registry-url": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -26981,8 +22392,6 @@ }, "node_modules/rehype-katex": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", - "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", "dev": true, "license": "MIT", "dependencies": { @@ -27001,8 +22410,6 @@ }, "node_modules/rehype-minify-whitespace": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.2.tgz", - "integrity": "sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==", "dev": true, "license": "MIT", "dependencies": { @@ -27016,8 +22423,6 @@ }, "node_modules/rehype-parse": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", "dev": true, "license": "MIT", "dependencies": { @@ -27032,8 +22437,6 @@ }, "node_modules/rehype-recma": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "dev": true, "license": "MIT", "dependencies": { @@ -27048,8 +22451,6 @@ }, "node_modules/remark": { "version": "15.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", - "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", "dev": true, "license": "MIT", "dependencies": { @@ -27065,8 +22466,6 @@ }, "node_modules/remark-frontmatter": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -27082,8 +22481,6 @@ }, "node_modules/remark-gfm": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "dev": true, "license": "MIT", "dependencies": { @@ -27101,8 +22498,6 @@ }, "node_modules/remark-math": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", - "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", "dev": true, "license": "MIT", "dependencies": { @@ -27118,8 +22513,6 @@ }, "node_modules/remark-mdx": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "dev": true, "license": "MIT", "dependencies": { @@ -27133,8 +22526,6 @@ }, "node_modules/remark-mdx-remove-esm": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-mdx-remove-esm/-/remark-mdx-remove-esm-1.2.1.tgz", - "integrity": "sha512-Vz1GKmRR9u7ij8TTf88DK8dFc/mVror9YUJekl1uP+S0sTzHxGdszJMeBbh96aIR+ZiI2QRKHu2UsV+/pWj7uQ==", "dev": true, "license": "MIT", "dependencies": { @@ -27148,8 +22539,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "license": "MIT", "dependencies": { @@ -27165,8 +22554,6 @@ }, "node_modules/remark-rehype": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "dev": true, "license": "MIT", "dependencies": { @@ -27183,8 +22570,6 @@ }, "node_modules/remark-smartypants": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", - "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", "dev": true, "license": "MIT", "dependencies": { @@ -27199,8 +22584,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "license": "MIT", "dependencies": { @@ -27215,8 +22598,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27224,8 +22605,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -27233,10 +22612,7 @@ }, "node_modules/require-in-the-middle": { "version": "7.5.2", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", - "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", "license": "MIT", - "optional": true, "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", @@ -27246,11 +22622,27 @@ "node": ">=8.6.0" } }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "devOptional": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -27269,15 +22661,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { @@ -27289,8 +22677,6 @@ }, "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "license": "MIT", "engines": { "node": ">=8" @@ -27298,8 +22684,6 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "devOptional": true, "license": "MIT", "funding": { @@ -27308,8 +22692,6 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -27318,8 +22700,6 @@ }, "node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "license": "MIT", "dependencies": { @@ -27334,8 +22714,6 @@ }, "node_modules/restore-cursor": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "license": "MIT", "dependencies": { "onetime": "^7.0.0", @@ -27350,8 +22728,6 @@ }, "node_modules/restore-cursor/node_modules/onetime": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" @@ -27365,8 +22741,6 @@ }, "node_modules/retext": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", - "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", "dev": true, "license": "MIT", "dependencies": { @@ -27382,8 +22756,6 @@ }, "node_modules/retext-latin": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", - "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", "dev": true, "license": "MIT", "dependencies": { @@ -27398,8 +22770,6 @@ }, "node_modules/retext-smartypants": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", - "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -27414,8 +22784,6 @@ }, "node_modules/retext-stringify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", - "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", "dev": true, "license": "MIT", "dependencies": { @@ -27430,8 +22798,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -27440,15 +22806,15 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-beta.38", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.38.tgz", - "integrity": "sha512-58frPNX55Je1YsyrtPJv9rOSR3G5efUZpRqok94Efsj0EUa8dnqJV3BldShyI7A+bVPleucOtzXHwVpJRcR0kQ==", + "version": "1.0.0-beta.41", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.41.tgz", + "integrity": "sha512-U+NPR0Bkg3wm61dteD2L4nAM1U9dtaqVrpDXwC36IKRHpEO/Ubpid4Nijpa2imPchcVNHfxVFwSSMJdwdGFUbg==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.89.0", - "@rolldown/pluginutils": "1.0.0-beta.38", - "ansis": "^4.0.0" + "@oxc-project/types": "=0.93.0", + "@rolldown/pluginutils": "1.0.0-beta.41", + "ansis": "=4.2.0" }, "bin": { "rolldown": "bin/cli.mjs" @@ -27457,26 +22823,24 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-beta.38", - "@rolldown/binding-darwin-arm64": "1.0.0-beta.38", - "@rolldown/binding-darwin-x64": "1.0.0-beta.38", - "@rolldown/binding-freebsd-x64": "1.0.0-beta.38", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.38", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.38", - "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.38", - "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.38", - "@rolldown/binding-linux-x64-musl": "1.0.0-beta.38", - "@rolldown/binding-openharmony-arm64": "1.0.0-beta.38", - "@rolldown/binding-wasm32-wasi": "1.0.0-beta.38", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.38", - "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.38", - "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.38" + "@rolldown/binding-android-arm64": "1.0.0-beta.41", + "@rolldown/binding-darwin-arm64": "1.0.0-beta.41", + "@rolldown/binding-darwin-x64": "1.0.0-beta.41", + "@rolldown/binding-freebsd-x64": "1.0.0-beta.41", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.41", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.41", + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.41", + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.41", + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.41", + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.41", + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.41", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.41", + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.41", + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.41" } }, "node_modules/rolldown-plugin-dts": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.16.5.tgz", - "integrity": "sha512-bOAfJ7Tc11xK/Uou7KWYha25/Sy80G0DZkhX8WMYx6l8PUalR+bvVzQNuEqXafpKEisZfUHQrkhS2gZG76Xntw==", + "version": "0.16.9", "dev": true, "license": "MIT", "dependencies": { @@ -27484,8 +22848,8 @@ "@babel/parser": "^7.28.4", "@babel/types": "^7.28.4", "ast-kit": "^2.1.2", - "birpc": "^2.5.0", - "debug": "^4.4.1", + "birpc": "^2.6.1", + "debug": "^4.4.3", "dts-resolver": "^2.1.2", "get-tsconfig": "^4.10.1", "magic-string": "^0.30.19" @@ -27518,10 +22882,29 @@ } } }, + "node_modules/rolldown-plugin-dts/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/rolldown-plugin-dts/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { - "version": "4.50.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.2.tgz", - "integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==", + "version": "4.52.3", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -27534,34 +22917,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.50.2", - "@rollup/rollup-android-arm64": "4.50.2", - "@rollup/rollup-darwin-arm64": "4.50.2", - "@rollup/rollup-darwin-x64": "4.50.2", - "@rollup/rollup-freebsd-arm64": "4.50.2", - "@rollup/rollup-freebsd-x64": "4.50.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.50.2", - "@rollup/rollup-linux-arm-musleabihf": "4.50.2", - "@rollup/rollup-linux-arm64-gnu": "4.50.2", - "@rollup/rollup-linux-arm64-musl": "4.50.2", - "@rollup/rollup-linux-loong64-gnu": "4.50.2", - "@rollup/rollup-linux-ppc64-gnu": "4.50.2", - "@rollup/rollup-linux-riscv64-gnu": "4.50.2", - "@rollup/rollup-linux-riscv64-musl": "4.50.2", - "@rollup/rollup-linux-s390x-gnu": "4.50.2", - "@rollup/rollup-linux-x64-gnu": "4.50.2", - "@rollup/rollup-linux-x64-musl": "4.50.2", - "@rollup/rollup-openharmony-arm64": "4.50.2", - "@rollup/rollup-win32-arm64-msvc": "4.50.2", - "@rollup/rollup-win32-ia32-msvc": "4.50.2", - "@rollup/rollup-win32-x64-msvc": "4.50.2", + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", "fsevents": "~2.3.2" } }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -27574,10 +22956,27 @@ "node": ">= 18" } }, + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/router/node_modules/path-to-regexp": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", "funding": { "type": "opencollective", @@ -27586,9 +22985,6 @@ }, "node_modules/run-applescript": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -27598,9 +22994,7 @@ } }, "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "version": "4.0.6", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -27608,8 +23002,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -27632,8 +23024,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -27641,8 +23031,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -27661,15 +23049,11 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -27688,8 +23072,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -27705,15 +23087,11 @@ }, "node_modules/safe-push-apply/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -27730,35 +23108,25 @@ }, "node_modules/safe-stable-stringify": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==", "dev": true, "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, "license": "ISC" }, "node_modules/scheduler": { "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "dev": true, "license": "MIT" }, "node_modules/section-matter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dev": true, "license": "MIT", "dependencies": { @@ -27771,16 +23139,11 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", "license": "BSD-3-Clause" }, "node_modules/selderee": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", - "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", "license": "MIT", - "optional": true, "dependencies": { "parseley": "^0.12.0" }, @@ -27790,8 +23153,6 @@ }, "node_modules/sembear": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/sembear/-/sembear-0.7.0.tgz", - "integrity": "sha512-XyLTEich2D02FODCkfdto3mB9DetWPLuTzr4tvoofe9SvyM27h4nQSbV3+iVcYQz94AFyKtqBv5pcZbj3k2hdA==", "dev": true, "license": "MIT", "dependencies": { @@ -27800,8 +23161,6 @@ }, "node_modules/semver": { "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -27812,8 +23171,6 @@ }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -27834,34 +23191,19 @@ "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/serialize-error": { "version": "12.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-12.0.0.tgz", - "integrity": "sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -27874,23 +23216,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -27899,8 +23226,6 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -27914,8 +23239,6 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -27932,8 +23255,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -27948,8 +23269,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -27963,21 +23282,15 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true, "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sharp": { "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -28016,8 +23329,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -28028,8 +23339,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -28037,9 +23346,6 @@ }, "node_modules/shell-quote": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -28049,33 +23355,26 @@ } }, "node_modules/shiki": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.12.2.tgz", - "integrity": "sha512-uIrKI+f9IPz1zDT+GMz+0RjzKJiijVr6WDWm9Pe3NNY6QigKCfifCEv9v9R2mDASKKjzjQ2QpFLcxaR3iHSnMA==", + "version": "3.13.0", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.12.2", - "@shikijs/engine-javascript": "3.12.2", - "@shikijs/engine-oniguruma": "3.12.2", - "@shikijs/langs": "3.12.2", - "@shikijs/themes": "3.12.2", - "@shikijs/types": "3.12.2", + "@shikijs/core": "3.13.0", + "@shikijs/engine-javascript": "3.13.0", + "@shikijs/engine-oniguruma": "3.13.0", + "@shikijs/langs": "3.13.0", + "@shikijs/themes": "3.13.0", + "@shikijs/types": "3.13.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "node_modules/shimmer": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "license": "BSD-2-Clause", - "optional": true + "license": "BSD-2-Clause" }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -28093,8 +23392,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -28109,8 +23406,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -28127,8 +23422,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -28146,15 +23439,11 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -28165,8 +23454,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, "funding": [ { @@ -28187,8 +23474,6 @@ }, "node_modules/simple-eval": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-eval/-/simple-eval-1.0.1.tgz", - "integrity": "sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28200,8 +23485,6 @@ }, "node_modules/simple-get": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, "funding": [ { @@ -28227,10 +23510,7 @@ }, "node_modules/simple-git": { "version": "3.28.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", - "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", "license": "MIT", - "optional": true, "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -28241,10 +23521,27 @@ "url": "https://github.com/steveukx/git-js?sponsor=1" } }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/simple-swizzle": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", "dev": true, "license": "MIT", "dependencies": { @@ -28253,22 +23550,16 @@ }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", "dev": true, "license": "MIT" }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "license": "MIT" }, "node_modules/skin-tone": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "license": "MIT", "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" @@ -28279,8 +23570,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -28289,8 +23578,6 @@ }, "node_modules/slice-ansi": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", "dependencies": { @@ -28306,8 +23593,6 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -28319,8 +23604,6 @@ }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28335,8 +23618,6 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { @@ -28346,8 +23627,6 @@ }, "node_modules/socket.io": { "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dev": true, "license": "MIT", "dependencies": { @@ -28365,8 +23644,6 @@ }, "node_modules/socket.io-adapter": { "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, "license": "MIT", "dependencies": { @@ -28376,8 +23653,6 @@ }, "node_modules/socket.io-adapter/node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28392,10 +23667,13 @@ } } }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/socket.io-adapter/node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", "engines": { @@ -28416,8 +23694,6 @@ }, "node_modules/socket.io-parser": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, "license": "MIT", "dependencies": { @@ -28430,8 +23706,6 @@ }, "node_modules/socket.io-parser/node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28446,10 +23720,13 @@ } } }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/socket.io/node_modules/debug": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28464,10 +23741,13 @@ } } }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/socks": { "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "license": "MIT", "dependencies": { @@ -28481,8 +23761,6 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -28494,10 +23772,29 @@ "node": ">= 14" } }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -28506,8 +23803,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -28516,8 +23811,6 @@ }, "node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", "dependencies": { @@ -28527,8 +23820,6 @@ }, "node_modules/space-separated-tokens": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true, "license": "MIT", "funding": { @@ -28538,8 +23829,6 @@ }, "node_modules/spawndamnit": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -28549,8 +23838,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -28560,15 +23847,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -28578,22 +23861,16 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28605,8 +23882,6 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", "engines": { @@ -28615,15 +23890,11 @@ }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -28631,15 +23902,11 @@ }, "node_modules/std-env": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "dev": true, "license": "MIT" }, "node_modules/stdin-discarder": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "license": "MIT", "engines": { "node": ">=18" @@ -28650,8 +23917,6 @@ }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28663,29 +23928,22 @@ } }, "node_modules/streamx": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", + "version": "2.23.0", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/strict-event-emitter-types": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz", - "integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==", "license": "ISC" }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -28693,14 +23951,11 @@ }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "node_modules/string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28711,18 +23966,35 @@ "node": ">=10" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -28731,8 +24003,6 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -28743,31 +24013,29 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/string.prototype.padend": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", - "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -28785,8 +24053,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -28807,8 +24073,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -28826,8 +24090,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -28844,8 +24106,6 @@ }, "node_modules/stringify-entities": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, "license": "MIT", "dependencies": { @@ -28858,22 +24118,21 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.2", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -28884,17 +24143,6 @@ }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -28902,8 +24150,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -28912,8 +24158,6 @@ }, "node_modules/strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, "license": "MIT", "engines": { @@ -28922,8 +24166,6 @@ }, "node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", "engines": { @@ -28935,8 +24177,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -28948,8 +24188,6 @@ }, "node_modules/strnum": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", "funding": [ { "type": "github", @@ -28960,8 +24198,6 @@ }, "node_modules/strtok3": { "version": "10.3.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", - "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0" @@ -28976,8 +24212,6 @@ }, "node_modules/style-to-js": { "version": "1.1.17", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", - "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", "dev": true, "license": "MIT", "dependencies": { @@ -28986,8 +24220,6 @@ }, "node_modules/style-to-object": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", - "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", "dev": true, "license": "MIT", "dependencies": { @@ -28996,8 +24228,6 @@ }, "node_modules/sucrase": { "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", @@ -29018,8 +24248,6 @@ }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "license": "MIT", "engines": { "node": ">= 6" @@ -29027,8 +24255,6 @@ }, "node_modules/superagent": { "version": "10.2.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.3.tgz", - "integrity": "sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==", "dev": true, "license": "MIT", "dependencies": { @@ -29046,10 +24272,24 @@ "node": ">=14.18.0" } }, + "node_modules/superagent/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "license": "MIT", "bin": { @@ -29059,10 +24299,13 @@ "node": ">=4.0.0" } }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/supertest": { "version": "7.1.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz", - "integrity": "sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==", "dev": true, "license": "MIT", "dependencies": { @@ -29075,8 +24318,6 @@ }, "node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, "license": "MIT", "engines": { @@ -29088,8 +24329,6 @@ }, "node_modules/supports-hyperlinks": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0", @@ -29104,8 +24343,6 @@ }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -29116,9 +24353,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -29129,8 +24363,6 @@ }, "node_modules/swr": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.6.tgz", - "integrity": "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==", "license": "MIT", "dependencies": { "dequal": "^2.0.3", @@ -29142,8 +24374,6 @@ }, "node_modules/tailwind-merge": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", "dev": true, "license": "MIT", "funding": { @@ -29153,15 +24383,11 @@ }, "node_modules/tailwindcss": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", - "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==", "dev": true, "license": "MIT" }, "node_modules/tapable": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", - "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", "dev": true, "license": "MIT", "engines": { @@ -29173,17 +24399,14 @@ } }, "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.1", "dev": true, "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { @@ -29192,8 +24415,6 @@ }, "node_modules/tar-fs": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "optional": true, @@ -29206,16 +24427,12 @@ }, "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, "license": "ISC", "optional": true }, "node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "optional": true, @@ -29232,8 +24449,6 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "optional": true, @@ -29252,8 +24467,6 @@ }, "node_modules/term-size": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, "license": "MIT", "engines": { @@ -29264,24 +24477,59 @@ } }, "node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=18" + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/text-decoder": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -29290,8 +24538,6 @@ }, "node_modules/thenify": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "license": "MIT", "dependencies": { "any-promise": "^1.0.0" @@ -29299,8 +24545,6 @@ }, "node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -29311,8 +24555,6 @@ }, "node_modules/throttleit": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", - "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", "license": "MIT", "engines": { "node": ">=18" @@ -29323,35 +24565,25 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinycolor2": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "license": "MIT" }, "node_modules/tinyexec": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -29366,8 +24598,6 @@ }, "node_modules/tinygradient": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", - "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", "license": "MIT", "dependencies": { "@types/tinycolor2": "^1.4.0", @@ -29376,8 +24606,6 @@ }, "node_modules/tinypool": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", "engines": { @@ -29386,8 +24614,6 @@ }, "node_modules/tinyrainbow": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, "license": "MIT", "engines": { @@ -29396,8 +24622,6 @@ }, "node_modules/tinyspy": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "license": "MIT", "engines": { @@ -29406,8 +24630,6 @@ }, "node_modules/tmp": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -29416,16 +24638,11 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -29436,8 +24653,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -29445,8 +24660,6 @@ }, "node_modules/token-types": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", - "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "license": "MIT", "dependencies": { "@borewit/text-codec": "^0.1.0", @@ -29463,8 +24676,6 @@ }, "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "license": "MIT", "dependencies": { "punycode": "^2.1.1" @@ -29475,8 +24686,6 @@ }, "node_modules/tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "license": "MIT", "bin": { "tree-kill": "cli.js" @@ -29484,8 +24693,6 @@ }, "node_modules/trim-lines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true, "license": "MIT", "funding": { @@ -29495,8 +24702,6 @@ }, "node_modules/trim-trailing-lines": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz", - "integrity": "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==", "dev": true, "license": "MIT", "funding": { @@ -29506,8 +24711,6 @@ }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, "license": "MIT", "funding": { @@ -29517,14 +24720,10 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "license": "Apache-2.0" }, "node_modules/ts-jest": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.2.tgz", - "integrity": "sha512-pBNOkn4HtuLpNrXTMVRC9b642CBaDnKqWXny4OzuoULT9S7Kf8MMlaRe2veKax12rjf5WcpMBhVPbQurlWGNxA==", + "version": "29.4.4", "dev": true, "license": "MIT", "dependencies": { @@ -29574,77 +24773,8 @@ } } }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tsdown": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.15.2.tgz", - "integrity": "sha512-qPbWcVnI7Ekq5p4xPiLwuS9siczCGPAyZYsAzcS1xTcFvkkZIsDbh3ejlmUoe/ypLJl5+oQ4Rbwp63Zf+eWiMw==", + "version": "0.15.5", "dev": true, "license": "MIT", "dependencies": { @@ -29656,7 +24786,7 @@ "empathic": "^2.0.0", "hookable": "^5.5.3", "rolldown": "latest", - "rolldown-plugin-dts": "^0.16.5", + "rolldown-plugin-dts": "^0.16.8", "semver": "^7.7.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.15", @@ -29699,8 +24829,6 @@ }, "node_modules/tsdown/node_modules/chokidar": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", "dependencies": { @@ -29713,20 +24841,37 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/tsdown/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/tsdown/node_modules/diff": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", - "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/tsdown/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/tsdown/node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", "engines": { @@ -29739,14 +24884,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsup": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", - "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", "license": "MIT", "dependencies": { "bundle-require": "^5.1.0", @@ -29797,8 +24938,6 @@ }, "node_modules/tsup/node_modules/chokidar": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -29810,10 +24949,23 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/tsup/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/tsup/node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "license": "MIT", "engines": { "node": ">=14" @@ -29822,10 +24974,12 @@ "url": "https://github.com/sponsors/antonk52" } }, + "node_modules/tsup/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, "node_modules/tsup/node_modules/postcss-load-config": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "funding": [ { "type": "opencollective", @@ -29866,8 +25020,6 @@ }, "node_modules/tsup/node_modules/readdirp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -29879,9 +25031,6 @@ }, "node_modules/tsup/node_modules/source-map": { "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "deprecated": "The work that was done in this beta branch won't be included in future versions", "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" @@ -29892,28 +25041,10 @@ }, "node_modules/tsup/node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "license": "MIT" }, - "node_modules/tsup/node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/tsx": { - "version": "4.20.5", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.5.tgz", - "integrity": "sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==", + "version": "4.20.6", "devOptional": true, "license": "MIT", "dependencies": { @@ -29932,8 +25063,6 @@ }, "node_modules/tunnel": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, "license": "MIT", "engines": { @@ -29942,8 +25071,6 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -29956,8 +25083,6 @@ }, "node_modules/turbo": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.6.tgz", - "integrity": "sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==", "dev": true, "license": "MIT", "bin": { @@ -29972,24 +25097,8 @@ "turbo-windows-arm64": "2.5.6" } }, - "node_modules/turbo-darwin-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.5.6.tgz", - "integrity": "sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/turbo-darwin-arm64": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==", "cpu": [ "arm64" ], @@ -30000,66 +25109,25 @@ "darwin" ] }, - "node_modules/turbo-linux-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.5.6.tgz", - "integrity": "sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==", - "cpu": [ - "x64" - ], + "node_modules/twoslash": { + "version": "0.3.4", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@typescript/vfs": "^1.6.1", + "twoslash-protocol": "0.3.4" + }, + "peerDependencies": { + "typescript": "^5.5.0" + } }, - "node_modules/turbo-linux-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.5.6.tgz", - "integrity": "sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==", - "cpu": [ - "arm64" - ], + "node_modules/twoslash-protocol": { + "version": "0.3.4", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-windows-64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.5.6.tgz", - "integrity": "sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/turbo-windows-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.5.6.tgz", - "integrity": "sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "MIT" }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", "engines": { @@ -30067,12 +25135,10 @@ } }, "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "4.41.0", "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12.20" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -30080,8 +25146,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -30093,8 +25157,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -30108,8 +25170,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -30128,8 +25188,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -30150,8 +25208,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -30171,8 +25227,6 @@ }, "node_modules/typed-rest-client": { "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, "license": "MIT", "dependencies": { @@ -30183,8 +25237,6 @@ }, "node_modules/typescript": { "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -30197,21 +25249,15 @@ }, "node_modules/uc.micro": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true, "license": "MIT" }, "node_modules/ufo": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "license": "MIT" }, "node_modules/uglify-js": { "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -30224,8 +25270,6 @@ }, "node_modules/uint8array-extras": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", - "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "license": "MIT", "engines": { "node": ">=18" @@ -30236,8 +25280,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -30255,8 +25297,6 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "license": "MIT", "dependencies": { @@ -30266,8 +25306,6 @@ }, "node_modules/unconfig": { "version": "7.3.3", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-7.3.3.tgz", - "integrity": "sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==", "dev": true, "license": "MIT", "dependencies": { @@ -30282,15 +25320,11 @@ }, "node_modules/underscore": { "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "dev": true, "license": "MIT" }, "node_modules/undici": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", - "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -30298,14 +25332,10 @@ }, "node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-emoji-modifier-base": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "license": "MIT", "engines": { "node": ">=4" @@ -30313,8 +25343,6 @@ }, "node_modules/unicorn-magic": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "license": "MIT", "engines": { "node": ">=18" @@ -30325,8 +25353,6 @@ }, "node_modules/unified": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, "license": "MIT", "dependencies": { @@ -30345,8 +25371,6 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -30358,8 +25382,6 @@ }, "node_modules/unist-builder": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz", - "integrity": "sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==", "dev": true, "license": "MIT", "dependencies": { @@ -30372,8 +25394,6 @@ }, "node_modules/unist-util-find-after": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", - "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -30387,8 +25407,6 @@ }, "node_modules/unist-util-is": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "license": "MIT", "dependencies": { @@ -30401,8 +25419,6 @@ }, "node_modules/unist-util-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-4.0.0.tgz", - "integrity": "sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==", "dev": true, "license": "MIT", "dependencies": { @@ -30415,8 +25431,6 @@ }, "node_modules/unist-util-modify-children": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", - "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", "dev": true, "license": "MIT", "dependencies": { @@ -30430,8 +25444,6 @@ }, "node_modules/unist-util-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "license": "MIT", "dependencies": { @@ -30444,8 +25456,6 @@ }, "node_modules/unist-util-position-from-estree": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -30458,8 +25468,6 @@ }, "node_modules/unist-util-remove": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", - "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", "dev": true, "license": "MIT", "dependencies": { @@ -30474,8 +25482,6 @@ }, "node_modules/unist-util-remove-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -30489,8 +25495,6 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -30503,8 +25507,6 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "license": "MIT", "dependencies": { @@ -30519,8 +25521,6 @@ }, "node_modules/unist-util-visit-children": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", - "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", "dev": true, "license": "MIT", "dependencies": { @@ -30533,8 +25533,6 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "license": "MIT", "dependencies": { @@ -30548,8 +25546,6 @@ }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -30558,8 +25554,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -30567,8 +25561,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -30598,8 +25590,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -30607,35 +25597,25 @@ }, "node_modules/uri-templates": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/uri-templates/-/uri-templates-0.2.0.tgz", - "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", "license": "http://geraintluff.github.io/tv4/LICENSE.txt" }, "node_modules/urijs": { "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", "dev": true, "license": "MIT" }, "node_modules/url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true, "license": "MIT" }, "node_modules/urlpattern-polyfill": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", "dev": true, "license": "MIT" }, "node_modules/use-callback-ref": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dev": true, "license": "MIT", "dependencies": { @@ -30656,8 +25636,6 @@ }, "node_modules/use-sidecar": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -30679,8 +25657,6 @@ }, "node_modules/use-sync-external-store": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -30688,14 +25664,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/utility-types": { "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", "dev": true, "license": "MIT", "engines": { @@ -30704,8 +25677,6 @@ }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -30713,8 +25684,6 @@ }, "node_modules/uuid": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -30724,17 +25693,8 @@ "uuid": "dist/esm/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, "node_modules/v8-to-istanbul": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", "dependencies": { @@ -30748,8 +25708,6 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -30759,8 +25717,6 @@ }, "node_modules/validate-npm-package-name": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", - "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "dev": true, "license": "ISC", "engines": { @@ -30769,8 +25725,6 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -30778,8 +25732,6 @@ }, "node_modules/vfile": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -30793,8 +25745,6 @@ }, "node_modules/vfile-location": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", "dev": true, "license": "MIT", "dependencies": { @@ -30808,8 +25758,6 @@ }, "node_modules/vfile-matter": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vfile-matter/-/vfile-matter-5.0.1.tgz", - "integrity": "sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==", "dev": true, "license": "MIT", "dependencies": { @@ -30823,8 +25771,6 @@ }, "node_modules/vfile-matter/node_modules/yaml": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { @@ -30836,8 +25782,6 @@ }, "node_modules/vfile-message": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "dev": true, "license": "MIT", "dependencies": { @@ -30851,8 +25795,6 @@ }, "node_modules/vite": { "version": "5.4.20", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", - "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", "dependencies": { @@ -30911,8 +25853,6 @@ }, "node_modules/vite-node": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", "dev": true, "license": "MIT", "dependencies": { @@ -30932,85 +25872,34 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-node/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "node_modules/vite-node/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-node/node_modules/ms": { + "version": "2.1.3", "dev": true, "license": "MIT" }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/vite-node/node_modules/pathe": { + "version": "1.1.2", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -31020,320 +25909,13 @@ "os": [ "darwin" ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "peer": true, "engines": { "node": ">=12" } }, "node_modules/vite/node_modules/esbuild": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -31371,8 +25953,6 @@ }, "node_modules/vitest": { "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", - "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -31435,43 +26015,47 @@ } } }, + "node_modules/vitest/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/vitest/node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true, "license": "MIT" }, "node_modules/vitest/node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, "node_modules/walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "dev": true, "license": "MIT", "funding": { @@ -31481,8 +26065,6 @@ }, "node_modules/web-streams-polyfill": { "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", "license": "MIT", "engines": { "node": ">= 14" @@ -31490,8 +26072,6 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -31499,8 +26079,6 @@ }, "node_modules/whatwg-encoding": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "license": "MIT", "dependencies": { @@ -31512,8 +26090,6 @@ }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -31525,8 +26101,6 @@ }, "node_modules/whatwg-mimetype": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "license": "MIT", "engines": { @@ -31535,8 +26109,6 @@ }, "node_modules/whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "license": "MIT", "dependencies": { "tr46": "^3.0.0", @@ -31548,8 +26120,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -31563,8 +26133,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -31583,8 +26151,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -31611,15 +26177,11 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -31637,8 +26199,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -31659,8 +26219,6 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -31675,15 +26233,13 @@ } }, "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "version": "5.0.0", "license": "MIT", "dependencies": { - "string-width": "^5.0.1" + "string-width": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -31691,40 +26247,29 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "license": "MIT" }, "node_modules/workerpool": { "version": "9.3.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", - "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "6.2.0", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -31738,10 +26283,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -31755,8 +26305,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -31767,20 +26315,14 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -31791,43 +26333,82 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { @@ -31840,15 +26421,11 @@ }, "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/ws": { "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -31868,9 +26445,6 @@ }, "node_modules/wsl-utils": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "devOptional": true, "license": "MIT", "dependencies": { "is-wsl": "^3.1.0" @@ -31884,8 +26458,6 @@ }, "node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, "license": "MIT", "dependencies": { @@ -31898,52 +26470,14 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, "license": "MIT", "engines": { "node": ">=4.0" } }, - "node_modules/xsschema": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/xsschema/-/xsschema-0.3.5.tgz", - "integrity": "sha512-f+dcy11dTv7aBEEfTbXWnrm/1b/Ds2k4taN0TpN6KCtPAD58kyE/R1znUdrHdBnhIFexj9k+pS1fm6FgtSISrQ==", - "license": "MIT", - "peerDependencies": { - "@valibot/to-json-schema": "^1.0.0", - "arktype": "^2.1.20", - "effect": "^3.16.0", - "sury": "^10.0.0", - "zod": "^3.25.0 || ^4.0.0", - "zod-to-json-schema": "^3.24.5" - }, - "peerDependenciesMeta": { - "@valibot/to-json-schema": { - "optional": true - }, - "arktype": { - "optional": true - }, - "effect": { - "optional": true - }, - "sury": { - "optional": true - }, - "zod": { - "optional": true - }, - "zod-to-json-schema": { - "optional": true - } - } - }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" @@ -31951,8 +26485,6 @@ }, "node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -31961,9 +26493,7 @@ }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, + "devOptional": true, "license": "ISC", "engines": { "node": ">= 6" @@ -31971,9 +26501,6 @@ }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "devOptional": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -31990,9 +26517,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "devOptional": true, "license": "ISC", "engines": { "node": ">=12" @@ -32000,8 +26524,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -32016,8 +26538,6 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -32027,18 +26547,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "devOptional": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -32049,10 +26570,18 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "license": "MIT", "dependencies": { @@ -32062,32 +26591,18 @@ }, "node_modules/yazl": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "1.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -32095,8 +26610,6 @@ }, "node_modules/yoctocolors": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "license": "MIT", "engines": { "node": ">=18" @@ -32107,8 +26620,6 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "license": "MIT", "engines": { "node": ">=18" @@ -32119,33 +26630,18 @@ }, "node_modules/yoga-layout": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", - "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", "dev": true, "license": "MIT" }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.1.11", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, "license": "MIT", "funding": { @@ -32153,6 +26649,403 @@ "url": "https://github.com/sponsors/wooorm" } }, + "packages/ai-sdk-provider-grok-cli": { + "name": "@tm/ai-sdk-provider-grok-cli", + "dependencies": { + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.10", + "jsonc-parser": "^3.3.1" + }, + "devDependencies": { + "@types/node": "^22.18.6", + "typescript": "^5.9.2", + "vitest": "^3.2.4" + }, + "engines": { + "node": ">=18" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/expect": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/mocker": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/runner": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/snapshot": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/spy": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/@vitest/utils": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/ai-sdk-provider-grok-cli/node_modules/tinyexec": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "packages/ai-sdk-provider-grok-cli/node_modules/tinyrainbow": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/tinyspy": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/vite-node": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/vite-node/node_modules/vite": { + "version": "7.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/vitest": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@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", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "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", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "packages/ai-sdk-provider-grok-cli/node_modules/vitest/node_modules/vite": { + "version": "7.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "packages/build-config": { "name": "@tm/build-config", "license": "MIT", @@ -32160,8 +27053,7 @@ "tsup": "^8.5.0" }, "devDependencies": { - "dotenv-mono": "^1.5.1", - "typescript": "^5.7.3" + "typescript": "^5.9.2" } }, "packages/tm-core": { @@ -32169,31 +27061,460 @@ "license": "MIT", "dependencies": { "@supabase/supabase-js": "^2.57.4", - "zod": "^3.23.8" + "zod": "^4.1.11" }, "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@tm/build-config": "*", "@types/node": "^22.10.5", - "@vitest/coverage-v8": "^2.0.5", - "dotenv-mono": "^1.5.1", - "ts-node": "^10.9.2", - "tsup": "^8.5.0", - "typescript": "^5.7.3", - "vitest": "^2.1.8" - }, - "engines": { - "node": ">=18.0.0" + "@vitest/coverage-v8": "^3.2.4", + "typescript": "^5.9.2", + "vitest": "^3.2.4" } }, - "packages/tm-core/node_modules/@types/node": { - "version": "20.19.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.16.tgz", - "integrity": "sha512-VS6TTONVdgwJwtJr7U+ghEjpfmQdqehLLpg/iMYGOd1+ilaFjdBJwFuPggJ4EAYPDCzWfDUHoIxyVnu+tOWVuQ==", + "packages/tm-core/node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "packages/tm-core/node_modules/@vitest/coverage-v8": { + "version": "3.2.4", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.2.4", + "vitest": "3.2.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "packages/tm-core/node_modules/@vitest/expect": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/@vitest/mocker": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "packages/tm-core/node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/@vitest/runner": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/@vitest/snapshot": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/@vitest/spy": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/@vitest/utils": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "packages/tm-core/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/tm-core/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "packages/tm-core/node_modules/test-exclude": { + "version": "7.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "packages/tm-core/node_modules/tinyexec": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "packages/tm-core/node_modules/tinyrainbow": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/tm-core/node_modules/tinyspy": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/tm-core/node_modules/vite-node": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "packages/tm-core/node_modules/vite-node/node_modules/vite": { + "version": "7.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "packages/tm-core/node_modules/vitest": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@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", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "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", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "packages/tm-core/node_modules/vitest/node_modules/vite": { + "version": "7.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } } } diff --git a/package.json b/package.json index 95045826..ad5866f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "task-master-ai", - "version": "0.27.3", + "version": "0.28.0-rc.2", "description": "A task management system for ambitious AI-driven development that doesn't overwhelm and confuse Cursor.", "main": "index.js", "type": "module", @@ -17,7 +17,7 @@ "turbo:build": "turbo build", "turbo:typecheck": "turbo typecheck", "build:build-config": "npm run build -w @tm/build-config", - "test": "node --experimental-vm-modules node_modules/.bin/jest", + "test": "cross-env NODE_ENV=test node --experimental-vm-modules node_modules/.bin/jest", "test:unit": "node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=unit", "test:integration": "node --experimental-vm-modules node_modules/.bin/jest --testPathPattern=integration", "test:fails": "node --experimental-vm-modules node_modules/.bin/jest --onlyFailures", @@ -52,23 +52,27 @@ "author": "Eyal Toledano", "license": "MIT WITH Commons-Clause", "dependencies": { - "@ai-sdk/amazon-bedrock": "^2.2.9", - "@ai-sdk/anthropic": "^1.2.10", - "@ai-sdk/azure": "^1.3.17", - "@ai-sdk/google": "^1.2.13", - "@ai-sdk/google-vertex": "^2.2.23", - "@ai-sdk/groq": "^1.2.9", - "@ai-sdk/mistral": "^1.2.7", - "@ai-sdk/openai": "^1.3.20", - "@ai-sdk/perplexity": "^1.1.7", - "@ai-sdk/xai": "^1.2.15", - "@anthropic-ai/sdk": "^0.39.0", - "@aws-sdk/credential-providers": "^3.817.0", + "@ai-sdk/amazon-bedrock": "^3.0.23", + "@ai-sdk/anthropic": "^2.0.18", + "@ai-sdk/azure": "^2.0.34", + "@ai-sdk/google": "^2.0.16", + "@ai-sdk/google-vertex": "^3.0.29", + "@ai-sdk/groq": "^2.0.21", + "@ai-sdk/mistral": "^2.0.16", + "@ai-sdk/openai": "^2.0.34", + "@ai-sdk/perplexity": "^2.0.10", + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.10", + "@ai-sdk/xai": "^2.0.22", + "@aws-sdk/credential-providers": "^3.895.0", "@inquirer/search": "^3.0.15", - "@openrouter/ai-sdk-provider": "^0.4.5", + "@openrouter/ai-sdk-provider": "^1.2.0", "@streamparser/json": "^0.0.22", "@supabase/supabase-js": "^2.57.4", - "ai": "^4.3.10", + "ai": "^5.0.51", + "ai-sdk-provider-claude-code": "^1.1.4", + "ai-sdk-provider-codex-cli": "^0.3.0", + "ai-sdk-provider-gemini-cli": "^1.1.1", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "boxen": "^8.0.1", @@ -78,7 +82,7 @@ "cli-table3": "^0.6.5", "commander": "^12.1.0", "cors": "^2.8.5", - "dotenv": "^16.3.1", + "dotenv": "^16.6.1", "express": "^4.21.2", "fastmcp": "^3.5.0", "figlet": "^1.8.0", @@ -93,17 +97,14 @@ "lru-cache": "^10.2.0", "marked": "^15.0.12", "marked-terminal": "^7.3.0", - "ollama-ai-provider": "^1.2.0", - "openai": "^4.89.0", + "ollama-ai-provider-v2": "^1.3.1", "ora": "^8.2.0", "uuid": "^11.1.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.5" + "zod": "^4.1.11" }, "optionalDependencies": { "@anthropic-ai/claude-code": "^1.0.88", - "@biomejs/cli-linux-x64": "^1.9.4", - "ai-sdk-provider-gemini-cli": "^0.1.3" + "@biomejs/cli-linux-x64": "^1.9.4" }, "engines": { "node": ">=18.0.0" @@ -127,12 +128,12 @@ "@changesets/changelog-github": "^0.5.1", "@changesets/cli": "^2.28.1", "@manypkg/cli": "^0.25.1", + "@tm/ai-sdk-provider-grok-cli": "*", "@tm/cli": "*", "@types/jest": "^29.5.14", "@types/marked-terminal": "^6.1.1", "concurrently": "^9.2.1", "cross-env": "^10.0.0", - "dotenv-mono": "^1.5.1", "execa": "^8.0.1", "jest": "^29.7.0", "jest-environment-node": "^29.7.0", @@ -142,7 +143,7 @@ "ts-jest": "^29.4.2", "tsdown": "^0.15.2", "tsx": "^4.20.4", - "turbo": "^2.5.6", - "typescript": "^5.7.3" + "turbo": "2.5.6", + "typescript": "^5.9.2" } } diff --git a/packages/ai-sdk-provider-grok-cli/README.md b/packages/ai-sdk-provider-grok-cli/README.md new file mode 100644 index 00000000..72da0300 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/README.md @@ -0,0 +1,165 @@ +# AI SDK Provider for Grok CLI + +A provider for the [AI SDK](https://sdk.vercel.ai) that integrates with [Grok CLI](https://docs.x.ai/api) for accessing xAI's Grok language models. + +## Features + +- āœ… **AI SDK v5 Compatible** - Full support for the latest AI SDK interfaces +- āœ… **Streaming & Non-streaming** - Both generation modes supported +- āœ… **Error Handling** - Comprehensive error handling with retry logic +- āœ… **Type Safety** - Full TypeScript support with proper type definitions +- āœ… **JSON Mode** - Automatic JSON extraction from responses +- āœ… **Abort Signals** - Proper cancellation support + +## Installation + +```bash +npm install @tm/ai-sdk-provider-grok-cli +# or +yarn add @tm/ai-sdk-provider-grok-cli +``` + +## Prerequisites + +1. Install the Grok CLI: + + ```bash + npm install -g grok-cli + # or follow xAI's installation instructions + ``` + +2. Set up authentication: + + ```bash + export GROK_CLI_API_KEY="your-api-key" + # or configure via grok CLI: grok config set api-key your-key + ``` + +## Usage + +### Basic Usage + +```typescript +import { grokCli } from '@tm/ai-sdk-provider-grok-cli'; +import { generateText } from 'ai'; + +const result = await generateText({ + model: grokCli('grok-3-latest'), + prompt: 'Write a haiku about TypeScript' +}); + +console.log(result.text); +``` + +### Streaming + +```typescript +import { grokCli } from '@tm/ai-sdk-provider-grok-cli'; +import { streamText } from 'ai'; + +const { textStream } = await streamText({ + model: grokCli('grok-4-latest'), + prompt: 'Explain quantum computing' +}); + +for await (const delta of textStream) { + process.stdout.write(delta); +} +``` + +### JSON Mode + +```typescript +import { grokCli } from '@tm/ai-sdk-provider-grok-cli'; +import { generateObject } from 'ai'; +import { z } from 'zod'; + +const result = await generateObject({ + model: grokCli('grok-3-latest'), + schema: z.object({ + name: z.string(), + age: z.number(), + hobbies: z.array(z.string()) + }), + prompt: 'Generate a person profile' +}); + +console.log(result.object); +``` + +## Supported Models + +- `grok-3-latest` - Grok 3 (latest version) +- `grok-4-latest` - Grok 4 (latest version) +- `grok-4` - Grok 4 (stable) +- Custom model strings supported + +## Configuration + +### Provider Settings + +```typescript +import { createGrokCli } from '@tm/ai-sdk-provider-grok-cli'; + +const grok = createGrokCli({ + apiKey: 'your-api-key', // Optional if set via env/CLI + timeout: 120000, // 2 minutes default + workingDirectory: '/path/to/project', // Optional + baseURL: 'https://api.x.ai' // Optional +}); +``` + +### Model Settings + +```typescript +const model = grok('grok-4-latest', { + timeout: 300000, // 5 minutes for grok-4 + // Other CLI-specific settings +}); +``` + +## Error Handling + +The provider includes comprehensive error handling: + +```typescript +import { + isAuthenticationError, + isTimeoutError, + isInstallationError +} from '@tm/ai-sdk-provider-grok-cli'; + +try { + const result = await generateText({ + model: grokCli('grok-4-latest'), + prompt: 'Hello!' + }); +} catch (error) { + if (isAuthenticationError(error)) { + console.error('Authentication failed:', error.message); + } else if (isTimeoutError(error)) { + console.error('Request timed out:', error.message); + } else if (isInstallationError(error)) { + console.error('Grok CLI not installed or not found in PATH'); + } +} +``` + +## Development + +```bash +# Install dependencies +npm install + +# Start development mode (keep running during development) +npm run dev + +# Type check +npm run typecheck + +# Run tests (requires build first) +NODE_ENV=production npm run build +npm test +``` + +**Important**: Always run `npm run dev` and keep it running during development. This ensures proper compilation and hot-reloading of TypeScript files. diff --git a/packages/ai-sdk-provider-grok-cli/package.json b/packages/ai-sdk-provider-grok-cli/package.json new file mode 100644 index 00000000..8becbefe --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/package.json @@ -0,0 +1,35 @@ +{ + "name": "@tm/ai-sdk-provider-grok-cli", + "private": true, + "description": "AI SDK provider for Grok CLI integration", + "type": "module", + "types": "./src/index.ts", + "main": "./dist/index.js", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "test": "vitest run", + "test:watch": "vitest", + "test:ui": "vitest --ui", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@ai-sdk/provider": "^2.0.0", + "@ai-sdk/provider-utils": "^3.0.10", + "jsonc-parser": "^3.3.1" + }, + "devDependencies": { + "@types/node": "^22.18.6", + "typescript": "^5.9.2", + "vitest": "^3.2.4" + }, + "engines": { + "node": ">=18" + }, + "keywords": ["ai", "grok", "x.ai", "cli", "language-model", "provider"], + "files": ["dist/**/*", "README.md"], + "publishConfig": { + "access": "public" + } +} diff --git a/packages/ai-sdk-provider-grok-cli/src/errors.test.ts b/packages/ai-sdk-provider-grok-cli/src/errors.test.ts new file mode 100644 index 00000000..52cdedef --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/errors.test.ts @@ -0,0 +1,188 @@ +/** + * Tests for error handling utilities + */ + +import { APICallError, LoadAPIKeyError } from '@ai-sdk/provider'; +import { describe, expect, it } from 'vitest'; +import { + createAPICallError, + createAuthenticationError, + createInstallationError, + createTimeoutError, + getErrorMetadata, + isAuthenticationError, + isInstallationError, + isTimeoutError +} from './errors.js'; + +describe('createAPICallError', () => { + it('should create APICallError with metadata', () => { + const error = createAPICallError({ + message: 'Test error', + code: 'TEST_ERROR', + exitCode: 1, + stderr: 'Error output', + stdout: 'Success output', + promptExcerpt: 'Test prompt', + isRetryable: true + }); + + expect(error).toBeInstanceOf(APICallError); + expect(error.message).toBe('Test error'); + expect(error.isRetryable).toBe(true); + expect(error.url).toBe('grok-cli://command'); + expect(error.data).toEqual({ + code: 'TEST_ERROR', + exitCode: 1, + stderr: 'Error output', + stdout: 'Success output', + promptExcerpt: 'Test prompt' + }); + }); + + it('should create APICallError with minimal parameters', () => { + const error = createAPICallError({ + message: 'Simple error' + }); + + expect(error).toBeInstanceOf(APICallError); + expect(error.message).toBe('Simple error'); + expect(error.isRetryable).toBe(false); + }); +}); + +describe('createAuthenticationError', () => { + it('should create LoadAPIKeyError with custom message', () => { + const error = createAuthenticationError({ + message: 'Custom auth error' + }); + + expect(error).toBeInstanceOf(LoadAPIKeyError); + expect(error.message).toBe('Custom auth error'); + }); + + it('should create LoadAPIKeyError with default message', () => { + const error = createAuthenticationError({}); + + expect(error).toBeInstanceOf(LoadAPIKeyError); + expect(error.message).toContain('Authentication failed'); + }); +}); + +describe('createTimeoutError', () => { + it('should create APICallError for timeout', () => { + const error = createTimeoutError({ + message: 'Operation timed out', + timeoutMs: 5000, + promptExcerpt: 'Test prompt' + }); + + expect(error).toBeInstanceOf(APICallError); + expect(error.message).toBe('Operation timed out'); + expect(error.isRetryable).toBe(true); + expect(error.data).toEqual({ + code: 'TIMEOUT', + promptExcerpt: 'Test prompt', + timeoutMs: 5000 + }); + }); +}); + +describe('createInstallationError', () => { + it('should create APICallError for installation issues', () => { + const error = createInstallationError({ + message: 'CLI not found' + }); + + expect(error).toBeInstanceOf(APICallError); + expect(error.message).toBe('CLI not found'); + expect(error.isRetryable).toBe(false); + expect(error.url).toBe('grok-cli://installation'); + }); + + it('should create APICallError with default message', () => { + const error = createInstallationError({}); + + expect(error).toBeInstanceOf(APICallError); + expect(error.message).toContain('Grok CLI is not installed'); + }); +}); + +describe('isAuthenticationError', () => { + it('should return true for LoadAPIKeyError', () => { + const error = new LoadAPIKeyError({ message: 'Auth failed' }); + expect(isAuthenticationError(error)).toBe(true); + }); + + it('should return true for APICallError with 401 exit code', () => { + const error = new APICallError({ + message: 'Unauthorized', + data: { exitCode: 401 } + }); + expect(isAuthenticationError(error)).toBe(true); + }); + + it('should return false for other errors', () => { + const error = new Error('Generic error'); + expect(isAuthenticationError(error)).toBe(false); + }); +}); + +describe('isTimeoutError', () => { + it('should return true for timeout APICallError', () => { + const error = new APICallError({ + message: 'Timeout', + data: { code: 'TIMEOUT' } + }); + expect(isTimeoutError(error)).toBe(true); + }); + + it('should return false for other errors', () => { + const error = new APICallError({ message: 'Other error' }); + expect(isTimeoutError(error)).toBe(false); + }); +}); + +describe('isInstallationError', () => { + it('should return true for installation APICallError', () => { + const error = new APICallError({ + message: 'Not installed', + url: 'grok-cli://installation' + }); + expect(isInstallationError(error)).toBe(true); + }); + + it('should return false for other errors', () => { + const error = new APICallError({ message: 'Other error' }); + expect(isInstallationError(error)).toBe(false); + }); +}); + +describe('getErrorMetadata', () => { + it('should return metadata from APICallError', () => { + const metadata = { + code: 'TEST_ERROR', + exitCode: 1, + stderr: 'Error output' + }; + const error = new APICallError({ + message: 'Test error', + data: metadata + }); + + const result = getErrorMetadata(error); + expect(result).toEqual(metadata); + }); + + it('should return undefined for errors without metadata', () => { + const error = new Error('Generic error'); + const result = getErrorMetadata(error); + expect(result).toBeUndefined(); + }); + + it('should return undefined for APICallError without data', () => { + const error = new APICallError({ message: 'Test error' }); + const result = getErrorMetadata(error); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/ai-sdk-provider-grok-cli/src/errors.ts b/packages/ai-sdk-provider-grok-cli/src/errors.ts new file mode 100644 index 00000000..ef08a3a8 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/errors.ts @@ -0,0 +1,187 @@ +/** + * Error handling utilities for Grok CLI provider + */ + +import { APICallError, LoadAPIKeyError } from '@ai-sdk/provider'; +import type { GrokCliErrorMetadata } from './types.js'; + +/** + * Parameters for creating API call errors + */ +interface CreateAPICallErrorParams { + /** Error message */ + message: string; + /** Error code */ + code?: string; + /** Process exit code */ + exitCode?: number; + /** Standard error output */ + stderr?: string; + /** Standard output */ + stdout?: string; + /** Excerpt of the prompt */ + promptExcerpt?: string; + /** Whether the error is retryable */ + isRetryable?: boolean; +} + +/** + * Parameters for creating authentication errors + */ +interface CreateAuthenticationErrorParams { + /** Error message */ + message?: string; +} + +/** + * Parameters for creating timeout errors + */ +interface CreateTimeoutErrorParams { + /** Error message */ + message: string; + /** Excerpt of the prompt */ + promptExcerpt?: string; + /** Timeout in milliseconds */ + timeoutMs: number; +} + +/** + * Parameters for creating installation errors + */ +interface CreateInstallationErrorParams { + /** Error message */ + message?: string; +} + +/** + * Create an API call error with Grok CLI specific metadata + */ +export function createAPICallError({ + message, + code, + exitCode, + stderr, + stdout, + promptExcerpt, + isRetryable = false +}: CreateAPICallErrorParams): APICallError { + const metadata: GrokCliErrorMetadata = { + code, + exitCode, + stderr, + stdout, + promptExcerpt + }; + + return new APICallError({ + message, + isRetryable, + url: 'grok-cli://command', + requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, + data: metadata + }); +} + +/** + * Create an authentication error + */ +export function createAuthenticationError({ + message +}: CreateAuthenticationErrorParams): LoadAPIKeyError { + return new LoadAPIKeyError({ + message: + message || + 'Authentication failed. Please ensure Grok CLI is properly configured with API key.' + }); +} + +/** + * Create a timeout error + */ +export function createTimeoutError({ + message, + promptExcerpt, + timeoutMs +}: CreateTimeoutErrorParams): APICallError { + const metadata: GrokCliErrorMetadata & { timeoutMs: number } = { + code: 'TIMEOUT', + promptExcerpt, + timeoutMs + }; + + return new APICallError({ + message, + isRetryable: true, + url: 'grok-cli://command', + requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, + data: metadata + }); +} + +/** + * Create a CLI installation error + */ +export function createInstallationError({ + message +}: CreateInstallationErrorParams): APICallError { + return new APICallError({ + message: + message || + 'Grok CLI is not installed or not found in PATH. Please install with: npm install -g @vibe-kit/grok-cli', + isRetryable: false, + url: 'grok-cli://installation', + requestBodyValues: undefined + }); +} + +/** + * Check if an error is an authentication error + */ +export function isAuthenticationError( + error: unknown +): error is LoadAPIKeyError { + if (error instanceof LoadAPIKeyError) return true; + if (error instanceof APICallError) { + const metadata = error.data as GrokCliErrorMetadata | undefined; + if (!metadata) return false; + return ( + metadata.exitCode === 401 || + metadata.code === 'AUTHENTICATION_ERROR' || + metadata.code === 'UNAUTHORIZED' + ); + } + return false; +} + +/** + * Check if an error is a timeout error + */ +export function isTimeoutError(error: unknown): error is APICallError { + if ( + error instanceof APICallError && + (error.data as GrokCliErrorMetadata)?.code === 'TIMEOUT' + ) + return true; + return false; +} + +/** + * Check if an error is an installation error + */ +export function isInstallationError(error: unknown): error is APICallError { + if (error instanceof APICallError && error.url === 'grok-cli://installation') + return true; + return false; +} + +/** + * Get error metadata from an error + */ +export function getErrorMetadata( + error: unknown +): GrokCliErrorMetadata | undefined { + if (error instanceof APICallError && error.data) { + return error.data as GrokCliErrorMetadata; + } + return undefined; +} diff --git a/src/ai-providers/custom-sdk/grok-cli/language-model.js b/packages/ai-sdk-provider-grok-cli/src/grok-cli-language-model.ts similarity index 54% rename from src/ai-providers/custom-sdk/grok-cli/language-model.js rename to packages/ai-sdk-provider-grok-cli/src/grok-cli-language-model.ts index cf0eddac..addcb9d3 100644 --- a/src/ai-providers/custom-sdk/grok-cli/language-model.js +++ b/packages/ai-sdk-provider-grok-cli/src/grok-cli-language-model.ts @@ -1,53 +1,51 @@ /** - * @fileoverview Grok CLI Language Model implementation + * Grok CLI Language Model implementation for AI SDK v5 */ +import { spawn } from 'child_process'; +import { promises as fs } from 'fs'; +import { homedir } from 'os'; +import { join } from 'path'; +import type { + LanguageModelV2, + LanguageModelV2CallOptions, + LanguageModelV2CallWarning +} from '@ai-sdk/provider'; import { NoSuchModelError } from '@ai-sdk/provider'; import { generateId } from '@ai-sdk/provider-utils'; -import { - createPromptFromMessages, - convertFromGrokCliResponse, - escapeShellArg -} from './message-converter.js'; -import { extractJson } from './json-extractor.js'; + import { createAPICallError, createAuthenticationError, createInstallationError, createTimeoutError } from './errors.js'; -import { spawn } from 'child_process'; -import { promises as fs } from 'fs'; -import { join } from 'path'; -import { homedir } from 'os'; +import { extractJson } from './json-extractor.js'; +import { + convertFromGrokCliResponse, + createPromptFromMessages, + escapeShellArg +} from './message-converter.js'; +import type { + GrokCliLanguageModelOptions, + GrokCliModelId, + GrokCliSettings +} from './types.js'; /** - * @typedef {import('./types.js').GrokCliSettings} GrokCliSettings - * @typedef {import('./types.js').GrokCliModelId} GrokCliModelId + * Grok CLI Language Model implementation for AI SDK v5 */ +export class GrokCliLanguageModel implements LanguageModelV2 { + readonly specificationVersion = 'v2' as const; + readonly defaultObjectGenerationMode = 'json' as const; + readonly supportsImageUrls = false; + readonly supportsStructuredOutputs = false; + readonly supportedUrls: Record = {}; -/** - * @typedef {Object} GrokCliLanguageModelOptions - * @property {GrokCliModelId} id - Model ID - * @property {GrokCliSettings} [settings] - Model settings - */ + readonly modelId: GrokCliModelId; + readonly settings: GrokCliSettings; -export class GrokCliLanguageModel { - specificationVersion = 'v1'; - defaultObjectGenerationMode = 'json'; - supportsImageUrls = false; - supportsStructuredOutputs = false; - - /** @type {GrokCliModelId} */ - modelId; - - /** @type {GrokCliSettings} */ - settings; - - /** - * @param {GrokCliLanguageModelOptions} options - */ - constructor(options) { + constructor(options: GrokCliLanguageModelOptions) { this.modelId = options.id; this.settings = options.settings ?? {}; @@ -64,15 +62,14 @@ export class GrokCliLanguageModel { } } - get provider() { + get provider(): string { return 'grok-cli'; } /** * Check if Grok CLI is installed and available - * @returns {Promise} */ - async checkGrokCliInstallation() { + private async checkGrokCliInstallation(): Promise { return new Promise((resolve) => { const child = spawn('grok', ['--version'], { stdio: 'pipe' @@ -85,9 +82,8 @@ export class GrokCliLanguageModel { /** * Get API key from settings or environment - * @returns {Promise} */ - async getApiKey() { + private async getApiKey(): Promise { // Check settings first if (this.settings.apiKey) { return this.settings.apiKey; @@ -111,22 +107,32 @@ export class GrokCliLanguageModel { /** * Execute Grok CLI command - * @param {Array} args - Command line arguments - * @param {Object} options - Execution options - * @returns {Promise<{stdout: string, stderr: string, exitCode: number}>} */ - async executeGrokCli(args, options = {}) { - const timeout = options.timeout || this.settings.timeout || 120000; // 2 minutes default + private async executeGrokCli( + args: string[], + options: { timeout?: number; apiKey?: string } = {} + ): Promise<{ stdout: string; stderr: string; exitCode: number }> { + // Default timeout based on model type + let defaultTimeout = 120000; // 2 minutes default + if (this.modelId.includes('grok-4')) { + defaultTimeout = 600000; // 10 minutes for grok-4 models (they seem to hang during setup) + } + + const timeout = options.timeout ?? this.settings.timeout ?? defaultTimeout; return new Promise((resolve, reject) => { const child = spawn('grok', args, { stdio: 'pipe', - cwd: this.settings.workingDirectory || process.cwd() + cwd: this.settings.workingDirectory || process.cwd(), + env: + options.apiKey === undefined + ? process.env + : { ...process.env, GROK_CLI_API_KEY: options.apiKey } }); let stdout = ''; let stderr = ''; - let timeoutId; + let timeoutId: NodeJS.Timeout | undefined; // Set up timeout if (timeout > 0) { @@ -142,24 +148,26 @@ export class GrokCliLanguageModel { }, timeout); } - child.stdout.on('data', (data) => { - stdout += data.toString(); + child.stdout?.on('data', (data) => { + const chunk = data.toString(); + stdout += chunk; }); - child.stderr.on('data', (data) => { - stderr += data.toString(); + child.stderr?.on('data', (data) => { + const chunk = data.toString(); + stderr += chunk; }); child.on('error', (error) => { if (timeoutId) clearTimeout(timeoutId); - if (error.code === 'ENOENT') { + if ((error as any).code === 'ENOENT') { reject(createInstallationError({})); } else { reject( createAPICallError({ message: `Failed to execute Grok CLI: ${error.message}`, - code: error.code, + code: (error as any).code, stderr: error.message, isRetryable: false }) @@ -180,15 +188,18 @@ export class GrokCliLanguageModel { } /** - * Generate unsupported parameter warnings - * @param {Object} options - Generation options - * @returns {Array} Warnings array + * Generate comprehensive warnings for unsupported parameters and validation issues */ - generateUnsupportedWarnings(options) { - const warnings = []; - const unsupportedParams = []; + private generateAllWarnings( + options: LanguageModelV2CallOptions, + prompt: string + ): LanguageModelV2CallWarning[] { + const warnings: LanguageModelV2CallWarning[] = []; + const unsupportedParams: string[] = []; - // Grok CLI supports some parameters but not all AI SDK parameters + // Check for unsupported parameters + if (options.temperature !== undefined) + unsupportedParams.push('temperature'); if (options.topP !== undefined) unsupportedParams.push('topP'); if (options.topK !== undefined) unsupportedParams.push('topK'); if (options.presencePenalty !== undefined) @@ -200,24 +211,51 @@ export class GrokCliLanguageModel { if (options.seed !== undefined) unsupportedParams.push('seed'); if (unsupportedParams.length > 0) { + // Add a warning for each unsupported parameter for (const param of unsupportedParams) { warnings.push({ type: 'unsupported-setting', - setting: param, + setting: param as + | 'temperature' + | 'topP' + | 'topK' + | 'presencePenalty' + | 'frequencyPenalty' + | 'stopSequences' + | 'seed', details: `Grok CLI does not support the ${param} parameter. It will be ignored.` }); } } + // Add model validation warnings if needed + if (!this.modelId || this.modelId.trim() === '') { + warnings.push({ + type: 'other', + message: 'Model ID is empty or invalid' + }); + } + + // Add prompt validation + if (!prompt || prompt.trim() === '') { + warnings.push({ + type: 'other', + message: 'Prompt is empty' + }); + } + return warnings; } /** * Generate text using Grok CLI - * @param {Object} options - Generation options - * @returns {Promise} */ - async doGenerate(options) { + async doGenerate(options: LanguageModelV2CallOptions) { + // Handle abort signal early + if (options.abortSignal?.aborted) { + throw options.abortSignal.reason || new Error('Request aborted'); + } + // Check CLI installation const isInstalled = await this.checkGrokCliInstallation(); if (!isInstalled) { @@ -234,7 +272,7 @@ export class GrokCliLanguageModel { } const prompt = createPromptFromMessages(options.prompt); - const warnings = this.generateUnsupportedWarnings(options); + const warnings = this.generateAllWarnings(options, prompt); // Build command arguments const args = ['--prompt', escapeShellArg(prompt)]; @@ -244,10 +282,11 @@ export class GrokCliLanguageModel { args.push('--model', this.modelId); } - // Add API key if available - if (apiKey) { - args.push('--api-key', apiKey); - } + // Skip API key parameter if it's likely already configured to avoid hanging + // The CLI seems to hang when trying to save API keys for grok-4 models + // if (apiKey) { + // args.push('--api-key', apiKey); + // } // Add base URL if provided in settings if (this.settings.baseURL) { @@ -260,9 +299,7 @@ export class GrokCliLanguageModel { } try { - const result = await this.executeGrokCli(args, { - timeout: this.settings.timeout - }); + const result = await this.executeGrokCli(args, { apiKey }); if (result.exitCode !== 0) { // Handle authentication errors @@ -290,19 +327,37 @@ export class GrokCliLanguageModel { let text = response.text || ''; // Extract JSON if in object-json mode - if (options.mode?.type === 'object-json' && text) { + const isObjectJson = ( + o: unknown + ): o is { mode: { type: 'object-json' } } => + !!o && + typeof o === 'object' && + 'mode' in o && + (o as any).mode?.type === 'object-json'; + if (isObjectJson(options) && text) { text = extractJson(text); } return { - text: text || undefined, - usage: response.usage || { promptTokens: 0, completionTokens: 0 }, - finishReason: 'stop', + content: [ + { + type: 'text' as const, + text: text || '' + } + ], + usage: response.usage + ? { + inputTokens: response.usage.promptTokens, + outputTokens: response.usage.completionTokens, + totalTokens: response.usage.totalTokens + } + : { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + finishReason: 'stop' as const, rawCall: { rawPrompt: prompt, rawSettings: args }, - warnings: warnings.length > 0 ? warnings : undefined, + warnings: warnings, response: { id: generateId(), timestamp: new Date(), @@ -314,20 +369,23 @@ export class GrokCliLanguageModel { providerMetadata: { 'grok-cli': { exitCode: result.exitCode, - stderr: result.stderr || undefined + ...(result.stderr && { stderr: result.stderr }) } } }; } catch (error) { // Re-throw our custom errors - if (error.name === 'APICallError' || error.name === 'LoadAPIKeyError') { + if ( + (error as any).name === 'APICallError' || + (error as any).name === 'LoadAPIKeyError' + ) { throw error; } // Wrap other errors throw createAPICallError({ - message: `Grok CLI execution failed: ${error.message}`, - code: error.code, + message: `Grok CLI execution failed: ${(error as Error).message}`, + code: (error as any).code, promptExcerpt: prompt.substring(0, 200), isRetryable: false }); @@ -338,15 +396,39 @@ export class GrokCliLanguageModel { * Stream text using Grok CLI * Note: Grok CLI doesn't natively support streaming, so this simulates streaming * by generating the full response and then streaming it in chunks - * @param {Object} options - Stream options - * @returns {Promise} */ - async doStream(options) { - const warnings = this.generateUnsupportedWarnings(options); + async doStream(options: LanguageModelV2CallOptions) { + const prompt = createPromptFromMessages(options.prompt); + const warnings = this.generateAllWarnings(options, prompt); const stream = new ReadableStream({ start: async (controller) => { + let abortListener: (() => void) | undefined; + try { + // Handle abort signal + if (options.abortSignal?.aborted) { + throw options.abortSignal.reason || new Error('Request aborted'); + } + + // Set up abort listener + if (options.abortSignal) { + abortListener = () => { + controller.enqueue({ + type: 'error', + error: + options.abortSignal?.reason || new Error('Request aborted') + }); + controller.close(); + }; + options.abortSignal.addEventListener('abort', abortListener, { + once: true + }); + } + + // Emit stream-start with warnings + controller.enqueue({ type: 'stream-start', warnings }); + // Generate the full response first const result = await this.doGenerate(options); @@ -359,20 +441,48 @@ export class GrokCliLanguageModel { }); // Simulate streaming by chunking the text - const text = result.text || ''; + const content = result.content || []; + const text = + content.length > 0 && content[0].type === 'text' + ? content[0].text + : ''; const chunkSize = 50; // Characters per chunk + let textPartId: string | undefined; + + // Emit text-start if we have content + if (text.length > 0) { + textPartId = generateId(); + controller.enqueue({ + type: 'text-start', + id: textPartId + }); + } for (let i = 0; i < text.length; i += chunkSize) { + // Check for abort during streaming + if (options.abortSignal?.aborted) { + throw options.abortSignal.reason || new Error('Request aborted'); + } + const chunk = text.slice(i, i + chunkSize); controller.enqueue({ type: 'text-delta', - textDelta: chunk + id: textPartId!, + delta: chunk }); // Add small delay to simulate streaming await new Promise((resolve) => setTimeout(resolve, 20)); } + // Close text part if opened + if (textPartId) { + controller.enqueue({ + type: 'text-end', + id: textPartId + }); + } + // Emit finish event controller.enqueue({ type: 'finish', @@ -388,19 +498,22 @@ export class GrokCliLanguageModel { error }); controller.close(); + } finally { + // Clean up abort listener + if (options.abortSignal && abortListener) { + options.abortSignal.removeEventListener('abort', abortListener); + } } + }, + cancel: () => { + // Clean up if stream is cancelled } }); return { stream, - rawCall: { - rawPrompt: createPromptFromMessages(options.prompt), - rawSettings: {} - }, - warnings: warnings.length > 0 ? warnings : undefined, request: { - body: createPromptFromMessages(options.prompt) + body: prompt } }; } diff --git a/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.test.ts b/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.test.ts new file mode 100644 index 00000000..fe3cc2f8 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.test.ts @@ -0,0 +1,121 @@ +/** + * Tests for Grok CLI provider + */ + +import { NoSuchModelError } from '@ai-sdk/provider'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { GrokCliLanguageModel } from './grok-cli-language-model.js'; +import { createGrokCli, grokCli } from './grok-cli-provider.js'; + +// Mock the GrokCliLanguageModel +vi.mock('./grok-cli-language-model.js', () => ({ + GrokCliLanguageModel: vi.fn().mockImplementation((options) => ({ + modelId: options.id, + settings: options.settings, + provider: 'grok-cli' + })) +})); + +describe('createGrokCli', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('should create a provider with default settings', () => { + const provider = createGrokCli(); + expect(typeof provider).toBe('function'); + expect(typeof provider.languageModel).toBe('function'); + expect(typeof provider.chat).toBe('function'); + expect(typeof provider.textEmbeddingModel).toBe('function'); + expect(typeof provider.imageModel).toBe('function'); + }); + + it('should create a provider with custom default settings', () => { + const defaultSettings = { + timeout: 5000, + workingDirectory: '/custom/path' + }; + const provider = createGrokCli({ defaultSettings }); + + const model = provider('grok-2-mini'); + + expect(GrokCliLanguageModel).toHaveBeenCalledWith({ + id: 'grok-2-mini', + settings: defaultSettings + }); + }); + + it('should create language models with merged settings', () => { + const defaultSettings = { timeout: 5000 }; + const provider = createGrokCli({ defaultSettings }); + + const modelSettings = { apiKey: 'test-key' }; + const model = provider('grok-2', modelSettings); + + expect(GrokCliLanguageModel).toHaveBeenCalledWith({ + id: 'grok-2', + settings: { timeout: 5000, apiKey: 'test-key' } + }); + }); + + it('should create models via languageModel method', () => { + const provider = createGrokCli(); + const model = provider.languageModel('grok-2-mini', { timeout: 1000 }); + + expect(GrokCliLanguageModel).toHaveBeenCalledWith({ + id: 'grok-2-mini', + settings: { timeout: 1000 } + }); + }); + + it('should create models via chat method (alias)', () => { + const provider = createGrokCli(); + const model = provider.chat('grok-2'); + + expect(GrokCliLanguageModel).toHaveBeenCalledWith({ + id: 'grok-2', + settings: {} + }); + }); + + it('should throw error when called with new keyword', () => { + const provider = createGrokCli(); + expect(() => { + // @ts-expect-error - intentionally testing invalid usage + new provider('grok-2'); + }).toThrow( + 'The Grok CLI model function cannot be called with the new keyword.' + ); + }); + + it('should throw NoSuchModelError for textEmbeddingModel', () => { + const provider = createGrokCli(); + expect(() => { + provider.textEmbeddingModel('test-model'); + }).toThrow(NoSuchModelError); + }); + + it('should throw NoSuchModelError for imageModel', () => { + const provider = createGrokCli(); + expect(() => { + provider.imageModel('test-model'); + }).toThrow(NoSuchModelError); + }); +}); + +describe('default grokCli provider', () => { + it('should be a pre-configured provider instance', () => { + expect(typeof grokCli).toBe('function'); + expect(typeof grokCli.languageModel).toBe('function'); + expect(typeof grokCli.chat).toBe('function'); + }); + + it('should create models with default configuration', () => { + const model = grokCli('grok-2-mini'); + + expect(GrokCliLanguageModel).toHaveBeenCalledWith({ + id: 'grok-2-mini', + settings: {} + }); + }); +}); diff --git a/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.ts b/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.ts new file mode 100644 index 00000000..53de8a82 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/grok-cli-provider.ts @@ -0,0 +1,108 @@ +/** + * Grok CLI provider implementation for AI SDK v5 + */ + +import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider'; +import { NoSuchModelError } from '@ai-sdk/provider'; +import { GrokCliLanguageModel } from './grok-cli-language-model.js'; +import type { GrokCliModelId, GrokCliSettings } from './types.js'; + +/** + * Grok CLI provider interface that extends the AI SDK's ProviderV2 + */ +export interface GrokCliProvider extends ProviderV2 { + /** + * Creates a language model instance for the specified model ID. + * This is a shorthand for calling `languageModel()`. + */ + (modelId: GrokCliModelId, settings?: GrokCliSettings): LanguageModelV2; + + /** + * Creates a language model instance for text generation. + */ + languageModel( + modelId: GrokCliModelId, + settings?: GrokCliSettings + ): LanguageModelV2; + + /** + * Alias for `languageModel()` to maintain compatibility with AI SDK patterns. + */ + chat(modelId: GrokCliModelId, settings?: GrokCliSettings): LanguageModelV2; + + textEmbeddingModel(modelId: string): never; + imageModel(modelId: string): never; +} + +/** + * Configuration options for creating a Grok CLI provider instance + */ +export interface GrokCliProviderSettings { + /** + * Default settings to use for all models created by this provider. + * Individual model settings will override these defaults. + */ + defaultSettings?: GrokCliSettings; +} + +/** + * Creates a Grok CLI provider instance with the specified configuration. + * The provider can be used to create language models for interacting with Grok models. + */ +export function createGrokCli( + options: GrokCliProviderSettings = {} +): GrokCliProvider { + const createModel = ( + modelId: GrokCliModelId, + settings: GrokCliSettings = {} + ): LanguageModelV2 => { + const mergedSettings = { + ...options.defaultSettings, + ...settings + }; + + return new GrokCliLanguageModel({ + id: modelId, + settings: mergedSettings + }); + }; + + const provider = function ( + modelId: GrokCliModelId, + settings?: GrokCliSettings + ) { + if (new.target) { + throw new Error( + 'The Grok CLI model function cannot be called with the new keyword.' + ); + } + + return createModel(modelId, settings); + }; + + provider.languageModel = createModel; + provider.chat = createModel; // Alias for languageModel + + // Add textEmbeddingModel method that throws NoSuchModelError + provider.textEmbeddingModel = (modelId: string) => { + throw new NoSuchModelError({ + modelId, + modelType: 'textEmbeddingModel' + }); + }; + + provider.imageModel = (modelId: string) => { + throw new NoSuchModelError({ + modelId, + modelType: 'imageModel' + }); + }; + + return provider as GrokCliProvider; +} + +/** + * Default Grok CLI provider instance. + * Pre-configured provider for quick usage without custom settings. + */ +export const grokCli = createGrokCli(); diff --git a/packages/ai-sdk-provider-grok-cli/src/index.ts b/packages/ai-sdk-provider-grok-cli/src/index.ts new file mode 100644 index 00000000..53d45396 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/index.ts @@ -0,0 +1,64 @@ +/** + * Provider exports for creating and configuring Grok CLI instances. + */ + +/** + * Creates a new Grok CLI provider instance and the default provider instance. + */ +export { createGrokCli, grokCli } from './grok-cli-provider.js'; + +/** + * Type definitions for the Grok CLI provider. + */ +export type { + GrokCliProvider, + GrokCliProviderSettings +} from './grok-cli-provider.js'; + +/** + * Language model implementation for Grok CLI. + * This class implements the AI SDK's LanguageModelV2 interface. + */ +export { GrokCliLanguageModel } from './grok-cli-language-model.js'; + +/** + * Type definitions for Grok CLI language models. + */ +export type { + GrokCliModelId, + GrokCliLanguageModelOptions, + GrokCliSettings, + GrokCliMessage, + GrokCliResponse, + GrokCliErrorMetadata +} from './types.js'; + +/** + * Error handling utilities for Grok CLI. + * These functions help create and identify specific error types. + */ +export { + isAuthenticationError, + isTimeoutError, + isInstallationError, + getErrorMetadata, + createAPICallError, + createAuthenticationError, + createTimeoutError, + createInstallationError +} from './errors.js'; + +/** + * Message conversion utilities for Grok CLI communication. + */ +export { + convertToGrokCliMessages, + convertFromGrokCliResponse, + createPromptFromMessages, + escapeShellArg +} from './message-converter.js'; + +/** + * JSON extraction utilities for parsing Grok responses. + */ +export { extractJson } from './json-extractor.js'; diff --git a/packages/ai-sdk-provider-grok-cli/src/json-extractor.test.ts b/packages/ai-sdk-provider-grok-cli/src/json-extractor.test.ts new file mode 100644 index 00000000..ebbc3156 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/json-extractor.test.ts @@ -0,0 +1,81 @@ +/** + * Tests for JSON extraction utilities + */ + +import { describe, expect, it } from 'vitest'; +import { extractJson } from './json-extractor.js'; + +describe('extractJson', () => { + it('should extract JSON from markdown code blocks', () => { + const text = '```json\n{"name": "test", "value": 42}\n```'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should extract JSON from generic code blocks', () => { + const text = '```\n{"name": "test", "value": 42}\n```'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should remove JavaScript variable declarations', () => { + const text = 'const result = {"name": "test", "value": 42};'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should handle let variable declarations', () => { + const text = 'let data = {"name": "test", "value": 42};'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should handle var variable declarations', () => { + const text = 'var config = {"name": "test", "value": 42};'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should extract JSON arrays', () => { + const text = '[{"name": "test1"}, {"name": "test2"}]'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual([{ name: 'test1' }, { name: 'test2' }]); + }); + + it('should convert JavaScript object literals to JSON', () => { + const text = "{name: 'test', value: 42}"; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should return valid JSON (canonical formatting)', () => { + const text = '{"name": "test", "value": 42}'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 42 }); + }); + + it('should return original text when JSON parsing fails completely', () => { + const text = 'This is not JSON at all'; + const result = extractJson(text); + expect(result).toBe('This is not JSON at all'); + }); + + it('should handle complex nested objects', () => { + const text = + '```json\n{\n "user": {\n "name": "John",\n "age": 30\n },\n "items": [1, 2, 3]\n}\n```'; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ + user: { + name: 'John', + age: 30 + }, + items: [1, 2, 3] + }); + }); + + it('should handle mixed quotes in object literals', () => { + const text = `{name: "test", value: 'mixed quotes'}`; + const result = extractJson(text); + expect(JSON.parse(result)).toEqual({ name: 'test', value: 'mixed quotes' }); + }); +}); diff --git a/packages/ai-sdk-provider-grok-cli/src/json-extractor.ts b/packages/ai-sdk-provider-grok-cli/src/json-extractor.ts new file mode 100644 index 00000000..2b547d0c --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/json-extractor.ts @@ -0,0 +1,132 @@ +/** + * Extract JSON from AI's response using a tolerant parser. + * + * The function removes common wrappers such as markdown fences or variable + * declarations and then attempts to parse the remaining text with + * `jsonc-parser`. If valid JSON (or JSONC) can be parsed, it is returned as a + * string via `JSON.stringify`. Otherwise the original text is returned. + * + * @param text - Raw text which may contain JSON + * @returns A valid JSON string if extraction succeeds, otherwise the original text + */ +import { parse, type ParseError } from 'jsonc-parser'; + +export function extractJson(text: string): string { + let content = text.trim(); + + // Strip ```json or ``` fences + const fenceMatch = /```(?:json)?\s*([\s\S]*?)\s*```/i.exec(content); + if (fenceMatch) { + content = fenceMatch[1]; + } + + // Strip variable declarations like `const foo =` or `let foo =` + const varMatch = /^\s*(?:const|let|var)\s+\w+\s*=\s*([\s\S]*)/i.exec(content); + if (varMatch) { + content = varMatch[1]; + // Remove trailing semicolon if present + if (content.trim().endsWith(';')) { + content = content.trim().slice(0, -1); + } + } + + // Find the first opening bracket + const firstObj = content.indexOf('{'); + const firstArr = content.indexOf('['); + if (firstObj === -1 && firstArr === -1) { + return text; + } + const start = + firstArr === -1 + ? firstObj + : firstObj === -1 + ? firstArr + : Math.min(firstObj, firstArr); + content = content.slice(start); + + // Try to parse the entire string with jsonc-parser + const tryParse = (value: string): string | undefined => { + const errors: ParseError[] = []; + try { + const result = parse(value, errors, { allowTrailingComma: true }); + if (errors.length === 0) { + return JSON.stringify(result, null, 2); + } + } catch { + // ignore + } + return undefined; + }; + + const parsed = tryParse(content); + if (parsed !== undefined) { + return parsed; + } + + // If parsing the full string failed, use a more efficient approach + // to find valid JSON boundaries + const openChar = content[0]; + const closeChar = openChar === '{' ? '}' : ']'; + + // Find all potential closing positions by tracking nesting depth + const closingPositions: number[] = []; + let depth = 0; + let inString = false; + let escapeNext = false; + + for (let i = 0; i < content.length; i++) { + const char = content[i]; + + if (escapeNext) { + escapeNext = false; + continue; + } + + if (char === '\\') { + escapeNext = true; + continue; + } + + if (char === '"' && !inString) { + inString = true; + continue; + } + + if (char === '"' && inString) { + inString = false; + continue; + } + + // Skip content inside strings + if (inString) continue; + + if (char === openChar) { + depth++; + } else if (char === closeChar) { + depth--; + if (depth === 0) { + closingPositions.push(i + 1); + } + } + } + + // Try parsing at each valid closing position, starting from the end + for (let i = closingPositions.length - 1; i >= 0; i--) { + const attempt = tryParse(content.slice(0, closingPositions[i])); + if (attempt !== undefined) { + return attempt; + } + } + + // As a final fallback, try the original character-by-character approach + // but only for the last 1000 characters to limit performance impact + const searchStart = Math.max(0, content.length - 1000); + for (let end = content.length - 1; end > searchStart; end--) { + const attempt = tryParse(content.slice(0, end)); + if (attempt !== undefined) { + return attempt; + } + } + + return text; +} diff --git a/packages/ai-sdk-provider-grok-cli/src/message-converter.test.ts b/packages/ai-sdk-provider-grok-cli/src/message-converter.test.ts new file mode 100644 index 00000000..3506ceb5 --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/message-converter.test.ts @@ -0,0 +1,163 @@ +/** + * Tests for message conversion utilities + */ + +import { describe, expect, it } from 'vitest'; +import { + convertFromGrokCliResponse, + convertToGrokCliMessages, + createPromptFromMessages, + escapeShellArg +} from './message-converter.js'; + +describe('convertToGrokCliMessages', () => { + it('should convert string content messages', () => { + const messages = [ + { role: 'user', content: 'Hello, world!' }, + { role: 'assistant', content: 'Hi there!' } + ]; + + const result = convertToGrokCliMessages(messages); + + expect(result).toEqual([ + { role: 'user', content: 'Hello, world!' }, + { role: 'assistant', content: 'Hi there!' } + ]); + }); + + it('should convert array content messages', () => { + const messages = [ + { + role: 'user', + content: [ + { type: 'text', text: 'Hello' }, + { type: 'text', text: 'World' } + ] + } + ]; + + const result = convertToGrokCliMessages(messages); + + expect(result).toEqual([{ role: 'user', content: 'Hello\nWorld' }]); + }); + + it('should convert object content messages', () => { + const messages = [ + { + role: 'user', + content: { text: 'Hello from object' } + } + ]; + + const result = convertToGrokCliMessages(messages); + + expect(result).toEqual([{ role: 'user', content: 'Hello from object' }]); + }); +}); + +describe('convertFromGrokCliResponse', () => { + it('should parse JSONL response format', () => { + const responseText = `{"role": "assistant", "content": "Hello there!", "usage": {"prompt_tokens": 10, "completion_tokens": 5, "total_tokens": 15}}`; + + const result = convertFromGrokCliResponse(responseText); + + expect(result).toEqual({ + text: 'Hello there!', + usage: { + promptTokens: 10, + completionTokens: 5, + totalTokens: 15 + } + }); + }); + + it('should handle multiple lines in JSONL format', () => { + const responseText = `{"role": "user", "content": "Hello"} +{"role": "assistant", "content": "Hi there!", "usage": {"prompt_tokens": 5, "completion_tokens": 3}}`; + + const result = convertFromGrokCliResponse(responseText); + + expect(result).toEqual({ + text: 'Hi there!', + usage: { + promptTokens: 5, + completionTokens: 3, + totalTokens: 0 + } + }); + }); + + it('should fallback to raw text when parsing fails', () => { + const responseText = 'Invalid JSON response'; + + const result = convertFromGrokCliResponse(responseText); + + expect(result).toEqual({ + text: 'Invalid JSON response', + usage: undefined + }); + }); +}); + +describe('createPromptFromMessages', () => { + it('should create formatted prompt from messages', () => { + const messages = [ + { role: 'system', content: 'You are a helpful assistant.' }, + { role: 'user', content: 'What is 2+2?' }, + { role: 'assistant', content: '2+2 equals 4.' } + ]; + + const result = createPromptFromMessages(messages); + + expect(result).toBe( + 'System: You are a helpful assistant.\n\nUser: What is 2+2?\n\nAssistant: 2+2 equals 4.' + ); + }); + + it('should handle custom role names', () => { + const messages = [{ role: 'custom', content: 'Custom message' }]; + + const result = createPromptFromMessages(messages); + + expect(result).toBe('custom: Custom message'); + }); + + it('should trim whitespace from message content', () => { + const messages = [ + { role: 'user', content: ' Hello with spaces ' }, + { role: 'assistant', content: '\n\nResponse with newlines\n\n' } + ]; + + const result = createPromptFromMessages(messages); + + expect(result).toBe( + 'User: Hello with spaces\n\nAssistant: Response with newlines' + ); + }); +}); + +describe('escapeShellArg', () => { + it('should escape single quotes', () => { + const arg = "It's a test"; + const result = escapeShellArg(arg); + expect(result).toBe("'It'\\''s a test'"); + }); + + it('should handle strings without special characters', () => { + const arg = 'simple string'; + const result = escapeShellArg(arg); + expect(result).toBe("'simple string'"); + }); + + it('should convert non-string values to strings', () => { + const arg = 123; + const result = escapeShellArg(arg); + expect(result).toBe("'123'"); + }); + + it('should handle empty strings', () => { + const arg = ''; + const result = escapeShellArg(arg); + expect(result).toBe("''"); + }); +}); diff --git a/src/ai-providers/custom-sdk/grok-cli/message-converter.js b/packages/ai-sdk-provider-grok-cli/src/message-converter.ts similarity index 67% rename from src/ai-providers/custom-sdk/grok-cli/message-converter.js rename to packages/ai-sdk-provider-grok-cli/src/message-converter.ts index 7f9293c9..ef12b934 100644 --- a/src/ai-providers/custom-sdk/grok-cli/message-converter.js +++ b/packages/ai-sdk-provider-grok-cli/src/message-converter.ts @@ -1,17 +1,28 @@ /** - * @fileoverview Message format conversion utilities for Grok CLI provider + * Message format conversion utilities for Grok CLI provider */ +import type { GrokCliMessage, GrokCliResponse } from './types.js'; + /** - * @typedef {import('./types.js').GrokCliMessage} GrokCliMessage + * AI SDK message type (simplified interface) */ +interface AISDKMessage { + role: string; + content: + | string + | Array<{ type: string; text?: string }> + | { text?: string; [key: string]: unknown }; +} /** * Convert AI SDK messages to Grok CLI compatible format - * @param {Array} messages - AI SDK message array - * @returns {Array} Grok CLI compatible messages + * @param messages - AI SDK message array + * @returns Grok CLI compatible messages */ -export function convertToGrokCliMessages(messages) { +export function convertToGrokCliMessages( + messages: AISDKMessage[] +): GrokCliMessage[] { return messages.map((message) => { // Handle different message content types let content = ''; @@ -22,7 +33,7 @@ export function convertToGrokCliMessages(messages) { // Handle multi-part content (text and images) content = message.content .filter((part) => part.type === 'text') - .map((part) => part.text) + .map((part) => part.text || '') .join('\n'); } else if (message.content && typeof message.content === 'object') { // Handle object content @@ -38,10 +49,17 @@ export function convertToGrokCliMessages(messages) { /** * Convert Grok CLI response to AI SDK format - * @param {string} responseText - Raw response text from Grok CLI (JSONL format) - * @returns {Object} AI SDK compatible response object + * @param responseText - Raw response text from Grok CLI (JSONL format) + * @returns AI SDK compatible response object */ -export function convertFromGrokCliResponse(responseText) { +export function convertFromGrokCliResponse(responseText: string): { + text: string; + usage?: { + promptTokens: number; + completionTokens: number; + totalTokens: number; + }; +} { try { // Grok CLI outputs JSONL format - each line is a separate JSON message const lines = responseText @@ -50,10 +68,10 @@ export function convertFromGrokCliResponse(responseText) { .filter((line) => line.trim()); // Parse each line as JSON and find assistant messages - const messages = []; + const messages: GrokCliResponse[] = []; for (const line of lines) { try { - const message = JSON.parse(line); + const message = JSON.parse(line) as GrokCliResponse; messages.push(message); } catch (parseError) { // Skip invalid JSON lines @@ -95,10 +113,10 @@ export function convertFromGrokCliResponse(responseText) { /** * Create a prompt string for Grok CLI from messages - * @param {Array} messages - AI SDK message array - * @returns {string} Formatted prompt string + * @param messages - AI SDK message array + * @returns Formatted prompt string */ -export function createPromptFromMessages(messages) { +export function createPromptFromMessages(messages: AISDKMessage[]): string { const grokMessages = convertToGrokCliMessages(messages); // Create a conversation-style prompt @@ -122,14 +140,14 @@ export function createPromptFromMessages(messages) { /** * Escape shell arguments for safe CLI execution - * @param {string} arg - Argument to escape - * @returns {string} Shell-escaped argument + * @param arg - Argument to escape + * @returns Shell-escaped argument */ -export function escapeShellArg(arg) { +export function escapeShellArg(arg: string | unknown): string { if (typeof arg !== 'string') { arg = String(arg); } // Replace single quotes with '\'' - return "'" + arg.replace(/'/g, "'\\''") + "'"; + return "'" + (arg as string).replace(/'/g, "'\\''") + "'"; } diff --git a/packages/ai-sdk-provider-grok-cli/src/types.ts b/packages/ai-sdk-provider-grok-cli/src/types.ts new file mode 100644 index 00000000..e38a680d --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/src/types.ts @@ -0,0 +1,81 @@ +/** + * Type definitions for Grok CLI provider + */ + +/** + * Settings for configuring Grok CLI behavior + */ +export interface GrokCliSettings { + /** API key for Grok CLI */ + apiKey?: string; + /** Base URL for Grok API */ + baseURL?: string; + /** Default model to use */ + model?: string; + /** Timeout in milliseconds */ + timeout?: number; + /** Working directory for CLI commands */ + workingDirectory?: string; +} + +/** + * Model identifiers supported by Grok CLI + */ +export type GrokCliModelId = string; + +/** + * Error metadata for Grok CLI operations + */ +export interface GrokCliErrorMetadata { + /** Error code */ + code?: string; + /** Process exit code */ + exitCode?: number; + /** Standard error output */ + stderr?: string; + /** Standard output */ + stdout?: string; + /** Excerpt of the prompt that caused the error */ + promptExcerpt?: string; + /** Timeout value in milliseconds */ + timeoutMs?: number; +} + +/** + * Message format for Grok CLI communication + */ +export interface GrokCliMessage { + /** Message role (user, assistant, system) */ + role: string; + /** Message content */ + content: string; +} + +/** + * Response format from Grok CLI + */ +export interface GrokCliResponse { + /** Message role */ + role: string; + /** Response content */ + content: string; + /** Token usage information */ + usage?: { + /** Input tokens used */ + prompt_tokens?: number; + /** Output tokens used */ + completion_tokens?: number; + /** Total tokens used */ + total_tokens?: number; + }; +} + +/** + * Configuration options for Grok CLI language model + */ +export interface GrokCliLanguageModelOptions { + /** Model identifier */ + id: GrokCliModelId; + /** Model settings */ + settings?: GrokCliSettings; +} diff --git a/packages/ai-sdk-provider-grok-cli/tsconfig.json b/packages/ai-sdk-provider-grok-cli/tsconfig.json new file mode 100644 index 00000000..b8facedc --- /dev/null +++ b/packages/ai-sdk-provider-grok-cli/tsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "lib": ["ES2022"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./dist", + "baseUrl": ".", + "rootDir": "./src", + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "bundler", + "moduleDetection": "force", + "types": ["node"], + "resolveJsonModule": true, + "isolatedModules": true, + "allowImportingTsExtensions": false + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "tests", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/packages/build-config/package.json b/packages/build-config/package.json index 3581b218..d3fb875a 100644 --- a/packages/build-config/package.json +++ b/packages/build-config/package.json @@ -20,8 +20,7 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "dotenv-mono": "^1.5.1", - "typescript": "^5.7.3" + "typescript": "^5.9.2" }, "dependencies": { "tsup": "^8.5.0" diff --git a/packages/build-config/src/tsdown.base.ts b/packages/build-config/src/tsdown.base.ts index 6a4e57d9..b0a0d984 100644 --- a/packages/build-config/src/tsdown.base.ts +++ b/packages/build-config/src/tsdown.base.ts @@ -43,9 +43,9 @@ export const baseConfig: Partial = { export function mergeConfig( base: Partial, overrides: Partial -): Partial { +): UserConfig { return { ...base, ...overrides - }; + } as UserConfig; } diff --git a/packages/tm-core/package.json b/packages/tm-core/package.json index eec969be..0e3b6553 100644 --- a/packages/tm-core/package.json +++ b/packages/tm-core/package.json @@ -31,21 +31,13 @@ }, "dependencies": { "@supabase/supabase-js": "^2.57.4", - "zod": "^3.23.8" + "zod": "^4.1.11" }, "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@tm/build-config": "*", "@types/node": "^22.10.5", - "@vitest/coverage-v8": "^2.0.5", - "dotenv-mono": "^1.5.1", - "ts-node": "^10.9.2", - "tsup": "^8.5.0", - "typescript": "^5.7.3", - "vitest": "^2.1.8" - }, - "engines": { - "node": ">=18.0.0" + "@vitest/coverage-v8": "^3.2.4", + "typescript": "^5.9.2", + "vitest": "^3.2.4" }, "files": ["src", "README.md", "CHANGELOG.md"], "keywords": ["task-management", "typescript", "ai", "prd", "parser"], diff --git a/packages/tm-core/src/entities/task.entity.ts b/packages/tm-core/src/entities/task.entity.ts index 724ab6b9..8737615f 100644 --- a/packages/tm-core/src/entities/task.entity.ts +++ b/packages/tm-core/src/entities/task.entity.ts @@ -33,6 +33,9 @@ export class TaskEntity implements Task { tags?: string[]; assignee?: string; complexity?: Task['complexity']; + recommendedSubtasks?: number; + expansionPrompt?: string; + complexityReasoning?: string; constructor(data: Task | (Omit & { id: number | string })) { this.validate(data); @@ -50,7 +53,7 @@ export class TaskEntity implements Task { // Normalize subtask IDs to strings this.subtasks = (data.subtasks || []).map((subtask) => ({ ...subtask, - id: Number(subtask.id), // Keep subtask IDs as numbers per interface + id: String(subtask.id), parentId: String(subtask.parentId) })); @@ -62,6 +65,9 @@ export class TaskEntity implements Task { this.tags = data.tags; this.assignee = data.assignee; this.complexity = data.complexity; + this.recommendedSubtasks = data.recommendedSubtasks; + this.expansionPrompt = data.expansionPrompt; + this.complexityReasoning = data.complexityReasoning; } /** @@ -246,7 +252,10 @@ export class TaskEntity implements Task { actualEffort: this.actualEffort, tags: this.tags, assignee: this.assignee, - complexity: this.complexity + complexity: this.complexity, + recommendedSubtasks: this.recommendedSubtasks, + expansionPrompt: this.expansionPrompt, + complexityReasoning: this.complexityReasoning }; } diff --git a/packages/tm-core/src/errors/task-master-error.ts b/packages/tm-core/src/errors/task-master-error.ts index f2dbb710..545e6353 100644 --- a/packages/tm-core/src/errors/task-master-error.ts +++ b/packages/tm-core/src/errors/task-master-error.ts @@ -51,7 +51,8 @@ export const ERROR_CODES = { INTERNAL_ERROR: 'INTERNAL_ERROR', INVALID_INPUT: 'INVALID_INPUT', NOT_IMPLEMENTED: 'NOT_IMPLEMENTED', - UNKNOWN_ERROR: 'UNKNOWN_ERROR' + UNKNOWN_ERROR: 'UNKNOWN_ERROR', + NOT_FOUND: 'NOT_FOUND' } as const; export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES]; diff --git a/packages/tm-core/src/index.ts b/packages/tm-core/src/index.ts index 274892f0..0f96f694 100644 --- a/packages/tm-core/src/index.ts +++ b/packages/tm-core/src/index.ts @@ -11,7 +11,9 @@ export { type ListTasksResult, type StartTaskOptions, type StartTaskResult, - type ConflictCheckResult + type ConflictCheckResult, + type ExportTasksOptions, + type ExportResult } from './task-master-core.js'; // Re-export types @@ -61,3 +63,12 @@ export { getLogger, createLogger, setGlobalLogger } from './logger/index.js'; // Re-export executors export * from './executors/index.js'; + +// Re-export reports +export { + ComplexityReportManager, + type ComplexityReport, + type ComplexityReportMetadata, + type ComplexityAnalysis, + type TaskComplexityData +} from './reports/index.js'; diff --git a/packages/tm-core/src/interfaces/storage.interface.ts b/packages/tm-core/src/interfaces/storage.interface.ts index ee7297f5..14f0a148 100644 --- a/packages/tm-core/src/interfaces/storage.interface.ts +++ b/packages/tm-core/src/interfaces/storage.interface.ts @@ -5,6 +5,16 @@ import type { Task, TaskMetadata, TaskStatus } from '../types/index.js'; +/** + * Options for loading tasks from storage + */ +export interface LoadTasksOptions { + /** Filter tasks by status */ + status?: TaskStatus; + /** Exclude subtasks from loaded tasks (default: false) */ + excludeSubtasks?: boolean; +} + /** * Result type for updateTaskStatus operations */ @@ -21,11 +31,12 @@ export interface UpdateStatusResult { */ export interface IStorage { /** - * Load all tasks from storage, optionally filtered by tag + * Load all tasks from storage, optionally filtered by tag and other criteria * @param tag - Optional tag to filter tasks by + * @param options - Optional filtering options (status, excludeSubtasks) * @returns Promise that resolves to an array of tasks */ - loadTasks(tag?: string): Promise; + loadTasks(tag?: string, options?: LoadTasksOptions): Promise; /** * Load a single task by ID @@ -205,7 +216,7 @@ export abstract class BaseStorage implements IStorage { } // Abstract methods that must be implemented by concrete classes - abstract loadTasks(tag?: string): Promise; + abstract loadTasks(tag?: string, options?: LoadTasksOptions): Promise; abstract loadTask(taskId: string, tag?: string): Promise; abstract saveTasks(tasks: Task[], tag?: string): Promise; abstract appendTasks(tasks: Task[], tag?: string): Promise; diff --git a/packages/tm-core/src/mappers/TaskMapper.test.ts b/packages/tm-core/src/mappers/TaskMapper.test.ts new file mode 100644 index 00000000..e033197e --- /dev/null +++ b/packages/tm-core/src/mappers/TaskMapper.test.ts @@ -0,0 +1,148 @@ +import { describe, it, expect, vi } from 'vitest'; +import { TaskMapper } from './TaskMapper.js'; +import type { Tables } from '../types/database.types.js'; + +type TaskRow = Tables<'tasks'>; + +describe('TaskMapper', () => { + describe('extractMetadataField', () => { + it('should extract string field from metadata', () => { + const taskRow: TaskRow = { + id: '123', + display_id: '1', + title: 'Test Task', + description: 'Test description', + status: 'todo', + priority: 'medium', + parent_task_id: null, + subtask_position: 0, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + metadata: { + details: 'Some details', + testStrategy: 'Test with unit tests' + }, + complexity: null, + assignee_id: null, + estimated_hours: null, + actual_hours: null, + due_date: null, + completed_at: null + }; + + const task = TaskMapper.mapDatabaseTaskToTask(taskRow, [], new Map()); + + expect(task.details).toBe('Some details'); + expect(task.testStrategy).toBe('Test with unit tests'); + }); + + it('should use default value when metadata field is missing', () => { + const taskRow: TaskRow = { + id: '123', + display_id: '1', + title: 'Test Task', + description: 'Test description', + status: 'todo', + priority: 'medium', + parent_task_id: null, + subtask_position: 0, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + metadata: {}, + complexity: null, + assignee_id: null, + estimated_hours: null, + actual_hours: null, + due_date: null, + completed_at: null + }; + + const task = TaskMapper.mapDatabaseTaskToTask(taskRow, [], new Map()); + + expect(task.details).toBe(''); + expect(task.testStrategy).toBe(''); + }); + + it('should use default value when metadata is null', () => { + const taskRow: TaskRow = { + id: '123', + display_id: '1', + title: 'Test Task', + description: 'Test description', + status: 'todo', + priority: 'medium', + parent_task_id: null, + subtask_position: 0, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + metadata: null, + complexity: null, + assignee_id: null, + estimated_hours: null, + actual_hours: null, + due_date: null, + completed_at: null + }; + + const task = TaskMapper.mapDatabaseTaskToTask(taskRow, [], new Map()); + + expect(task.details).toBe(''); + expect(task.testStrategy).toBe(''); + }); + + it('should use default value and warn when metadata field has wrong type', () => { + const consoleWarnSpy = vi + .spyOn(console, 'warn') + .mockImplementation(() => {}); + + const taskRow: TaskRow = { + id: '123', + display_id: '1', + title: 'Test Task', + description: 'Test description', + status: 'todo', + priority: 'medium', + parent_task_id: null, + subtask_position: 0, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + metadata: { + details: 12345, // Wrong type: number instead of string + testStrategy: ['test1', 'test2'] // Wrong type: array instead of string + }, + complexity: null, + assignee_id: null, + estimated_hours: null, + actual_hours: null, + due_date: null, + completed_at: null + }; + + const task = TaskMapper.mapDatabaseTaskToTask(taskRow, [], new Map()); + + // Should use empty string defaults when type doesn't match + expect(task.details).toBe(''); + expect(task.testStrategy).toBe(''); + + // Should have logged warnings + expect(consoleWarnSpy).toHaveBeenCalledWith( + expect.stringContaining('Type mismatch in metadata field "details"') + ); + expect(consoleWarnSpy).toHaveBeenCalledWith( + expect.stringContaining( + 'Type mismatch in metadata field "testStrategy"' + ) + ); + + consoleWarnSpy.mockRestore(); + }); + }); + + describe('mapStatus', () => { + it('should map database status to internal status', () => { + expect(TaskMapper.mapStatus('todo')).toBe('pending'); + expect(TaskMapper.mapStatus('in_progress')).toBe('in-progress'); + expect(TaskMapper.mapStatus('done')).toBe('done'); + }); + }); +}); diff --git a/packages/tm-core/src/mappers/TaskMapper.ts b/packages/tm-core/src/mappers/TaskMapper.ts index 89f5a8eb..8fadf73f 100644 --- a/packages/tm-core/src/mappers/TaskMapper.ts +++ b/packages/tm-core/src/mappers/TaskMapper.ts @@ -2,22 +2,32 @@ import { Task, Subtask } from '../types/index.js'; import { Database, Tables } from '../types/database.types.js'; type TaskRow = Tables<'tasks'>; -type DependencyRow = Tables<'task_dependencies'>; + +// Legacy type for backward compatibility +type DependencyRow = Tables<'task_dependencies'> & { + depends_on_task?: { display_id: string } | null; + depends_on_task_id?: string; +}; export class TaskMapper { /** * Maps database tasks to internal Task format + * @param dbTasks - Array of tasks from database + * @param dependencies - Either a Map of task_id to display_ids or legacy array format */ static mapDatabaseTasksToTasks( dbTasks: TaskRow[], - dbDependencies: DependencyRow[] + dependencies: Map | DependencyRow[] ): Task[] { if (!dbTasks || dbTasks.length === 0) { return []; } - // Group dependencies by task_id - const dependenciesByTaskId = this.groupDependenciesByTaskId(dbDependencies); + // Handle both Map and array formats for backward compatibility + const dependenciesByTaskId = + dependencies instanceof Map + ? dependencies + : this.groupDependenciesByTaskId(dependencies); // Separate parent tasks and subtasks const parentTasks = dbTasks.filter((t) => !t.parent_task_id); @@ -43,21 +53,23 @@ export class TaskMapper { ): Task { // Map subtasks const subtasks: Subtask[] = dbSubtasks.map((subtask, index) => ({ - id: index + 1, // Use numeric ID for subtasks + id: subtask.display_id || String(index + 1), // Use display_id if available (API storage), fallback to numeric (file storage) parentId: dbTask.id, title: subtask.title, description: subtask.description || '', status: this.mapStatus(subtask.status), priority: this.mapPriority(subtask.priority), dependencies: dependenciesByTaskId.get(subtask.id) || [], - details: (subtask.metadata as any)?.details || '', - testStrategy: (subtask.metadata as any)?.testStrategy || '', + details: this.extractMetadataField(subtask.metadata, 'details', ''), + testStrategy: this.extractMetadataField( + subtask.metadata, + 'testStrategy', + '' + ), createdAt: subtask.created_at, updatedAt: subtask.updated_at, assignee: subtask.assignee_id || undefined, - complexity: subtask.complexity - ? this.mapComplexityToInternal(subtask.complexity) - : undefined + complexity: subtask.complexity ?? undefined })); return { @@ -67,22 +79,25 @@ export class TaskMapper { status: this.mapStatus(dbTask.status), priority: this.mapPriority(dbTask.priority), dependencies: dependenciesByTaskId.get(dbTask.id) || [], - details: (dbTask.metadata as any)?.details || '', - testStrategy: (dbTask.metadata as any)?.testStrategy || '', + details: this.extractMetadataField(dbTask.metadata, 'details', ''), + testStrategy: this.extractMetadataField( + dbTask.metadata, + 'testStrategy', + '' + ), subtasks, createdAt: dbTask.created_at, updatedAt: dbTask.updated_at, assignee: dbTask.assignee_id || undefined, - complexity: dbTask.complexity - ? this.mapComplexityToInternal(dbTask.complexity) - : undefined, + complexity: dbTask.complexity ?? undefined, effort: dbTask.estimated_hours || undefined, actualEffort: dbTask.actual_hours || undefined }; } /** - * Groups dependencies by task ID + * Groups dependencies by task ID (legacy method for backward compatibility) + * @deprecated Use DependencyFetcher.fetchDependenciesWithDisplayIds instead */ private static groupDependenciesByTaskId( dependencies: DependencyRow[] @@ -92,7 +107,14 @@ export class TaskMapper { if (dependencies) { for (const dep of dependencies) { const deps = dependenciesByTaskId.get(dep.task_id) || []; - deps.push(dep.depends_on_task_id); + // Handle both old format (UUID string) and new format (object with display_id) + const dependencyId = + typeof dep.depends_on_task === 'object' + ? dep.depends_on_task?.display_id + : dep.depends_on_task_id; + if (dependencyId) { + deps.push(dependencyId); + } dependenciesByTaskId.set(dep.task_id, deps); } } @@ -157,14 +179,38 @@ export class TaskMapper { } /** - * Maps numeric complexity to descriptive complexity + * Safely extracts a field from metadata JSON with runtime type validation + * @param metadata The metadata object (could be null or any type) + * @param field The field to extract + * @param defaultValue Default value if field doesn't exist + * @returns The extracted value if it matches the expected type, otherwise defaultValue */ - private static mapComplexityToInternal( - complexity: number - ): Task['complexity'] { - if (complexity <= 2) return 'simple'; - if (complexity <= 5) return 'moderate'; - if (complexity <= 8) return 'complex'; - return 'very-complex'; + private static extractMetadataField( + metadata: unknown, + field: string, + defaultValue: T + ): T { + if (!metadata || typeof metadata !== 'object') { + return defaultValue; + } + + const value = (metadata as Record)[field]; + + if (value === undefined) { + return defaultValue; + } + + // Runtime type validation: ensure value matches the type of defaultValue + const expectedType = typeof defaultValue; + const actualType = typeof value; + + if (expectedType !== actualType) { + console.warn( + `Type mismatch in metadata field "${field}": expected ${expectedType}, got ${actualType}. Using default value.` + ); + return defaultValue; + } + + return value as T; } } diff --git a/packages/tm-core/src/reports/complexity-report-manager.ts b/packages/tm-core/src/reports/complexity-report-manager.ts new file mode 100644 index 00000000..e55758a5 --- /dev/null +++ b/packages/tm-core/src/reports/complexity-report-manager.ts @@ -0,0 +1,185 @@ +/** + * @fileoverview ComplexityReportManager - Handles loading and managing complexity analysis reports + * Follows the same pattern as ConfigManager and AuthManager + */ + +import { promises as fs } from 'fs'; +import path from 'path'; +import type { + ComplexityReport, + ComplexityAnalysis, + TaskComplexityData +} from './types.js'; +import { getLogger } from '../logger/index.js'; + +const logger = getLogger('ComplexityReportManager'); + +/** + * Manages complexity analysis reports + * Handles loading, caching, and providing complexity data for tasks + */ +export class ComplexityReportManager { + private projectRoot: string; + private reportCache: Map = new Map(); + + constructor(projectRoot: string) { + this.projectRoot = projectRoot; + } + + /** + * Get the path to the complexity report file for a given tag + */ + private getReportPath(tag?: string): string { + const reportsDir = path.join(this.projectRoot, '.taskmaster', 'reports'); + const tagSuffix = tag && tag !== 'master' ? `_${tag}` : ''; + return path.join(reportsDir, `task-complexity-report${tagSuffix}.json`); + } + + /** + * Load complexity report for a given tag + * Results are cached to avoid repeated file reads + */ + async loadReport(tag?: string): Promise { + const resolvedTag = tag || 'master'; + const cacheKey = resolvedTag; + + // Check cache first + if (this.reportCache.has(cacheKey)) { + return this.reportCache.get(cacheKey)!; + } + + const reportPath = this.getReportPath(tag); + + try { + // Check if file exists + await fs.access(reportPath); + + // Read and parse the report + const content = await fs.readFile(reportPath, 'utf-8'); + const report = JSON.parse(content) as ComplexityReport; + + // Validate basic structure + if (!report.meta || !Array.isArray(report.complexityAnalysis)) { + logger.warn( + `Invalid complexity report structure at ${reportPath}, ignoring` + ); + return null; + } + + // Cache the report + this.reportCache.set(cacheKey, report); + + logger.debug( + `Loaded complexity report for tag '${resolvedTag}' with ${report.complexityAnalysis.length} analyses` + ); + + return report; + } catch (error: any) { + if (error.code === 'ENOENT') { + // File doesn't exist - this is normal, not all projects have complexity reports + logger.debug(`No complexity report found for tag '${resolvedTag}'`); + return null; + } + + // Other errors (parsing, permissions, etc.) + logger.warn( + `Failed to load complexity report for tag '${resolvedTag}': ${error.message}` + ); + return null; + } + } + + /** + * Get complexity data for a specific task ID + */ + async getComplexityForTask( + taskId: string | number, + tag?: string + ): Promise { + const report = await this.loadReport(tag); + if (!report) { + return null; + } + + // Find the analysis for this task + const analysis = report.complexityAnalysis.find( + (a) => String(a.taskId) === String(taskId) + ); + + if (!analysis) { + return null; + } + + // Convert to TaskComplexityData format + return { + complexityScore: analysis.complexityScore, + recommendedSubtasks: analysis.recommendedSubtasks, + expansionPrompt: analysis.expansionPrompt, + complexityReasoning: analysis.complexityReasoning + }; + } + + /** + * Get complexity data for multiple tasks at once + * More efficient than calling getComplexityForTask multiple times + */ + async getComplexityForTasks( + taskIds: (string | number)[], + tag?: string + ): Promise> { + const result = new Map(); + const report = await this.loadReport(tag); + + if (!report) { + return result; + } + + // Create a map for fast lookups + const analysisMap = new Map(); + report.complexityAnalysis.forEach((analysis) => { + analysisMap.set(String(analysis.taskId), analysis); + }); + + // Map each task ID to its complexity data + taskIds.forEach((taskId) => { + const analysis = analysisMap.get(String(taskId)); + if (analysis) { + result.set(String(taskId), { + complexityScore: analysis.complexityScore, + recommendedSubtasks: analysis.recommendedSubtasks, + expansionPrompt: analysis.expansionPrompt, + complexityReasoning: analysis.complexityReasoning + }); + } + }); + + return result; + } + + /** + * Clear the report cache + * @param tag - Specific tag to clear, or undefined to clear all cached reports + * Useful when reports are regenerated or modified externally + */ + clearCache(tag?: string): void { + if (tag) { + this.reportCache.delete(tag); + } else { + // Clear all cached reports + this.reportCache.clear(); + } + } + + /** + * Check if a complexity report exists for a tag + */ + async hasReport(tag?: string): Promise { + const reportPath = this.getReportPath(tag); + try { + await fs.access(reportPath); + return true; + } catch { + return false; + } + } +} diff --git a/packages/tm-core/src/reports/index.ts b/packages/tm-core/src/reports/index.ts new file mode 100644 index 00000000..6f6e48cd --- /dev/null +++ b/packages/tm-core/src/reports/index.ts @@ -0,0 +1,11 @@ +/** + * @fileoverview Reports module exports + */ + +export { ComplexityReportManager } from './complexity-report-manager.js'; +export type { + ComplexityReport, + ComplexityReportMetadata, + ComplexityAnalysis, + TaskComplexityData +} from './types.js'; diff --git a/packages/tm-core/src/reports/types.ts b/packages/tm-core/src/reports/types.ts new file mode 100644 index 00000000..f5903c2c --- /dev/null +++ b/packages/tm-core/src/reports/types.ts @@ -0,0 +1,65 @@ +/** + * @fileoverview Type definitions for complexity analysis reports + */ + +/** + * Analysis result for a single task + */ +export interface ComplexityAnalysis { + /** Task ID being analyzed */ + taskId: string | number; + /** Task title */ + taskTitle: string; + /** Complexity score (1-10 scale) */ + complexityScore: number; + /** Recommended number of subtasks */ + recommendedSubtasks: number; + /** AI-generated prompt for task expansion */ + expansionPrompt: string; + /** Reasoning behind the complexity assessment */ + complexityReasoning: string; +} + +/** + * Metadata about the complexity report + */ +export interface ComplexityReportMetadata { + /** When the report was generated */ + generatedAt: string; + /** Number of tasks analyzed in this run */ + tasksAnalyzed: number; + /** Total number of tasks in the file */ + totalTasks?: number; + /** Total analyses in the report (across all runs) */ + analysisCount?: number; + /** Complexity threshold score used */ + thresholdScore: number; + /** Project name */ + projectName?: string; + /** Whether research mode was used */ + usedResearch: boolean; +} + +/** + * Complete complexity analysis report + */ +export interface ComplexityReport { + /** Report metadata */ + meta: ComplexityReportMetadata; + /** Array of complexity analyses */ + complexityAnalysis: ComplexityAnalysis[]; +} + +/** + * Complexity data to be attached to a Task + */ +export interface TaskComplexityData { + /** Complexity score (1-10 scale) */ + complexityScore?: number; + /** Recommended number of subtasks */ + recommendedSubtasks?: number; + /** AI-generated expansion prompt */ + expansionPrompt?: string; + /** Reasoning behind the assessment */ + complexityReasoning?: string; +} diff --git a/packages/tm-core/src/repositories/supabase-task-repository.ts b/packages/tm-core/src/repositories/supabase-task-repository.ts deleted file mode 100644 index cdbc3e56..00000000 --- a/packages/tm-core/src/repositories/supabase-task-repository.ts +++ /dev/null @@ -1,224 +0,0 @@ -import { SupabaseClient } from '@supabase/supabase-js'; -import { Task } from '../types/index.js'; -import { Database } from '../types/database.types.js'; -import { TaskMapper } from '../mappers/TaskMapper.js'; -import { AuthManager } from '../auth/auth-manager.js'; -import { z } from 'zod'; - -// Zod schema for task status validation -const TaskStatusSchema = z.enum([ - 'pending', - 'in-progress', - 'done', - 'review', - 'deferred', - 'cancelled', - 'blocked' -]); - -// Zod schema for task updates -const TaskUpdateSchema = z - .object({ - title: z.string().min(1).optional(), - description: z.string().optional(), - status: TaskStatusSchema.optional(), - priority: z.enum(['low', 'medium', 'high', 'critical']).optional(), - details: z.string().optional(), - testStrategy: z.string().optional() - }) - .partial(); - -export class SupabaseTaskRepository { - constructor(private supabase: SupabaseClient) {} - - async getTasks(_projectId?: string): Promise { - // Get the current context to determine briefId - const authManager = AuthManager.getInstance(); - const context = authManager.getContext(); - - if (!context || !context.briefId) { - throw new Error( - 'No brief selected. Please select a brief first using: tm context brief' - ); - } - - // Get all tasks for the brief using the exact query structure - const { data: tasks, error } = await this.supabase - .from('tasks') - .select(` - *, - document:document_id ( - id, - document_name, - title, - description - ) - `) - .eq('brief_id', context.briefId) - .order('position', { ascending: true }) - .order('subtask_position', { ascending: true }) - .order('created_at', { ascending: true }); - - if (error) { - throw new Error(`Failed to fetch tasks: ${error.message}`); - } - - if (!tasks || tasks.length === 0) { - return []; - } - - // Get all dependencies for these tasks - const taskIds = tasks.map((t: any) => t.id); - const { data: depsData, error: depsError } = await this.supabase - .from('task_dependencies') - .select('*') - .in('task_id', taskIds); - - if (depsError) { - throw new Error( - `Failed to fetch task dependencies: ${depsError.message}` - ); - } - - // Use mapper to convert to internal format - return TaskMapper.mapDatabaseTasksToTasks(tasks, depsData || []); - } - - async getTask(_projectId: string, taskId: string): Promise { - // Get the current context to determine briefId (projectId not used in Supabase context) - const authManager = AuthManager.getInstance(); - const context = authManager.getContext(); - - if (!context || !context.briefId) { - throw new Error( - 'No brief selected. Please select a brief first using: tm context brief' - ); - } - - const { data, error } = await this.supabase - .from('tasks') - .select('*') - .eq('brief_id', context.briefId) - .eq('display_id', taskId.toUpperCase()) - .single(); - - if (error) { - if (error.code === 'PGRST116') { - return null; // Not found - } - throw new Error(`Failed to fetch task: ${error.message}`); - } - - // Get dependencies for this task - const { data: depsData } = await this.supabase - .from('task_dependencies') - .select('*') - .eq('task_id', taskId); - - // Get subtasks if this is a parent task - const { data: subtasksData } = await this.supabase - .from('tasks') - .select('*') - .eq('parent_task_id', taskId) - .order('subtask_position', { ascending: true }); - - // Create dependency map - const dependenciesByTaskId = new Map(); - if (depsData) { - dependenciesByTaskId.set( - taskId, - depsData.map( - (d: Database['public']['Tables']['task_dependencies']['Row']) => - d.depends_on_task_id - ) - ); - } - - // Use mapper to convert single task - return TaskMapper.mapDatabaseTaskToTask( - data, - subtasksData || [], - dependenciesByTaskId - ); - } - - async updateTask( - projectId: string, - taskId: string, - updates: Partial - ): Promise { - // Get the current context to determine briefId - const authManager = AuthManager.getInstance(); - const context = authManager.getContext(); - - if (!context || !context.briefId) { - throw new Error( - 'No brief selected. Please select a brief first using: tm context brief' - ); - } - - // Validate updates using Zod schema - try { - TaskUpdateSchema.parse(updates); - } catch (error) { - if (error instanceof z.ZodError) { - const errorMessages = error.errors - .map((err) => `${err.path.join('.')}: ${err.message}`) - .join(', '); - throw new Error(`Invalid task update data: ${errorMessages}`); - } - throw error; - } - - // Convert Task fields to database fields - only include fields that actually exist in the database - const dbUpdates: any = {}; - - if (updates.title !== undefined) dbUpdates.title = updates.title; - if (updates.description !== undefined) - dbUpdates.description = updates.description; - if (updates.status !== undefined) - dbUpdates.status = this.mapStatusToDatabase(updates.status); - if (updates.priority !== undefined) dbUpdates.priority = updates.priority; - // Skip fields that don't exist in database schema: details, testStrategy, etc. - - // Update the task - const { error } = await this.supabase - .from('tasks') - .update(dbUpdates) - .eq('brief_id', context.briefId) - .eq('display_id', taskId.toUpperCase()); - - if (error) { - throw new Error(`Failed to update task: ${error.message}`); - } - - // Return the updated task by fetching it - const updatedTask = await this.getTask(projectId, taskId); - if (!updatedTask) { - throw new Error(`Failed to retrieve updated task ${taskId}`); - } - - return updatedTask; - } - - /** - * Maps internal status to database status - */ - private mapStatusToDatabase( - status: string - ): Database['public']['Enums']['task_status'] { - switch (status) { - case 'pending': - return 'todo'; - case 'in-progress': - case 'in_progress': // Accept both formats - return 'in_progress'; - case 'done': - return 'done'; - default: - throw new Error( - `Invalid task status: ${status}. Valid statuses are: pending, in-progress, done` - ); - } - } -} diff --git a/packages/tm-core/src/repositories/supabase/dependency-fetcher.ts b/packages/tm-core/src/repositories/supabase/dependency-fetcher.ts new file mode 100644 index 00000000..0f0ef97a --- /dev/null +++ b/packages/tm-core/src/repositories/supabase/dependency-fetcher.ts @@ -0,0 +1,68 @@ +import { SupabaseClient } from '@supabase/supabase-js'; +import { Database } from '../../types/database.types.js'; +import { DependencyWithDisplayId } from '../../types/repository-types.js'; + +/** + * Handles fetching and processing of task dependencies with display_ids + */ +export class DependencyFetcher { + constructor(private supabase: SupabaseClient) {} + + /** + * Fetches dependencies for given task IDs with display_ids joined + * @param taskIds Array of task IDs to fetch dependencies for + * @returns Map of task ID to array of dependency display_ids + */ + async fetchDependenciesWithDisplayIds( + taskIds: string[] + ): Promise> { + if (!taskIds || taskIds.length === 0) { + return new Map(); + } + + const { data, error } = await this.supabase + .from('task_dependencies') + .select(` + task_id, + depends_on_task:tasks!task_dependencies_depends_on_task_id_fkey ( + display_id + ) + `) + .in('task_id', taskIds); + + if (error) { + throw new Error(`Failed to fetch task dependencies: ${error.message}`); + } + + return this.processDependencyData(data as DependencyWithDisplayId[]); + } + + /** + * Processes raw dependency data into a map structure + */ + private processDependencyData( + dependencies: DependencyWithDisplayId[] + ): Map { + const dependenciesByTaskId = new Map(); + + if (!dependencies) { + return dependenciesByTaskId; + } + + for (const dep of dependencies) { + if (!dep.task_id) continue; + + const currentDeps = dependenciesByTaskId.get(dep.task_id) || []; + + // Extract display_id from the joined object + const displayId = dep.depends_on_task?.display_id; + if (displayId) { + currentDeps.push(displayId); + } + + dependenciesByTaskId.set(dep.task_id, currentDeps); + } + + return dependenciesByTaskId; + } +} diff --git a/packages/tm-core/src/repositories/supabase/index.ts b/packages/tm-core/src/repositories/supabase/index.ts new file mode 100644 index 00000000..f2e2e7da --- /dev/null +++ b/packages/tm-core/src/repositories/supabase/index.ts @@ -0,0 +1,5 @@ +/** + * Supabase repository implementations + */ +export { SupabaseTaskRepository } from './supabase-task-repository.js'; +export { DependencyFetcher } from './dependency-fetcher.js'; diff --git a/packages/tm-core/src/repositories/supabase/supabase-task-repository.ts b/packages/tm-core/src/repositories/supabase/supabase-task-repository.ts new file mode 100644 index 00000000..925de209 --- /dev/null +++ b/packages/tm-core/src/repositories/supabase/supabase-task-repository.ts @@ -0,0 +1,275 @@ +import { SupabaseClient } from '@supabase/supabase-js'; +import { Task } from '../../types/index.js'; +import { Database, Json } from '../../types/database.types.js'; +import { TaskMapper } from '../../mappers/TaskMapper.js'; +import { AuthManager } from '../../auth/auth-manager.js'; +import { DependencyFetcher } from './dependency-fetcher.js'; +import { + TaskWithRelations, + TaskDatabaseUpdate +} from '../../types/repository-types.js'; +import { LoadTasksOptions } from '../../interfaces/storage.interface.js'; +import { z } from 'zod'; + +// Zod schema for task status validation +const TaskStatusSchema = z.enum([ + 'pending', + 'in-progress', + 'done', + 'review', + 'deferred', + 'cancelled', + 'blocked' +]); + +// Zod schema for task updates +const TaskUpdateSchema = z + .object({ + title: z.string().min(1).optional(), + description: z.string().optional(), + status: TaskStatusSchema.optional(), + priority: z.enum(['low', 'medium', 'high', 'critical']).optional(), + details: z.string().optional(), + testStrategy: z.string().optional() + }) + .partial(); + +export class SupabaseTaskRepository { + private dependencyFetcher: DependencyFetcher; + private authManager: AuthManager; + + constructor(private supabase: SupabaseClient) { + this.dependencyFetcher = new DependencyFetcher(supabase); + this.authManager = AuthManager.getInstance(); + } + + /** + * Gets the current brief ID from auth context + * @throws {Error} If no brief is selected + */ + private getBriefIdOrThrow(): string { + const context = this.authManager.getContext(); + if (!context?.briefId) { + throw new Error( + 'No brief selected. Please select a brief first using: tm context brief' + ); + } + return context.briefId; + } + + async getTasks( + _projectId?: string, + options?: LoadTasksOptions + ): Promise { + const briefId = this.getBriefIdOrThrow(); + + // Build query with filters + let query = this.supabase + .from('tasks') + .select(` + *, + document:document_id ( + id, + document_name, + title, + description + ) + `) + .eq('brief_id', briefId); + + // Apply status filter at database level if specified + if (options?.status) { + const dbStatus = this.mapStatusToDatabase(options.status); + query = query.eq('status', dbStatus); + } + + // Apply subtask exclusion at database level if specified + if (options?.excludeSubtasks) { + // Only fetch parent tasks (where parent_task_id is null) + query = query.is('parent_task_id', null); + } + + // Execute query with ordering + const { data: tasks, error } = await query + .order('position', { ascending: true }) + .order('subtask_position', { ascending: true }) + .order('created_at', { ascending: true }); + + if (error) { + throw new Error(`Failed to fetch tasks: ${error.message}`); + } + + if (!tasks || tasks.length === 0) { + return []; + } + + // Type-safe task ID extraction + const typedTasks = tasks as TaskWithRelations[]; + const taskIds = typedTasks.map((t) => t.id); + const dependenciesMap = + await this.dependencyFetcher.fetchDependenciesWithDisplayIds(taskIds); + + // Use mapper to convert to internal format + return TaskMapper.mapDatabaseTasksToTasks(tasks, dependenciesMap); + } + + async getTask(_projectId: string, taskId: string): Promise { + const briefId = this.getBriefIdOrThrow(); + + const { data, error } = await this.supabase + .from('tasks') + .select('*') + .eq('brief_id', briefId) + .eq('display_id', taskId.toUpperCase()) + .single(); + + if (error) { + if (error.code === 'PGRST116') { + return null; // Not found + } + throw new Error(`Failed to fetch task: ${error.message}`); + } + + // Get subtasks if this is a parent task + const { data: subtasksData } = await this.supabase + .from('tasks') + .select('*') + .eq('parent_task_id', data.id) + .order('subtask_position', { ascending: true }); + + // Get all task IDs (parent + subtasks) to fetch dependencies + const allTaskIds = [data.id, ...(subtasksData?.map((st) => st.id) || [])]; + + // Fetch dependencies using the dedicated fetcher + const dependenciesByTaskId = + await this.dependencyFetcher.fetchDependenciesWithDisplayIds(allTaskIds); + + // Use mapper to convert single task + return TaskMapper.mapDatabaseTaskToTask( + data, + subtasksData || [], + dependenciesByTaskId + ); + } + + async updateTask( + projectId: string, + taskId: string, + updates: Partial + ): Promise { + const briefId = this.getBriefIdOrThrow(); + + // Validate updates using Zod schema + try { + TaskUpdateSchema.parse(updates); + } catch (error) { + if (error instanceof z.ZodError) { + const errorMessages = error.issues + .map((err) => `${err.path.join('.')}: ${err.message}`) + .join(', '); + throw new Error(`Invalid task update data: ${errorMessages}`); + } + throw error; + } + + // Convert Task fields to database fields with proper typing + const dbUpdates: TaskDatabaseUpdate = {}; + + if (updates.title !== undefined) dbUpdates.title = updates.title; + if (updates.description !== undefined) + dbUpdates.description = updates.description; + if (updates.status !== undefined) + dbUpdates.status = this.mapStatusToDatabase(updates.status); + if (updates.priority !== undefined) + dbUpdates.priority = this.mapPriorityToDatabase(updates.priority); + + // Handle metadata fields (details, testStrategy, etc.) + // Load existing metadata to preserve fields not being updated + const { data: existingMetadataRow, error: existingMetadataError } = + await this.supabase + .from('tasks') + .select('metadata') + .eq('brief_id', briefId) + .eq('display_id', taskId.toUpperCase()) + .single(); + + if (existingMetadataError) { + throw new Error( + `Failed to load existing task metadata: ${existingMetadataError.message}` + ); + } + + const metadata: Record = { + ...((existingMetadataRow?.metadata as Record) ?? {}) + }; + + if (updates.details !== undefined) metadata.details = updates.details; + if (updates.testStrategy !== undefined) + metadata.testStrategy = updates.testStrategy; + + if (Object.keys(metadata).length > 0) { + dbUpdates.metadata = metadata as Json; + } + + // Update the task + const { error } = await this.supabase + .from('tasks') + .update(dbUpdates) + .eq('brief_id', briefId) + .eq('display_id', taskId.toUpperCase()); + + if (error) { + throw new Error(`Failed to update task: ${error.message}`); + } + + // Return the updated task by fetching it + const updatedTask = await this.getTask(projectId, taskId); + if (!updatedTask) { + throw new Error(`Failed to retrieve updated task ${taskId}`); + } + + return updatedTask; + } + + /** + * Maps internal status to database status + */ + private mapStatusToDatabase( + status: string + ): Database['public']['Enums']['task_status'] { + switch (status) { + case 'pending': + return 'todo'; + case 'in-progress': + case 'in_progress': // Accept both formats + return 'in_progress'; + case 'done': + return 'done'; + default: + throw new Error( + `Invalid task status: ${status}. Valid statuses are: pending, in-progress, done` + ); + } + } + + /** + * Maps internal priority to database priority + * Task Master uses 'critical', database uses 'urgent' + */ + private mapPriorityToDatabase( + priority: string + ): Database['public']['Enums']['task_priority'] { + switch (priority) { + case 'critical': + return 'urgent'; + case 'low': + case 'medium': + case 'high': + return priority as Database['public']['Enums']['task_priority']; + default: + throw new Error( + `Invalid task priority: ${priority}. Valid priorities are: low, medium, high, critical` + ); + } + } +} diff --git a/packages/tm-core/src/repositories/task-repository.interface.ts b/packages/tm-core/src/repositories/task-repository.interface.ts index d256e551..0d5928d3 100644 --- a/packages/tm-core/src/repositories/task-repository.interface.ts +++ b/packages/tm-core/src/repositories/task-repository.interface.ts @@ -1,8 +1,9 @@ import { Task, TaskTag } from '../types/index.js'; +import { LoadTasksOptions } from '../interfaces/storage.interface.js'; export interface TaskRepository { // Task operations - getTasks(projectId: string): Promise; + getTasks(projectId: string, options?: LoadTasksOptions): Promise; getTask(projectId: string, taskId: string): Promise; createTask(projectId: string, task: Omit): Promise; updateTask( diff --git a/packages/tm-core/src/services/export.service.ts b/packages/tm-core/src/services/export.service.ts new file mode 100644 index 00000000..03037dbb --- /dev/null +++ b/packages/tm-core/src/services/export.service.ts @@ -0,0 +1,496 @@ +/** + * @fileoverview Export Service + * Core service for exporting tasks to external systems (e.g., Hamster briefs) + */ + +import type { Task, TaskStatus } from '../types/index.js'; +import type { UserContext } from '../auth/types.js'; +import { ConfigManager } from '../config/config-manager.js'; +import { AuthManager } from '../auth/auth-manager.js'; +import { ERROR_CODES, TaskMasterError } from '../errors/task-master-error.js'; +import { FileStorage } from '../storage/file-storage/index.js'; + +// Type definitions for the bulk API response +interface TaskImportResult { + externalId?: string; + index: number; + success: boolean; + taskId?: string; + error?: string; + validationErrors?: string[]; +} + +interface BulkTasksResponse { + dryRun: boolean; + totalTasks: number; + successCount: number; + failedCount: number; + skippedCount: number; + results: TaskImportResult[]; + summary: { + message: string; + duration: number; + }; +} + +/** + * Options for exporting tasks + */ +export interface ExportTasksOptions { + /** Optional tag to export tasks from (uses active tag if not provided) */ + tag?: string; + /** Brief ID to export to */ + briefId?: string; + /** Organization ID (required if briefId is provided) */ + orgId?: string; + /** Filter by task status */ + status?: TaskStatus; + /** Exclude subtasks from export (default: false, subtasks included by default) */ + excludeSubtasks?: boolean; +} + +/** + * Result of the export operation + */ +export interface ExportResult { + /** Whether the export was successful */ + success: boolean; + /** Number of tasks exported */ + taskCount: number; + /** The brief ID tasks were exported to */ + briefId: string; + /** The organization ID */ + orgId: string; + /** Optional message */ + message?: string; + /** Error details if export failed */ + error?: { + code: string; + message: string; + }; +} + +/** + * Brief information from API + */ +export interface Brief { + id: string; + accountId: string; + createdAt: string; + name?: string; +} + +/** + * ExportService handles task export to external systems + */ +export class ExportService { + private configManager: ConfigManager; + private authManager: AuthManager; + + constructor(configManager: ConfigManager, authManager: AuthManager) { + this.configManager = configManager; + this.authManager = authManager; + } + + /** + * Export tasks to a brief + */ + async exportTasks(options: ExportTasksOptions): Promise { + // Validate authentication + if (!this.authManager.isAuthenticated()) { + throw new TaskMasterError( + 'Authentication required for export', + ERROR_CODES.AUTHENTICATION_ERROR + ); + } + + // Get current context + const context = this.authManager.getContext(); + + // Determine org and brief IDs + let orgId = options.orgId || context?.orgId; + let briefId = options.briefId || context?.briefId; + + // Validate we have necessary IDs + if (!orgId) { + throw new TaskMasterError( + 'Organization ID is required for export. Use "tm context org" to select one.', + ERROR_CODES.MISSING_CONFIGURATION + ); + } + + if (!briefId) { + throw new TaskMasterError( + 'Brief ID is required for export. Use "tm context brief" or provide --brief flag.', + ERROR_CODES.MISSING_CONFIGURATION + ); + } + + // Get tasks from the specified or active tag + const activeTag = this.configManager.getActiveTag(); + const tag = options.tag || activeTag; + + // Always read tasks from local file storage for export + // (we're exporting local tasks to a remote brief) + const fileStorage = new FileStorage(this.configManager.getProjectRoot()); + await fileStorage.initialize(); + + // Load tasks with filters applied at storage layer + const filteredTasks = await fileStorage.loadTasks(tag, { + status: options.status, + excludeSubtasks: options.excludeSubtasks + }); + + // Get total count (without filters) for comparison + const allTasks = await fileStorage.loadTasks(tag); + + const taskListResult = { + tasks: filteredTasks, + total: allTasks.length, + filtered: filteredTasks.length, + tag, + storageType: 'file' as const + }; + + if (taskListResult.tasks.length === 0) { + return { + success: false, + taskCount: 0, + briefId, + orgId, + message: 'No tasks found to export', + error: { + code: 'NO_TASKS', + message: 'No tasks match the specified criteria' + } + }; + } + + try { + // Call the export API with the original tasks + // performExport will handle the transformation based on the method used + await this.performExport(orgId, briefId, taskListResult.tasks); + + return { + success: true, + taskCount: taskListResult.tasks.length, + briefId, + orgId, + message: `Successfully exported ${taskListResult.tasks.length} task(s) to brief` + }; + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : String(error); + + return { + success: false, + taskCount: 0, + briefId, + orgId, + error: { + code: 'EXPORT_FAILED', + message: errorMessage + } + }; + } + } + + /** + * Export tasks from a brief ID or URL + */ + async exportFromBriefInput(briefInput: string): Promise { + // Extract brief ID from input + const briefId = this.extractBriefId(briefInput); + if (!briefId) { + throw new TaskMasterError( + 'Invalid brief ID or URL provided', + ERROR_CODES.VALIDATION_ERROR + ); + } + + // Fetch brief to get organization + const brief = await this.authManager.getBrief(briefId); + if (!brief) { + throw new TaskMasterError( + 'Brief not found or you do not have access', + ERROR_CODES.NOT_FOUND + ); + } + + // Export with the resolved org and brief + return this.exportTasks({ + orgId: brief.accountId, + briefId: brief.id + }); + } + + /** + * Validate export context before prompting + */ + async validateContext(): Promise<{ + hasOrg: boolean; + hasBrief: boolean; + context: UserContext | null; + }> { + const context = this.authManager.getContext(); + + return { + hasOrg: !!context?.orgId, + hasBrief: !!context?.briefId, + context + }; + } + + /** + * Transform tasks for API bulk import format (flat structure) + */ + private transformTasksForBulkImport(tasks: Task[]): any[] { + const flatTasks: any[] = []; + + // Process each task and its subtasks + tasks.forEach((task) => { + // Add parent task + flatTasks.push({ + externalId: String(task.id), + title: task.title, + description: this.enrichDescription(task), + status: this.mapStatusForAPI(task.status), + priority: task.priority || 'medium', + dependencies: task.dependencies?.map(String) || [], + details: task.details, + testStrategy: task.testStrategy, + complexity: task.complexity, + metadata: { + complexity: task.complexity, + originalId: task.id, + originalDescription: task.description, + originalDetails: task.details, + originalTestStrategy: task.testStrategy + } + }); + + // Add subtasks if they exist + if (task.subtasks && task.subtasks.length > 0) { + task.subtasks.forEach((subtask) => { + flatTasks.push({ + externalId: `${task.id}.${subtask.id}`, + parentExternalId: String(task.id), + title: subtask.title, + description: this.enrichDescription(subtask), + status: this.mapStatusForAPI(subtask.status), + priority: subtask.priority || 'medium', + dependencies: + subtask.dependencies?.map((dep) => { + // Convert subtask dependencies to full ID format + if (String(dep).includes('.')) { + return String(dep); + } + return `${task.id}.${dep}`; + }) || [], + details: subtask.details, + testStrategy: subtask.testStrategy, + complexity: subtask.complexity, + metadata: { + complexity: subtask.complexity, + originalId: subtask.id, + originalDescription: subtask.description, + originalDetails: subtask.details, + originalTestStrategy: subtask.testStrategy + } + }); + }); + } + }); + + return flatTasks; + } + + /** + * Enrich task/subtask description with implementation details and test strategy + * Creates a comprehensive markdown-formatted description + */ + private enrichDescription(taskOrSubtask: Task | any): string { + const sections: string[] = []; + + // Start with original description if it exists + if (taskOrSubtask.description) { + sections.push(taskOrSubtask.description); + } + + // Add implementation details section + if (taskOrSubtask.details) { + sections.push('## Implementation Details\n'); + sections.push(taskOrSubtask.details); + } + + // Add test strategy section + if (taskOrSubtask.testStrategy) { + sections.push('## Test Strategy\n'); + sections.push(taskOrSubtask.testStrategy); + } + + // Join sections with double newlines for better markdown formatting + return sections.join('\n\n').trim() || 'No description provided'; + } + + /** + * Map internal status to API status format + */ + private mapStatusForAPI(status?: string): string { + switch (status) { + case 'pending': + return 'todo'; + case 'in-progress': + return 'in_progress'; + case 'done': + return 'done'; + default: + return 'todo'; + } + } + + /** + * Perform the actual export API call + */ + private async performExport( + orgId: string, + briefId: string, + tasks: any[] + ): Promise { + // Check if we should use the API endpoint or direct Supabase + const useAPIEndpoint = process.env.TM_PUBLIC_BASE_DOMAIN; + + if (useAPIEndpoint) { + // Use the new bulk import API endpoint + const apiUrl = `${process.env.TM_PUBLIC_BASE_DOMAIN}/ai/api/v1/briefs/${briefId}/tasks/bulk`; + + // Transform tasks to flat structure for API + const flatTasks = this.transformTasksForBulkImport(tasks); + + // Prepare request body + const requestBody = { + source: 'task-master-cli', + accountId: orgId, + options: { + dryRun: false, + stopOnError: false + }, + tasks: flatTasks + }; + + // Get auth token + const credentials = this.authManager.getCredentials(); + if (!credentials || !credentials.token) { + throw new Error('Not authenticated'); + } + + // Make API request + const response = await fetch(apiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${credentials.token}` + }, + body: JSON.stringify(requestBody) + }); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error( + `API request failed: ${response.status} - ${errorText}` + ); + } + + const result = (await response.json()) as BulkTasksResponse; + + if (result.failedCount > 0) { + const failedTasks = result.results + .filter((r) => !r.success) + .map((r) => `${r.externalId}: ${r.error}`) + .join(', '); + console.warn( + `Warning: ${result.failedCount} tasks failed to import: ${failedTasks}` + ); + } + + console.log( + `Successfully exported ${result.successCount} of ${result.totalTasks} tasks to brief ${briefId}` + ); + } else { + // Direct Supabase approach is no longer supported + // The extractTasks method has been removed from SupabaseTaskRepository + // as we now exclusively use the API endpoint for exports + throw new Error( + 'Export API endpoint not configured. Please set TM_PUBLIC_BASE_DOMAIN environment variable to enable task export.' + ); + } + } + + /** + * Extract a brief ID from raw input (ID or URL) + */ + private extractBriefId(input: string): string | null { + const raw = input?.trim() ?? ''; + if (!raw) return null; + + const parseUrl = (s: string): URL | null => { + try { + return new URL(s); + } catch {} + try { + return new URL(`https://${s}`); + } catch {} + return null; + }; + + const fromParts = (path: string): string | null => { + const parts = path.split('/').filter(Boolean); + const briefsIdx = parts.lastIndexOf('briefs'); + const candidate = + briefsIdx >= 0 && parts.length > briefsIdx + 1 + ? parts[briefsIdx + 1] + : parts[parts.length - 1]; + return candidate?.trim() || null; + }; + + // Try to parse as URL + const url = parseUrl(raw); + if (url) { + const qId = url.searchParams.get('id') || url.searchParams.get('briefId'); + const candidate = (qId || fromParts(url.pathname)) ?? null; + if (candidate) { + if (this.isLikelyId(candidate) || candidate.length >= 8) { + return candidate; + } + } + } + + // Check if it looks like a path without scheme + if (raw.includes('/')) { + const candidate = fromParts(raw); + if (candidate && (this.isLikelyId(candidate) || candidate.length >= 8)) { + return candidate; + } + } + + // Return as-is if it looks like an ID + if (this.isLikelyId(raw) || raw.length >= 8) { + return raw; + } + + return null; + } + + /** + * Check if a string looks like a brief ID (UUID-like) + */ + private isLikelyId(value: string): boolean { + const uuidRegex = + /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; + const ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i; + const slugRegex = /^[A-Za-z0-9_-]{16,}$/; + return ( + uuidRegex.test(value) || ulidRegex.test(value) || slugRegex.test(value) + ); + } +} diff --git a/packages/tm-core/src/services/index.ts b/packages/tm-core/src/services/index.ts index d436f950..004c472b 100644 --- a/packages/tm-core/src/services/index.ts +++ b/packages/tm-core/src/services/index.ts @@ -5,4 +5,9 @@ export { TaskService } from './task-service.js'; export { OrganizationService } from './organization.service.js'; +export { ExportService } from './export.service.js'; export type { Organization, Brief } from './organization.service.js'; +export type { + ExportTasksOptions, + ExportResult +} from './export.service.js'; diff --git a/packages/tm-core/src/services/task-service.ts b/packages/tm-core/src/services/task-service.ts index 2b050e29..60fb7d3c 100644 --- a/packages/tm-core/src/services/task-service.ts +++ b/packages/tm-core/src/services/task-service.ts @@ -14,6 +14,7 @@ import { ConfigManager } from '../config/config-manager.js'; import { StorageFactory } from '../storage/storage-factory.js'; import { TaskEntity } from '../entities/task.entity.js'; import { ERROR_CODES, TaskMasterError } from '../errors/task-master-error.js'; +import { getLogger } from '../logger/factory.js'; /** * Result returned by getTaskList @@ -51,6 +52,7 @@ export class TaskService { private configManager: ConfigManager; private storage: IStorage; private initialized = false; + private logger = getLogger('TaskService'); constructor(configManager: ConfigManager) { this.configManager = configManager; @@ -90,37 +92,76 @@ export class TaskService { const tag = options.tag || activeTag; try { - // Load raw tasks from storage - storage only knows about tags - const rawTasks = await this.storage.loadTasks(tag); + // Determine if we can push filters to storage layer + const canPushStatusFilter = + options.filter?.status && + !options.filter.priority && + !options.filter.tags && + !options.filter.assignee && + !options.filter.search && + options.filter.hasSubtasks === undefined; + + // Build storage-level options + const storageOptions: any = {}; + + // Push status filter to storage if it's the only filter + if (canPushStatusFilter) { + const statuses = Array.isArray(options.filter!.status) + ? options.filter!.status + : [options.filter!.status]; + // Only push single status to storage (multiple statuses need in-memory filtering) + if (statuses.length === 1) { + storageOptions.status = statuses[0]; + } + } + + // Push subtask exclusion to storage + if (options.includeSubtasks === false) { + storageOptions.excludeSubtasks = true; + } + + // Load tasks from storage with pushed-down filters + const rawTasks = await this.storage.loadTasks(tag, storageOptions); + + // Get total count without status filters, but preserve subtask exclusion + const baseOptions: any = {}; + if (options.includeSubtasks === false) { + baseOptions.excludeSubtasks = true; + } + + const allTasks = + storageOptions.status !== undefined + ? await this.storage.loadTasks(tag, baseOptions) + : rawTasks; // Convert to TaskEntity for business logic operations const taskEntities = TaskEntity.fromArray(rawTasks); - // Apply filters if provided + // Apply remaining filters in-memory if needed let filteredEntities = taskEntities; - if (options.filter) { + if (options.filter && !canPushStatusFilter) { + filteredEntities = this.applyFilters(taskEntities, options.filter); + } else if ( + options.filter?.status && + Array.isArray(options.filter.status) && + options.filter.status.length > 1 + ) { + // Multiple statuses - filter in-memory filteredEntities = this.applyFilters(taskEntities, options.filter); } // Convert back to plain objects - let tasks = filteredEntities.map((entity) => entity.toJSON()); - - // Handle subtasks option - if (options.includeSubtasks === false) { - tasks = tasks.map((task) => ({ - ...task, - subtasks: [] - })); - } + const tasks = filteredEntities.map((entity) => entity.toJSON()); return { tasks, - total: rawTasks.length, + total: allTasks.length, filtered: filteredEntities.length, tag: tag, // Return the actual tag being used (either explicitly provided or active tag) storageType: this.getStorageType() }; } catch (error) { + this.logger.error('Failed to get task list', error); throw new TaskMasterError( 'Failed to get task list', ERROR_CODES.INTERNAL_ERROR, @@ -397,16 +438,6 @@ export class TaskService { } } - // Complexity filter - if (filter.complexity) { - const complexities = Array.isArray(filter.complexity) - ? filter.complexity - : [filter.complexity]; - if (!task.complexity || !complexities.includes(task.complexity)) { - return false; - } - } - // Search filter if (filter.search) { const searchLower = filter.search.toLowerCase(); diff --git a/packages/tm-core/src/storage/api-storage.ts b/packages/tm-core/src/storage/api-storage.ts index b62c1e92..8a1fcd22 100644 --- a/packages/tm-core/src/storage/api-storage.ts +++ b/packages/tm-core/src/storage/api-storage.ts @@ -6,7 +6,8 @@ import type { IStorage, StorageStats, - UpdateStatusResult + UpdateStatusResult, + LoadTasksOptions } from '../interfaces/storage.interface.js'; import type { Task, @@ -16,7 +17,7 @@ import type { } from '../types/index.js'; import { ERROR_CODES, TaskMasterError } from '../errors/task-master-error.js'; import { TaskRepository } from '../repositories/task-repository.interface.js'; -import { SupabaseTaskRepository } from '../repositories/supabase-task-repository.js'; +import { SupabaseTaskRepository } from '../repositories/supabase/index.js'; import { SupabaseClient } from '@supabase/supabase-js'; import { AuthManager } from '../auth/auth-manager.js'; @@ -146,7 +147,7 @@ export class ApiStorage implements IStorage { * Load tasks from API * In our system, the tag parameter represents a brief ID */ - async loadTasks(tag?: string): Promise { + async loadTasks(tag?: string, options?: LoadTasksOptions): Promise { await this.ensureInitialized(); try { @@ -160,9 +161,9 @@ export class ApiStorage implements IStorage { ); } - // Load tasks from the current brief context + // Load tasks from the current brief context with filters pushed to repository const tasks = await this.retryOperation(() => - this.repository.getTasks(this.projectId) + this.repository.getTasks(this.projectId, options) ); // Update the tag cache with the loaded task IDs diff --git a/packages/tm-core/src/storage/file-storage/file-storage.ts b/packages/tm-core/src/storage/file-storage/file-storage.ts index b4349e4c..d3fe29fd 100644 --- a/packages/tm-core/src/storage/file-storage/file-storage.ts +++ b/packages/tm-core/src/storage/file-storage/file-storage.ts @@ -6,11 +6,13 @@ import type { Task, TaskMetadata, TaskStatus } from '../../types/index.js'; import type { IStorage, StorageStats, - UpdateStatusResult + UpdateStatusResult, + LoadTasksOptions } from '../../interfaces/storage.interface.js'; import { FormatHandler } from './format-handler.js'; import { FileOperations } from './file-operations.js'; import { PathResolver } from './path-resolver.js'; +import { ComplexityReportManager } from '../../reports/complexity-report-manager.js'; /** * File-based storage implementation using a single tasks.json file with separated concerns @@ -19,11 +21,13 @@ export class FileStorage implements IStorage { private formatHandler: FormatHandler; private fileOps: FileOperations; private pathResolver: PathResolver; + private complexityManager: ComplexityReportManager; constructor(projectPath: string) { this.formatHandler = new FormatHandler(); this.fileOps = new FileOperations(); this.pathResolver = new PathResolver(projectPath); + this.complexityManager = new ComplexityReportManager(projectPath); } /** @@ -87,14 +91,33 @@ export class FileStorage implements IStorage { /** * Load tasks from the single tasks.json file for a specific tag + * Enriches tasks with complexity data from the complexity report */ - async loadTasks(tag?: string): Promise { + async loadTasks(tag?: string, options?: LoadTasksOptions): Promise { const filePath = this.pathResolver.getTasksPath(); const resolvedTag = tag || 'master'; try { const rawData = await this.fileOps.readJson(filePath); - return this.formatHandler.extractTasks(rawData, resolvedTag); + let tasks = this.formatHandler.extractTasks(rawData, resolvedTag); + + // Apply filters if provided + if (options) { + // Filter by status if specified + if (options.status) { + tasks = tasks.filter((task) => task.status === options.status); + } + + // Exclude subtasks if specified + if (options.excludeSubtasks) { + tasks = tasks.map((task) => ({ + ...task, + subtasks: [] + })); + } + } + + return await this.enrichTasksWithComplexity(tasks, resolvedTag); } catch (error: any) { if (error.code === 'ENOENT') { return []; // File doesn't exist, return empty array @@ -465,8 +488,11 @@ export class FileStorage implements IStorage { const allDone = subs.every(isDoneLike); const anyInProgress = subs.some((s) => norm(s) === 'in-progress'); const anyDone = subs.some(isDoneLike); + const allPending = subs.every((s) => norm(s) === 'pending'); + if (allDone) parentNewStatus = 'done'; else if (anyInProgress || anyDone) parentNewStatus = 'in-progress'; + else if (allPending) parentNewStatus = 'pending'; } // Always bump updatedAt; update status only if changed @@ -593,6 +619,46 @@ export class FileStorage implements IStorage { await this.saveTasks(tasks, targetTag); } + + /** + * Enrich tasks with complexity data from the complexity report + * Private helper method called by loadTasks() + */ + private async enrichTasksWithComplexity( + tasks: Task[], + tag: string + ): Promise { + // Get all task IDs for bulk lookup + const taskIds = tasks.map((t) => t.id); + + // Load complexity data for all tasks at once (more efficient) + const complexityMap = await this.complexityManager.getComplexityForTasks( + taskIds, + tag + ); + + // If no complexity data found, return tasks as-is + if (complexityMap.size === 0) { + return tasks; + } + + // Enrich each task with its complexity data + return tasks.map((task) => { + const complexityData = complexityMap.get(String(task.id)); + if (!complexityData) { + return task; + } + + // Merge complexity data into the task + return { + ...task, + complexity: complexityData.complexityScore, + recommendedSubtasks: complexityData.recommendedSubtasks, + expansionPrompt: complexityData.expansionPrompt, + complexityReasoning: complexityData.complexityReasoning + }; + }); + } } // Export as default for convenience diff --git a/packages/tm-core/src/storage/storage-factory.ts b/packages/tm-core/src/storage/storage-factory.ts index a928f30a..34e5dcdd 100644 --- a/packages/tm-core/src/storage/storage-factory.ts +++ b/packages/tm-core/src/storage/storage-factory.ts @@ -82,7 +82,7 @@ export class StorageFactory { apiAccessToken: credentials.token, apiEndpoint: config.storage?.apiEndpoint || - process.env.HAMSTER_API_URL || + process.env.TM_PUBLIC_BASE_DOMAIN || 'https://tryhamster.com/api' }; config.storage = nextStorage; @@ -112,7 +112,7 @@ export class StorageFactory { apiAccessToken: credentials.token, apiEndpoint: config.storage?.apiEndpoint || - process.env.HAMSTER_API_URL || + process.env.TM_PUBLIC_BASE_DOMAIN || 'https://tryhamster.com/api' }; config.storage = nextStorage; diff --git a/packages/tm-core/src/task-master-core.ts b/packages/tm-core/src/task-master-core.ts index 47616d91..8b0d07ee 100644 --- a/packages/tm-core/src/task-master-core.ts +++ b/packages/tm-core/src/task-master-core.ts @@ -14,7 +14,14 @@ import { type StartTaskResult, type ConflictCheckResult } from './services/task-execution-service.js'; +import { + ExportService, + type ExportTasksOptions, + type ExportResult +} from './services/export.service.js'; +import { AuthManager } from './auth/auth-manager.js'; import { ERROR_CODES, TaskMasterError } from './errors/task-master-error.js'; +import type { UserContext } from './auth/types.js'; import type { IConfiguration } from './interfaces/configuration.interface.js'; import type { Task, @@ -47,6 +54,10 @@ export type { StartTaskResult, ConflictCheckResult } from './services/task-execution-service.js'; +export type { + ExportTasksOptions, + ExportResult +} from './services/export.service.js'; /** * TaskMasterCore facade class @@ -56,6 +67,7 @@ export class TaskMasterCore { private configManager: ConfigManager; private taskService: TaskService; private taskExecutionService: TaskExecutionService; + private exportService: ExportService; private executorService: ExecutorService | null = null; /** @@ -80,6 +92,7 @@ export class TaskMasterCore { this.configManager = null as any; this.taskService = null as any; this.taskExecutionService = null as any; + this.exportService = null as any; } /** @@ -109,6 +122,10 @@ export class TaskMasterCore { // Create task execution service this.taskExecutionService = new TaskExecutionService(this.taskService); + + // Create export service + const authManager = AuthManager.getInstance(); + this.exportService = new ExportService(this.configManager, authManager); } catch (error) { throw new TaskMasterError( 'Failed to initialize TaskMasterCore', @@ -242,6 +259,33 @@ export class TaskMasterCore { return this.taskExecutionService.getNextAvailableTask(); } + // ==================== Export Service Methods ==================== + + /** + * Export tasks to an external system (e.g., Hamster brief) + */ + async exportTasks(options: ExportTasksOptions): Promise { + return this.exportService.exportTasks(options); + } + + /** + * Export tasks from a brief ID or URL + */ + async exportFromBriefInput(briefInput: string): Promise { + return this.exportService.exportFromBriefInput(briefInput); + } + + /** + * Validate export context before prompting + */ + async validateExportContext(): Promise<{ + hasOrg: boolean; + hasBrief: boolean; + context: UserContext | null; + }> { + return this.exportService.validateContext(); + } + // ==================== Executor Service Methods ==================== /** diff --git a/packages/tm-core/src/types/index.ts b/packages/tm-core/src/types/index.ts index 4befc21e..de013fe8 100644 --- a/packages/tm-core/src/types/index.ts +++ b/packages/tm-core/src/types/index.ts @@ -72,14 +72,21 @@ export interface Task { actualEffort?: number; tags?: string[]; assignee?: string; - complexity?: TaskComplexity; + + // Complexity analysis (from complexity report) + // Can be either enum ('simple' | 'moderate' | 'complex' | 'very-complex') or numeric score (1-10) + complexity?: TaskComplexity | number; + recommendedSubtasks?: number; + expansionPrompt?: string; + complexityReasoning?: string; } /** - * Subtask interface extending Task with numeric ID + * Subtask interface extending Task + * ID can be number (file storage) or string (API storage with display_id) */ export interface Subtask extends Omit { - id: number; + id: number | string; parentId: string; subtasks?: never; // Subtasks cannot have their own subtasks } @@ -145,7 +152,6 @@ export interface TaskFilter { hasSubtasks?: boolean; search?: string; assignee?: string; - complexity?: TaskComplexity | TaskComplexity[]; } /** diff --git a/packages/tm-core/src/types/repository-types.ts b/packages/tm-core/src/types/repository-types.ts new file mode 100644 index 00000000..3afaac54 --- /dev/null +++ b/packages/tm-core/src/types/repository-types.ts @@ -0,0 +1,83 @@ +/** + * Type definitions for repository operations + */ +import { Database, Tables } from './database.types.js'; + +/** + * Task row from database with optional joined relations + */ +export interface TaskWithRelations extends Tables<'tasks'> { + document?: { + id: string; + document_name: string; + title: string; + description: string | null; + } | null; +} + +/** + * Dependency row with joined display_id + */ +export interface DependencyWithDisplayId { + task_id: string; + depends_on_task: { + display_id: string; + } | null; +} + +/** + * Task metadata structure + */ +export interface TaskMetadata { + details?: string; + testStrategy?: string; + [key: string]: unknown; // Allow additional fields but be explicit +} + +/** + * Database update payload for tasks + */ +export type TaskDatabaseUpdate = + Database['public']['Tables']['tasks']['Update']; +/** + * Configuration for task queries + */ +export interface TaskQueryConfig { + briefId: string; + includeSubtasks?: boolean; + includeDependencies?: boolean; + includeDocument?: boolean; +} + +/** + * Result of a task fetch operation + */ +export interface TaskFetchResult { + task: Tables<'tasks'>; + subtasks: Tables<'tasks'>[]; + dependencies: Map; +} + +/** + * Task validation errors + */ +export class TaskValidationError extends Error { + constructor( + message: string, + public readonly field: string, + public readonly value: unknown + ) { + super(message); + this.name = 'TaskValidationError'; + } +} + +/** + * Context validation errors + */ +export class ContextValidationError extends Error { + constructor(message: string) { + super(message); + this.name = 'ContextValidationError'; + } +} diff --git a/scripts/modules/ai-services-unified.js b/scripts/modules/ai-services-unified.js index e1ba0b6b..fea4713f 100644 --- a/scripts/modules/ai-services-unified.js +++ b/scripts/modules/ai-services-unified.js @@ -41,6 +41,7 @@ import { AzureProvider, BedrockAIProvider, ClaudeCodeProvider, + CodexCliProvider, GeminiCliProvider, GoogleAIProvider, GrokCliProvider, @@ -70,6 +71,7 @@ const PROVIDERS = { azure: new AzureProvider(), vertex: new VertexAIProvider(), 'claude-code': new ClaudeCodeProvider(), + 'codex-cli': new CodexCliProvider(), 'gemini-cli': new GeminiCliProvider(), 'grok-cli': new GrokCliProvider() }; @@ -93,31 +95,55 @@ function _getProvider(providerName) { // Helper function to get cost for a specific model function _getCostForModel(providerName, modelId) { - const DEFAULT_COST = { inputCost: 0, outputCost: 0, currency: 'USD' }; + const DEFAULT_COST = { + inputCost: 0, + outputCost: 0, + currency: 'USD', + isUnknown: false + }; if (!MODEL_MAP || !MODEL_MAP[providerName]) { log( 'warn', `Provider "${providerName}" not found in MODEL_MAP. Cannot determine cost for model ${modelId}.` ); - return DEFAULT_COST; + return { ...DEFAULT_COST, isUnknown: true }; } const modelData = MODEL_MAP[providerName].find((m) => m.id === modelId); - if (!modelData?.cost_per_1m_tokens) { + if (!modelData) { log( 'debug', - `Cost data not found for model "${modelId}" under provider "${providerName}". Assuming zero cost.` + `Model "${modelId}" not found under provider "${providerName}". Assuming unknown cost.` ); - return DEFAULT_COST; + return { ...DEFAULT_COST, isUnknown: true }; + } + + // Check if cost_per_1m_tokens is explicitly null (unknown pricing) + if (modelData.cost_per_1m_tokens === null) { + log( + 'debug', + `Cost data is null for model "${modelId}" under provider "${providerName}". Pricing unknown.` + ); + return { ...DEFAULT_COST, isUnknown: true }; + } + + // Check if cost_per_1m_tokens is missing/undefined (also unknown) + if (modelData.cost_per_1m_tokens === undefined) { + log( + 'debug', + `Cost data not found for model "${modelId}" under provider "${providerName}". Pricing unknown.` + ); + return { ...DEFAULT_COST, isUnknown: true }; } const costs = modelData.cost_per_1m_tokens; return { inputCost: costs.input || 0, outputCost: costs.output || 0, - currency: costs.currency || 'USD' + currency: costs.currency || 'USD', + isUnknown: false }; } @@ -867,8 +893,8 @@ async function logAiUsage({ const timestamp = new Date().toISOString(); const totalTokens = (inputTokens || 0) + (outputTokens || 0); - // Destructure currency along with costs - const { inputCost, outputCost, currency } = _getCostForModel( + // Destructure currency along with costs and unknown flag + const { inputCost, outputCost, currency, isUnknown } = _getCostForModel( providerName, modelId ); @@ -890,7 +916,8 @@ async function logAiUsage({ outputTokens: outputTokens || 0, totalTokens, totalCost, - currency // Add currency to the telemetry data + currency, // Add currency to the telemetry data + isUnknownCost: isUnknown // Flag to indicate if pricing is unknown }; if (getDebugFlag()) { diff --git a/scripts/modules/commands.js b/scripts/modules/commands.js index 9ea561f3..f9a45f67 100644 --- a/scripts/modules/commands.js +++ b/scripts/modules/commands.js @@ -12,17 +12,11 @@ import https from 'https'; import http from 'http'; import inquirer from 'inquirer'; import search from '@inquirer/search'; -import ora from 'ora'; // Import ora import { log, readJSON } from './utils.js'; -// Import new commands from @tm/cli +// Import command registry and utilities from @tm/cli import { - ListTasksCommand, - ShowCommand, - AuthCommand, - ContextCommand, - StartCommand, - SetStatusCommand, + registerAllCommands, checkForUpdate, performAutoUpdate, displayUpgradeNotification @@ -32,7 +26,6 @@ import { parsePRD, updateTasks, generateTaskFiles, - listTasks, expandTask, expandAllTasks, clearSubtasks, @@ -53,11 +46,7 @@ import { validateStrength } from './task-manager.js'; -import { - moveTasksBetweenTags, - MoveTaskError, - MOVE_ERROR_CODES -} from './task-manager/move-task.js'; +import { moveTasksBetweenTags } from './task-manager/move-task.js'; import { createTag, @@ -72,9 +61,7 @@ import { addDependency, removeDependency, validateDependenciesCommand, - fixDependenciesCommand, - DependencyError, - DEPENDENCY_ERROR_CODES + fixDependenciesCommand } from './dependency-manager.js'; import { @@ -103,7 +90,6 @@ import { displayBanner, displayHelp, displayNextTask, - displayTaskById, displayComplexityReport, getStatusWithColor, confirmTaskOverwrite, @@ -112,8 +98,6 @@ import { displayModelConfiguration, displayAvailableModels, displayApiKeyStatus, - displayAiUsageSummary, - displayMultipleTasksSummary, displayTaggedTasksFYI, displayCurrentTagIndicator, displayCrossTagDependencyError, @@ -137,10 +121,6 @@ import { setModel, getApiKeyStatusReport } from './task-manager/models.js'; -import { - isValidTaskStatus, - TASK_STATUS_OPTIONS -} from '../../src/constants/task-status.js'; import { isValidRulesAction, RULES_ACTIONS, @@ -1687,29 +1667,12 @@ function registerCommands(programInstance) { }); }); - // Register the set-status command from @tm/cli - // Handles task status updates with proper error handling and validation - SetStatusCommand.registerOn(programInstance); - - // NEW: Register the new list command from @tm/cli - // This command handles all its own configuration and logic - ListTasksCommand.registerOn(programInstance); - - // Register the auth command from @tm/cli - // Handles authentication with tryhamster.com - AuthCommand.registerOn(programInstance); - - // Register the context command from @tm/cli - // Manages workspace context (org/brief selection) - ContextCommand.registerOn(programInstance); - - // Register the show command from @tm/cli - // Displays detailed information about tasks - ShowCommand.registerOn(programInstance); - - // Register the start command from @tm/cli - // Starts working on a task by launching claude-code with a standardized prompt - StartCommand.registerOn(programInstance); + // ======================================== + // Register All Commands from @tm/cli + // ======================================== + // Use the centralized command registry to register all CLI commands + // This replaces individual command registrations and reduces duplication + registerAllCommands(programInstance); // expand command programInstance @@ -1847,7 +1810,7 @@ function registerCommands(programInstance) { ) .option( '-r, --research', - 'Use Perplexity AI for research-backed complexity analysis' + 'Use configured research model for research-backed complexity analysis' ) .option( '-i, --id ', @@ -3586,6 +3549,10 @@ ${result.result} '--gemini-cli', 'Allow setting a Gemini CLI model ID (use with --set-*)' ) + .option( + '--codex-cli', + 'Allow setting a Codex CLI model ID (use with --set-*)' + ) .addHelpText( 'after', ` @@ -3601,6 +3568,7 @@ Examples: $ task-master models --set-main gpt-4o --azure # Set custom Azure OpenAI model for main role $ task-master models --set-main claude-3-5-sonnet@20241022 --vertex # Set custom Vertex AI model for main role $ task-master models --set-main gemini-2.5-pro --gemini-cli # Set Gemini CLI model for main role + $ task-master models --set-main gpt-5-codex --codex-cli # Set Codex CLI model for main role $ task-master models --setup # Run interactive setup` ) .action(async (options) => { @@ -3617,12 +3585,13 @@ Examples: options.ollama, options.bedrock, options.claudeCode, - options.geminiCli + options.geminiCli, + options.codexCli ].filter(Boolean).length; if (providerFlags > 1) { console.error( chalk.red( - 'Error: Cannot use multiple provider flags (--openrouter, --ollama, --bedrock, --claude-code, --gemini-cli) simultaneously.' + 'Error: Cannot use multiple provider flags (--openrouter, --ollama, --bedrock, --claude-code, --gemini-cli, --codex-cli) simultaneously.' ) ); process.exit(1); @@ -3668,7 +3637,9 @@ Examples: ? 'claude-code' : options.geminiCli ? 'gemini-cli' - : undefined + : options.codexCli + ? 'codex-cli' + : undefined }); if (result.success) { console.log(chalk.green(`āœ… ${result.data.message}`)); @@ -3694,7 +3665,9 @@ Examples: ? 'claude-code' : options.geminiCli ? 'gemini-cli' - : undefined + : options.codexCli + ? 'codex-cli' + : undefined }); if (result.success) { console.log(chalk.green(`āœ… ${result.data.message}`)); @@ -3722,7 +3695,9 @@ Examples: ? 'claude-code' : options.geminiCli ? 'gemini-cli' - : undefined + : options.codexCli + ? 'codex-cli' + : undefined }); if (result.success) { console.log(chalk.green(`āœ… ${result.data.message}`)); diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 95a9f284..00f3ebf8 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -58,6 +58,7 @@ const DEFAULTS = { enableCodebaseAnalysis: true }, claudeCode: {}, + codexCli: {}, grokCli: { timeout: 120000, workingDirectory: null, @@ -138,6 +139,7 @@ function _loadAndValidateConfig(explicitRoot = null) { }, global: { ...defaults.global, ...parsedConfig?.global }, claudeCode: { ...defaults.claudeCode, ...parsedConfig?.claudeCode }, + codexCli: { ...defaults.codexCli, ...parsedConfig?.codexCli }, grokCli: { ...defaults.grokCli, ...parsedConfig?.grokCli } }; configSource = `file (${configPath})`; // Update source info @@ -184,6 +186,9 @@ function _loadAndValidateConfig(explicitRoot = null) { if (config.claudeCode && !isEmpty(config.claudeCode)) { config.claudeCode = validateClaudeCodeSettings(config.claudeCode); } + if (config.codexCli && !isEmpty(config.codexCli)) { + config.codexCli = validateCodexCliSettings(config.codexCli); + } } catch (error) { // Use console.error for actual errors during parsing console.error( @@ -310,6 +315,8 @@ function validateProviderModelCombination(providerName, modelId) { function validateClaudeCodeSettings(settings) { // Define the base settings schema without commandSpecific first const BaseSettingsSchema = z.object({ + pathToClaudeCodeExecutable: z.string().optional(), + // Use number().int() for integer validation in Zod maxTurns: z.number().int().positive().optional(), customSystemPrompt: z.string().optional(), appendSystemPrompt: z.string().optional(), @@ -325,19 +332,22 @@ function validateClaudeCodeSettings(settings) { type: z.enum(['stdio', 'sse']).optional(), command: z.string(), args: z.array(z.string()).optional(), - env: z.record(z.string()).optional(), - url: z.string().url().optional(), - headers: z.record(z.string()).optional() + env: z.record(z.string(), z.string()).optional(), + url: z.url().optional(), + headers: z.record(z.string(), z.string()).optional() }) ) .optional() }); - // Define CommandSpecificSchema using the base schema - const CommandSpecificSchema = z.record( - z.enum(AI_COMMAND_NAMES), - BaseSettingsSchema - ); + // Define CommandSpecificSchema using flexible keys, but restrict to known commands + const CommandSpecificSchema = z + .record(z.string(), BaseSettingsSchema) + .refine( + (obj) => + Object.keys(obj || {}).every((k) => AI_COMMAND_NAMES.includes(k)), + { message: 'Invalid command name in commandSpecific' } + ); // Define the full settings schema with commandSpecific const SettingsSchema = BaseSettingsSchema.extend({ @@ -361,6 +371,57 @@ function validateClaudeCodeSettings(settings) { return validatedSettings; } +/** + * Validates Codex CLI provider custom settings + * Mirrors the ai-sdk-provider-codex-cli options + * @param {object} settings The settings to validate + * @returns {object} The validated settings + */ +function validateCodexCliSettings(settings) { + const BaseSettingsSchema = z.object({ + codexPath: z.string().optional(), + cwd: z.string().optional(), + approvalMode: z + .enum(['untrusted', 'on-failure', 'on-request', 'never']) + .optional(), + sandboxMode: z + .enum(['read-only', 'workspace-write', 'danger-full-access']) + .optional(), + fullAuto: z.boolean().optional(), + dangerouslyBypassApprovalsAndSandbox: z.boolean().optional(), + skipGitRepoCheck: z.boolean().optional(), + color: z.enum(['always', 'never', 'auto']).optional(), + allowNpx: z.boolean().optional(), + outputLastMessageFile: z.string().optional(), + env: z.record(z.string(), z.string()).optional(), + verbose: z.boolean().optional(), + logger: z.union([z.object({}).passthrough(), z.literal(false)]).optional() + }); + + const CommandSpecificSchema = z + .record(z.string(), BaseSettingsSchema) + .refine( + (obj) => + Object.keys(obj || {}).every((k) => AI_COMMAND_NAMES.includes(k)), + { message: 'Invalid command name in commandSpecific' } + ); + + const SettingsSchema = BaseSettingsSchema.extend({ + commandSpecific: CommandSpecificSchema.optional() + }); + + try { + return SettingsSchema.parse(settings); + } catch (error) { + console.warn( + chalk.yellow( + `Warning: Invalid Codex CLI settings in config: ${error.message}. Falling back to default.` + ) + ); + return {}; + } +} + // --- Claude Code Settings Getters --- function getClaudeCodeSettings(explicitRoot = null, forceReload = false) { @@ -369,6 +430,23 @@ function getClaudeCodeSettings(explicitRoot = null, forceReload = false) { return { ...DEFAULTS.claudeCode, ...(config?.claudeCode || {}) }; } +// --- Codex CLI Settings Getters --- + +function getCodexCliSettings(explicitRoot = null, forceReload = false) { + const config = getConfig(explicitRoot, forceReload); + return { ...DEFAULTS.codexCli, ...(config?.codexCli || {}) }; +} + +function getCodexCliSettingsForCommand( + commandName, + explicitRoot = null, + forceReload = false +) { + const settings = getCodexCliSettings(explicitRoot, forceReload); + const commandSpecific = settings?.commandSpecific || {}; + return { ...settings, ...commandSpecific[commandName] }; +} + function getClaudeCodeSettingsForCommand( commandName, explicitRoot = null, @@ -486,7 +564,8 @@ function hasCodebaseAnalysis( return ( currentProvider === CUSTOM_PROVIDERS.CLAUDE_CODE || currentProvider === CUSTOM_PROVIDERS.GEMINI_CLI || - currentProvider === CUSTOM_PROVIDERS.GROK_CLI + currentProvider === CUSTOM_PROVIDERS.GROK_CLI || + currentProvider === CUSTOM_PROVIDERS.CODEX_CLI ); } @@ -716,7 +795,8 @@ function isApiKeySet(providerName, session = null, projectRoot = null) { CUSTOM_PROVIDERS.BEDROCK, CUSTOM_PROVIDERS.MCP, CUSTOM_PROVIDERS.GEMINI_CLI, - CUSTOM_PROVIDERS.GROK_CLI + CUSTOM_PROVIDERS.GROK_CLI, + CUSTOM_PROVIDERS.CODEX_CLI ]; if (providersWithoutApiKeys.includes(providerName?.toLowerCase())) { @@ -728,6 +808,11 @@ function isApiKeySet(providerName, session = null, projectRoot = null) { return true; // No API key needed } + // Codex CLI supports OAuth via codex login; API key optional + if (providerName?.toLowerCase() === 'codex-cli') { + return true; // Treat as OK even without key + } + const keyMap = { openai: 'OPENAI_API_KEY', anthropic: 'ANTHROPIC_API_KEY', @@ -831,6 +916,8 @@ function getMcpApiKeyStatus(providerName, projectRoot = null) { return true; // No key needed case 'claude-code': return true; // No key needed + case 'codex-cli': + return true; // OAuth/subscription via Codex CLI case 'mistral': apiKeyToCheck = mcpEnv.MISTRAL_API_KEY; placeholderValue = 'YOUR_MISTRAL_API_KEY_HERE'; @@ -1023,7 +1110,8 @@ export const providersWithoutApiKeys = [ CUSTOM_PROVIDERS.BEDROCK, CUSTOM_PROVIDERS.GEMINI_CLI, CUSTOM_PROVIDERS.GROK_CLI, - CUSTOM_PROVIDERS.MCP + CUSTOM_PROVIDERS.MCP, + CUSTOM_PROVIDERS.CODEX_CLI ]; export { @@ -1035,6 +1123,9 @@ export { // Claude Code settings getClaudeCodeSettings, getClaudeCodeSettingsForCommand, + // Codex CLI settings + getCodexCliSettings, + getCodexCliSettingsForCommand, // Grok CLI settings getGrokCliSettings, getGrokCliSettingsForCommand, @@ -1042,6 +1133,7 @@ export { validateProvider, validateProviderModelCombination, validateClaudeCodeSettings, + validateCodexCliSettings, VALIDATED_PROVIDERS, CUSTOM_PROVIDERS, ALL_PROVIDERS, diff --git a/scripts/modules/supported-models.json b/scripts/modules/supported-models.json index 54c5865e..2015d277 100644 --- a/scripts/modules/supported-models.json +++ b/scripts/modules/supported-models.json @@ -69,6 +69,30 @@ "supported": true } ], + "codex-cli": [ + { + "id": "gpt-5", + "swe_score": 0.749, + "cost_per_1m_tokens": { + "input": 0, + "output": 0 + }, + "allowed_roles": ["main", "fallback", "research"], + "max_tokens": 128000, + "supported": true + }, + { + "id": "gpt-5-codex", + "swe_score": 0.749, + "cost_per_1m_tokens": { + "input": 0, + "output": 0 + }, + "allowed_roles": ["main", "fallback", "research"], + "max_tokens": 128000, + "supported": true + } + ], "mcp": [ { "id": "mcp-sampling", @@ -522,7 +546,7 @@ "supported": true }, { - "id": "deep-research", + "id": "sonar-deep-research", "swe_score": 0.211, "cost_per_1m_tokens": { "input": 2, diff --git a/scripts/modules/task-manager/add-subtask.js b/scripts/modules/task-manager/add-subtask.js index ad03084c..3724cef7 100644 --- a/scripts/modules/task-manager/add-subtask.js +++ b/scripts/modules/task-manager/add-subtask.js @@ -1,8 +1,5 @@ -import path from 'path'; - import { log, readJSON, writeJSON, getCurrentTag } from '../utils.js'; import { isTaskDependentOn } from '../task-manager.js'; -import generateTaskFiles from './generate-task-files.js'; /** * Add a subtask to a parent task @@ -142,11 +139,7 @@ async function addSubtask( // Write the updated tasks back to the file with proper context writeJSON(tasksPath, data, projectRoot, tag); - // Generate task files if requested - if (generateFiles) { - log('info', 'Regenerating task files...'); - await generateTaskFiles(tasksPath, path.dirname(tasksPath), context); - } + // Note: Task file generation is no longer supported and has been removed return newSubtask; } catch (error) { diff --git a/scripts/modules/task-manager/add-task.js b/scripts/modules/task-manager/add-task.js index ea98f970..115bb8b8 100644 --- a/scripts/modules/task-manager/add-task.js +++ b/scripts/modules/task-manager/add-task.js @@ -2,7 +2,6 @@ import path from 'path'; import chalk from 'chalk'; import boxen from 'boxen'; import Table from 'cli-table3'; -import { z } from 'zod'; import Fuse from 'fuse.js'; // Import Fuse.js for advanced fuzzy search import { @@ -29,6 +28,7 @@ import { getDefaultPriority, hasCodebaseAnalysis } from '../config-manager.js'; import { getPromptManager } from '../prompt-manager.js'; import ContextGatherer from '../utils/contextGatherer.js'; import generateTaskFiles from './generate-task-files.js'; +import { COMMAND_SCHEMAS } from '../../../src/schemas/registry.js'; import { TASK_PRIORITY_OPTIONS, DEFAULT_TASK_PRIORITY, @@ -36,26 +36,6 @@ import { normalizeTaskPriority } from '../../../src/constants/task-priority.js'; -// Define Zod schema for the expected AI output object -const AiTaskDataSchema = z.object({ - title: z.string().describe('Clear, concise title for the task'), - description: z - .string() - .describe('A one or two sentence description of the task'), - details: z - .string() - .describe('In-depth implementation details, considerations, and guidance'), - testStrategy: z - .string() - .describe('Detailed approach for verifying task completion'), - dependencies: z - .array(z.number()) - .nullable() - .describe( - 'Array of task IDs that this task depends on (must be completed before this task can start)' - ) -}); - /** * Get all tasks from all tags * @param {Object} rawData - The raw tagged data object @@ -451,7 +431,7 @@ async function addTask( role: serviceRole, session: session, projectRoot: projectRoot, - schema: AiTaskDataSchema, + schema: COMMAND_SCHEMAS['add-task'], objectName: 'newTaskData', systemPrompt: systemPrompt, prompt: userPrompt, diff --git a/scripts/modules/task-manager/analyze-task-complexity.js b/scripts/modules/task-manager/analyze-task-complexity.js index af0e97ed..f5db81cc 100644 --- a/scripts/modules/task-manager/analyze-task-complexity.js +++ b/scripts/modules/task-manager/analyze-task-complexity.js @@ -11,7 +11,8 @@ import { displayAiUsageSummary } from '../ui.js'; -import { generateTextService } from '../ai-services-unified.js'; +import { generateObjectService } from '../ai-services-unified.js'; +import { COMMAND_SCHEMAS } from '../../../src/schemas/registry.js'; import { getDebugFlag, @@ -29,46 +30,6 @@ import { ContextGatherer } from '../utils/contextGatherer.js'; import { FuzzyTaskSearch } from '../utils/fuzzyTaskSearch.js'; import { flattenTasksWithSubtasks } from '../utils.js'; -/** - * Generates the prompt for complexity analysis. - * (Moved from ai-services.js and simplified) - * @param {Object} tasksData - The tasks data object. - * @param {string} [gatheredContext] - The gathered context for the analysis. - * @returns {string} The generated prompt. - */ -function generateInternalComplexityAnalysisPrompt( - tasksData, - gatheredContext = '' -) { - const tasksString = JSON.stringify(tasksData.tasks, null, 2); - let prompt = `Analyze the following tasks to determine their complexity (1-10 scale) and recommend the number of subtasks for expansion. Provide a brief reasoning and an initial expansion prompt for each. - -Tasks: -${tasksString}`; - - if (gatheredContext) { - prompt += `\n\n# Project Context\n\n${gatheredContext}`; - } - - prompt += ` - -Respond ONLY with a valid JSON array matching the schema: -[ - { - "taskId": , - "taskTitle": "", - "complexityScore": , - "recommendedSubtasks": , - "expansionPrompt": "", - "reasoning": "" - }, - ... -] - -Do not include any explanatory text, markdown formatting, or code block markers before or after the JSON array.`; - return prompt; -} - /** * Analyzes task complexity and generates expansion recommendations * @param {Object} options Command options @@ -446,12 +407,14 @@ async function analyzeTaskComplexity(options, context = {}) { try { const role = useResearch ? 'research' : 'main'; - aiServiceResponse = await generateTextService({ + aiServiceResponse = await generateObjectService({ prompt, systemPrompt, role, session, projectRoot, + schema: COMMAND_SCHEMAS['analyze-complexity'], + objectName: 'complexityAnalysis', commandName: 'analyze-complexity', outputType: mcpLog ? 'mcp' : 'cli' }); @@ -463,63 +426,15 @@ async function analyzeTaskComplexity(options, context = {}) { if (outputFormat === 'text') { readline.clearLine(process.stdout, 0); readline.cursorTo(process.stdout, 0); - console.log( - chalk.green('AI service call complete. Parsing response...') - ); + console.log(chalk.green('AI service call complete.')); } - reportLog('Parsing complexity analysis from text response...', 'info'); - try { - let cleanedResponse = aiServiceResponse.mainResult; - cleanedResponse = cleanedResponse.trim(); - - const codeBlockMatch = cleanedResponse.match( - /```(?:json)?\s*([\s\S]*?)\s*```/ - ); - if (codeBlockMatch) { - cleanedResponse = codeBlockMatch[1].trim(); - } else { - const firstBracket = cleanedResponse.indexOf('['); - const lastBracket = cleanedResponse.lastIndexOf(']'); - if (firstBracket !== -1 && lastBracket > firstBracket) { - cleanedResponse = cleanedResponse.substring( - firstBracket, - lastBracket + 1 - ); - } else { - reportLog( - 'Warning: Response does not appear to be a JSON array.', - 'warn' - ); - } - } - - if (outputFormat === 'text' && getDebugFlag(session)) { - console.log(chalk.gray('Attempting to parse cleaned JSON...')); - console.log(chalk.gray('Cleaned response (first 100 chars):')); - console.log(chalk.gray(cleanedResponse.substring(0, 100))); - console.log(chalk.gray('Last 100 chars:')); - console.log( - chalk.gray(cleanedResponse.substring(cleanedResponse.length - 100)) - ); - } - - complexityAnalysis = JSON.parse(cleanedResponse); - } catch (parseError) { - if (loadingIndicator) stopLoadingIndicator(loadingIndicator); - reportLog( - `Error parsing complexity analysis JSON: ${parseError.message}`, - 'error' - ); - if (outputFormat === 'text') { - console.error( - chalk.red( - `Error parsing complexity analysis JSON: ${parseError.message}` - ) - ); - } - throw parseError; - } + // With generateObject, we get structured data directly + complexityAnalysis = aiServiceResponse.mainResult.complexityAnalysis; + reportLog( + `Received ${complexityAnalysis.length} complexity analyses from AI.`, + 'info' + ); const taskIds = tasksData.tasks.map((t) => t.id); const analysisTaskIds = complexityAnalysis.map((a) => a.taskId); diff --git a/scripts/modules/task-manager/expand-task.js b/scripts/modules/task-manager/expand-task.js index 05b33b62..5ad7891a 100644 --- a/scripts/modules/task-manager/expand-task.js +++ b/scripts/modules/task-manager/expand-task.js @@ -1,22 +1,22 @@ import fs from 'fs'; import path from 'path'; -import { z } from 'zod'; import { + getTagAwareFilePath, + isSilentMode, log, readJSON, - writeJSON, - isSilentMode, - getTagAwareFilePath + writeJSON } from '../utils.js'; import { + displayAiUsageSummary, startLoadingIndicator, - stopLoadingIndicator, - displayAiUsageSummary + stopLoadingIndicator } from '../ui.js'; -import { generateTextService } from '../ai-services-unified.js'; +import { COMMAND_SCHEMAS } from '../../../src/schemas/registry.js'; +import { generateObjectService } from '../ai-services-unified.js'; import { getDefaultSubtasks, @@ -24,265 +24,12 @@ import { hasCodebaseAnalysis } from '../config-manager.js'; import { getPromptManager } from '../prompt-manager.js'; -import generateTaskFiles from './generate-task-files.js'; -import { COMPLEXITY_REPORT_FILE } from '../../../src/constants/paths.js'; +import { findProjectRoot, flattenTasksWithSubtasks } from '../utils.js'; import { ContextGatherer } from '../utils/contextGatherer.js'; import { FuzzyTaskSearch } from '../utils/fuzzyTaskSearch.js'; -import { flattenTasksWithSubtasks, findProjectRoot } from '../utils.js'; - -// --- Zod Schemas (Keep from previous step) --- -const subtaskSchema = z - .object({ - id: z - .number() - .int() - .positive() - .describe('Sequential subtask ID starting from 1'), - title: z.string().min(5).describe('Clear, specific title for the subtask'), - description: z - .string() - .min(10) - .describe('Detailed description of the subtask'), - dependencies: z - .array(z.string()) - .describe( - 'Array of subtask dependencies within the same parent task. Use format ["parentTaskId.1", "parentTaskId.2"]. Subtasks can only depend on siblings, not external tasks.' - ), - details: z.string().min(20).describe('Implementation details and guidance'), - status: z - .string() - .describe( - 'The current status of the subtask (should be pending initially)' - ), - testStrategy: z - .string() - .nullable() - .describe('Approach for testing this subtask') - .default('') - }) - .strict(); -const subtaskArraySchema = z.array(subtaskSchema); -const subtaskWrapperSchema = z.object({ - subtasks: subtaskArraySchema.describe('The array of generated subtasks.') -}); -// --- End Zod Schemas --- /** - * Parse subtasks from AI's text response. Includes basic cleanup. - * @param {string} text - Response text from AI. - * @param {number} startId - Starting subtask ID expected. - * @param {number} expectedCount - Expected number of subtasks. - * @param {number} parentTaskId - Parent task ID for context. - * @param {Object} logger - Logging object (mcpLog or console log). - * @returns {Array} Parsed and potentially corrected subtasks array. - * @throws {Error} If parsing fails or JSON is invalid/malformed. - */ -function parseSubtasksFromText( - text, - startId, - expectedCount, - parentTaskId, - logger -) { - if (typeof text !== 'string') { - logger.error( - `AI response text is not a string. Received type: ${typeof text}, Value: ${text}` - ); - throw new Error('AI response text is not a string.'); - } - - if (!text || text.trim() === '') { - throw new Error('AI response text is empty after trimming.'); - } - - const originalTrimmedResponse = text.trim(); // Store the original trimmed response - let jsonToParse = originalTrimmedResponse; // Initialize jsonToParse with it - - logger.debug( - `Original AI Response for parsing (full length: ${jsonToParse.length}): ${jsonToParse.substring(0, 1000)}...` - ); - - // --- Pre-emptive cleanup for known AI JSON issues --- - // Fix for "dependencies": , or "dependencies":, - if (jsonToParse.includes('"dependencies":')) { - const malformedPattern = /"dependencies":\s*,/g; - if (malformedPattern.test(jsonToParse)) { - logger.warn('Attempting to fix malformed "dependencies": , issue.'); - jsonToParse = jsonToParse.replace( - malformedPattern, - '"dependencies": [],' - ); - logger.debug( - `JSON after fixing "dependencies": ${jsonToParse.substring(0, 500)}...` - ); - } - } - // --- End pre-emptive cleanup --- - - let parsedObject; - let primaryParseAttemptFailed = false; - - // --- Attempt 1: Simple Parse (with optional Markdown cleanup) --- - logger.debug('Attempting simple parse...'); - try { - // Check for markdown code block - const codeBlockMatch = jsonToParse.match(/```(?:json)?\s*([\s\S]*?)\s*```/); - let contentToParseDirectly = jsonToParse; - if (codeBlockMatch && codeBlockMatch[1]) { - contentToParseDirectly = codeBlockMatch[1].trim(); - logger.debug('Simple parse: Extracted content from markdown code block.'); - } else { - logger.debug( - 'Simple parse: No markdown code block found, using trimmed original.' - ); - } - - parsedObject = JSON.parse(contentToParseDirectly); - logger.debug('Simple parse successful!'); - - // Quick check if it looks like our target object - if ( - !parsedObject || - typeof parsedObject !== 'object' || - !Array.isArray(parsedObject.subtasks) - ) { - logger.warn( - 'Simple parse succeeded, but result is not the expected {"subtasks": []} structure. Will proceed to advanced extraction.' - ); - primaryParseAttemptFailed = true; - parsedObject = null; // Reset parsedObject so we enter the advanced logic - } - // If it IS the correct structure, we'll skip advanced extraction. - } catch (e) { - logger.warn( - `Simple parse failed: ${e.message}. Proceeding to advanced extraction logic.` - ); - primaryParseAttemptFailed = true; - // jsonToParse is already originalTrimmedResponse if simple parse failed before modifying it for markdown - } - - // --- Attempt 2: Advanced Extraction (if simple parse failed or produced wrong structure) --- - if (primaryParseAttemptFailed || !parsedObject) { - // Ensure we try advanced if simple parse gave wrong structure - logger.debug('Attempting advanced extraction logic...'); - // Reset jsonToParse to the original full trimmed response for advanced logic - jsonToParse = originalTrimmedResponse; - - // (Insert the more complex extraction logic here - the one we worked on with: - // - targetPattern = '{"subtasks":'; - // - careful brace counting for that targetPattern - // - fallbacks to last '{' and '}' if targetPattern logic fails) - // This was the logic from my previous message. Let's assume it's here. - // This block should ultimately set `jsonToParse` to the best candidate string. - - // Example snippet of that advanced logic's start: - const targetPattern = '{"subtasks":'; - const patternStartIndex = jsonToParse.indexOf(targetPattern); - - if (patternStartIndex !== -1) { - const openBraces = 0; - const firstBraceFound = false; - const extractedJsonBlock = ''; - // ... (loop for brace counting as before) ... - // ... (if successful, jsonToParse = extractedJsonBlock) ... - // ... (if that fails, fallbacks as before) ... - } else { - // ... (fallback to last '{' and '}' if targetPattern not found) ... - } - // End of advanced logic excerpt - - logger.debug( - `Advanced extraction: JSON string that will be parsed: ${jsonToParse.substring(0, 500)}...` - ); - try { - parsedObject = JSON.parse(jsonToParse); - logger.debug('Advanced extraction parse successful!'); - } catch (parseError) { - logger.error( - `Advanced extraction: Failed to parse JSON object: ${parseError.message}` - ); - logger.error( - `Advanced extraction: Problematic JSON string for parse (first 500 chars): ${jsonToParse.substring(0, 500)}` - ); - throw new Error( - // Re-throw a more specific error if advanced also fails - `Failed to parse JSON response object after both simple and advanced attempts: ${parseError.message}` - ); - } - } - - // --- Validation (applies to successfully parsedObject from either attempt) --- - if ( - !parsedObject || - typeof parsedObject !== 'object' || - !Array.isArray(parsedObject.subtasks) - ) { - logger.error( - `Final parsed content is not an object or missing 'subtasks' array. Content: ${JSON.stringify(parsedObject).substring(0, 200)}` - ); - throw new Error( - 'Parsed AI response is not a valid object containing a "subtasks" array after all attempts.' - ); - } - const parsedSubtasks = parsedObject.subtasks; - - if (expectedCount && parsedSubtasks.length !== expectedCount) { - logger.warn( - `Expected ${expectedCount} subtasks, but parsed ${parsedSubtasks.length}.` - ); - } - - let currentId = startId; - const validatedSubtasks = []; - const validationErrors = []; - - for (const rawSubtask of parsedSubtasks) { - const correctedSubtask = { - ...rawSubtask, - id: currentId, - dependencies: Array.isArray(rawSubtask.dependencies) - ? rawSubtask.dependencies.filter( - (dep) => - typeof dep === 'string' && dep.startsWith(`${parentTaskId}.`) - ) - : [], - status: 'pending' - }; - - const result = subtaskSchema.safeParse(correctedSubtask); - - if (result.success) { - validatedSubtasks.push(result.data); - } else { - logger.warn( - `Subtask validation failed for raw data: ${JSON.stringify(rawSubtask).substring(0, 100)}...` - ); - result.error.errors.forEach((err) => { - const errorMessage = ` - Field '${err.path.join('.')}': ${err.message}`; - logger.warn(errorMessage); - validationErrors.push(`Subtask ${currentId}: ${errorMessage}`); - }); - } - currentId++; - } - - if (validationErrors.length > 0) { - logger.error( - `Found ${validationErrors.length} validation errors in the generated subtasks.` - ); - logger.warn('Proceeding with only the successfully validated subtasks.'); - } - - if (validatedSubtasks.length === 0 && parsedSubtasks.length > 0) { - throw new Error( - 'AI response contained potential subtasks, but none passed validation.' - ); - } - return validatedSubtasks.slice(0, expectedCount || validatedSubtasks.length); -} - -/** - * Expand a task into subtasks using the unified AI service (generateTextService). + * Expand a task into subtasks using the unified AI service (generateObjectService). * Appends new subtasks by default. Replaces existing subtasks if force=true. * Integrates complexity report to determine subtask count and prompt if available, * unless numSubtasks is explicitly provided. @@ -450,6 +197,10 @@ async function expandTask( } // Determine prompt content AND system prompt + // Calculate the next subtask ID to match current behavior: + // - Start from the number of existing subtasks + 1 + // - This creates sequential IDs: 1, 2, 3, 4... + // - Display format shows as parentTaskId.subtaskId (e.g., "1.1", "1.2", "2.1") const nextSubtaskId = (task.subtasks?.length || 0) + 1; // Load prompts using PromptManager @@ -510,7 +261,6 @@ async function expandTask( hasCodebaseAnalysis: hasCodebaseAnalysisCapability, projectRoot: projectRoot || '' }; - let variantKey = 'default'; if (expansionPromptText) { variantKey = 'complexity-report'; @@ -540,7 +290,7 @@ async function expandTask( ); // --- End Complexity Report / Prompt Logic --- - // --- AI Subtask Generation using generateTextService --- + // --- AI Subtask Generation using generateObjectService --- let generatedSubtasks = []; let loadingIndicator = null; if (outputFormat === 'text') { @@ -549,48 +299,36 @@ async function expandTask( ); } - let responseText = ''; let aiServiceResponse = null; - try { const role = useResearch ? 'research' : 'main'; - // Call generateTextService with the determined prompts and telemetry params - aiServiceResponse = await generateTextService({ + // Call generateObjectService with the determined prompts and telemetry params + aiServiceResponse = await generateObjectService({ prompt: promptContent, systemPrompt: systemPrompt, role, session, projectRoot, + schema: COMMAND_SCHEMAS['expand-task'], + objectName: 'subtasks', commandName: 'expand-task', outputType: outputFormat }); - responseText = aiServiceResponse.mainResult; - // Parse Subtasks - generatedSubtasks = parseSubtasksFromText( - responseText, - nextSubtaskId, - finalSubtaskCount, - task.id, - logger - ); - logger.info( - `Successfully parsed ${generatedSubtasks.length} subtasks from AI response.` - ); + // With generateObject, we expect structured data – verify it before use + const mainResult = aiServiceResponse?.mainResult; + if (!mainResult || !Array.isArray(mainResult.subtasks)) { + throw new Error('AI response did not include a valid subtasks array.'); + } + generatedSubtasks = mainResult.subtasks; + logger.info(`Received ${generatedSubtasks.length} subtasks from AI.`); } catch (error) { if (loadingIndicator) stopLoadingIndicator(loadingIndicator); logger.error( `Error during AI call or parsing for task ${taskId}: ${error.message}`, // Added task ID context 'error' ); - // Log raw response in debug mode if parsing failed - if ( - error.message.includes('Failed to parse valid subtasks') && - getDebugFlag(session) - ) { - logger.error(`Raw AI Response that failed parsing:\n${responseText}`); - } throw error; } finally { if (loadingIndicator) stopLoadingIndicator(loadingIndicator); diff --git a/scripts/modules/task-manager/models.js b/scripts/modules/task-manager/models.js index d3b06119..0f28bc73 100644 --- a/scripts/modules/task-manager/models.js +++ b/scripts/modules/task-manager/models.js @@ -539,6 +539,22 @@ async function setModel(role, modelId, options = {}) { warningMessage = `Warning: Gemini CLI model '${modelId}' not found in supported models. Setting without validation.`; report('warn', warningMessage); } + } else if (providerHint === CUSTOM_PROVIDERS.CODEX_CLI) { + // Codex CLI provider - enforce supported model list + determinedProvider = CUSTOM_PROVIDERS.CODEX_CLI; + const codexCliModels = availableModels.filter( + (m) => m.provider === 'codex-cli' + ); + const codexCliModelData = codexCliModels.find( + (m) => m.id === modelId + ); + if (codexCliModelData) { + modelData = codexCliModelData; + report('info', `Setting Codex CLI model '${modelId}'.`); + } else { + warningMessage = `Warning: Codex CLI model '${modelId}' not found in supported models. Setting without validation.`; + report('warn', warningMessage); + } } else { // Invalid provider hint - should not happen with our constants throw new Error(`Invalid provider hint received: ${providerHint}`); @@ -559,7 +575,7 @@ async function setModel(role, modelId, options = {}) { success: false, error: { code: 'MODEL_NOT_FOUND_NO_HINT', - message: `Model ID "${modelId}" not found in Taskmaster's supported models. If this is a custom model, please specify the provider using --openrouter, --ollama, --bedrock, --azure, or --vertex.` + message: `Model ID "${modelId}" not found in Taskmaster's supported models. If this is a custom model, please specify the provider using --openrouter, --ollama, --bedrock, --azure, --vertex, --gemini-cli, or --codex-cli.` } }; } diff --git a/scripts/modules/task-manager/move-task.js b/scripts/modules/task-manager/move-task.js index a9377503..20cedec5 100644 --- a/scripts/modules/task-manager/move-task.js +++ b/scripts/modules/task-manager/move-task.js @@ -6,7 +6,6 @@ import { setTasksForTag, traverseDependencies } from '../utils.js'; -import generateTaskFiles from './generate-task-files.js'; import { findCrossTagDependencies, getDependentTaskIds, @@ -142,13 +141,7 @@ async function moveTask( results.push(result); } - // Generate files once at the end if requested - if (generateFiles) { - await generateTaskFiles(tasksPath, path.dirname(tasksPath), { - tag: tag, - projectRoot: projectRoot - }); - } + // Note: Task file generation is no longer supported and has been removed return { message: `Successfully moved ${sourceIds.length} tasks/subtasks`, @@ -209,12 +202,7 @@ async function moveTask( // The writeJSON function will filter out _rawTaggedData automatically writeJSON(tasksPath, rawData, options.projectRoot, tag); - if (generateFiles) { - await generateTaskFiles(tasksPath, path.dirname(tasksPath), { - tag: tag, - projectRoot: projectRoot - }); - } + // Note: Task file generation is no longer supported and has been removed return result; } diff --git a/scripts/modules/task-manager/remove-subtask.js b/scripts/modules/task-manager/remove-subtask.js index 5f096c05..7677f32c 100644 --- a/scripts/modules/task-manager/remove-subtask.js +++ b/scripts/modules/task-manager/remove-subtask.js @@ -1,6 +1,4 @@ -import path from 'path'; import { log, readJSON, writeJSON } from '../utils.js'; -import generateTaskFiles from './generate-task-files.js'; /** * Remove a subtask from its parent task @@ -108,11 +106,7 @@ async function removeSubtask( // Write the updated tasks back to the file with proper context writeJSON(tasksPath, data, projectRoot, tag); - // Generate task files if requested - if (generateFiles) { - log('info', 'Regenerating task files...'); - await generateTaskFiles(tasksPath, path.dirname(tasksPath), context); - } + // Note: Task file generation is no longer supported and has been removed return convertedTask; } catch (error) { diff --git a/scripts/modules/task-manager/scope-adjustment.js b/scripts/modules/task-manager/scope-adjustment.js index cb1558ba..41fd33ba 100644 --- a/scripts/modules/task-manager/scope-adjustment.js +++ b/scripts/modules/task-manager/scope-adjustment.js @@ -355,7 +355,7 @@ Ensure the JSON is valid and properly formatted.`; const subtaskSchema = z.object({ subtasks: z.array( z.object({ - id: z.number().int().positive(), + id: z.int().positive(), title: z.string().min(5), description: z.string().min(10), dependencies: z.array(z.string()), @@ -386,14 +386,44 @@ Ensure the JSON is valid and properly formatted.`; testStrategy: subtask.testStrategy || '' })); + // Ensure new subtasks have unique sequential IDs after the preserved ones + const maxPreservedId = preservedSubtasks.reduce( + (max, st) => Math.max(max, st.id || 0), + 0 + ); + let nextId = maxPreservedId + 1; + const idMapping = new Map(); + const normalizedGeneratedSubtasks = processedGeneratedSubtasks + .map((st) => { + const originalId = st.id; + const newId = nextId++; + idMapping.set(originalId, newId); + return { + ...st, + id: newId + }; + }) + .map((st) => ({ + ...st, + dependencies: (st.dependencies || []).map((dep) => { + if (typeof dep !== 'string' || !dep.startsWith(`${task.id}.`)) { + return dep; + } + const [, siblingIdPart] = dep.split('.'); + const originalSiblingId = Number.parseInt(siblingIdPart, 10); + const remappedSiblingId = idMapping.get(originalSiblingId); + return remappedSiblingId ? `${task.id}.${remappedSiblingId}` : dep; + }) + })); + // Update task with preserved subtasks + newly generated ones - task.subtasks = [...preservedSubtasks, ...processedGeneratedSubtasks]; + task.subtasks = [...preservedSubtasks, ...normalizedGeneratedSubtasks]; return { updatedTask: task, regenerated: true, preserved: preservedSubtasks.length, - generated: processedGeneratedSubtasks.length + generated: normalizedGeneratedSubtasks.length }; } catch (error) { log( diff --git a/scripts/modules/task-manager/tag-management.js b/scripts/modules/task-manager/tag-management.js index c17f7068..a4abd183 100644 --- a/scripts/modules/task-manager/tag-management.js +++ b/scripts/modules/task-manager/tag-management.js @@ -619,9 +619,29 @@ async function tags( headers.push(chalk.cyan.bold('Description')); } + // Calculate dynamic column widths based on terminal width + const terminalWidth = Math.max(process.stdout.columns || 120, 80); + const usableWidth = Math.floor(terminalWidth * 0.95); + + let colWidths; + if (showMetadata) { + // With metadata: Tag Name, Tasks, Completed, Created, Description + const widths = [0.25, 0.1, 0.12, 0.15, 0.38]; + colWidths = widths.map((w, i) => + Math.max(Math.floor(usableWidth * w), i === 0 ? 15 : 8) + ); + } else { + // Without metadata: Tag Name, Tasks, Completed + const widths = [0.7, 0.15, 0.15]; + colWidths = widths.map((w, i) => + Math.max(Math.floor(usableWidth * w), i === 0 ? 20 : 10) + ); + } + const table = new Table({ head: headers, - colWidths: showMetadata ? [20, 10, 12, 15, 50] : [25, 10, 12] + colWidths: colWidths, + wordWrap: true }); // Add rows diff --git a/scripts/modules/task-manager/update-task-by-id.js b/scripts/modules/task-manager/update-task-by-id.js index 1a1612c8..e7f537f4 100644 --- a/scripts/modules/task-manager/update-task-by-id.js +++ b/scripts/modules/task-manager/update-task-by-id.js @@ -3,7 +3,6 @@ import path from 'path'; import chalk from 'chalk'; import boxen from 'boxen'; import Table from 'cli-table3'; -import { z } from 'zod'; // Keep Zod for post-parse validation import { log as consoleLog, @@ -22,7 +21,11 @@ import { displayAiUsageSummary } from '../ui.js'; -import { generateTextService } from '../ai-services-unified.js'; +import { + generateTextService, + generateObjectService +} from '../ai-services-unified.js'; +import { COMMAND_SCHEMAS } from '../../../src/schemas/registry.js'; import { getDebugFlag, isApiKeySet, @@ -32,229 +35,6 @@ import { getPromptManager } from '../prompt-manager.js'; import { ContextGatherer } from '../utils/contextGatherer.js'; import { FuzzyTaskSearch } from '../utils/fuzzyTaskSearch.js'; -// Zod schema for post-parsing validation of the updated task object -const updatedTaskSchema = z - .object({ - id: z.number().int(), - title: z.string(), // Title should be preserved, but check it exists - description: z.string(), - status: z.string(), - dependencies: z.array(z.union([z.number().int(), z.string()])), - priority: z.string().nullable().default('medium'), - details: z.string().nullable().default(''), - testStrategy: z.string().nullable().default(''), - subtasks: z - .array( - z.object({ - id: z - .number() - .int() - .positive() - .describe('Sequential subtask ID starting from 1'), - title: z.string(), - description: z.string(), - status: z.string(), - dependencies: z.array(z.number().int()).nullable().default([]), - details: z.string().nullable().default(''), - testStrategy: z.string().nullable().default('') - }) - ) - .nullable() - .default([]) - }) - .strip(); // Allows parsing even if AI adds extra fields, but validation focuses on schema - -/** - * Parses a single updated task object from AI's text response. - * @param {string} text - Response text from AI. - * @param {number} expectedTaskId - The ID of the task expected. - * @param {Function | Object} logFn - Logging function or MCP logger. - * @param {boolean} isMCP - Flag indicating MCP context. - * @returns {Object} Parsed and validated task object. - * @throws {Error} If parsing or validation fails. - */ -function parseUpdatedTaskFromText(text, expectedTaskId, logFn, isMCP) { - // Report helper consistent with the established pattern - const report = (level, ...args) => { - if (isMCP) { - if (typeof logFn[level] === 'function') logFn[level](...args); - else logFn.info(...args); - } else if (!isSilentMode()) { - logFn(level, ...args); - } - }; - - report( - 'info', - 'Attempting to parse updated task object from text response...' - ); - if (!text || text.trim() === '') - throw new Error('AI response text is empty.'); - - let cleanedResponse = text.trim(); - const originalResponseForDebug = cleanedResponse; - let parseMethodUsed = 'raw'; // Keep track of which method worked - - // --- NEW Step 1: Try extracting between {} first --- - const firstBraceIndex = cleanedResponse.indexOf('{'); - const lastBraceIndex = cleanedResponse.lastIndexOf('}'); - let potentialJsonFromBraces = null; - - if (firstBraceIndex !== -1 && lastBraceIndex > firstBraceIndex) { - potentialJsonFromBraces = cleanedResponse.substring( - firstBraceIndex, - lastBraceIndex + 1 - ); - if (potentialJsonFromBraces.length <= 2) { - potentialJsonFromBraces = null; // Ignore empty braces {} - } - } - - // If {} extraction yielded something, try parsing it immediately - if (potentialJsonFromBraces) { - try { - const testParse = JSON.parse(potentialJsonFromBraces); - // It worked! Use this as the primary cleaned response. - cleanedResponse = potentialJsonFromBraces; - parseMethodUsed = 'braces'; - } catch (e) { - report( - 'info', - 'Content between {} looked promising but failed initial parse. Proceeding to other methods.' - ); - // Reset cleanedResponse to original if brace parsing failed - cleanedResponse = originalResponseForDebug; - } - } - - // --- Step 2: If brace parsing didn't work or wasn't applicable, try code block extraction --- - if (parseMethodUsed === 'raw') { - const codeBlockMatch = cleanedResponse.match( - /```(?:json|javascript)?\s*([\s\S]*?)\s*```/i - ); - if (codeBlockMatch) { - cleanedResponse = codeBlockMatch[1].trim(); - parseMethodUsed = 'codeblock'; - report('info', 'Extracted JSON content from Markdown code block.'); - } else { - // --- Step 3: If code block failed, try stripping prefixes --- - const commonPrefixes = [ - 'json\n', - 'javascript\n' - // ... other prefixes ... - ]; - let prefixFound = false; - for (const prefix of commonPrefixes) { - if (cleanedResponse.toLowerCase().startsWith(prefix)) { - cleanedResponse = cleanedResponse.substring(prefix.length).trim(); - parseMethodUsed = 'prefix'; - report('info', `Stripped prefix: "${prefix.trim()}"`); - prefixFound = true; - break; - } - } - if (!prefixFound) { - report( - 'warn', - 'Response does not appear to contain {}, code block, or known prefix. Attempting raw parse.' - ); - } - } - } - - // --- Step 4: Attempt final parse --- - let parsedTask; - try { - parsedTask = JSON.parse(cleanedResponse); - } catch (parseError) { - report('error', `Failed to parse JSON object: ${parseError.message}`); - report( - 'error', - `Problematic JSON string (first 500 chars): ${cleanedResponse.substring(0, 500)}` - ); - report( - 'error', - `Original Raw Response (first 500 chars): ${originalResponseForDebug.substring(0, 500)}` - ); - throw new Error( - `Failed to parse JSON response object: ${parseError.message}` - ); - } - - if (!parsedTask || typeof parsedTask !== 'object') { - report( - 'error', - `Parsed content is not an object. Type: ${typeof parsedTask}` - ); - report( - 'error', - `Parsed content sample: ${JSON.stringify(parsedTask).substring(0, 200)}` - ); - throw new Error('Parsed AI response is not a valid JSON object.'); - } - - // Preprocess the task to ensure subtasks have proper structure - const preprocessedTask = { - ...parsedTask, - status: parsedTask.status || 'pending', - dependencies: Array.isArray(parsedTask.dependencies) - ? parsedTask.dependencies - : [], - details: - typeof parsedTask.details === 'string' - ? parsedTask.details - : String(parsedTask.details || ''), - testStrategy: - typeof parsedTask.testStrategy === 'string' - ? parsedTask.testStrategy - : String(parsedTask.testStrategy || ''), - // Ensure subtasks is an array and each subtask has required fields - subtasks: Array.isArray(parsedTask.subtasks) - ? parsedTask.subtasks.map((subtask) => ({ - ...subtask, - title: subtask.title || '', - description: subtask.description || '', - status: subtask.status || 'pending', - dependencies: Array.isArray(subtask.dependencies) - ? subtask.dependencies - : [], - details: - typeof subtask.details === 'string' - ? subtask.details - : String(subtask.details || ''), - testStrategy: - typeof subtask.testStrategy === 'string' - ? subtask.testStrategy - : String(subtask.testStrategy || '') - })) - : [] - }; - - // Validate the parsed task object using Zod - const validationResult = updatedTaskSchema.safeParse(preprocessedTask); - if (!validationResult.success) { - report('error', 'Parsed task object failed Zod validation.'); - validationResult.error.errors.forEach((err) => { - report('error', ` - Field '${err.path.join('.')}': ${err.message}`); - }); - throw new Error( - `AI response failed task structure validation: ${validationResult.error.message}` - ); - } - - // Final check: ensure ID matches expected ID (AI might hallucinate) - if (validationResult.data.id !== expectedTaskId) { - report( - 'warn', - `AI returned task with ID ${validationResult.data.id}, but expected ${expectedTaskId}. Overwriting ID.` - ); - validationResult.data.id = expectedTaskId; // Enforce correct ID - } - - report('info', 'Successfully validated updated task structure.'); - return validationResult.data; // Return the validated task data -} - /** * Update a task by ID with new information using the unified AI service. * @param {string} tasksPath - Path to the tasks.json file @@ -522,15 +302,32 @@ async function updateTaskById( try { const serviceRole = useResearch ? 'research' : 'main'; - aiServiceResponse = await generateTextService({ - role: serviceRole, - session: session, - projectRoot: projectRoot, - systemPrompt: systemPrompt, - prompt: userPrompt, - commandName: 'update-task', - outputType: isMCP ? 'mcp' : 'cli' - }); + + if (appendMode) { + // Append mode still uses generateTextService since it returns plain text + aiServiceResponse = await generateTextService({ + role: serviceRole, + session: session, + projectRoot: projectRoot, + systemPrompt: systemPrompt, + prompt: userPrompt, + commandName: 'update-task', + outputType: isMCP ? 'mcp' : 'cli' + }); + } else { + // Full update mode uses generateObjectService for structured output + aiServiceResponse = await generateObjectService({ + role: serviceRole, + session: session, + projectRoot: projectRoot, + systemPrompt: systemPrompt, + prompt: userPrompt, + schema: COMMAND_SCHEMAS['update-task-by-id'], + objectName: 'task', + commandName: 'update-task', + outputType: isMCP ? 'mcp' : 'cli' + }); + } if (loadingIndicator) stopLoadingIndicator(loadingIndicator, 'AI update complete.'); @@ -600,13 +397,8 @@ async function updateTaskById( }; } - // Full update mode: Use mainResult (text) for parsing - const updatedTask = parseUpdatedTaskFromText( - aiServiceResponse.mainResult, - taskId, - logFn, - isMCP - ); + // Full update mode: Use structured data directly + const updatedTask = aiServiceResponse.mainResult.task; // --- Task Validation/Correction (Keep existing logic) --- if (!updatedTask || typeof updatedTask !== 'object') diff --git a/scripts/modules/task-manager/update-tasks.js b/scripts/modules/task-manager/update-tasks.js index a1871ce7..2895fc51 100644 --- a/scripts/modules/task-manager/update-tasks.js +++ b/scripts/modules/task-manager/update-tasks.js @@ -2,7 +2,6 @@ import path from 'path'; import chalk from 'chalk'; import boxen from 'boxen'; import Table from 'cli-table3'; -import { z } from 'zod'; // Keep Zod for post-parsing validation import { log as consoleLog, @@ -22,258 +21,13 @@ import { import { getDebugFlag, hasCodebaseAnalysis } from '../config-manager.js'; import { getPromptManager } from '../prompt-manager.js'; import generateTaskFiles from './generate-task-files.js'; -import { generateTextService } from '../ai-services-unified.js'; +import { generateObjectService } from '../ai-services-unified.js'; +import { COMMAND_SCHEMAS } from '../../../src/schemas/registry.js'; import { getModelConfiguration } from './models.js'; import { ContextGatherer } from '../utils/contextGatherer.js'; import { FuzzyTaskSearch } from '../utils/fuzzyTaskSearch.js'; import { flattenTasksWithSubtasks, findProjectRoot } from '../utils.js'; -// Zod schema for validating the structure of tasks AFTER parsing -const updatedTaskSchema = z - .object({ - id: z.number().int(), - title: z.string(), - description: z.string(), - status: z.string(), - dependencies: z.array(z.union([z.number().int(), z.string()])), - priority: z.string().nullable(), - details: z.string().nullable(), - testStrategy: z.string().nullable(), - subtasks: z.array(z.any()).nullable() // Keep subtasks flexible for now - }) - .strip(); // Allow potential extra fields during parsing if needed, then validate structure - -// Preprocessing schema that adds defaults before validation -const preprocessTaskSchema = z.preprocess((task) => { - // Ensure task is an object - if (typeof task !== 'object' || task === null) { - return {}; - } - - // Return task with defaults for missing fields - return { - ...task, - // Add defaults for required fields if missing - id: task.id ?? 0, - title: task.title ?? 'Untitled Task', - description: task.description ?? '', - status: task.status ?? 'pending', - dependencies: Array.isArray(task.dependencies) ? task.dependencies : [], - // Optional fields - preserve undefined/null distinction - priority: task.hasOwnProperty('priority') ? task.priority : null, - details: task.hasOwnProperty('details') ? task.details : null, - testStrategy: task.hasOwnProperty('testStrategy') - ? task.testStrategy - : null, - subtasks: Array.isArray(task.subtasks) - ? task.subtasks - : task.subtasks === null - ? null - : [] - }; -}, updatedTaskSchema); - -const updatedTaskArraySchema = z.array(updatedTaskSchema); -const preprocessedTaskArraySchema = z.array(preprocessTaskSchema); - -/** - * Parses an array of task objects from AI's text response. - * @param {string} text - Response text from AI. - * @param {number} expectedCount - Expected number of tasks. - * @param {Function | Object} logFn - The logging function or MCP log object. - * @param {boolean} isMCP - Flag indicating if logFn is MCP logger. - * @returns {Array} Parsed and validated tasks array. - * @throws {Error} If parsing or validation fails. - */ -function parseUpdatedTasksFromText(text, expectedCount, logFn, isMCP) { - const report = (level, ...args) => { - if (isMCP) { - if (typeof logFn[level] === 'function') logFn[level](...args); - else logFn.info(...args); - } else if (!isSilentMode()) { - // Check silent mode for consoleLog - consoleLog(level, ...args); - } - }; - - report( - 'info', - 'Attempting to parse updated tasks array from text response...' - ); - if (!text || text.trim() === '') - throw new Error('AI response text is empty.'); - - let cleanedResponse = text.trim(); - const originalResponseForDebug = cleanedResponse; - let parseMethodUsed = 'raw'; // Track which method worked - - // --- NEW Step 1: Try extracting between [] first --- - const firstBracketIndex = cleanedResponse.indexOf('['); - const lastBracketIndex = cleanedResponse.lastIndexOf(']'); - let potentialJsonFromArray = null; - - if (firstBracketIndex !== -1 && lastBracketIndex > firstBracketIndex) { - potentialJsonFromArray = cleanedResponse.substring( - firstBracketIndex, - lastBracketIndex + 1 - ); - // Basic check to ensure it's not just "[]" or malformed - if (potentialJsonFromArray.length <= 2) { - potentialJsonFromArray = null; // Ignore empty array - } - } - - // If [] extraction yielded something, try parsing it immediately - if (potentialJsonFromArray) { - try { - const testParse = JSON.parse(potentialJsonFromArray); - // It worked! Use this as the primary cleaned response. - cleanedResponse = potentialJsonFromArray; - parseMethodUsed = 'brackets'; - } catch (e) { - report( - 'info', - 'Content between [] looked promising but failed initial parse. Proceeding to other methods.' - ); - // Reset cleanedResponse to original if bracket parsing failed - cleanedResponse = originalResponseForDebug; - } - } - - // --- Step 2: If bracket parsing didn't work or wasn't applicable, try code block extraction --- - if (parseMethodUsed === 'raw') { - // Only look for ```json blocks now - const codeBlockMatch = cleanedResponse.match( - /```json\s*([\s\S]*?)\s*```/i // Only match ```json - ); - if (codeBlockMatch) { - cleanedResponse = codeBlockMatch[1].trim(); - parseMethodUsed = 'codeblock'; - report('info', 'Extracted JSON content from JSON Markdown code block.'); - } else { - report('info', 'No JSON code block found.'); - // --- Step 3: If code block failed, try stripping prefixes --- - const commonPrefixes = [ - 'json\n', - 'javascript\n', // Keep checking common prefixes just in case - 'python\n', - 'here are the updated tasks:', - 'here is the updated json:', - 'updated tasks:', - 'updated json:', - 'response:', - 'output:' - ]; - let prefixFound = false; - for (const prefix of commonPrefixes) { - if (cleanedResponse.toLowerCase().startsWith(prefix)) { - cleanedResponse = cleanedResponse.substring(prefix.length).trim(); - parseMethodUsed = 'prefix'; - report('info', `Stripped prefix: "${prefix.trim()}"`); - prefixFound = true; - break; - } - } - if (!prefixFound) { - report( - 'warn', - 'Response does not appear to contain [], JSON code block, or known prefix. Attempting raw parse.' - ); - } - } - } - - // --- Step 4: Attempt final parse --- - let parsedTasks; - try { - parsedTasks = JSON.parse(cleanedResponse); - } catch (parseError) { - report('error', `Failed to parse JSON array: ${parseError.message}`); - report( - 'error', - `Extraction method used: ${parseMethodUsed}` // Log which method failed - ); - report( - 'error', - `Problematic JSON string (first 500 chars): ${cleanedResponse.substring(0, 500)}` - ); - report( - 'error', - `Original Raw Response (first 500 chars): ${originalResponseForDebug.substring(0, 500)}` - ); - throw new Error( - `Failed to parse JSON response array: ${parseError.message}` - ); - } - - // --- Step 5 & 6: Validate Array structure and Zod schema --- - if (!Array.isArray(parsedTasks)) { - report( - 'error', - `Parsed content is not an array. Type: ${typeof parsedTasks}` - ); - report( - 'error', - `Parsed content sample: ${JSON.stringify(parsedTasks).substring(0, 200)}` - ); - throw new Error('Parsed AI response is not a valid JSON array.'); - } - - report('info', `Successfully parsed ${parsedTasks.length} potential tasks.`); - if (expectedCount && parsedTasks.length !== expectedCount) { - report( - 'warn', - `Expected ${expectedCount} tasks, but parsed ${parsedTasks.length}.` - ); - } - - // Log missing fields for debugging before preprocessing - let hasWarnings = false; - parsedTasks.forEach((task, index) => { - const missingFields = []; - if (!task.hasOwnProperty('id')) missingFields.push('id'); - if (!task.hasOwnProperty('status')) missingFields.push('status'); - if (!task.hasOwnProperty('dependencies')) - missingFields.push('dependencies'); - - if (missingFields.length > 0) { - hasWarnings = true; - report( - 'warn', - `Task ${index} is missing fields: ${missingFields.join(', ')} - will use defaults` - ); - } - }); - - if (hasWarnings) { - report( - 'warn', - 'Some tasks were missing required fields. Applying defaults...' - ); - } - - // Use the preprocessing schema to add defaults and validate - const preprocessResult = preprocessedTaskArraySchema.safeParse(parsedTasks); - - if (!preprocessResult.success) { - // This should rarely happen now since preprocessing adds defaults - report('error', 'Failed to validate task array even after preprocessing.'); - preprocessResult.error.errors.forEach((err) => { - report('error', ` - Path '${err.path.join('.')}': ${err.message}`); - }); - - throw new Error( - `AI response failed validation: ${preprocessResult.error.message}` - ); - } - - report('info', 'Successfully validated and transformed task structure.'); - return preprocessResult.data.slice( - 0, - expectedCount || preprocessResult.data.length - ); -} - /** * Update tasks based on new context using the unified AI service. * @param {string} tasksPath - Path to the tasks.json file @@ -458,13 +212,15 @@ async function updateTasks( // Determine role based on research flag const serviceRole = useResearch ? 'research' : 'main'; - // Call the unified AI service - aiServiceResponse = await generateTextService({ + // Call the unified AI service with generateObject + aiServiceResponse = await generateObjectService({ role: serviceRole, session: session, projectRoot: projectRoot, systemPrompt: systemPrompt, prompt: userPrompt, + schema: COMMAND_SCHEMAS['update-tasks'], + objectName: 'tasks', commandName: 'update-tasks', outputType: isMCP ? 'mcp' : 'cli' }); @@ -472,13 +228,8 @@ async function updateTasks( if (loadingIndicator) stopLoadingIndicator(loadingIndicator, 'AI update complete.'); - // Use the mainResult (text) for parsing - const parsedUpdatedTasks = parseUpdatedTasksFromText( - aiServiceResponse.mainResult, - tasksToUpdate.length, - logFn, - isMCP - ); + // With generateObject, we get structured data directly + const parsedUpdatedTasks = aiServiceResponse.mainResult.tasks; // --- Update Tasks Data (Updated writeJSON call) --- if (!Array.isArray(parsedUpdatedTasks)) { diff --git a/scripts/modules/ui.js b/scripts/modules/ui.js index 65450d0b..a82dc530 100644 --- a/scripts/modules/ui.js +++ b/scripts/modules/ui.js @@ -2310,7 +2310,8 @@ function displayAiUsageSummary(telemetryData, outputType = 'cli') { outputTokens, totalTokens, totalCost, - commandName + commandName, + isUnknownCost } = telemetryData; let summary = chalk.bold.blue('AI Usage Summary:') + '\n'; @@ -2320,7 +2321,10 @@ function displayAiUsageSummary(telemetryData, outputType = 'cli') { summary += chalk.gray( ` Tokens: ${totalTokens} (Input: ${inputTokens}, Output: ${outputTokens})\n` ); - summary += chalk.gray(` Est. Cost: $${totalCost.toFixed(6)}`); + + // Show "Unknown" if pricing data is not available, otherwise show the cost + const costDisplay = isUnknownCost ? 'Unknown' : `$${totalCost.toFixed(6)}`; + summary += chalk.gray(` Est. Cost: ${costDisplay}`); console.log( boxen(summary, { diff --git a/src/ai-providers/base-provider.js b/src/ai-providers/base-provider.js index 79bd2bce..19f60e0b 100644 --- a/src/ai-providers/base-provider.js +++ b/src/ai-providers/base-provider.js @@ -21,6 +21,20 @@ export class BaseAIProvider { // Each provider must set their name this.name = this.constructor.name; + + /** + * Whether this provider needs explicit schema in JSON mode + * Can be overridden by subclasses + * @type {boolean} + */ + this.needsExplicitJsonSchema = false; + + /** + * Whether this provider supports temperature parameter + * Can be overridden by subclasses + * @type {boolean} + */ + this.supportsTemperature = true; } /** @@ -126,16 +140,6 @@ export class BaseAIProvider { throw new Error('getRequiredApiKeyName must be implemented by provider'); } - /** - * Determines if a model requires max_completion_tokens instead of maxTokens - * Can be overridden by providers to specify their model requirements - * @param {string} modelId - The model ID to check - * @returns {boolean} True if the model requires max_completion_tokens - */ - requiresMaxCompletionTokens(modelId) { - return false; // Default behavior - most models use maxTokens - } - /** * Prepares token limit parameter based on model requirements * @param {string} modelId - The model ID @@ -150,11 +154,7 @@ export class BaseAIProvider { // Ensure maxTokens is an integer const tokenValue = Math.floor(Number(maxTokens)); - if (this.requiresMaxCompletionTokens(modelId)) { - return { max_completion_tokens: tokenValue }; - } else { - return { maxTokens: tokenValue }; - } + return { maxOutputTokens: tokenValue }; } /** @@ -175,7 +175,9 @@ export class BaseAIProvider { model: client(params.modelId), messages: params.messages, ...this.prepareTokenParam(params.modelId, params.maxTokens), - temperature: params.temperature + ...(this.supportsTemperature && params.temperature !== undefined + ? { temperature: params.temperature } + : {}) }); log( @@ -183,12 +185,19 @@ export class BaseAIProvider { `${this.name} generateText completed successfully for model: ${params.modelId}` ); + const inputTokens = + result.usage?.inputTokens ?? result.usage?.promptTokens ?? 0; + const outputTokens = + result.usage?.outputTokens ?? result.usage?.completionTokens ?? 0; + const totalTokens = + result.usage?.totalTokens ?? inputTokens + outputTokens; + return { text: result.text, usage: { - inputTokens: result.usage?.promptTokens, - outputTokens: result.usage?.completionTokens, - totalTokens: result.usage?.totalTokens + inputTokens, + outputTokens, + totalTokens } }; } catch (error) { @@ -211,7 +220,9 @@ export class BaseAIProvider { model: client(params.modelId), messages: params.messages, ...this.prepareTokenParam(params.modelId, params.maxTokens), - temperature: params.temperature + ...(this.supportsTemperature && params.temperature !== undefined + ? { temperature: params.temperature } + : {}) }); log( @@ -248,8 +259,10 @@ export class BaseAIProvider { messages: params.messages, schema: zodSchema(params.schema), mode: params.mode || 'auto', - maxTokens: params.maxTokens, - temperature: params.temperature + maxOutputTokens: params.maxTokens, + ...(this.supportsTemperature && params.temperature !== undefined + ? { temperature: params.temperature } + : {}) }); log( @@ -286,13 +299,18 @@ export class BaseAIProvider { ); const client = await this.getClient(params); + const result = await generateObject({ model: client(params.modelId), messages: params.messages, - schema: zodSchema(params.schema), - mode: params.mode || 'auto', - ...this.prepareTokenParam(params.modelId, params.maxTokens), - temperature: params.temperature + schema: params.schema, + mode: this.needsExplicitJsonSchema ? 'json' : 'auto', + schemaName: params.objectName, + schemaDescription: `Generate a valid JSON object for ${params.objectName}`, + maxTokens: params.maxTokens, + ...(this.supportsTemperature && params.temperature !== undefined + ? { temperature: params.temperature } + : {}) }); log( @@ -300,19 +318,26 @@ export class BaseAIProvider { `${this.name} generateObject completed successfully for model: ${params.modelId}` ); + const inputTokens = + result.usage?.inputTokens ?? result.usage?.promptTokens ?? 0; + const outputTokens = + result.usage?.outputTokens ?? result.usage?.completionTokens ?? 0; + const totalTokens = + result.usage?.totalTokens ?? inputTokens + outputTokens; + return { object: result.object, usage: { - inputTokens: result.usage?.promptTokens, - outputTokens: result.usage?.completionTokens, - totalTokens: result.usage?.totalTokens + inputTokens, + outputTokens, + totalTokens } }; } catch (error) { // Check if this is a JSON parsing error that we can potentially fix if ( NoObjectGeneratedError.isInstance(error) && - JSONParseError.isInstance(error.cause) && + error.cause instanceof JSONParseError && error.cause.text ) { log( diff --git a/src/ai-providers/claude-code.js b/src/ai-providers/claude-code.js index 67a89948..067fb749 100644 --- a/src/ai-providers/claude-code.js +++ b/src/ai-providers/claude-code.js @@ -1,54 +1,129 @@ /** * src/ai-providers/claude-code.js * - * Implementation for interacting with Claude models via Claude Code CLI - * using a custom AI SDK implementation. + * Claude Code provider implementation using the ai-sdk-provider-claude-code package. + * This provider uses the local Claude Code CLI with OAuth token authentication. + * + * Authentication: + * - Uses CLAUDE_CODE_OAUTH_TOKEN managed by Claude Code CLI + * - Token is set up via: claude setup-token + * - No manual API key configuration required */ -import { createClaudeCode } from './custom-sdk/claude-code/index.js'; +import { createClaudeCode } from 'ai-sdk-provider-claude-code'; import { BaseAIProvider } from './base-provider.js'; import { getClaudeCodeSettingsForCommand } from '../../scripts/modules/config-manager.js'; +import { execSync } from 'child_process'; +import { log } from '../../scripts/modules/utils.js'; +let _claudeCliChecked = false; +let _claudeCliAvailable = null; + +/** + * Provider for Claude Code CLI integration via AI SDK + * + * Features: + * - No API key required (uses local Claude Code CLI) + * - Supports 'sonnet' and 'opus' models + * - Command-specific configuration support + */ export class ClaudeCodeProvider extends BaseAIProvider { constructor() { super(); this.name = 'Claude Code'; + this.supportedModels = ['sonnet', 'opus']; + // Claude Code requires explicit JSON schema mode + this.needsExplicitJsonSchema = true; + // Claude Code does not support temperature parameter + this.supportsTemperature = false; } + /** + * @returns {string} The environment variable name for API key (not used) + */ getRequiredApiKeyName() { return 'CLAUDE_CODE_API_KEY'; } + /** + * @returns {boolean} False - Claude Code doesn't require API keys + */ isRequiredApiKey() { return false; } /** - * Override validateAuth to skip API key validation for Claude Code - * @param {object} params - Parameters to validate + * Optional CLI availability check for Claude Code + * @param {object} params - Parameters (ignored) */ validateAuth(params) { - // Claude Code doesn't require an API key - // No validation needed + // Claude Code uses local CLI - perform lightweight availability check + // This is optional validation that fails fast with actionable guidance + if ( + process.env.NODE_ENV !== 'test' && + !_claudeCliChecked && + !process.env.CLAUDE_CODE_OAUTH_TOKEN + ) { + try { + execSync('claude --version', { stdio: 'pipe', timeout: 1000 }); + _claudeCliAvailable = true; + } catch (error) { + _claudeCliAvailable = false; + log( + 'warn', + 'Claude Code CLI not detected. Install it with: npm install -g @anthropic-ai/claude-code' + ); + } finally { + _claudeCliChecked = true; + } + } } /** - * Creates and returns a Claude Code client instance. - * @param {object} params - Parameters for client initialization - * @param {string} [params.commandName] - Name of the command invoking the service - * @param {string} [params.baseURL] - Optional custom API endpoint (not used by Claude Code) - * @returns {Function} Claude Code client function - * @throws {Error} If initialization fails + * Creates a Claude Code client instance + * @param {object} params - Client parameters + * @param {string} [params.commandName] - Command name for settings lookup + * @returns {Function} Claude Code provider function + * @throws {Error} If Claude Code CLI is not available or client creation fails */ - getClient(params) { + getClient(params = {}) { try { - // Claude Code doesn't use API keys or base URLs - // Just return the provider factory + const settings = + getClaudeCodeSettingsForCommand(params.commandName) || {}; + return createClaudeCode({ - defaultSettings: getClaudeCodeSettingsForCommand(params?.commandName) + defaultSettings: settings }); } catch (error) { - this.handleError('client initialization', error); + // Provide more helpful error message + const msg = String(error?.message || ''); + const code = error?.code; + if (code === 'ENOENT' || /claude/i.test(msg)) { + const enhancedError = new Error( + `Claude Code CLI not available. Please install Claude Code CLI first. Original error: ${error.message}` + ); + enhancedError.cause = error; + this.handleError('Claude Code CLI initialization', enhancedError); + } else { + this.handleError('client initialization', error); + } } } + + /** + * @returns {string[]} List of supported model IDs + */ + getSupportedModels() { + return this.supportedModels; + } + + /** + * Check if a model is supported + * @param {string} modelId - Model ID to check + * @returns {boolean} True if supported + */ + isModelSupported(modelId) { + if (!modelId) return false; + return this.supportedModels.includes(String(modelId).toLowerCase()); + } } diff --git a/src/ai-providers/codex-cli.js b/src/ai-providers/codex-cli.js new file mode 100644 index 00000000..d3566edb --- /dev/null +++ b/src/ai-providers/codex-cli.js @@ -0,0 +1,106 @@ +/** + * src/ai-providers/codex-cli.js + * + * Codex CLI provider implementation using the ai-sdk-provider-codex-cli package. + * This provider uses the local OpenAI Codex CLI with OAuth (preferred) or + * an optional OPENAI_CODEX_API_KEY if provided. + */ + +import { createCodexCli } from 'ai-sdk-provider-codex-cli'; +import { BaseAIProvider } from './base-provider.js'; +import { execSync } from 'child_process'; +import { log } from '../../scripts/modules/utils.js'; +import { getCodexCliSettingsForCommand } from '../../scripts/modules/config-manager.js'; + +export class CodexCliProvider extends BaseAIProvider { + constructor() { + super(); + this.name = 'Codex CLI'; + // Codex CLI has native schema support, no explicit JSON schema mode required + this.needsExplicitJsonSchema = false; + // Codex CLI does not support temperature parameter + this.supportsTemperature = false; + // Restrict to supported models for OAuth subscription usage + this.supportedModels = ['gpt-5', 'gpt-5-codex']; + // CLI availability check cache + this._codexCliChecked = false; + this._codexCliAvailable = null; + } + + /** + * Codex CLI does not require an API key when using OAuth via `codex login`. + * @returns {boolean} + */ + isRequiredApiKey() { + return false; + } + + /** + * Returns the environment variable name used when an API key is provided. + * Even though the API key is optional for Codex CLI (OAuth-first), + * downstream resolution expects a non-throwing implementation. + * Uses OPENAI_CODEX_API_KEY to avoid conflicts with OpenAI provider. + * @returns {string} + */ + getRequiredApiKeyName() { + return 'OPENAI_CODEX_API_KEY'; + } + + /** + * Optional CLI availability check; provide helpful guidance if missing. + */ + validateAuth() { + if (process.env.NODE_ENV === 'test') return; + + if (!this._codexCliChecked) { + try { + execSync('codex --version', { stdio: 'pipe', timeout: 1000 }); + this._codexCliAvailable = true; + } catch (error) { + this._codexCliAvailable = false; + log( + 'warn', + 'Codex CLI not detected. Install with: npm i -g @openai/codex or enable fallback with allowNpx.' + ); + } finally { + this._codexCliChecked = true; + } + } + } + + /** + * Creates a Codex CLI client instance + * @param {object} params + * @param {string} [params.commandName] - Command name for settings lookup + * @param {string} [params.apiKey] - Optional API key (injected as OPENAI_API_KEY for Codex CLI) + * @returns {Function} + */ + getClient(params = {}) { + try { + // Merge global + command-specific settings from config + const settings = getCodexCliSettingsForCommand(params.commandName) || {}; + + // Inject API key only if explicitly provided; OAuth is the primary path + const defaultSettings = { + ...settings, + ...(params.apiKey + ? { env: { ...(settings.env || {}), OPENAI_API_KEY: params.apiKey } } + : {}) + }; + + return createCodexCli({ defaultSettings }); + } catch (error) { + const msg = String(error?.message || ''); + const code = error?.code; + if (code === 'ENOENT' || /codex/i.test(msg)) { + const enhancedError = new Error( + `Codex CLI not available. Please install Codex CLI first. Original error: ${error.message}` + ); + enhancedError.cause = error; + this.handleError('Codex CLI initialization', enhancedError); + } else { + this.handleError('client initialization', error); + } + } + } +} diff --git a/src/ai-providers/custom-sdk/claude-code/errors.js b/src/ai-providers/custom-sdk/claude-code/errors.js deleted file mode 100644 index a0251f37..00000000 --- a/src/ai-providers/custom-sdk/claude-code/errors.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @fileoverview Error handling utilities for Claude Code provider - */ - -import { APICallError, LoadAPIKeyError } from '@ai-sdk/provider'; - -/** - * @typedef {import('./types.js').ClaudeCodeErrorMetadata} ClaudeCodeErrorMetadata - */ - -/** - * Create an API call error with Claude Code specific metadata - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @param {string} [params.code] - Error code - * @param {number} [params.exitCode] - Process exit code - * @param {string} [params.stderr] - Standard error output - * @param {string} [params.promptExcerpt] - Excerpt of the prompt - * @param {boolean} [params.isRetryable=false] - Whether the error is retryable - * @returns {APICallError} - */ -export function createAPICallError({ - message, - code, - exitCode, - stderr, - promptExcerpt, - isRetryable = false -}) { - /** @type {ClaudeCodeErrorMetadata} */ - const metadata = { - code, - exitCode, - stderr, - promptExcerpt - }; - - return new APICallError({ - message, - isRetryable, - url: 'claude-code-cli://command', - requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, - data: metadata - }); -} - -/** - * Create an authentication error - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @returns {LoadAPIKeyError} - */ -export function createAuthenticationError({ message }) { - return new LoadAPIKeyError({ - message: - message || - 'Authentication failed. Please ensure Claude Code CLI is properly authenticated.' - }); -} - -/** - * Create a timeout error - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @param {string} [params.promptExcerpt] - Excerpt of the prompt - * @param {number} params.timeoutMs - Timeout in milliseconds - * @returns {APICallError} - */ -export function createTimeoutError({ message, promptExcerpt, timeoutMs }) { - // Store timeoutMs in metadata for potential use by error handlers - /** @type {ClaudeCodeErrorMetadata & { timeoutMs: number }} */ - const metadata = { - code: 'TIMEOUT', - promptExcerpt, - timeoutMs - }; - - return new APICallError({ - message, - isRetryable: true, - url: 'claude-code-cli://command', - requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, - data: metadata - }); -} - -/** - * Check if an error is an authentication error - * @param {unknown} error - Error to check - * @returns {boolean} - */ -export function isAuthenticationError(error) { - if (error instanceof LoadAPIKeyError) return true; - if ( - error instanceof APICallError && - /** @type {ClaudeCodeErrorMetadata} */ (error.data)?.exitCode === 401 - ) - return true; - return false; -} - -/** - * Check if an error is a timeout error - * @param {unknown} error - Error to check - * @returns {boolean} - */ -export function isTimeoutError(error) { - if ( - error instanceof APICallError && - /** @type {ClaudeCodeErrorMetadata} */ (error.data)?.code === 'TIMEOUT' - ) - return true; - return false; -} - -/** - * Get error metadata from an error - * @param {unknown} error - Error to extract metadata from - * @returns {ClaudeCodeErrorMetadata|undefined} - */ -export function getErrorMetadata(error) { - if (error instanceof APICallError && error.data) { - return /** @type {ClaudeCodeErrorMetadata} */ (error.data); - } - return undefined; -} diff --git a/src/ai-providers/custom-sdk/claude-code/index.js b/src/ai-providers/custom-sdk/claude-code/index.js deleted file mode 100644 index 076a2241..00000000 --- a/src/ai-providers/custom-sdk/claude-code/index.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @fileoverview Claude Code provider factory and exports - */ - -import { NoSuchModelError } from '@ai-sdk/provider'; -import { ClaudeCodeLanguageModel } from './language-model.js'; - -/** - * @typedef {import('./types.js').ClaudeCodeSettings} ClaudeCodeSettings - * @typedef {import('./types.js').ClaudeCodeModelId} ClaudeCodeModelId - * @typedef {import('./types.js').ClaudeCodeProvider} ClaudeCodeProvider - * @typedef {import('./types.js').ClaudeCodeProviderSettings} ClaudeCodeProviderSettings - */ - -/** - * Create a Claude Code provider using the official SDK - * @param {ClaudeCodeProviderSettings} [options={}] - Provider configuration options - * @returns {ClaudeCodeProvider} Claude Code provider instance - */ -export function createClaudeCode(options = {}) { - /** - * Create a language model instance - * @param {ClaudeCodeModelId} modelId - Model ID - * @param {ClaudeCodeSettings} [settings={}] - Model settings - * @returns {ClaudeCodeLanguageModel} - */ - const createModel = (modelId, settings = {}) => { - return new ClaudeCodeLanguageModel({ - id: modelId, - settings: { - ...options.defaultSettings, - ...settings - } - }); - }; - - /** - * Provider function - * @param {ClaudeCodeModelId} modelId - Model ID - * @param {ClaudeCodeSettings} [settings] - Model settings - * @returns {ClaudeCodeLanguageModel} - */ - const provider = function (modelId, settings) { - if (new.target) { - throw new Error( - 'The Claude Code model function cannot be called with the new keyword.' - ); - } - - return createModel(modelId, settings); - }; - - provider.languageModel = createModel; - provider.chat = createModel; // Alias for languageModel - - // Add textEmbeddingModel method that throws NoSuchModelError - provider.textEmbeddingModel = (modelId) => { - throw new NoSuchModelError({ - modelId, - modelType: 'textEmbeddingModel' - }); - }; - - return /** @type {ClaudeCodeProvider} */ (provider); -} - -/** - * Default Claude Code provider instance - */ -export const claudeCode = createClaudeCode(); - -// Provider exports -export { ClaudeCodeLanguageModel } from './language-model.js'; - -// Error handling exports -export { - isAuthenticationError, - isTimeoutError, - getErrorMetadata, - createAPICallError, - createAuthenticationError, - createTimeoutError -} from './errors.js'; diff --git a/src/ai-providers/custom-sdk/claude-code/json-extractor.js b/src/ai-providers/custom-sdk/claude-code/json-extractor.js deleted file mode 100644 index 335fff82..00000000 --- a/src/ai-providers/custom-sdk/claude-code/json-extractor.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @fileoverview Extract JSON from Claude's response, handling markdown blocks and other formatting - */ - -/** - * Extract JSON from Claude's response - * @param {string} text - The text to extract JSON from - * @returns {string} - The extracted JSON string - */ -export function extractJson(text) { - // Remove markdown code blocks if present - let jsonText = text.trim(); - - // Remove ```json blocks - jsonText = jsonText.replace(/^```json\s*/gm, ''); - jsonText = jsonText.replace(/^```\s*/gm, ''); - jsonText = jsonText.replace(/```\s*$/gm, ''); - - // Remove common TypeScript/JavaScript patterns - jsonText = jsonText.replace(/^const\s+\w+\s*=\s*/, ''); // Remove "const varName = " - jsonText = jsonText.replace(/^let\s+\w+\s*=\s*/, ''); // Remove "let varName = " - jsonText = jsonText.replace(/^var\s+\w+\s*=\s*/, ''); // Remove "var varName = " - jsonText = jsonText.replace(/;?\s*$/, ''); // Remove trailing semicolons - - // Try to extract JSON object or array - const objectMatch = jsonText.match(/{[\s\S]*}/); - const arrayMatch = jsonText.match(/\[[\s\S]*\]/); - - if (objectMatch) { - jsonText = objectMatch[0]; - } else if (arrayMatch) { - jsonText = arrayMatch[0]; - } - - // First try to parse as valid JSON - try { - JSON.parse(jsonText); - return jsonText; - } catch { - // If it's not valid JSON, it might be a JavaScript object literal - // Try to convert it to valid JSON - try { - // This is a simple conversion that handles basic cases - // Replace unquoted keys with quoted keys - const converted = jsonText - .replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g, '$1"$2":') - // Replace single quotes with double quotes - .replace(/'/g, '"'); - - // Validate the converted JSON - JSON.parse(converted); - return converted; - } catch { - // If all else fails, return the original text - // The AI SDK will handle the error appropriately - return text; - } - } -} diff --git a/src/ai-providers/custom-sdk/claude-code/language-model.js b/src/ai-providers/custom-sdk/claude-code/language-model.js deleted file mode 100644 index 960da2d7..00000000 --- a/src/ai-providers/custom-sdk/claude-code/language-model.js +++ /dev/null @@ -1,540 +0,0 @@ -/** - * @fileoverview Claude Code Language Model implementation - */ - -import { NoSuchModelError } from '@ai-sdk/provider'; -import { generateId } from '@ai-sdk/provider-utils'; -import { convertToClaudeCodeMessages } from './message-converter.js'; -import { extractJson } from './json-extractor.js'; -import { createAPICallError, createAuthenticationError } from './errors.js'; - -let query; -let AbortError; - -async function loadClaudeCodeModule() { - if (!query || !AbortError) { - try { - const mod = await import('@anthropic-ai/claude-code'); - query = mod.query; - AbortError = mod.AbortError; - } catch (err) { - throw new Error( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); - } - } -} - -/** - * @typedef {import('./types.js').ClaudeCodeSettings} ClaudeCodeSettings - * @typedef {import('./types.js').ClaudeCodeModelId} ClaudeCodeModelId - * @typedef {import('./types.js').ClaudeCodeLanguageModelOptions} ClaudeCodeLanguageModelOptions - */ - -const modelMap = { - opus: 'opus', - sonnet: 'sonnet' -}; - -export class ClaudeCodeLanguageModel { - specificationVersion = 'v1'; - defaultObjectGenerationMode = 'json'; - supportsImageUrls = false; - supportsStructuredOutputs = false; - - /** @type {ClaudeCodeModelId} */ - modelId; - - /** @type {ClaudeCodeSettings} */ - settings; - - /** @type {string|undefined} */ - sessionId; - - /** - * @param {ClaudeCodeLanguageModelOptions} options - */ - constructor(options) { - this.modelId = options.id; - this.settings = options.settings ?? {}; - - // Validate model ID format - if ( - !this.modelId || - typeof this.modelId !== 'string' || - this.modelId.trim() === '' - ) { - throw new NoSuchModelError({ - modelId: this.modelId, - modelType: 'languageModel' - }); - } - } - - get provider() { - return 'claude-code'; - } - - /** - * Get the model name for Claude Code CLI - * @returns {string} - */ - getModel() { - const mapped = modelMap[this.modelId]; - return mapped ?? this.modelId; - } - - /** - * Generate unsupported parameter warnings - * @param {Object} options - Generation options - * @returns {Array} Warnings array - */ - generateUnsupportedWarnings(options) { - const warnings = []; - const unsupportedParams = []; - - // Check for unsupported parameters - if (options.temperature !== undefined) - unsupportedParams.push('temperature'); - if (options.maxTokens !== undefined) unsupportedParams.push('maxTokens'); - if (options.topP !== undefined) unsupportedParams.push('topP'); - if (options.topK !== undefined) unsupportedParams.push('topK'); - if (options.presencePenalty !== undefined) - unsupportedParams.push('presencePenalty'); - if (options.frequencyPenalty !== undefined) - unsupportedParams.push('frequencyPenalty'); - if (options.stopSequences !== undefined && options.stopSequences.length > 0) - unsupportedParams.push('stopSequences'); - if (options.seed !== undefined) unsupportedParams.push('seed'); - - if (unsupportedParams.length > 0) { - // Add a warning for each unsupported parameter - for (const param of unsupportedParams) { - warnings.push({ - type: 'unsupported-setting', - setting: param, - details: `Claude Code CLI does not support the ${param} parameter. It will be ignored.` - }); - } - } - - return warnings; - } - - /** - * Generate text using Claude Code - * @param {Object} options - Generation options - * @returns {Promise} - */ - async doGenerate(options) { - await loadClaudeCodeModule(); - const { messagesPrompt } = convertToClaudeCodeMessages( - options.prompt, - options.mode - ); - - const abortController = new AbortController(); - if (options.abortSignal) { - options.abortSignal.addEventListener('abort', () => - abortController.abort() - ); - } - - const queryOptions = { - model: this.getModel(), - abortController, - resume: this.sessionId, - pathToClaudeCodeExecutable: this.settings.pathToClaudeCodeExecutable, - customSystemPrompt: this.settings.customSystemPrompt, - appendSystemPrompt: this.settings.appendSystemPrompt, - maxTurns: this.settings.maxTurns, - maxThinkingTokens: this.settings.maxThinkingTokens, - cwd: this.settings.cwd, - executable: this.settings.executable, - executableArgs: this.settings.executableArgs, - permissionMode: this.settings.permissionMode, - permissionPromptToolName: this.settings.permissionPromptToolName, - continue: this.settings.continue, - allowedTools: this.settings.allowedTools, - disallowedTools: this.settings.disallowedTools, - mcpServers: this.settings.mcpServers - }; - - let text = ''; - let usage = { promptTokens: 0, completionTokens: 0 }; - let finishReason = 'stop'; - let costUsd; - let durationMs; - let rawUsage; - const warnings = this.generateUnsupportedWarnings(options); - - try { - if (!query) { - throw new Error( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); - } - const response = query({ - prompt: messagesPrompt, - options: queryOptions - }); - - for await (const message of response) { - if (message.type === 'assistant') { - text += message.message.content - .map((c) => (c.type === 'text' ? c.text : '')) - .join(''); - } else if (message.type === 'result') { - this.sessionId = message.session_id; - costUsd = message.total_cost_usd; - durationMs = message.duration_ms; - - if ('usage' in message) { - rawUsage = message.usage; - usage = { - promptTokens: - (message.usage.cache_creation_input_tokens ?? 0) + - (message.usage.cache_read_input_tokens ?? 0) + - (message.usage.input_tokens ?? 0), - completionTokens: message.usage.output_tokens ?? 0 - }; - } - - if (message.subtype === 'error_max_turns') { - finishReason = 'length'; - } else if (message.subtype === 'error_during_execution') { - finishReason = 'error'; - } - } else if (message.type === 'system' && message.subtype === 'init') { - this.sessionId = message.session_id; - } - } - } catch (error) { - // ------------------------------------------------------------- - // Work-around for Claude-Code CLI/SDK JSON truncation bug (#913) - // ------------------------------------------------------------- - // If the SDK throws a JSON SyntaxError *but* we already hold some - // buffered text, assume the response was truncated by the CLI. - // We keep the accumulated text, mark the finish reason, push a - // provider-warning and *skip* the normal error handling so Task - // Master can continue processing. - const isJsonTruncation = - error instanceof SyntaxError && - /JSON/i.test(error.message || '') && - (error.message.includes('position') || - error.message.includes('Unexpected end')); - if (isJsonTruncation && text && text.length > 0) { - warnings.push({ - type: 'provider-warning', - details: - 'Claude Code SDK emitted a JSON parse error but Task Master recovered buffered text (possible CLI truncation).' - }); - finishReason = 'truncated'; - // Skip re-throwing: fall through so the caller receives usable data - } else { - if (AbortError && error instanceof AbortError) { - throw options.abortSignal?.aborted - ? options.abortSignal.reason - : error; - } - - // Check for authentication errors - if ( - error.message?.includes('not logged in') || - error.message?.includes('authentication') || - error.exitCode === 401 - ) { - throw createAuthenticationError({ - message: - error.message || - 'Authentication failed. Please ensure Claude Code CLI is properly authenticated.' - }); - } - - // Wrap other errors with API call error - throw createAPICallError({ - message: error.message || 'Claude Code CLI error', - code: error.code, - exitCode: error.exitCode, - stderr: error.stderr, - promptExcerpt: messagesPrompt.substring(0, 200), - isRetryable: error.code === 'ENOENT' || error.code === 'ECONNREFUSED' - }); - } - } - - // Extract JSON if in object-json mode - if (options.mode?.type === 'object-json' && text) { - text = extractJson(text); - } - - return { - text: text || undefined, - usage, - finishReason, - rawCall: { - rawPrompt: messagesPrompt, - rawSettings: queryOptions - }, - warnings: warnings.length > 0 ? warnings : undefined, - response: { - id: generateId(), - timestamp: new Date(), - modelId: this.modelId - }, - request: { - body: messagesPrompt - }, - providerMetadata: { - 'claude-code': { - ...(this.sessionId !== undefined && { sessionId: this.sessionId }), - ...(costUsd !== undefined && { costUsd }), - ...(durationMs !== undefined && { durationMs }), - ...(rawUsage !== undefined && { rawUsage }) - } - } - }; - } - - /** - * Stream text using Claude Code - * @param {Object} options - Stream options - * @returns {Promise} - */ - async doStream(options) { - await loadClaudeCodeModule(); - const { messagesPrompt } = convertToClaudeCodeMessages( - options.prompt, - options.mode - ); - - const abortController = new AbortController(); - if (options.abortSignal) { - options.abortSignal.addEventListener('abort', () => - abortController.abort() - ); - } - - const queryOptions = { - model: this.getModel(), - abortController, - resume: this.sessionId, - pathToClaudeCodeExecutable: this.settings.pathToClaudeCodeExecutable, - customSystemPrompt: this.settings.customSystemPrompt, - appendSystemPrompt: this.settings.appendSystemPrompt, - maxTurns: this.settings.maxTurns, - maxThinkingTokens: this.settings.maxThinkingTokens, - cwd: this.settings.cwd, - executable: this.settings.executable, - executableArgs: this.settings.executableArgs, - permissionMode: this.settings.permissionMode, - permissionPromptToolName: this.settings.permissionPromptToolName, - continue: this.settings.continue, - allowedTools: this.settings.allowedTools, - disallowedTools: this.settings.disallowedTools, - mcpServers: this.settings.mcpServers - }; - - const warnings = this.generateUnsupportedWarnings(options); - - const stream = new ReadableStream({ - start: async (controller) => { - try { - if (!query) { - throw new Error( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); - } - const response = query({ - prompt: messagesPrompt, - options: queryOptions - }); - - let usage = { promptTokens: 0, completionTokens: 0 }; - let accumulatedText = ''; - - for await (const message of response) { - if (message.type === 'assistant') { - const text = message.message.content - .map((c) => (c.type === 'text' ? c.text : '')) - .join(''); - - if (text) { - accumulatedText += text; - - // In object-json mode, we need to accumulate the full text - // and extract JSON at the end, so don't stream individual deltas - if (options.mode?.type !== 'object-json') { - controller.enqueue({ - type: 'text-delta', - textDelta: text - }); - } - } - } else if (message.type === 'result') { - let rawUsage; - if ('usage' in message) { - rawUsage = message.usage; - usage = { - promptTokens: - (message.usage.cache_creation_input_tokens ?? 0) + - (message.usage.cache_read_input_tokens ?? 0) + - (message.usage.input_tokens ?? 0), - completionTokens: message.usage.output_tokens ?? 0 - }; - } - - let finishReason = 'stop'; - if (message.subtype === 'error_max_turns') { - finishReason = 'length'; - } else if (message.subtype === 'error_during_execution') { - finishReason = 'error'; - } - - // Store session ID in the model instance - this.sessionId = message.session_id; - - // In object-json mode, extract JSON and send the full text at once - if (options.mode?.type === 'object-json' && accumulatedText) { - const extractedJson = extractJson(accumulatedText); - controller.enqueue({ - type: 'text-delta', - textDelta: extractedJson - }); - } - - controller.enqueue({ - type: 'finish', - finishReason, - usage, - providerMetadata: { - 'claude-code': { - sessionId: message.session_id, - ...(message.total_cost_usd !== undefined && { - costUsd: message.total_cost_usd - }), - ...(message.duration_ms !== undefined && { - durationMs: message.duration_ms - }), - ...(rawUsage !== undefined && { rawUsage }) - } - } - }); - } else if ( - message.type === 'system' && - message.subtype === 'init' - ) { - // Store session ID for future use - this.sessionId = message.session_id; - - // Emit response metadata when session is initialized - controller.enqueue({ - type: 'response-metadata', - id: message.session_id, - timestamp: new Date(), - modelId: this.modelId - }); - } - } - - // ------------------------------------------------------------- - // Work-around for Claude-Code CLI/SDK JSON truncation bug (#913) - // ------------------------------------------------------------- - // If we hit the SDK JSON SyntaxError but have buffered text, finalize - // the stream gracefully instead of emitting an error. - const isJsonTruncation = - error instanceof SyntaxError && - /JSON/i.test(error.message || '') && - (error.message.includes('position') || - error.message.includes('Unexpected end')); - - if ( - isJsonTruncation && - accumulatedText && - accumulatedText.length > 0 - ) { - // Prepare final text payload - const finalText = - options.mode?.type === 'object-json' - ? extractJson(accumulatedText) - : accumulatedText; - - // Emit any remaining text - controller.enqueue({ - type: 'text-delta', - textDelta: finalText - }); - - // Emit finish with truncated reason and warning - controller.enqueue({ - type: 'finish', - finishReason: 'truncated', - usage, - providerMetadata: { 'claude-code': { truncated: true } }, - warnings: [ - { - type: 'provider-warning', - details: - 'Claude Code SDK JSON truncation detected; stream recovered.' - } - ] - }); - - controller.close(); - return; // Skip normal error path - } - - controller.close(); - } catch (error) { - let errorToEmit; - - if (AbortError && error instanceof AbortError) { - errorToEmit = options.abortSignal?.aborted - ? options.abortSignal.reason - : error; - } else if ( - error.message?.includes('not logged in') || - error.message?.includes('authentication') || - error.exitCode === 401 - ) { - errorToEmit = createAuthenticationError({ - message: - error.message || - 'Authentication failed. Please ensure Claude Code CLI is properly authenticated.' - }); - } else { - errorToEmit = createAPICallError({ - message: error.message || 'Claude Code CLI error', - code: error.code, - exitCode: error.exitCode, - stderr: error.stderr, - promptExcerpt: messagesPrompt.substring(0, 200), - isRetryable: - error.code === 'ENOENT' || error.code === 'ECONNREFUSED' - }); - } - - // Emit error as a stream part - controller.enqueue({ - type: 'error', - error: errorToEmit - }); - - controller.close(); - } - } - }); - - return { - stream, - rawCall: { - rawPrompt: messagesPrompt, - rawSettings: queryOptions - }, - warnings: warnings.length > 0 ? warnings : undefined, - request: { - body: messagesPrompt - } - }; - } -} diff --git a/src/ai-providers/custom-sdk/claude-code/message-converter.js b/src/ai-providers/custom-sdk/claude-code/message-converter.js deleted file mode 100644 index 7bad0418..00000000 --- a/src/ai-providers/custom-sdk/claude-code/message-converter.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * @fileoverview Converts AI SDK prompt format to Claude Code message format - */ - -/** - * Convert AI SDK prompt to Claude Code messages format - * @param {Array} prompt - AI SDK prompt array - * @param {Object} [mode] - Generation mode - * @param {string} mode.type - Mode type ('regular', 'object-json', 'object-tool') - * @returns {{messagesPrompt: string, systemPrompt?: string}} - */ -export function convertToClaudeCodeMessages(prompt, mode) { - const messages = []; - let systemPrompt; - - for (const message of prompt) { - switch (message.role) { - case 'system': - systemPrompt = message.content; - break; - - case 'user': - if (typeof message.content === 'string') { - messages.push(message.content); - } else { - // Handle multi-part content - const textParts = message.content - .filter((part) => part.type === 'text') - .map((part) => part.text) - .join('\n'); - - if (textParts) { - messages.push(textParts); - } - - // Note: Image parts are not supported by Claude Code CLI - const imageParts = message.content.filter( - (part) => part.type === 'image' - ); - if (imageParts.length > 0) { - console.warn( - 'Claude Code CLI does not support image inputs. Images will be ignored.' - ); - } - } - break; - - case 'assistant': - if (typeof message.content === 'string') { - messages.push(`Assistant: ${message.content}`); - } else { - const textParts = message.content - .filter((part) => part.type === 'text') - .map((part) => part.text) - .join('\n'); - - if (textParts) { - messages.push(`Assistant: ${textParts}`); - } - - // Handle tool calls if present - const toolCalls = message.content.filter( - (part) => part.type === 'tool-call' - ); - if (toolCalls.length > 0) { - // For now, we'll just note that tool calls were made - messages.push(`Assistant: [Tool calls made]`); - } - } - break; - - case 'tool': - // Tool results could be included in the conversation - messages.push( - `Tool Result (${message.content[0].toolName}): ${JSON.stringify( - message.content[0].result - )}` - ); - break; - } - } - - // For the SDK, we need to provide a single prompt string - // Format the conversation history properly - - // Combine system prompt with messages - let finalPrompt = ''; - - // Add system prompt at the beginning if present - if (systemPrompt) { - finalPrompt = systemPrompt; - } - - if (messages.length === 0) { - return { messagesPrompt: finalPrompt, systemPrompt }; - } - - // Format messages - const formattedMessages = []; - for (let i = 0; i < messages.length; i++) { - const msg = messages[i]; - // Check if this is a user or assistant message based on content - if (msg.startsWith('Assistant:') || msg.startsWith('Tool Result')) { - formattedMessages.push(msg); - } else { - // User messages - formattedMessages.push(`Human: ${msg}`); - } - } - - // Combine system prompt with messages - if (finalPrompt) { - finalPrompt = finalPrompt + '\n\n' + formattedMessages.join('\n\n'); - } else { - finalPrompt = formattedMessages.join('\n\n'); - } - - // For JSON mode, add explicit instruction to ensure JSON output - if (mode?.type === 'object-json') { - // Make the JSON instruction even more explicit - finalPrompt = `${finalPrompt} - -CRITICAL INSTRUCTION: You MUST respond with ONLY valid JSON. Follow these rules EXACTLY: -1. Start your response with an opening brace { -2. End your response with a closing brace } -3. Do NOT include any text before the opening brace -4. Do NOT include any text after the closing brace -5. Do NOT use markdown code blocks or backticks -6. Do NOT include explanations or commentary -7. The ENTIRE response must be valid JSON that can be parsed with JSON.parse() - -Begin your response with { and end with }`; - } - - return { - messagesPrompt: finalPrompt, - systemPrompt - }; -} diff --git a/src/ai-providers/custom-sdk/claude-code/types.js b/src/ai-providers/custom-sdk/claude-code/types.js deleted file mode 100644 index 130d1f65..00000000 --- a/src/ai-providers/custom-sdk/claude-code/types.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @fileoverview Type definitions for Claude Code AI SDK provider - * These JSDoc types mirror the TypeScript interfaces from the original provider - */ - -/** - * Claude Code provider settings - * @typedef {Object} ClaudeCodeSettings - * @property {string} [pathToClaudeCodeExecutable='claude'] - Custom path to Claude Code CLI executable - * @property {string} [customSystemPrompt] - Custom system prompt to use - * @property {string} [appendSystemPrompt] - Append additional content to the system prompt - * @property {number} [maxTurns] - Maximum number of turns for the conversation - * @property {number} [maxThinkingTokens] - Maximum thinking tokens for the model - * @property {string} [cwd] - Working directory for CLI operations - * @property {'bun'|'deno'|'node'} [executable='node'] - JavaScript runtime to use - * @property {string[]} [executableArgs] - Additional arguments for the JavaScript runtime - * @property {'default'|'acceptEdits'|'bypassPermissions'|'plan'} [permissionMode='default'] - Permission mode for tool usage - * @property {string} [permissionPromptToolName] - Custom tool name for permission prompts - * @property {boolean} [continue] - Continue the most recent conversation - * @property {string} [resume] - Resume a specific session by ID - * @property {string[]} [allowedTools] - Tools to explicitly allow during execution (e.g., ['Read', 'LS', 'Bash(git log:*)']) - * @property {string[]} [disallowedTools] - Tools to disallow during execution (e.g., ['Write', 'Edit', 'Bash(rm:*)']) - * @property {Object.} [mcpServers] - MCP server configuration - * @property {boolean} [verbose] - Enable verbose logging for debugging - */ - -/** - * MCP Server configuration - * @typedef {Object} MCPServerConfig - * @property {'stdio'|'sse'} [type='stdio'] - Server type - * @property {string} command - Command to execute (for stdio type) - * @property {string[]} [args] - Arguments for the command - * @property {Object.} [env] - Environment variables - * @property {string} url - URL for SSE type servers - * @property {Object.} [headers] - Headers for SSE type servers - */ - -/** - * Model ID type - either 'opus', 'sonnet', or any string - * @typedef {'opus'|'sonnet'|string} ClaudeCodeModelId - */ - -/** - * Language model options - * @typedef {Object} ClaudeCodeLanguageModelOptions - * @property {ClaudeCodeModelId} id - The model ID - * @property {ClaudeCodeSettings} [settings] - Optional settings - */ - -/** - * Error metadata for Claude Code errors - * @typedef {Object} ClaudeCodeErrorMetadata - * @property {string} [code] - Error code - * @property {number} [exitCode] - Process exit code - * @property {string} [stderr] - Standard error output - * @property {string} [promptExcerpt] - Excerpt of the prompt that caused the error - */ - -/** - * Claude Code provider interface - * @typedef {Object} ClaudeCodeProvider - * @property {function(ClaudeCodeModelId, ClaudeCodeSettings=): Object} languageModel - Create a language model - * @property {function(ClaudeCodeModelId, ClaudeCodeSettings=): Object} chat - Alias for languageModel - * @property {function(string): never} textEmbeddingModel - Throws NoSuchModelError (not supported) - */ - -/** - * Claude Code provider settings - * @typedef {Object} ClaudeCodeProviderSettings - * @property {ClaudeCodeSettings} [defaultSettings] - Default settings to use for all models - */ - -export {}; // This ensures the file is treated as a module diff --git a/src/ai-providers/custom-sdk/grok-cli/errors.js b/src/ai-providers/custom-sdk/grok-cli/errors.js deleted file mode 100644 index f3e904c4..00000000 --- a/src/ai-providers/custom-sdk/grok-cli/errors.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * @fileoverview Error handling utilities for Grok CLI provider - */ - -import { APICallError, LoadAPIKeyError } from '@ai-sdk/provider'; - -/** - * @typedef {import('./types.js').GrokCliErrorMetadata} GrokCliErrorMetadata - */ - -/** - * Create an API call error with Grok CLI specific metadata - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @param {string} [params.code] - Error code - * @param {number} [params.exitCode] - Process exit code - * @param {string} [params.stderr] - Standard error output - * @param {string} [params.stdout] - Standard output - * @param {string} [params.promptExcerpt] - Excerpt of the prompt - * @param {boolean} [params.isRetryable=false] - Whether the error is retryable - * @returns {APICallError} - */ -export function createAPICallError({ - message, - code, - exitCode, - stderr, - stdout, - promptExcerpt, - isRetryable = false -}) { - /** @type {GrokCliErrorMetadata} */ - const metadata = { - code, - exitCode, - stderr, - stdout, - promptExcerpt - }; - - return new APICallError({ - message, - isRetryable, - url: 'grok-cli://command', - requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, - data: metadata - }); -} - -/** - * Create an authentication error - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @returns {LoadAPIKeyError} - */ -export function createAuthenticationError({ message }) { - return new LoadAPIKeyError({ - message: - message || - 'Authentication failed. Please ensure Grok CLI is properly configured with API key.' - }); -} - -/** - * Create a timeout error - * @param {Object} params - Error parameters - * @param {string} params.message - Error message - * @param {string} [params.promptExcerpt] - Excerpt of the prompt - * @param {number} params.timeoutMs - Timeout in milliseconds - * @returns {APICallError} - */ -export function createTimeoutError({ message, promptExcerpt, timeoutMs }) { - /** @type {GrokCliErrorMetadata & { timeoutMs: number }} */ - const metadata = { - code: 'TIMEOUT', - promptExcerpt, - timeoutMs - }; - - return new APICallError({ - message, - isRetryable: true, - url: 'grok-cli://command', - requestBodyValues: promptExcerpt ? { prompt: promptExcerpt } : undefined, - data: metadata - }); -} - -/** - * Create a CLI installation error - * @param {Object} params - Error parameters - * @param {string} [params.message] - Error message - * @returns {APICallError} - */ -export function createInstallationError({ message }) { - return new APICallError({ - message: - message || - 'Grok CLI is not installed or not found in PATH. Please install with: npm install -g @vibe-kit/grok-cli', - isRetryable: false, - url: 'grok-cli://installation' - }); -} - -/** - * Check if an error is an authentication error - * @param {unknown} error - Error to check - * @returns {boolean} - */ -export function isAuthenticationError(error) { - if (error instanceof LoadAPIKeyError) return true; - if ( - error instanceof APICallError && - /** @type {GrokCliErrorMetadata} */ (error.data)?.exitCode === 401 - ) - return true; - return false; -} - -/** - * Check if an error is a timeout error - * @param {unknown} error - Error to check - * @returns {boolean} - */ -export function isTimeoutError(error) { - if ( - error instanceof APICallError && - /** @type {GrokCliErrorMetadata} */ (error.data)?.code === 'TIMEOUT' - ) - return true; - return false; -} - -/** - * Check if an error is an installation error - * @param {unknown} error - Error to check - * @returns {boolean} - */ -export function isInstallationError(error) { - if (error instanceof APICallError && error.url === 'grok-cli://installation') - return true; - return false; -} - -/** - * Get error metadata from an error - * @param {unknown} error - Error to extract metadata from - * @returns {GrokCliErrorMetadata|undefined} - */ -export function getErrorMetadata(error) { - if (error instanceof APICallError && error.data) { - return /** @type {GrokCliErrorMetadata} */ (error.data); - } - return undefined; -} diff --git a/src/ai-providers/custom-sdk/grok-cli/index.js b/src/ai-providers/custom-sdk/grok-cli/index.js deleted file mode 100644 index fb959bce..00000000 --- a/src/ai-providers/custom-sdk/grok-cli/index.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @fileoverview Grok CLI provider factory and exports - */ - -import { NoSuchModelError } from '@ai-sdk/provider'; -import { GrokCliLanguageModel } from './language-model.js'; - -/** - * @typedef {import('./types.js').GrokCliSettings} GrokCliSettings - * @typedef {import('./types.js').GrokCliModelId} GrokCliModelId - * @typedef {import('./types.js').GrokCliProvider} GrokCliProvider - * @typedef {import('./types.js').GrokCliProviderSettings} GrokCliProviderSettings - */ - -/** - * Create a Grok CLI provider - * @param {GrokCliProviderSettings} [options={}] - Provider configuration options - * @returns {GrokCliProvider} Grok CLI provider instance - */ -export function createGrokCli(options = {}) { - /** - * Create a language model instance - * @param {GrokCliModelId} modelId - Model ID - * @param {GrokCliSettings} [settings={}] - Model settings - * @returns {GrokCliLanguageModel} - */ - const createModel = (modelId, settings = {}) => { - return new GrokCliLanguageModel({ - id: modelId, - settings: { - ...options.defaultSettings, - ...settings - } - }); - }; - - /** - * Provider function - * @param {GrokCliModelId} modelId - Model ID - * @param {GrokCliSettings} [settings] - Model settings - * @returns {GrokCliLanguageModel} - */ - const provider = function (modelId, settings) { - if (new.target) { - throw new Error( - 'The Grok CLI model function cannot be called with the new keyword.' - ); - } - - return createModel(modelId, settings); - }; - - provider.languageModel = createModel; - provider.chat = createModel; // Alias for languageModel - - // Add textEmbeddingModel method that throws NoSuchModelError - provider.textEmbeddingModel = (modelId) => { - throw new NoSuchModelError({ - modelId, - modelType: 'textEmbeddingModel' - }); - }; - - return /** @type {GrokCliProvider} */ (provider); -} - -/** - * Default Grok CLI provider instance - */ -export const grokCli = createGrokCli(); - -// Provider exports -export { GrokCliLanguageModel } from './language-model.js'; - -// Error handling exports -export { - isAuthenticationError, - isTimeoutError, - isInstallationError, - getErrorMetadata, - createAPICallError, - createAuthenticationError, - createTimeoutError, - createInstallationError -} from './errors.js'; diff --git a/src/ai-providers/custom-sdk/grok-cli/json-extractor.js b/src/ai-providers/custom-sdk/grok-cli/json-extractor.js deleted file mode 100644 index ac72280c..00000000 --- a/src/ai-providers/custom-sdk/grok-cli/json-extractor.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @fileoverview Extract JSON from Grok's response, handling markdown blocks and other formatting - */ - -/** - * Extract JSON from Grok's response - * @param {string} text - The text to extract JSON from - * @returns {string} - The extracted JSON string - */ -export function extractJson(text) { - // Remove markdown code blocks if present - let jsonText = text.trim(); - - // Remove ```json blocks - jsonText = jsonText.replace(/^```json\s*/gm, ''); - jsonText = jsonText.replace(/^```\s*/gm, ''); - jsonText = jsonText.replace(/```\s*$/gm, ''); - - // Remove common TypeScript/JavaScript patterns - jsonText = jsonText.replace(/^const\s+\w+\s*=\s*/, ''); // Remove "const varName = " - jsonText = jsonText.replace(/^let\s+\w+\s*=\s*/, ''); // Remove "let varName = " - jsonText = jsonText.replace(/^var\s+\w+\s*=\s*/, ''); // Remove "var varName = " - jsonText = jsonText.replace(/;?\s*$/, ''); // Remove trailing semicolons - - // Try to extract JSON object or array - const objectMatch = jsonText.match(/{[\s\S]*}/); - const arrayMatch = jsonText.match(/\[[\s\S]*\]/); - - if (objectMatch) { - jsonText = objectMatch[0]; - } else if (arrayMatch) { - jsonText = arrayMatch[0]; - } - - // First try to parse as valid JSON - try { - JSON.parse(jsonText); - return jsonText; - } catch { - // If it's not valid JSON, it might be a JavaScript object literal - // Try to convert it to valid JSON - try { - // This is a simple conversion that handles basic cases - // Replace unquoted keys with quoted keys - const converted = jsonText - .replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g, '$1"$2":') - // Replace single quotes with double quotes - .replace(/'/g, '"'); - - // Validate the converted JSON - JSON.parse(converted); - return converted; - } catch { - // If all else fails, return the original text - // The AI SDK will handle the error appropriately - return text; - } - } -} diff --git a/src/ai-providers/custom-sdk/grok-cli/types.js b/src/ai-providers/custom-sdk/grok-cli/types.js deleted file mode 100644 index 514179b5..00000000 --- a/src/ai-providers/custom-sdk/grok-cli/types.js +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @fileoverview Type definitions for Grok CLI provider - */ - -/** - * @typedef {Object} GrokCliSettings - * @property {string} [apiKey] - API key for Grok CLI - * @property {string} [baseURL] - Base URL for Grok API - * @property {string} [model] - Default model to use - * @property {number} [timeout] - Timeout in milliseconds - * @property {string} [workingDirectory] - Working directory for CLI commands - */ - -/** - * @typedef {string} GrokCliModelId - * Model identifiers supported by Grok CLI - */ - -/** - * @typedef {Object} GrokCliErrorMetadata - * @property {string} [code] - Error code - * @property {number} [exitCode] - Process exit code - * @property {string} [stderr] - Standard error output - * @property {string} [stdout] - Standard output - * @property {string} [promptExcerpt] - Excerpt of the prompt that caused the error - * @property {number} [timeoutMs] - Timeout value in milliseconds - */ - -/** - * @typedef {Function} GrokCliProvider - * @property {Function} languageModel - Create a language model - * @property {Function} chat - Alias for languageModel - * @property {Function} textEmbeddingModel - Text embedding model (throws error) - */ - -/** - * @typedef {Object} GrokCliProviderSettings - * @property {GrokCliSettings} [defaultSettings] - Default settings for all models - */ - -/** - * @typedef {Object} GrokCliMessage - * @property {string} role - Message role (user, assistant, system) - * @property {string} content - Message content - */ - -/** - * @typedef {Object} GrokCliResponse - * @property {string} content - Response content - * @property {Object} [usage] - Token usage information - * @property {number} [usage.prompt_tokens] - Input tokens used - * @property {number} [usage.completion_tokens] - Output tokens used - * @property {number} [usage.total_tokens] - Total tokens used - */ - -export {}; diff --git a/src/ai-providers/gemini-cli.js b/src/ai-providers/gemini-cli.js index 64e902f8..4466ff2c 100644 --- a/src/ai-providers/gemini-cli.js +++ b/src/ai-providers/gemini-cli.js @@ -9,26 +9,16 @@ import { generateObject, generateText, streamText } from 'ai'; import { parse } from 'jsonc-parser'; import { BaseAIProvider } from './base-provider.js'; import { log } from '../../scripts/modules/utils.js'; - -let createGeminiProvider; - -async function loadGeminiCliModule() { - if (!createGeminiProvider) { - try { - const mod = await import('ai-sdk-provider-gemini-cli'); - createGeminiProvider = mod.createGeminiProvider; - } catch (err) { - throw new Error( - "Gemini CLI SDK is not installed. Please install 'ai-sdk-provider-gemini-cli' to use the gemini-cli provider." - ); - } - } -} +import { createGeminiProvider } from 'ai-sdk-provider-gemini-cli'; export class GeminiCliProvider extends BaseAIProvider { constructor() { super(); this.name = 'Gemini CLI'; + // Gemini CLI requires explicit JSON schema mode + this.needsExplicitJsonSchema = true; + // Gemini CLI does not support temperature parameter + this.supportsTemperature = false; } /** @@ -54,8 +44,6 @@ export class GeminiCliProvider extends BaseAIProvider { */ async getClient(params) { try { - // Load the Gemini CLI module dynamically - await loadGeminiCliModule(); // Primary use case: Use existing gemini CLI authentication // Secondary use case: Direct API key (for compatibility) let authOptions = {}; @@ -441,7 +429,7 @@ Generate ${subtaskCount} subtasks based on the original task context. Return ONL model: client(params.modelId), system: systemPrompt, messages: messages, - maxTokens: params.maxTokens, + maxOutputTokens: params.maxTokens, temperature: params.temperature }); @@ -545,7 +533,7 @@ Generate ${subtaskCount} subtasks based on the original task context. Return ONL model: client(params.modelId), system: systemPrompt, messages: messages, - maxTokens: params.maxTokens, + maxOutputTokens: params.maxTokens, temperature: params.temperature }); @@ -603,8 +591,8 @@ Generate ${subtaskCount} subtasks based on the original task context. Return ONL system: systemPrompt, messages: messages, schema: params.schema, - mode: 'json', // Use json mode instead of auto for Gemini - maxTokens: params.maxTokens, + mode: this.needsExplicitJsonSchema ? 'json' : 'auto', + maxOutputTokens: params.maxTokens, temperature: params.temperature }); diff --git a/src/ai-providers/grok-cli.js b/src/ai-providers/grok-cli.js index 2d777fed..7938e727 100644 --- a/src/ai-providers/grok-cli.js +++ b/src/ai-providers/grok-cli.js @@ -3,7 +3,7 @@ * AI provider implementation for Grok models using Grok CLI. */ -import { createGrokCli } from './custom-sdk/grok-cli/index.js'; +import { createGrokCli } from '@tm/ai-sdk-provider-grok-cli'; import { BaseAIProvider } from './base-provider.js'; import { getGrokCliSettingsForCommand } from '../../scripts/modules/config-manager.js'; @@ -11,6 +11,10 @@ export class GrokCliProvider extends BaseAIProvider { constructor() { super(); this.name = 'Grok CLI'; + // Grok CLI requires explicit JSON schema mode + this.needsExplicitJsonSchema = true; + // Grok CLI does not support temperature parameter + this.supportsTemperature = false; } /** diff --git a/src/ai-providers/index.js b/src/ai-providers/index.js index 5d8c3a1d..b0d5498a 100644 --- a/src/ai-providers/index.js +++ b/src/ai-providers/index.js @@ -17,3 +17,4 @@ export { VertexAIProvider } from './google-vertex.js'; export { ClaudeCodeProvider } from './claude-code.js'; export { GeminiCliProvider } from './gemini-cli.js'; export { GrokCliProvider } from './grok-cli.js'; +export { CodexCliProvider } from './codex-cli.js'; diff --git a/src/ai-providers/ollama.js b/src/ai-providers/ollama.js index 0dfd8f0d..a1805bda 100644 --- a/src/ai-providers/ollama.js +++ b/src/ai-providers/ollama.js @@ -1,9 +1,9 @@ /** * ollama.js - * AI provider implementation for Ollama models using the ollama-ai-provider package. + * AI provider implementation for Ollama models using the ollama-ai-provider-v2 package. */ -import { createOllama } from 'ollama-ai-provider'; +import { createOllama } from 'ollama-ai-provider-v2'; import { BaseAIProvider } from './base-provider.js'; export class OllamaAIProvider extends BaseAIProvider { diff --git a/src/ai-providers/openai.js b/src/ai-providers/openai.js index adf55822..4f7b67eb 100644 --- a/src/ai-providers/openai.js +++ b/src/ai-providers/openai.js @@ -20,16 +20,6 @@ export class OpenAIProvider extends BaseAIProvider { return 'OPENAI_API_KEY'; } - /** - * Determines if a model requires max_completion_tokens instead of maxTokens - * GPT-5 models require max_completion_tokens parameter - * @param {string} modelId - The model ID to check - * @returns {boolean} True if the model requires max_completion_tokens - */ - requiresMaxCompletionTokens(modelId) { - return modelId && modelId.startsWith('gpt-5'); - } - /** * Creates and returns an OpenAI client instance. * @param {object} params - Parameters for client initialization diff --git a/src/constants/providers.js b/src/constants/providers.js index d8868d03..d1bcf7ba 100644 --- a/src/constants/providers.js +++ b/src/constants/providers.js @@ -24,7 +24,8 @@ export const CUSTOM_PROVIDERS = { CLAUDE_CODE: 'claude-code', MCP: 'mcp', GEMINI_CLI: 'gemini-cli', - GROK_CLI: 'grok-cli' + GROK_CLI: 'grok-cli', + CODEX_CLI: 'codex-cli' }; // Custom providers array (for backward compatibility and iteration) diff --git a/src/profiles/cursor.js b/src/profiles/cursor.js index 8d9f7a91..29808c2d 100644 --- a/src/profiles/cursor.js +++ b/src/profiles/cursor.js @@ -1,5 +1,134 @@ // Cursor conversion profile for rule-transformer -import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js'; +import path from 'path'; +import fs from 'fs'; +import { log } from '../../scripts/modules/utils.js'; +import { createProfile } from './base-profile.js'; + +// Helper copy; use cpSync when available, fallback to manual recursion +function copyRecursiveSync(src, dest) { + if (fs.cpSync) { + try { + fs.cpSync(src, dest, { recursive: true, force: true }); + return; + } catch (err) { + throw new Error(`Failed to copy ${src} to ${dest}: ${err.message}`); + } + } + const exists = fs.existsSync(src); + let stats = null; + let isDirectory = false; + + if (exists) { + try { + stats = fs.statSync(src); + isDirectory = stats.isDirectory(); + } catch (err) { + // Handle TOCTOU race condition - treat as non-existent/not-a-directory + isDirectory = false; + } + } + + if (isDirectory) { + try { + if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true }); + for (const child of fs.readdirSync(src)) { + copyRecursiveSync(path.join(src, child), path.join(dest, child)); + } + } catch (err) { + throw new Error( + `Failed to copy directory ${src} to ${dest}: ${err.message}` + ); + } + } else { + try { + // ensure parent exists for file copies + fs.mkdirSync(path.dirname(dest), { recursive: true }); + fs.copyFileSync(src, dest); + } catch (err) { + throw new Error(`Failed to copy file ${src} to ${dest}: ${err.message}`); + } + } +} + +// Helper function to recursively remove directory +function removeDirectoryRecursive(dirPath) { + if (fs.existsSync(dirPath)) { + try { + fs.rmSync(dirPath, { recursive: true, force: true }); + return true; + } catch (err) { + log('error', `Failed to remove directory ${dirPath}: ${err.message}`); + return false; + } + } + return true; +} + +// Resolve the Cursor profile directory from either project root, profile root, or rules dir +function resolveCursorProfileDir(baseDir) { + const base = path.basename(baseDir); + // If called with .../.cursor/rules -> return .../.cursor + if (base === 'rules' && path.basename(path.dirname(baseDir)) === '.cursor') { + return path.dirname(baseDir); + } + // If called with .../.cursor -> return as-is + if (base === '.cursor') return baseDir; + // Otherwise assume project root and append .cursor + return path.join(baseDir, '.cursor'); +} + +// Lifecycle functions for Cursor profile +function onAddRulesProfile(targetDir, assetsDir) { + // Copy commands directory recursively + const commandsSourceDir = path.join(assetsDir, 'claude', 'commands'); + const profileDir = resolveCursorProfileDir(targetDir); + const commandsDestDir = path.join(profileDir, 'commands'); + + if (!fs.existsSync(commandsSourceDir)) { + log( + 'warn', + `[Cursor] Source commands directory does not exist: ${commandsSourceDir}` + ); + return; + } + + try { + // Ensure fresh state to avoid stale command files + try { + fs.rmSync(commandsDestDir, { recursive: true, force: true }); + log( + 'debug', + `[Cursor] Removed existing commands directory: ${commandsDestDir}` + ); + } catch (deleteErr) { + // Directory might not exist, which is fine + log( + 'debug', + `[Cursor] Commands directory did not exist or could not be removed: ${deleteErr.message}` + ); + } + + copyRecursiveSync(commandsSourceDir, commandsDestDir); + log('debug', `[Cursor] Copied commands directory to ${commandsDestDir}`); + } catch (err) { + log( + 'error', + `[Cursor] An error occurred during commands copy: ${err.message}` + ); + } +} + +function onRemoveRulesProfile(targetDir) { + // Remove .cursor/commands directory recursively + const profileDir = resolveCursorProfileDir(targetDir); + const commandsDir = path.join(profileDir, 'commands'); + if (removeDirectoryRecursive(commandsDir)) { + log( + 'debug', + `[Cursor] Ensured commands directory removed at ${commandsDir}` + ); + } +} // Create and export cursor profile using the base factory export const cursorProfile = createProfile({ @@ -8,5 +137,10 @@ export const cursorProfile = createProfile({ url: 'cursor.so', docsUrl: 'docs.cursor.com', targetExtension: '.mdc', // Cursor keeps .mdc extension - supportsRulesSubdirectories: true + supportsRulesSubdirectories: true, + onAdd: onAddRulesProfile, + onRemove: onRemoveRulesProfile }); + +// Export lifecycle functions separately to avoid naming conflicts +export { onAddRulesProfile, onRemoveRulesProfile }; diff --git a/src/profiles/roo.js b/src/profiles/roo.js index 8d7f40b0..2c23f933 100644 --- a/src/profiles/roo.js +++ b/src/profiles/roo.js @@ -5,6 +5,40 @@ import { isSilentMode, log } from '../../scripts/modules/utils.js'; import { createProfile, COMMON_TOOL_MAPPINGS } from './base-profile.js'; import { ROO_MODES } from '../constants/profiles.js'; +// Import the shared MCP configuration helper +import { formatJSONWithTabs } from '../utils/create-mcp-config.js'; + +// Roo-specific MCP configuration enhancements +function enhanceRooMCPConfiguration(mcpPath) { + if (!fs.existsSync(mcpPath)) { + log('warn', `[Roo] MCP configuration file not found at ${mcpPath}`); + return; + } + + try { + // Read the existing configuration + const mcpConfig = JSON.parse(fs.readFileSync(mcpPath, 'utf8')); + + if (mcpConfig.mcpServers && mcpConfig.mcpServers['task-master-ai']) { + const server = mcpConfig.mcpServers['task-master-ai']; + + // Add Roo-specific timeout enhancement for long-running AI operations + server.timeout = 300; + + // Write the enhanced configuration back + fs.writeFileSync(mcpPath, formatJSONWithTabs(mcpConfig) + '\n'); + log( + 'debug', + `[Roo] Enhanced MCP configuration with timeout at ${mcpPath}` + ); + } else { + log('warn', `[Roo] task-master-ai server not found in MCP configuration`); + } + } catch (error) { + log('error', `[Roo] Failed to enhance MCP configuration: ${error.message}`); + } +} + // Lifecycle functions for Roo profile function onAddRulesProfile(targetDir, assetsDir) { // Use the provided assets directory to find the roocode directory @@ -32,6 +66,9 @@ function onAddRulesProfile(targetDir, assetsDir) { } } + // Note: MCP configuration is now handled by the base profile system + // The base profile will call setupMCPConfiguration, and we enhance it in onPostConvert + for (const mode of ROO_MODES) { const src = path.join(rooModesDir, `rules-${mode}`, `${mode}-rules`); const dest = path.join(targetDir, '.roo', `rules-${mode}`, `${mode}-rules`); @@ -78,6 +115,15 @@ function onRemoveRulesProfile(targetDir) { const rooDir = path.join(targetDir, '.roo'); if (fs.existsSync(rooDir)) { + // Remove MCP configuration + const mcpPath = path.join(rooDir, 'mcp.json'); + try { + fs.rmSync(mcpPath, { force: true }); + log('debug', `[Roo] Removed MCP configuration from ${mcpPath}`); + } catch (err) { + log('error', `[Roo] Failed to remove MCP configuration: ${err.message}`); + } + fs.readdirSync(rooDir).forEach((entry) => { if (entry.startsWith('rules-')) { const modeDir = path.join(rooDir, entry); @@ -101,7 +147,13 @@ function onRemoveRulesProfile(targetDir) { } function onPostConvertRulesProfile(targetDir, assetsDir) { - onAddRulesProfile(targetDir, assetsDir); + // Enhance the MCP configuration with Roo-specific features after base setup + const mcpPath = path.join(targetDir, '.roo', 'mcp.json'); + try { + enhanceRooMCPConfiguration(mcpPath); + } catch (err) { + log('error', `[Roo] Failed to enhance MCP configuration: ${err.message}`); + } } // Create and export roo profile using the base factory @@ -111,6 +163,7 @@ export const rooProfile = createProfile({ url: 'roocode.com', docsUrl: 'docs.roocode.com', toolMappings: COMMON_TOOL_MAPPINGS.ROO_STYLE, + mcpConfig: true, // Enable MCP config - we enhance it with Roo-specific features onAdd: onAddRulesProfile, onRemove: onRemoveRulesProfile, onPostConvert: onPostConvertRulesProfile diff --git a/src/prompts/analyze-complexity.json b/src/prompts/analyze-complexity.json index df475eb8..a9b39a70 100644 --- a/src/prompts/analyze-complexity.json +++ b/src/prompts/analyze-complexity.json @@ -44,8 +44,8 @@ }, "prompts": { "default": { - "system": "You are an expert software architect and project manager analyzing task complexity. Respond only with the requested valid JSON array.", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before analyzing task complexity:\n\n1. Use the Glob tool to explore the project structure and understand the codebase size\n2. Use the Grep tool to search for existing implementations related to each task\n3. Use the Read tool to examine key files that would be affected by these tasks\n4. Understand the current implementation state, patterns used, and technical debt\n\nBased on your codebase analysis:\n- Assess complexity based on ACTUAL code that needs to be modified/created\n- Consider existing abstractions and patterns that could simplify implementation\n- Identify tasks that require refactoring vs. greenfield development\n- Factor in dependencies between existing code and new features\n- Provide more accurate subtask recommendations based on real code structure\n\nProject Root: {{projectRoot}}\n\n{{/if}}Analyze the following tasks to determine their complexity (1-10 scale) and recommend the number of subtasks for expansion. Provide a brief reasoning and an initial expansion prompt for each.{{#if useResearch}} Consider current best practices, common implementation patterns, and industry standards in your analysis.{{/if}}\n\nTasks:\n{{{json tasks}}}\n{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}\n{{/if}}\n\nRespond ONLY with a valid JSON array matching the schema:\n[\n {\n \"taskId\": ,\n \"taskTitle\": \"\",\n \"complexityScore\": ,\n \"recommendedSubtasks\": ,\n \"expansionPrompt\": \"\",\n \"reasoning\": \"\"\n },\n ...\n]\n\nDo not include any explanatory text, markdown formatting, or code block markers before or after the JSON array." + "system": "You are an expert software architect and project manager analyzing task complexity. Your analysis should consider implementation effort, technical challenges, dependencies, and testing requirements.\n\nIMPORTANT: For each task, provide an analysis object with ALL of the following fields:\n- taskId: The ID of the task being analyzed (positive integer)\n- taskTitle: The title of the task\n- complexityScore: A score from 1-10 indicating complexity\n- recommendedSubtasks: Number of subtasks recommended (non-negative integer; 0 if no expansion needed)\n- expansionPrompt: A prompt to guide subtask generation\n- reasoning: Your reasoning for the complexity score", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before analyzing task complexity:\n\n1. Use the Glob tool to explore the project structure and understand the codebase size\n2. Use the Grep tool to search for existing implementations related to each task\n3. Use the Read tool to examine key files that would be affected by these tasks\n4. Understand the current implementation state, patterns used, and technical debt\n\nBased on your codebase analysis:\n- Assess complexity based on ACTUAL code that needs to be modified/created\n- Consider existing abstractions and patterns that could simplify implementation\n- Identify tasks that require refactoring vs. greenfield development\n- Factor in dependencies between existing code and new features\n- Provide more accurate subtask recommendations based on real code structure\n\nProject Root: {{projectRoot}}\n\n{{/if}}Analyze the following tasks to determine their complexity (1-10 scale) and recommend the number of subtasks for expansion. Provide a brief reasoning and an initial expansion prompt for each.{{#if useResearch}} Consider current best practices, common implementation patterns, and industry standards in your analysis.{{/if}}\n\nTasks:\n{{{json tasks}}}\n{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}\n{{/if}}\n" } } } diff --git a/src/prompts/expand-task.json b/src/prompts/expand-task.json index 92b7115a..dc60af37 100644 --- a/src/prompts/expand-task.json +++ b/src/prompts/expand-task.json @@ -68,17 +68,18 @@ "prompts": { "complexity-report": { "condition": "expansionPrompt", - "system": "You are an AI assistant helping with task breakdown. Generate {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} subtasks based on the provided prompt and context.\nRespond ONLY with a valid JSON object containing a single key \"subtasks\" whose value is an array of the generated subtask objects.\nEach subtask object in the array must have keys: \"id\", \"title\", \"description\", \"dependencies\", \"details\", \"status\".\nEnsure the 'id' starts from {{nextSubtaskId}} and is sequential.\nFor 'dependencies', use the full subtask ID format: \"{{task.id}}.1\", \"{{task.id}}.2\", etc. Only reference subtasks within this same task.\nEnsure 'status' is 'pending'.\nDo not include any other text or explanation.", - "user": "Break down the following task based on the analysis prompt:\n\nParent Task:\nID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}\n\nExpansion Guidance:\n{{expansionPrompt}}{{#if additionalContext}}\n\n{{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\n\n{{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nGenerate {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} subtasks with sequential IDs starting from {{nextSubtaskId}}." + "system": "You are an AI assistant helping with task breakdown. Generate {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} subtasks based on the provided prompt and context.\n\nIMPORTANT: Each subtask must include ALL of the following fields:\n- id: MUST be sequential integers starting EXACTLY from {{nextSubtaskId}}. First subtask id={{nextSubtaskId}}, second id={{nextSubtaskId}}+1, etc. DO NOT use any other numbering pattern!\n- title: A clear, actionable title (5-200 characters)\n- description: A detailed description (minimum 10 characters)\n- dependencies: An array of task IDs this subtask depends on (can be empty [])\n- details: Implementation details (minimum 20 characters)\n- status: Must be \"pending\" for new subtasks\n- testStrategy: Testing approach (can be null)", + + "user": "Break down the following task:\n\nParent Task:\nID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}\n\n{{expansionPrompt}}{{#if additionalContext}}\n\n{{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\n\n{{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nGenerate {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} subtasks. CRITICAL: Use sequential IDs starting from {{nextSubtaskId}} (first={{nextSubtaskId}}, second={{nextSubtaskId}}+1, etc.)." }, "research": { "condition": "useResearch === true && !expansionPrompt", - "system": "You are an AI assistant that responds ONLY with valid JSON objects as requested. The object should contain a 'subtasks' array.", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating subtasks:\n\n1. Use the Glob tool to explore relevant files for this task (e.g., \"**/*.js\", \"src/**/*.ts\")\n2. Use the Grep tool to search for existing implementations related to this task\n3. Use the Read tool to examine files that would be affected by this task\n4. Understand the current implementation state and patterns used\n\nBased on your analysis:\n- Identify existing code that relates to this task\n- Understand patterns and conventions to follow\n- Generate subtasks that integrate smoothly with existing code\n- Ensure subtasks are specific and actionable based on the actual codebase\n\nProject Root: {{projectRoot}}\n\n{{/if}}Analyze the following task and break it down into {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} specific subtasks using your research capabilities. Assign sequential IDs starting from {{nextSubtaskId}}.\n\nParent Task:\nID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}{{#if additionalContext}}\nConsider this context: {{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\nComplexity Analysis Reasoning: {{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nCRITICAL: Respond ONLY with a valid JSON object containing a single key \"subtasks\". The value must be an array of the generated subtasks, strictly matching this structure:\n\n{\n \"subtasks\": [\n {\n \"id\": , // Sequential ID starting from {{nextSubtaskId}}\n \"title\": \"\",\n \"description\": \"\",\n \"dependencies\": [\"\"], // Use full subtask IDs like [\"{{task.id}}.1\", \"{{task.id}}.2\"]. If no dependencies, use an empty array [].\n \"details\": \"\",\n \"testStrategy\": \"\" // Optional\n },\n // ... (repeat for {{#if (gt subtaskCount 0)}}{{subtaskCount}}{{else}}appropriate number of{{/if}} subtasks)\n ]\n}\n\nImportant: For the 'dependencies' field, if a subtask has no dependencies, you MUST use an empty array, for example: \"dependencies\": []. Do not use null or omit the field.\n\nDo not include ANY explanatory text, markdown, or code block markers. Just the JSON object." + "system": "You are an AI assistant with research capabilities analyzing and breaking down software development tasks.\n\nIMPORTANT: Each subtask must include ALL of the following fields:\n- id: MUST be sequential integers starting EXACTLY from {{nextSubtaskId}}. First subtask id={{nextSubtaskId}}, second id={{nextSubtaskId}}+1, etc. DO NOT use any other numbering pattern!\n- title: A clear, actionable title (5-200 characters)\n- description: A detailed description (minimum 10 characters)\n- dependencies: An array of task IDs this subtask depends on (can be empty [])\n- details: Implementation details (minimum 20 characters)\n- status: Must be \"pending\" for new subtasks\n- testStrategy: Testing approach (can be null)", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating subtasks:\n\n1. Use the Glob tool to explore relevant files for this task (e.g., \"**/*.js\", \"src/**/*.ts\")\n2. Use the Grep tool to search for existing implementations related to this task\n3. Use the Read tool to examine files that would be affected by this task\n4. Understand the current implementation state and patterns used\n\nBased on your analysis:\n- Identify existing code that relates to this task\n- Understand patterns and conventions to follow\n- Generate subtasks that integrate smoothly with existing code\n- Ensure subtasks are specific and actionable based on the actual codebase\n\nProject Root: {{projectRoot}}\n\n{{/if}}Analyze the following task and break it down into {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} specific subtasks. Each subtask should be actionable and well-defined.\n\nParent Task:\nID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}{{#if additionalContext}}\nConsider this context: {{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\nComplexity Analysis Reasoning: {{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nCRITICAL: You MUST use sequential IDs starting from {{nextSubtaskId}}. The first subtask MUST have id={{nextSubtaskId}}, the second MUST have id={{nextSubtaskId}}+1, and so on. Do NOT use parent task ID in subtask numbering!" }, "default": { - "system": "You are an AI assistant helping with task breakdown for software development.\nYou need to break down a high-level task into {{#if (gt subtaskCount 0)}}{{subtaskCount}}{{else}}an appropriate number of{{/if}} specific subtasks that can be implemented one by one.\n\nSubtasks should:\n1. Be specific and actionable implementation steps\n2. Follow a logical sequence\n3. Each handle a distinct part of the parent task\n4. Include clear guidance on implementation approach\n5. Have appropriate dependency chains between subtasks (using full subtask IDs)\n6. Collectively cover all aspects of the parent task\n\nFor each subtask, provide:\n- id: Sequential integer starting from the provided nextSubtaskId\n- title: Clear, specific title\n- description: Detailed description\n- dependencies: Array of prerequisite subtask IDs using full format like [\"{{task.id}}.1\", \"{{task.id}}.2\"]\n- details: Implementation details, the output should be in string\n- testStrategy: Optional testing approach\n\nRespond ONLY with a valid JSON object containing a single key \"subtasks\" whose value is an array matching the structure described. Do not include any explanatory text, markdown formatting, or code block markers.", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating subtasks:\n\n1. Use the Glob tool to explore relevant files for this task (e.g., \"**/*.js\", \"src/**/*.ts\")\n2. Use the Grep tool to search for existing implementations related to this task\n3. Use the Read tool to examine files that would be affected by this task\n4. Understand the current implementation state and patterns used\n\nBased on your analysis:\n- Identify existing code that relates to this task\n- Understand patterns and conventions to follow\n- Generate subtasks that integrate smoothly with existing code\n- Ensure subtasks are specific and actionable based on the actual codebase\n\nProject Root: {{projectRoot}}\n\n{{/if}}Break down this task into {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} specific subtasks:\n\nTask ID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}{{#if additionalContext}}\nAdditional context: {{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\nComplexity Analysis Reasoning: {{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nReturn ONLY the JSON object containing the \"subtasks\" array, matching this structure:\n\n{\n \"subtasks\": [\n {\n \"id\": {{nextSubtaskId}}, // First subtask ID\n \"title\": \"Specific subtask title\",\n \"description\": \"Detailed description\",\n \"dependencies\": [], // e.g., [\"{{task.id}}.1\", \"{{task.id}}.2\"] for dependencies. Use empty array [] if no dependencies\n \"details\": \"Implementation guidance\",\n \"testStrategy\": \"Optional testing approach\"\n },\n // ... (repeat for {{#if (gt subtaskCount 0)}}a total of {{subtaskCount}}{{else}}an appropriate number of{{/if}} subtasks with sequential IDs)\n ]\n}" + "system": "You are an AI assistant helping with task breakdown for software development. Break down high-level tasks into specific, actionable subtasks that can be implemented sequentially.\n\nIMPORTANT: Each subtask must include ALL of the following fields:\n- id: MUST be sequential integers starting EXACTLY from {{nextSubtaskId}}. First subtask id={{nextSubtaskId}}, second id={{nextSubtaskId}}+1, etc. DO NOT use any other numbering pattern!\n- title: A clear, actionable title (5-200 characters)\n- description: A detailed description (minimum 10 characters)\n- dependencies: An array of task IDs this subtask depends on (can be empty [])\n- details: Implementation details (minimum 20 characters)\n- status: Must be \"pending\" for new subtasks\n- testStrategy: Testing approach (can be null)", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating subtasks:\n\n1. Use the Glob tool to explore relevant files for this task (e.g., \"**/*.js\", \"src/**/*.ts\")\n2. Use the Grep tool to search for existing implementations related to this task\n3. Use the Read tool to examine files that would be affected by this task\n4. Understand the current implementation state and patterns used\n\nBased on your analysis:\n- Identify existing code that relates to this task\n- Understand patterns and conventions to follow\n- Generate subtasks that integrate smoothly with existing code\n- Ensure subtasks are specific and actionable based on the actual codebase\n\nProject Root: {{projectRoot}}\n\n{{/if}}Break down this task into {{#if (gt subtaskCount 0)}}exactly {{subtaskCount}}{{else}}an appropriate number of{{/if}} specific subtasks:\n\nTask ID: {{task.id}}\nTitle: {{task.title}}\nDescription: {{task.description}}\nCurrent details: {{#if task.details}}{{task.details}}{{else}}None{{/if}}{{#if additionalContext}}\nAdditional context: {{additionalContext}}{{/if}}{{#if complexityReasoningContext}}\nComplexity Analysis Reasoning: {{complexityReasoningContext}}{{/if}}{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}{{/if}}\n\nCRITICAL: You MUST use sequential IDs starting from {{nextSubtaskId}}. The first subtask MUST have id={{nextSubtaskId}}, the second MUST have id={{nextSubtaskId}}+1, and so on. Do NOT use parent task ID in subtask numbering!" } } } diff --git a/src/prompts/parse-prd.json b/src/prompts/parse-prd.json index 72786f65..2351385b 100644 --- a/src/prompts/parse-prd.json +++ b/src/prompts/parse-prd.json @@ -56,8 +56,8 @@ }, "prompts": { "default": { - "system": "You are an AI assistant specialized in analyzing Product Requirements Documents (PRDs) and generating a structured, logically ordered, dependency-aware and sequenced list of development tasks in JSON format.{{#if research}}\nBefore breaking down the PRD into tasks, you will:\n1. Research and analyze the latest technologies, libraries, frameworks, and best practices that would be appropriate for this project\n2. Identify any potential technical challenges, security concerns, or scalability issues not explicitly mentioned in the PRD without discarding any explicit requirements or going overboard with complexity -- always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches\n3. Consider current industry standards and evolving trends relevant to this project (this step aims to solve LLM hallucinations and out of date information due to training data cutoff dates)\n4. Evaluate alternative implementation approaches and recommend the most efficient path\n5. Include specific library versions, helpful APIs, and concrete implementation guidance based on your research\n6. Always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches\n\nYour task breakdown should incorporate this research, resulting in more detailed implementation guidance, more accurate dependency mapping, and more precise technology recommendations than would be possible from the PRD text alone, while maintaining all explicit requirements and best practices and all details and nuances of the PRD.{{/if}}\n\nAnalyze the provided PRD content and generate {{#if (gt numTasks 0)}}approximately {{numTasks}}{{else}}an appropriate number of{{/if}} top-level development tasks. If the complexity or the level of detail of the PRD is high, generate more tasks relative to the complexity of the PRD\nEach task should represent a logical unit of work needed to implement the requirements and focus on the most direct and effective way to implement the requirements without unnecessary complexity or overengineering. Include pseudo-code, implementation details, and test strategy for each task. Find the most up to date information to implement each task.\nAssign sequential IDs starting from {{nextId}}. Infer title, description, details, and test strategy for each task based *only* on the PRD content.\nSet status to 'pending', dependencies to an empty array [], and priority to '{{defaultTaskPriority}}' initially for all tasks.\nRespond ONLY with a valid JSON object containing a single key \"tasks\", where the value is an array of task objects adhering to the provided Zod schema. Do not include any explanation or markdown formatting.\n\nEach task should follow this JSON structure:\n{\n\t\"id\": number,\n\t\"title\": string,\n\t\"description\": string,\n\t\"status\": \"pending\",\n\t\"dependencies\": number[] (IDs of tasks this depends on),\n\t\"priority\": \"high\" | \"medium\" | \"low\",\n\t\"details\": string (implementation details),\n\t\"testStrategy\": string (validation approach)\n}\n\nGuidelines:\n1. {{#if (gt numTasks 0)}}Unless complexity warrants otherwise{{else}}Depending on the complexity{{/if}}, create {{#if (gt numTasks 0)}}exactly {{numTasks}}{{else}}an appropriate number of{{/if}} tasks, numbered sequentially starting from {{nextId}}\n2. Each task should be atomic and focused on a single responsibility following the most up to date best practices and standards\n3. Order tasks logically - consider dependencies and implementation sequence\n4. Early tasks should focus on setup, core functionality first, then advanced features\n5. Include clear validation/testing approach for each task\n6. Set appropriate dependency IDs (a task can only depend on tasks with lower IDs, potentially including existing tasks with IDs less than {{nextId}} if applicable)\n7. Assign priority (high/medium/low) based on criticality and dependency order\n8. Include detailed implementation guidance in the \"details\" field{{#if research}}, with specific libraries and version recommendations based on your research{{/if}}\n9. If the PRD contains specific requirements for libraries, database schemas, frameworks, tech stacks, or any other implementation details, STRICTLY ADHERE to these requirements in your task breakdown and do not discard them under any circumstance\n10. Focus on filling in any gaps left by the PRD or areas that aren't fully specified, while preserving all explicit requirements\n11. Always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches{{#if research}}\n12. For each task, include specific, actionable guidance based on current industry standards and best practices discovered through research{{/if}}", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating tasks:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine key files like package.json, README.md, and main entry points\n4. Analyze the current state of implementation to understand what already exists\n\nBased on your analysis:\n- Identify what components/features are already implemented\n- Understand the technology stack, frameworks, and patterns in use\n- Generate tasks that build upon the existing codebase rather than duplicating work\n- Ensure tasks align with the project's current architecture and conventions\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here's the Product Requirements Document (PRD) to break down into {{#if (gt numTasks 0)}}approximately {{numTasks}}{{else}}an appropriate number of{{/if}} tasks, starting IDs from {{nextId}}:{{#if research}}\n\nRemember to thoroughly research current best practices and technologies before task breakdown to provide specific, actionable implementation details.{{/if}}\n\n{{prdContent}}\n\n\n\t\tReturn your response in this format:\n{\n \"tasks\": [\n {\n \"id\": 1,\n \"title\": \"Setup Project Repository\",\n \"description\": \"...\",\n ...\n },\n ...\n ],\n \"metadata\": {\n \"projectName\": \"PRD Implementation\",\n \"totalTasks\": {{#if (gt numTasks 0)}}{{numTasks}}{{else}}{number of tasks}{{/if}},\n \"sourceFile\": \"{{prdPath}}\",\n \"generatedAt\": \"YYYY-MM-DD\"\n }\n}" + "system": "You are an AI assistant specialized in analyzing Product Requirements Documents (PRDs) and generating a structured, logically ordered, dependency-aware and sequenced list of development tasks in JSON format.{{#if research}}\nBefore breaking down the PRD into tasks, you will:\n1. Research and analyze the latest technologies, libraries, frameworks, and best practices that would be appropriate for this project\n2. Identify any potential technical challenges, security concerns, or scalability issues not explicitly mentioned in the PRD without discarding any explicit requirements or going overboard with complexity -- always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches\n3. Consider current industry standards and evolving trends relevant to this project (this step aims to solve LLM hallucinations and out of date information due to training data cutoff dates)\n4. Evaluate alternative implementation approaches and recommend the most efficient path\n5. Include specific library versions, helpful APIs, and concrete implementation guidance based on your research\n6. Always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches\n\nYour task breakdown should incorporate this research, resulting in more detailed implementation guidance, more accurate dependency mapping, and more precise technology recommendations than would be possible from the PRD text alone, while maintaining all explicit requirements and best practices and all details and nuances of the PRD.{{/if}}\n\nAnalyze the provided PRD content and generate {{#if (gt numTasks 0)}}approximately {{numTasks}}{{else}}an appropriate number of{{/if}} top-level development tasks. If the complexity or the level of detail of the PRD is high, generate more tasks relative to the complexity of the PRD\nEach task should represent a logical unit of work needed to implement the requirements and focus on the most direct and effective way to implement the requirements without unnecessary complexity or overengineering. Include pseudo-code, implementation details, and test strategy for each task. Find the most up to date information to implement each task.\nAssign sequential IDs starting from {{nextId}}. Infer title, description, details, and test strategy for each task based *only* on the PRD content.\nSet status to 'pending', dependencies to an empty array [], and priority to '{{defaultTaskPriority}}' initially for all tasks.\nGenerate a response containing a single key \"tasks\", where the value is an array of task objects adhering to the provided schema.\n\nEach task should follow this JSON structure:\n{\n\t\"id\": number,\n\t\"title\": string,\n\t\"description\": string,\n\t\"status\": \"pending\",\n\t\"dependencies\": number[] (IDs of tasks this depends on),\n\t\"priority\": \"high\" | \"medium\" | \"low\",\n\t\"details\": string (implementation details),\n\t\"testStrategy\": string (validation approach)\n}\n\nGuidelines:\n1. {{#if (gt numTasks 0)}}Unless complexity warrants otherwise{{else}}Depending on the complexity{{/if}}, create {{#if (gt numTasks 0)}}exactly {{numTasks}}{{else}}an appropriate number of{{/if}} tasks, numbered sequentially starting from {{nextId}}\n2. Each task should be atomic and focused on a single responsibility following the most up to date best practices and standards\n3. Order tasks logically - consider dependencies and implementation sequence\n4. Early tasks should focus on setup, core functionality first, then advanced features\n5. Include clear validation/testing approach for each task\n6. Set appropriate dependency IDs (a task can only depend on tasks with lower IDs, potentially including existing tasks with IDs less than {{nextId}} if applicable)\n7. Assign priority (high/medium/low) based on criticality and dependency order\n8. Include detailed implementation guidance in the \"details\" field{{#if research}}, with specific libraries and version recommendations based on your research{{/if}}\n9. If the PRD contains specific requirements for libraries, database schemas, frameworks, tech stacks, or any other implementation details, STRICTLY ADHERE to these requirements in your task breakdown and do not discard them under any circumstance\n10. Focus on filling in any gaps left by the PRD or areas that aren't fully specified, while preserving all explicit requirements\n11. Always aim to provide the most direct path to implementation, avoiding over-engineering or roundabout approaches{{#if research}}\n12. For each task, include specific, actionable guidance based on current industry standards and best practices discovered through research{{/if}}", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating tasks:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine key files like package.json, README.md, and main entry points\n4. Analyze the current state of implementation to understand what already exists\n\nBased on your analysis:\n- Identify what components/features are already implemented\n- Understand the technology stack, frameworks, and patterns in use\n- Generate tasks that build upon the existing codebase rather than duplicating work\n- Ensure tasks align with the project's current architecture and conventions\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here's the Product Requirements Document (PRD) to break down into {{#if (gt numTasks 0)}}approximately {{numTasks}}{{else}}an appropriate number of{{/if}} tasks, starting IDs from {{nextId}}:{{#if research}}\n\nRemember to thoroughly research current best practices and technologies before task breakdown to provide specific, actionable implementation details.{{/if}}\n\n{{prdContent}}\n\nIMPORTANT: Your response must be a JSON object with a single property named \"tasks\" containing an array of task objects. Do NOT include metadata or any other properties." } } } diff --git a/src/prompts/update-task.json b/src/prompts/update-task.json index 56638a82..e271eab8 100644 --- a/src/prompts/update-task.json +++ b/src/prompts/update-task.json @@ -59,13 +59,13 @@ }, "prompts": { "default": { - "system": "You are an AI assistant helping to update a software development task based on new context.{{#if useResearch}} You have access to current best practices and latest technical information to provide research-backed updates.{{/if}}\nYou will be given a task and a prompt describing changes or new implementation details.\nYour job is to update the task to reflect these changes, while preserving its basic structure.\n\nGuidelines:\n1. VERY IMPORTANT: NEVER change the title of the task - keep it exactly as is\n2. Maintain the same ID, status, and dependencies unless specifically mentioned in the prompt{{#if useResearch}}\n3. Research and update the description, details, and test strategy with current best practices\n4. Include specific versions, libraries, and approaches that are current and well-tested{{/if}}{{#if (not useResearch)}}\n3. Update the description, details, and test strategy to reflect the new information\n4. Do not change anything unnecessarily - just adapt what needs to change based on the prompt{{/if}}\n5. Return a complete valid JSON object representing the updated task\n6. VERY IMPORTANT: Preserve all subtasks marked as \"done\" or \"completed\" - do not modify their content\n7. For tasks with completed subtasks, build upon what has already been done rather than rewriting everything\n8. If an existing completed subtask needs to be changed/undone based on the new context, DO NOT modify it directly\n9. Instead, add a new subtask that clearly indicates what needs to be changed or replaced\n10. Use the existence of completed subtasks as an opportunity to make new subtasks more specific and targeted\n11. Ensure any new subtasks have unique IDs that don't conflict with existing ones\n12. CRITICAL: For subtask IDs, use ONLY numeric values (1, 2, 3, etc.) NOT strings (\"1\", \"2\", \"3\")\n13. CRITICAL: Subtask IDs should start from 1 and increment sequentially (1, 2, 3...) - do NOT use parent task ID as prefix{{#if useResearch}}\n14. Include links to documentation or resources where helpful\n15. Focus on practical, implementable solutions using current technologies{{/if}}\n\nThe changes described in the prompt should be thoughtfully applied to make the task more accurate and actionable.", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before updating the task:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze how the task changes relate to the existing codebase\n\nBased on your analysis:\n- Update task details to reference specific files, functions, or patterns from the codebase\n- Ensure implementation details align with the project's current architecture\n- Include specific code examples or file references where appropriate\n- Consider how changes impact existing components\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here is the task to update{{#if useResearch}} with research-backed information{{/if}}:\n{{{taskJson}}}\n\nPlease {{#if useResearch}}research and {{/if}}update this task based on the following {{#if useResearch}}context:\n{{updatePrompt}}\n\nIncorporate current best practices, latest stable versions, and proven approaches.{{/if}}{{#if (not useResearch)}}new context:\n{{updatePrompt}}{{/if}}\n\nIMPORTANT: {{#if useResearch}}Preserve any subtasks marked as \"done\" or \"completed\".{{/if}}{{#if (not useResearch)}}In the task JSON above, any subtasks with \"status\": \"done\" or \"status\": \"completed\" should be preserved exactly as is. Build your changes around these completed items.{{/if}}\n{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}\n{{/if}}\n\nReturn only the updated task as a valid JSON object{{#if useResearch}} with research-backed improvements{{/if}}." + "system": "You are an AI assistant helping to update a software development task based on new context.{{#if useResearch}} You have access to current best practices and latest technical information to provide research-backed updates.{{/if}}\nYou will be given a task and a prompt describing changes or new implementation details.\nYour job is to update the task to reflect these changes, while preserving its basic structure.\n\nGuidelines:\n1. VERY IMPORTANT: NEVER change the title of the task - keep it exactly as is\n2. Maintain the same ID, status, and dependencies unless specifically mentioned in the prompt{{#if useResearch}}\n3. Research and update the description, details, and test strategy with current best practices\n4. Include specific versions, libraries, and approaches that are current and well-tested{{/if}}{{#if (not useResearch)}}\n3. Update the description, details, and test strategy to reflect the new information\n4. Do not change anything unnecessarily - just adapt what needs to change based on the prompt{{/if}}\n5. Return the complete updated task\n6. VERY IMPORTANT: Preserve all subtasks marked as \"done\" or \"completed\" - do not modify their content\n7. For tasks with completed subtasks, build upon what has already been done rather than rewriting everything\n8. If an existing completed subtask needs to be changed/undone based on the new context, DO NOT modify it directly\n9. Instead, add a new subtask that clearly indicates what needs to be changed or replaced\n10. Use the existence of completed subtasks as an opportunity to make new subtasks more specific and targeted\n11. Ensure any new subtasks have unique IDs that don't conflict with existing ones\n12. CRITICAL: For subtask IDs, use ONLY numeric values (1, 2, 3, etc.) NOT strings (\"1\", \"2\", \"3\")\n13. CRITICAL: Subtask IDs should start from 1 and increment sequentially (1, 2, 3...) - do NOT use parent task ID as prefix{{#if useResearch}}\n14. Include links to documentation or resources where helpful\n15. Focus on practical, implementable solutions using current technologies{{/if}}\n\nThe changes described in the prompt should be thoughtfully applied to make the task more accurate and actionable.", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before updating the task:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze how the task changes relate to the existing codebase\n\nBased on your analysis:\n- Update task details to reference specific files, functions, or patterns from the codebase\n- Ensure implementation details align with the project's current architecture\n- Include specific code examples or file references where appropriate\n- Consider how changes impact existing components\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here is the task to update{{#if useResearch}} with research-backed information{{/if}}:\n{{{taskJson}}}\n\nPlease {{#if useResearch}}research and {{/if}}update this task based on the following {{#if useResearch}}context:\n{{updatePrompt}}\n\nIncorporate current best practices, latest stable versions, and proven approaches.{{/if}}{{#if (not useResearch)}}new context:\n{{updatePrompt}}{{/if}}\n\nIMPORTANT: {{#if useResearch}}Preserve any subtasks marked as \"done\" or \"completed\".{{/if}}{{#if (not useResearch)}}In the task JSON above, any subtasks with \"status\": \"done\" or \"status\": \"completed\" should be preserved exactly as is. Build your changes around these completed items.{{/if}}\n{{#if gatheredContext}}\n\n# Project Context\n\n{{gatheredContext}}\n{{/if}}\n\nReturn the complete updated task{{#if useResearch}} with research-backed improvements{{/if}}.\n\nIMPORTANT: Your response must be a JSON object with a single property named \"task\" containing the updated task object." }, "append": { "condition": "appendMode === true", "system": "You are an AI assistant helping to append additional information to a software development task. You will be provided with the task's existing details, context, and a user request string.\n\nYour Goal: Based *only* on the user's request and all the provided context (including existing details if relevant to the request), GENERATE the new text content that should be added to the task's details.\nFocus *only* on generating the substance of the update.\n\nOutput Requirements:\n1. Return *only* the newly generated text content as a plain string. Do NOT return a JSON object or any other structured data.\n2. Your string response should NOT include any of the task's original details, unless the user's request explicitly asks to rephrase, summarize, or directly modify existing text.\n3. Do NOT include any timestamps, XML-like tags, markdown, or any other special formatting in your string response.\n4. Ensure the generated text is concise yet complete for the update based on the user request. Avoid conversational fillers or explanations about what you are doing (e.g., do not start with \"Okay, here's the update...\").", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating the task update:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze the current codebase to inform your update\n\nBased on your analysis:\n- Include specific file references, code patterns, or implementation details\n- Ensure suggestions align with the project's current architecture\n- Reference existing components or patterns when relevant\n\nProject Root: {{projectRoot}}\n\n{{/if}}Task Context:\n\nTask: {{{json task}}}\nCurrent Task Details (for context only):\n{{currentDetails}}\n\nUser Request: \"{{updatePrompt}}\"\n\nBased on the User Request and all the Task Context (including current task details provided above), what is the new information or text that should be appended to this task's details? Return ONLY this new text as a plain string.\n{{#if gatheredContext}}\n\n# Additional Project Context\n\n{{gatheredContext}}\n{{/if}}" + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before generating the task update:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze the current codebase to inform your update\n\nBased on your analysis:\n- Include specific file references, code patterns, or implementation details\n- Ensure suggestions align with the project's current architecture\n- Reference existing components or patterns when relevant\n\nProject Root: {{projectRoot}}\n\n{{/if}}Task Context:\n\nTask: {{{json task}}}\nCurrent Task Details (for context only):\n{{currentDetails}}\n\nUser Request: \"{{updatePrompt}}\"\n\nBased on the User Request and all the Task Context (including current task details provided above), what is the new information or text that should be appended to this task's details? Return this new text as a plain string.\n{{#if gatheredContext}}\n\n# Additional Project Context\n\n{{gatheredContext}}\n{{/if}}" } } } diff --git a/src/prompts/update-tasks.json b/src/prompts/update-tasks.json index 261cfd8d..fd096741 100644 --- a/src/prompts/update-tasks.json +++ b/src/prompts/update-tasks.json @@ -43,8 +43,8 @@ }, "prompts": { "default": { - "system": "You are an AI assistant helping to update software development tasks based on new context.\nYou will be given a set of tasks and a prompt describing changes or new implementation details.\nYour job is to update the tasks to reflect these changes, while preserving their basic structure.\n\nCRITICAL RULES:\n1. Return ONLY a JSON array - no explanations, no markdown, no additional text before or after\n2. Each task MUST have ALL fields from the original (do not omit any fields)\n3. Maintain the same IDs, statuses, and dependencies unless specifically mentioned in the prompt\n4. Update titles, descriptions, details, and test strategies to reflect the new information\n5. Do not change anything unnecessarily - just adapt what needs to change based on the prompt\n6. You should return ALL the tasks in order, not just the modified ones\n7. Return a complete valid JSON array with all tasks\n8. VERY IMPORTANT: Preserve all subtasks marked as \"done\" or \"completed\" - do not modify their content\n9. For tasks with completed subtasks, build upon what has already been done rather than rewriting everything\n10. If an existing completed subtask needs to be changed/undone based on the new context, DO NOT modify it directly\n11. Instead, add a new subtask that clearly indicates what needs to be changed or replaced\n12. Use the existence of completed subtasks as an opportunity to make new subtasks more specific and targeted\n\nThe changes described in the prompt should be applied to ALL tasks in the list.", - "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before updating tasks:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze how the new changes relate to the existing codebase\n\nBased on your analysis:\n- Update task details to reference specific files, functions, or patterns from the codebase\n- Ensure implementation details align with the project's current architecture\n- Include specific code examples or file references where appropriate\n- Consider how changes impact existing components\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here are the tasks to update:\n{{{json tasks}}}\n\nPlease update these tasks based on the following new context:\n{{updatePrompt}}\n\nIMPORTANT: In the tasks JSON above, any subtasks with \"status\": \"done\" or \"status\": \"completed\" should be preserved exactly as is. Build your changes around these completed items.{{#if projectContext}}\n\n# Project Context\n\n{{projectContext}}{{/if}}\n\nRequired JSON structure for EACH task (ALL fields MUST be present):\n{\n \"id\": ,\n \"title\": ,\n \"description\": ,\n \"status\": ,\n \"dependencies\": ,\n \"priority\": ,\n \"details\": ,\n \"testStrategy\": ,\n \"subtasks\": \n}\n\nReturn a valid JSON array containing ALL the tasks with ALL their fields:\n- id (number) - preserve existing value\n- title (string)\n- description (string)\n- status (string) - preserve existing value unless explicitly changing\n- dependencies (array) - preserve existing value unless explicitly changing\n- priority (string or null)\n- details (string or null)\n- testStrategy (string or null)\n- subtasks (array or null)\n\nReturn ONLY the JSON array now:" + "system": "You are an AI assistant helping to update software development tasks based on new context.\nYou will be given a set of tasks and a prompt describing changes or new implementation details.\nYour job is to update the tasks to reflect these changes, while preserving their basic structure.\n\nGuidelines:\n1. Maintain the same IDs, statuses, and dependencies unless specifically mentioned in the prompt\n2. Update titles, descriptions, details, and test strategies to reflect the new information\n3. Do not change anything unnecessarily - just adapt what needs to change based on the prompt\n4. Return ALL the tasks in order, not just the modified ones\n5. VERY IMPORTANT: Preserve all subtasks marked as \"done\" or \"completed\" - do not modify their content\n6. For tasks with completed subtasks, build upon what has already been done rather than rewriting everything\n7. If an existing completed subtask needs to be changed/undone based on the new context, DO NOT modify it directly\n8. Instead, add a new subtask that clearly indicates what needs to be changed or replaced\n9. Use the existence of completed subtasks as an opportunity to make new subtasks more specific and targeted", + "user": "{{#if hasCodebaseAnalysis}}## IMPORTANT: Codebase Analysis Required\n\nYou have access to powerful codebase analysis tools. Before updating tasks:\n\n1. Use the Glob tool to explore the project structure (e.g., \"**/*.js\", \"**/*.json\", \"**/README.md\")\n2. Use the Grep tool to search for existing implementations, patterns, and technologies\n3. Use the Read tool to examine relevant files and understand current implementation\n4. Analyze how the new changes relate to the existing codebase\n\nBased on your analysis:\n- Update task details to reference specific files, functions, or patterns from the codebase\n- Ensure implementation details align with the project's current architecture\n- Include specific code examples or file references where appropriate\n- Consider how changes impact existing components\n\nProject Root: {{projectRoot}}\n\n{{/if}}Here are the tasks to update:\n{{{json tasks}}}\n\nPlease update these tasks based on the following new context:\n{{updatePrompt}}\n\nIMPORTANT: In the tasks above, any subtasks with \"status\": \"done\" or \"status\": \"completed\" should be preserved exactly as is. Build your changes around these completed items.{{#if projectContext}}\n\n# Project Context\n\n{{projectContext}}{{/if}}\n\nIMPORTANT: Your response must be a JSON object with a single property named \"tasks\" containing the updated array of tasks." } } } diff --git a/src/schemas/add-task.js b/src/schemas/add-task.js new file mode 100644 index 00000000..ccca666e --- /dev/null +++ b/src/schemas/add-task.js @@ -0,0 +1,21 @@ +import { z } from 'zod'; + +// Schema that matches the inline AiTaskDataSchema from add-task.js +export const AddTaskResponseSchema = z.object({ + title: z.string().describe('Clear, concise title for the task'), + description: z + .string() + .describe('A one or two sentence description of the task'), + details: z + .string() + .describe('In-depth implementation details, considerations, and guidance'), + testStrategy: z + .string() + .describe('Detailed approach for verifying task completion'), + dependencies: z + .array(z.number()) + .nullable() + .describe( + 'Array of task IDs that this task depends on (must be completed before this task can start)' + ) +}); diff --git a/src/schemas/analyze-complexity.js b/src/schemas/analyze-complexity.js new file mode 100644 index 00000000..621e488a --- /dev/null +++ b/src/schemas/analyze-complexity.js @@ -0,0 +1,14 @@ +import { z } from 'zod'; + +export const ComplexityAnalysisItemSchema = z.object({ + taskId: z.number().int().positive(), + taskTitle: z.string(), + complexityScore: z.number().min(1).max(10), + recommendedSubtasks: z.number().int().nonnegative(), + expansionPrompt: z.string(), + reasoning: z.string() +}); + +export const ComplexityAnalysisResponseSchema = z.object({ + complexityAnalysis: z.array(ComplexityAnalysisItemSchema) +}); diff --git a/src/schemas/base-schemas.js b/src/schemas/base-schemas.js new file mode 100644 index 00000000..ef8901c6 --- /dev/null +++ b/src/schemas/base-schemas.js @@ -0,0 +1,35 @@ +import { z } from 'zod'; + +// Base schemas that will be reused across commands +export const TaskStatusSchema = z.enum([ + 'pending', + 'in-progress', + 'blocked', + 'done', + 'cancelled', + 'deferred' +]); + +export const BaseTaskSchema = z.object({ + id: z.number().int().positive(), + title: z.string().min(1).max(200), + description: z.string().min(1), + status: TaskStatusSchema, + dependencies: z.array(z.union([z.number().int(), z.string()])).default([]), + priority: z + .enum(['low', 'medium', 'high', 'critical']) + .nullable() + .default(null), + details: z.string().nullable().default(null), + testStrategy: z.string().nullable().default(null) +}); + +export const SubtaskSchema = z.object({ + id: z.number().int().positive(), + title: z.string().min(5).max(200), + description: z.string().min(10), + dependencies: z.array(z.number().int()).default([]), + details: z.string().min(20), + status: z.enum(['pending', 'done', 'completed']).default('pending'), + testStrategy: z.string().nullable().default(null) +}); diff --git a/src/schemas/expand-task.js b/src/schemas/expand-task.js new file mode 100644 index 00000000..b7b8a3bf --- /dev/null +++ b/src/schemas/expand-task.js @@ -0,0 +1,6 @@ +import { z } from 'zod'; +import { SubtaskSchema } from './base-schemas.js'; + +export const ExpandTaskResponseSchema = z.object({ + subtasks: z.array(SubtaskSchema) +}); diff --git a/src/schemas/parse-prd.js b/src/schemas/parse-prd.js new file mode 100644 index 00000000..1b6faf24 --- /dev/null +++ b/src/schemas/parse-prd.js @@ -0,0 +1,18 @@ +import { z } from 'zod'; + +// Schema for a single task from PRD parsing +const PRDSingleTaskSchema = z.object({ + id: z.number().int().positive(), + title: z.string().min(1), + description: z.string().min(1), + details: z.string().nullable(), + testStrategy: z.string().nullable(), + priority: z.enum(['high', 'medium', 'low']).nullable(), + dependencies: z.array(z.number().int().positive()).nullable(), + status: z.string().nullable() +}); + +// Schema for the AI response - only expects tasks array since metadata is generated by the code +export const ParsePRDResponseSchema = z.object({ + tasks: z.array(PRDSingleTaskSchema) +}); diff --git a/src/schemas/registry.js b/src/schemas/registry.js new file mode 100644 index 00000000..d00466ae --- /dev/null +++ b/src/schemas/registry.js @@ -0,0 +1,27 @@ +import { AddTaskResponseSchema } from './add-task.js'; +import { ComplexityAnalysisResponseSchema } from './analyze-complexity.js'; +import { ExpandTaskResponseSchema } from './expand-task.js'; +import { ParsePRDResponseSchema } from './parse-prd.js'; +import { UpdateSubtaskResponseSchema } from './update-subtask.js'; +import { UpdateTaskResponseSchema } from './update-task.js'; +import { UpdateTasksResponseSchema } from './update-tasks.js'; + +export const COMMAND_SCHEMAS = { + 'update-tasks': UpdateTasksResponseSchema, + 'expand-task': ExpandTaskResponseSchema, + 'analyze-complexity': ComplexityAnalysisResponseSchema, + 'update-subtask-by-id': UpdateSubtaskResponseSchema, + 'update-task-by-id': UpdateTaskResponseSchema, + 'add-task': AddTaskResponseSchema, + 'parse-prd': ParsePRDResponseSchema +}; + +// Export individual schemas for direct access +export * from './update-tasks.js'; +export * from './expand-task.js'; +export * from './analyze-complexity.js'; +export * from './update-subtask.js'; +export * from './update-task.js'; +export * from './add-task.js'; +export * from './parse-prd.js'; +export * from './base-schemas.js'; diff --git a/src/schemas/update-subtask.js b/src/schemas/update-subtask.js new file mode 100644 index 00000000..e510a764 --- /dev/null +++ b/src/schemas/update-subtask.js @@ -0,0 +1,6 @@ +import { z } from 'zod'; +import { SubtaskSchema } from './base-schemas.js'; + +export const UpdateSubtaskResponseSchema = z.object({ + subtask: SubtaskSchema +}); diff --git a/src/schemas/update-task.js b/src/schemas/update-task.js new file mode 100644 index 00000000..988fad43 --- /dev/null +++ b/src/schemas/update-task.js @@ -0,0 +1,6 @@ +import { z } from 'zod'; +import { UpdatedTaskSchema } from './update-tasks.js'; + +export const UpdateTaskResponseSchema = z.object({ + task: UpdatedTaskSchema +}); diff --git a/src/schemas/update-tasks.js b/src/schemas/update-tasks.js new file mode 100644 index 00000000..85e9f461 --- /dev/null +++ b/src/schemas/update-tasks.js @@ -0,0 +1,10 @@ +import { z } from 'zod'; +import { BaseTaskSchema, SubtaskSchema } from './base-schemas.js'; + +export const UpdatedTaskSchema = BaseTaskSchema.extend({ + subtasks: z.array(SubtaskSchema).nullable().default(null) +}); + +export const UpdateTasksResponseSchema = z.object({ + tasks: z.array(UpdatedTaskSchema) +}); diff --git a/src/utils/create-mcp-config.js b/src/utils/create-mcp-config.js index 2ee36504..08ef9908 100644 --- a/src/utils/create-mcp-config.js +++ b/src/utils/create-mcp-config.js @@ -262,3 +262,6 @@ export function removeTaskMasterMCPConfiguration(projectRoot, mcpConfigPath) { return result; } + +// Export the formatting function for use by other modules +export { formatJSONWithTabs }; diff --git a/src/utils/rule-transformer.js b/src/utils/rule-transformer.js index b1a6a818..39e69997 100644 --- a/src/utils/rule-transformer.js +++ b/src/utils/rule-transformer.js @@ -210,7 +210,7 @@ export function convertAllRulesToProfileRules(projectRoot, profile) { if (typeof profile.onAddRulesProfile === 'function') { try { const assetsDir = getAssetsDir(); - profile.onAddRulesProfile(projectRoot, assetsDir); + profile.onAddRulesProfile(targetDir, assetsDir); log( 'debug', `[Rule Transformer] Called onAddRulesProfile for ${profile.profileName}` @@ -305,7 +305,7 @@ export function convertAllRulesToProfileRules(projectRoot, profile) { if (typeof profile.onPostConvertRulesProfile === 'function') { try { const assetsDir = getAssetsDir(); - profile.onPostConvertRulesProfile(projectRoot, assetsDir); + profile.onPostConvertRulesProfile(targetDir, assetsDir); log( 'debug', `[Rule Transformer] Called onPostConvertRulesProfile for ${profile.profileName}` @@ -347,7 +347,7 @@ export function removeProfileRules(projectRoot, profile) { // 1. Call onRemoveRulesProfile first (for custom cleanup like removing assets) if (typeof profile.onRemoveRulesProfile === 'function') { try { - profile.onRemoveRulesProfile(projectRoot); + profile.onRemoveRulesProfile(targetDir); log( 'debug', `[Rule Transformer] Called onRemoveRulesProfile for ${profile.profileName}` diff --git a/tests/integration/claude-code-error-handling.test.js b/tests/integration/claude-code-error-handling.test.js new file mode 100644 index 00000000..0cd07dde --- /dev/null +++ b/tests/integration/claude-code-error-handling.test.js @@ -0,0 +1,52 @@ +import { jest } from '@jest/globals'; + +// Mock AI SDK functions at the top level +jest.unstable_mockModule('ai', () => ({ + generateObject: jest.fn(), + generateText: jest.fn(), + streamText: jest.fn(), + streamObject: jest.fn(), + zodSchema: jest.fn(), + JSONParseError: class JSONParseError extends Error {}, + NoObjectGeneratedError: class NoObjectGeneratedError extends Error {} +})); + +// Mock CLI failure scenario +jest.unstable_mockModule('ai-sdk-provider-claude-code', () => ({ + createClaudeCode: jest.fn(() => { + throw new Error('Claude Code CLI not found'); + }) +})); + +// Import the provider after mocking +const { ClaudeCodeProvider } = await import( + '../../src/ai-providers/claude-code.js' +); + +describe('Claude Code Error Handling', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should throw a CLI-not-available error (with or without commandName)', () => { + const provider = new ClaudeCodeProvider(); + expect(() => provider.getClient()).toThrow( + /Claude Code CLI not available/i + ); + expect(() => provider.getClient({ commandName: 'test' })).toThrow( + /Claude Code CLI not available/i + ); + }); + + it('should still support basic provider functionality', () => { + const provider = new ClaudeCodeProvider(); + + // These should work even if CLI is not available + expect(provider.name).toBe('Claude Code'); + expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']); + expect(provider.isModelSupported('sonnet')).toBe(true); + expect(provider.isModelSupported('haiku')).toBe(false); + expect(provider.isRequiredApiKey()).toBe(false); + expect(() => provider.validateAuth()).not.toThrow(); + }); +}); diff --git a/tests/integration/claude-code-optional.test.js b/tests/integration/claude-code-optional.test.js index ab90bdb5..28e9268e 100644 --- a/tests/integration/claude-code-optional.test.js +++ b/tests/integration/claude-code-optional.test.js @@ -1,95 +1,128 @@ import { jest } from '@jest/globals'; -// Mock the base provider to avoid circular dependencies -jest.unstable_mockModule('../../src/ai-providers/base-provider.js', () => ({ - BaseAIProvider: class { - constructor() { - this.name = 'Base Provider'; - } - handleError(context, error) { - throw error; - } - } +// Mock AI SDK functions at the top level +const generateText = jest.fn(); +const streamText = jest.fn(); + +jest.unstable_mockModule('ai', () => ({ + generateObject: jest.fn(), + generateText, + streamText, + streamObject: jest.fn(), + zodSchema: jest.fn(), + JSONParseError: class JSONParseError extends Error {}, + NoObjectGeneratedError: class NoObjectGeneratedError extends Error {} })); -// Mock the claude-code SDK to simulate it not being installed -jest.unstable_mockModule('@anthropic-ai/claude-code', () => { - throw new Error("Cannot find module '@anthropic-ai/claude-code'"); -}); +// Mock successful provider creation for all tests +const mockProvider = jest.fn((modelId) => ({ + id: modelId, + doGenerate: jest.fn(), + doStream: jest.fn() +})); +mockProvider.languageModel = jest.fn((id, settings) => ({ id, settings })); +mockProvider.chat = mockProvider.languageModel; -// Import after mocking +jest.unstable_mockModule('ai-sdk-provider-claude-code', () => ({ + createClaudeCode: jest.fn(() => mockProvider) +})); + +// Import the provider after mocking const { ClaudeCodeProvider } = await import( '../../src/ai-providers/claude-code.js' ); -describe('Claude Code Optional Dependency Integration', () => { - describe('when @anthropic-ai/claude-code is not installed', () => { - it('should allow provider instantiation', () => { - // Provider should instantiate without error - const provider = new ClaudeCodeProvider(); - expect(provider).toBeDefined(); - expect(provider.name).toBe('Claude Code'); +describe('Claude Code Integration (Optional)', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should create a working provider instance', () => { + const provider = new ClaudeCodeProvider(); + expect(provider.name).toBe('Claude Code'); + expect(provider.getSupportedModels()).toEqual(['sonnet', 'opus']); + }); + + it('should support model validation', () => { + const provider = new ClaudeCodeProvider(); + expect(provider.isModelSupported('sonnet')).toBe(true); + expect(provider.isModelSupported('opus')).toBe(true); + expect(provider.isModelSupported('haiku')).toBe(false); + expect(provider.isModelSupported('unknown')).toBe(false); + }); + + it('should create a client successfully', () => { + const provider = new ClaudeCodeProvider(); + const client = provider.getClient(); + + expect(client).toBeDefined(); + expect(typeof client).toBe('function'); + expect(client.languageModel).toBeDefined(); + expect(client.chat).toBeDefined(); + expect(client.chat).toBe(client.languageModel); + }); + + it('should pass command-specific settings to client', async () => { + const provider = new ClaudeCodeProvider(); + const client = provider.getClient({ commandName: 'test-command' }); + + expect(client).toBeDefined(); + expect(typeof client).toBe('function'); + const { createClaudeCode } = await import('ai-sdk-provider-claude-code'); + expect(createClaudeCode).toHaveBeenCalledTimes(1); + }); + + it('should handle AI SDK generateText integration', async () => { + const provider = new ClaudeCodeProvider(); + const client = provider.getClient(); + + // Mock successful generation + generateText.mockResolvedValueOnce({ + text: 'Hello from Claude Code!', + usage: { totalTokens: 10 } }); - it('should allow client creation', () => { - const provider = new ClaudeCodeProvider(); - // Client creation should work - const client = provider.getClient({}); - expect(client).toBeDefined(); - expect(typeof client).toBe('function'); + const result = await generateText({ + model: client('sonnet'), + messages: [{ role: 'user', content: 'Hello' }] }); - it('should fail with clear error when trying to use the model', async () => { - const provider = new ClaudeCodeProvider(); - const client = provider.getClient({}); - const model = client('opus'); - - // The actual usage should fail with the lazy loading error - await expect( - model.doGenerate({ - prompt: [{ role: 'user', content: 'Hello' }], - mode: { type: 'regular' } - }) - ).rejects.toThrow( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); - }); - - it('should provide helpful error message for streaming', async () => { - const provider = new ClaudeCodeProvider(); - const client = provider.getClient({}); - const model = client('sonnet'); - - await expect( - model.doStream({ - prompt: [{ role: 'user', content: 'Hello' }], - mode: { type: 'regular' } - }) - ).rejects.toThrow( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); + expect(result.text).toBe('Hello from Claude Code!'); + expect(generateText).toHaveBeenCalledWith({ + model: expect.any(Object), + messages: [{ role: 'user', content: 'Hello' }] }); }); - describe('provider behavior', () => { - it('should not require API key', () => { - const provider = new ClaudeCodeProvider(); - // Should not throw - expect(() => provider.validateAuth()).not.toThrow(); - expect(() => provider.validateAuth({ apiKey: null })).not.toThrow(); + it('should handle AI SDK streamText integration', async () => { + const provider = new ClaudeCodeProvider(); + const client = provider.getClient(); + + // Mock successful streaming + const mockStream = { + textStream: (async function* () { + yield 'Streamed response'; + })() + }; + streamText.mockResolvedValueOnce(mockStream); + + const streamResult = await streamText({ + model: client('sonnet'), + messages: [{ role: 'user', content: 'Stream test' }] }); - it('should work with ai-services-unified when provider is configured', async () => { - // This tests that the provider can be selected but will fail appropriately - // when the actual model is used - const provider = new ClaudeCodeProvider(); - expect(provider).toBeDefined(); - - // In real usage, ai-services-unified would: - // 1. Get the provider instance (works) - // 2. Call provider.getClient() (works) - // 3. Create a model (works) - // 4. Try to generate (fails with clear error) + expect(streamResult.textStream).toBeDefined(); + expect(streamText).toHaveBeenCalledWith({ + model: expect.any(Object), + messages: [{ role: 'user', content: 'Stream test' }] }); }); + + it('should not require authentication validation', () => { + const provider = new ClaudeCodeProvider(); + expect(provider.isRequiredApiKey()).toBe(false); + expect(() => provider.validateAuth()).not.toThrow(); + expect(() => provider.validateAuth({})).not.toThrow(); + expect(() => provider.validateAuth({ commandName: 'test' })).not.toThrow(); + }); }); diff --git a/tests/integration/cli/complex-cross-tag-scenarios.test.js b/tests/integration/cli/complex-cross-tag-scenarios.test.js index adfe1cbc..eaf0f7a9 100644 --- a/tests/integration/cli/complex-cross-tag-scenarios.test.js +++ b/tests/integration/cli/complex-cross-tag-scenarios.test.js @@ -330,7 +330,7 @@ describe('Complex Cross-Tag Scenarios', () => { describe('Large Task Set Performance', () => { it('should handle large task sets efficiently', () => { - // Create a large task set (100 tasks) + // Create a large task set (50 tasks) const largeTaskSet = { master: { tasks: [], @@ -348,8 +348,8 @@ describe('Complex Cross-Tag Scenarios', () => { } }; - // Add 50 tasks to master with dependencies - for (let i = 1; i <= 50; i++) { + // Add 25 tasks to master with dependencies + for (let i = 1; i <= 25; i++) { largeTaskSet.master.tasks.push({ id: i, title: `Task ${i}`, @@ -359,8 +359,8 @@ describe('Complex Cross-Tag Scenarios', () => { }); } - // Add 50 tasks to in-progress - for (let i = 51; i <= 100; i++) { + // Add 25 tasks to in-progress (ensure no ID conflict with master) + for (let i = 26; i <= 50; i++) { largeTaskSet['in-progress'].tasks.push({ id: i, title: `Task ${i}`, @@ -371,21 +371,32 @@ describe('Complex Cross-Tag Scenarios', () => { } fs.writeFileSync(tasksPath, JSON.stringify(largeTaskSet, null, 2)); - // Should complete within reasonable time - const timeout = process.env.CI ? 11000 : 6000; - const startTime = Date.now(); + // Execute move; correctness is validated below (no timing assertion) execSync( - `node ${binPath} move --from=50 --from-tag=master --to-tag=in-progress --with-dependencies`, + `node ${binPath} move --from=25 --from-tag=master --to-tag=in-progress --with-dependencies`, { stdio: 'pipe' } ); - const endTime = Date.now(); - expect(endTime - startTime).toBeLessThan(timeout); // Verify the move was successful const tasksAfter = JSON.parse(fs.readFileSync(tasksPath, 'utf8')); - expect( - tasksAfter['in-progress'].tasks.find((t) => t.id === 50) - ).toBeDefined(); + + // Verify all tasks in the dependency chain were moved + for (let i = 1; i <= 25; i++) { + expect(tasksAfter.master.tasks.find((t) => t.id === i)).toBeUndefined(); + expect( + tasksAfter['in-progress'].tasks.find((t) => t.id === i) + ).toBeDefined(); + } + + // Verify in-progress still has its original tasks (26-50) + for (let i = 26; i <= 50; i++) { + expect( + tasksAfter['in-progress'].tasks.find((t) => t.id === i) + ).toBeDefined(); + } + + // Final count check + expect(tasksAfter['in-progress'].tasks).toHaveLength(50); // 25 moved + 25 original }); }); diff --git a/tests/integration/profiles/cursor-init-functionality.test.js b/tests/integration/profiles/cursor-init-functionality.test.js index a07ea38f..b17239bf 100644 --- a/tests/integration/profiles/cursor-init-functionality.test.js +++ b/tests/integration/profiles/cursor-init-functionality.test.js @@ -54,4 +54,33 @@ describe('Cursor Profile Initialization Functionality', () => { ); expect(cursorProfile.conversionConfig.toolNames.search).toBe('search'); }); + + test('cursor.js has lifecycle functions for command copying', () => { + // Check that the source file contains our new lifecycle functions + expect(cursorProfileContent).toContain('function onAddRulesProfile'); + expect(cursorProfileContent).toContain('function onRemoveRulesProfile'); + expect(cursorProfileContent).toContain('copyRecursiveSync'); + expect(cursorProfileContent).toContain('removeDirectoryRecursive'); + }); + + test('cursor.js copies commands from claude/commands to .cursor/commands', () => { + // Check that the onAddRulesProfile function copies from the correct source + expect(cursorProfileContent).toContain( + "path.join(assetsDir, 'claude', 'commands')" + ); + // Destination path is built via a resolver to handle both project root and rules dir + expect(cursorProfileContent).toContain('resolveCursorProfileDir('); + expect(cursorProfileContent).toMatch( + /path\.join\(\s*profileDir\s*,\s*['"]commands['"]\s*\)/ + ); + expect(cursorProfileContent).toContain( + 'copyRecursiveSync(commandsSourceDir, commandsDestDir)' + ); + + // Check that lifecycle functions are properly registered with the profile + expect(cursorProfile.onAddRulesProfile).toBeDefined(); + expect(cursorProfile.onRemoveRulesProfile).toBeDefined(); + expect(typeof cursorProfile.onAddRulesProfile).toBe('function'); + expect(typeof cursorProfile.onRemoveRulesProfile).toBe('function'); + }); }); diff --git a/tests/integration/profiles/roo-init-functionality.test.js b/tests/integration/profiles/roo-init-functionality.test.js index d26d75ce..cc1d2a6b 100644 --- a/tests/integration/profiles/roo-init-functionality.test.js +++ b/tests/integration/profiles/roo-init-functionality.test.js @@ -26,7 +26,7 @@ describe('Roo Profile Initialization Functionality', () => { expect(rooProfile.displayName).toBe('Roo Code'); expect(rooProfile.profileDir).toBe('.roo'); // default expect(rooProfile.rulesDir).toBe('.roo/rules'); // default - expect(rooProfile.mcpConfig).toBe(true); // default + expect(rooProfile.mcpConfig).toBe(true); // now uses standard MCP configuration with Roo enhancements }); test('roo.js uses custom ROO_STYLE tool mappings', () => { diff --git a/tests/integration/providers/temperature-support.test.js b/tests/integration/providers/temperature-support.test.js new file mode 100644 index 00000000..bc81b291 --- /dev/null +++ b/tests/integration/providers/temperature-support.test.js @@ -0,0 +1,62 @@ +/** + * Integration Tests for Provider Temperature Support + * + * This test suite verifies that all providers correctly declare their + * temperature support capabilities. CLI providers should have + * supportsTemperature = false, while standard API providers should + * have supportsTemperature = true. + * + * These tests are separated from unit tests to avoid coupling + * base provider tests with concrete provider implementations. + */ + +import { ClaudeCodeProvider } from '../../../src/ai-providers/claude-code.js'; +import { CodexCliProvider } from '../../../src/ai-providers/codex-cli.js'; +import { GeminiCliProvider } from '../../../src/ai-providers/gemini-cli.js'; +import { GrokCliProvider } from '../../../src/ai-providers/grok-cli.js'; +import { AnthropicAIProvider } from '../../../src/ai-providers/anthropic.js'; +import { OpenAIProvider } from '../../../src/ai-providers/openai.js'; +import { GoogleAIProvider } from '../../../src/ai-providers/google.js'; +import { PerplexityAIProvider } from '../../../src/ai-providers/perplexity.js'; +import { XAIProvider } from '../../../src/ai-providers/xai.js'; +import { GroqProvider } from '../../../src/ai-providers/groq.js'; +import { OpenRouterAIProvider } from '../../../src/ai-providers/openrouter.js'; +import { OllamaAIProvider } from '../../../src/ai-providers/ollama.js'; +import { BedrockAIProvider } from '../../../src/ai-providers/bedrock.js'; +import { AzureProvider } from '../../../src/ai-providers/azure.js'; +import { VertexAIProvider } from '../../../src/ai-providers/google-vertex.js'; + +describe('Provider Temperature Support', () => { + describe('CLI Providers', () => { + it('should verify CLI providers have supportsTemperature = false', () => { + expect(new ClaudeCodeProvider().supportsTemperature).toBe(false); + expect(new CodexCliProvider().supportsTemperature).toBe(false); + expect(new GeminiCliProvider().supportsTemperature).toBe(false); + expect(new GrokCliProvider().supportsTemperature).toBe(false); + }); + }); + + describe('Standard API Providers', () => { + it('should verify standard providers have supportsTemperature = true', () => { + expect(new AnthropicAIProvider().supportsTemperature).toBe(true); + expect(new OpenAIProvider().supportsTemperature).toBe(true); + expect(new GoogleAIProvider().supportsTemperature).toBe(true); + expect(new PerplexityAIProvider().supportsTemperature).toBe(true); + expect(new XAIProvider().supportsTemperature).toBe(true); + expect(new GroqProvider().supportsTemperature).toBe(true); + expect(new OpenRouterAIProvider().supportsTemperature).toBe(true); + }); + }); + + describe('Special Case Providers', () => { + it('should verify Ollama provider has supportsTemperature = true', () => { + expect(new OllamaAIProvider().supportsTemperature).toBe(true); + }); + + it('should verify cloud providers have supportsTemperature = true', () => { + expect(new BedrockAIProvider().supportsTemperature).toBe(true); + expect(new AzureProvider().supportsTemperature).toBe(true); + expect(new VertexAIProvider().supportsTemperature).toBe(true); + }); + }); +}); diff --git a/tests/unit/ai-providers/base-provider.test.js b/tests/unit/ai-providers/base-provider.test.js new file mode 100644 index 00000000..9d261a87 --- /dev/null +++ b/tests/unit/ai-providers/base-provider.test.js @@ -0,0 +1,669 @@ +import { jest } from '@jest/globals'; + +// Mock the 'ai' SDK +const mockGenerateText = jest.fn(); +const mockGenerateObject = jest.fn(); +const mockNoObjectGeneratedError = class NoObjectGeneratedError extends Error { + static isInstance(error) { + return error instanceof mockNoObjectGeneratedError; + } + constructor(cause) { + super('No object generated'); + this.cause = cause; + this.usage = cause.usage; + } +}; +const mockJSONParseError = class JSONParseError extends Error { + constructor(text) { + super('JSON parse error'); + this.text = text; + } +}; + +jest.unstable_mockModule('ai', () => ({ + generateText: mockGenerateText, + streamText: jest.fn(), + generateObject: mockGenerateObject, + streamObject: jest.fn(), + zodSchema: jest.fn((schema) => schema), + NoObjectGeneratedError: mockNoObjectGeneratedError, + JSONParseError: mockJSONParseError +})); + +// Mock jsonrepair +const mockJsonrepair = jest.fn(); +jest.unstable_mockModule('jsonrepair', () => ({ + jsonrepair: mockJsonrepair +})); + +// Mock logging and utilities +jest.unstable_mockModule('../../../scripts/modules/utils.js', () => ({ + log: jest.fn(), + findProjectRoot: jest.fn(() => '/mock/project/root'), + isEmpty: jest.fn( + (val) => + !val || + (Array.isArray(val) && val.length === 0) || + (typeof val === 'object' && Object.keys(val).length === 0) + ), + resolveEnvVariable: jest.fn((key) => process.env[key]) +})); + +// Import after mocking +const { BaseAIProvider } = await import( + '../../../src/ai-providers/base-provider.js' +); + +describe('BaseAIProvider', () => { + let testProvider; + let mockClient; + + beforeEach(() => { + // Create a concrete test provider + class TestProvider extends BaseAIProvider { + constructor() { + super(); + this.name = 'TestProvider'; + } + + getRequiredApiKeyName() { + return 'TEST_API_KEY'; + } + + async getClient() { + return mockClient; + } + } + + mockClient = jest.fn((modelId) => ({ modelId })); + jest.clearAllMocks(); + testProvider = new TestProvider(); + }); + + describe('1. Parameter Validation - Catches Invalid Inputs', () => { + describe('validateAuth', () => { + it('should throw when API key is missing', () => { + expect(() => testProvider.validateAuth({})).toThrow( + 'TestProvider API key is required' + ); + }); + + it('should pass when API key is provided', () => { + expect(() => + testProvider.validateAuth({ apiKey: 'test-key' }) + ).not.toThrow(); + }); + }); + + describe('validateParams', () => { + it('should throw when model ID is missing', () => { + expect(() => testProvider.validateParams({ apiKey: 'key' })).toThrow( + 'TestProvider Model ID is required' + ); + }); + + it('should throw when both API key and model ID are missing', () => { + expect(() => testProvider.validateParams({})).toThrow( + 'TestProvider API key is required' + ); + }); + }); + + describe('validateOptionalParams', () => { + it('should throw for temperature below 0', () => { + expect(() => + testProvider.validateOptionalParams({ temperature: -0.1 }) + ).toThrow('Temperature must be between 0 and 1'); + }); + + it('should throw for temperature above 1', () => { + expect(() => + testProvider.validateOptionalParams({ temperature: 1.1 }) + ).toThrow('Temperature must be between 0 and 1'); + }); + + it('should accept temperature at boundaries', () => { + expect(() => + testProvider.validateOptionalParams({ temperature: 0 }) + ).not.toThrow(); + expect(() => + testProvider.validateOptionalParams({ temperature: 1 }) + ).not.toThrow(); + }); + + it('should throw for invalid maxTokens values', () => { + expect(() => + testProvider.validateOptionalParams({ maxTokens: 0 }) + ).toThrow('maxTokens must be a finite number greater than 0'); + expect(() => + testProvider.validateOptionalParams({ maxTokens: -100 }) + ).toThrow('maxTokens must be a finite number greater than 0'); + expect(() => + testProvider.validateOptionalParams({ maxTokens: Infinity }) + ).toThrow('maxTokens must be a finite number greater than 0'); + expect(() => + testProvider.validateOptionalParams({ maxTokens: 'invalid' }) + ).toThrow('maxTokens must be a finite number greater than 0'); + }); + }); + + describe('validateMessages', () => { + it('should throw for null/undefined messages', async () => { + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: null + }) + ).rejects.toThrow('Invalid or empty messages array provided'); + + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: undefined + }) + ).rejects.toThrow('Invalid or empty messages array provided'); + }); + + it('should throw for empty messages array', async () => { + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [] + }) + ).rejects.toThrow('Invalid or empty messages array provided'); + }); + + it('should throw for messages without role or content', async () => { + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ content: 'test' }] // missing role + }) + ).rejects.toThrow( + 'Invalid message format. Each message must have role and content' + ); + + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user' }] // missing content + }) + ).rejects.toThrow( + 'Invalid message format. Each message must have role and content' + ); + }); + }); + }); + + describe('2. Error Handling - Proper Error Context', () => { + it('should wrap API errors with context', async () => { + const apiError = new Error('API rate limit exceeded'); + mockGenerateText.mockRejectedValue(apiError); + + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }) + ).rejects.toThrow( + 'TestProvider API error during text generation: API rate limit exceeded' + ); + }); + + it('should handle errors without message property', async () => { + const apiError = { code: 'NETWORK_ERROR' }; + mockGenerateText.mockRejectedValue(apiError); + + await expect( + testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }) + ).rejects.toThrow( + 'TestProvider API error during text generation: Unknown error occurred' + ); + }); + }); + + describe('3. Abstract Class Protection', () => { + it('should prevent direct instantiation of BaseAIProvider', () => { + expect(() => new BaseAIProvider()).toThrow( + 'BaseAIProvider cannot be instantiated directly' + ); + }); + + it('should throw when abstract methods are not implemented', () => { + class IncompleteProvider extends BaseAIProvider { + constructor() { + super(); + } + } + const provider = new IncompleteProvider(); + + expect(() => provider.getClient()).toThrow( + 'getClient must be implemented by provider' + ); + expect(() => provider.getRequiredApiKeyName()).toThrow( + 'getRequiredApiKeyName must be implemented by provider' + ); + }); + }); + + describe('4. Token Parameter Preparation', () => { + it('should convert maxTokens to maxOutputTokens as integer', () => { + const result = testProvider.prepareTokenParam('model', 1000.7); + expect(result).toEqual({ maxOutputTokens: 1000 }); + }); + + it('should handle string numbers', () => { + const result = testProvider.prepareTokenParam('model', '500'); + expect(result).toEqual({ maxOutputTokens: 500 }); + }); + + it('should return empty object when maxTokens is undefined', () => { + const result = testProvider.prepareTokenParam('model', undefined); + expect(result).toEqual({}); + }); + + it('should floor decimal values', () => { + const result = testProvider.prepareTokenParam('model', 999.99); + expect(result).toEqual({ maxOutputTokens: 999 }); + }); + }); + + describe('5. JSON Repair for Malformed Responses', () => { + it('should repair malformed JSON in generateObject errors', async () => { + const malformedJson = '{"key": "value",,}'; // Double comma + const repairedJson = '{"key": "value"}'; + + const parseError = new mockJSONParseError(malformedJson); + const noObjectError = new mockNoObjectGeneratedError(parseError); + noObjectError.usage = { + promptTokens: 100, + completionTokens: 50, + totalTokens: 150 + }; + + mockGenerateObject.mockRejectedValue(noObjectError); + mockJsonrepair.mockReturnValue(repairedJson); + + const result = await testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + schema: { type: 'object' }, + objectName: 'TestObject' + }); + + expect(mockJsonrepair).toHaveBeenCalledWith(malformedJson); + expect(result).toEqual({ + object: { key: 'value' }, + usage: { + inputTokens: 100, + outputTokens: 50, + totalTokens: 150 + } + }); + }); + + it('should throw original error when JSON repair fails', async () => { + const malformedJson = 'not even close to JSON'; + const parseError = new mockJSONParseError(malformedJson); + const noObjectError = new mockNoObjectGeneratedError(parseError); + + mockGenerateObject.mockRejectedValue(noObjectError); + mockJsonrepair.mockImplementation(() => { + throw new Error('Cannot repair this JSON'); + }); + + await expect( + testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + schema: { type: 'object' }, + objectName: 'TestObject' + }) + ).rejects.toThrow('TestProvider API error during object generation'); + }); + + it('should handle non-JSON parse errors normally', async () => { + const regularError = new Error('Network timeout'); + mockGenerateObject.mockRejectedValue(regularError); + + await expect( + testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + schema: { type: 'object' }, + objectName: 'TestObject' + }) + ).rejects.toThrow( + 'TestProvider API error during object generation: Network timeout' + ); + + expect(mockJsonrepair).not.toHaveBeenCalled(); + }); + }); + + describe('6. Usage Token Normalization', () => { + it('should normalize different token formats in generateText', async () => { + // Test promptTokens/completionTokens format (older format) + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { promptTokens: 10, completionTokens: 5 } + }); + + let result = await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }); + + expect(result.usage).toEqual({ + inputTokens: 10, + outputTokens: 5, + totalTokens: 15 + }); + + // Test inputTokens/outputTokens format (newer format) + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 20, outputTokens: 10, totalTokens: 30 } + }); + + result = await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }); + + expect(result.usage).toEqual({ + inputTokens: 20, + outputTokens: 10, + totalTokens: 30 + }); + }); + + it('should handle missing usage data gracefully', async () => { + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: undefined + }); + + const result = await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }); + + expect(result.usage).toEqual({ + inputTokens: 0, + outputTokens: 0, + totalTokens: 0 + }); + }); + + it('should calculate totalTokens when missing', async () => { + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 15, outputTokens: 25 } + }); + + const result = await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + }); + + expect(result.usage.totalTokens).toBe(40); + }); + }); + + describe('7. Schema Validation for Object Methods', () => { + it('should throw when schema is missing for generateObject', async () => { + await expect( + testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + objectName: 'TestObject' + // missing schema + }) + ).rejects.toThrow('Schema is required for object generation'); + }); + + it('should throw when objectName is missing for generateObject', async () => { + await expect( + testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + schema: { type: 'object' } + // missing objectName + }) + ).rejects.toThrow('Object name is required for object generation'); + }); + + it('should throw when schema is missing for streamObject', async () => { + await expect( + testProvider.streamObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }] + // missing schema + }) + ).rejects.toThrow('Schema is required for object streaming'); + }); + + it('should use json mode when needsExplicitJsonSchema is true', async () => { + testProvider.needsExplicitJsonSchema = true; + mockGenerateObject.mockResolvedValue({ + object: { test: 'value' }, + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + await testProvider.generateObject({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + schema: { type: 'object' }, + objectName: 'TestObject' + }); + + expect(mockGenerateObject).toHaveBeenCalledWith( + expect.objectContaining({ + mode: 'json' // Should be 'json' not 'auto' + }) + ); + }); + }); + + describe('8. Integration Points - Client Creation', () => { + it('should pass params to getClient method', async () => { + const getClientSpy = jest.spyOn(testProvider, 'getClient'); + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + const params = { + apiKey: 'test-key', + modelId: 'test-model', + messages: [{ role: 'user', content: 'test' }], + customParam: 'custom-value' + }; + + await testProvider.generateText(params); + + expect(getClientSpy).toHaveBeenCalledWith(params); + }); + + it('should use client with correct model ID', async () => { + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + await testProvider.generateText({ + apiKey: 'key', + modelId: 'gpt-4-turbo', + messages: [{ role: 'user', content: 'test' }] + }); + + expect(mockClient).toHaveBeenCalledWith('gpt-4-turbo'); + expect(mockGenerateText).toHaveBeenCalledWith( + expect.objectContaining({ + model: { modelId: 'gpt-4-turbo' } + }) + ); + }); + }); + + describe('9. Edge Cases - Boundary Conditions', () => { + it('should handle zero maxTokens gracefully', () => { + // This should throw in validation + expect(() => + testProvider.validateOptionalParams({ maxTokens: 0 }) + ).toThrow('maxTokens must be a finite number greater than 0'); + }); + + it('should handle very large maxTokens', () => { + const result = testProvider.prepareTokenParam('model', 999999999); + expect(result).toEqual({ maxOutputTokens: 999999999 }); + }); + + it('should handle NaN temperature gracefully', () => { + // NaN fails the range check (NaN < 0 is false, NaN > 1 is also false) + // But NaN is not between 0 and 1, so we need to check the actual behavior + // The current implementation doesn't explicitly check for NaN, + // it passes because NaN < 0 and NaN > 1 are both false + expect(() => + testProvider.validateOptionalParams({ temperature: NaN }) + ).not.toThrow(); + // This is actually a bug - NaN should be rejected + // But we're testing current behavior, not desired behavior + }); + + it('should handle concurrent calls safely', async () => { + mockGenerateText.mockImplementation(async () => ({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + })); + + const promises = Array.from({ length: 10 }, (_, i) => + testProvider.generateText({ + apiKey: 'key', + modelId: `model-${i}`, + messages: [{ role: 'user', content: `test-${i}` }] + }) + ); + + const results = await Promise.all(promises); + expect(results).toHaveLength(10); + expect(mockClient).toHaveBeenCalledTimes(10); + }); + }); + + describe('10. Default Behavior - isRequiredApiKey', () => { + it('should return true by default for isRequiredApiKey', () => { + expect(testProvider.isRequiredApiKey()).toBe(true); + }); + + it('should allow override of isRequiredApiKey', () => { + class NoAuthProvider extends BaseAIProvider { + constructor() { + super(); + } + isRequiredApiKey() { + return false; + } + validateAuth() { + // Override to not require API key + } + getClient() { + return mockClient; + } + getRequiredApiKeyName() { + return null; + } + } + + const provider = new NoAuthProvider(); + expect(provider.isRequiredApiKey()).toBe(false); + }); + }); + + describe('11. Temperature Filtering - CLI vs Standard Providers', () => { + const mockStreamText = jest.fn(); + const mockStreamObject = jest.fn(); + + beforeEach(() => { + mockStreamText.mockReset(); + mockStreamObject.mockReset(); + }); + + it('should include temperature in generateText when supported', async () => { + testProvider.supportsTemperature = true; + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + temperature: 0.7 + }); + + expect(mockGenerateText).toHaveBeenCalledWith( + expect.objectContaining({ temperature: 0.7 }) + ); + }); + + it('should exclude temperature in generateText when not supported', async () => { + testProvider.supportsTemperature = false; + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + temperature: 0.7 + }); + + const callArgs = mockGenerateText.mock.calls[0][0]; + expect(callArgs).not.toHaveProperty('temperature'); + }); + + it('should exclude temperature when undefined even if supported', async () => { + testProvider.supportsTemperature = true; + mockGenerateText.mockResolvedValue({ + text: 'response', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + await testProvider.generateText({ + apiKey: 'key', + modelId: 'model', + messages: [{ role: 'user', content: 'test' }], + temperature: undefined + }); + + const callArgs = mockGenerateText.mock.calls[0][0]; + expect(callArgs).not.toHaveProperty('temperature'); + }); + }); +}); diff --git a/tests/unit/ai-providers/claude-code.test.js b/tests/unit/ai-providers/claude-code.test.js index 92388444..ac0fa625 100644 --- a/tests/unit/ai-providers/claude-code.test.js +++ b/tests/unit/ai-providers/claude-code.test.js @@ -1,21 +1,20 @@ import { jest } from '@jest/globals'; -// Mock the claude-code SDK module -jest.unstable_mockModule( - '../../../src/ai-providers/custom-sdk/claude-code/index.js', - () => ({ - createClaudeCode: jest.fn(() => { - const provider = (modelId, settings) => ({ - // Mock language model - id: modelId, - settings - }); - provider.languageModel = jest.fn((id, settings) => ({ id, settings })); - provider.chat = provider.languageModel; - return provider; - }) +// Mock the ai-sdk-provider-claude-code package +jest.unstable_mockModule('ai-sdk-provider-claude-code', () => ({ + createClaudeCode: jest.fn(() => { + const provider = (modelId, settings) => ({ + // Minimal mock language model surface + id: modelId, + settings, + doGenerate: jest.fn(() => ({ text: 'ok', usage: {} })), + doStream: jest.fn(() => ({ stream: true })) + }); + provider.languageModel = jest.fn((id, settings) => ({ id, settings })); + provider.chat = provider.languageModel; + return provider; }) -); +})); // Mock the base provider jest.unstable_mockModule('../../../src/ai-providers/base-provider.js', () => ({ @@ -74,15 +73,14 @@ describe('ClaudeCodeProvider', () => { expect(typeof client).toBe('function'); }); - it('should create client without API key or base URL', () => { - const client = provider.getClient({}); + it('should create client without parameters', () => { + const client = provider.getClient(); expect(client).toBeDefined(); }); - it('should handle params even though they are not used', () => { + it('should handle commandName parameter', () => { const client = provider.getClient({ - baseURL: 'https://example.com', - apiKey: 'unused-key' + commandName: 'test-command' }); expect(client).toBeDefined(); }); @@ -95,12 +93,24 @@ describe('ClaudeCodeProvider', () => { }); }); + describe('model support', () => { + it('should return supported models', () => { + const models = provider.getSupportedModels(); + expect(models).toEqual(['sonnet', 'opus']); + }); + + it('should check if model is supported', () => { + expect(provider.isModelSupported('sonnet')).toBe(true); + expect(provider.isModelSupported('opus')).toBe(true); + expect(provider.isModelSupported('haiku')).toBe(false); + expect(provider.isModelSupported('unknown')).toBe(false); + }); + }); + describe('error handling', () => { it('should handle client initialization errors', async () => { // Force an error by making createClaudeCode throw - const { createClaudeCode } = await import( - '../../../src/ai-providers/custom-sdk/claude-code/index.js' - ); + const { createClaudeCode } = await import('ai-sdk-provider-claude-code'); createClaudeCode.mockImplementationOnce(() => { throw new Error('Mock initialization error'); }); diff --git a/tests/unit/ai-providers/codex-cli.test.js b/tests/unit/ai-providers/codex-cli.test.js new file mode 100644 index 00000000..de7c90f9 --- /dev/null +++ b/tests/unit/ai-providers/codex-cli.test.js @@ -0,0 +1,92 @@ +import { jest } from '@jest/globals'; + +// Mock the ai module +jest.unstable_mockModule('ai', () => ({ + generateObject: jest.fn(), + generateText: jest.fn(), + streamText: jest.fn() +})); + +// Mock the codex-cli SDK module +jest.unstable_mockModule('ai-sdk-provider-codex-cli', () => ({ + createCodexCli: jest.fn((options) => { + const provider = (modelId, settings) => ({ id: modelId, settings }); + provider.languageModel = jest.fn((id, settings) => ({ id, settings })); + provider.chat = provider.languageModel; + return provider; + }) +})); + +// Mock config getters +jest.unstable_mockModule('../../../scripts/modules/config-manager.js', () => ({ + getCodexCliSettingsForCommand: jest.fn(() => ({ allowNpx: true })), + // Provide commonly imported getters to satisfy other module imports if any + getDebugFlag: jest.fn(() => false), + getLogLevel: jest.fn(() => 'info') +})); + +// Mock base provider +jest.unstable_mockModule('../../../src/ai-providers/base-provider.js', () => ({ + BaseAIProvider: class { + constructor() { + this.name = 'Base Provider'; + } + handleError(_ctx, err) { + throw err; + } + validateParams(params) { + if (!params.modelId) throw new Error('Model ID is required'); + } + validateMessages(msgs) { + if (!Array.isArray(msgs)) throw new Error('Invalid messages array'); + } + } +})); + +const { CodexCliProvider } = await import( + '../../../src/ai-providers/codex-cli.js' +); +const { createCodexCli } = await import('ai-sdk-provider-codex-cli'); +const { getCodexCliSettingsForCommand } = await import( + '../../../scripts/modules/config-manager.js' +); + +describe('CodexCliProvider', () => { + let provider; + + beforeEach(() => { + jest.clearAllMocks(); + provider = new CodexCliProvider(); + }); + + it('sets provider name and supported models', () => { + expect(provider.name).toBe('Codex CLI'); + expect(provider.supportedModels).toEqual(['gpt-5', 'gpt-5-codex']); + }); + + it('does not require API key', () => { + expect(provider.isRequiredApiKey()).toBe(false); + }); + + it('creates client with merged default settings', async () => { + const client = await provider.getClient({ commandName: 'parse-prd' }); + expect(client).toBeDefined(); + expect(createCodexCli).toHaveBeenCalledWith({ + defaultSettings: expect.objectContaining({ allowNpx: true }) + }); + expect(getCodexCliSettingsForCommand).toHaveBeenCalledWith('parse-prd'); + }); + + it('injects OPENAI_API_KEY only when apiKey provided', async () => { + const client = await provider.getClient({ + commandName: 'expand', + apiKey: 'sk-test' + }); + const call = createCodexCli.mock.calls[0][0]; + expect(call.defaultSettings.env.OPENAI_API_KEY).toBe('sk-test'); + // Ensure env is not set when apiKey not provided + await provider.getClient({ commandName: 'expand' }); + const second = createCodexCli.mock.calls[1][0]; + expect(second.defaultSettings.env).toBeUndefined(); + }); +}); diff --git a/tests/unit/ai-providers/custom-sdk/claude-code/language-model.test.js b/tests/unit/ai-providers/custom-sdk/claude-code/language-model.test.js deleted file mode 100644 index 5f1813aa..00000000 --- a/tests/unit/ai-providers/custom-sdk/claude-code/language-model.test.js +++ /dev/null @@ -1,237 +0,0 @@ -import { jest } from '@jest/globals'; - -// Mock modules before importing -jest.unstable_mockModule('@ai-sdk/provider', () => ({ - NoSuchModelError: class NoSuchModelError extends Error { - constructor({ modelId, modelType }) { - super(`No such model: ${modelId}`); - this.modelId = modelId; - this.modelType = modelType; - } - } -})); - -jest.unstable_mockModule('@ai-sdk/provider-utils', () => ({ - generateId: jest.fn(() => 'test-id-123') -})); - -jest.unstable_mockModule( - '../../../../../src/ai-providers/custom-sdk/claude-code/message-converter.js', - () => ({ - convertToClaudeCodeMessages: jest.fn((prompt) => ({ - messagesPrompt: 'converted-prompt', - systemPrompt: 'system' - })) - }) -); - -jest.unstable_mockModule( - '../../../../../src/ai-providers/custom-sdk/claude-code/json-extractor.js', - () => ({ - extractJson: jest.fn((text) => text) - }) -); - -jest.unstable_mockModule( - '../../../../../src/ai-providers/custom-sdk/claude-code/errors.js', - () => ({ - createAPICallError: jest.fn((opts) => new Error(opts.message)), - createAuthenticationError: jest.fn((opts) => new Error(opts.message)) - }) -); - -// This mock will be controlled by tests -let mockClaudeCodeModule = null; -jest.unstable_mockModule('@anthropic-ai/claude-code', () => { - if (mockClaudeCodeModule) { - return mockClaudeCodeModule; - } - throw new Error("Cannot find module '@anthropic-ai/claude-code'"); -}); - -// Import the module under test -const { ClaudeCodeLanguageModel } = await import( - '../../../../../src/ai-providers/custom-sdk/claude-code/language-model.js' -); - -describe('ClaudeCodeLanguageModel', () => { - beforeEach(() => { - jest.clearAllMocks(); - // Reset the module mock - mockClaudeCodeModule = null; - // Clear module cache to ensure fresh imports - jest.resetModules(); - }); - - describe('constructor', () => { - it('should initialize with valid model ID', () => { - const model = new ClaudeCodeLanguageModel({ - id: 'opus', - settings: { maxTurns: 5 } - }); - - expect(model.modelId).toBe('opus'); - expect(model.settings).toEqual({ maxTurns: 5 }); - expect(model.provider).toBe('claude-code'); - }); - - it('should throw NoSuchModelError for invalid model ID', async () => { - expect( - () => - new ClaudeCodeLanguageModel({ - id: '', - settings: {} - }) - ).toThrow('No such model: '); - - expect( - () => - new ClaudeCodeLanguageModel({ - id: null, - settings: {} - }) - ).toThrow('No such model: null'); - }); - }); - - describe('lazy loading of @anthropic-ai/claude-code', () => { - it('should throw error when package is not installed', async () => { - // Keep mockClaudeCodeModule as null to simulate missing package - const model = new ClaudeCodeLanguageModel({ - id: 'opus', - settings: {} - }); - - await expect( - model.doGenerate({ - prompt: [{ role: 'user', content: 'test' }], - mode: { type: 'regular' } - }) - ).rejects.toThrow( - "Claude Code SDK is not installed. Please install '@anthropic-ai/claude-code' to use the claude-code provider." - ); - }); - - it('should load package successfully when available', async () => { - // Mock successful package load - const mockQuery = jest.fn(async function* () { - yield { - type: 'assistant', - message: { content: [{ type: 'text', text: 'Hello' }] } - }; - yield { - type: 'result', - subtype: 'done', - usage: { output_tokens: 10, input_tokens: 5 } - }; - }); - - mockClaudeCodeModule = { - query: mockQuery, - AbortError: class AbortError extends Error {} - }; - - // Need to re-import to get fresh module with mocks - jest.resetModules(); - const { ClaudeCodeLanguageModel: FreshModel } = await import( - '../../../../../src/ai-providers/custom-sdk/claude-code/language-model.js' - ); - - const model = new FreshModel({ - id: 'opus', - settings: {} - }); - - const result = await model.doGenerate({ - prompt: [{ role: 'user', content: 'test' }], - mode: { type: 'regular' } - }); - - expect(result.text).toBe('Hello'); - expect(mockQuery).toHaveBeenCalled(); - }); - - it('should only attempt to load package once', async () => { - // Get a fresh import to ensure clean state - jest.resetModules(); - const { ClaudeCodeLanguageModel: TestModel } = await import( - '../../../../../src/ai-providers/custom-sdk/claude-code/language-model.js' - ); - - const model = new TestModel({ - id: 'opus', - settings: {} - }); - - // First call should throw - await expect( - model.doGenerate({ - prompt: [{ role: 'user', content: 'test' }], - mode: { type: 'regular' } - }) - ).rejects.toThrow('Claude Code SDK is not installed'); - - // Second call should also throw without trying to load again - await expect( - model.doGenerate({ - prompt: [{ role: 'user', content: 'test' }], - mode: { type: 'regular' } - }) - ).rejects.toThrow('Claude Code SDK is not installed'); - }); - }); - - describe('generateUnsupportedWarnings', () => { - it('should generate warnings for unsupported parameters', () => { - const model = new ClaudeCodeLanguageModel({ - id: 'opus', - settings: {} - }); - - const warnings = model.generateUnsupportedWarnings({ - temperature: 0.7, - maxTokens: 1000, - topP: 0.9, - seed: 42 - }); - - expect(warnings).toHaveLength(4); - expect(warnings[0]).toEqual({ - type: 'unsupported-setting', - setting: 'temperature', - details: - 'Claude Code CLI does not support the temperature parameter. It will be ignored.' - }); - }); - - it('should return empty array when no unsupported parameters', () => { - const model = new ClaudeCodeLanguageModel({ - id: 'opus', - settings: {} - }); - - const warnings = model.generateUnsupportedWarnings({}); - expect(warnings).toEqual([]); - }); - }); - - describe('getModel', () => { - it('should map model IDs correctly', () => { - const model = new ClaudeCodeLanguageModel({ - id: 'opus', - settings: {} - }); - - expect(model.getModel()).toBe('opus'); - }); - - it('should return unmapped model IDs as-is', () => { - const model = new ClaudeCodeLanguageModel({ - id: 'custom-model', - settings: {} - }); - - expect(model.getModel()).toBe('custom-model'); - }); - }); -}); diff --git a/tests/unit/ai-providers/gemini-cli.test.js b/tests/unit/ai-providers/gemini-cli.test.js index 8aa0b389..3f52f128 100644 --- a/tests/unit/ai-providers/gemini-cli.test.js +++ b/tests/unit/ai-providers/gemini-cli.test.js @@ -524,7 +524,7 @@ describe('GeminiCliProvider', () => { }), system: 'You are a helpful assistant', messages: [{ role: 'user', content: 'Hello' }], - maxTokens: 100, + maxOutputTokens: 100, temperature: 0.7 }); expect(result.text).toBe('Hello! How can I help you?'); @@ -550,7 +550,7 @@ describe('GeminiCliProvider', () => { }), system: undefined, messages: [{ role: 'user', content: 'Hello' }], - maxTokens: 100, + maxOutputTokens: 100, temperature: 0.7 }); }); @@ -570,7 +570,7 @@ describe('GeminiCliProvider', () => { }), system: 'You are a helpful assistant', messages: [{ role: 'user', content: 'Hello' }], - maxTokens: 100, + maxOutputTokens: 100, temperature: 0.7 }); expect(result).toBe(mockStream); @@ -609,7 +609,7 @@ describe('GeminiCliProvider', () => { messages: [{ role: 'user', content: 'Hello' }], schema: mockObjectParams.schema, mode: 'json', - maxTokens: 100, + maxOutputTokens: 100, temperature: 0.7 }); expect(result.object).toEqual({ result: 'success' }); diff --git a/tests/unit/ai-providers/openai.test.js b/tests/unit/ai-providers/openai.test.js index 9c090a59..5f2ee6b8 100644 --- a/tests/unit/ai-providers/openai.test.js +++ b/tests/unit/ai-providers/openai.test.js @@ -1,11 +1,10 @@ /** - * Tests for OpenAI Provider - Token parameter handling for GPT-5 + * Tests for OpenAI Provider * * This test suite covers: - * 1. Correct identification of GPT-5 models requiring max_completion_tokens - * 2. Token parameter preparation for different model types - * 3. Validation of maxTokens parameter - * 4. Integer coercion of token values + * 1. Validation of maxTokens parameter + * 2. Client creation and configuration + * 3. Model handling */ import { jest } from '@jest/globals'; @@ -26,81 +25,6 @@ describe('OpenAIProvider', () => { jest.clearAllMocks(); }); - describe('requiresMaxCompletionTokens', () => { - it('should return true for GPT-5 models', () => { - expect(provider.requiresMaxCompletionTokens('gpt-5')).toBe(true); - expect(provider.requiresMaxCompletionTokens('gpt-5-mini')).toBe(true); - expect(provider.requiresMaxCompletionTokens('gpt-5-nano')).toBe(true); - expect(provider.requiresMaxCompletionTokens('gpt-5-turbo')).toBe(true); - }); - - it('should return false for non-GPT-5 models', () => { - expect(provider.requiresMaxCompletionTokens('gpt-4')).toBe(false); - expect(provider.requiresMaxCompletionTokens('gpt-4o')).toBe(false); - expect(provider.requiresMaxCompletionTokens('gpt-3.5-turbo')).toBe(false); - expect(provider.requiresMaxCompletionTokens('o1')).toBe(false); - expect(provider.requiresMaxCompletionTokens('o1-mini')).toBe(false); - }); - - it('should handle null/undefined modelId', () => { - expect(provider.requiresMaxCompletionTokens(null)).toBeFalsy(); - expect(provider.requiresMaxCompletionTokens(undefined)).toBeFalsy(); - expect(provider.requiresMaxCompletionTokens('')).toBeFalsy(); - }); - }); - - describe('prepareTokenParam', () => { - it('should return max_completion_tokens for GPT-5 models', () => { - const result = provider.prepareTokenParam('gpt-5', 1000); - expect(result).toEqual({ max_completion_tokens: 1000 }); - }); - - it('should return maxTokens for non-GPT-5 models', () => { - const result = provider.prepareTokenParam('gpt-4', 1000); - expect(result).toEqual({ maxTokens: 1000 }); - }); - - it('should coerce token value to integer', () => { - // Float values - const result1 = provider.prepareTokenParam('gpt-5', 1000.7); - expect(result1).toEqual({ max_completion_tokens: 1000 }); - - const result2 = provider.prepareTokenParam('gpt-4', 1000.7); - expect(result2).toEqual({ maxTokens: 1000 }); - - // String float - const result3 = provider.prepareTokenParam('gpt-5', '1000.7'); - expect(result3).toEqual({ max_completion_tokens: 1000 }); - - // String integers (common CLI input path) - expect(provider.prepareTokenParam('gpt-5', '1000')).toEqual({ - max_completion_tokens: 1000 - }); - expect(provider.prepareTokenParam('gpt-4', '1000')).toEqual({ - maxTokens: 1000 - }); - }); - - it('should return empty object for undefined maxTokens', () => { - const result = provider.prepareTokenParam('gpt-5', undefined); - expect(result).toEqual({}); - }); - - it('should handle edge cases', () => { - // Test with 0 (should still pass through as 0) - const result1 = provider.prepareTokenParam('gpt-5', 0); - expect(result1).toEqual({ max_completion_tokens: 0 }); - - // Test with string number - const result2 = provider.prepareTokenParam('gpt-5', '100'); - expect(result2).toEqual({ max_completion_tokens: 100 }); - - // Test with negative number (will be floored, validation happens elsewhere) - const result3 = provider.prepareTokenParam('gpt-4', -10.5); - expect(result3).toEqual({ maxTokens: -11 }); - }); - }); - describe('validateOptionalParams', () => { it('should accept valid maxTokens values', () => { expect(() => diff --git a/tests/unit/providers/provider-registry.test.js b/tests/unit/ai-providers/provider-registry.test.js similarity index 100% rename from tests/unit/providers/provider-registry.test.js rename to tests/unit/ai-providers/provider-registry.test.js diff --git a/tests/unit/ai-services-unified.test.js b/tests/unit/ai-services-unified.test.js index 67507936..d821c47e 100644 --- a/tests/unit/ai-services-unified.test.js +++ b/tests/unit/ai-services-unified.test.js @@ -122,7 +122,7 @@ jest.unstable_mockModule('../../scripts/modules/config-manager.js', () => ({ getMcpApiKeyStatus: mockGetMcpApiKeyStatus, // Providers without API keys - providersWithoutApiKeys: ['ollama', 'bedrock', 'gemini-cli'] + providersWithoutApiKeys: ['ollama', 'bedrock', 'gemini-cli', 'codex-cli'] })); // Mock AI Provider Classes with proper methods @@ -158,6 +158,24 @@ const mockOllamaProvider = { isRequiredApiKey: jest.fn(() => false) }; +// Codex CLI mock provider instance +const mockCodexProvider = { + generateText: jest.fn(), + streamText: jest.fn(), + generateObject: jest.fn(), + getRequiredApiKeyName: jest.fn(() => 'OPENAI_API_KEY'), + isRequiredApiKey: jest.fn(() => false) +}; + +// Claude Code mock provider instance +const mockClaudeProvider = { + generateText: jest.fn(), + streamText: jest.fn(), + generateObject: jest.fn(), + getRequiredApiKeyName: jest.fn(() => 'CLAUDE_CODE_API_KEY'), + isRequiredApiKey: jest.fn(() => false) +}; + // Mock the provider classes to return our mock instances jest.unstable_mockModule('../../src/ai-providers/index.js', () => ({ AnthropicAIProvider: jest.fn(() => mockAnthropicProvider), @@ -213,13 +231,7 @@ jest.unstable_mockModule('../../src/ai-providers/index.js', () => ({ getRequiredApiKeyName: jest.fn(() => null), isRequiredApiKey: jest.fn(() => false) })), - ClaudeCodeProvider: jest.fn(() => ({ - generateText: jest.fn(), - streamText: jest.fn(), - generateObject: jest.fn(), - getRequiredApiKeyName: jest.fn(() => 'CLAUDE_CODE_API_KEY'), - isRequiredApiKey: jest.fn(() => false) - })), + ClaudeCodeProvider: jest.fn(() => mockClaudeProvider), GeminiCliProvider: jest.fn(() => ({ generateText: jest.fn(), streamText: jest.fn(), @@ -227,6 +239,7 @@ jest.unstable_mockModule('../../src/ai-providers/index.js', () => ({ getRequiredApiKeyName: jest.fn(() => 'GEMINI_API_KEY'), isRequiredApiKey: jest.fn(() => false) })), + CodexCliProvider: jest.fn(() => mockCodexProvider), GrokCliProvider: jest.fn(() => ({ generateText: jest.fn(), streamText: jest.fn(), @@ -809,5 +822,112 @@ describe('Unified AI Services', () => { // Should have gotten the anthropic response expect(result.mainResult).toBe('Anthropic response with session key'); }); + + // --- Codex CLI specific tests --- + test('should use codex-cli provider without API key (OAuth)', async () => { + // Arrange codex-cli as main provider + mockGetMainProvider.mockReturnValue('codex-cli'); + mockGetMainModelId.mockReturnValue('gpt-5-codex'); + mockGetParametersForRole.mockReturnValue({ + maxTokens: 128000, + temperature: 1 + }); + mockGetResponseLanguage.mockReturnValue('English'); + // No API key in env + mockResolveEnvVariable.mockReturnValue(null); + // Mock codex generateText response + mockCodexProvider.generateText.mockResolvedValueOnce({ + text: 'ok', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + const { generateTextService } = await import( + '../../scripts/modules/ai-services-unified.js' + ); + + const result = await generateTextService({ + role: 'main', + prompt: 'Hello Codex', + projectRoot: fakeProjectRoot + }); + + expect(result.mainResult).toBe('ok'); + expect(mockCodexProvider.generateText).toHaveBeenCalledWith( + expect.objectContaining({ + modelId: 'gpt-5-codex', + apiKey: null, + maxTokens: 128000 + }) + ); + }); + + test('should pass apiKey to codex-cli when provided', async () => { + // Arrange codex-cli as main provider + mockGetMainProvider.mockReturnValue('codex-cli'); + mockGetMainModelId.mockReturnValue('gpt-5-codex'); + mockGetParametersForRole.mockReturnValue({ + maxTokens: 128000, + temperature: 1 + }); + mockGetResponseLanguage.mockReturnValue('English'); + // Provide API key via env resolver + mockResolveEnvVariable.mockReturnValue('sk-test'); + // Mock codex generateText response + mockCodexProvider.generateText.mockResolvedValueOnce({ + text: 'ok-with-key', + usage: { inputTokens: 1, outputTokens: 1, totalTokens: 2 } + }); + + const { generateTextService } = await import( + '../../scripts/modules/ai-services-unified.js' + ); + + const result = await generateTextService({ + role: 'main', + prompt: 'Hello Codex', + projectRoot: fakeProjectRoot + }); + + expect(result.mainResult).toBe('ok-with-key'); + expect(mockCodexProvider.generateText).toHaveBeenCalledWith( + expect.objectContaining({ + modelId: 'gpt-5-codex', + apiKey: 'sk-test' + }) + ); + }); + + // --- Claude Code specific test --- + test('should pass temperature to claude-code provider (provider handles filtering)', async () => { + mockGetMainProvider.mockReturnValue('claude-code'); + mockGetMainModelId.mockReturnValue('sonnet'); + mockGetParametersForRole.mockReturnValue({ + maxTokens: 64000, + temperature: 0.7 + }); + mockGetResponseLanguage.mockReturnValue('English'); + mockResolveEnvVariable.mockReturnValue(null); + + mockClaudeProvider.generateText.mockResolvedValueOnce({ + text: 'ok-claude', + usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } + }); + + const { generateTextService } = await import( + '../../scripts/modules/ai-services-unified.js' + ); + + const result = await generateTextService({ + role: 'main', + prompt: 'Hello Claude', + projectRoot: fakeProjectRoot + }); + + expect(result.mainResult).toBe('ok-claude'); + // The provider (BaseAIProvider) is responsible for filtering it based on supportsTemperature + const callArgs = mockClaudeProvider.generateText.mock.calls[0][0]; + expect(callArgs).toHaveProperty('temperature', 0.7); + expect(callArgs.maxTokens).toBe(64000); + }); }); }); diff --git a/tests/unit/config-manager.test.js b/tests/unit/config-manager.test.js index 97ad4e61..84856de5 100644 --- a/tests/unit/config-manager.test.js +++ b/tests/unit/config-manager.test.js @@ -149,6 +149,7 @@ const DEFAULT_CONFIG = { responseLanguage: 'English' }, claudeCode: {}, + codexCli: {}, grokCli: { timeout: 120000, workingDirectory: null, @@ -642,7 +643,8 @@ describe('getConfig Tests', () => { ...DEFAULT_CONFIG.claudeCode, ...VALID_CUSTOM_CONFIG.claudeCode }, - grokCli: { ...DEFAULT_CONFIG.grokCli } + grokCli: { ...DEFAULT_CONFIG.grokCli }, + codexCli: { ...DEFAULT_CONFIG.codexCli } }; expect(config).toEqual(expectedMergedConfig); expect(fsExistsSyncSpy).toHaveBeenCalledWith(MOCK_CONFIG_PATH); @@ -685,7 +687,8 @@ describe('getConfig Tests', () => { ...DEFAULT_CONFIG.claudeCode, ...VALID_CUSTOM_CONFIG.claudeCode }, - grokCli: { ...DEFAULT_CONFIG.grokCli } + grokCli: { ...DEFAULT_CONFIG.grokCli }, + codexCli: { ...DEFAULT_CONFIG.codexCli } }; expect(config).toEqual(expectedMergedConfig); expect(fsReadFileSyncSpy).toHaveBeenCalledWith(MOCK_CONFIG_PATH, 'utf-8'); @@ -794,7 +797,8 @@ describe('getConfig Tests', () => { ...DEFAULT_CONFIG.claudeCode, ...VALID_CUSTOM_CONFIG.claudeCode }, - grokCli: { ...DEFAULT_CONFIG.grokCli } + grokCli: { ...DEFAULT_CONFIG.grokCli }, + codexCli: { ...DEFAULT_CONFIG.codexCli } }; expect(config).toEqual(expectedMergedConfig); }); diff --git a/tests/unit/dependency-manager.test.js b/tests/unit/dependency-manager.test.js index e8ffbd3c..b1b430ef 100644 --- a/tests/unit/dependency-manager.test.js +++ b/tests/unit/dependency-manager.test.js @@ -27,10 +27,6 @@ jest.mock('chalk', () => ({ jest.mock('boxen', () => jest.fn((text) => `[boxed: ${text}]`)); -jest.mock('@anthropic-ai/sdk', () => ({ - Anthropic: jest.fn().mockImplementation(() => ({})) -})); - // Mock utils module const mockTaskExists = jest.fn(); const mockFormatTaskId = jest.fn(); diff --git a/tests/unit/profiles/cursor-integration.test.js b/tests/unit/profiles/cursor-integration.test.js index eb962184..6a7900a0 100644 --- a/tests/unit/profiles/cursor-integration.test.js +++ b/tests/unit/profiles/cursor-integration.test.js @@ -8,18 +8,37 @@ jest.mock('child_process', () => ({ execSync: jest.fn() })); -// Mock console methods -jest.mock('console', () => ({ +// Mock console methods to avoid chalk issues +const mockLog = jest.fn(); +const originalConsole = global.console; +const mockConsole = { log: jest.fn(), info: jest.fn(), warn: jest.fn(), error: jest.fn(), clear: jest.fn() +}; +global.console = mockConsole; + +// Mock utils logger to avoid chalk dependency issues +await jest.unstable_mockModule('../../../scripts/modules/utils.js', () => ({ + default: undefined, + log: mockLog, + isSilentMode: () => false })); +// Import the cursor profile after mocking +const { cursorProfile, onAddRulesProfile, onRemoveRulesProfile } = await import( + '../../../src/profiles/cursor.js' +); + describe('Cursor Integration', () => { let tempDir; + afterAll(() => { + global.console = originalConsole; + }); + beforeEach(() => { jest.clearAllMocks(); @@ -75,4 +94,127 @@ describe('Cursor Integration', () => { { recursive: true } ); }); + + test('cursor profile has lifecycle functions for command copying', () => { + // Assert that the profile exports the lifecycle functions + expect(typeof onAddRulesProfile).toBe('function'); + expect(typeof onRemoveRulesProfile).toBe('function'); + expect(cursorProfile.onAddRulesProfile).toBe(onAddRulesProfile); + expect(cursorProfile.onRemoveRulesProfile).toBe(onRemoveRulesProfile); + }); + + describe('command copying lifecycle', () => { + let mockAssetsDir; + let mockTargetDir; + + beforeEach(() => { + mockAssetsDir = path.join(tempDir, 'assets'); + mockTargetDir = path.join(tempDir, 'target'); + + // Reset all mocks + jest.clearAllMocks(); + + // Mock fs methods for the lifecycle functions + jest.spyOn(fs, 'existsSync').mockImplementation((filePath) => { + const pathStr = filePath.toString(); + if (pathStr.includes('claude/commands')) { + return true; // Mock that source commands exist + } + return false; + }); + + jest.spyOn(fs, 'mkdirSync').mockImplementation(() => {}); + jest.spyOn(fs, 'readdirSync').mockImplementation(() => ['tm']); + jest + .spyOn(fs, 'statSync') + .mockImplementation(() => ({ isDirectory: () => true })); + jest.spyOn(fs, 'copyFileSync').mockImplementation(() => {}); + jest.spyOn(fs, 'rmSync').mockImplementation(() => {}); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + test('onAddRulesProfile copies commands from assets to .cursor/commands', () => { + // Detect if cpSync exists and set up appropriate spy + if (fs.cpSync) { + const cpSpy = jest.spyOn(fs, 'cpSync').mockImplementation(() => {}); + + // Act + onAddRulesProfile(mockTargetDir, mockAssetsDir); + + // Assert + expect(fs.existsSync).toHaveBeenCalledWith( + path.join(mockAssetsDir, 'claude', 'commands') + ); + expect(cpSpy).toHaveBeenCalledWith( + path.join(mockAssetsDir, 'claude', 'commands'), + path.join(mockTargetDir, '.cursor', 'commands'), + expect.objectContaining({ recursive: true, force: true }) + ); + } else { + // Act + onAddRulesProfile(mockTargetDir, mockAssetsDir); + + // Assert + expect(fs.existsSync).toHaveBeenCalledWith( + path.join(mockAssetsDir, 'claude', 'commands') + ); + expect(fs.mkdirSync).toHaveBeenCalledWith( + path.join(mockTargetDir, '.cursor', 'commands'), + { recursive: true } + ); + expect(fs.copyFileSync).toHaveBeenCalled(); + } + }); + + test('onAddRulesProfile handles missing source directory gracefully', () => { + // Arrange - mock source directory not existing + jest.spyOn(fs, 'existsSync').mockImplementation(() => false); + + // Act + onAddRulesProfile(mockTargetDir, mockAssetsDir); + + // Assert - should not attempt to copy anything + expect(fs.mkdirSync).not.toHaveBeenCalled(); + expect(fs.copyFileSync).not.toHaveBeenCalled(); + }); + + test('onRemoveRulesProfile removes .cursor/commands directory', () => { + // Arrange - mock directory exists + jest.spyOn(fs, 'existsSync').mockImplementation(() => true); + + // Act + onRemoveRulesProfile(mockTargetDir); + + // Assert + expect(fs.rmSync).toHaveBeenCalledWith( + path.join(mockTargetDir, '.cursor', 'commands'), + { recursive: true, force: true } + ); + }); + + test('onRemoveRulesProfile handles missing directory gracefully', () => { + // Arrange - mock directory doesn't exist + jest.spyOn(fs, 'existsSync').mockImplementation(() => false); + + // Act + onRemoveRulesProfile(mockTargetDir); + + // Assert - should still return true but not attempt removal + expect(fs.rmSync).not.toHaveBeenCalled(); + }); + + test('onRemoveRulesProfile handles removal errors gracefully', () => { + // Arrange - mock directory exists but removal fails + jest.spyOn(fs, 'existsSync').mockImplementation(() => true); + jest.spyOn(fs, 'rmSync').mockImplementation(() => { + throw new Error('Permission denied'); + }); + + // Act & Assert - should not throw + expect(() => onRemoveRulesProfile(mockTargetDir)).not.toThrow(); + }); + }); }); diff --git a/tests/unit/profiles/mcp-config-validation.test.js b/tests/unit/profiles/mcp-config-validation.test.js index edf3ac78..0d30da06 100644 --- a/tests/unit/profiles/mcp-config-validation.test.js +++ b/tests/unit/profiles/mcp-config-validation.test.js @@ -266,10 +266,10 @@ describe('MCP Configuration Validation', () => { expect(mcpEnabledProfiles).toContain('cursor'); expect(mcpEnabledProfiles).toContain('gemini'); expect(mcpEnabledProfiles).toContain('opencode'); - expect(mcpEnabledProfiles).toContain('roo'); expect(mcpEnabledProfiles).toContain('vscode'); expect(mcpEnabledProfiles).toContain('windsurf'); expect(mcpEnabledProfiles).toContain('zed'); + expect(mcpEnabledProfiles).toContain('roo'); expect(mcpEnabledProfiles).not.toContain('cline'); expect(mcpEnabledProfiles).not.toContain('codex'); expect(mcpEnabledProfiles).not.toContain('trae'); @@ -384,6 +384,7 @@ describe('MCP Configuration Validation', () => { 'claude', 'cursor', 'gemini', + 'kiro', 'opencode', 'roo', 'windsurf', diff --git a/tests/unit/prompts/expand-task-prompt.test.js b/tests/unit/prompts/expand-task-prompt.test.js index 7d68a75a..5aacb025 100644 --- a/tests/unit/prompts/expand-task-prompt.test.js +++ b/tests/unit/prompts/expand-task-prompt.test.js @@ -1,5 +1,6 @@ -import { jest } from '@jest/globals'; import { PromptManager } from '../../../scripts/modules/prompt-manager.js'; +import { ExpandTaskResponseSchema } from '../../../src/schemas/expand-task.js'; +import { SubtaskSchema } from '../../../src/schemas/base-schemas.js'; describe('expand-task prompt template', () => { let promptManager; @@ -74,30 +75,25 @@ describe('expand-task prompt template', () => { expect(userPrompt).toContain(`Current details: ${testTask.details}`); // Also includes the expansion prompt - expect(userPrompt).toContain('Expansion Guidance:'); expect(userPrompt).toContain(params.expansionPrompt); expect(userPrompt).toContain(params.complexityReasoningContext); }); - test('all variants request JSON format with subtasks array', () => { - const variants = ['default', 'research', 'complexity-report']; + test('ExpandTaskResponseSchema defines required subtask fields', () => { + // Test the schema definition directly instead of weak substring matching + const schema = ExpandTaskResponseSchema; + const subtasksSchema = schema.shape.subtasks; + const subtaskSchema = subtasksSchema.element; - variants.forEach((variant) => { - const params = - variant === 'complexity-report' - ? { ...baseParams, expansionPrompt: 'test' } - : baseParams; - - const { systemPrompt, userPrompt } = promptManager.loadPrompt( - 'expand-task', - params, - variant - ); - const combined = systemPrompt + userPrompt; - - expect(combined.toLowerCase()).toContain('subtasks'); - expect(combined).toContain('JSON'); - }); + // Verify the schema has the required fields + expect(subtaskSchema).toBe(SubtaskSchema); + expect(SubtaskSchema.shape).toHaveProperty('id'); + expect(SubtaskSchema.shape).toHaveProperty('title'); + expect(SubtaskSchema.shape).toHaveProperty('description'); + expect(SubtaskSchema.shape).toHaveProperty('dependencies'); + expect(SubtaskSchema.shape).toHaveProperty('details'); + expect(SubtaskSchema.shape).toHaveProperty('status'); + expect(SubtaskSchema.shape).toHaveProperty('testStrategy'); }); test('complexity-report variant fails without task context regression test', () => { diff --git a/tests/unit/prompts/prompt-migration.test.js b/tests/unit/prompts/prompt-migration.test.js new file mode 100644 index 00000000..f60572f8 --- /dev/null +++ b/tests/unit/prompts/prompt-migration.test.js @@ -0,0 +1,55 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const promptsDir = path.join(__dirname, '../../../src/prompts'); + +describe('Prompt Migration Validation', () => { + const bannedPhrases = [ + 'Respond ONLY with', + 'Return only the', + 'valid JSON', + 'Do not include any explanatory text', + 'Do not include any explanation', + 'code block markers' + ]; + + // Map banned phrases to contexts where they're allowed + const allowedContexts = { + 'respond only with': ['Use markdown formatting for better readability'], + 'return only the': ['Use markdown formatting for better readability'] + }; + + test('prompts should not contain JSON formatting instructions', () => { + const promptFiles = fs + .readdirSync(promptsDir) + .filter((file) => file.endsWith('.json') && !file.includes('schema')) + // Exclude update-subtask.json as it returns plain strings, not JSON + .filter((file) => file !== 'update-subtask.json'); + + promptFiles.forEach((file) => { + const content = fs.readFileSync(path.join(promptsDir, file), 'utf8'); + + bannedPhrases.forEach((phrase) => { + const lowerContent = content.toLowerCase(); + const lowerPhrase = phrase.toLowerCase(); + + if (lowerContent.includes(lowerPhrase)) { + // Check if this phrase is allowed in its context + const allowedInContext = allowedContexts[lowerPhrase]; + const isAllowed = + allowedInContext && + allowedInContext.some((context) => + lowerContent.includes(context.toLowerCase()) + ); + + expect(isAllowed).toBe( + true, + `File ${file} contains banned phrase "${phrase}" without allowed context` + ); + } + }); + }); + }); +}); diff --git a/tests/unit/scripts/modules/task-manager/add-subtask.test.js b/tests/unit/scripts/modules/task-manager/add-subtask.test.js index eeaf6ef7..6fc87a94 100644 --- a/tests/unit/scripts/modules/task-manager/add-subtask.test.js +++ b/tests/unit/scripts/modules/task-manager/add-subtask.test.js @@ -94,7 +94,6 @@ describe('addSubtask function', () => { const parentTask = writeCallArgs.tasks.find((t) => t.id === 1); expect(parentTask.subtasks).toHaveLength(1); expect(parentTask.subtasks[0].title).toBe('New Subtask'); - expect(mockGenerateTaskFiles).toHaveBeenCalled(); }); test('should convert an existing task to a subtask', async () => { diff --git a/tests/unit/scripts/modules/task-manager/analyze-task-complexity.test.js b/tests/unit/scripts/modules/task-manager/analyze-task-complexity.test.js index a5f72ba4..09b3e2d3 100644 --- a/tests/unit/scripts/modules/task-manager/analyze-task-complexity.test.js +++ b/tests/unit/scripts/modules/task-manager/analyze-task-complexity.test.js @@ -50,7 +50,7 @@ jest.unstable_mockModule( () => ({ generateObjectService: jest.fn().mockResolvedValue({ mainResult: { - tasks: [] + complexityAnalysis: [] }, telemetryData: { timestamp: new Date().toISOString(), @@ -307,10 +307,15 @@ describe('analyzeTaskComplexity', () => { return { task: task || null, originalSubtaskCount: null }; }); - generateTextService.mockResolvedValue(sampleApiResponse); + generateObjectService.mockResolvedValue({ + mainResult: { + complexityAnalysis: JSON.parse(sampleApiResponse.mainResult).tasks + }, + telemetryData: sampleApiResponse.telemetryData + }); }); - test('should call generateTextService with the correct parameters', async () => { + test('should call generateObjectService with the correct parameters', async () => { // Arrange const options = { file: 'tasks/tasks.json', @@ -338,7 +343,7 @@ describe('analyzeTaskComplexity', () => { '/mock/project/root', undefined ); - expect(generateTextService).toHaveBeenCalledWith(expect.any(Object)); + expect(generateObjectService).toHaveBeenCalledWith(expect.any(Object)); expect(mockWriteFileSync).toHaveBeenCalledWith( expect.stringContaining('task-complexity-report.json'), expect.stringContaining('"thresholdScore": 5'), @@ -369,7 +374,7 @@ describe('analyzeTaskComplexity', () => { }); // Assert - expect(generateTextService).toHaveBeenCalledWith( + expect(generateObjectService).toHaveBeenCalledWith( expect.objectContaining({ role: 'research' // This should be present when research is true }) @@ -454,7 +459,7 @@ describe('analyzeTaskComplexity', () => { // Assert // Check if the prompt sent to AI doesn't include the completed task (id: 3) - expect(generateTextService).toHaveBeenCalledWith( + expect(generateObjectService).toHaveBeenCalledWith( expect.objectContaining({ prompt: expect.not.stringContaining('"id": 3') }) @@ -471,7 +476,7 @@ describe('analyzeTaskComplexity', () => { }; // Force API error - generateTextService.mockRejectedValueOnce(new Error('API Error')); + generateObjectService.mockRejectedValueOnce(new Error('API Error')); const mockMcpLog = { info: jest.fn(), diff --git a/tests/unit/scripts/modules/task-manager/complexity-report-tag-isolation.test.js b/tests/unit/scripts/modules/task-manager/complexity-report-tag-isolation.test.js index 99fb57eb..f2763d4b 100644 --- a/tests/unit/scripts/modules/task-manager/complexity-report-tag-isolation.test.js +++ b/tests/unit/scripts/modules/task-manager/complexity-report-tag-isolation.test.js @@ -196,9 +196,62 @@ jest.unstable_mockModule( currency: 'USD' } }), - generateObjectService: jest.fn().mockResolvedValue({ - mainResult: { - object: { + generateObjectService: jest.fn().mockImplementation((params) => { + const commandName = params?.commandName || 'default'; + + if (commandName === 'analyze-complexity') { + // Check if this is for a specific tag test by looking at the prompt + const isFeatureTag = + params?.prompt?.includes('feature') || params?.role === 'feature'; + const isMasterTag = + params?.prompt?.includes('master') || params?.role === 'master'; + + let taskTitle = 'Test Task'; + if (isFeatureTag) { + taskTitle = 'Feature Task 1'; + } else if (isMasterTag) { + taskTitle = 'Master Task 1'; + } + + return Promise.resolve({ + mainResult: { + complexityAnalysis: [ + { + taskId: 1, + taskTitle: taskTitle, + complexityScore: 7, + recommendedSubtasks: 4, + expansionPrompt: 'Break down this task', + reasoning: 'This task is moderately complex' + }, + { + taskId: 2, + taskTitle: 'Task 2', + complexityScore: 5, + recommendedSubtasks: 3, + expansionPrompt: 'Break down this task with a focus on task 2.', + reasoning: + 'Automatically added due to missing analysis in AI response.' + } + ] + }, + telemetryData: { + timestamp: new Date().toISOString(), + commandName: 'analyze-complexity', + modelUsed: 'claude-3-5-sonnet', + providerName: 'anthropic', + inputTokens: 1000, + outputTokens: 500, + totalTokens: 1500, + totalCost: 0.012414, + currency: 'USD' + } + }); + } + + // Default response for expand-task and others + return Promise.resolve({ + mainResult: { subtasks: [ { id: 1, @@ -210,19 +263,19 @@ jest.unstable_mockModule( testStrategy: 'Test strategy' } ] + }, + telemetryData: { + timestamp: new Date().toISOString(), + commandName: 'expand-task', + modelUsed: 'claude-3-5-sonnet', + providerName: 'anthropic', + inputTokens: 1000, + outputTokens: 500, + totalTokens: 1500, + totalCost: 0.012414, + currency: 'USD' } - }, - telemetryData: { - timestamp: new Date().toISOString(), - commandName: 'expand-task', - modelUsed: 'claude-3-5-sonnet', - providerName: 'anthropic', - inputTokens: 1000, - outputTokens: 500, - totalTokens: 1500, - totalCost: 0.012414, - currency: 'USD' - } + }); }) }) ); @@ -421,9 +474,8 @@ const { readJSON, writeJSON, getTagAwareFilePath } = await import( '../../../../../scripts/modules/utils.js' ); -const { generateTextService, streamTextService } = await import( - '../../../../../scripts/modules/ai-services-unified.js' -); +const { generateTextService, generateObjectService, streamTextService } = + await import('../../../../../scripts/modules/ai-services-unified.js'); // Import the modules under test const { default: analyzeTaskComplexity } = await import( diff --git a/tests/unit/scripts/modules/task-manager/expand-task.test.js b/tests/unit/scripts/modules/task-manager/expand-task.test.js index 9a5c49b7..6b807de3 100644 --- a/tests/unit/scripts/modules/task-manager/expand-task.test.js +++ b/tests/unit/scripts/modules/task-manager/expand-task.test.js @@ -65,8 +65,8 @@ jest.unstable_mockModule('../../../../../scripts/modules/ui.js', () => ({ jest.unstable_mockModule( '../../../../../scripts/modules/ai-services-unified.js', () => ({ - generateTextService: jest.fn().mockResolvedValue({ - mainResult: JSON.stringify({ + generateObjectService: jest.fn().mockResolvedValue({ + mainResult: { subtasks: [ { id: 1, @@ -101,7 +101,7 @@ jest.unstable_mockModule( testStrategy: 'UI tests and visual regression testing' } ] - }), + }, telemetryData: { timestamp: new Date().toISOString(), userId: '1234567890', @@ -213,7 +213,7 @@ const { findProjectRoot } = await import('../../../../../scripts/modules/utils.js'); -const { generateTextService } = await import( +const { generateObjectService } = await import( '../../../../../scripts/modules/ai-services-unified.js' ); @@ -373,7 +373,7 @@ describe('expandTask', () => { '/mock/project/root', undefined ); - expect(generateTextService).toHaveBeenCalledWith(expect.any(Object)); + expect(generateObjectService).toHaveBeenCalledWith(expect.any(Object)); expect(writeJSON).toHaveBeenCalledWith( tasksPath, expect.objectContaining({ @@ -458,7 +458,7 @@ describe('expandTask', () => { ); // Assert - expect(generateTextService).toHaveBeenCalledWith( + expect(generateObjectService).toHaveBeenCalledWith( expect.objectContaining({ role: 'research', commandName: expect.any(String) @@ -496,7 +496,7 @@ describe('expandTask', () => { telemetryData: expect.any(Object) }) ); - expect(generateTextService).toHaveBeenCalled(); + expect(generateObjectService).toHaveBeenCalled(); }); }); @@ -660,25 +660,38 @@ describe('expandTask', () => { // Act await expandTask(tasksPath, taskId, 3, false, '', context, false); - // Assert - Should append to existing subtasks with proper ID increments - expect(writeJSON).toHaveBeenCalledWith( - tasksPath, + // Assert - Verify generateObjectService was called correctly + expect(generateObjectService).toHaveBeenCalledWith( expect.objectContaining({ - tasks: expect.arrayContaining([ - expect.objectContaining({ - id: 4, - subtasks: expect.arrayContaining([ - // Should contain both existing and new subtasks - expect.any(Object), - expect.any(Object), - expect.any(Object), - expect.any(Object) // 1 existing + 3 new = 4 total - ]) - }) - ]) - }), - '/mock/project/root', - undefined + role: 'main', + commandName: 'expand-task', + objectName: 'subtasks' + }) + ); + + // Assert - Verify data was written with appended subtasks + expect(writeJSON).toHaveBeenCalled(); + const writeCall = writeJSON.mock.calls[0]; + const savedData = writeCall[1]; // Second argument is the data + const task4 = savedData.tasks.find((t) => t.id === 4); + + // Should have 4 subtasks total (1 existing + 3 new) + expect(task4.subtasks).toHaveLength(4); + + // Verify existing subtask is preserved at index 0 + expect(task4.subtasks[0]).toEqual( + expect.objectContaining({ + id: 1, + title: 'Existing subtask' + }) + ); + + // Verify new subtasks were appended (they start with id=1 from AI) + expect(task4.subtasks[1]).toEqual( + expect.objectContaining({ + id: 1, + title: 'Set up project structure' + }) ); }); }); @@ -743,8 +756,8 @@ describe('expandTask', () => { // Act await expandTask(tasksPath, taskId, undefined, false, '', context, false); - // Assert - generateTextService called with systemPrompt for 5 subtasks - const callArg = generateTextService.mock.calls[0][0]; + // Assert - generateObjectService called with systemPrompt for 5 subtasks + const callArg = generateObjectService.mock.calls[0][0]; expect(callArg.systemPrompt).toContain('Generate exactly 5 subtasks'); // Assert - Should use complexity-report variant with expansion prompt @@ -831,7 +844,9 @@ describe('expandTask', () => { projectRoot: '/mock/project/root' }; - generateTextService.mockRejectedValueOnce(new Error('AI service error')); + generateObjectService.mockRejectedValueOnce( + new Error('AI service error') + ); // Act & Assert await expect( @@ -841,6 +856,54 @@ describe('expandTask', () => { expect(writeJSON).not.toHaveBeenCalled(); }); + test('should handle missing mainResult from AI response', async () => { + // Arrange + const tasksPath = 'tasks/tasks.json'; + const taskId = '2'; + const context = { + mcpLog: createMcpLogMock(), + projectRoot: '/mock/project/root' + }; + + // Mock AI service returning response without mainResult + generateObjectService.mockResolvedValueOnce({ + telemetryData: { inputTokens: 100, outputTokens: 50 } + // Missing mainResult + }); + + // Act & Assert + await expect( + expandTask(tasksPath, taskId, 3, false, '', context, false) + ).rejects.toThrow('AI response did not include a valid subtasks array.'); + + expect(writeJSON).not.toHaveBeenCalled(); + }); + + test('should handle invalid subtasks array from AI response', async () => { + // Arrange + const tasksPath = 'tasks/tasks.json'; + const taskId = '2'; + const context = { + mcpLog: createMcpLogMock(), + projectRoot: '/mock/project/root' + }; + + // Mock AI service returning response with invalid subtasks + generateObjectService.mockResolvedValueOnce({ + mainResult: { + subtasks: 'not-an-array' // Invalid: should be an array + }, + telemetryData: { inputTokens: 100, outputTokens: 50 } + }); + + // Act & Assert + await expect( + expandTask(tasksPath, taskId, 3, false, '', context, false) + ).rejects.toThrow('AI response did not include a valid subtasks array.'); + + expect(writeJSON).not.toHaveBeenCalled(); + }); + test('should handle file read errors', async () => { // Arrange const tasksPath = 'tasks/tasks.json'; @@ -941,7 +1004,7 @@ describe('expandTask', () => { await expandTask(tasksPath, taskId, 3, false, '', context, false); // Assert - Should work with empty context (but may include project context) - expect(generateTextService).toHaveBeenCalledWith( + expect(generateObjectService).toHaveBeenCalledWith( expect.objectContaining({ prompt: expect.stringMatching(/.*/) // Just ensure prompt exists }) @@ -1074,7 +1137,7 @@ describe('expandTask', () => { // Assert - Should complete successfully expect(result).toBeDefined(); - expect(generateTextService).toHaveBeenCalled(); + expect(generateObjectService).toHaveBeenCalled(); }); test('should use dynamic prompting when numSubtasks is 0', async () => { @@ -1095,11 +1158,11 @@ describe('expandTask', () => { // Act await expandTask(tasksPath, taskId, 0, false, '', context, false); - // Assert - Verify generateTextService was called - expect(generateTextService).toHaveBeenCalled(); + // Assert - Verify generateObjectService was called + expect(generateObjectService).toHaveBeenCalled(); // Get the call arguments to verify the system prompt - const callArgs = generateTextService.mock.calls[0][0]; + const callArgs = generateObjectService.mock.calls[0][0]; expect(callArgs.systemPrompt).toContain( 'an appropriate number of specific subtasks' ); @@ -1122,11 +1185,11 @@ describe('expandTask', () => { // Act await expandTask(tasksPath, taskId, 5, false, '', context, false); - // Assert - Verify generateTextService was called - expect(generateTextService).toHaveBeenCalled(); + // Assert - Verify generateObjectService was called + expect(generateObjectService).toHaveBeenCalled(); // Get the call arguments to verify the system prompt - const callArgs = generateTextService.mock.calls[0][0]; + const callArgs = generateObjectService.mock.calls[0][0]; expect(callArgs.systemPrompt).toContain('5 specific subtasks'); }); @@ -1151,8 +1214,8 @@ describe('expandTask', () => { await expandTask(tasksPath, taskId, -3, false, '', context, false); // Assert - Should use default value instead of negative - expect(generateTextService).toHaveBeenCalled(); - const callArgs = generateTextService.mock.calls[0][0]; + expect(generateObjectService).toHaveBeenCalled(); + const callArgs = generateObjectService.mock.calls[0][0]; expect(callArgs.systemPrompt).toContain('4 specific subtasks'); }); @@ -1177,8 +1240,8 @@ describe('expandTask', () => { await expandTask(tasksPath, taskId, undefined, false, '', context, false); // Assert - Should use default value - expect(generateTextService).toHaveBeenCalled(); - const callArgs = generateTextService.mock.calls[0][0]; + expect(generateObjectService).toHaveBeenCalled(); + const callArgs = generateObjectService.mock.calls[0][0]; expect(callArgs.systemPrompt).toContain('6 specific subtasks'); }); @@ -1203,8 +1266,8 @@ describe('expandTask', () => { await expandTask(tasksPath, taskId, null, false, '', context, false); // Assert - Should use default value - expect(generateTextService).toHaveBeenCalled(); - const callArgs = generateTextService.mock.calls[0][0]; + expect(generateObjectService).toHaveBeenCalled(); + const callArgs = generateObjectService.mock.calls[0][0]; expect(callArgs.systemPrompt).toContain('7 specific subtasks'); }); }); diff --git a/tests/unit/scripts/modules/task-manager/move-task.test.js b/tests/unit/scripts/modules/task-manager/move-task.test.js index a3df27fd..aadcd6f5 100644 --- a/tests/unit/scripts/modules/task-manager/move-task.test.js +++ b/tests/unit/scripts/modules/task-manager/move-task.test.js @@ -88,11 +88,6 @@ describe('moveTask (unit)', () => { ).rejects.toThrow(/Number of source IDs/); }); - test('batch move calls generateTaskFiles once when flag true', async () => { - await moveTask('tasks.json', '1,2', '3,4', true, { tag: 'master' }); - expect(generateTaskFiles).toHaveBeenCalledTimes(1); - }); - test('error when tag invalid', async () => { await expect( moveTask('tasks.json', '1', '2', false, { tag: 'ghost' }) diff --git a/tests/unit/scripts/modules/task-manager/update-task-by-id.test.js b/tests/unit/scripts/modules/task-manager/update-task-by-id.test.js index a7dac156..db53cd1a 100644 --- a/tests/unit/scripts/modules/task-manager/update-task-by-id.test.js +++ b/tests/unit/scripts/modules/task-manager/update-task-by-id.test.js @@ -43,7 +43,23 @@ jest.unstable_mockModule( () => ({ generateTextService: jest .fn() - .mockResolvedValue({ mainResult: { content: '{}' }, telemetryData: {} }) + .mockResolvedValue({ mainResult: { content: '{}' }, telemetryData: {} }), + generateObjectService: jest.fn().mockResolvedValue({ + mainResult: { + task: { + id: 1, + title: 'Updated Task', + description: 'Updated description', + status: 'pending', + dependencies: [], + priority: 'medium', + details: null, + testStrategy: null, + subtasks: [] + } + }, + telemetryData: {} + }) }) ); @@ -120,3 +136,206 @@ describe('updateTaskById validation', () => { expect(log).toHaveBeenCalled(); }); }); + +describe('updateTaskById success path with generateObjectService', () => { + let fs; + let generateObjectService; + + beforeEach(async () => { + jest.clearAllMocks(); + jest.spyOn(process, 'exit').mockImplementation(() => { + throw new Error('process.exit called'); + }); + fs = await import('fs'); + const aiServices = await import( + '../../../../../scripts/modules/ai-services-unified.js' + ); + generateObjectService = aiServices.generateObjectService; + }); + + test('successfully updates task with all fields from generateObjectService', async () => { + fs.existsSync.mockReturnValue(true); + readJSON.mockReturnValue({ + tag: 'master', + tasks: [ + { + id: 1, + title: 'Original Task', + description: 'Original description', + status: 'pending', + dependencies: [], + priority: 'low', + details: null, + testStrategy: null, + subtasks: [] + } + ] + }); + + const updatedTaskData = { + id: 1, + title: 'Updated Task', + description: 'Updated description', + status: 'pending', + dependencies: [2], + priority: 'high', + details: 'New implementation details', + testStrategy: 'Unit tests required', + subtasks: [ + { + id: 1, + title: 'Subtask 1', + description: 'First subtask', + status: 'pending', + dependencies: [] + } + ] + }; + + generateObjectService.mockResolvedValue({ + mainResult: { + task: updatedTaskData + }, + telemetryData: { + model: 'claude-3-5-sonnet-20241022', + inputTokens: 100, + outputTokens: 200 + } + }); + + const result = await updateTaskById( + 'tasks/tasks.json', + 1, + 'Update task with new requirements', + false, + { tag: 'master' }, + 'json' + ); + + // Verify generateObjectService was called (not generateTextService) + expect(generateObjectService).toHaveBeenCalled(); + const callArgs = generateObjectService.mock.calls[0][0]; + + // Verify correct arguments were passed + expect(callArgs).toMatchObject({ + role: 'main', + commandName: 'update-task', + objectName: 'task' + }); + expect(callArgs.schema).toBeDefined(); + expect(callArgs.systemPrompt).toContain( + 'update a software development task' + ); + expect(callArgs.prompt).toContain('Update task with new requirements'); + + // Verify the returned task contains all expected fields + expect(result).toEqual({ + updatedTask: expect.objectContaining({ + id: 1, + title: 'Updated Task', + description: 'Updated description', + status: 'pending', + dependencies: [2], + priority: 'high', + details: 'New implementation details', + testStrategy: 'Unit tests required', + subtasks: expect.arrayContaining([ + expect.objectContaining({ + id: 1, + title: 'Subtask 1', + description: 'First subtask', + status: 'pending' + }) + ]) + }), + telemetryData: expect.objectContaining({ + model: 'claude-3-5-sonnet-20241022', + inputTokens: 100, + outputTokens: 200 + }), + tagInfo: undefined + }); + }); + + test('handles generateObjectService with malformed mainResult', async () => { + fs.existsSync.mockReturnValue(true); + readJSON.mockReturnValue({ + tag: 'master', + tasks: [ + { + id: 1, + title: 'Task', + description: 'Description', + status: 'pending', + dependencies: [], + priority: 'medium', + details: null, + testStrategy: null, + subtasks: [] + } + ] + }); + + generateObjectService.mockResolvedValue({ + mainResult: { + task: null // Malformed: task is null + }, + telemetryData: {} + }); + + await expect( + updateTaskById( + 'tasks/tasks.json', + 1, + 'Update task', + false, + { tag: 'master' }, + 'json' + ) + ).rejects.toThrow('Received invalid task object from AI'); + }); + + test('handles generateObjectService with missing required fields', async () => { + fs.existsSync.mockReturnValue(true); + readJSON.mockReturnValue({ + tag: 'master', + tasks: [ + { + id: 1, + title: 'Task', + description: 'Description', + status: 'pending', + dependencies: [], + priority: 'medium', + details: null, + testStrategy: null, + subtasks: [] + } + ] + }); + + generateObjectService.mockResolvedValue({ + mainResult: { + task: { + id: 1, + // Missing title and description + status: 'pending', + dependencies: [], + priority: 'medium' + } + }, + telemetryData: {} + }); + + await expect( + updateTaskById( + 'tasks/tasks.json', + 1, + 'Update task', + false, + { tag: 'master' }, + 'json' + ) + ).rejects.toThrow('Updated task missing required fields'); + }); +}); diff --git a/tests/unit/scripts/modules/task-manager/update-tasks.test.js b/tests/unit/scripts/modules/task-manager/update-tasks.test.js index a3e7fa7e..1cc241ec 100644 --- a/tests/unit/scripts/modules/task-manager/update-tasks.test.js +++ b/tests/unit/scripts/modules/task-manager/update-tasks.test.js @@ -30,6 +30,12 @@ jest.unstable_mockModule( generateTextService: jest.fn().mockResolvedValue({ mainResult: '[]', // mainResult is the text string directly telemetryData: {} + }), + generateObjectService: jest.fn().mockResolvedValue({ + mainResult: { + tasks: [] // generateObject returns structured data + }, + telemetryData: {} }) }) ); @@ -84,7 +90,7 @@ const { readJSON, writeJSON, log } = await import( '../../../../../scripts/modules/utils.js' ); -const { generateTextService } = await import( +const { generateObjectService } = await import( '../../../../../scripts/modules/ai-services-unified.js' ); @@ -154,7 +160,9 @@ describe('updateTasks', () => { ]; const mockApiResponse = { - mainResult: JSON.stringify(mockUpdatedTasks), // mainResult is the JSON string directly + mainResult: { + tasks: mockUpdatedTasks // generateObject returns structured data + }, telemetryData: {} }; @@ -164,7 +172,7 @@ describe('updateTasks', () => { tag: 'master', _rawTaggedData: mockInitialTasks }); - generateTextService.mockResolvedValue(mockApiResponse); + generateObjectService.mockResolvedValue(mockApiResponse); // Act const result = await updateTasks( @@ -185,7 +193,7 @@ describe('updateTasks', () => { ); // 2. AI Service called with correct args - expect(generateTextService).toHaveBeenCalledWith(expect.any(Object)); + expect(generateObjectService).toHaveBeenCalledWith(expect.any(Object)); // 3. Write JSON called with correctly merged tasks expect(writeJSON).toHaveBeenCalledWith( @@ -252,7 +260,7 @@ describe('updateTasks', () => { '/mock/path', 'master' ); - expect(generateTextService).not.toHaveBeenCalled(); + expect(generateObjectService).not.toHaveBeenCalled(); expect(writeJSON).not.toHaveBeenCalled(); expect(log).toHaveBeenCalledWith( 'info', @@ -327,8 +335,10 @@ describe('updateTasks', () => { _rawTaggedData: mockTaggedData }); - generateTextService.mockResolvedValue({ - mainResult: JSON.stringify(mockUpdatedTasks), + generateObjectService.mockResolvedValue({ + mainResult: { + tasks: mockUpdatedTasks + }, telemetryData: { commandName: 'update-tasks', totalCost: 0.05 } }); diff --git a/tsconfig.json b/tsconfig.json index 58a2d25b..9145ac12 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,13 @@ "@tm/cli": ["./apps/cli/src/index.ts"], "@tm/cli/*": ["./apps/cli/src/*"], "@tm/build-config": ["./packages/build-config/src/index.ts"], - "@tm/build-config/*": ["./packages/build-config/src/*"] + "@tm/build-config/*": ["./packages/build-config/src/*"], + "@tm/ai-sdk-provider-grok-cli": [ + "./packages/ai-sdk-provider-grok-cli/src/index.ts" + ], + "@tm/ai-sdk-provider-grok-cli/*": [ + "./packages/ai-sdk-provider-grok-cli/src/*" + ] } }, "tsx": { diff --git a/tsdown.config.ts b/tsdown.config.ts index b2780d60..24a1aef5 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -1,8 +1,10 @@ import { defineConfig } from 'tsdown'; import { baseConfig, mergeConfig } from '@tm/build-config'; -import { load as dotenvLoad } from 'dotenv-mono'; +import { config } from 'dotenv'; +import { resolve } from 'path'; -dotenvLoad(); +// Load .env file explicitly with absolute path +config({ path: resolve(process.cwd(), '.env') }); // Get all TM_PUBLIC_* env variables for build-time injection const getBuildTimeEnvs = () => { @@ -21,10 +23,10 @@ const getBuildTimeEnvs = () => { for (const [key, value] of Object.entries(process.env)) { if (key.startsWith('TM_PUBLIC_')) { - // Return the actual value, not JSON.stringify'd envs[key] = value || ''; } } + return envs; }; diff --git a/turbo.json b/turbo.json index 50523359..c7581286 100644 --- a/turbo.json +++ b/turbo.json @@ -5,7 +5,8 @@ "build": { "dependsOn": ["^build"], "outputs": ["dist/**"], - "outputLogs": "new-only" + "outputLogs": "new-only", + "env": ["NODE_ENV", "TM_PUBLIC_*"] }, "dev": { "cache": false,