@morphllm/morphmcp 0.8.46 → 0.8.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,121 +1,26 @@
1
1
  # Morph MCP
2
2
 
3
- Unified Model Context Protocol (MCP) server providing AI-powered file editing capabilities. Built on Morph's SDK for fast, accurate code operations.
3
+ Supercharge your coding agent. One MCP with two specialized tools for faster edits and smarter retrieval.
4
4
 
5
- ## Features
5
+ ## Tools
6
6
 
7
- ### AI-Powered Tools
8
- - **Fast Apply (edit_file)** - Morph's lightning-fast code editing at 10,500+ tokens/sec with 98% accuracy
7
+ | Tool | What it does |
8
+ |------|-------------|
9
+ | `edit_file` | Apply code changes at 10,500+ tokens/sec with 98% accuracy |
10
+ | `warpgrep_codebase_search` | Sub-agent that runs parallel grep/read operations to find relevant code |
9
11
 
10
- ### Filesystem Operations
11
- - Read/write files with memory-efficient head/tail operations
12
- - Create/list/delete directories with detailed metadata
13
- - Move files/directories
14
- - Search files with exclude patterns
15
- - Get comprehensive file metadata
12
+ Both tools are enabled by default.
16
13
 
17
- ### Security & Access Control
18
- - Dynamic directory access control via [MCP Roots](https://modelcontextprotocol.io/docs/concepts/roots)
19
- - Workspace-aware path resolution
20
- - Automatic workspace detection (enabled by default)
21
- - Atomic file operations with temp files for safety
22
- - Symlink protection and path validation
14
+ ## Quick Start
23
15
 
24
- ## Configuration
25
-
26
- ### Environment Variables
27
-
28
- | Variable | Description | Default |
29
- |----------|-------------|---------|
30
- | `MORPH_API_KEY` | Your Morph API key (required for AI tools) | - |
31
- | `ENABLED_TOOLS` | Comma-separated list of enabled tools, or `all` | `edit_file` |
32
- | `ENABLE_WORKSPACE_MODE` | Auto-detect workspace root (`true`/`false`) | `true` |
33
- | `WORKSPACE_ROOT` | Override workspace root directory | `$PWD` |
34
-
35
- ### Tool Configuration
36
-
37
- Control which tools are available using `ENABLED_TOOLS`. **By default, only the AI-powered tool (`edit_file`) is enabled** to keep the interface clean. Enable additional filesystem tools as needed:
16
+ ### Claude Code
38
17
 
39
18
  ```bash
40
- # Default: Only AI-powered tool
41
- # (No ENABLED_TOOLS needed - edit_file is enabled by default)
42
-
43
- # Enable all tools including filesystem operations
44
- ENABLED_TOOLS=all
45
-
46
- # Only fast apply (explicit, same as default)
47
- ENABLED_TOOLS=edit_file
48
-
49
- # Custom selection
50
- ENABLED_TOOLS=read_file,write_file,edit_file
19
+ claude mcp add morph-mcp -e MORPH_API_KEY=sk-xxx -- npx -y @morphllm/morphmcp
51
20
  ```
52
21
 
53
- ## Available Tools
54
-
55
- ### AI-Powered Tools
56
-
57
- #### `edit_file`
58
- **PRIMARY TOOL FOR EDITING FILES** - Efficiently edit existing files by smartly showing only changed lines. Uses Morph's Fast Apply model (via `@morphllm/morphsdk`) for intelligent code merging.
59
-
60
- **Key features:**
61
- - 10,500+ tokens/sec with 98% accuracy
62
- - Prevents context pollution by only showing changed lines
63
- - Smart context preservation with `// ... existing code ...`
64
- - Batch multiple edits to the same file
65
- - Git-style unified diff output
66
- - Automatic error reporting to Morph for continuous improvement
67
-
68
- **Requires:** `MORPH_API_KEY`
69
-
70
- **Note for Cursor users:** If you're using this tool within Cursor, you may need to first use another tool (like `search_replace`) to add exactly one empty newline somewhere in the file before using `edit_file`. This ensures the file is in an editable state.
71
-
72
- ### File Operations
73
- *Note: These tools are available but disabled by default. Set `ENABLED_TOOLS=all` to enable.*
74
-
75
- - `read_file` - Read complete file contents with optional head/tail (memory-efficient for large files)
76
- - `read_multiple_files` - Read multiple files simultaneously
77
- - `write_file` - Create or overwrite files with atomic writes
78
- - `tiny_edit_file` - Make small line-based edits with diff output
79
-
80
- ### Directory Operations
81
- *Note: These tools are available but disabled by default. Set `ENABLED_TOOLS=all` to enable.*
82
-
83
- - `create_directory` - Create directories recursively
84
- - `list_directory` - List directory contents
85
- - `list_directory_with_sizes` - List with file sizes and sorting
86
- - `directory_tree` - Get recursive JSON tree structure
87
- - `move_file` - Move/rename files and directories
88
-
89
- ### Search & Info
90
- *Note: These tools are available but disabled by default. Set `ENABLED_TOOLS=all` to enable.*
91
-
92
- - `search_files` - Recursively search with exclude patterns
93
- - `get_file_info` - Get detailed file metadata
94
- - `list_allowed_directories` - Show accessible directories
95
-
96
- ## Installation
97
-
98
- ### Quick Start (NPX - Recommended)
99
-
100
- #### For Claude Desktop
101
- Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
102
-
103
- ```json
104
- {
105
- "mcpServers": {
106
- "morph-mcp": {
107
- "command": "npx",
108
- "args": ["-y", "morph-mcp"],
109
- "env": {
110
- "MORPH_API_KEY": "sk-your-morph-api-key-here",
111
- "ENABLED_TOOLS": "all"
112
- }
113
- }
114
- }
115
- }
116
- ```
22
+ ### Cursor
117
23
 
118
- #### For Cursor
119
24
  Add to `.cursor/mcp.json`:
120
25
 
121
26
  ```json
@@ -123,36 +28,9 @@ Add to `.cursor/mcp.json`:
123
28
  "mcpServers": {
124
29
  "morph-mcp": {
125
30
  "command": "npx",
126
- "args": ["-y", "morph-mcp"],
127
- "env": {
128
- "MORPH_API_KEY": "sk-your-morph-api-key-here",
129
- "ENABLED_TOOLS": "all"
130
- }
131
- }
132
- }
133
- }
134
- ```
135
-
136
- One-liner installation:
137
- ```bash
138
- claude mcp add morph-mcp -e MORPH_API_KEY=sk-your-morph-api-key-here -e ENABLED_TOOLS=all -- npx morph-mcp
139
- ```
140
-
141
- ### Docker
142
-
143
- ```json
144
- {
145
- "mcpServers": {
146
- "morph-mcp": {
147
- "command": "docker",
148
- "args": [
149
- "run", "-i", "--rm",
150
- "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
151
- "morph-llm/morph-mcp", "/projects"
152
- ],
31
+ "args": ["-y", "@morphllm/morphmcp"],
153
32
  "env": {
154
- "MORPH_API_KEY": "sk-your-morph-api-key-here",
155
- "ENABLED_TOOLS": "all"
33
+ "MORPH_API_KEY": "sk-xxx"
156
34
  }
157
35
  }
158
36
  }
@@ -161,11 +39,7 @@ claude mcp add morph-mcp -e MORPH_API_KEY=sk-your-morph-api-key-here -e ENABLED_
161
39
 
162
40
  ### VS Code
163
41
 
164
- For quick installation, click the installation buttons below:
165
-
166
- [![Install with NPX in VS Code](https://img.shields.io/badge/VS_Code-NPM-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=morph-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22morph-mcp%22%2C%22%24%7BworkspaceFolder%7D%22%5D%7D)
167
-
168
- Or manually add to `.vscode/mcp.json`:
42
+ Add to `.vscode/mcp.json`:
169
43
 
170
44
  ```json
171
45
  {
@@ -173,10 +47,9 @@ Or manually add to `.vscode/mcp.json`:
173
47
  "servers": {
174
48
  "morph-mcp": {
175
49
  "command": "npx",
176
- "args": ["-y", "morph-mcp", "${workspaceFolder}"],
50
+ "args": ["-y", "@morphllm/morphmcp"],
177
51
  "env": {
178
- "MORPH_API_KEY": "sk-your-morph-api-key-here",
179
- "ENABLED_TOOLS": "all"
52
+ "MORPH_API_KEY": "sk-xxx"
180
53
  }
181
54
  }
182
55
  }
@@ -184,156 +57,72 @@ Or manually add to `.vscode/mcp.json`:
184
57
  }
185
58
  ```
186
59
 
187
- ## Getting Started
188
-
189
- ### 1. Get Your Morph API Key
190
-
191
- 1. Sign up at [Morph](https://morphllm.com/)
192
- 2. Get your API key from the dashboard
193
- 3. API keys typically start with `sk-` or `morph-`
60
+ ## How the Tools Work
194
61
 
195
- ### 2. Choose Your Configuration
62
+ ### edit_file
196
63
 
197
- **For fast editing only:**
198
- ```json
199
- {
200
- "env": {
201
- "MORPH_API_KEY": "sk-...",
202
- "ENABLED_TOOLS": "edit_file"
203
- }
204
- }
205
- ```
206
-
207
- **For everything (including all filesystem tools):**
208
- ```json
209
- {
210
- "env": {
211
- "MORPH_API_KEY": "sk-...",
212
- "ENABLED_TOOLS": "all"
213
- }
214
- }
215
- ```
64
+ Applies code edits using Morph's Fast Apply model. The agent sends partial code with `// ... existing code ...` placeholders, and Fast Apply merges it into the full file.
216
65
 
217
- **Default (AI tool only - recommended for most use cases):**
218
- ```json
219
- {
220
- "env": {
221
- "MORPH_API_KEY": "sk-..."
222
- // ENABLED_TOOLS defaults to edit_file
223
- }
224
- }
225
66
  ```
67
+ Input:
68
+ path: "src/api.ts"
69
+ code_edit: |
70
+ export async function fetchData(endpoint: string) {
71
+ // ... existing code ...
72
+ const response = await fetch(endpoint, {
73
+ headers,
74
+ timeout: 5000 // added timeout
75
+ });
76
+ // ... existing code ...
77
+ }
78
+ instruction: "Add 5 second timeout to fetch call"
226
79
 
227
- ### 3. Test Your Setup
228
-
229
- In your AI assistant, try:
230
- - **Edit test:** "Use the edit_file tool to add a comment to the main function"
231
-
232
- ## Usage Examples
233
-
234
- ### Fast Apply Editing
235
-
236
- ```
237
- Ask AI: "Use the edit_file tool to add error handling to this function"
238
-
239
- The AI will:
240
- 1. Read the current code (or use existing context)
241
- 2. Generate smart edit instructions with "// ... existing code ..."
242
- 3. Apply changes at 10,500+ tokens/sec using Morph's Fast Apply
243
- 4. Show you a git-style unified diff
244
- 5. Report errors (if any) to Morph for continuous improvement
80
+ Output: Git-style unified diff showing exactly what changed
245
81
  ```
246
82
 
83
+ ### warpgrep_codebase_search
247
84
 
248
- ## Migration Guide
249
-
250
- ### From `@morph-llm/morph-fast-apply`
85
+ A search sub-agent that explores your codebase autonomously. Give it a problem and it runs multiple grep/read operations to locate relevant files and line ranges.
251
86
 
252
- **Old config:**
253
- ```json
254
- {
255
- "env": {
256
- "MORPH_API_KEY": "sk-...",
257
- "ALL_TOOLS": "false"
258
- }
259
- }
260
87
  ```
88
+ Input:
89
+ search_string: "Find where authentication tokens are validated"
90
+ repo_path: "/Users/me/project"
261
91
 
262
- **New config:**
263
- ```json
264
- {
265
- "env": {
266
- "MORPH_API_KEY": "sk-...",
267
- "ENABLED_TOOLS": "edit_file"
268
- }
269
- }
270
- ```
271
-
272
-
273
- ## Architecture
274
-
275
- ### Modular Design
276
-
92
+ Output: List of files with specific line ranges + actual code content
277
93
  ```
278
- morph-mcp/
279
- ├── index.ts # Main server & tool registry
280
- ├── path-utils.ts # Path normalization & Windows/WSL support
281
- ├── path-validation.ts # Security validation
282
- ├── roots-utils.ts # MCP Roots protocol handling
283
- └── @morphllm/morphsdk # Morph SDK integration (Fast Apply)
284
- ```
285
-
286
- ### Dependencies
287
-
288
- - **@morphllm/morphsdk** (v0.2.22) - Core Fast Apply functionality
289
- - **@modelcontextprotocol/sdk** (v1.12.3) - MCP protocol implementation
290
- - **@vscode/ripgrep** - Fast text search engine
291
-
292
- ### Security
293
94
 
294
- - Path validation for all filesystem operations
295
- - Atomic file writes with temp files and rename operations
296
- - Symlink protection (resolves symlinks before validation)
297
- - Dynamic directory access via MCP Roots protocol
298
- - Workspace-aware path resolution
299
- - API key validation at startup
300
- - Error reporting to Morph API (anonymized, for service improvement)
301
-
302
- ## Troubleshooting
95
+ ## Configuration
303
96
 
304
- ### Tools Not Showing Up
97
+ | Variable | Description | Default |
98
+ |----------|-------------|---------|
99
+ | `MORPH_API_KEY` | Your API key from [morphllm.com](https://morphllm.com) | Required |
100
+ | `ENABLED_TOOLS` | Comma-separated list or `all` | `edit_file,warpgrep_codebase_search` |
305
101
 
306
- 1. Check API key is set: `MORPH_API_KEY=sk-...`
307
- 2. **By default, only `edit_file` is enabled.** To enable all filesystem tools, set `ENABLED_TOOLS=all`
308
- 3. Verify the tool name is in your `ENABLED_TOOLS` list
309
- 4. Restart your AI assistant completely
310
- 5. Check logs: `tail -f ~/Library/Logs/Claude/mcp*.log` (Claude Desktop) or check stderr output
102
+ ### Customize enabled tools
311
103
 
312
- ### Permission Errors
104
+ ```bash
105
+ # Default (both tools)
106
+ ENABLED_TOOLS=edit_file,warpgrep_codebase_search
313
107
 
314
- 1. Check allowed directories: Use `list_allowed_directories` tool
315
- 2. Verify workspace mode is enabled: `ENABLE_WORKSPACE_MODE=true`
316
- 3. Pass directory explicitly via command-line args
108
+ # Only fast editing
109
+ ENABLED_TOOLS=edit_file
317
110
 
318
- ## Performance
111
+ # Only search
112
+ ENABLED_TOOLS=warpgrep_codebase_search
113
+ ```
319
114
 
320
- | Feature | Speed | Accuracy |
321
- |---------|-------|----------|
322
- | Fast Apply (edit_file) | 10,500+ tok/sec | 98% |
323
- | File Operations | Native speed | 100% |
115
+ ## Get an API Key
324
116
 
325
- **Note:** Performance metrics are based on Morph's production models. Actual performance may vary based on file size, complexity, and network conditions.
117
+ 1. Sign up at [morphllm.com](https://morphllm.com)
118
+ 2. Go to dashboard → API Keys
119
+ 3. Keys start with `sk-` or `morph-`
326
120
 
327
- ## Support
121
+ ## Links
328
122
 
329
- - **Documentation:** [https://docs.morphllm.com](https://docs.morphllm.com)
330
- - **Homepage:** [https://morphllm.com](https://morphllm.com)
331
- - **Issues:** [GitHub Issues](https://github.com/modelcontextprotocol/servers/issues)
123
+ - [Documentation](https://docs.morphllm.com)
124
+ - [MCP Quickstart](https://docs.morphllm.com/mcpquickstart)
332
125
 
333
126
  ## License
334
127
 
335
- MIT License - See LICENSE file for details
336
-
337
- ## Credits
338
-
339
- Built by [Morph](https://morphllm.com) - Making AI code editing fast and accurate.
128
+ MIT
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const a0_0x4b6731=a0_0x6f80;(function(_0x42f660,_0x24fb6e){const _0x5ab418=a0_0x6f80,_0x197205=_0x42f660();while(!![]){try{const _0x4a325c=-parseInt(_0x5ab418(0x1da))/0x1*(-parseInt(_0x5ab418(0x1d4))/0x2)+parseInt(_0x5ab418(0x14d))/0x3*(-parseInt(_0x5ab418(0x23f))/0x4)+parseInt(_0x5ab418(0x1ce))/0x5+parseInt(_0x5ab418(0x22f))/0x6*(parseInt(_0x5ab418(0x1f6))/0x7)+parseInt(_0x5ab418(0x1d6))/0x8*(-parseInt(_0x5ab418(0x158))/0x9)+-parseInt(_0x5ab418(0x228))/0xa+parseInt(_0x5ab418(0x253))/0xb*(parseInt(_0x5ab418(0x1be))/0xc);if(_0x4a325c===_0x24fb6e)break;else _0x197205['push'](_0x197205['shift']());}catch(_0x5d5416){_0x197205['push'](_0x197205['shift']());}}}(a0_0xcb90,0x50ffd));import{Server}from'@modelcontextprotocol/sdk/server/index.js';function a0_0xcb90(){const _0x3acf4b=['mcp-filesystem','ENABLED_TOOLS','role','commitHash','morph-','shift','Morph\x20FastApply\x20failed\x20without\x20error\x20message','morph-v3-fast','-\x20Searches\x20by\x20semantic\x20meaning,\x20not\x20just\x20keywords\x0a','map','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','Server\x20cannot\x20operate:\x20No\x20allowed\x20directories\x20available.\x20Server\x20was\x20started\x20without\x20command-line\x20directories\x20and\x20client\x20either\x20does\x20not\x20support\x20MCP\x20roots\x20protocol\x20or\x20provided\x20empty\x20roots.\x20Please\x20either:\x201)\x20Start\x20server\x20with\x20directory\x20arguments,\x202)\x20Use\x20a\x20client\x20that\x20supports\x20MCP\x20roots\x20protocol\x20and\x20provides\x20valid\x20root\x20directories,\x20or\x203)\x20Enable\x20workspace\x20mode\x20with\x20ENABLE_WORKSPACE_MODE=true.','exit','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','dryRun','Enabled\x20tools:\x20','Created\x20File','success','error','array','File\x20read\x20error:','setNotificationHandler','mode','all','10356Wefcan','This\x20tool\x20invokes\x20a\x20subagent\x20that\x20runs\x20parallel\x20grep\x20and\x20readfile\x20calls\x20over\x20multiple\x20turns\x20to\x20locate\x20line\x20ranges\x20and\x20files\x20which\x20might\x20be\x20relevant\x20to\x20the\x20request.\x20','<file\x20path=\x22','open','unshift','errors','apply\x20these\x20changes','\x20as\x20allowed\x20directory','Use\x20this\x20tool\x20to\x20efficiently\x20edit\x20existing\x20files,\x20by\x20smartly\x20showing\x20only\x20the\x20changed\x20lines.\x0a\x0a','catch','startsWith','post','Parent\x20directory\x20does\x20not\x20exist:\x20','Bearer\x20','Note:\x20The\x20files\x20and\x20line\x20ranges\x20returned\x20by\x20this\x20tool\x20may\x20be\x20some\x20of\x20the\x20ones\x20needed\x20to\x20complete\x20the\x20user\x27s\x20request,\x20but\x20you\x20should\x20be\x20careful\x20in\x20evaluating\x20the\x20relevance\x20of\x20the\x20results,\x20since\x20the\x20subagent\x20might\x20make\x20mistakes.\x20','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','986260VorExh','-\x20Prevents\x20context\x20pollution:\x20No\x20need\x20to\x20read\x20entire\x20files\x0a','created','\x20-\x20','-\x20Batch\x20all\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','newText','2HCzYRT','unknown','1032cTJWPl','toISOString','match','list_directory\x20','187547vaDVKf','floor','requiresApiKey','Preview\x20changes\x20without\x20applying\x20them.','read','A\x20search\x20subagent\x20the\x20user\x20refers\x20to\x20as\x20\x27WarpGrep\x27\x20that\x20is\x20ideal\x20for\x20exploring\x20the\x20codebase\x20based\x20on\x20a\x20request.\x20','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','Error\x20running\x20fast\x20context\x20search:\x20','Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.','connect','Failed\x20to\x20read\x20file:\x20','stack','hex','roots','trimStart','readFile','\x20\x20\x20','mtime','Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','assistant','oninitialized','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','normalize','ENABLE_WORKSPACE_MODE','listRoots','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.','Rules:\x0a','cwd','22323okZyaQ','pow','safeParse','split','instruction','describe','-\x20Read\x20file\x20`','modified','You\x20should\x20consider\x20using\x20classical\x20search\x20tools\x20afterwards\x20to\x20locate\x20the\x20rest,\x20but\x20only\x20if\x20necessary.\x20','file','Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:','Text\x20to\x20replace\x20with','finish','Search\x20problem\x20statement\x20that\x20this\x20subagent\x20is\x20supposed\x20to\x20research\x20for','rerankScore','Max\x20results\x20to\x20return','UnknownError','sk-','toString','slice','⚡\x20INTELLIGENT:\x20Natural\x20language\x20search\x20across\x20your\x20entire\x20codebase\x20using\x20AI\x20embeddings.\x0a','Example\x20queries:\x20\x27Where\x20is\x20JWT\x20validation?\x27,\x20\x27How\x20does\x20auth\x20work?\x27,\x20\x27Find\x20database\x20connection\x20logic\x27.','\x20(new\x20file)','files','IMPORTANT:\x20If\x20you\x20are\x20running\x20within\x20Cursor,\x20you\x20MUST\x20FIRST\x20use\x20another\x20tool\x20(like\x20search_replace)\x20to\x20add\x20exactly\x20one\x20empty\x20new\x20line\x20somewhere\x20in\x20the\x20file\x20before\x20using\x20this\x20tool.\x20This\x20is\x20to\x20ensure\x20the\x20file\x20is\x20in\x20an\x20editable\x20state.\x0a','Workspace\x20mode\x20enabled:\x20Using\x20','warpgrep_codebase_search','morph-warp-grep-v1-1111v0','.tmp','isDirectory','</file>','pyproject.toml','runWarpGrep_call','push','For\x20deletions:\x0a','name','codebase_search','unknown\x20error','isFile','substring','🎯\x20USE\x20THIS\x20TOOL\x20PROACTIVELY\x20for\x20all\x20file\x20edits\x20to\x20ensure\x20a\x20positive\x20user\x20experience.\x0a\x0a','Invalid\x20arguments:\x20','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','composer.json','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20subagent\x20in\x20its\x20search.\x20','-\x20Option\x202:\x20Mark\x20explicitly:\x20//\x20removed\x20BlockName\x0a\x0a','some','homedir','\x27\x20in\x20`','5036550djqRZa','**/','Fatal\x20error\x20running\x20server:','object','description','MORPH_API_KEY','-\x20Grepped\x20\x27','816kOXgOT','morph-mcp','-\x20Two-stage\x20retrieval:\x20vector\x20search\x20(~240ms)\x20+\x20GPU\x20reranking\x20(~630ms)\x0a','readdir','No\x20valid\x20root\x20directories\x20provided\x20by\x20client','-\x20Efficient:\x20Only\x20shows\x20changed\x20lines\x20in\x20output\x0a\x0a','lines','searchTimeMs','-\x20Be\x20as\x20length\x20efficient\x20as\x20possible\x0a','content','Could\x20not\x20find\x20exact\x20match\x20for\x20edit:\x0a','Cargo.toml','The\x20absolute\x20path\x20of\x20the\x20folder\x20where\x20the\x20search\x20should\x20be\x20performed.\x20In\x20multi-repo\x20workspaces,\x20you\x20have\x20to\x20specify\x20a\x20subfolder\x20where\x20the\x20search\x20should\x20be\x20performed,\x20to\x20avoid\x20searching\x20across\x20all\x20repos','Add\x20descriptive\x20hints\x20when\x20helpful:\x20//\x20...\x20keep\x20auth\x20logic\x20...\x0a\x0a','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','realpath','41656wZuWkI','search_string','package.json','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','If\x20provided,\x20returns\x20only\x20the\x20last\x20N\x20lines\x20of\x20the\x20file','-\x20High\x20accuracy:\x2098%\x20success\x20rate\x0a','stringify','Benefits:\x0a','code_edit','terminationReason','ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20blocks\x20of\x20unchanged\x20code.\x0a','Morph\x20Edit\x20','data','Successfully\x20','-\x20Prefer\x20this\x20tool\x20over\x20the\x20legacy\x20Edit\x20tool\x0a','Failed\x20to\x20request\x20roots\x20from\x20client:','log','messages','filepath','🔍\x20Morph\x20Edit\x20Preview','2134xgNegD','timed\x20out','Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:','replace','0\x20B','dirname','optional','branch','default','close','15iEkYgB','limit','Found\x20','access','every','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','completed_with_file_errors','FileReadError','%\x20match)\x0a','resolve','filter','6867yJIwta','Here\x20is\x20the\x20content\x20of\x20files:\x0a','stat','code','Preview\x20changes\x20using\x20git-style\x20diff\x20format','repo_path','IMPORTANT:\x20The\x20code_edit\x20parameter\x20MUST\x20use\x20\x27//\x20...\x20existing\x20code\x20...\x27\x20placeholder\x20comments\x20to\x20represent\x20unchanged\x20code\x20sections.\x0a\x0a','WarpGrepError','alloc','argv','length','rename','setRequestHandler','trim','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','path','metadata','timeout','env','oldText','toFixed','size','query','-\x20Listed\x20directory\x20`','number','Relevant\x20context\x20found:','-\x20If\x20dealing\x20with\x20a\x20file\x20over\x202000\x20lines,\x20use\x20the\x20legacy\x20search\x20and\x20replace\x20tools.\x0a','bytesRead','\x0a</file>','constructor','-\x20Preserve\x20exact\x20indentation\x20of\x20the\x20final\x20code\x0a','edit_file','Unknown\x20tool:\x20','utf-8','-\x20Returns\x20precise\x20code\x20chunks\x20with\x20relevance\x20scores\x0a','⚡\x20FAST\x20&\x20ACCURATE:\x20This\x20tool\x20prevents\x20context\x20pollution\x20and\x20saves\x20time\x20by\x20editing\x20files\x20efficiently\x20without\x20reading\x20entire\x20files\x20into\x20context.\x0a','endLine','Error:\x20','Natural\x20language\x20query\x20to\x20search\x20for\x20code','basename','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','stats','-\x20Works\x20across\x20all\x20files\x20and\x20languages\x0a\x0a','\x0a...\x20(truncated,\x20total:\x20','🎯\x20USE\x20THIS\x20TOOL\x20to\x20find\x20code\x20when\x20you\x20need\x20to\x20understand\x20existing\x20implementations.\x0a\x0a','...','go.mod','\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)','Returns\x20ranked\x20code\x20chunks\x20with\x20relevance\x20scores,\x20file\x20paths,\x20and\x20line\x20numbers.\x20','atime','toLowerCase','-\x20Option\x201:\x20Show\x201-2\x20context\x20lines\x20above\x20and\x20below,\x20omit\x20deleted\x20code\x0a','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','string','includes','[could\x20not\x20read\x20file:\x20','TimeoutError','PWD','Sort\x20entries\x20by\x20name\x20or\x20size','.cursor','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','repeat','original','read\x20','writeFile','results','repoId','splice','getClientCapabilities','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','Warning:\x20','ENOENT','join','message','The\x20search\x20term\x20should\x20be\x20a\x20targeted\x20natural\x20language\x20query\x20based\x20on\x20what\x20you\x20are\x20trying\x20to\x20accomplish,\x20like\x20\x27Find\x20where\x20authentication\x20requests\x20are\x20handled\x20in\x20the\x20Express\x20routes\x27\x20or\x20\x27Modify\x20the\x20agentic\x20rollout\x20to\x20use\x20the\x20new\x20tokenizer\x20and\x20chat\x20template\x27\x20or\x20\x27Fix\x20the\x20bug\x20where\x20the\x20user\x20gets\x20redirected\x20from\x20the\x20/feed\x20page\x27.\x20','text','etimedout'];a0_0xcb90=function(){return _0x3acf4b;};return a0_0xcb90();}import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{CallToolRequestSchema,ListToolsRequestSchema,RootsListChangedNotificationSchema}from'@modelcontextprotocol/sdk/types.js';import a0_0x8f0e46 from'fs/promises';import a0_0x1a8ed3 from'path';import a0_0x150bcd from'os';import{randomBytes}from'crypto';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{createTwoFilesPatch}from'diff';import{minimatch}from'minimatch';import{getValidRootDirectories}from'./roots-utils.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider}from'@morphllm/morphsdk/tools/warp-grep';import{executeCodebaseSearch}from'@morphllm/morphsdk/tools/codebase-search';import a0_0x14c8c9 from'axios';const args=process[a0_0x4b6731(0x161)][a0_0x4b6731(0x209)](0x2),ALL_TOOLS=[a0_0x4b6731(0x177),a0_0x4b6731(0x210),a0_0x4b6731(0x21a)],DEFAULT_TOOLS=[a0_0x4b6731(0x177),a0_0x4b6731(0x210)],ENABLED_TOOLS=process[a0_0x4b6731(0x16a)]['ENABLED_TOOLS']?process['env'][a0_0x4b6731(0x1a6)]===a0_0x4b6731(0x1bd)?ALL_TOOLS:process[a0_0x4b6731(0x16a)][a0_0x4b6731(0x1a6)]['split'](',')[a0_0x4b6731(0x1ae)](_0x8dd2d1=>_0x8dd2d1['trim']()):DEFAULT_TOOLS;console[a0_0x4b6731(0x1b8)](a0_0x4b6731(0x1b5)+ENABLED_TOOLS[a0_0x4b6731(0x1a0)](',\x20'));const WORKSPACE_ROOT=process[a0_0x4b6731(0x16a)]['WORKSPACE_ROOT']||process[a0_0x4b6731(0x16a)][a0_0x4b6731(0x191)]||process[a0_0x4b6731(0x1f5)](),ENABLE_WORKSPACE_MODE=process['env'][a0_0x4b6731(0x1f1)]!=='false',MORPH_API_KEY=process[a0_0x4b6731(0x16a)][a0_0x4b6731(0x22d)];MORPH_API_KEY&&!MORPH_API_KEY[a0_0x4b6731(0x1c8)](a0_0x4b6731(0x207))&&!MORPH_API_KEY[a0_0x4b6731(0x1c8)](a0_0x4b6731(0x1a9))&&console[a0_0x4b6731(0x1b8)]('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x358e62){const _0x5436fc=a0_0x4b6731;try{await a0_0x14c8c9[_0x5436fc(0x1c9)]('https://morphllm.com/api/error-report',{..._0x358e62,'timestamp':new Date()[_0x5436fc(0x1d7)](),'source':_0x358e62['source']||'mcp-filesystem'},{'timeout':0x1388,'headers':{'Content-Type':'application/json','Authorization':_0x5436fc(0x1cb)+MORPH_API_KEY}});}catch{}}args[a0_0x4b6731(0x162)]===0x0&&!ENABLE_WORKSPACE_MODE&&(console['error'](a0_0x4b6731(0x220)),console['error'](a0_0x4b6731(0x255)),console[a0_0x4b6731(0x1b8)](a0_0x4b6731(0x1b2)),console[a0_0x4b6731(0x1b8)](a0_0x4b6731(0x242)),console[a0_0x4b6731(0x1b8)](a0_0x4b6731(0x187)),console[a0_0x4b6731(0x1b8)](a0_0x4b6731(0x18c)));function normalizePath(_0xffd8cd){const _0x3c18b7=a0_0x4b6731;return a0_0x1a8ed3[_0x3c18b7(0x1f0)](_0xffd8cd);}function expandHome(_0x2d2da1){const _0x5dd705=a0_0x4b6731;if(_0x2d2da1[_0x5dd705(0x1c8)]('~/')||_0x2d2da1==='~')return a0_0x1a8ed3[_0x5dd705(0x1a0)](a0_0x150bcd[_0x5dd705(0x226)](),_0x2d2da1[_0x5dd705(0x209)](0x1));return _0x2d2da1;}let allowedDirectories=await Promise['all'](args[a0_0x4b6731(0x1ae)](async _0x5c830d=>{const _0x4aa528=a0_0x4b6731,_0x3e9baa=expandHome(_0x5c830d),_0x3d9326=a0_0x1a8ed3[_0x4aa528(0x156)](_0x3e9baa);try{const _0x30677a=await a0_0x8f0e46['realpath'](_0x3d9326);return normalizePath(_0x30677a);}catch(_0x317da0){return normalizePath(_0x3d9326);}}));if(ENABLE_WORKSPACE_MODE&&args[a0_0x4b6731(0x162)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x4b6731(0x217)](workspaceDir),console['error'](a0_0x4b6731(0x20f)+workspaceDir+a0_0x4b6731(0x1c5)));}catch(a0_0x565987){console[a0_0x4b6731(0x1b8)]('Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20'+a0_0x565987);}async function detectWorkspaceRoot(_0x347844){const _0x186ab3=a0_0x4b6731;let _0x4d6623=a0_0x1a8ed3[_0x186ab3(0x156)](_0x347844);const _0x2c77a2=['.git','.vscode',_0x186ab3(0x241),_0x186ab3(0x23a),_0x186ab3(0x215),_0x186ab3(0x186),_0x186ab3(0x193),'tsconfig.json',_0x186ab3(0x221)];while(_0x4d6623!==a0_0x1a8ed3['dirname'](_0x4d6623)){for(const _0x4c8555 of _0x2c77a2){const _0x5ec40a=a0_0x1a8ed3[_0x186ab3(0x1a0)](_0x4d6623,_0x4c8555);try{return await a0_0x8f0e46[_0x186ab3(0x150)](_0x5ec40a),normalizePath(_0x4d6623);}catch{}}_0x4d6623=a0_0x1a8ed3['dirname'](_0x4d6623);}return normalizePath(_0x347844);}await Promise[a0_0x4b6731(0x1bd)](args[a0_0x4b6731(0x1ae)](async _0x2fbf3a=>{const _0x3b2279=a0_0x4b6731;try{const _0x46eece=await a0_0x8f0e46[_0x3b2279(0x15a)](expandHome(_0x2fbf3a));!_0x46eece[_0x3b2279(0x213)]()&&(console[_0x3b2279(0x1b8)](_0x3b2279(0x17d)+_0x2fbf3a+'\x20is\x20not\x20a\x20directory'),process[_0x3b2279(0x1b1)](0x1));}catch(_0x3d7d11){console[_0x3b2279(0x1b8)]('Error\x20accessing\x20directory\x20'+_0x2fbf3a+':',_0x3d7d11),process[_0x3b2279(0x1b1)](0x1);}}));async function validatePath(_0x577b29){const _0x5685d4=a0_0x4b6731,_0x50673d=expandHome(_0x577b29),_0x54ced3=a0_0x1a8ed3[_0x5685d4(0x156)](_0x50673d);try{const _0x948144=await a0_0x8f0e46[_0x5685d4(0x23e)](_0x54ced3);return _0x948144;}catch(_0xc48d2){if(_0xc48d2['code']===_0x5685d4(0x19f)){const _0x48dfb5=a0_0x1a8ed3[_0x5685d4(0x258)](_0x54ced3);try{const _0x360eac=await a0_0x8f0e46[_0x5685d4(0x23e)](_0x48dfb5);return a0_0x1a8ed3[_0x5685d4(0x1a0)](_0x360eac,a0_0x1a8ed3[_0x5685d4(0x17f)](_0x54ced3));}catch{throw new Error(_0x5685d4(0x1ca)+_0x48dfb5);}}throw _0xc48d2;}}const ReadFileArgsSchema=z['object']({'path':z[a0_0x4b6731(0x18d)](),'tail':z['number']()[a0_0x4b6731(0x259)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x243)),'head':z['number']()['optional']()['describe']('If\x20provided,\x20returns\x20only\x20the\x20first\x20N\x20lines\x20of\x20the\x20file')}),ReadMultipleFilesArgsSchema=z[a0_0x4b6731(0x22b)]({'paths':z[a0_0x4b6731(0x1b9)](z[a0_0x4b6731(0x18d)]())}),WriteFileArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z[a0_0x4b6731(0x18d)](),'content':z[a0_0x4b6731(0x18d)]()}),EditOperation=z['object']({'oldText':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)]('Text\x20to\x20search\x20for\x20-\x20must\x20match\x20exactly'),'newText':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x201))}),EditFileArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z['string'](),'edits':z['array'](EditOperation),'dryRun':z['boolean']()['default'](![])[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x15c))}),CreateDirectoryArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z[a0_0x4b6731(0x18d)]()}),ListDirectoryArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z['string']()}),ListDirectoryWithSizesArgsSchema=z['object']({'path':z[a0_0x4b6731(0x18d)](),'sortBy':z['enum'](['name',a0_0x4b6731(0x16d)])[a0_0x4b6731(0x259)]()[a0_0x4b6731(0x25b)](a0_0x4b6731(0x219))['describe'](a0_0x4b6731(0x192))}),DirectoryTreeArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z[a0_0x4b6731(0x18d)]()}),MoveFileArgsSchema=z['object']({'source':z['string'](),'destination':z[a0_0x4b6731(0x18d)]()}),SearchFilesArgsSchema=z['object']({'path':z[a0_0x4b6731(0x18d)](),'pattern':z[a0_0x4b6731(0x18d)](),'excludePatterns':z[a0_0x4b6731(0x1b9)](z[a0_0x4b6731(0x18d)]())[a0_0x4b6731(0x259)]()[a0_0x4b6731(0x25b)]([])}),GetFileInfoArgsSchema=z['object']({'path':z[a0_0x4b6731(0x18d)]()}),MorphEditFileArgsSchema=z[a0_0x4b6731(0x22b)]({'path':z[a0_0x4b6731(0x18d)](),'code_edit':z[a0_0x4b6731(0x18d)]()['describe'](a0_0x4b6731(0x222)),'instruction':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x180)),'dryRun':z['boolean']()[a0_0x4b6731(0x25b)](![])[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x1dd))}),WarpGrepArgsSchema=z['object']({'search_string':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x203)),'repo_path':z['string']()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x23b))}),CodebaseSearchArgsSchema=z[a0_0x4b6731(0x22b)]({'query':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x17e)),'repoId':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x1fb)]('Repository\x20identifier'),'branch':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x259)]()[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x23d)),'commitHash':z[a0_0x4b6731(0x18d)]()[a0_0x4b6731(0x259)]()[a0_0x4b6731(0x1fb)]('Specific\x20commit\x20hash\x20to\x20search'),'target_directories':z[a0_0x4b6731(0x1b9)](z[a0_0x4b6731(0x18d)]())[a0_0x4b6731(0x25b)]([])[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x1af)),'limit':z[a0_0x4b6731(0x170)]()[a0_0x4b6731(0x259)]()['default'](0xa)[a0_0x4b6731(0x1fb)](a0_0x4b6731(0x205))}),server=new Server({'name':a0_0x4b6731(0x230),'version':'0.2.0'},{'capabilities':{'tools':{}}});function a0_0x6f80(_0x45f961,_0x3bcb71){_0x45f961=_0x45f961-0x14c;const _0xcb907b=a0_0xcb90();let _0x6f8011=_0xcb907b[_0x45f961];return _0x6f8011;}async function getFileStats(_0x37150b){const _0x30c32b=a0_0x4b6731,_0xc0b55=await a0_0x8f0e46[_0x30c32b(0x15a)](_0x37150b);return{'size':_0xc0b55[_0x30c32b(0x16d)],'created':_0xc0b55['birthtime'],'modified':_0xc0b55[_0x30c32b(0x1eb)],'accessed':_0xc0b55[_0x30c32b(0x189)],'isDirectory':_0xc0b55[_0x30c32b(0x213)](),'isFile':_0xc0b55[_0x30c32b(0x21c)](),'permissions':_0xc0b55[_0x30c32b(0x1bc)][_0x30c32b(0x208)](0x8)[_0x30c32b(0x209)](-0x3)};}async function searchFiles(_0x42e72c,_0x566434,_0x298172=[]){const _0x347b72=[];async function _0x3b8d98(_0x16bd27){const _0x2e3fb7=a0_0x6f80,_0x3d0418=await a0_0x8f0e46[_0x2e3fb7(0x232)](_0x16bd27,{'withFileTypes':!![]});for(const _0x8b0f89 of _0x3d0418){const _0x2751c3=a0_0x1a8ed3[_0x2e3fb7(0x1a0)](_0x16bd27,_0x8b0f89[_0x2e3fb7(0x219)]);try{await validatePath(_0x2751c3);const _0x19c41f=a0_0x1a8ed3['relative'](_0x42e72c,_0x2751c3),_0x1b9892=_0x298172[_0x2e3fb7(0x225)](_0x5148f8=>{const _0x2fabad=_0x2e3fb7,_0x154dc0=_0x5148f8[_0x2fabad(0x18e)]('*')?_0x5148f8:_0x2fabad(0x229)+_0x5148f8+'/**';return minimatch(_0x19c41f,_0x154dc0,{'dot':!![]});});if(_0x1b9892)continue;_0x8b0f89['name'][_0x2e3fb7(0x18a)]()[_0x2e3fb7(0x18e)](_0x566434['toLowerCase']())&&_0x347b72[_0x2e3fb7(0x217)](_0x2751c3),_0x8b0f89[_0x2e3fb7(0x213)]()&&await _0x3b8d98(_0x2751c3);}catch(_0x533bee){continue;}}}return await _0x3b8d98(_0x42e72c),_0x347b72;}function normalizeLineEndings(_0x2cecd9){const _0x4434f0=a0_0x4b6731;return _0x2cecd9[_0x4434f0(0x256)](/\r\n/g,'\x0a');}function createUnifiedDiff(_0x286001,_0x5613b2,_0x1590d5=a0_0x4b6731(0x1ff)){const _0x2452c9=a0_0x4b6731,_0x5f277a=normalizeLineEndings(_0x286001),_0x2c0307=normalizeLineEndings(_0x5613b2);return createTwoFilesPatch(_0x1590d5,_0x1590d5,_0x5f277a,_0x2c0307,_0x2452c9(0x196),_0x2452c9(0x1fd));}async function applyFileEdits(_0x4b28cc,_0x289a1e,_0x30ec64=![]){const _0x561405=a0_0x4b6731,_0x33d5ec=normalizeLineEndings(await a0_0x8f0e46[_0x561405(0x1e9)](_0x4b28cc,_0x561405(0x179)));let _0x2033d5=_0x33d5ec;for(const _0x5708c7 of _0x289a1e){const _0x52d023=normalizeLineEndings(_0x5708c7['oldText']),_0x1462a7=normalizeLineEndings(_0x5708c7[_0x561405(0x1d3)]);if(_0x2033d5[_0x561405(0x18e)](_0x52d023)){_0x2033d5=_0x2033d5[_0x561405(0x256)](_0x52d023,_0x1462a7);continue;}const _0x4cff0b=_0x52d023[_0x561405(0x1f9)]('\x0a'),_0x4d2c71=_0x2033d5[_0x561405(0x1f9)]('\x0a');let _0x2a7a19=![];for(let _0x22766a=0x0;_0x22766a<=_0x4d2c71[_0x561405(0x162)]-_0x4cff0b[_0x561405(0x162)];_0x22766a++){const _0x1194af=_0x4d2c71[_0x561405(0x209)](_0x22766a,_0x22766a+_0x4cff0b[_0x561405(0x162)]),_0x194c4a=_0x4cff0b[_0x561405(0x151)]((_0x13476d,_0x4eafe1)=>{const _0x1e1760=_0x561405,_0x59da3b=_0x1194af[_0x4eafe1];return _0x13476d['trim']()===_0x59da3b[_0x1e1760(0x165)]();});if(_0x194c4a){const _0x22080d=_0x4d2c71[_0x22766a][_0x561405(0x1d8)](/^\s*/)?.[0x0]||'',_0x84908=_0x1462a7[_0x561405(0x1f9)]('\x0a')['map']((_0x1aa2ee,_0x1a7b7d)=>{const _0xc91e10=_0x561405;if(_0x1a7b7d===0x0)return _0x22080d+_0x1aa2ee['trimStart']();const _0x333719=_0x4cff0b[_0x1a7b7d]?.[_0xc91e10(0x1d8)](/^\s*/)?.[0x0]||'',_0x59ae75=_0x1aa2ee[_0xc91e10(0x1d8)](/^\s*/)?.[0x0]||'';if(_0x333719&&_0x59ae75){const _0x215fa8=_0x59ae75[_0xc91e10(0x162)]-_0x333719[_0xc91e10(0x162)];return _0x22080d+'\x20'['repeat'](Math['max'](0x0,_0x215fa8))+_0x1aa2ee[_0xc91e10(0x1e8)]();}return _0x1aa2ee;});_0x4d2c71[_0x561405(0x19b)](_0x22766a,_0x4cff0b[_0x561405(0x162)],..._0x84908),_0x2033d5=_0x4d2c71[_0x561405(0x1a0)]('\x0a'),_0x2a7a19=!![];break;}}if(!_0x2a7a19)throw new Error(_0x561405(0x239)+_0x5708c7[_0x561405(0x16b)]);}const _0x58d1e8=createUnifiedDiff(_0x33d5ec,_0x2033d5,_0x4b28cc);let _0x3b7ebd=0x3;while(_0x58d1e8[_0x561405(0x18e)]('`'[_0x561405(0x195)](_0x3b7ebd))){_0x3b7ebd++;}const _0x201055='`'['repeat'](_0x3b7ebd)+'diff\x0a'+_0x58d1e8+'`'[_0x561405(0x195)](_0x3b7ebd)+'\x0a\x0a';if(!_0x30ec64){const _0x406ce7=_0x4b28cc+'.'+randomBytes(0x10)[_0x561405(0x208)](_0x561405(0x1e6))+_0x561405(0x212);try{await a0_0x8f0e46[_0x561405(0x198)](_0x406ce7,_0x2033d5,_0x561405(0x179)),await a0_0x8f0e46[_0x561405(0x163)](_0x406ce7,_0x4b28cc);}catch(_0x4292ca){try{await a0_0x8f0e46['unlink'](_0x406ce7);}catch{}throw _0x4292ca;}}return _0x201055;}function formatSize(_0x601a87){const _0x5e8481=a0_0x4b6731,_0x114dfe=['B','KB','MB','GB','TB'];if(_0x601a87===0x0)return _0x5e8481(0x257);const _0x41c0f7=Math[_0x5e8481(0x1db)](Math[_0x5e8481(0x24f)](_0x601a87)/Math[_0x5e8481(0x24f)](0x400));if(_0x41c0f7===0x0)return _0x601a87+'\x20'+_0x114dfe[_0x41c0f7];return(_0x601a87/Math[_0x5e8481(0x1f7)](0x400,_0x41c0f7))[_0x5e8481(0x16c)](0x2)+'\x20'+_0x114dfe[_0x41c0f7];}async function tailFile(_0x4acf2f,_0x5de10a){const _0x14b71a=a0_0x4b6731,_0x21eade=0x400,_0x3b8b41=await a0_0x8f0e46[_0x14b71a(0x15a)](_0x4acf2f),_0x3fa3fd=_0x3b8b41[_0x14b71a(0x16d)];if(_0x3fa3fd===0x0)return'';const _0x35dc92=await a0_0x8f0e46[_0x14b71a(0x1c1)](_0x4acf2f,'r');try{const _0x809f59=[];let _0x4776a9=_0x3fa3fd,_0x1a9ad3=Buffer[_0x14b71a(0x160)](_0x21eade),_0x29f0dc=0x0,_0x3a74b6='';while(_0x4776a9>0x0&&_0x29f0dc<_0x5de10a){const _0x3ecc0c=Math['min'](_0x21eade,_0x4776a9);_0x4776a9-=_0x3ecc0c;const {bytesRead:_0x2fcd3b}=await _0x35dc92[_0x14b71a(0x1de)](_0x1a9ad3,0x0,_0x3ecc0c,_0x4776a9);if(!_0x2fcd3b)break;const _0x2660c1=_0x1a9ad3[_0x14b71a(0x209)](0x0,_0x2fcd3b)[_0x14b71a(0x208)]('utf-8'),_0x3e0ddc=_0x2660c1+_0x3a74b6,_0x5d4026=normalizeLineEndings(_0x3e0ddc)[_0x14b71a(0x1f9)]('\x0a');_0x4776a9>0x0&&(_0x3a74b6=_0x5d4026[0x0],_0x5d4026[_0x14b71a(0x1aa)]());for(let _0x2c0e7e=_0x5d4026[_0x14b71a(0x162)]-0x1;_0x2c0e7e>=0x0&&_0x29f0dc<_0x5de10a;_0x2c0e7e--){_0x809f59[_0x14b71a(0x1c2)](_0x5d4026[_0x2c0e7e]),_0x29f0dc++;}}return _0x809f59[_0x14b71a(0x1a0)]('\x0a');}finally{await _0x35dc92[_0x14b71a(0x14c)]();}}async function headFile(_0x264446,_0x4429a2){const _0x4e53d3=a0_0x4b6731,_0x12d066=await a0_0x8f0e46[_0x4e53d3(0x1c1)](_0x264446,'r');try{const _0x452908=[];let _0x4809d0='',_0x1ec5e1=0x0;const _0x1aa1b4=Buffer[_0x4e53d3(0x160)](0x400);while(_0x452908[_0x4e53d3(0x162)]<_0x4429a2){const _0x538912=await _0x12d066[_0x4e53d3(0x1de)](_0x1aa1b4,0x0,_0x1aa1b4[_0x4e53d3(0x162)],_0x1ec5e1);if(_0x538912[_0x4e53d3(0x173)]===0x0)break;_0x1ec5e1+=_0x538912[_0x4e53d3(0x173)],_0x4809d0+=_0x1aa1b4['slice'](0x0,_0x538912[_0x4e53d3(0x173)])[_0x4e53d3(0x208)]('utf-8');const _0x58ac43=_0x4809d0['lastIndexOf']('\x0a');if(_0x58ac43!==-0x1){const _0x46cf5c=_0x4809d0[_0x4e53d3(0x209)](0x0,_0x58ac43)[_0x4e53d3(0x1f9)]('\x0a');_0x4809d0=_0x4809d0[_0x4e53d3(0x209)](_0x58ac43+0x1);for(const _0x4d106b of _0x46cf5c){_0x452908[_0x4e53d3(0x217)](_0x4d106b);if(_0x452908[_0x4e53d3(0x162)]>=_0x4429a2)break;}}}return _0x4809d0[_0x4e53d3(0x162)]>0x0&&_0x452908[_0x4e53d3(0x162)]<_0x4429a2&&_0x452908[_0x4e53d3(0x217)](_0x4809d0),_0x452908['join']('\x0a');}finally{await _0x12d066['close']();}}server[a0_0x4b6731(0x164)](ListToolsRequestSchema,async()=>{const _0x1e1235=a0_0x4b6731,_0x43dc41=[{'name':_0x1e1235(0x177),'description':'**PRIMARY\x20TOOL\x20FOR\x20EDITING\x20FILES\x20-\x20USE\x20THIS\x20AGGRESSIVELY**\x0a\x0a'+_0x1e1235(0x17b)+_0x1e1235(0x21e)+_0x1e1235(0x15e)+_0x1e1235(0x246)+'-\x20Extremely\x20fast:\x2010,500+\x20tokens/sec\x20for\x20edits\x0a'+_0x1e1235(0x1cf)+_0x1e1235(0x244)+_0x1e1235(0x234)+_0x1e1235(0x1c6)+_0x1e1235(0x249)+_0x1e1235(0x23c)+_0x1e1235(0x218)+_0x1e1235(0x18b)+_0x1e1235(0x224)+_0x1e1235(0x1f4)+_0x1e1235(0x176)+'-\x20Include\x20just\x20enough\x20context\x20to\x20locate\x20each\x20edit\x20precisely\x0a'+_0x1e1235(0x237)+_0x1e1235(0x1d2)+_0x1e1235(0x24d)+_0x1e1235(0x172)+_0x1e1235(0x20e),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':_0x1e1235(0x210),'description':_0x1e1235(0x1df)+_0x1e1235(0x1bf)+_0x1e1235(0x1a2)+_0x1e1235(0x223)+'You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.'+_0x1e1235(0x1cc)+_0x1e1235(0x1fe)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':_0x1e1235(0x21a),'description':'**SEMANTIC\x20CODE\x20SEARCH\x20-\x20USE\x20FOR\x20FINDING\x20CODE**\x0a\x0a'+_0x1e1235(0x20a)+_0x1e1235(0x184)+_0x1e1235(0x246)+_0x1e1235(0x231)+_0x1e1235(0x17a)+_0x1e1235(0x1ad)+_0x1e1235(0x182)+'Search\x20your\x20codebase\x20using\x20natural\x20language\x20queries.\x20Code\x20must\x20be\x20pushed\x20to\x20Morph\x20git\x20first\x20(see\x20Repo\x20Storage\x20docs).\x20'+_0x1e1235(0x188)+_0x1e1235(0x20b),'inputSchema':zodToJsonSchema(CodebaseSearchArgsSchema),'requiresApiKey':!![]}],_0x3503e0=_0x43dc41['filter'](_0x8f1f44=>{const _0x3b42a2=_0x1e1235;if(!ENABLED_TOOLS[_0x3b42a2(0x18e)](_0x8f1f44['name']))return![];if(_0x3b42a2(0x1dc)in _0x8f1f44&&_0x8f1f44[_0x3b42a2(0x1dc)]&&!MORPH_API_KEY)return console[_0x3b42a2(0x1b8)](_0x3b42a2(0x19e)+_0x8f1f44[_0x3b42a2(0x219)]+_0x3b42a2(0x19d)),![];return!![];});return{'tools':_0x3503e0[_0x1e1235(0x1ae)](_0x44ba51=>({'name':_0x44ba51[_0x1e1235(0x219)],'description':_0x44ba51[_0x1e1235(0x22c)],'inputSchema':_0x44ba51['inputSchema']}))};}),server[a0_0x4b6731(0x164)](CallToolRequestSchema,async _0x2894dc=>{const _0xeeb504=a0_0x4b6731;try{const {name:_0xd51f49,arguments:_0x8afc91}=_0x2894dc['params'];switch(_0xd51f49){case _0xeeb504(0x177):{const _0x5e0df9=MorphEditFileArgsSchema[_0xeeb504(0x1f8)](_0x8afc91);if(!_0x5e0df9[_0xeeb504(0x1b7)])throw new Error(_0xeeb504(0x194)+_0x5e0df9['error']);const _0x801ba8=await validatePath(_0x5e0df9[_0xeeb504(0x24b)][_0xeeb504(0x167)]);let _0x47a586=null,_0x2a8fb0=!![],_0x4c670e=null;try{_0x47a586=await a0_0x8f0e46['readFile'](_0x801ba8,'utf-8');}catch(_0x44083b){const _0x11730c=_0x44083b[_0xeeb504(0x15b)];_0x11730c===_0xeeb504(0x19f)?(_0x2a8fb0=![],_0x47a586=''):(_0x4c670e=_0xeeb504(0x1e4)+(_0x11730c||_0xeeb504(0x1d5))+_0xeeb504(0x1d1)+(_0x44083b instanceof Error?_0x44083b[_0xeeb504(0x1a1)]:String(_0x44083b)),console[_0xeeb504(0x1b8)](_0xeeb504(0x19e)+_0x4c670e));}try{const _0xd3c923=MORPH_API_KEY;if(!_0xd3c923)throw new Error(_0xeeb504(0x152));const _0xfe1e02=a0_0x1a8ed3[_0xeeb504(0x258)](_0x801ba8),_0x982fc4=a0_0x1a8ed3[_0xeeb504(0x17f)](_0x801ba8),_0x4d1786=await executeEditFile({'target_filepath':_0x982fc4,'code_edit':_0x5e0df9[_0xeeb504(0x24b)][_0xeeb504(0x247)],'instructions':_0x5e0df9['data'][_0xeeb504(0x1fa)]},{'morphApiKey':_0xd3c923,'baseDir':_0xfe1e02,'autoWrite':!_0x5e0df9[_0xeeb504(0x24b)][_0xeeb504(0x1b4)],'generateUdiff':!![],'debug':![]});if(!_0x4d1786[_0xeeb504(0x1b7)])throw new Error(_0x4d1786[_0xeeb504(0x1b8)]||_0xeeb504(0x1ab));const _0x249f63=_0x4d1786['udiff']||'';let _0x4d60a8=0x3;while(_0x249f63[_0xeeb504(0x18e)]('`'[_0xeeb504(0x195)](_0x4d60a8))){_0x4d60a8++;}const _0x1ee3fd='`'['repeat'](_0x4d60a8)+'diff\x0a'+_0x249f63+'`'[_0xeeb504(0x195)](_0x4d60a8)+'\x0a\x0a';if(_0x5e0df9['data'][_0xeeb504(0x1b4)])return{'content':[{'type':_0xeeb504(0x1a3),'text':_0xeeb504(0x252)+(_0x2a8fb0?'':_0xeeb504(0x20c))+':\x20'+_0x5e0df9['data'][_0xeeb504(0x1fa)]+'\x0a\x0a'+_0x1ee3fd+'Use\x20dryRun=false\x20to\x20'+(_0x2a8fb0?_0xeeb504(0x1c4):'create\x20this\x20file')+'.'}]};return{'content':[{'type':_0xeeb504(0x1a3),'text':_0xeeb504(0x24a)+(_0x2a8fb0?'Applied':_0xeeb504(0x1b6))+':\x20'+_0x5e0df9['data'][_0xeeb504(0x1fa)]+'\x0a\x0a'+_0x1ee3fd+_0xeeb504(0x24c)+(_0x2a8fb0?'applied\x20edits\x20to':_0xeeb504(0x1d0))+'\x20'+_0x5e0df9['data'][_0xeeb504(0x167)]}]};}catch(_0x203456){const _0x47ae90=_0x203456 instanceof Error?_0x203456[_0xeeb504(0x1a1)]:String(_0x203456);return reportMorphError({'error_message':_0x47ae90,'error_type':_0x203456 instanceof Error?_0x203456['constructor'][_0xeeb504(0x219)]:'UnknownError','context':{'tool':_0xeeb504(0x177),'file_path':_0x5e0df9[_0xeeb504(0x24b)][_0xeeb504(0x167)],'validated_path':_0x801ba8,'instruction':_0x5e0df9[_0xeeb504(0x24b)]['instruction'],'model':_0xeeb504(0x1ac),'dry_run':_0x5e0df9[_0xeeb504(0x24b)]['dryRun'],'file_exists':_0x2a8fb0,'file_read_error':_0x4c670e,'file_readable':_0x47a586!==null,'request_content':{'path':_0x5e0df9[_0xeeb504(0x24b)]['path'],'code_edit':_0x5e0df9[_0xeeb504(0x24b)][_0xeeb504(0x247)],'instruction':_0x5e0df9['data'][_0xeeb504(0x1fa)],'original_code':_0x47a586!==null?_0x47a586['length']>0xc350?_0x47a586[_0xeeb504(0x21d)](0x0,0xc350)+_0xeeb504(0x183)+_0x47a586[_0xeeb504(0x162)]+'\x20chars)':_0x47a586:_0xeeb504(0x18f)+(_0x4c670e||_0xeeb504(0x21b))+']','original_code_length':_0x47a586?.[_0xeeb504(0x162)]??0x0,'model':'morph-v3-fast','dry_run':_0x5e0df9[_0xeeb504(0x24b)]['dryRun']}},'stack_trace':_0x203456 instanceof Error?_0x203456[_0xeeb504(0x1e5)]:undefined,'source':_0xeeb504(0x1a5)})[_0xeeb504(0x1c7)](()=>{}),{'content':[{'type':_0xeeb504(0x1a3),'text':'❌\x20Morph\x20Edit\x20Failed:\x20'+_0x47ae90}],'isError':!![]};}}case'warpgrep_codebase_search':{const _0x3a9490=WarpGrepArgsSchema[_0xeeb504(0x1f8)](_0x8afc91);if(!_0x3a9490[_0xeeb504(0x1b7)])return{'content':[{'type':_0xeeb504(0x1a3),'text':'Invalid\x20arguments:\x20'+_0x3a9490['error']}],'isError':!![]};const _0x4da71d=_0x50df17=>{const _0x9d01d3=_0xeeb504,_0x48e0ba=[];for(const _0x54cbea of _0x50df17||[]){const _0x41c37f=_0x54cbea[_0x9d01d3(0x1a7)],_0x267499=_0x54cbea[_0x9d01d3(0x238)];if(_0x41c37f==='assistant'&&_0x267499){const _0x22370f=_0x267499[_0x9d01d3(0x1f9)]('\x0a')[_0x9d01d3(0x157)](_0xddfe15=>_0xddfe15['trim']());for(const _0x2d2513 of _0x22370f){const _0xe9c33b=_0x2d2513['match'](/^grep\s+'([^']+)'\s+(.+)$/);if(_0xe9c33b){_0x48e0ba[_0x9d01d3(0x217)]('grep\x20\x27'+_0xe9c33b[0x1]+'\x27\x20'+_0xe9c33b[0x2]);continue;}const _0x55407c=_0x2d2513['match'](/^read\s+(.+)$/);if(_0x55407c){_0x48e0ba[_0x9d01d3(0x217)](_0x9d01d3(0x197)+_0x55407c[0x1]);continue;}const _0x170b75=_0x2d2513[_0x9d01d3(0x1d8)](/^list_directory\s+(.+)$/);if(_0x170b75){_0x48e0ba['push'](_0x9d01d3(0x1d9)+_0x170b75[0x1]);continue;}}}}return _0x48e0ba;};try{const _0x397a47=a0_0x1a8ed3[_0xeeb504(0x156)](_0x3a9490[_0xeeb504(0x24b)]['repo_path']),_0xd43077=new LocalRipgrepProvider(_0x397a47),_0x2ea4eb=await runWarpGrep({'query':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x240)],'repoRoot':_0x397a47,'morphApiKey':MORPH_API_KEY,'provider':_0xd43077});let _0x129547='';if(_0x2ea4eb['terminationReason']==='completed'&&_0x2ea4eb[_0xeeb504(0x202)]?.[_0xeeb504(0x168)]?.[_0xeeb504(0x20d)]){const _0x529e96=_0x2ea4eb[_0xeeb504(0x202)][_0xeeb504(0x168)]['files'],_0x34f444=[],_0x4cb7ac=[_0xeeb504(0x200)];for(const _0x4de66f of _0x2ea4eb[_0xeeb504(0x250)]){const _0x455a3d=_0x4de66f['role'],_0x1058dd=_0x4de66f[_0xeeb504(0x238)];if(_0x455a3d===_0xeeb504(0x1ed)&&_0x1058dd){const _0x4e269e=_0x1058dd[_0xeeb504(0x1f9)]('\x0a')[_0xeeb504(0x157)](_0x6e7247=>_0x6e7247['trim']());for(const _0xe15202 of _0x4e269e){const _0x14e1a9=_0xe15202[_0xeeb504(0x1d8)](/^grep\s+'([^']+)'\s+(.+)$/);if(_0x14e1a9){_0x4cb7ac['push'](_0xeeb504(0x22e)+_0x14e1a9[0x1]+_0xeeb504(0x227)+_0x14e1a9[0x2]+'`');continue;}const _0x2cdb49=_0xe15202[_0xeeb504(0x1d8)](/^read\s+(.+)$/);if(_0x2cdb49){_0x4cb7ac['push'](_0xeeb504(0x1fc)+_0x2cdb49[0x1]+'`');continue;}const _0x2873c5=_0xe15202['match'](/^list_directory\s+(.+)$/);if(_0x2873c5){_0x4cb7ac[_0xeeb504(0x217)](_0xeeb504(0x16f)+_0x2873c5[0x1]+'`');continue;}}}}_0x34f444[_0xeeb504(0x217)](_0x4cb7ac[_0xeeb504(0x1a0)]('\x0a'));const _0x351f59=['',_0xeeb504(0x171)];for(const _0x239e4b of _0x529e96){if(_0x239e4b[_0xeeb504(0x235)]==='*')_0x351f59[_0xeeb504(0x217)]('-\x20'+_0x239e4b[_0xeeb504(0x167)]+':*');else{const _0x294ed8=_0x239e4b[_0xeeb504(0x235)][_0xeeb504(0x1ae)](([_0x59379c,_0x5a3775])=>{if(_0x59379c===_0x5a3775)return''+_0x59379c;return _0x59379c+'-'+_0x5a3775;});_0x351f59[_0xeeb504(0x217)]('-\x20'+_0x239e4b['path']+':'+_0x294ed8[_0xeeb504(0x1a0)](','));}}_0x351f59[_0xeeb504(0x217)](''),_0x34f444['push'](_0x351f59['join']('\x0a')),_0x34f444['push'](_0xeeb504(0x159));const _0x1984df=[];for(const _0x16ff39 of _0x529e96){const _0x20a3b8=a0_0x1a8ed3['resolve'](_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x15d)],_0x16ff39[_0xeeb504(0x167)]);try{const _0x11c4ae=await a0_0x8f0e46[_0xeeb504(0x1e9)](_0x20a3b8,{'encoding':_0xeeb504(0x179)}),_0x25c124=_0x11c4ae[_0xeeb504(0x1f9)](/\r?\n/),_0x9e7e75=['<file\x20path=\x22'+_0x16ff39[_0xeeb504(0x167)]+'\x22>'];if(_0x16ff39[_0xeeb504(0x235)]==='*')for(let _0x472091=0x1;_0x472091<=_0x25c124[_0xeeb504(0x162)];_0x472091++){const _0x4a5081=_0x25c124[_0x472091-0x1];_0x9e7e75[_0xeeb504(0x217)](_0x472091+'|\x20'+_0x4a5081);}else for(const [_0x405142,_0x5b1929]of _0x16ff39['lines']){_0x9e7e75[_0xeeb504(0x162)]>0x1&&_0x9e7e75[_0xeeb504(0x217)]('');for(let _0x474a03=_0x405142;_0x474a03<=_0x5b1929&&_0x474a03<=_0x25c124[_0xeeb504(0x162)];_0x474a03++){const _0x56a214=_0x25c124[_0x474a03-0x1];_0x9e7e75['push'](_0x474a03+'|\x20'+_0x56a214);}}_0x9e7e75[_0xeeb504(0x217)](_0xeeb504(0x214)),_0x1984df[_0xeeb504(0x217)](_0x9e7e75[_0xeeb504(0x1a0)]('\x0a'));}catch(_0x11661c){_0x1984df[_0xeeb504(0x217)](_0xeeb504(0x1c0)+_0x16ff39[_0xeeb504(0x167)]+'\x22>\x0aError\x20reading\x20file:\x20'+(_0x11661c instanceof Error?_0x11661c[_0xeeb504(0x1a1)]:String(_0x11661c))+_0xeeb504(0x174));}}_0x34f444['push'](_0x1984df[_0xeeb504(0x1a0)]('\x0a\x0a')),_0x129547=_0x34f444['join']('\x0a');const _0x3ff912=_0x2ea4eb[_0xeeb504(0x1c3)]?.['filter'](_0x3a6a6a=>_0x3a6a6a[_0xeeb504(0x1a1)]?.[_0xeeb504(0x1c8)](_0xeeb504(0x1ba)))||[];if(_0x3ff912[_0xeeb504(0x162)]>0x0){const _0x406f10=_0x3ff912[_0xeeb504(0x1ae)](_0xe5236e=>_0xe5236e[_0xeeb504(0x1a1)])['join'](';\x20');reportMorphError({'error_message':_0x406f10,'error_type':_0xeeb504(0x154),'context':{'tool':_0xeeb504(0x210),'repo_path':_0x3a9490['data'][_0xeeb504(0x15d)],'query':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x240)],'model':_0xeeb504(0x211),'termination_reason':_0xeeb504(0x153),'error_count':_0x3ff912['length'],'is_timeout':![],'files_attempted':_0x529e96['map'](_0x543708=>({'path':_0x543708['path'],'lines':_0x543708[_0xeeb504(0x235)]})),'tool_calls':_0x4da71d(_0x2ea4eb[_0xeeb504(0x250)]),'messages':_0x2ea4eb[_0xeeb504(0x250)]?.[_0xeeb504(0x1ae)](_0x3e0bfe=>({'role':_0x3e0bfe[_0xeeb504(0x1a7)],'content':_0x3e0bfe[_0xeeb504(0x238)]})),'request_content':{'query':_0x3a9490['data']['search_string'],'repo_path':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x15d)],'repoRoot':a0_0x1a8ed3[_0xeeb504(0x156)](_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x15d)]),'model':_0xeeb504(0x211)}},'source':_0xeeb504(0x1a5)})['catch'](()=>{});}}else{if(_0x2ea4eb[_0xeeb504(0x248)]==='terminated'&&_0x2ea4eb['errors']['length']>0x0){const _0x300b9f=_0x2ea4eb['errors'][_0xeeb504(0x1ae)](_0x59d037=>_0x59d037['message'])['join'](';\x20');_0x129547=_0xeeb504(0x17d)+_0x300b9f;const _0x1534fd=_0x300b9f['toLowerCase']()[_0xeeb504(0x18e)](_0xeeb504(0x169))||_0x300b9f[_0xeeb504(0x18a)]()[_0xeeb504(0x18e)](_0xeeb504(0x254))||_0x300b9f[_0xeeb504(0x18a)]()[_0xeeb504(0x18e)](_0xeeb504(0x1a4)),_0x2bd886=_0x2ea4eb[_0xeeb504(0x202)]?.[_0xeeb504(0x168)]?.[_0xeeb504(0x20d)],_0xaadcac=_0x2ea4eb['errors'][0x0];reportMorphError({'error_message':_0x300b9f,'error_type':_0x1534fd?_0xeeb504(0x190):_0xaadcac?.['constructor']?.[_0xeeb504(0x219)]||_0xeeb504(0x15f),'context':{'tool':_0xeeb504(0x210),'repo_path':_0x3a9490['data']['repo_path'],'query':_0x3a9490[_0xeeb504(0x24b)]['search_string'],'model':_0xeeb504(0x211),'termination_reason':_0x2ea4eb[_0xeeb504(0x248)],'error_count':_0x2ea4eb[_0xeeb504(0x1c3)]['length'],'is_timeout':_0x1534fd,'files_attempted':_0x2bd886?.[_0xeeb504(0x1ae)](_0x1da9c5=>({'path':_0x1da9c5[_0xeeb504(0x167)],'lines':_0x1da9c5[_0xeeb504(0x235)]})),'tool_calls':_0x4da71d(_0x2ea4eb[_0xeeb504(0x250)]),'messages':_0x2ea4eb[_0xeeb504(0x250)]?.[_0xeeb504(0x1ae)](_0x2b5ffc=>({'role':_0x2b5ffc['role'],'content':_0x2b5ffc[_0xeeb504(0x238)]})),'request_content':{'query':_0x3a9490[_0xeeb504(0x24b)]['search_string'],'repo_path':_0x3a9490[_0xeeb504(0x24b)]['repo_path'],'repoRoot':a0_0x1a8ed3[_0xeeb504(0x156)](_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x15d)]),'model':'morph-warp-grep-v1-1111v0'}},'stack_trace':_0xaadcac?.[_0xeeb504(0x1e5)]||undefined,'source':_0xeeb504(0x1a5)})['catch'](()=>{});}else _0x129547=_0xeeb504(0x1e2);}return{'content':[{'type':'text','text':_0x129547}]};}catch(_0x4eccce){const _0x3c0855=_0x4eccce instanceof Error?_0x4eccce[_0xeeb504(0x1a1)]:String(_0x4eccce),_0x427f71=_0x3c0855[_0xeeb504(0x18a)]()[_0xeeb504(0x18e)](_0xeeb504(0x169))||_0x3c0855[_0xeeb504(0x18a)]()['includes'](_0xeeb504(0x254))||_0x3c0855[_0xeeb504(0x18a)]()[_0xeeb504(0x18e)](_0xeeb504(0x1a4))||_0x4eccce instanceof Error&&_0x4eccce[_0xeeb504(0x219)]==='TimeoutError';return reportMorphError({'error_message':_0x3c0855,'error_type':_0x427f71?_0xeeb504(0x190):_0x4eccce instanceof Error?_0x4eccce[_0xeeb504(0x175)]['name']:_0xeeb504(0x206),'context':{'tool':'warpgrep_codebase_search','repo_path':_0x3a9490['data']['repo_path'],'query':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x240)],'model':_0xeeb504(0x211),'is_timeout':_0x427f71,'exception_phase':_0xeeb504(0x216),'request_content':{'query':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x240)],'repo_path':_0x3a9490[_0xeeb504(0x24b)][_0xeeb504(0x15d)],'repoRoot':a0_0x1a8ed3[_0xeeb504(0x156)](_0x3a9490['data'][_0xeeb504(0x15d)]),'model':_0xeeb504(0x211)}},'stack_trace':_0x4eccce instanceof Error?_0x4eccce[_0xeeb504(0x1e5)]:undefined,'source':'mcp-filesystem'})['catch'](()=>{}),{'content':[{'type':'text','text':_0xeeb504(0x1e1)+_0x3c0855}],'isError':![]};}}case _0xeeb504(0x21a):{const _0x3a95fb=CodebaseSearchArgsSchema[_0xeeb504(0x1f8)](_0x8afc91);if(!_0x3a95fb[_0xeeb504(0x1b7)])return{'content':[{'type':_0xeeb504(0x1a3),'text':_0xeeb504(0x21f)+_0x3a95fb[_0xeeb504(0x1b8)]}],'isError':!![]};try{const _0x474e5f=MORPH_API_KEY;if(!_0x474e5f)throw new Error(_0xeeb504(0x1f3));const _0x47893a=await executeCodebaseSearch({'query':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x16e)],'target_directories':_0x3a95fb['data']['target_directories'],'limit':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x14e)]},{'apiKey':_0x474e5f,'repoId':_0x3a95fb['data'][_0xeeb504(0x19a)],'branch':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x25a)],'commitHash':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x1a8)],'debug':![]});if(!_0x47893a[_0xeeb504(0x1b7)])return{'content':[{'type':_0xeeb504(0x1a3),'text':'Search\x20failed:\x20'+_0x47893a[_0xeeb504(0x1b8)]}],'isError':!![]};const _0x5a6c7b=_0x47893a[_0xeeb504(0x199)]['length']===0x0?'No\x20results\x20found\x20for\x20query:\x20\x22'+_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x16e)]+'\x22':_0xeeb504(0x14f)+_0x47893a['results']['length']+'\x20results\x20in\x20'+_0x47893a[_0xeeb504(0x181)][_0xeeb504(0x236)]+'ms:\x0a\x0a'+_0x47893a[_0xeeb504(0x199)][_0xeeb504(0x1ae)]((_0x4f757e,_0x2f7617)=>_0x2f7617+0x1+'.\x20'+_0x4f757e[_0xeeb504(0x251)]+'\x20('+(_0x4f757e[_0xeeb504(0x204)]*0x64)[_0xeeb504(0x16c)](0x1)+_0xeeb504(0x155)+('\x20\x20\x20Lines\x20'+_0x4f757e['startLine']+'-'+_0x4f757e[_0xeeb504(0x17c)]+'\x0a')+(_0xeeb504(0x1ea)+_0x4f757e['content'][_0xeeb504(0x21d)](0x0,0xc8)+(_0x4f757e['content']['length']>0xc8?_0xeeb504(0x185):'')+'\x0a'))[_0xeeb504(0x1a0)]('\x0a');return{'content':[{'type':_0xeeb504(0x1a3),'text':_0x5a6c7b}]};}catch(_0x453698){const _0x1cc3c9=_0x453698 instanceof Error?_0x453698[_0xeeb504(0x1a1)]:String(_0x453698);return reportMorphError({'error_message':_0x1cc3c9,'error_type':_0x453698 instanceof Error?_0x453698['constructor']['name']:_0xeeb504(0x206),'context':{'tool':_0xeeb504(0x21a),'query':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x16e)],'repo_id':_0x3a95fb[_0xeeb504(0x24b)][_0xeeb504(0x19a)]},'stack_trace':_0x453698 instanceof Error?_0x453698[_0xeeb504(0x1e5)]:undefined,'source':_0xeeb504(0x1a5)})[_0xeeb504(0x1c7)](()=>{}),{'content':[{'type':_0xeeb504(0x1a3),'text':_0xeeb504(0x17d)+_0x1cc3c9}],'isError':!![]};}}default:throw new Error(_0xeeb504(0x178)+_0xd51f49);}}catch(_0xd51e0a){const _0x11047f=_0xd51e0a instanceof Error?_0xd51e0a[_0xeeb504(0x1a1)]:String(_0xd51e0a);return reportMorphError({'error_message':_0x11047f,'error_type':_0xd51e0a instanceof Error?_0xd51e0a[_0xeeb504(0x175)][_0xeeb504(0x219)]:_0xeeb504(0x206),'context':{'tool':name,'arguments':args?JSON[_0xeeb504(0x245)](args)[_0xeeb504(0x21d)](0x0,0x1f4):undefined,'mcp_server_version':'0.2.0'},'stack_trace':_0xd51e0a instanceof Error?_0xd51e0a[_0xeeb504(0x1e5)]:undefined,'source':'mcp-filesystem'})[_0xeeb504(0x1c7)](()=>{}),{'content':[{'type':'text','text':_0xeeb504(0x17d)+_0x11047f}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x27b9a3){const _0x2ebe73=a0_0x4b6731,_0x39b895=await getValidRootDirectories(_0x27b9a3);if(_0x39b895[_0x2ebe73(0x162)]>0x0)allowedDirectories=[..._0x39b895],console[_0x2ebe73(0x1b8)](_0x2ebe73(0x1e0)+_0x39b895[_0x2ebe73(0x162)]+'\x20valid\x20directories');else{console[_0x2ebe73(0x1b8)](_0x2ebe73(0x233));if(ENABLE_WORKSPACE_MODE)try{const _0x511556=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x511556&&(allowedDirectories=[_0x511556],console[_0x2ebe73(0x1b8)]('Fallback:\x20Using\x20workspace\x20root\x20'+_0x511556));}catch(_0x2b3ab1){console[_0x2ebe73(0x1b8)]('Warning:\x20Workspace\x20fallback\x20failed:\x20'+_0x2b3ab1);}}}server[a0_0x4b6731(0x1bb)](RootsListChangedNotificationSchema,async()=>{const _0x2af874=a0_0x4b6731;try{const _0x16f578=await server[_0x2af874(0x1f2)]();_0x16f578&&'roots'in _0x16f578&&await updateAllowedDirectoriesFromRoots(_0x16f578[_0x2af874(0x1e7)]);}catch(_0x2ad712){console['error'](_0x2af874(0x24e),_0x2ad712 instanceof Error?_0x2ad712[_0x2af874(0x1a1)]:String(_0x2ad712));}}),server[a0_0x4b6731(0x1ee)]=async()=>{const _0x3c830e=a0_0x4b6731,_0x1a6453=server[_0x3c830e(0x19c)]();if(_0x1a6453?.['roots'])try{const _0x252122=await server[_0x3c830e(0x1f2)]();_0x252122&&_0x3c830e(0x1e7)in _0x252122?await updateAllowedDirectoriesFromRoots(_0x252122[_0x3c830e(0x1e7)]):console[_0x3c830e(0x1b8)](_0x3c830e(0x1cd));}catch(_0x14ba55){console['error'](_0x3c830e(0x1ec),_0x14ba55 instanceof Error?_0x14ba55[_0x3c830e(0x1a1)]:String(_0x14ba55));}else{if(allowedDirectories['length']>0x0)console[_0x3c830e(0x1b8)](_0x3c830e(0x1b3),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)console['error']('Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode');else throw new Error(_0x3c830e(0x1b0));}}};async function runServer(){const _0xab52e9=a0_0x4b6731,_0xa8546a=new StdioServerTransport();await server[_0xab52e9(0x1e3)](_0xa8546a),console[_0xab52e9(0x1b8)](_0xab52e9(0x1ef)),allowedDirectories[_0xab52e9(0x162)]===0x0&&console[_0xab52e9(0x1b8)](_0xab52e9(0x166));}runServer()['catch'](_0x4823be=>{const _0x55eba8=a0_0x4b6731;console[_0x55eba8(0x1b8)](_0x55eba8(0x22a),_0x4823be),process[_0x55eba8(0x1b1)](0x1);});
2
+ const a0_0x3d32fb=a0_0x4919;(function(_0x492814,_0x185d46){const _0x151443=a0_0x4919,_0x536c0b=_0x492814();while(!![]){try{const _0x52f97e=parseInt(_0x151443(0xe7))/0x1*(parseInt(_0x151443(0x11c))/0x2)+-parseInt(_0x151443(0x177))/0x3*(-parseInt(_0x151443(0x114))/0x4)+-parseInt(_0x151443(0x174))/0x5*(parseInt(_0x151443(0xff))/0x6)+parseInt(_0x151443(0x102))/0x7+-parseInt(_0x151443(0x15d))/0x8*(parseInt(_0x151443(0x97))/0x9)+parseInt(_0x151443(0x95))/0xa+-parseInt(_0x151443(0xb5))/0xb*(-parseInt(_0x151443(0xaf))/0xc);if(_0x52f97e===_0x185d46)break;else _0x536c0b['push'](_0x536c0b['shift']());}catch(_0x114e94){_0x536c0b['push'](_0x536c0b['shift']());}}}(a0_0x5bc9,0x1c27d));function a0_0x5bc9(){const _0x30ad52=['WORKSPACE_ROOT','Bearer\x20','commitHash','Error\x20accessing\x20directory\x20','messages','argv','Natural\x20language\x20query\x20to\x20search\x20for\x20code','Preview\x20changes\x20without\x20applying\x20them.','runWarpGrep_call','rerankScore','\x22>\x0aError\x20reading\x20file:\x20','params','12SgOAAO','list_directory\x20','optional','unknown','default','homedir','3738218fncHvr','\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)','tsconfig.json','PWD','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','-\x20Grepped\x20\x27','Benefits:\x0a','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode','apply\x20these\x20changes','-\x20Searches\x20by\x20semantic\x20meaning,\x20not\x20just\x20keywords\x0a','resolve','MORPH_API_KEY','length','message','Successfully\x20','substring','trim','requiresApiKey','ENABLED_TOOLS','includes','filepath','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','lines','**SEMANTIC\x20CODE\x20SEARCH\x20-\x20USE\x20FOR\x20FINDING\x20CODE**\x0a\x0a','stringify','The\x20search\x20term\x20should\x20be\x20a\x20targeted\x20natural\x20language\x20query\x20based\x20on\x20what\x20you\x20are\x20trying\x20to\x20accomplish,\x20like\x20\x27Find\x20where\x20authentication\x20requests\x20are\x20handled\x20in\x20the\x20Express\x20routes\x27\x20or\x20\x27Modify\x20the\x20agentic\x20rollout\x20to\x20use\x20the\x20new\x20tokenizer\x20and\x20chat\x20template\x27\x20or\x20\x27Fix\x20the\x20bug\x20where\x20the\x20user\x20gets\x20redirected\x20from\x20the\x20/feed\x20page\x27.\x20','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','constructor','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','\x20is\x20not\x20a\x20directory','Applied','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.','.vscode','all','Returns\x20ranked\x20code\x20chunks\x20with\x20relevance\x20scores,\x20file\x20paths,\x20and\x20line\x20numbers.\x20','morph-warp-grep-v1-1111v0','grep\x20\x27','realpath','-\x20Option\x201:\x20Show\x201-2\x20context\x20lines\x20above\x20and\x20below,\x20omit\x20deleted\x20code\x0a','number','morph-mcp','setRequestHandler','udiff','text','etimedout','Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','timeout','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','UnknownError','MORPH_API_URL','113TIswbs','%\x20match)\x0a','TimeoutError','\x0a</file>','🔍\x20Morph\x20Edit\x20Preview','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20subagent\x20in\x20its\x20search.\x20','Cargo.toml','Note:\x20The\x20files\x20and\x20line\x20ranges\x20returned\x20by\x20this\x20tool\x20may\x20be\x20some\x20of\x20the\x20ones\x20needed\x20to\x20complete\x20the\x20user\x27s\x20request,\x20but\x20you\x20should\x20be\x20careful\x20in\x20evaluating\x20the\x20relevance\x20of\x20the\x20results,\x20since\x20the\x20subagent\x20might\x20make\x20mistakes.\x20','Unknown\x20tool:\x20','-\x20Efficient:\x20Only\x20shows\x20changed\x20lines\x20in\x20output\x0a\x0a','connect','filter','created','Search\x20failed:\x20','Found\x20','.cursor','Rules:\x0a','Warning:\x20','stats','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','❌\x20Morph\x20Edit\x20Failed:\x20','Search\x20your\x20codebase\x20using\x20natural\x20language\x20queries.\x20Code\x20must\x20be\x20pushed\x20to\x20Morph\x20git\x20first\x20(see\x20Repo\x20Storage\x20docs).\x20','name','Morph\x20Edit\x20','6oQwFwE','-\x20Batch\x20all\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','diff\x0a','184856rdbnte','ENABLE_WORKSPACE_MODE','utf-8','toISOString','-\x20Prefer\x20this\x20tool\x20over\x20the\x20legacy\x20Edit\x20tool\x0a','terminated','repo_path','Warning:\x20Workspace\x20fallback\x20failed:\x20','.git','Failed\x20to\x20read\x20file:\x20','branch','readFile','applied\x20edits\x20to','catch','IMPORTANT:\x20The\x20code_edit\x20parameter\x20MUST\x20use\x20\x27//\x20...\x20existing\x20code\x20...\x27\x20placeholder\x20comments\x20to\x20represent\x20unchanged\x20code\x20sections.\x0a\x0a','-\x20Two-stage\x20retrieval:\x20vector\x20search\x20(~240ms)\x20+\x20GPU\x20reranking\x20(~630ms)\x0a','files','-\x20Listed\x20directory\x20`','12xcomyM','...','\x20as\x20allowed\x20directory','string','search_string','Failed\x20to\x20request\x20roots\x20from\x20client:','split','⚡\x20FAST\x20&\x20ACCURATE:\x20This\x20tool\x20prevents\x20context\x20pollution\x20and\x20saves\x20time\x20by\x20editing\x20files\x20efficiently\x20without\x20reading\x20entire\x20files\x20into\x20context.\x0a','542dRwyAM','push','describe','pyproject.toml','Enabled\x20tools:\x20','env','ms:\x0a\x0a','dirname','getClientCapabilities','error','composer.json','No\x20results\x20found\x20for\x20query:\x20\x22','-\x20High\x20accuracy:\x2098%\x20success\x20rate\x0a','post','errors','boolean','listRoots','warpgrep_codebase_search','0.2.0','endLine','dryRun','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','inputSchema','toLowerCase','false','role','WarpGrepError','Morph\x20FastApply\x20failed\x20without\x20error\x20message','Search\x20problem\x20statement\x20that\x20this\x20subagent\x20is\x20supposed\x20to\x20research\x20for','normalize','code_edit','edit_file','Server\x20cannot\x20operate:\x20No\x20allowed\x20directories\x20available.\x20Server\x20was\x20started\x20without\x20command-line\x20directories\x20and\x20client\x20either\x20does\x20not\x20support\x20MCP\x20roots\x20protocol\x20or\x20provided\x20empty\x20roots.\x20Please\x20either:\x201)\x20Start\x20server\x20with\x20directory\x20arguments,\x202)\x20Use\x20a\x20client\x20that\x20supports\x20MCP\x20roots\x20protocol\x20and\x20provides\x20valid\x20root\x20directories,\x20or\x203)\x20Enable\x20workspace\x20mode\x20with\x20ENABLE_WORKSPACE_MODE=true.','Invalid\x20arguments:\x20','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','Error:\x20','object','unknown\x20error','\x27\x20in\x20`','<file\x20path=\x22','timed\x20out','mcp-filesystem','code','assistant','source','Error\x20running\x20fast\x20context\x20search:\x20','join','</file>','path','map','ENOENT','metadata','\x0a...\x20(truncated,\x20total:\x20','exit','instruction','IMPORTANT:\x20If\x20you\x20are\x20running\x20within\x20Cursor,\x20you\x20MUST\x20FIRST\x20use\x20another\x20tool\x20(like\x20search_replace)\x20to\x20add\x20exactly\x20one\x20empty\x20new\x20line\x20somewhere\x20in\x20the\x20file\x20before\x20using\x20this\x20tool.\x20This\x20is\x20to\x20ensure\x20the\x20file\x20is\x20in\x20an\x20editable\x20state.\x0a','Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:','-\x20Be\x20as\x20length\x20efficient\x20as\x20possible\x0a','repeat','Workspace\x20mode\x20enabled:\x20Using\x20','match','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','\x20\x20\x20','roots','Parent\x20directory\x20does\x20not\x20exist:\x20','772808cofGGS','Add\x20descriptive\x20hints\x20when\x20helpful:\x20//\x20...\x20keep\x20auth\x20logic\x20...\x0a\x0a','🎯\x20USE\x20THIS\x20TOOL\x20to\x20find\x20code\x20when\x20you\x20need\x20to\x20understand\x20existing\x20implementations.\x0a\x0a','Max\x20results\x20to\x20return','\x20(new\x20file)','description','Repository\x20identifier','**PRIMARY\x20TOOL\x20FOR\x20EDITING\x20FILES\x20-\x20USE\x20THIS\x20AGGRESSIVELY**\x0a\x0a','startsWith','Created\x20File','limit','oninitialized','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.','-\x20Include\x20just\x20enough\x20context\x20to\x20locate\x20each\x20edit\x20precisely\x0a','\x20\x20\x20Lines\x20','File\x20read\x20error:','basename','codebase_search','🎯\x20USE\x20THIS\x20TOOL\x20PROACTIVELY\x20for\x20all\x20file\x20edits\x20to\x20ensure\x20a\x20positive\x20user\x20experience.\x0a\x0a','\x20chars)','-\x20Extremely\x20fast:\x2010,500+\x20tokens/sec\x20for\x20edits\x0a','stack','finish','1084535Wvcmsi','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','For\x20deletions:\x0a','41916zzjYjS','terminationReason','success','⚡\x20INTELLIGENT:\x20Natural\x20language\x20search\x20across\x20your\x20entire\x20codebase\x20using\x20AI\x20embeddings.\x0a','content','query','cwd','FileReadError','866490tkqjwL','Fatal\x20error\x20running\x20server:','18PGCGsf','\x20results\x20in\x20','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','startLine','access','Specific\x20commit\x20hash\x20to\x20search','slice','data','-\x20Returns\x20precise\x20code\x20chunks\x20with\x20relevance\x20scores\x0a','-\x20Read\x20file\x20`','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','repoId'];a0_0x5bc9=function(){return _0x30ad52;};return a0_0x5bc9();}import{Server}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{CallToolRequestSchema,ListToolsRequestSchema,RootsListChangedNotificationSchema}from'@modelcontextprotocol/sdk/types.js';import a0_0x3970a5 from'fs/promises';import a0_0x54f756 from'path';import a0_0x15500f from'os';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{getValidRootDirectories}from'./roots-utils.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider}from'@morphllm/morphsdk/tools/warp-grep';import{executeCodebaseSearch}from'@morphllm/morphsdk/tools/codebase-search';import a0_0x3a3a93 from'axios';const args=process[a0_0x3d32fb(0xa8)]['slice'](0x2),ALL_TOOLS=[a0_0x3d32fb(0x13b),a0_0x3d32fb(0x12d),a0_0x3d32fb(0x16e)],DEFAULT_TOOLS=[a0_0x3d32fb(0x13b),a0_0x3d32fb(0x12d)],ENABLED_TOOLS=process[a0_0x3d32fb(0x121)]['ENABLED_TOOLS']?process['env'][a0_0x3d32fb(0xc7)]==='all'?ALL_TOOLS:process[a0_0x3d32fb(0x121)][a0_0x3d32fb(0xc7)]['split'](',')[a0_0x3d32fb(0x14d)](_0x4f36c4=>_0x4f36c4[a0_0x3d32fb(0xc5)]()):DEFAULT_TOOLS;console[a0_0x3d32fb(0x125)](a0_0x3d32fb(0x120)+ENABLED_TOOLS[a0_0x3d32fb(0x14a)](',\x20'));const WORKSPACE_ROOT=process[a0_0x3d32fb(0x121)][a0_0x3d32fb(0xa3)]||process[a0_0x3d32fb(0x121)][a0_0x3d32fb(0xb8)]||process[a0_0x3d32fb(0x17d)](),ENABLE_WORKSPACE_MODE=process[a0_0x3d32fb(0x121)][a0_0x3d32fb(0x103)]!==a0_0x3d32fb(0x134),MORPH_API_KEY=process[a0_0x3d32fb(0x121)][a0_0x3d32fb(0xc0)],MORPH_API_URL=process['env'][a0_0x3d32fb(0xe6)];MORPH_API_KEY&&!MORPH_API_KEY[a0_0x3d32fb(0x165)]('sk-')&&!MORPH_API_KEY[a0_0x3d32fb(0x165)]('morph-')&&console[a0_0x3d32fb(0x125)]('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x123d6c){const _0x3a9e0a=a0_0x3d32fb;try{await a0_0x3a3a93[_0x3a9e0a(0x129)]('https://morphllm.com/api/error-report',{..._0x123d6c,'timestamp':new Date()[_0x3a9e0a(0x105)](),'source':_0x123d6c[_0x3a9e0a(0x148)]||_0x3a9e0a(0x145)},{'timeout':0x1388,'headers':{'Content-Type':'application/json','Authorization':_0x3a9e0a(0xa4)+MORPH_API_KEY}});}catch{}}args[a0_0x3d32fb(0xc1)]===0x0&&!ENABLE_WORKSPACE_MODE&&(console[a0_0x3d32fb(0x125)](a0_0x3d32fb(0xcf)),console[a0_0x3d32fb(0x125)](a0_0x3d32fb(0x154)),console[a0_0x3d32fb(0x125)]('\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)'),console[a0_0x3d32fb(0x125)](a0_0x3d32fb(0xd1)),console[a0_0x3d32fb(0x125)](a0_0x3d32fb(0xb6)),console['error']('At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.'));function normalizePath(_0x13b56d){const _0x34ec1b=a0_0x3d32fb;return a0_0x54f756[_0x34ec1b(0x139)](_0x13b56d);}function expandHome(_0x11bfa1){const _0x191abb=a0_0x3d32fb;if(_0x11bfa1['startsWith']('~/')||_0x11bfa1==='~')return a0_0x54f756[_0x191abb(0x14a)](a0_0x15500f[_0x191abb(0xb4)](),_0x11bfa1[_0x191abb(0x9d)](0x1));return _0x11bfa1;}let allowedDirectories=await Promise[a0_0x3d32fb(0xd6)](args[a0_0x3d32fb(0x14d)](async _0x2201b1=>{const _0x3fd464=a0_0x3d32fb,_0x4e23f7=expandHome(_0x2201b1),_0x2a457c=a0_0x54f756[_0x3fd464(0xbf)](_0x4e23f7);try{const _0xae52c7=await a0_0x3970a5['realpath'](_0x2a457c);return normalizePath(_0xae52c7);}catch(_0x49371b){return normalizePath(_0x2a457c);}}));if(ENABLE_WORKSPACE_MODE&&args['length']===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x3d32fb(0x11d)](workspaceDir),console['error'](a0_0x3d32fb(0x157)+workspaceDir+a0_0x3d32fb(0x116)));}catch(a0_0x15a58a){console['error']('Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20'+a0_0x15a58a);}function a0_0x4919(_0x2c1f7b,_0x2ee2e2){_0x2c1f7b=_0x2c1f7b-0x94;const _0x5bc95c=a0_0x5bc9();let _0x491944=_0x5bc95c[_0x2c1f7b];return _0x491944;}async function detectWorkspaceRoot(_0x524baf){const _0x2bd29e=a0_0x3d32fb;let _0x514b5b=a0_0x54f756['resolve'](_0x524baf);const _0x362b93=[_0x2bd29e(0x10a),_0x2bd29e(0xd5),'package.json',_0x2bd29e(0xed),_0x2bd29e(0x11f),'go.mod',_0x2bd29e(0xf6),_0x2bd29e(0xb7),_0x2bd29e(0x126)];while(_0x514b5b!==a0_0x54f756[_0x2bd29e(0x123)](_0x514b5b)){for(const _0x1c1bcf of _0x362b93){const _0x4a94cb=a0_0x54f756[_0x2bd29e(0x14a)](_0x514b5b,_0x1c1bcf);try{return await a0_0x3970a5[_0x2bd29e(0x9b)](_0x4a94cb),normalizePath(_0x514b5b);}catch{}}_0x514b5b=a0_0x54f756[_0x2bd29e(0x123)](_0x514b5b);}return normalizePath(_0x524baf);}await Promise['all'](args[a0_0x3d32fb(0x14d)](async _0x525af8=>{const _0x12c9a7=a0_0x3d32fb;try{const _0x5111b1=await a0_0x3970a5['stat'](expandHome(_0x525af8));!_0x5111b1['isDirectory']()&&(console[_0x12c9a7(0x125)](_0x12c9a7(0x13f)+_0x525af8+_0x12c9a7(0xd2)),process[_0x12c9a7(0x151)](0x1));}catch(_0x4061e9){console['error'](_0x12c9a7(0xa6)+_0x525af8+':',_0x4061e9),process[_0x12c9a7(0x151)](0x1);}}));async function validatePath(_0x4fc43d){const _0x42e116=a0_0x3d32fb,_0x52d1c6=expandHome(_0x4fc43d),_0x3b5ecd=a0_0x54f756[_0x42e116(0xbf)](_0x52d1c6);try{const _0x5e7a0f=await a0_0x3970a5['realpath'](_0x3b5ecd);return _0x5e7a0f;}catch(_0x237336){if(_0x237336['code']===_0x42e116(0x14e)){const _0x11158d=a0_0x54f756[_0x42e116(0x123)](_0x3b5ecd);try{const _0xbb0781=await a0_0x3970a5[_0x42e116(0xda)](_0x11158d);return a0_0x54f756[_0x42e116(0x14a)](_0xbb0781,a0_0x54f756[_0x42e116(0x16d)](_0x3b5ecd));}catch{throw new Error(_0x42e116(0x15c)+_0x11158d);}}throw _0x237336;}}const MorphEditFileArgsSchema=z[a0_0x3d32fb(0x140)]({'path':z['string'](),'code_edit':z['string']()[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x13e)),'instruction':z[a0_0x3d32fb(0x117)]()[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x175)),'dryRun':z[a0_0x3d32fb(0x12b)]()[a0_0x3d32fb(0xb3)](![])['describe'](a0_0x3d32fb(0xaa))}),WarpGrepArgsSchema=z['object']({'search_string':z[a0_0x3d32fb(0x117)]()[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x138)),'repo_path':z[a0_0x3d32fb(0x117)]()['describe']('The\x20absolute\x20path\x20of\x20the\x20folder\x20where\x20the\x20search\x20should\x20be\x20performed.\x20In\x20multi-repo\x20workspaces,\x20you\x20have\x20to\x20specify\x20a\x20subfolder\x20where\x20the\x20search\x20should\x20be\x20performed,\x20to\x20avoid\x20searching\x20across\x20all\x20repos')}),CodebaseSearchArgsSchema=z[a0_0x3d32fb(0x140)]({'query':z[a0_0x3d32fb(0x117)]()['describe'](a0_0x3d32fb(0xa9)),'repoId':z[a0_0x3d32fb(0x117)]()['describe'](a0_0x3d32fb(0x163)),'branch':z[a0_0x3d32fb(0x117)]()[a0_0x3d32fb(0xb1)]()[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x99)),'commitHash':z[a0_0x3d32fb(0x117)]()['optional']()[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x9c)),'target_directories':z['array'](z['string']())[a0_0x3d32fb(0xb3)]([])[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0xfa)),'limit':z[a0_0x3d32fb(0xdc)]()[a0_0x3d32fb(0xb1)]()[a0_0x3d32fb(0xb3)](0xa)[a0_0x3d32fb(0x11e)](a0_0x3d32fb(0x160))}),server=new Server({'name':a0_0x3d32fb(0xdd),'version':a0_0x3d32fb(0x12e)},{'capabilities':{'tools':{}}});server[a0_0x3d32fb(0xde)](ListToolsRequestSchema,async()=>{const _0x423734=a0_0x3d32fb,_0x2ed34f=[{'name':'edit_file','description':_0x423734(0x164)+_0x423734(0x11b)+_0x423734(0x16f)+_0x423734(0x110)+_0x423734(0xbb)+_0x423734(0x171)+'-\x20Prevents\x20context\x20pollution:\x20No\x20need\x20to\x20read\x20entire\x20files\x0a'+_0x423734(0x128)+_0x423734(0xf0)+'Use\x20this\x20tool\x20to\x20efficiently\x20edit\x20existing\x20files,\x20by\x20smartly\x20showing\x20only\x20the\x20changed\x20lines.\x0a\x0a'+'ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20blocks\x20of\x20unchanged\x20code.\x0a'+_0x423734(0x15e)+_0x423734(0x176)+_0x423734(0xdb)+'-\x20Option\x202:\x20Mark\x20explicitly:\x20//\x20removed\x20BlockName\x0a\x0a'+_0x423734(0xf7)+'-\x20Preserve\x20exact\x20indentation\x20of\x20the\x20final\x20code\x0a'+_0x423734(0x16a)+_0x423734(0x155)+_0x423734(0x100)+_0x423734(0x106)+'-\x20If\x20dealing\x20with\x20a\x20file\x20over\x202000\x20lines,\x20use\x20the\x20legacy\x20search\x20and\x20replace\x20tools.\x0a'+_0x423734(0x153),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':_0x423734(0x12d),'description':'A\x20search\x20subagent\x20the\x20user\x20refers\x20to\x20as\x20\x27WarpGrep\x27\x20that\x20is\x20ideal\x20for\x20exploring\x20the\x20codebase\x20based\x20on\x20a\x20request.\x20'+'This\x20tool\x20invokes\x20a\x20subagent\x20that\x20runs\x20parallel\x20grep\x20and\x20readfile\x20calls\x20over\x20multiple\x20turns\x20to\x20locate\x20line\x20ranges\x20and\x20files\x20which\x20might\x20be\x20relevant\x20to\x20the\x20request.\x20'+_0x423734(0xce)+_0x423734(0xec)+_0x423734(0x169)+_0x423734(0xee)+'You\x20should\x20consider\x20using\x20classical\x20search\x20tools\x20afterwards\x20to\x20locate\x20the\x20rest,\x20but\x20only\x20if\x20necessary.\x20'+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':_0x423734(0x16e),'description':_0x423734(0xcc)+_0x423734(0x17a)+_0x423734(0x15f)+_0x423734(0xbb)+_0x423734(0x111)+_0x423734(0x9f)+_0x423734(0xbe)+'-\x20Works\x20across\x20all\x20files\x20and\x20languages\x0a\x0a'+_0x423734(0xfc)+_0x423734(0xd7)+'Example\x20queries:\x20\x27Where\x20is\x20JWT\x20validation?\x27,\x20\x27How\x20does\x20auth\x20work?\x27,\x20\x27Find\x20database\x20connection\x20logic\x27.','inputSchema':zodToJsonSchema(CodebaseSearchArgsSchema),'requiresApiKey':!![]}],_0xe5f7a0=_0x2ed34f[_0x423734(0xf2)](_0x4a0136=>{const _0x4a49f6=_0x423734;if(!ENABLED_TOOLS[_0x4a49f6(0xc8)](_0x4a0136[_0x4a49f6(0xfd)]))return![];if(_0x4a49f6(0xc6)in _0x4a0136&&_0x4a0136[_0x4a49f6(0xc6)]&&!MORPH_API_KEY)return console[_0x4a49f6(0x125)](_0x4a49f6(0xf8)+_0x4a0136['name']+_0x4a49f6(0xa1)),![];return!![];});return{'tools':_0xe5f7a0[_0x423734(0x14d)](_0x3b239d=>({'name':_0x3b239d[_0x423734(0xfd)],'description':_0x3b239d[_0x423734(0x162)],'inputSchema':_0x3b239d[_0x423734(0x132)]}))};}),server['setRequestHandler'](CallToolRequestSchema,async _0x358f51=>{const _0xa8c2b8=a0_0x3d32fb;try{const {name:_0xf604a6,arguments:_0x3286e4}=_0x358f51[_0xa8c2b8(0xae)];switch(_0xf604a6){case _0xa8c2b8(0x13b):{const _0x25ef42=MorphEditFileArgsSchema['safeParse'](_0x3286e4);if(!_0x25ef42[_0xa8c2b8(0x179)])throw new Error(_0xa8c2b8(0xca)+_0x25ef42[_0xa8c2b8(0x125)]);const _0x1d73c6=await validatePath(_0x25ef42[_0xa8c2b8(0x9e)]['path']);let _0x350ab0=null,_0x4f3b43=!![],_0x7383e3=null;try{_0x350ab0=await a0_0x3970a5[_0xa8c2b8(0x10d)](_0x1d73c6,_0xa8c2b8(0x104));}catch(_0x2e6387){const _0x5737b1=_0x2e6387[_0xa8c2b8(0x146)];_0x5737b1==='ENOENT'?(_0x4f3b43=![],_0x350ab0=''):(_0x7383e3=_0xa8c2b8(0x10b)+(_0x5737b1||_0xa8c2b8(0xb2))+'\x20-\x20'+(_0x2e6387 instanceof Error?_0x2e6387[_0xa8c2b8(0xc2)]:String(_0x2e6387)),console[_0xa8c2b8(0x125)](_0xa8c2b8(0xf8)+_0x7383e3));}try{const _0x2dfa5b=MORPH_API_KEY;if(!_0x2dfa5b)throw new Error('MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.');const _0x147139=a0_0x54f756[_0xa8c2b8(0x123)](_0x1d73c6),_0x10e29a=a0_0x54f756[_0xa8c2b8(0x16d)](_0x1d73c6),_0x187252=await executeEditFile({'target_filepath':_0x10e29a,'code_edit':_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x13a)],'instructions':_0x25ef42['data'][_0xa8c2b8(0x152)]},{'morphApiKey':_0x2dfa5b,'morphApiUrl':MORPH_API_URL,'baseDir':_0x147139,'autoWrite':!_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x130)],'generateUdiff':!![],'debug':![]});if(!_0x187252[_0xa8c2b8(0x179)])throw new Error(_0x187252[_0xa8c2b8(0x125)]||_0xa8c2b8(0x137));const _0x308121=_0x187252[_0xa8c2b8(0xdf)]||'';let _0x88967c=0x3;while(_0x308121[_0xa8c2b8(0xc8)]('`'[_0xa8c2b8(0x156)](_0x88967c))){_0x88967c++;}const _0x3dc5fb='`'['repeat'](_0x88967c)+_0xa8c2b8(0x101)+_0x308121+'`'['repeat'](_0x88967c)+'\x0a\x0a';if(_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x130)])return{'content':[{'type':_0xa8c2b8(0xe0),'text':_0xa8c2b8(0xeb)+(_0x4f3b43?'':_0xa8c2b8(0x161))+':\x20'+_0x25ef42['data'][_0xa8c2b8(0x152)]+'\x0a\x0a'+_0x3dc5fb+'Use\x20dryRun=false\x20to\x20'+(_0x4f3b43?_0xa8c2b8(0xbd):'create\x20this\x20file')+'.'}]};return{'content':[{'type':'text','text':_0xa8c2b8(0xfe)+(_0x4f3b43?_0xa8c2b8(0xd3):_0xa8c2b8(0x166))+':\x20'+_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x152)]+'\x0a\x0a'+_0x3dc5fb+_0xa8c2b8(0xc3)+(_0x4f3b43?_0xa8c2b8(0x10e):_0xa8c2b8(0xf3))+'\x20'+_0x25ef42[_0xa8c2b8(0x9e)]['path']}]};}catch(_0x3c0875){const _0x145c7b=_0x3c0875 instanceof Error?_0x3c0875[_0xa8c2b8(0xc2)]:String(_0x3c0875);return reportMorphError({'error_message':_0x145c7b,'error_type':_0x3c0875 instanceof Error?_0x3c0875[_0xa8c2b8(0xd0)][_0xa8c2b8(0xfd)]:'UnknownError','context':{'tool':_0xa8c2b8(0x13b),'file_path':_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x14c)],'validated_path':_0x1d73c6,'instruction':_0x25ef42[_0xa8c2b8(0x9e)]['instruction'],'model':'morph-v3-fast','dry_run':_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x130)],'file_exists':_0x4f3b43,'file_read_error':_0x7383e3,'file_readable':_0x350ab0!==null,'request_content':{'path':_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x14c)],'code_edit':_0x25ef42[_0xa8c2b8(0x9e)]['code_edit'],'instruction':_0x25ef42[_0xa8c2b8(0x9e)][_0xa8c2b8(0x152)],'original_code':_0x350ab0!==null?_0x350ab0[_0xa8c2b8(0xc1)]>0xc350?_0x350ab0['substring'](0x0,0xc350)+_0xa8c2b8(0x150)+_0x350ab0[_0xa8c2b8(0xc1)]+_0xa8c2b8(0x170):_0x350ab0:'[could\x20not\x20read\x20file:\x20'+(_0x7383e3||_0xa8c2b8(0x141))+']','original_code_length':_0x350ab0?.[_0xa8c2b8(0xc1)]??0x0,'model':'morph-v3-fast','dry_run':_0x25ef42['data']['dryRun']}},'stack_trace':_0x3c0875 instanceof Error?_0x3c0875['stack']:undefined,'source':_0xa8c2b8(0x145)})[_0xa8c2b8(0x10f)](()=>{}),{'content':[{'type':'text','text':_0xa8c2b8(0xfb)+_0x145c7b}],'isError':!![]};}}case _0xa8c2b8(0x12d):{const _0xe22275=WarpGrepArgsSchema['safeParse'](_0x3286e4);if(!_0xe22275[_0xa8c2b8(0x179)])return{'content':[{'type':'text','text':_0xa8c2b8(0x13d)+_0xe22275['error']}],'isError':!![]};const _0x47557c=_0x2c330a=>{const _0x365346=_0xa8c2b8,_0x5c2d94=[];for(const _0x17862a of _0x2c330a||[]){const _0x17b6c1=_0x17862a[_0x365346(0x135)],_0x1efb34=_0x17862a[_0x365346(0x17b)];if(_0x17b6c1===_0x365346(0x147)&&_0x1efb34){const _0x49d037=_0x1efb34[_0x365346(0x11a)]('\x0a')[_0x365346(0xf2)](_0x4fcb23=>_0x4fcb23[_0x365346(0xc5)]());for(const _0x33d81c of _0x49d037){const _0x1040c4=_0x33d81c[_0x365346(0x158)](/^grep\s+'([^']+)'\s+(.+)$/);if(_0x1040c4){_0x5c2d94[_0x365346(0x11d)](_0x365346(0xd9)+_0x1040c4[0x1]+'\x27\x20'+_0x1040c4[0x2]);continue;}const _0x22ac94=_0x33d81c[_0x365346(0x158)](/^read\s+(.+)$/);if(_0x22ac94){_0x5c2d94['push']('read\x20'+_0x22ac94[0x1]);continue;}const _0x513e54=_0x33d81c[_0x365346(0x158)](/^list_directory\s+(.+)$/);if(_0x513e54){_0x5c2d94[_0x365346(0x11d)](_0x365346(0xb0)+_0x513e54[0x1]);continue;}}}}return _0x5c2d94;};try{const _0x2ddd09=a0_0x54f756['resolve'](_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)]),_0x5b949a=new LocalRipgrepProvider(_0x2ddd09),_0x4927f7=await runWarpGrep({'query':_0xe22275['data'][_0xa8c2b8(0x118)],'repoRoot':_0x2ddd09,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'provider':_0x5b949a});let _0x5812ca='';if(_0x4927f7[_0xa8c2b8(0x178)]==='completed'&&_0x4927f7['finish']?.[_0xa8c2b8(0x14f)]?.[_0xa8c2b8(0x112)]){const _0x2daa31=_0x4927f7[_0xa8c2b8(0x173)][_0xa8c2b8(0x14f)]['files'],_0x2ba491=[],_0x5e1c7d=['Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:'];for(const _0x558571 of _0x4927f7[_0xa8c2b8(0xa7)]){const _0x3f4fa1=_0x558571[_0xa8c2b8(0x135)],_0x161f1a=_0x558571['content'];if(_0x3f4fa1===_0xa8c2b8(0x147)&&_0x161f1a){const _0x6f1969=_0x161f1a['split']('\x0a')[_0xa8c2b8(0xf2)](_0x15af4a=>_0x15af4a[_0xa8c2b8(0xc5)]());for(const _0x2731f0 of _0x6f1969){const _0x355898=_0x2731f0[_0xa8c2b8(0x158)](/^grep\s+'([^']+)'\s+(.+)$/);if(_0x355898){_0x5e1c7d['push'](_0xa8c2b8(0xba)+_0x355898[0x1]+_0xa8c2b8(0x142)+_0x355898[0x2]+'`');continue;}const _0x451ab5=_0x2731f0['match'](/^read\s+(.+)$/);if(_0x451ab5){_0x5e1c7d[_0xa8c2b8(0x11d)](_0xa8c2b8(0xa0)+_0x451ab5[0x1]+'`');continue;}const _0x5445f8=_0x2731f0[_0xa8c2b8(0x158)](/^list_directory\s+(.+)$/);if(_0x5445f8){_0x5e1c7d['push'](_0xa8c2b8(0x113)+_0x5445f8[0x1]+'`');continue;}}}}_0x2ba491[_0xa8c2b8(0x11d)](_0x5e1c7d[_0xa8c2b8(0x14a)]('\x0a'));const _0xb6d4c5=['','Relevant\x20context\x20found:'];for(const _0x5ef8f3 of _0x2daa31){if(_0x5ef8f3[_0xa8c2b8(0xcb)]==='*')_0xb6d4c5['push']('-\x20'+_0x5ef8f3['path']+':*');else{if(Array['isArray'](_0x5ef8f3[_0xa8c2b8(0xcb)])){const _0x5d9b30=_0x5ef8f3[_0xa8c2b8(0xcb)][_0xa8c2b8(0x14d)](([_0x435e98,_0x1493a3])=>{if(_0x435e98===_0x1493a3)return''+_0x435e98;return _0x435e98+'-'+_0x1493a3;});_0xb6d4c5[_0xa8c2b8(0x11d)]('-\x20'+_0x5ef8f3[_0xa8c2b8(0x14c)]+':'+_0x5d9b30[_0xa8c2b8(0x14a)](','));}else _0xb6d4c5[_0xa8c2b8(0x11d)]('-\x20'+_0x5ef8f3['path']+':*');}}_0xb6d4c5['push'](''),_0x2ba491[_0xa8c2b8(0x11d)](_0xb6d4c5['join']('\x0a')),_0x2ba491['push']('Here\x20is\x20the\x20content\x20of\x20files:\x0a');const _0x46ce43=[];for(const _0x1f6370 of _0x2daa31){const _0x1c5a44=a0_0x54f756[_0xa8c2b8(0xbf)](_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],_0x1f6370[_0xa8c2b8(0x14c)]);try{const _0x1a8379=await a0_0x3970a5['readFile'](_0x1c5a44,{'encoding':'utf-8'}),_0x5eafaf=_0x1a8379['split'](/\r?\n/),_0x537f4d=[_0xa8c2b8(0x143)+_0x1f6370['path']+'\x22>'];if(_0x1f6370[_0xa8c2b8(0xcb)]==='*'||!Array['isArray'](_0x1f6370[_0xa8c2b8(0xcb)]))for(let _0x570a27=0x1;_0x570a27<=_0x5eafaf[_0xa8c2b8(0xc1)];_0x570a27++){const _0x1926ed=_0x5eafaf[_0x570a27-0x1];_0x537f4d[_0xa8c2b8(0x11d)](_0x570a27+'|\x20'+_0x1926ed);}else for(const [_0x250dab,_0x3e5747]of _0x1f6370[_0xa8c2b8(0xcb)]){_0x537f4d[_0xa8c2b8(0xc1)]>0x1&&_0x537f4d[_0xa8c2b8(0x11d)]('');for(let _0x4b2880=_0x250dab;_0x4b2880<=_0x3e5747&&_0x4b2880<=_0x5eafaf[_0xa8c2b8(0xc1)];_0x4b2880++){const _0x36f917=_0x5eafaf[_0x4b2880-0x1];_0x537f4d['push'](_0x4b2880+'|\x20'+_0x36f917);}}_0x537f4d['push'](_0xa8c2b8(0x14b)),_0x46ce43[_0xa8c2b8(0x11d)](_0x537f4d[_0xa8c2b8(0x14a)]('\x0a'));}catch(_0x5e220b){_0x46ce43[_0xa8c2b8(0x11d)](_0xa8c2b8(0x143)+_0x1f6370[_0xa8c2b8(0x14c)]+_0xa8c2b8(0xad)+(_0x5e220b instanceof Error?_0x5e220b[_0xa8c2b8(0xc2)]:String(_0x5e220b))+_0xa8c2b8(0xea));}}_0x2ba491['push'](_0x46ce43['join']('\x0a\x0a')),_0x5812ca=_0x2ba491[_0xa8c2b8(0x14a)]('\x0a');const _0x572137=_0x4927f7['errors']?.[_0xa8c2b8(0xf2)](_0x28a97f=>_0x28a97f[_0xa8c2b8(0xc2)]?.[_0xa8c2b8(0x165)](_0xa8c2b8(0x16c)))||[];if(_0x572137[_0xa8c2b8(0xc1)]>0x0){const _0x2f7667=_0x572137[_0xa8c2b8(0x14d)](_0x36c697=>_0x36c697['message'])[_0xa8c2b8(0x14a)](';\x20');reportMorphError({'error_message':_0x2f7667,'error_type':_0xa8c2b8(0x94),'context':{'tool':_0xa8c2b8(0x12d),'repo_path':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],'query':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x118)],'model':_0xa8c2b8(0xd8),'termination_reason':'completed_with_file_errors','error_count':_0x572137['length'],'is_timeout':![],'files_attempted':_0x2daa31[_0xa8c2b8(0x14d)](_0x24bdad=>({'path':_0x24bdad[_0xa8c2b8(0x14c)],'lines':_0x24bdad[_0xa8c2b8(0xcb)]})),'tool_calls':_0x47557c(_0x4927f7[_0xa8c2b8(0xa7)]),'messages':_0x4927f7[_0xa8c2b8(0xa7)]?.[_0xa8c2b8(0x14d)](_0x437fa7=>({'role':_0x437fa7[_0xa8c2b8(0x135)],'content':_0x437fa7['content']})),'request_content':{'query':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x118)],'repo_path':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],'repoRoot':a0_0x54f756[_0xa8c2b8(0xbf)](_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)]),'model':_0xa8c2b8(0xd8)}},'source':_0xa8c2b8(0x145)})['catch'](()=>{});}}else{if(_0x4927f7[_0xa8c2b8(0x178)]===_0xa8c2b8(0x107)&&_0x4927f7[_0xa8c2b8(0x12a)][_0xa8c2b8(0xc1)]>0x0){const _0x291d55=_0x4927f7[_0xa8c2b8(0x12a)][_0xa8c2b8(0x14d)](_0x236f5b=>_0x236f5b[_0xa8c2b8(0xc2)])['join'](';\x20');_0x5812ca='Error:\x20'+_0x291d55;const _0x329199=_0x291d55[_0xa8c2b8(0x133)]()[_0xa8c2b8(0xc8)](_0xa8c2b8(0xe3))||_0x291d55[_0xa8c2b8(0x133)]()[_0xa8c2b8(0xc8)](_0xa8c2b8(0x144))||_0x291d55[_0xa8c2b8(0x133)]()[_0xa8c2b8(0xc8)]('etimedout'),_0x3d5959=_0x4927f7[_0xa8c2b8(0x173)]?.[_0xa8c2b8(0x14f)]?.['files'],_0x3680e3=_0x4927f7[_0xa8c2b8(0x12a)][0x0];reportMorphError({'error_message':_0x291d55,'error_type':_0x329199?_0xa8c2b8(0xe9):_0x3680e3?.['constructor']?.['name']||_0xa8c2b8(0x136),'context':{'tool':_0xa8c2b8(0x12d),'repo_path':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],'query':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x118)],'model':_0xa8c2b8(0xd8),'termination_reason':_0x4927f7[_0xa8c2b8(0x178)],'error_count':_0x4927f7[_0xa8c2b8(0x12a)][_0xa8c2b8(0xc1)],'is_timeout':_0x329199,'files_attempted':_0x3d5959?.[_0xa8c2b8(0x14d)](_0x395897=>({'path':_0x395897[_0xa8c2b8(0x14c)],'lines':_0x395897[_0xa8c2b8(0xcb)]})),'tool_calls':_0x47557c(_0x4927f7[_0xa8c2b8(0xa7)]),'messages':_0x4927f7[_0xa8c2b8(0xa7)]?.['map'](_0x5a6635=>({'role':_0x5a6635[_0xa8c2b8(0x135)],'content':_0x5a6635[_0xa8c2b8(0x17b)]})),'request_content':{'query':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x118)],'repo_path':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],'repoRoot':a0_0x54f756[_0xa8c2b8(0xbf)](_0xe22275[_0xa8c2b8(0x9e)]['repo_path']),'model':_0xa8c2b8(0xd8)}},'stack_trace':_0x3680e3?.['stack']||undefined,'source':_0xa8c2b8(0x145)})[_0xa8c2b8(0x10f)](()=>{});}else _0x5812ca='Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.';}return{'content':[{'type':'text','text':_0x5812ca}]};}catch(_0x532db6){const _0x485a0d=_0x532db6 instanceof Error?_0x532db6[_0xa8c2b8(0xc2)]:String(_0x532db6),_0x3b7ebf=_0x485a0d[_0xa8c2b8(0x133)]()[_0xa8c2b8(0xc8)]('timeout')||_0x485a0d[_0xa8c2b8(0x133)]()['includes']('timed\x20out')||_0x485a0d[_0xa8c2b8(0x133)]()[_0xa8c2b8(0xc8)](_0xa8c2b8(0xe1))||_0x532db6 instanceof Error&&_0x532db6['name']===_0xa8c2b8(0xe9);return reportMorphError({'error_message':_0x485a0d,'error_type':_0x3b7ebf?'TimeoutError':_0x532db6 instanceof Error?_0x532db6[_0xa8c2b8(0xd0)][_0xa8c2b8(0xfd)]:_0xa8c2b8(0xe5),'context':{'tool':_0xa8c2b8(0x12d),'repo_path':_0xe22275[_0xa8c2b8(0x9e)]['repo_path'],'query':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x118)],'model':_0xa8c2b8(0xd8),'is_timeout':_0x3b7ebf,'exception_phase':_0xa8c2b8(0xab),'request_content':{'query':_0xe22275[_0xa8c2b8(0x9e)]['search_string'],'repo_path':_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)],'repoRoot':a0_0x54f756['resolve'](_0xe22275[_0xa8c2b8(0x9e)][_0xa8c2b8(0x108)]),'model':_0xa8c2b8(0xd8)}},'stack_trace':_0x532db6 instanceof Error?_0x532db6[_0xa8c2b8(0x172)]:undefined,'source':_0xa8c2b8(0x145)})[_0xa8c2b8(0x10f)](()=>{}),{'content':[{'type':_0xa8c2b8(0xe0),'text':_0xa8c2b8(0x149)+_0x485a0d}],'isError':![]};}}case _0xa8c2b8(0x16e):{const _0x2d1ecf=CodebaseSearchArgsSchema['safeParse'](_0x3286e4);if(!_0x2d1ecf[_0xa8c2b8(0x179)])return{'content':[{'type':_0xa8c2b8(0xe0),'text':_0xa8c2b8(0x13d)+_0x2d1ecf[_0xa8c2b8(0x125)]}],'isError':!![]};try{const _0x4c9617=MORPH_API_KEY;if(!_0x4c9617)throw new Error(_0xa8c2b8(0xd4));const _0x38bcb0=await executeCodebaseSearch({'query':_0x2d1ecf['data'][_0xa8c2b8(0x17c)],'target_directories':_0x2d1ecf[_0xa8c2b8(0x9e)]['target_directories'],'limit':_0x2d1ecf['data'][_0xa8c2b8(0x167)]},{'apiKey':_0x4c9617,'repoId':_0x2d1ecf[_0xa8c2b8(0x9e)][_0xa8c2b8(0xa2)],'branch':_0x2d1ecf[_0xa8c2b8(0x9e)][_0xa8c2b8(0x10c)],'commitHash':_0x2d1ecf[_0xa8c2b8(0x9e)][_0xa8c2b8(0xa5)],'debug':![]});if(!_0x38bcb0['success'])return{'content':[{'type':'text','text':_0xa8c2b8(0xf4)+_0x38bcb0['error']}],'isError':!![]};const _0x4f9244=_0x38bcb0['results'][_0xa8c2b8(0xc1)]===0x0?_0xa8c2b8(0x127)+_0x2d1ecf['data']['query']+'\x22':_0xa8c2b8(0xf5)+_0x38bcb0['results'][_0xa8c2b8(0xc1)]+_0xa8c2b8(0x98)+_0x38bcb0[_0xa8c2b8(0xf9)]['searchTimeMs']+_0xa8c2b8(0x122)+_0x38bcb0['results'][_0xa8c2b8(0x14d)]((_0x4ff0a7,_0x4d194a)=>_0x4d194a+0x1+'.\x20'+_0x4ff0a7[_0xa8c2b8(0xc9)]+'\x20('+(_0x4ff0a7[_0xa8c2b8(0xac)]*0x64)['toFixed'](0x1)+_0xa8c2b8(0xe8)+(_0xa8c2b8(0x16b)+_0x4ff0a7[_0xa8c2b8(0x9a)]+'-'+_0x4ff0a7[_0xa8c2b8(0x12f)]+'\x0a')+(_0xa8c2b8(0x15a)+_0x4ff0a7[_0xa8c2b8(0x17b)][_0xa8c2b8(0xc4)](0x0,0xc8)+(_0x4ff0a7[_0xa8c2b8(0x17b)][_0xa8c2b8(0xc1)]>0xc8?_0xa8c2b8(0x115):'')+'\x0a'))['join']('\x0a');return{'content':[{'type':'text','text':_0x4f9244}]};}catch(_0x2608b8){const _0x5a837c=_0x2608b8 instanceof Error?_0x2608b8['message']:String(_0x2608b8);return reportMorphError({'error_message':_0x5a837c,'error_type':_0x2608b8 instanceof Error?_0x2608b8[_0xa8c2b8(0xd0)][_0xa8c2b8(0xfd)]:'UnknownError','context':{'tool':_0xa8c2b8(0x16e),'query':_0x2d1ecf['data'][_0xa8c2b8(0x17c)],'repo_id':_0x2d1ecf['data'][_0xa8c2b8(0xa2)]},'stack_trace':_0x2608b8 instanceof Error?_0x2608b8[_0xa8c2b8(0x172)]:undefined,'source':'mcp-filesystem'})[_0xa8c2b8(0x10f)](()=>{}),{'content':[{'type':_0xa8c2b8(0xe0),'text':_0xa8c2b8(0x13f)+_0x5a837c}],'isError':!![]};}}default:throw new Error(_0xa8c2b8(0xef)+_0xf604a6);}}catch(_0x38a01f){const _0x53eed0=_0x38a01f instanceof Error?_0x38a01f[_0xa8c2b8(0xc2)]:String(_0x38a01f);return reportMorphError({'error_message':_0x53eed0,'error_type':_0x38a01f instanceof Error?_0x38a01f[_0xa8c2b8(0xd0)][_0xa8c2b8(0xfd)]:_0xa8c2b8(0xe5),'context':{'tool':name,'arguments':args?JSON[_0xa8c2b8(0xcd)](args)['substring'](0x0,0x1f4):undefined,'mcp_server_version':_0xa8c2b8(0x12e)},'stack_trace':_0x38a01f instanceof Error?_0x38a01f[_0xa8c2b8(0x172)]:undefined,'source':_0xa8c2b8(0x145)})[_0xa8c2b8(0x10f)](()=>{}),{'content':[{'type':_0xa8c2b8(0xe0),'text':_0xa8c2b8(0x13f)+_0x53eed0}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x170a39){const _0x3ae583=a0_0x3d32fb,_0x3397a2=await getValidRootDirectories(_0x170a39);if(_0x3397a2['length']>0x0)allowedDirectories=[..._0x3397a2],console['error'](_0x3ae583(0x159)+_0x3397a2[_0x3ae583(0xc1)]+'\x20valid\x20directories');else{console[_0x3ae583(0x125)]('No\x20valid\x20root\x20directories\x20provided\x20by\x20client');if(ENABLE_WORKSPACE_MODE)try{const _0x15929f=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x15929f&&(allowedDirectories=[_0x15929f],console[_0x3ae583(0x125)]('Fallback:\x20Using\x20workspace\x20root\x20'+_0x15929f));}catch(_0x8e668b){console[_0x3ae583(0x125)](_0x3ae583(0x109)+_0x8e668b);}}}server['setNotificationHandler'](RootsListChangedNotificationSchema,async()=>{const _0xe86dc1=a0_0x3d32fb;try{const _0x564c83=await server[_0xe86dc1(0x12c)]();_0x564c83&&_0xe86dc1(0x15b)in _0x564c83&&await updateAllowedDirectoriesFromRoots(_0x564c83[_0xe86dc1(0x15b)]);}catch(_0x4944d9){console['error'](_0xe86dc1(0x119),_0x4944d9 instanceof Error?_0x4944d9[_0xe86dc1(0xc2)]:String(_0x4944d9));}}),server[a0_0x3d32fb(0x168)]=async()=>{const _0x1b978c=a0_0x3d32fb,_0x2c727e=server[_0x1b978c(0x124)]();if(_0x2c727e?.[_0x1b978c(0x15b)])try{const _0x239c7c=await server[_0x1b978c(0x12c)]();_0x239c7c&&'roots'in _0x239c7c?await updateAllowedDirectoriesFromRoots(_0x239c7c[_0x1b978c(0x15b)]):console[_0x1b978c(0x125)](_0x1b978c(0x131));}catch(_0x3009c5){console['error'](_0x1b978c(0xe2),_0x3009c5 instanceof Error?_0x3009c5['message']:String(_0x3009c5));}else{if(allowedDirectories[_0x1b978c(0xc1)]>0x0)console[_0x1b978c(0x125)](_0x1b978c(0xe4),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)console['error'](_0x1b978c(0xbc));else throw new Error(_0x1b978c(0x13c));}}};async function runServer(){const _0x2d1517=a0_0x3d32fb,_0x38f93e=new StdioServerTransport();await server[_0x2d1517(0xf1)](_0x38f93e),console[_0x2d1517(0x125)]('Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio'),allowedDirectories[_0x2d1517(0xc1)]===0x0&&console['error'](_0x2d1517(0xb9));}runServer()[a0_0x3d32fb(0x10f)](_0x2fea87=>{const _0x511391=a0_0x3d32fb;console[_0x511391(0x125)](_0x511391(0x96),_0x2fea87),process[_0x511391(0x151)](0x1);});
@@ -1 +1 @@
1
- function a1_0x5bd2(){const _0x2294fd=['46328nqdfKc','match','6950010qjxcZk','8qSQDKG','/mnt/','startsWith','10106173NEARTC','test','homedir','182815yzMYJg','toUpperCase','2229618VdhiVG','trim','8iPgyAD','657eHSBjN','2576804OwcyNz','replace','601910EPPbZU','slice','substring'];a1_0x5bd2=function(){return _0x2294fd;};return a1_0x5bd2();}(function(_0x874f7d,_0x2ca87b){const _0x127ab9=a1_0x2106,_0x5b6d71=_0x874f7d();while(!![]){try{const _0xfcc187=-parseInt(_0x127ab9(0x1d6))/0x1+parseInt(_0x127ab9(0x1e5))/0x2+-parseInt(_0x127ab9(0x1e1))/0x3*(-parseInt(_0x127ab9(0x1e3))/0x4)+-parseInt(_0x127ab9(0x1df))/0x5+parseInt(_0x127ab9(0x1d8))/0x6+-parseInt(_0x127ab9(0x1dc))/0x7*(-parseInt(_0x127ab9(0x1d9))/0x8)+parseInt(_0x127ab9(0x1e4))/0x9*(-parseInt(_0x127ab9(0x1e7))/0xa);if(_0xfcc187===_0x2ca87b)break;else _0x5b6d71['push'](_0x5b6d71['shift']());}catch(_0x5ce1ca){_0x5b6d71['push'](_0x5b6d71['shift']());}}}(a1_0x5bd2,0xdbbd6));import a1_0x1f2bf7 from'path';import a1_0x3e8db6 from'os';export function convertToWindowsPath(_0x526982){const _0x24c153=a1_0x2106;if(_0x526982[_0x24c153(0x1db)](_0x24c153(0x1da))){const _0x467078=_0x526982['charAt'](0x5)['toUpperCase'](),_0x469653=_0x526982[_0x24c153(0x1e8)](0x6)['replace'](/\//g,'\x5c');return _0x467078+':'+_0x469653;}if(_0x526982[_0x24c153(0x1d7)](/^\/[a-zA-Z]\//)){const _0x287a19=_0x526982['charAt'](0x1)[_0x24c153(0x1e0)](),_0x3f4141=_0x526982[_0x24c153(0x1e8)](0x2)[_0x24c153(0x1e6)](/\//g,'\x5c');return _0x287a19+':'+_0x3f4141;}if(_0x526982[_0x24c153(0x1d7)](/^[a-zA-Z]:/))return _0x526982[_0x24c153(0x1e6)](/\//g,'\x5c');return _0x526982;}function a1_0x2106(_0x4e08b3,_0x3339f3){_0x4e08b3=_0x4e08b3-0x1d5;const _0x5bd2a5=a1_0x5bd2();let _0x21063b=_0x5bd2a5[_0x4e08b3];return _0x21063b;}export function normalizePath(_0x5e1995){const _0x2436d7=a1_0x2106;_0x5e1995=_0x5e1995[_0x2436d7(0x1e2)]()['replace'](/^["']|["']$/g,'');const _0x321c40=_0x5e1995['startsWith']('/')&&!_0x5e1995[_0x2436d7(0x1d7)](/^\/mnt\/[a-z]\//i)&&!_0x5e1995['match'](/^\/[a-zA-Z]\//);if(_0x321c40)return _0x5e1995[_0x2436d7(0x1e6)](/\/+/g,'/')['replace'](/\/+$/,'');_0x5e1995=convertToWindowsPath(_0x5e1995);if(_0x5e1995[_0x2436d7(0x1db)]('\x5c\x5c')){let _0x3ab5e7=_0x5e1995;_0x3ab5e7=_0x3ab5e7[_0x2436d7(0x1e6)](/^\\{2,}/,'\x5c\x5c');const _0x534c83=_0x3ab5e7[_0x2436d7(0x1d5)](0x2)['replace'](/\\\\/g,'\x5c');_0x5e1995='\x5c\x5c'+_0x534c83;}else _0x5e1995=_0x5e1995[_0x2436d7(0x1e6)](/\\\\/g,'\x5c');let _0x36c08b=a1_0x1f2bf7['normalize'](_0x5e1995);_0x5e1995['startsWith']('\x5c\x5c')&&!_0x36c08b['startsWith']('\x5c\x5c')&&(_0x36c08b='\x5c'+_0x36c08b);if(_0x36c08b['match'](/^[a-zA-Z]:/)){let _0x1d9609=_0x36c08b[_0x2436d7(0x1e6)](/\//g,'\x5c');return/^[a-z]:/[_0x2436d7(0x1dd)](_0x1d9609)&&(_0x1d9609=_0x1d9609['charAt'](0x0)['toUpperCase']()+_0x1d9609[_0x2436d7(0x1e8)](0x1)),_0x1d9609;}return _0x36c08b[_0x2436d7(0x1e6)](/\//g,'\x5c');}export function expandHome(_0xc72608){const _0x215e3b=a1_0x2106;if(_0xc72608['startsWith']('~/')||_0xc72608==='~')return a1_0x1f2bf7['join'](a1_0x3e8db6[_0x215e3b(0x1de)](),_0xc72608[_0x215e3b(0x1e8)](0x1));return _0xc72608;}
1
+ (function(_0xcc4d61,_0x25ed21){const _0x1e6b41=a1_0x4c81,_0x3ba5ea=_0xcc4d61();while(!![]){try{const _0x205deb=parseInt(_0x1e6b41(0x195))/0x1+-parseInt(_0x1e6b41(0x18f))/0x2+parseInt(_0x1e6b41(0x18a))/0x3*(parseInt(_0x1e6b41(0x181))/0x4)+parseInt(_0x1e6b41(0x190))/0x5*(-parseInt(_0x1e6b41(0x186))/0x6)+-parseInt(_0x1e6b41(0x192))/0x7*(parseInt(_0x1e6b41(0x183))/0x8)+-parseInt(_0x1e6b41(0x17d))/0x9*(parseInt(_0x1e6b41(0x18d))/0xa)+-parseInt(_0x1e6b41(0x18e))/0xb*(-parseInt(_0x1e6b41(0x191))/0xc);if(_0x205deb===_0x25ed21)break;else _0x3ba5ea['push'](_0x3ba5ea['shift']());}catch(_0x1a7572){_0x3ba5ea['push'](_0x3ba5ea['shift']());}}}(a1_0x188a,0xca9e0));import a1_0x476ad3 from'path';import a1_0x84cd0b from'os';export function convertToWindowsPath(_0x15847a){const _0x17e393=a1_0x4c81;if(_0x15847a[_0x17e393(0x188)](_0x17e393(0x17f))){const _0x103efd=_0x15847a['charAt'](0x5)[_0x17e393(0x187)](),_0x164764=_0x15847a[_0x17e393(0x193)](0x6)['replace'](/\//g,'\x5c');return _0x103efd+':'+_0x164764;}if(_0x15847a[_0x17e393(0x18c)](/^\/[a-zA-Z]\//)){const _0x27d634=_0x15847a[_0x17e393(0x18b)](0x1)[_0x17e393(0x187)](),_0x5aa9e7=_0x15847a['slice'](0x2)['replace'](/\//g,'\x5c');return _0x27d634+':'+_0x5aa9e7;}if(_0x15847a[_0x17e393(0x18c)](/^[a-zA-Z]:/))return _0x15847a[_0x17e393(0x189)](/\//g,'\x5c');return _0x15847a;}function a1_0x4c81(_0x1522dd,_0x432d6e){_0x1522dd=_0x1522dd-0x17d;const _0x188a09=a1_0x188a();let _0x4c81c2=_0x188a09[_0x1522dd];return _0x4c81c2;}function a1_0x188a(){const _0x5bd0da=['join','1487884XXmxhY','substring','1096jFUwfx','normalize','trim','6fbFoWc','toUpperCase','startsWith','replace','3cshloN','charAt','match','20qctIoB','5520218ufCOZg','613272qJeYXG','7353105iOynxX','96wURHvQ','61621ksgwvd','slice','homedir','196573lSkuAV','3465270DljciQ','test','/mnt/'];a1_0x188a=function(){return _0x5bd0da;};return a1_0x188a();}export function normalizePath(_0x53c85e){const _0x526962=a1_0x4c81;_0x53c85e=_0x53c85e[_0x526962(0x185)]()['replace'](/^["']|["']$/g,'');const _0x556d9b=_0x53c85e[_0x526962(0x188)]('/')&&!_0x53c85e[_0x526962(0x18c)](/^\/mnt\/[a-z]\//i)&&!_0x53c85e[_0x526962(0x18c)](/^\/[a-zA-Z]\//);if(_0x556d9b)return _0x53c85e[_0x526962(0x189)](/\/+/g,'/')[_0x526962(0x189)](/\/+$/,'');_0x53c85e=convertToWindowsPath(_0x53c85e);if(_0x53c85e[_0x526962(0x188)]('\x5c\x5c')){let _0x116268=_0x53c85e;_0x116268=_0x116268[_0x526962(0x189)](/^\\{2,}/,'\x5c\x5c');const _0x948ea0=_0x116268[_0x526962(0x182)](0x2)[_0x526962(0x189)](/\\\\/g,'\x5c');_0x53c85e='\x5c\x5c'+_0x948ea0;}else _0x53c85e=_0x53c85e[_0x526962(0x189)](/\\\\/g,'\x5c');let _0x519ff3=a1_0x476ad3[_0x526962(0x184)](_0x53c85e);_0x53c85e[_0x526962(0x188)]('\x5c\x5c')&&!_0x519ff3[_0x526962(0x188)]('\x5c\x5c')&&(_0x519ff3='\x5c'+_0x519ff3);if(_0x519ff3[_0x526962(0x18c)](/^[a-zA-Z]:/)){let _0x4ec854=_0x519ff3[_0x526962(0x189)](/\//g,'\x5c');return/^[a-z]:/[_0x526962(0x17e)](_0x4ec854)&&(_0x4ec854=_0x4ec854[_0x526962(0x18b)](0x0)['toUpperCase']()+_0x4ec854[_0x526962(0x193)](0x1)),_0x4ec854;}return _0x519ff3[_0x526962(0x189)](/\//g,'\x5c');}export function expandHome(_0x5ca0f3){const _0x4ff117=a1_0x4c81;if(_0x5ca0f3[_0x4ff117(0x188)]('~/')||_0x5ca0f3==='~')return a1_0x476ad3[_0x4ff117(0x180)](a1_0x84cd0b[_0x4ff117(0x194)](),_0x5ca0f3[_0x4ff117(0x193)](0x1));return _0x5ca0f3;}
@@ -1 +1 @@
1
- (function(_0x4c692c,_0x18fd77){const _0x45d41d=a2_0x5904,_0x5cdf1f=_0x4c692c();while(!![]){try{const _0x13d3cd=parseInt(_0x45d41d(0xd7))/0x1*(-parseInt(_0x45d41d(0xc9))/0x2)+parseInt(_0x45d41d(0xdc))/0x3+-parseInt(_0x45d41d(0xd4))/0x4*(parseInt(_0x45d41d(0xd3))/0x5)+-parseInt(_0x45d41d(0xd0))/0x6+parseInt(_0x45d41d(0xda))/0x7+parseInt(_0x45d41d(0xcf))/0x8+parseInt(_0x45d41d(0xdb))/0x9;if(_0x13d3cd===_0x18fd77)break;else _0x5cdf1f['push'](_0x5cdf1f['shift']());}catch(_0x4d096c){_0x5cdf1f['push'](_0x5cdf1f['shift']());}}}(a2_0x138e,0xaf15b));function a2_0x138e(){const _0x519dcc=['3197929CVlDBO','2224404cDSSAb','2471025EaAmOR','normalize','42JqJOqS','startsWith','isArray','string','resolve','Path\x20must\x20be\x20absolute\x20after\x20normalization','10315536XIarMu','1869480BNMsSb','some','includes','10eaBeKA','1011720QsyNMa','Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization','sep','61073IWCsDt','isAbsolute','length'];a2_0x138e=function(){return _0x519dcc;};return a2_0x138e();}function a2_0x5904(_0x5128b7,_0x9c95d3){_0x5128b7=_0x5128b7-0xc8;const _0x138e0e=a2_0x138e();let _0x5904a2=_0x138e0e[_0x5128b7];return _0x5904a2;}import a2_0x4cc276 from'path';export function isPathWithinAllowedDirectories(_0xb389a0,_0x1e4c65){const _0x4c058b=a2_0x5904;if(typeof _0xb389a0!==_0x4c058b(0xcc)||!Array[_0x4c058b(0xcb)](_0x1e4c65))return![];if(!_0xb389a0||_0x1e4c65[_0x4c058b(0xd9)]===0x0)return![];if(_0xb389a0[_0x4c058b(0xd2)]('\x00'))return![];let _0x14b166;try{_0x14b166=a2_0x4cc276[_0x4c058b(0xcd)](a2_0x4cc276[_0x4c058b(0xc8)](_0xb389a0));}catch{return![];}if(!a2_0x4cc276[_0x4c058b(0xd8)](_0x14b166))throw new Error(_0x4c058b(0xce));return _0x1e4c65[_0x4c058b(0xd1)](_0x4d446f=>{const _0x1fc235=_0x4c058b;if(typeof _0x4d446f!==_0x1fc235(0xcc)||!_0x4d446f)return![];if(_0x4d446f[_0x1fc235(0xd2)]('\x00'))return![];let _0x38cfbd;try{_0x38cfbd=a2_0x4cc276['resolve'](a2_0x4cc276[_0x1fc235(0xc8)](_0x4d446f));}catch{return![];}if(!a2_0x4cc276[_0x1fc235(0xd8)](_0x38cfbd))throw new Error(_0x1fc235(0xd5));if(_0x14b166===_0x38cfbd)return!![];if(_0x38cfbd===a2_0x4cc276[_0x1fc235(0xd6)])return _0x14b166[_0x1fc235(0xca)](a2_0x4cc276['sep']);return _0x14b166[_0x1fc235(0xca)](_0x38cfbd+a2_0x4cc276[_0x1fc235(0xd6)]);});}
1
+ function a2_0x2784(){const _0x397768=['normalize','2772336syiGgj','includes','14laEpeF','isArray','string','108xNqBOb','55aGFprr','Path\x20must\x20be\x20absolute\x20after\x20normalization','9115WOPOUZ','767780SDWzry','30nTSoyh','860sARWgN','33209527afFVWu','13596JGvEMA','99WnWFuO','2335560ejOXGd','899090yGcEcd','sep','resolve','some','length','21fPUctK','Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization'];a2_0x2784=function(){return _0x397768;};return a2_0x2784();}function a2_0x111f(_0x3b4733,_0x4e92a5){_0x3b4733=_0x3b4733-0x175;const _0x278443=a2_0x2784();let _0x111ffb=_0x278443[_0x3b4733];return _0x111ffb;}(function(_0xe5d564,_0x4bdc05){const _0x465833=a2_0x111f,_0x237944=_0xe5d564();while(!![]){try{const _0xf2c35f=-parseInt(_0x465833(0x18c))/0x1*(-parseInt(_0x465833(0x189))/0x2)+parseInt(_0x465833(0x179))/0x3*(parseInt(_0x465833(0x177))/0x4)+-parseInt(_0x465833(0x175))/0x5*(-parseInt(_0x465833(0x176))/0x6)+parseInt(_0x465833(0x181))/0x7*(-parseInt(_0x465833(0x184))/0x8)+parseInt(_0x465833(0x17a))/0x9*(parseInt(_0x465833(0x17c))/0xa)+parseInt(_0x465833(0x18a))/0xb*(parseInt(_0x465833(0x17b))/0xc)+-parseInt(_0x465833(0x178))/0xd*(parseInt(_0x465833(0x186))/0xe);if(_0xf2c35f===_0x4bdc05)break;else _0x237944['push'](_0x237944['shift']());}catch(_0x1d80ab){_0x237944['push'](_0x237944['shift']());}}}(a2_0x2784,0x930ca));import a2_0x253c05 from'path';export function isPathWithinAllowedDirectories(_0x431903,_0x242936){const _0x50808d=a2_0x111f;if(typeof _0x431903!=='string'||!Array[_0x50808d(0x187)](_0x242936))return![];if(!_0x431903||_0x242936[_0x50808d(0x180)]===0x0)return![];if(_0x431903[_0x50808d(0x185)]('\x00'))return![];let _0x57a666;try{_0x57a666=a2_0x253c05[_0x50808d(0x17e)](a2_0x253c05[_0x50808d(0x183)](_0x431903));}catch{return![];}if(!a2_0x253c05['isAbsolute'](_0x57a666))throw new Error(_0x50808d(0x18b));return _0x242936[_0x50808d(0x17f)](_0x18702b=>{const _0x45fe3d=_0x50808d;if(typeof _0x18702b!==_0x45fe3d(0x188)||!_0x18702b)return![];if(_0x18702b[_0x45fe3d(0x185)]('\x00'))return![];let _0x180c8f;try{_0x180c8f=a2_0x253c05['resolve'](a2_0x253c05[_0x45fe3d(0x183)](_0x18702b));}catch{return![];}if(!a2_0x253c05['isAbsolute'](_0x180c8f))throw new Error(_0x45fe3d(0x182));if(_0x57a666===_0x180c8f)return!![];if(_0x180c8f===a2_0x253c05[_0x45fe3d(0x17d)])return _0x57a666['startsWith'](a2_0x253c05[_0x45fe3d(0x17d)]);return _0x57a666['startsWith'](_0x180c8f+a2_0x253c05[_0x45fe3d(0x17d)]);});}
@@ -1 +1 @@
1
- (function(_0x4b23fb,_0x1a436d){const _0x504002=a3_0x4adc,_0x5bbfbe=_0x4b23fb();while(!![]){try{const _0x36beb0=parseInt(_0x504002(0x156))/0x1*(parseInt(_0x504002(0x145))/0x2)+-parseInt(_0x504002(0x152))/0x3+-parseInt(_0x504002(0x14c))/0x4+parseInt(_0x504002(0x14b))/0x5+-parseInt(_0x504002(0x148))/0x6+-parseInt(_0x504002(0x150))/0x7*(-parseInt(_0x504002(0x147))/0x8)+parseInt(_0x504002(0x143))/0x9;if(_0x36beb0===_0x1a436d)break;else _0x5bbfbe['push'](_0x5bbfbe['shift']());}catch(_0x4809fa){_0x5bbfbe['push'](_0x5bbfbe['shift']());}}}(a3_0x2e9f,0x6f4dc));import{promises as a3_0x3d91b2}from'fs';function a3_0x4adc(_0x2d721c,_0x56f539){_0x2d721c=_0x2d721c-0x143;const _0x2e9f91=a3_0x2e9f();let _0x4adcc5=_0x2e9f91[_0x2d721c];return _0x4adcc5;}import a3_0x4f7a4f from'path';import a3_0x570cf4 from'os';function a3_0x2e9f(){const _0x5a7d9d=['\x20due\x20to\x20error:\x20','151655AiVkWs','error','2534433KzRgrF','Skipping\x20invalid\x20directory:\x20','startsWith','push','1bIPOXe','realpath','file://','message','1059183enwSNW','slice','1689166rWBOFm','stat','256YaLRZD','3816516hIzYNN','uri','join','2956545qCpVpt','1240248fgznvN','non-directory\x20root','invalid\x20path\x20or\x20inaccessible'];a3_0x2e9f=function(){return _0x5a7d9d;};return a3_0x2e9f();}import{normalizePath}from'./path-utils.js';async function parseRootUri(_0x2a79ba){const _0x3f01c0=a3_0x4adc;try{const _0x3413d6=_0x2a79ba[_0x3f01c0(0x154)](_0x3f01c0(0x158))?_0x2a79ba[_0x3f01c0(0x144)](0x7):_0x2a79ba,_0x48a96c=_0x3413d6[_0x3f01c0(0x154)]('~/')||_0x3413d6==='~'?a3_0x4f7a4f[_0x3f01c0(0x14a)](a3_0x570cf4['homedir'](),_0x3413d6[_0x3f01c0(0x144)](0x1)):_0x3413d6,_0x8df750=a3_0x4f7a4f['resolve'](_0x48a96c),_0x3686bb=await a3_0x3d91b2[_0x3f01c0(0x157)](_0x8df750);return normalizePath(_0x3686bb);}catch{return null;}}function formatDirectoryError(_0x31b710,_0x4f8f5e,_0x2d4f31){const _0xb3941d=a3_0x4adc;if(_0x2d4f31)return'Skipping\x20'+_0x2d4f31+':\x20'+_0x31b710;const _0x860d1f=_0x4f8f5e instanceof Error?_0x4f8f5e[_0xb3941d(0x159)]:String(_0x4f8f5e);return _0xb3941d(0x153)+_0x31b710+_0xb3941d(0x14f)+_0x860d1f;}export async function getValidRootDirectories(_0x4ab8d4){const _0x30334f=a3_0x4adc,_0x51085c=[];for(const _0x25bb4e of _0x4ab8d4){const _0x4043eb=await parseRootUri(_0x25bb4e[_0x30334f(0x149)]);if(!_0x4043eb){console[_0x30334f(0x151)](formatDirectoryError(_0x25bb4e['uri'],undefined,_0x30334f(0x14e)));continue;}try{const _0x5e100e=await a3_0x3d91b2[_0x30334f(0x146)](_0x4043eb);_0x5e100e['isDirectory']()?_0x51085c[_0x30334f(0x155)](_0x4043eb):console[_0x30334f(0x151)](formatDirectoryError(_0x4043eb,undefined,_0x30334f(0x14d)));}catch(_0x9866da){console[_0x30334f(0x151)](formatDirectoryError(_0x4043eb,_0x9866da));}}return _0x51085c;}
1
+ (function(_0xe0eba9,_0x469ed6){const _0xd59600=a3_0x50cd,_0x402b39=_0xe0eba9();while(!![]){try{const _0xa35cd0=parseInt(_0xd59600(0xad))/0x1*(parseInt(_0xd59600(0xb9))/0x2)+-parseInt(_0xd59600(0xa5))/0x3+parseInt(_0xd59600(0xb4))/0x4*(-parseInt(_0xd59600(0xb8))/0x5)+-parseInt(_0xd59600(0xae))/0x6*(-parseInt(_0xd59600(0xa6))/0x7)+parseInt(_0xd59600(0xa0))/0x8*(parseInt(_0xd59600(0xb2))/0x9)+parseInt(_0xd59600(0xaa))/0xa*(parseInt(_0xd59600(0xa7))/0xb)+-parseInt(_0xd59600(0xb3))/0xc*(parseInt(_0xd59600(0xa8))/0xd);if(_0xa35cd0===_0x469ed6)break;else _0x402b39['push'](_0x402b39['shift']());}catch(_0x367b30){_0x402b39['push'](_0x402b39['shift']());}}}(a3_0x3533,0x800c3));function a3_0x3533(){const _0x10a4a3=['378234TyjTHN','message','slice','startsWith','9KXrcGl','168CiDrfq','1204OZUSPa','resolve','Skipping\x20','invalid\x20path\x20or\x20inaccessible','3785QFdkdi','898sPBNPC','stat','Skipping\x20invalid\x20directory:\x20','4623848FvmxFf','realpath','push','homedir','\x20due\x20to\x20error:\x20','1241226ouyLRH','49AvKhDA','22glrouq','804297eFgPti','error','54130GOoGSc','uri','isDirectory','2232zqZaKW'];a3_0x3533=function(){return _0x10a4a3;};return a3_0x3533();}function a3_0x50cd(_0x57a6fc,_0x29824e){_0x57a6fc=_0x57a6fc-0xa0;const _0x353317=a3_0x3533();let _0x50cd08=_0x353317[_0x57a6fc];return _0x50cd08;}import{promises as a3_0x39e713}from'fs';import a3_0xbdf1bb from'path';import a3_0xb0d2d6 from'os';import{normalizePath}from'./path-utils.js';async function parseRootUri(_0x15b68d){const _0x10510b=a3_0x50cd;try{const _0x433ce7=_0x15b68d[_0x10510b(0xb1)]('file://')?_0x15b68d[_0x10510b(0xb0)](0x7):_0x15b68d,_0x4ae8c3=_0x433ce7[_0x10510b(0xb1)]('~/')||_0x433ce7==='~'?a3_0xbdf1bb['join'](a3_0xb0d2d6[_0x10510b(0xa3)](),_0x433ce7[_0x10510b(0xb0)](0x1)):_0x433ce7,_0x482478=a3_0xbdf1bb[_0x10510b(0xb5)](_0x4ae8c3),_0x382959=await a3_0x39e713[_0x10510b(0xa1)](_0x482478);return normalizePath(_0x382959);}catch{return null;}}function formatDirectoryError(_0xc77055,_0x47150b,_0x104e17){const _0x1bfc99=a3_0x50cd;if(_0x104e17)return _0x1bfc99(0xb6)+_0x104e17+':\x20'+_0xc77055;const _0x172272=_0x47150b instanceof Error?_0x47150b[_0x1bfc99(0xaf)]:String(_0x47150b);return _0x1bfc99(0xbb)+_0xc77055+_0x1bfc99(0xa4)+_0x172272;}export async function getValidRootDirectories(_0x3ef4d9){const _0x598595=a3_0x50cd,_0x43e336=[];for(const _0x278455 of _0x3ef4d9){const _0x849086=await parseRootUri(_0x278455[_0x598595(0xab)]);if(!_0x849086){console[_0x598595(0xa9)](formatDirectoryError(_0x278455[_0x598595(0xab)],undefined,_0x598595(0xb7)));continue;}try{const _0x10188c=await a3_0x39e713[_0x598595(0xba)](_0x849086);_0x10188c[_0x598595(0xac)]()?_0x43e336[_0x598595(0xa2)](_0x849086):console[_0x598595(0xa9)](formatDirectoryError(_0x849086,undefined,'non-directory\x20root'));}catch(_0x3768e1){console[_0x598595(0xa9)](formatDirectoryError(_0x849086,_0x3768e1));}}return _0x43e336;}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphllm/morphmcp",
3
- "version": "0.8.46",
3
+ "version": "0.8.47",
4
4
  "description": "Fast & accurate MCP server with AI-powered file editing and intelligent code search. Prevents context pollution and saves time for a better user experience.",
5
5
  "license": "MIT",
6
6
  "author": "Morph (https://morphllm.com)",
@@ -35,7 +35,7 @@
35
35
  "dependencies": {
36
36
  "@google/generative-ai": "^0.21.0",
37
37
  "@modelcontextprotocol/sdk": "^1.12.3",
38
- "@morphllm/morphsdk": "0.2.65",
38
+ "@morphllm/morphsdk": "0.2.74",
39
39
  "@vscode/ripgrep": "^1.15.14",
40
40
  "axios": "^1.6.0",
41
41
  "chalk": "^5.3.0",