├── .prettierignore ├── .prettierrc ├── renovate.json ├── .changeset ├── config.json └── README.md ├── CHANGELOG.md ├── tsconfig.json ├── .gitignore ├── LICENSE ├── src ├── types.ts ├── schema.ts └── index.ts ├── package.json ├── README.md └── pnpm-lock.yaml /.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "printWidth": 70, 6 | "proseWrap": "always" 7 | } -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.5/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # mcp-sequentialthinking-tools 2 | 3 | ## 0.0.4 4 | 5 | ### Patch Changes 6 | 7 | - f4068ba: swap mcp/sdk with tmcp 8 | 9 | ## 0.0.3 10 | 11 | ### Patch Changes 12 | 13 | - d340e94: manage memory, list available tools 14 | 15 | ## 0.0.2 16 | 17 | ### Patch Changes 18 | 19 | - add glama badge 20 | 21 | ## 0.0.1 22 | 23 | ### Patch Changes 24 | 25 | - init 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "ES2020", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "strict": true, 8 | "outDir": "dist", 9 | "rootDir": "src", 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "resolveJsonModule": true 13 | }, 14 | "include": ["src/**/*"], 15 | "exclude": ["node_modules", "dist"] 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | node_modules/ 3 | .pnpm-store/ 4 | 5 | # Build output 6 | dist/ 7 | build/ 8 | 9 | # Environment variables 10 | .env 11 | .env.local 12 | .env.*.local 13 | 14 | # IDE 15 | .vscode/ 16 | .idea/ 17 | *.swp 18 | *.swo 19 | 20 | # Logs 21 | *.log 22 | npm-debug.log* 23 | pnpm-debug.log* 24 | 25 | # Testing 26 | coverage/ 27 | 28 | # Database files 29 | *.db 30 | *.db-journal 31 | 32 | # OS 33 | .DS_Store 34 | Thumbs.db -------------------------------------------------------------------------------- /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Scott Spence 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface ToolRecommendation { 3 | tool_name: string; 4 | confidence: number; // 0-1 indicating how confident we are this tool is appropriate 5 | rationale: string; // Why this tool is recommended 6 | priority: number; // Order in the recommendation sequence 7 | suggested_inputs?: Record; // Optional suggested parameters 8 | alternatives?: string[]; // Alternative tools that could be used 9 | } 10 | 11 | export interface StepRecommendation { 12 | step_description: string; // What needs to be done 13 | recommended_tools: ToolRecommendation[]; // Tools recommended for this step 14 | expected_outcome: string; // What to expect from this step 15 | next_step_conditions?: string[]; // Conditions to consider for the next step 16 | } 17 | 18 | export interface ThoughtData { 19 | available_mcp_tools: string[]; // Array of MCP tool names available for use 20 | thought: string; 21 | thought_number: number; 22 | total_thoughts: number; 23 | is_revision?: boolean; 24 | revises_thought?: number; 25 | branch_from_thought?: number; 26 | branch_id?: string; 27 | needs_more_thoughts?: boolean; 28 | next_thought_needed: boolean; 29 | 30 | // Recommendation-related fields 31 | current_step?: StepRecommendation; // Current step being considered 32 | previous_steps?: StepRecommendation[]; // Steps already recommended 33 | remaining_steps?: string[]; // High-level descriptions of upcoming steps 34 | } 35 | 36 | export interface Tool { 37 | name: string; 38 | description: string; 39 | inputSchema: Record; 40 | } 41 | 42 | export interface ServerConfig { 43 | available_tools: Map; 44 | } 45 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mcp-sequentialthinking-tools", 3 | "version": "0.0.4", 4 | "description": "MCP server for Sequential Thinking Tools", 5 | "type": "module", 6 | "main": "dist/index.js", 7 | "types": "dist/index.d.ts", 8 | "bin": { 9 | "mcp-sequentialthinking-tools": "./dist/index.js" 10 | }, 11 | "files": [ 12 | "dist", 13 | "README.md", 14 | "LICENSE" 15 | ], 16 | "scripts": { 17 | "build": "tsc && chmod +x dist/index.js", 18 | "start": "node dist/index.js", 19 | "dev": "npx @modelcontextprotocol/inspector dist/index.js", 20 | "changeset": "changeset", 21 | "version": "changeset version", 22 | "release": "pnpm run build && changeset publish" 23 | }, 24 | "keywords": [ 25 | "mcp", 26 | "model-context-protocol", 27 | "sequential-thinking", 28 | "problem-solving", 29 | "tool-recommendation", 30 | "decision-making", 31 | "thought-process", 32 | "step-by-step", 33 | "llm", 34 | "ai", 35 | "branching-thoughts", 36 | "thought-revision", 37 | "tool-analysis", 38 | "problem-breakdown", 39 | "solution-planning", 40 | "adaptive-thinking", 41 | "reflective-analysis", 42 | "tool-confidence" 43 | ], 44 | "author": "Scott Spence", 45 | "license": "MIT", 46 | "repository": { 47 | "type": "git", 48 | "url": "https://github.com/spences10/mcp-sequentialthinking-tools.git" 49 | }, 50 | "bugs": { 51 | "url": "https://github.com/spences10/mcp-sequentialthinking-tools/issues" 52 | }, 53 | "homepage": "https://github.com/spences10/mcp-sequentialthinking-tools#readme", 54 | "dependencies": { 55 | "@tmcp/adapter-valibot": "^0.1.5", 56 | "@tmcp/transport-stdio": "^0.4.1", 57 | "chalk": "^5.6.2", 58 | "tmcp": "^1.19.0", 59 | "valibot": "^1.2.0" 60 | }, 61 | "devDependencies": { 62 | "@changesets/cli": "^2.29.8", 63 | "@types/node": "^25.0.2", 64 | "typescript": "^5.9.3" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/schema.ts: -------------------------------------------------------------------------------- 1 | import * as v from 'valibot'; 2 | import { Tool } from './types.js'; 3 | 4 | const TOOL_DESCRIPTION = `A detailed tool for dynamic and reflective problem-solving through thoughts. 5 | This tool helps analyze problems through a flexible thinking process that can adapt and evolve. 6 | Each thought can build on, question, or revise previous insights as understanding deepens. 7 | 8 | IMPORTANT: This server facilitates sequential thinking with MCP tool coordination. The LLM analyzes available tools and their descriptions to make intelligent recommendations, which are then tracked and organized by this server. 9 | 10 | When to use this tool: 11 | - Breaking down complex problems into steps 12 | - Planning and design with room for revision 13 | - Analysis that might need course correction 14 | - Problems where the full scope might not be clear initially 15 | - Problems that require a multi-step solution 16 | - Tasks that need to maintain context over multiple steps 17 | - Situations where irrelevant information needs to be filtered out 18 | - When you need guidance on which tools to use and in what order 19 | 20 | Key features: 21 | - You can adjust total_thoughts up or down as you progress 22 | - You can question or revise previous thoughts 23 | - You can add more thoughts even after reaching what seemed like the end 24 | - You can express uncertainty and explore alternative approaches 25 | - Not every thought needs to build linearly - you can branch or backtrack 26 | - Generates a solution hypothesis 27 | - Verifies the hypothesis based on the Chain of Thought steps 28 | - Recommends appropriate tools for each step 29 | - Provides rationale for tool recommendations 30 | - Suggests tool execution order and parameters 31 | - Tracks previous recommendations and remaining steps 32 | 33 | Parameters explained: 34 | - available_mcp_tools: Array of MCP tool names that are available for use (e.g., ["mcp-omnisearch", "mcp-turso-cloud"]) 35 | - thought: Your current thinking step, which can include: 36 | * Regular analytical steps 37 | * Revisions of previous thoughts 38 | * Questions about previous decisions 39 | * Realizations about needing more analysis 40 | * Changes in approach 41 | * Hypothesis generation 42 | * Hypothesis verification 43 | * Tool recommendations and rationale 44 | - next_thought_needed: True if you need more thinking, even if at what seemed like the end 45 | - thought_number: Current number in sequence (can go beyond initial total if needed) 46 | - total_thoughts: Current estimate of thoughts needed (can be adjusted up/down) 47 | - is_revision: A boolean indicating if this thought revises previous thinking 48 | - revises_thought: If is_revision is true, which thought number is being reconsidered 49 | - branch_from_thought: If branching, which thought number is the branching point 50 | - branch_id: Identifier for the current branch (if any) 51 | - needs_more_thoughts: If reaching end but realizing more thoughts needed 52 | - current_step: Current step recommendation, including: 53 | * step_description: What needs to be done 54 | * recommended_tools: Tools recommended for this step 55 | * expected_outcome: What to expect from this step 56 | * next_step_conditions: Conditions to consider for the next step 57 | - previous_steps: Steps already recommended 58 | - remaining_steps: High-level descriptions of upcoming steps 59 | 60 | You should: 61 | 1. Start with an initial estimate of needed thoughts, but be ready to adjust 62 | 2. Feel free to question or revise previous thoughts 63 | 3. Don't hesitate to add more thoughts if needed, even at the "end" 64 | 4. Express uncertainty when present 65 | 5. Mark thoughts that revise previous thinking or branch into new paths 66 | 6. Ignore information that is irrelevant to the current step 67 | 7. Generate a solution hypothesis when appropriate 68 | 8. Verify the hypothesis based on the Chain of Thought steps 69 | 9. Consider available tools that could help with the current step 70 | 10. Provide clear rationale for tool recommendations 71 | 11. Suggest specific tool parameters when appropriate 72 | 12. Consider alternative tools for each step 73 | 13. Track progress through the recommended steps 74 | 14. Provide a single, ideally correct answer as the final output 75 | 15. Only set next_thought_needed to false when truly done and a satisfactory answer is reached`; 76 | 77 | export const ToolRecommendationSchema = v.object({ 78 | tool_name: v.pipe( 79 | v.string(), 80 | v.description('Name of the tool being recommended') 81 | ), 82 | confidence: v.pipe( 83 | v.number(), 84 | v.minValue(0), 85 | v.maxValue(1), 86 | v.description('0-1 indicating confidence in recommendation') 87 | ), 88 | rationale: v.pipe( 89 | v.string(), 90 | v.description('Why this tool is recommended') 91 | ), 92 | priority: v.pipe( 93 | v.number(), 94 | v.description('Order in the recommendation sequence') 95 | ), 96 | suggested_inputs: v.optional(v.pipe( 97 | v.record(v.string(), v.unknown()), 98 | v.description('Optional suggested parameters') 99 | )), 100 | alternatives: v.optional(v.pipe( 101 | v.array(v.string()), 102 | v.description('Alternative tools that could be used') 103 | )) 104 | }); 105 | 106 | export const StepRecommendationSchema = v.object({ 107 | step_description: v.pipe( 108 | v.string(), 109 | v.description('What needs to be done') 110 | ), 111 | recommended_tools: v.pipe( 112 | v.array(ToolRecommendationSchema), 113 | v.description('Tools recommended for this step') 114 | ), 115 | expected_outcome: v.pipe( 116 | v.string(), 117 | v.description('What to expect from this step') 118 | ), 119 | next_step_conditions: v.optional(v.pipe( 120 | v.array(v.string()), 121 | v.description('Conditions to consider for the next step') 122 | )) 123 | }); 124 | 125 | export const SequentialThinkingSchema = v.object({ 126 | available_mcp_tools: v.pipe( 127 | v.array(v.string()), 128 | v.description('Array of MCP tool names available for use (e.g., ["mcp-omnisearch", "mcp-turso-cloud"])') 129 | ), 130 | thought: v.pipe( 131 | v.string(), 132 | v.description('Your current thinking step') 133 | ), 134 | next_thought_needed: v.pipe( 135 | v.boolean(), 136 | v.description('Whether another thought step is needed') 137 | ), 138 | thought_number: v.pipe( 139 | v.number(), 140 | v.minValue(1), 141 | v.description('Current thought number') 142 | ), 143 | total_thoughts: v.pipe( 144 | v.number(), 145 | v.minValue(1), 146 | v.description('Estimated total thoughts needed') 147 | ), 148 | is_revision: v.optional(v.pipe( 149 | v.boolean(), 150 | v.description('Whether this revises previous thinking') 151 | )), 152 | revises_thought: v.optional(v.pipe( 153 | v.number(), 154 | v.minValue(1), 155 | v.description('Which thought is being reconsidered') 156 | )), 157 | branch_from_thought: v.optional(v.pipe( 158 | v.number(), 159 | v.minValue(1), 160 | v.description('Branching point thought number') 161 | )), 162 | branch_id: v.optional(v.pipe( 163 | v.string(), 164 | v.description('Branch identifier') 165 | )), 166 | needs_more_thoughts: v.optional(v.pipe( 167 | v.boolean(), 168 | v.description('If more thoughts are needed') 169 | )), 170 | current_step: v.optional(v.pipe( 171 | StepRecommendationSchema, 172 | v.description('Current step recommendation') 173 | )), 174 | previous_steps: v.optional(v.pipe( 175 | v.array(StepRecommendationSchema), 176 | v.description('Steps already recommended') 177 | )), 178 | remaining_steps: v.optional(v.pipe( 179 | v.array(v.string()), 180 | v.description('High-level descriptions of upcoming steps') 181 | )) 182 | }); 183 | 184 | export const SEQUENTIAL_THINKING_TOOL: Tool = { 185 | name: 'sequentialthinking_tools', 186 | description: TOOL_DESCRIPTION, 187 | inputSchema: {} // This will be handled by tmcp with the schema above 188 | }; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # mcp-sequentialthinking-tools 2 | 3 | An adaptation of the 4 | [MCP Sequential Thinking Server](https://github.com/modelcontextprotocol/servers/blob/main/src/sequentialthinking/index.ts) 5 | designed to guide tool usage in problem-solving. This server helps 6 | break down complex problems into manageable steps and provides 7 | recommendations for which MCP tools would be most effective at each 8 | stage. 9 | 10 | 11 | 12 | 13 | 14 | A Model Context Protocol (MCP) server that combines sequential 15 | thinking with intelligent tool suggestions. For each step in the 16 | problem-solving process, it provides confidence-scored recommendations 17 | for which tools to use, along with rationale for why each tool would 18 | be appropriate. 19 | 20 | ## Features 21 | 22 | - 🤔 Dynamic and reflective problem-solving through sequential 23 | thoughts 24 | - 🔄 Flexible thinking process that adapts and evolves 25 | - 🌳 Support for branching and revision of thoughts 26 | - 🛠️ LLM-driven intelligent tool recommendations for each step 27 | - 📊 Confidence scoring for tool suggestions 28 | - 🔍 Detailed rationale for tool recommendations 29 | - 📝 Step tracking with expected outcomes 30 | - 🔄 Progress monitoring with previous and remaining steps 31 | - 🎯 Alternative tool suggestions for each step 32 | - 🧠 Memory management with configurable history limits 33 | - 🗑️ Manual history cleanup capabilities 34 | 35 | ## How It Works 36 | 37 | This server facilitates sequential thinking with MCP tool coordination. The LLM analyzes available tools and their descriptions to make intelligent recommendations, which are then tracked and organized by this server. 38 | 39 | The workflow: 40 | 1. LLM provides available MCP tools to the sequential thinking server 41 | 2. LLM analyzes each thought step and recommends appropriate tools 42 | 3. Server tracks recommendations, maintains context, and manages memory 43 | 4. LLM executes recommended tools and continues the thinking process 44 | 45 | Each recommendation includes: 46 | - A confidence score (0-1) indicating how well the tool matches the need 47 | - A clear rationale explaining why the tool would be helpful 48 | - A priority level to suggest tool execution order 49 | - Suggested input parameters for the tool 50 | - Alternative tools that could also be used 51 | 52 | The server works with any MCP tools available in your environment and automatically manages memory to prevent unbounded growth. 53 | 54 | ## Example Usage 55 | 56 | Here's an example of how the server guides tool usage: 57 | 58 | ```json 59 | { 60 | "thought": "Initial research step to understand what universal reactivity means in Svelte 5", 61 | "current_step": { 62 | "step_description": "Gather initial information about Svelte 5's universal reactivity", 63 | "expected_outcome": "Clear understanding of universal reactivity concept", 64 | "recommended_tools": [ 65 | { 66 | "tool_name": "search_docs", 67 | "confidence": 0.9, 68 | "rationale": "Search Svelte documentation for official information", 69 | "priority": 1 70 | }, 71 | { 72 | "tool_name": "tavily_search", 73 | "confidence": 0.8, 74 | "rationale": "Get additional context from reliable sources", 75 | "priority": 2 76 | } 77 | ], 78 | "next_step_conditions": [ 79 | "Verify information accuracy", 80 | "Look for implementation details" 81 | ] 82 | }, 83 | "thought_number": 1, 84 | "total_thoughts": 5, 85 | "next_thought_needed": true 86 | } 87 | ``` 88 | 89 | The server tracks your progress and supports: 90 | 91 | - Creating branches to explore different approaches 92 | - Revising previous thoughts with new information 93 | - Maintaining context across multiple steps 94 | - Suggesting next steps based on current findings 95 | 96 | ## Configuration 97 | 98 | This server requires configuration through your MCP client. Here are 99 | examples for different environments: 100 | 101 | ### Cline Configuration 102 | 103 | Add this to your Cline MCP settings: 104 | 105 | ```json 106 | { 107 | "mcpServers": { 108 | "mcp-sequentialthinking-tools": { 109 | "command": "npx", 110 | "args": ["-y", "mcp-sequentialthinking-tools"], 111 | "env": { 112 | "MAX_HISTORY_SIZE": "1000" 113 | } 114 | } 115 | } 116 | } 117 | ``` 118 | 119 | ### Claude Desktop with WSL Configuration 120 | 121 | For WSL environments, add this to your Claude Desktop configuration: 122 | 123 | ```json 124 | { 125 | "mcpServers": { 126 | "mcp-sequentialthinking-tools": { 127 | "command": "wsl.exe", 128 | "args": [ 129 | "bash", 130 | "-c", 131 | "MAX_HISTORY_SIZE=1000 source ~/.nvm/nvm.sh && /home/username/.nvm/versions/node/v20.12.1/bin/npx mcp-sequentialthinking-tools" 132 | ] 133 | } 134 | } 135 | } 136 | ``` 137 | 138 | ## API 139 | 140 | The server implements a single MCP tool with configurable parameters: 141 | 142 | ### sequentialthinking_tools 143 | 144 | A tool for dynamic and reflective problem-solving through thoughts, 145 | with intelligent tool recommendations. 146 | 147 | Parameters: 148 | 149 | - `available_mcp_tools` (array, required): Array of MCP tool names available for use (e.g., ["mcp-omnisearch", "mcp-turso-cloud"]) 150 | - `thought` (string, required): Your current thinking step 151 | - `next_thought_needed` (boolean, required): Whether another thought 152 | step is needed 153 | - `thought_number` (integer, required): Current thought number 154 | - `total_thoughts` (integer, required): Estimated total thoughts 155 | needed 156 | - `is_revision` (boolean, optional): Whether this revises previous 157 | thinking 158 | - `revises_thought` (integer, optional): Which thought is being 159 | reconsidered 160 | - `branch_from_thought` (integer, optional): Branching point thought 161 | number 162 | - `branch_id` (string, optional): Branch identifier 163 | - `needs_more_thoughts` (boolean, optional): If more thoughts are 164 | needed 165 | - `current_step` (object, optional): Current step recommendation with: 166 | - `step_description`: What needs to be done 167 | - `recommended_tools`: Array of tool recommendations with confidence 168 | scores 169 | - `expected_outcome`: What to expect from this step 170 | - `next_step_conditions`: Conditions for next step 171 | - `previous_steps` (array, optional): Steps already recommended 172 | - `remaining_steps` (array, optional): High-level descriptions of 173 | upcoming steps 174 | 175 | ## Memory Management 176 | 177 | The server includes built-in memory management to prevent unbounded growth: 178 | 179 | - **History Limit**: Configurable maximum number of thoughts to retain (default: 1000) 180 | - **Automatic Trimming**: History automatically trims when limit is exceeded 181 | - **Manual Cleanup**: Server provides methods to clear history when needed 182 | 183 | ### Configuring History Size 184 | 185 | You can configure the history size by setting the `MAX_HISTORY_SIZE` environment variable: 186 | 187 | ```json 188 | { 189 | "mcpServers": { 190 | "mcp-sequentialthinking-tools": { 191 | "command": "npx", 192 | "args": ["-y", "mcp-sequentialthinking-tools"], 193 | "env": { 194 | "MAX_HISTORY_SIZE": "500" 195 | } 196 | } 197 | } 198 | } 199 | ``` 200 | 201 | Or for local development: 202 | ```bash 203 | MAX_HISTORY_SIZE=2000 npx mcp-sequentialthinking-tools 204 | ``` 205 | 206 | ## Development 207 | 208 | ### Setup 209 | 210 | 1. Clone the repository 211 | 2. Install dependencies: 212 | 213 | ```bash 214 | pnpm install 215 | ``` 216 | 217 | 3. Build the project: 218 | 219 | ```bash 220 | pnpm build 221 | ``` 222 | 223 | 4. Run in development mode: 224 | 225 | ```bash 226 | pnpm dev 227 | ``` 228 | 229 | ### Publishing 230 | 231 | The project uses changesets for version management. To publish: 232 | 233 | 1. Create a changeset: 234 | 235 | ```bash 236 | pnpm changeset 237 | ``` 238 | 239 | 2. Version the package: 240 | 241 | ```bash 242 | pnpm changeset version 243 | ``` 244 | 245 | 3. Publish to npm: 246 | 247 | ```bash 248 | pnpm release 249 | ``` 250 | 251 | ## Contributing 252 | 253 | Contributions are welcome! Please feel free to submit a Pull Request. 254 | 255 | ## License 256 | 257 | MIT License - see the [LICENSE](LICENSE) file for details. 258 | 259 | ## Acknowledgments 260 | 261 | - Built on the 262 | [Model Context Protocol](https://github.com/modelcontextprotocol) 263 | - Adapted from the 264 | [MCP Sequential Thinking Server](https://github.com/modelcontextprotocol/servers/blob/main/src/sequentialthinking/index.ts) 265 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // adapted from https://github.com/modelcontextprotocol/servers/blob/main/src/sequentialthinking/index.ts 4 | // for use with mcp tools 5 | 6 | import { McpServer } from 'tmcp'; 7 | import { ValibotJsonSchemaAdapter } from '@tmcp/adapter-valibot'; 8 | import { StdioTransport } from '@tmcp/transport-stdio'; 9 | import * as v from 'valibot'; 10 | import chalk from 'chalk'; 11 | import { readFileSync } from 'node:fs'; 12 | import { dirname, join } from 'node:path'; 13 | import { fileURLToPath } from 'node:url'; 14 | import { SequentialThinkingSchema, SEQUENTIAL_THINKING_TOOL } from './schema.js'; 15 | import { ThoughtData, ToolRecommendation, StepRecommendation, Tool } from './types.js'; 16 | 17 | // Get version from package.json 18 | const __filename = fileURLToPath(import.meta.url); 19 | const __dirname = dirname(__filename); 20 | const package_json = JSON.parse( 21 | readFileSync(join(__dirname, '../package.json'), 'utf-8'), 22 | ); 23 | const { name, version } = package_json; 24 | 25 | // Create MCP server with tmcp 26 | const adapter = new ValibotJsonSchemaAdapter(); 27 | const server = new McpServer( 28 | { 29 | name, 30 | version, 31 | description: 'MCP server for Sequential Thinking Tools', 32 | }, 33 | { 34 | adapter, 35 | capabilities: { 36 | tools: { listChanged: true }, 37 | }, 38 | }, 39 | ); 40 | 41 | interface ServerOptions { 42 | available_tools?: Tool[]; 43 | maxHistorySize?: number; 44 | } 45 | 46 | class ToolAwareSequentialThinkingServer { 47 | private thought_history: ThoughtData[] = []; 48 | private branches: Record = {}; 49 | private available_tools: Map = new Map(); 50 | private maxHistorySize: number; 51 | 52 | public getAvailableTools(): Tool[] { 53 | return Array.from(this.available_tools.values()); 54 | } 55 | 56 | constructor(options: ServerOptions = {}) { 57 | this.maxHistorySize = options.maxHistorySize || 1000; 58 | 59 | // Always include the sequential thinking tool 60 | const tools = [ 61 | SEQUENTIAL_THINKING_TOOL, 62 | ...(options.available_tools || []), 63 | ]; 64 | 65 | // Initialize with provided tools 66 | tools.forEach((tool) => { 67 | if (this.available_tools.has(tool.name)) { 68 | console.error( 69 | `Warning: Duplicate tool name '${tool.name}' - using first occurrence`, 70 | ); 71 | return; 72 | } 73 | this.available_tools.set(tool.name, tool); 74 | }); 75 | 76 | console.error( 77 | 'Available tools:', 78 | Array.from(this.available_tools.keys()), 79 | ); 80 | } 81 | 82 | public clearHistory(): void { 83 | this.thought_history = []; 84 | this.branches = {}; 85 | console.error('History cleared'); 86 | } 87 | 88 | public addTool(tool: Tool): void { 89 | if (this.available_tools.has(tool.name)) { 90 | console.error(`Warning: Tool '${tool.name}' already exists`); 91 | return; 92 | } 93 | this.available_tools.set(tool.name, tool); 94 | console.error(`Added tool: ${tool.name}`); 95 | } 96 | 97 | public discoverTools(): void { 98 | // In a real implementation, this would scan the environment 99 | // for available MCP tools and add them to available_tools 100 | console.error('Tool discovery not implemented - manually add tools via addTool()'); 101 | } 102 | 103 | private formatRecommendation(step: StepRecommendation): string { 104 | const tools = step.recommended_tools 105 | .map((tool) => { 106 | const alternatives = tool.alternatives?.length 107 | ? ` (alternatives: ${tool.alternatives.join(', ')})` 108 | : ''; 109 | const inputs = tool.suggested_inputs 110 | ? `\n Suggested inputs: ${JSON.stringify(tool.suggested_inputs)}` 111 | : ''; 112 | return ` - ${tool.tool_name} (priority: ${tool.priority})${alternatives} 113 | Rationale: ${tool.rationale}${inputs}`; 114 | }) 115 | .join('\n'); 116 | 117 | return `Step: ${step.step_description} 118 | Recommended Tools: 119 | ${tools} 120 | Expected Outcome: ${step.expected_outcome}${ 121 | step.next_step_conditions 122 | ? `\nConditions for next step:\n - ${step.next_step_conditions.join('\n - ')}` 123 | : '' 124 | }`; 125 | } 126 | 127 | private formatThought(thoughtData: ThoughtData): string { 128 | const { 129 | thought_number, 130 | total_thoughts, 131 | thought, 132 | is_revision, 133 | revises_thought, 134 | branch_from_thought, 135 | branch_id, 136 | current_step, 137 | } = thoughtData; 138 | 139 | let prefix = ''; 140 | let context = ''; 141 | 142 | if (is_revision) { 143 | prefix = chalk.yellow('🔄 Revision'); 144 | context = ` (revising thought ${revises_thought})`; 145 | } else if (branch_from_thought) { 146 | prefix = chalk.green('🌿 Branch'); 147 | context = ` (from thought ${branch_from_thought}, ID: ${branch_id})`; 148 | } else { 149 | prefix = chalk.blue('💭 Thought'); 150 | context = ''; 151 | } 152 | 153 | const header = `${prefix} ${thought_number}/${total_thoughts}${context}`; 154 | let content = thought; 155 | 156 | // Add recommendation information if present 157 | if (current_step) { 158 | content = `${thought}\n\nRecommendation:\n${this.formatRecommendation(current_step)}`; 159 | } 160 | 161 | const border = '─'.repeat( 162 | Math.max(header.length, content.length) + 4, 163 | ); 164 | 165 | return ` 166 | ┌${border}┐ 167 | │ ${header} │ 168 | ├${border}┤ 169 | │ ${content.padEnd(border.length - 2)} │ 170 | └${border}┘`; 171 | } 172 | 173 | public async processThought(input: v.InferInput) { 174 | try { 175 | // Input is already validated by tmcp with Valibot 176 | const validatedInput = input as ThoughtData; 177 | 178 | if ( 179 | validatedInput.thought_number > validatedInput.total_thoughts 180 | ) { 181 | validatedInput.total_thoughts = validatedInput.thought_number; 182 | } 183 | 184 | // Store the current step in thought history 185 | if (validatedInput.current_step) { 186 | if (!validatedInput.previous_steps) { 187 | validatedInput.previous_steps = []; 188 | } 189 | validatedInput.previous_steps.push(validatedInput.current_step); 190 | } 191 | 192 | this.thought_history.push(validatedInput); 193 | 194 | // Prevent memory leaks by limiting history size 195 | if (this.thought_history.length > this.maxHistorySize) { 196 | this.thought_history = this.thought_history.slice(-this.maxHistorySize); 197 | console.error(`History trimmed to ${this.maxHistorySize} items`); 198 | } 199 | 200 | if ( 201 | validatedInput.branch_from_thought && 202 | validatedInput.branch_id 203 | ) { 204 | if (!this.branches[validatedInput.branch_id]) { 205 | this.branches[validatedInput.branch_id] = []; 206 | } 207 | this.branches[validatedInput.branch_id].push(validatedInput); 208 | } 209 | 210 | const formattedThought = this.formatThought(validatedInput); 211 | console.error(formattedThought); 212 | 213 | return { 214 | content: [ 215 | { 216 | type: 'text' as const, 217 | text: JSON.stringify( 218 | { 219 | thought_number: validatedInput.thought_number, 220 | total_thoughts: validatedInput.total_thoughts, 221 | next_thought_needed: 222 | validatedInput.next_thought_needed, 223 | branches: Object.keys(this.branches), 224 | thought_history_length: this.thought_history.length, 225 | available_mcp_tools: validatedInput.available_mcp_tools, 226 | current_step: validatedInput.current_step, 227 | previous_steps: validatedInput.previous_steps, 228 | remaining_steps: validatedInput.remaining_steps, 229 | }, 230 | null, 231 | 2, 232 | ), 233 | }, 234 | ], 235 | }; 236 | } catch (error) { 237 | return { 238 | content: [ 239 | { 240 | type: 'text' as const, 241 | text: JSON.stringify( 242 | { 243 | error: 244 | error instanceof Error 245 | ? error.message 246 | : String(error), 247 | status: 'failed', 248 | }, 249 | null, 250 | 2, 251 | ), 252 | }, 253 | ], 254 | isError: true, 255 | }; 256 | } 257 | } 258 | 259 | // Tool execution removed - the MCP client handles tool execution 260 | // This server only provides tool recommendations 261 | } 262 | 263 | // Read configuration from environment variables or command line args 264 | const maxHistorySize = parseInt(process.env.MAX_HISTORY_SIZE || '1000'); 265 | 266 | const thinkingServer = new ToolAwareSequentialThinkingServer({ 267 | available_tools: [], // TODO: Add tool discovery mechanism 268 | maxHistorySize, 269 | }); 270 | 271 | // Register the sequential thinking tool 272 | server.tool( 273 | { 274 | name: 'sequentialthinking_tools', 275 | description: SEQUENTIAL_THINKING_TOOL.description, 276 | schema: SequentialThinkingSchema, 277 | }, 278 | async (input) => { 279 | return thinkingServer.processThought(input); 280 | }, 281 | ); 282 | 283 | async function main() { 284 | const transport = new StdioTransport(server); 285 | transport.listen(); 286 | console.error('Sequential Thinking MCP Server running on stdio'); 287 | } 288 | 289 | main().catch((error) => { 290 | console.error('Fatal error running server:', error); 291 | process.exit(1); 292 | }); -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@tmcp/adapter-valibot': 12 | specifier: ^0.1.5 13 | version: 0.1.5(tmcp@1.19.0(typescript@5.9.3))(valibot@1.2.0(typescript@5.9.3)) 14 | '@tmcp/transport-stdio': 15 | specifier: ^0.4.1 16 | version: 0.4.1(tmcp@1.19.0(typescript@5.9.3)) 17 | chalk: 18 | specifier: ^5.6.2 19 | version: 5.6.2 20 | tmcp: 21 | specifier: ^1.19.0 22 | version: 1.19.0(typescript@5.9.3) 23 | valibot: 24 | specifier: ^1.2.0 25 | version: 1.2.0(typescript@5.9.3) 26 | devDependencies: 27 | '@changesets/cli': 28 | specifier: ^2.29.8 29 | version: 2.29.8(@types/node@25.0.2) 30 | '@types/node': 31 | specifier: ^25.0.2 32 | version: 25.0.2 33 | typescript: 34 | specifier: ^5.9.3 35 | version: 5.9.3 36 | 37 | packages: 38 | 39 | '@babel/runtime@7.28.3': 40 | resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} 41 | engines: {node: '>=6.9.0'} 42 | 43 | '@changesets/apply-release-plan@7.0.14': 44 | resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} 45 | 46 | '@changesets/assemble-release-plan@6.0.9': 47 | resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} 48 | 49 | '@changesets/changelog-git@0.2.1': 50 | resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} 51 | 52 | '@changesets/cli@2.29.8': 53 | resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} 54 | hasBin: true 55 | 56 | '@changesets/config@3.1.2': 57 | resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==} 58 | 59 | '@changesets/errors@0.2.0': 60 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 61 | 62 | '@changesets/get-dependents-graph@2.1.3': 63 | resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} 64 | 65 | '@changesets/get-release-plan@4.0.14': 66 | resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} 67 | 68 | '@changesets/get-version-range-type@0.4.0': 69 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 70 | 71 | '@changesets/git@3.0.4': 72 | resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} 73 | 74 | '@changesets/logger@0.1.1': 75 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 76 | 77 | '@changesets/parse@0.4.2': 78 | resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==} 79 | 80 | '@changesets/pre@2.0.2': 81 | resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} 82 | 83 | '@changesets/read@0.6.6': 84 | resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==} 85 | 86 | '@changesets/should-skip-package@0.1.2': 87 | resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} 88 | 89 | '@changesets/types@4.1.0': 90 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 91 | 92 | '@changesets/types@6.1.0': 93 | resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 94 | 95 | '@changesets/write@0.4.0': 96 | resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} 97 | 98 | '@inquirer/external-editor@1.0.3': 99 | resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} 100 | engines: {node: '>=18'} 101 | peerDependencies: 102 | '@types/node': '>=18' 103 | peerDependenciesMeta: 104 | '@types/node': 105 | optional: true 106 | 107 | '@manypkg/find-root@1.1.0': 108 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 109 | 110 | '@manypkg/get-packages@1.1.3': 111 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 112 | 113 | '@nodelib/fs.scandir@2.1.5': 114 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 115 | engines: {node: '>= 8'} 116 | 117 | '@nodelib/fs.stat@2.0.5': 118 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 119 | engines: {node: '>= 8'} 120 | 121 | '@nodelib/fs.walk@1.2.8': 122 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 123 | engines: {node: '>= 8'} 124 | 125 | '@standard-schema/spec@1.0.0': 126 | resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} 127 | 128 | '@tmcp/adapter-valibot@0.1.5': 129 | resolution: {integrity: sha512-9P2wrVYPngemNK0UvPb/opC722/jfd09QxXmme1TRp/wPsl98vpSk/MXt24BCMqBRv4Dvs0xxJH4KHDcjXW52Q==} 130 | peerDependencies: 131 | tmcp: ^1.17.0 132 | valibot: ^1.1.0 133 | 134 | '@tmcp/transport-stdio@0.4.1': 135 | resolution: {integrity: sha512-464x8HNrvjLLtKZsrFWUL13GnBFFtrNoWxnE0rHbcmQSYRqtS8WseWtQCYstj2Vcg9kRlIUVFGDIljGNP4/N4A==} 136 | peerDependencies: 137 | tmcp: ^1.16.3 138 | 139 | '@types/node@12.20.55': 140 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 141 | 142 | '@types/node@25.0.2': 143 | resolution: {integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==} 144 | 145 | '@valibot/to-json-schema@1.3.0': 146 | resolution: {integrity: sha512-82Vv6x7sOYhv5YmTRgSppSqj1nn2pMCk5BqCMGWYp0V/fq+qirrbGncqZAtZ09/lrO40ne/7z8ejwE728aVreg==} 147 | peerDependencies: 148 | valibot: ^1.1.0 149 | 150 | ansi-colors@4.1.3: 151 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 152 | engines: {node: '>=6'} 153 | 154 | ansi-regex@5.0.1: 155 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 156 | engines: {node: '>=8'} 157 | 158 | argparse@1.0.10: 159 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 160 | 161 | argparse@2.0.1: 162 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 163 | 164 | array-union@2.1.0: 165 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 166 | engines: {node: '>=8'} 167 | 168 | better-path-resolve@1.0.0: 169 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 170 | engines: {node: '>=4'} 171 | 172 | braces@3.0.3: 173 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 174 | engines: {node: '>=8'} 175 | 176 | chalk@5.6.2: 177 | resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 178 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 179 | 180 | chardet@2.1.1: 181 | resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} 182 | 183 | ci-info@3.9.0: 184 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 185 | engines: {node: '>=8'} 186 | 187 | cross-spawn@7.0.6: 188 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 189 | engines: {node: '>= 8'} 190 | 191 | detect-indent@6.1.0: 192 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 193 | engines: {node: '>=8'} 194 | 195 | dir-glob@3.0.1: 196 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 197 | engines: {node: '>=8'} 198 | 199 | enquirer@2.4.1: 200 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 201 | engines: {node: '>=8.6'} 202 | 203 | esprima@4.0.1: 204 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 205 | engines: {node: '>=4'} 206 | hasBin: true 207 | 208 | extendable-error@0.1.7: 209 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 210 | 211 | fast-glob@3.3.3: 212 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 213 | engines: {node: '>=8.6.0'} 214 | 215 | fastq@1.19.1: 216 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 217 | 218 | fill-range@7.1.1: 219 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 220 | engines: {node: '>=8'} 221 | 222 | find-up@4.1.0: 223 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 224 | engines: {node: '>=8'} 225 | 226 | fs-extra@7.0.1: 227 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 228 | engines: {node: '>=6 <7 || >=8'} 229 | 230 | fs-extra@8.1.0: 231 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 232 | engines: {node: '>=6 <7 || >=8'} 233 | 234 | glob-parent@5.1.2: 235 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 236 | engines: {node: '>= 6'} 237 | 238 | globby@11.1.0: 239 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 240 | engines: {node: '>=10'} 241 | 242 | graceful-fs@4.2.11: 243 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 244 | 245 | human-id@4.1.1: 246 | resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 247 | hasBin: true 248 | 249 | iconv-lite@0.7.0: 250 | resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} 251 | engines: {node: '>=0.10.0'} 252 | 253 | ignore@5.3.2: 254 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 255 | engines: {node: '>= 4'} 256 | 257 | is-extglob@2.1.1: 258 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 259 | engines: {node: '>=0.10.0'} 260 | 261 | is-glob@4.0.3: 262 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 263 | engines: {node: '>=0.10.0'} 264 | 265 | is-number@7.0.0: 266 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 267 | engines: {node: '>=0.12.0'} 268 | 269 | is-subdir@1.2.0: 270 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 271 | engines: {node: '>=4'} 272 | 273 | is-windows@1.0.2: 274 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 275 | engines: {node: '>=0.10.0'} 276 | 277 | isexe@2.0.0: 278 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 279 | 280 | js-yaml@3.14.1: 281 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 282 | hasBin: true 283 | 284 | js-yaml@4.1.1: 285 | resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 286 | hasBin: true 287 | 288 | json-rpc-2.0@1.7.1: 289 | resolution: {integrity: sha512-JqZjhjAanbpkXIzFE7u8mE/iFblawwlXtONaCvRqI+pyABVz7B4M1EUNpyVW+dZjqgQ2L5HFmZCmOCgUKm00hg==} 290 | 291 | jsonfile@4.0.0: 292 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 293 | 294 | locate-path@5.0.0: 295 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 296 | engines: {node: '>=8'} 297 | 298 | lodash.startcase@4.4.0: 299 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 300 | 301 | merge2@1.4.1: 302 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 303 | engines: {node: '>= 8'} 304 | 305 | micromatch@4.0.8: 306 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 307 | engines: {node: '>=8.6'} 308 | 309 | mri@1.2.0: 310 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 311 | engines: {node: '>=4'} 312 | 313 | outdent@0.5.0: 314 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 315 | 316 | p-filter@2.1.0: 317 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 318 | engines: {node: '>=8'} 319 | 320 | p-limit@2.3.0: 321 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 322 | engines: {node: '>=6'} 323 | 324 | p-locate@4.1.0: 325 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 326 | engines: {node: '>=8'} 327 | 328 | p-map@2.1.0: 329 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 330 | engines: {node: '>=6'} 331 | 332 | p-try@2.2.0: 333 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 334 | engines: {node: '>=6'} 335 | 336 | package-manager-detector@0.2.11: 337 | resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} 338 | 339 | path-exists@4.0.0: 340 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 341 | engines: {node: '>=8'} 342 | 343 | path-key@3.1.1: 344 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 345 | engines: {node: '>=8'} 346 | 347 | path-type@4.0.0: 348 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 349 | engines: {node: '>=8'} 350 | 351 | picocolors@1.1.1: 352 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 353 | 354 | picomatch@2.3.1: 355 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 356 | engines: {node: '>=8.6'} 357 | 358 | pify@4.0.1: 359 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 360 | engines: {node: '>=6'} 361 | 362 | prettier@2.8.8: 363 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 364 | engines: {node: '>=10.13.0'} 365 | hasBin: true 366 | 367 | quansync@0.2.11: 368 | resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} 369 | 370 | queue-microtask@1.2.3: 371 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 372 | 373 | read-yaml-file@1.1.0: 374 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 375 | engines: {node: '>=6'} 376 | 377 | resolve-from@5.0.0: 378 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 379 | engines: {node: '>=8'} 380 | 381 | reusify@1.1.0: 382 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 383 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 384 | 385 | run-parallel@1.2.0: 386 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 387 | 388 | safer-buffer@2.1.2: 389 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 390 | 391 | semver@7.7.2: 392 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 393 | engines: {node: '>=10'} 394 | hasBin: true 395 | 396 | shebang-command@2.0.0: 397 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 398 | engines: {node: '>=8'} 399 | 400 | shebang-regex@3.0.0: 401 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 402 | engines: {node: '>=8'} 403 | 404 | signal-exit@4.1.0: 405 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 406 | engines: {node: '>=14'} 407 | 408 | slash@3.0.0: 409 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 410 | engines: {node: '>=8'} 411 | 412 | spawndamnit@3.0.1: 413 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 414 | 415 | sprintf-js@1.0.3: 416 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 417 | 418 | sqids@0.3.0: 419 | resolution: {integrity: sha512-lOQK1ucVg+W6n3FhRwwSeUijxe93b51Bfz5PMRMihVf1iVkl82ePQG7V5vwrhzB11v0NtsR25PSZRGiSomJaJw==} 420 | 421 | strip-ansi@6.0.1: 422 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 423 | engines: {node: '>=8'} 424 | 425 | strip-bom@3.0.0: 426 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 427 | engines: {node: '>=4'} 428 | 429 | term-size@2.2.1: 430 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 431 | engines: {node: '>=8'} 432 | 433 | tmcp@1.19.0: 434 | resolution: {integrity: sha512-wOY449EdaWDo7wLZEOVjeH9fn/AqfFF4f+3pDerCI8xHpy2Z8msUjAF0Vkg01aEFIdFMmiNDiY4hu6E7jVX79w==} 435 | 436 | to-regex-range@5.0.1: 437 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 438 | engines: {node: '>=8.0'} 439 | 440 | typescript@5.9.3: 441 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 442 | engines: {node: '>=14.17'} 443 | hasBin: true 444 | 445 | undici-types@7.16.0: 446 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 447 | 448 | universalify@0.1.2: 449 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 450 | engines: {node: '>= 4.0.0'} 451 | 452 | uri-template-matcher@1.1.2: 453 | resolution: {integrity: sha512-uZc1h12jdO3m/R77SfTEOuo6VbMhgWznaawKpBjRGSJb7i91x5PgI37NQJtG+Cerxkk0yr1pylBY2qG1kQ+aEQ==} 454 | 455 | valibot@1.2.0: 456 | resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} 457 | peerDependencies: 458 | typescript: '>=5' 459 | peerDependenciesMeta: 460 | typescript: 461 | optional: true 462 | 463 | which@2.0.2: 464 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 465 | engines: {node: '>= 8'} 466 | hasBin: true 467 | 468 | snapshots: 469 | 470 | '@babel/runtime@7.28.3': {} 471 | 472 | '@changesets/apply-release-plan@7.0.14': 473 | dependencies: 474 | '@changesets/config': 3.1.2 475 | '@changesets/get-version-range-type': 0.4.0 476 | '@changesets/git': 3.0.4 477 | '@changesets/should-skip-package': 0.1.2 478 | '@changesets/types': 6.1.0 479 | '@manypkg/get-packages': 1.1.3 480 | detect-indent: 6.1.0 481 | fs-extra: 7.0.1 482 | lodash.startcase: 4.4.0 483 | outdent: 0.5.0 484 | prettier: 2.8.8 485 | resolve-from: 5.0.0 486 | semver: 7.7.2 487 | 488 | '@changesets/assemble-release-plan@6.0.9': 489 | dependencies: 490 | '@changesets/errors': 0.2.0 491 | '@changesets/get-dependents-graph': 2.1.3 492 | '@changesets/should-skip-package': 0.1.2 493 | '@changesets/types': 6.1.0 494 | '@manypkg/get-packages': 1.1.3 495 | semver: 7.7.2 496 | 497 | '@changesets/changelog-git@0.2.1': 498 | dependencies: 499 | '@changesets/types': 6.1.0 500 | 501 | '@changesets/cli@2.29.8(@types/node@25.0.2)': 502 | dependencies: 503 | '@changesets/apply-release-plan': 7.0.14 504 | '@changesets/assemble-release-plan': 6.0.9 505 | '@changesets/changelog-git': 0.2.1 506 | '@changesets/config': 3.1.2 507 | '@changesets/errors': 0.2.0 508 | '@changesets/get-dependents-graph': 2.1.3 509 | '@changesets/get-release-plan': 4.0.14 510 | '@changesets/git': 3.0.4 511 | '@changesets/logger': 0.1.1 512 | '@changesets/pre': 2.0.2 513 | '@changesets/read': 0.6.6 514 | '@changesets/should-skip-package': 0.1.2 515 | '@changesets/types': 6.1.0 516 | '@changesets/write': 0.4.0 517 | '@inquirer/external-editor': 1.0.3(@types/node@25.0.2) 518 | '@manypkg/get-packages': 1.1.3 519 | ansi-colors: 4.1.3 520 | ci-info: 3.9.0 521 | enquirer: 2.4.1 522 | fs-extra: 7.0.1 523 | mri: 1.2.0 524 | p-limit: 2.3.0 525 | package-manager-detector: 0.2.11 526 | picocolors: 1.1.1 527 | resolve-from: 5.0.0 528 | semver: 7.7.2 529 | spawndamnit: 3.0.1 530 | term-size: 2.2.1 531 | transitivePeerDependencies: 532 | - '@types/node' 533 | 534 | '@changesets/config@3.1.2': 535 | dependencies: 536 | '@changesets/errors': 0.2.0 537 | '@changesets/get-dependents-graph': 2.1.3 538 | '@changesets/logger': 0.1.1 539 | '@changesets/types': 6.1.0 540 | '@manypkg/get-packages': 1.1.3 541 | fs-extra: 7.0.1 542 | micromatch: 4.0.8 543 | 544 | '@changesets/errors@0.2.0': 545 | dependencies: 546 | extendable-error: 0.1.7 547 | 548 | '@changesets/get-dependents-graph@2.1.3': 549 | dependencies: 550 | '@changesets/types': 6.1.0 551 | '@manypkg/get-packages': 1.1.3 552 | picocolors: 1.1.1 553 | semver: 7.7.2 554 | 555 | '@changesets/get-release-plan@4.0.14': 556 | dependencies: 557 | '@changesets/assemble-release-plan': 6.0.9 558 | '@changesets/config': 3.1.2 559 | '@changesets/pre': 2.0.2 560 | '@changesets/read': 0.6.6 561 | '@changesets/types': 6.1.0 562 | '@manypkg/get-packages': 1.1.3 563 | 564 | '@changesets/get-version-range-type@0.4.0': {} 565 | 566 | '@changesets/git@3.0.4': 567 | dependencies: 568 | '@changesets/errors': 0.2.0 569 | '@manypkg/get-packages': 1.1.3 570 | is-subdir: 1.2.0 571 | micromatch: 4.0.8 572 | spawndamnit: 3.0.1 573 | 574 | '@changesets/logger@0.1.1': 575 | dependencies: 576 | picocolors: 1.1.1 577 | 578 | '@changesets/parse@0.4.2': 579 | dependencies: 580 | '@changesets/types': 6.1.0 581 | js-yaml: 4.1.1 582 | 583 | '@changesets/pre@2.0.2': 584 | dependencies: 585 | '@changesets/errors': 0.2.0 586 | '@changesets/types': 6.1.0 587 | '@manypkg/get-packages': 1.1.3 588 | fs-extra: 7.0.1 589 | 590 | '@changesets/read@0.6.6': 591 | dependencies: 592 | '@changesets/git': 3.0.4 593 | '@changesets/logger': 0.1.1 594 | '@changesets/parse': 0.4.2 595 | '@changesets/types': 6.1.0 596 | fs-extra: 7.0.1 597 | p-filter: 2.1.0 598 | picocolors: 1.1.1 599 | 600 | '@changesets/should-skip-package@0.1.2': 601 | dependencies: 602 | '@changesets/types': 6.1.0 603 | '@manypkg/get-packages': 1.1.3 604 | 605 | '@changesets/types@4.1.0': {} 606 | 607 | '@changesets/types@6.1.0': {} 608 | 609 | '@changesets/write@0.4.0': 610 | dependencies: 611 | '@changesets/types': 6.1.0 612 | fs-extra: 7.0.1 613 | human-id: 4.1.1 614 | prettier: 2.8.8 615 | 616 | '@inquirer/external-editor@1.0.3(@types/node@25.0.2)': 617 | dependencies: 618 | chardet: 2.1.1 619 | iconv-lite: 0.7.0 620 | optionalDependencies: 621 | '@types/node': 25.0.2 622 | 623 | '@manypkg/find-root@1.1.0': 624 | dependencies: 625 | '@babel/runtime': 7.28.3 626 | '@types/node': 12.20.55 627 | find-up: 4.1.0 628 | fs-extra: 8.1.0 629 | 630 | '@manypkg/get-packages@1.1.3': 631 | dependencies: 632 | '@babel/runtime': 7.28.3 633 | '@changesets/types': 4.1.0 634 | '@manypkg/find-root': 1.1.0 635 | fs-extra: 8.1.0 636 | globby: 11.1.0 637 | read-yaml-file: 1.1.0 638 | 639 | '@nodelib/fs.scandir@2.1.5': 640 | dependencies: 641 | '@nodelib/fs.stat': 2.0.5 642 | run-parallel: 1.2.0 643 | 644 | '@nodelib/fs.stat@2.0.5': {} 645 | 646 | '@nodelib/fs.walk@1.2.8': 647 | dependencies: 648 | '@nodelib/fs.scandir': 2.1.5 649 | fastq: 1.19.1 650 | 651 | '@standard-schema/spec@1.0.0': {} 652 | 653 | '@tmcp/adapter-valibot@0.1.5(tmcp@1.19.0(typescript@5.9.3))(valibot@1.2.0(typescript@5.9.3))': 654 | dependencies: 655 | '@standard-schema/spec': 1.0.0 656 | '@valibot/to-json-schema': 1.3.0(valibot@1.2.0(typescript@5.9.3)) 657 | tmcp: 1.19.0(typescript@5.9.3) 658 | valibot: 1.2.0(typescript@5.9.3) 659 | 660 | '@tmcp/transport-stdio@0.4.1(tmcp@1.19.0(typescript@5.9.3))': 661 | dependencies: 662 | tmcp: 1.19.0(typescript@5.9.3) 663 | 664 | '@types/node@12.20.55': {} 665 | 666 | '@types/node@25.0.2': 667 | dependencies: 668 | undici-types: 7.16.0 669 | 670 | '@valibot/to-json-schema@1.3.0(valibot@1.2.0(typescript@5.9.3))': 671 | dependencies: 672 | valibot: 1.2.0(typescript@5.9.3) 673 | 674 | ansi-colors@4.1.3: {} 675 | 676 | ansi-regex@5.0.1: {} 677 | 678 | argparse@1.0.10: 679 | dependencies: 680 | sprintf-js: 1.0.3 681 | 682 | argparse@2.0.1: {} 683 | 684 | array-union@2.1.0: {} 685 | 686 | better-path-resolve@1.0.0: 687 | dependencies: 688 | is-windows: 1.0.2 689 | 690 | braces@3.0.3: 691 | dependencies: 692 | fill-range: 7.1.1 693 | 694 | chalk@5.6.2: {} 695 | 696 | chardet@2.1.1: {} 697 | 698 | ci-info@3.9.0: {} 699 | 700 | cross-spawn@7.0.6: 701 | dependencies: 702 | path-key: 3.1.1 703 | shebang-command: 2.0.0 704 | which: 2.0.2 705 | 706 | detect-indent@6.1.0: {} 707 | 708 | dir-glob@3.0.1: 709 | dependencies: 710 | path-type: 4.0.0 711 | 712 | enquirer@2.4.1: 713 | dependencies: 714 | ansi-colors: 4.1.3 715 | strip-ansi: 6.0.1 716 | 717 | esprima@4.0.1: {} 718 | 719 | extendable-error@0.1.7: {} 720 | 721 | fast-glob@3.3.3: 722 | dependencies: 723 | '@nodelib/fs.stat': 2.0.5 724 | '@nodelib/fs.walk': 1.2.8 725 | glob-parent: 5.1.2 726 | merge2: 1.4.1 727 | micromatch: 4.0.8 728 | 729 | fastq@1.19.1: 730 | dependencies: 731 | reusify: 1.1.0 732 | 733 | fill-range@7.1.1: 734 | dependencies: 735 | to-regex-range: 5.0.1 736 | 737 | find-up@4.1.0: 738 | dependencies: 739 | locate-path: 5.0.0 740 | path-exists: 4.0.0 741 | 742 | fs-extra@7.0.1: 743 | dependencies: 744 | graceful-fs: 4.2.11 745 | jsonfile: 4.0.0 746 | universalify: 0.1.2 747 | 748 | fs-extra@8.1.0: 749 | dependencies: 750 | graceful-fs: 4.2.11 751 | jsonfile: 4.0.0 752 | universalify: 0.1.2 753 | 754 | glob-parent@5.1.2: 755 | dependencies: 756 | is-glob: 4.0.3 757 | 758 | globby@11.1.0: 759 | dependencies: 760 | array-union: 2.1.0 761 | dir-glob: 3.0.1 762 | fast-glob: 3.3.3 763 | ignore: 5.3.2 764 | merge2: 1.4.1 765 | slash: 3.0.0 766 | 767 | graceful-fs@4.2.11: {} 768 | 769 | human-id@4.1.1: {} 770 | 771 | iconv-lite@0.7.0: 772 | dependencies: 773 | safer-buffer: 2.1.2 774 | 775 | ignore@5.3.2: {} 776 | 777 | is-extglob@2.1.1: {} 778 | 779 | is-glob@4.0.3: 780 | dependencies: 781 | is-extglob: 2.1.1 782 | 783 | is-number@7.0.0: {} 784 | 785 | is-subdir@1.2.0: 786 | dependencies: 787 | better-path-resolve: 1.0.0 788 | 789 | is-windows@1.0.2: {} 790 | 791 | isexe@2.0.0: {} 792 | 793 | js-yaml@3.14.1: 794 | dependencies: 795 | argparse: 1.0.10 796 | esprima: 4.0.1 797 | 798 | js-yaml@4.1.1: 799 | dependencies: 800 | argparse: 2.0.1 801 | 802 | json-rpc-2.0@1.7.1: {} 803 | 804 | jsonfile@4.0.0: 805 | optionalDependencies: 806 | graceful-fs: 4.2.11 807 | 808 | locate-path@5.0.0: 809 | dependencies: 810 | p-locate: 4.1.0 811 | 812 | lodash.startcase@4.4.0: {} 813 | 814 | merge2@1.4.1: {} 815 | 816 | micromatch@4.0.8: 817 | dependencies: 818 | braces: 3.0.3 819 | picomatch: 2.3.1 820 | 821 | mri@1.2.0: {} 822 | 823 | outdent@0.5.0: {} 824 | 825 | p-filter@2.1.0: 826 | dependencies: 827 | p-map: 2.1.0 828 | 829 | p-limit@2.3.0: 830 | dependencies: 831 | p-try: 2.2.0 832 | 833 | p-locate@4.1.0: 834 | dependencies: 835 | p-limit: 2.3.0 836 | 837 | p-map@2.1.0: {} 838 | 839 | p-try@2.2.0: {} 840 | 841 | package-manager-detector@0.2.11: 842 | dependencies: 843 | quansync: 0.2.11 844 | 845 | path-exists@4.0.0: {} 846 | 847 | path-key@3.1.1: {} 848 | 849 | path-type@4.0.0: {} 850 | 851 | picocolors@1.1.1: {} 852 | 853 | picomatch@2.3.1: {} 854 | 855 | pify@4.0.1: {} 856 | 857 | prettier@2.8.8: {} 858 | 859 | quansync@0.2.11: {} 860 | 861 | queue-microtask@1.2.3: {} 862 | 863 | read-yaml-file@1.1.0: 864 | dependencies: 865 | graceful-fs: 4.2.11 866 | js-yaml: 3.14.1 867 | pify: 4.0.1 868 | strip-bom: 3.0.0 869 | 870 | resolve-from@5.0.0: {} 871 | 872 | reusify@1.1.0: {} 873 | 874 | run-parallel@1.2.0: 875 | dependencies: 876 | queue-microtask: 1.2.3 877 | 878 | safer-buffer@2.1.2: {} 879 | 880 | semver@7.7.2: {} 881 | 882 | shebang-command@2.0.0: 883 | dependencies: 884 | shebang-regex: 3.0.0 885 | 886 | shebang-regex@3.0.0: {} 887 | 888 | signal-exit@4.1.0: {} 889 | 890 | slash@3.0.0: {} 891 | 892 | spawndamnit@3.0.1: 893 | dependencies: 894 | cross-spawn: 7.0.6 895 | signal-exit: 4.1.0 896 | 897 | sprintf-js@1.0.3: {} 898 | 899 | sqids@0.3.0: {} 900 | 901 | strip-ansi@6.0.1: 902 | dependencies: 903 | ansi-regex: 5.0.1 904 | 905 | strip-bom@3.0.0: {} 906 | 907 | term-size@2.2.1: {} 908 | 909 | tmcp@1.19.0(typescript@5.9.3): 910 | dependencies: 911 | '@standard-schema/spec': 1.0.0 912 | json-rpc-2.0: 1.7.1 913 | sqids: 0.3.0 914 | uri-template-matcher: 1.1.2 915 | valibot: 1.2.0(typescript@5.9.3) 916 | transitivePeerDependencies: 917 | - typescript 918 | 919 | to-regex-range@5.0.1: 920 | dependencies: 921 | is-number: 7.0.0 922 | 923 | typescript@5.9.3: {} 924 | 925 | undici-types@7.16.0: {} 926 | 927 | universalify@0.1.2: {} 928 | 929 | uri-template-matcher@1.1.2: {} 930 | 931 | valibot@1.2.0(typescript@5.9.3): 932 | optionalDependencies: 933 | typescript: 5.9.3 934 | 935 | which@2.0.2: 936 | dependencies: 937 | isexe: 2.0.0 938 | --------------------------------------------------------------------------------