@morphllm/morphmcp 0.8.197 → 0.8.199
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 +27 -3
- package/dist/index.js +1 -1
- package/dist/log-utils.js +1 -1
- package/dist/logger.js +1 -1
- package/dist/path-utils.js +1 -1
- package/dist/path-validation.js +1 -1
- package/dist/roots-utils.js +1 -1
- package/dist/tool-definitions.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Supercharge your coding agent. One MCP with two specialized tools for faster edits and smarter retrieval.
|
|
4
4
|
|
|
5
|
+
> **Using OpenCode?** Install the [OpenCode plugin](https://github.com/morphllm/opencode-morph-plugin) instead of this MCP server. It ships the same Fast Apply + WarpGrep tools **plus** automatic context compaction and tool routing that the MCP protocol cannot provide.
|
|
6
|
+
|
|
7
|
+
## Which integration should I use?
|
|
8
|
+
|
|
9
|
+
| Harness | Use | Tools |
|
|
10
|
+
|---------|-----|-------|
|
|
11
|
+
| **OpenCode** | [`@morphllm/opencode-morph-plugin`](https://github.com/morphllm/opencode-morph-plugin) | Fast Apply + WarpGrep + GitHub search + **compaction** + tool routing |
|
|
12
|
+
| Cursor, Claude Code, VS Code, Windsurf, Zed, any MCP host | **this server** (`@morphllm/morphmcp`) | Fast Apply + WarpGrep + GitHub search |
|
|
13
|
+
|
|
14
|
+
Conversation **compaction is only available through the OpenCode plugin**. The MCP protocol gives a server no access to the host's conversation history, so compaction can't be exposed as an MCP tool — use the plugin if you want it.
|
|
15
|
+
|
|
5
16
|
## Tools
|
|
6
17
|
|
|
7
18
|
| Tool | What it does |
|
|
@@ -17,7 +28,7 @@ All three tools are always exposed. Clients can manage tool visibility on their
|
|
|
17
28
|
### Claude Code
|
|
18
29
|
|
|
19
30
|
```bash
|
|
20
|
-
claude mcp add morph-mcp -e MORPH_API_KEY=sk-xxx -- npx
|
|
31
|
+
claude mcp add morph-mcp -e MORPH_API_KEY=sk-xxx -- npx -y @morphllm/morphmcp
|
|
21
32
|
```
|
|
22
33
|
|
|
23
34
|
### Cursor
|
|
@@ -29,7 +40,7 @@ Add to `.cursor/mcp.json`:
|
|
|
29
40
|
"mcpServers": {
|
|
30
41
|
"morph-mcp": {
|
|
31
42
|
"command": "npx",
|
|
32
|
-
"args": ["
|
|
43
|
+
"args": ["-y", "@morphllm/morphmcp"],
|
|
33
44
|
"env": {
|
|
34
45
|
"MORPH_API_KEY": "sk-xxx"
|
|
35
46
|
}
|
|
@@ -48,7 +59,7 @@ Add to `.vscode/mcp.json`:
|
|
|
48
59
|
"servers": {
|
|
49
60
|
"morph-mcp": {
|
|
50
61
|
"command": "npx",
|
|
51
|
-
"args": ["
|
|
62
|
+
"args": ["-y", "@morphllm/morphmcp"],
|
|
52
63
|
"env": {
|
|
53
64
|
"MORPH_API_KEY": "sk-xxx"
|
|
54
65
|
}
|
|
@@ -111,10 +122,23 @@ Output: List of files with specific line ranges + actual code content
|
|
|
111
122
|
2. Go to dashboard → API Keys
|
|
112
123
|
3. Keys start with `sk-` or `morph-`
|
|
113
124
|
|
|
125
|
+
## Troubleshooting
|
|
126
|
+
|
|
127
|
+
**`npm error code ETARGET ... No matching version found for ...`**
|
|
128
|
+
|
|
129
|
+
This happens when `npx` resolves against a stale local registry cache — most often with `npx --prefer-offline`, which intentionally avoids refreshing metadata. The examples above no longer use `--prefer-offline` for this reason. If you still hit it:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npm cache clean --force # then retry: npx -y @morphllm/morphmcp
|
|
133
|
+
# or run it with bun, which fetches fresh metadata:
|
|
134
|
+
bunx @morphllm/morphmcp
|
|
135
|
+
```
|
|
136
|
+
|
|
114
137
|
## Links
|
|
115
138
|
|
|
116
139
|
- [Documentation](https://docs.morphllm.com)
|
|
117
140
|
- [MCP Quickstart](https://docs.morphllm.com/mcpquickstart)
|
|
141
|
+
- [OpenCode plugin](https://github.com/morphllm/opencode-morph-plugin)
|
|
118
142
|
|
|
119
143
|
## License
|
|
120
144
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const a0_0x5035ba=a0_0x2f96;(function(_0x4fa6c3,_0x439111){const _0x25d18c=a0_0x2f96,_0x176c80=_0x4fa6c3();while(!![]){try{const _0x83dd9f=-parseInt(_0x25d18c(0x28e))/0x1+-parseInt(_0x25d18c(0x306))/0x2*(-parseInt(_0x25d18c(0x2d4))/0x3)+-parseInt(_0x25d18c(0x1f4))/0x4+parseInt(_0x25d18c(0x238))/0x5+-parseInt(_0x25d18c(0x1f8))/0x6*(-parseInt(_0x25d18c(0x272))/0x7)+parseInt(_0x25d18c(0x2df))/0x8+-parseInt(_0x25d18c(0x283))/0x9;if(_0x83dd9f===_0x439111)break;else _0x176c80['push'](_0x176c80['shift']());}catch(_0x45e38c){_0x176c80['push'](_0x176c80['shift']());}}}(a0_0x18cf,0x188ae));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_0x1b5499 from'fs/promises';import a0_0x390fe1 from'path';import a0_0x5edaef from'os';import{createRequire}from'module';function a0_0x2f96(_0x14e543,_0x5905b5){_0x14e543=_0x14e543-0x1e0;const _0x18cf92=a0_0x18cf();let _0x2f965b=_0x18cf92[_0x14e543];return _0x2f965b;}function a0_0x18cf(){const _0x33d095=['-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a','toISOString','1327968kzrelA','node_modules','tool_calls','GitHub\x20repository\x20URL\x20to\x20search\x20(e.g.\x20\x27https://github.com/vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','\x0a...\x20(truncated,\x20total:\x20','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20','-\x20Read\x20file\x20`','//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a','-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','text','[github_codebase_search]\x20Failed\x20in\x20','14410GwuPmY','finish','terminationReason','Warning:\x20DISABLED_TOOLS\x20contains\x20unknown\x20tool\x20\x22','isDirectory','-\x20Grepped\x20\x27','connect','list_directory','file_path','trim','constructor','morph-v3-large','instruction','.\x20Path:\x20','FileReadError','added\x20','edit_file','RipgrepNotAvailable','Relevant\x20context\x20found:','Natural-language\x20question/description\x20about\x20the\x20code\x20you\x20want\x20to\x20understand.\x20Good\x20example:\x20\x22Where\x20does\x20auth\x20get\x20handled,\x20what\x20are\x20the\x20different\x20oauth\x20methods\x20supported?\x22,\x20\x22Trace\x20all\x20code\x20that\x20relates\x20to\x20how\x20data\x20is\x20injested\x20and\x20processed\x22.\x20Bad\x20example:\x20\x22auth()\x22,\x20\x22auth\x20login\x20dashoard\x20google\x20email\x22.\x20This\x20tool\x20does\x20NOT\x20accept\x20regex,\x20keyword\x20dumps,\x20or\x20symbol-only\x20queries.','user','DISABLED_TOOLS','etimedout','metadata','string','target_file','\x20error(s)','GitHub\x20search\x20failed:\x20','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','Use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code\x20blocks.\x20Include\x20just\x20enough\x20surrounding\x20context\x20to\x20locate\x20each\x20edit\x20precisely.\x0a\x0a','false','No\x20valid\x20root\x20directories\x20provided\x20by\x20client','UnknownError','Bearer\x20','slice','data','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','Parent\x20directory\x20does\x20not\x20exist:\x20','morph-warp-grep-v2.1','Preview\x20changes\x20without\x20applying\x20them.','source','tool_call_id','min','command','unknown','all','has','changes','tool_call_error','content','BinaryFile','ms.\x20Success:\x20','\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit','Tool\x20\x22','❌\x20Morph\x20Edit\x20Failed:\x20','github_search_start','--api-key=','Morph\x20Edit\x20','startsWith','searchGitHub','terminated','now','read','argv','Here\x20is\x20the\x20content\x20of\x20files:\x0a','join','composer.json','\x20disabled\x20via\x20DISABLED_TOOLS','env','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','6915ZeeLIv','timed\x20out','map','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','Tool\x20','match','stringify','listRoots','api_request_start','normalize','@morphllm/morphmcp\x20','1382544NxUYvg','ToolException','0.2.0','length','linesModified','completionId','code_edit','roots','unknown\x20error','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','messages','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','pattern','status','search_string','owner_repo','every','object','\x22>\x0a','-\x20Preserve\x20exact\x20indentation\x0a','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','Authentication\x20failed:\x20Your\x20Morph\x20API\x20key\x20is\x20invalid\x20or\x20has\x20been\x20revoked.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20a\x20valid\x20API\x20key,\x20then\x20update\x20your\x20MCP\x20configuration.','success','Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','ReadError','Unknown\x20error','stat','number','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','filePath','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.','Created\x20File','inputSchema','context','debug','Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.','<file\x20path=\x22','warp_grep_start','46TkYIjC','\x20(new\x20file)','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','Rules:\x0a','Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.','branch','repo_path','edit','PathError','path','CODEBASE_SEARCH','setRequestHandler','\x0aExamples:','push','TimeoutError','list_directory\x20','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','utf-8','timeout','runWarpGrep_call','dirname','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','catch','Invalid\x20arguments:\x20','Morph\x20Edit\x20Preview','some','--help','-\x20Listed\x20directory\x20`','Warning:\x20Unable\x20to\x20determine\x20package\x20version:','read\x20','646472zDHFBt','payload','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','\x20valid\x20directories','4326ylLWKU','files','ENOENT','timings','completed_with_file_errors','Error\x20accessing\x20directory\x20','linesRemoved','realpath','instructions','basename','isArray','A\x20code\x20exploration\x20tool,\x20use\x20this\x20tool\x20when\x20exploring\x20an\x20unfamiliar\x20codebase,\x20and\x20you\x27re\x20unsure\x20of\x20the\x20exact\x20file\x20or\x20string\x20to\x20look\x20for.\x20This\x20tool\x20will\x20find\x20all\x20relevant\x20bits\x20of\x20code\x20given\x20a\x20natural\x20lanugage\x20description,\x20or\x20questin\x20of\x20the\x20thing\x20you\x27re\x20looking\x20for.\x20','\x20is\x20not\x20a\x20directory','ENABLE_WORKSPACE_MODE','Failed\x20to\x20read\x20file:\x20','params','\x20as\x20allowed\x20directory','Fallback:\x20Using\x20workspace\x20root\x20','target_filepath','message','log','WarpGrepError','Max\x20results\x20to\x20return','Failed\x20to\x20request\x20roots\x20from\x20client:','file_read_complete','Error:\x20','GITHUB_CODEBASE_SEARCH','SubToolError','Warning:\x20Workspace\x20fallback\x20failed:\x20','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','provider_created','tool','.git','Repository\x20identifier','WarpGrep\x20sub-tool\x20errors:\x20','Morph\x20FastApply\x20failed\x20without\x20error\x20message','name','oninitialized','tsconfig.json','Disabled\x20tools:\x20','\x22\x20is\x20disabled\x20via\x20the\x20DISABLED_TOOLS\x20environment\x20variable\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.',',\x20modified\x20','toLowerCase','ms:','assistant','completed','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','path_validation_resolved','--version','describe','size','Applied','function','No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.','lines','cwd','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','\x22.\x20Known\x20tools:\x20','turns','MCP','WORKSPACE_ROOT','response','linesAdded','MORPH_API_KEY','922870MthOJG','dryRun','Warning:\x20','\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)','glob\x20\x27','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','MORPH_WARP_GREP_TIMEOUT','array','version','\x22>\x0aError\x20reading\x20file:\x20','safeParse','homedir','Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20','[github_codebase_search]\x20Done\x20in\x20','stack','\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]','\x20\x20morph-mcp','sk-','../package.json','Workspace\x20mode\x20enabled:\x20Using\x20','resolve','\x0a</file>','arguments','Invalid\x20Morph\x20API\x20key\x20format.\x20API\x20keys\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20a\x20valid\x20API\x20key.','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.','morph-v3-fast','indexOf','filter','glob','-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a','SymlinkError','tool_call_complete','optional','warn','path_validation_failed','errors','compaction_failed','default',',\x20removed\x20','.\x20Changes:\x20','role','exit','file','github_codebase_search','RipgrepError','mcp-filesystem','sep','boolean','error','morph-mcp','.cursor','api-key','codebase_search','morph-','split','grep','parse','133ZBtpgE','readFile','substring','\x0aOptions:','-\x20Glob\x20search\x20`','new_string','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','[could\x20not\x20read\x20file:\x20','includes','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','--api-key','code','FileNotFound','Parameters:\x0a'];a0_0x18cf=function(){return _0x33d095;};return a0_0x18cf();}import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{getValidRootDirectories}from'./roots-utils.js';import{getOperatingSystemType,logMcpStderr}from'./log-utils.js';import{logger}from'./logger.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider,GITHUB_SEARCH_TOOL_NAME,GITHUB_SEARCH_DESCRIPTION}from'@morphllm/morphsdk/tools/warp-grep';import{WarpGrepClient,formatResult}from'@morphllm/morphsdk/tools/warp-grep/client';import{compactFileContexts}from'@morphllm/morphsdk/tools/compact';import a0_0x8c58ac from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES}from'./tool-definitions.js';function fixPathRepetition(_0x5217e2){const _0x426551=a0_0x2f96,_0x37ad5b=_0x5217e2[_0x426551(0x26f)](a0_0x390fe1['sep'])[_0x426551(0x254)](Boolean);if(_0x37ad5b[_0x426551(0x2e2)]<0x2)return null;for(let _0x42ff5a=Math['floor'](_0x37ad5b[_0x426551(0x2e2)]/0x2);_0x42ff5a>=0x1;_0x42ff5a--){for(let _0x46e03a=0x0;_0x46e03a<=_0x37ad5b[_0x426551(0x2e2)]-0x2*_0x42ff5a;_0x46e03a++){const _0x45a1f4=_0x37ad5b['slice'](_0x46e03a,_0x46e03a+_0x42ff5a),_0x25b420=_0x37ad5b['slice'](_0x46e03a+_0x42ff5a,_0x46e03a+0x2*_0x42ff5a);if(_0x45a1f4[_0x426551(0x2ef)]((_0x25a5d5,_0x180414)=>_0x25a5d5===_0x25b420[_0x180414])){const _0x4810fe=[..._0x37ad5b[_0x426551(0x2b0)](0x0,_0x46e03a),..._0x37ad5b['slice'](_0x46e03a+_0x42ff5a)];return a0_0x390fe1[_0x426551(0x267)]+_0x4810fe[_0x426551(0x2cf)](a0_0x390fe1[_0x426551(0x267)]);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x12bc1f=a0_0x2f96;try{const _0x18b13b=require(_0x12bc1f(0x24a));return _0x18b13b[_0x12bc1f(0x240)]??_0x12bc1f(0x2ba);}catch(_0x1f43b7){return logMcpStderr(_0x12bc1f(0x1f2),_0x1f43b7),_0x12bc1f(0x2ba);}}function printHelp(){const _0x4c82eb=a0_0x2f96;console[_0x4c82eb(0x20c)](_0x4c82eb(0x2de)+getPackageVersion()),console[_0x4c82eb(0x20c)](_0x4c82eb(0x247)),console[_0x4c82eb(0x20c)](_0x4c82eb(0x275)),console[_0x4c82eb(0x20c)](_0x4c82eb(0x23b)),console[_0x4c82eb(0x20c)](_0x4c82eb(0x2c2)),console[_0x4c82eb(0x20c)]('\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit'),console[_0x4c82eb(0x20c)](_0x4c82eb(0x1e1)),console[_0x4c82eb(0x20c)](_0x4c82eb(0x248)),console[_0x4c82eb(0x20c)](_0x4c82eb(0x2b2));}const cliArgs=process[a0_0x5035ba(0x2cd)]['slice'](0x2),VERSION_FLAGS=new Set([a0_0x5035ba(0x228),'-v','-V']),HELP_FLAGS=new Set([a0_0x5035ba(0x1f0),'-h']);cliArgs[a0_0x5035ba(0x1ef)](_0x3d5907=>VERSION_FLAGS[a0_0x5035ba(0x2bc)](_0x3d5907))&&(console['log']('@morphllm/morphmcp\x20'+getPackageVersion()),process[a0_0x5035ba(0x262)](0x0));cliArgs[a0_0x5035ba(0x1ef)](_0x38cb17=>HELP_FLAGS['has'](_0x38cb17))&&(printHelp(),process[a0_0x5035ba(0x262)](0x0));function getCliArg(_0x4ef63f){const _0x5b20f0=a0_0x5035ba;for(let _0x3798cb=0x0;_0x3798cb<cliArgs[_0x5b20f0(0x2e2)];_0x3798cb++){const _0x4d45bd=cliArgs[_0x3798cb];if(_0x4d45bd[_0x5b20f0(0x2c8)]('--'+_0x4ef63f+'='))return _0x4d45bd[_0x5b20f0(0x2b0)](('--'+_0x4ef63f+'=')[_0x5b20f0(0x2e2)]);if(_0x4d45bd==='--'+_0x4ef63f&&_0x3798cb+0x1<cliArgs[_0x5b20f0(0x2e2)])return cliArgs[_0x3798cb+0x1];}return undefined;}const args=[];for(let i=0x0;i<cliArgs[a0_0x5035ba(0x2e2)];i++){const arg=cliArgs[i];if(VERSION_FLAGS['has'](arg)||HELP_FLAGS['has'](arg))continue;if(arg['startsWith'](a0_0x5035ba(0x2c6)))continue;if(arg===a0_0x5035ba(0x27d)){i++;continue;}args[a0_0x5035ba(0x1e2)](arg);}const WORKSPACE_ROOT=process['env'][a0_0x5035ba(0x234)]||process['env']['PWD']||process[a0_0x5035ba(0x22f)](),ENABLE_WORKSPACE_MODE=process[a0_0x5035ba(0x2d2)][a0_0x5035ba(0x205)]!==a0_0x5035ba(0x2ac),MORPH_API_KEY=getCliArg(a0_0x5035ba(0x26c))??process['env'][a0_0x5035ba(0x237)],MORPH_API_URL=process[a0_0x5035ba(0x2d2)]['MORPH_API_URL'],MORPH_LARGE_APPLY=process[a0_0x5035ba(0x2d2)]['MORPH_LARGE_APPLY']!==a0_0x5035ba(0x2ac),MORPH_WARP_GREP_TIMEOUT=process[a0_0x5035ba(0x2d2)][a0_0x5035ba(0x23e)]?parseInt(process[a0_0x5035ba(0x2d2)][a0_0x5035ba(0x23e)],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),DEFAULT_DISABLED_TOOLS=new Set(),DISABLED_TOOLS=process[a0_0x5035ba(0x2d2)][a0_0x5035ba(0x2a3)]?new Set(process[a0_0x5035ba(0x2d2)]['DISABLED_TOOLS'][a0_0x5035ba(0x26f)](',')['map'](_0x3eeba9=>_0x3eeba9[a0_0x5035ba(0x297)]())[a0_0x5035ba(0x254)](_0x12a26a=>_0x12a26a['length']>0x0)):DEFAULT_DISABLED_TOOLS;if(DISABLED_TOOLS[a0_0x5035ba(0x22a)]>0x0){for(const tool of DISABLED_TOOLS){!KNOWN_TOOL_NAMES['has'](tool)&&console[a0_0x5035ba(0x269)](a0_0x5035ba(0x291)+tool+a0_0x5035ba(0x231)+[...KNOWN_TOOL_NAMES][a0_0x5035ba(0x2cf)](',\x20'));}console[a0_0x5035ba(0x269)](a0_0x5035ba(0x21f)+[...DISABLED_TOOLS][a0_0x5035ba(0x2cf)](',\x20'));}MORPH_API_KEY&&!MORPH_API_KEY[a0_0x5035ba(0x2c8)](a0_0x5035ba(0x249))&&!MORPH_API_KEY['startsWith'](a0_0x5035ba(0x26e))&&logMcpStderr('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x438d36){const _0x2fa67e=a0_0x5035ba;try{await a0_0x8c58ac['post']('https://morphllm.com/api/error-report',{..._0x438d36,'timestamp':new Date()[_0x2fa67e(0x282)](),'source':_0x438d36[_0x2fa67e(0x2b6)]||_0x2fa67e(0x266),'os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x438d36[_0x2fa67e(0x301)]}},{'timeout':0x1388,'headers':{'Content-Type':'application/json','Authorization':_0x2fa67e(0x2af)+MORPH_API_KEY}});}catch{}}function extractStatusCode(_0x49dfba,_0x326dc5){const _0x10eb47=a0_0x5035ba;if(_0x49dfba&&typeof _0x49dfba===_0x10eb47(0x2f0)&&_0x10eb47(0x2ec)in _0x49dfba)return _0x49dfba[_0x10eb47(0x2ec)];if(_0x49dfba&&typeof _0x49dfba===_0x10eb47(0x2f0)&&_0x10eb47(0x235)in _0x49dfba)return _0x49dfba[_0x10eb47(0x235)]?.['status'];const _0x9ef8af=_0x326dc5[_0x10eb47(0x2d9)](/\b(401|429)\b/);return _0x9ef8af?parseInt(_0x9ef8af[0x1],0xa):null;}function handleMorphAPIError(_0x34bdc7){const _0x5943d1=a0_0x5035ba,_0x4f5445=_0x34bdc7 instanceof Error?_0x34bdc7['message']:String(_0x34bdc7),_0x149f58=extractStatusCode(_0x34bdc7,_0x4f5445);switch(_0x149f58){case 0x191:return{'content':[{'type':_0x5943d1(0x28c),'text':_0x5943d1(0x2f4)}],'isError':!![]};case 0x1ad:return{'content':[{'type':'text','text':_0x5943d1(0x251)}],'isError':!![]};default:return null;}}args[a0_0x5035ba(0x2e2)]===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr(a0_0x5035ba(0x27c)),logMcpStderr('Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:'),logMcpStderr(a0_0x5035ba(0x2f3)),logMcpStderr(a0_0x5035ba(0x278)),logMcpStderr('\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)'),logMcpStderr(a0_0x5035ba(0x1f6)));function normalizePath(_0x41e013){const _0x22a6d6=a0_0x5035ba;return a0_0x390fe1[_0x22a6d6(0x2dd)](_0x41e013);}function expandHome(_0x2bf48a){const _0x212396=a0_0x5035ba;if(_0x2bf48a['startsWith']('~/')||_0x2bf48a==='~')return a0_0x390fe1['join'](a0_0x5edaef[_0x212396(0x243)](),_0x2bf48a[_0x212396(0x2b0)](0x1));return _0x2bf48a;}let allowedDirectories=await Promise[a0_0x5035ba(0x2bb)](args['map'](async _0x7ba6eb=>{const _0x575c3a=a0_0x5035ba,_0x6f2b98=expandHome(_0x7ba6eb),_0x2c4023=a0_0x390fe1[_0x575c3a(0x24c)](_0x6f2b98);try{const _0x2d2cf0=await a0_0x1b5499[_0x575c3a(0x1ff)](_0x2c4023);return normalizePath(_0x2d2cf0);}catch(_0x4d196e){return normalizePath(_0x2c4023);}}));if(ENABLE_WORKSPACE_MODE&&args['length']===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x5035ba(0x1e2)](workspaceDir),logMcpStderr(a0_0x5035ba(0x24b)+workspaceDir+a0_0x5035ba(0x208)));}catch(a0_0x37f113){logMcpStderr(a0_0x5035ba(0x244)+a0_0x37f113);}async function detectWorkspaceRoot(_0x5cd8b7){const _0x481f7a=a0_0x5035ba;let _0x3cb63a=a0_0x390fe1['resolve'](_0x5cd8b7);const _0x23b94b=[_0x481f7a(0x218),'.vscode','package.json','Cargo.toml','pyproject.toml','go.mod',_0x481f7a(0x26b),_0x481f7a(0x21e),_0x481f7a(0x2d0)];while(_0x3cb63a!==a0_0x390fe1[_0x481f7a(0x1e9)](_0x3cb63a)){for(const _0x24b5f9 of _0x23b94b){const _0x1047b9=a0_0x390fe1['join'](_0x3cb63a,_0x24b5f9);try{return await a0_0x1b5499['access'](_0x1047b9),normalizePath(_0x3cb63a);}catch{}}_0x3cb63a=a0_0x390fe1['dirname'](_0x3cb63a);}return normalizePath(_0x5cd8b7);}await Promise[a0_0x5035ba(0x2bb)](args[a0_0x5035ba(0x2d6)](async _0x213d63=>{const _0x1298fe=a0_0x5035ba;try{const _0xa58da3=await a0_0x1b5499[_0x1298fe(0x2f9)](expandHome(_0x213d63));!_0xa58da3[_0x1298fe(0x292)]()&&(logMcpStderr(_0x1298fe(0x211)+_0x213d63+_0x1298fe(0x204)),process[_0x1298fe(0x262)](0x1));}catch(_0x1b77c0){logMcpStderr(_0x1298fe(0x1fd)+_0x213d63+':',_0x1b77c0),process[_0x1298fe(0x262)](0x1);}}));async function validatePath(_0x3e9bbf){const _0x3e65a0=a0_0x5035ba,_0x4a7bb8=expandHome(_0x3e9bbf),_0x5c2127=a0_0x390fe1[_0x3e65a0(0x24c)](_0x4a7bb8);logger[_0x3e65a0(0x302)]('MCP','path_validation_start',{'raw_path':_0x3e9bbf,'absolute':_0x5c2127});try{const _0x59cc36=await a0_0x1b5499[_0x3e65a0(0x1ff)](_0x5c2127);return logger['debug'](_0x3e65a0(0x233),_0x3e65a0(0x227),{'resolved':_0x59cc36,'symlink':_0x59cc36!==_0x5c2127}),_0x59cc36;}catch(_0x333027){if(_0x333027[_0x3e65a0(0x27e)]===_0x3e65a0(0x1fa)){const _0x27a157=a0_0x390fe1[_0x3e65a0(0x1e9)](_0x5c2127);try{const _0x4acb4a=await a0_0x1b5499[_0x3e65a0(0x1ff)](_0x27a157),_0x4057ec=a0_0x390fe1[_0x3e65a0(0x2cf)](_0x4acb4a,a0_0x390fe1[_0x3e65a0(0x201)](_0x5c2127));return logger[_0x3e65a0(0x302)](_0x3e65a0(0x233),_0x3e65a0(0x227),{'resolved':_0x4057ec,'new_file':!![]}),_0x4057ec;}catch{logger[_0x3e65a0(0x269)](_0x3e65a0(0x233),_0x3e65a0(0x25b),{'raw_path':_0x3e9bbf,'error':_0x3e65a0(0x2b3)+_0x27a157});throw new Error(_0x3e65a0(0x2b3)+_0x27a157);}}logger[_0x3e65a0(0x269)](_0x3e65a0(0x233),'path_validation_failed',{'raw_path':_0x3e9bbf,'error':_0x333027[_0x3e65a0(0x20b)]});throw _0x333027;}}const MorphEditFileArgsSchema=z[a0_0x5035ba(0x2f0)]({'path':z['string'](),'code_edit':z[a0_0x5035ba(0x2a6)]()['describe']('Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.'),'instruction':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x229)](a0_0x5035ba(0x1e5)),'dryRun':z[a0_0x5035ba(0x268)]()[a0_0x5035ba(0x25e)](![])[a0_0x5035ba(0x229)](a0_0x5035ba(0x2b5))}),CODEBASE_SEARCH_QUERY_DESCRIPTION=a0_0x5035ba(0x2a1),WarpGrepArgsSchema=z[a0_0x5035ba(0x2f0)]({'search_string':z['string']()[a0_0x5035ba(0x229)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z['string']()[a0_0x5035ba(0x229)](a0_0x5035ba(0x23d)),'search_type':z['enum'](['default',a0_0x5035ba(0x284)])['optional']()[a0_0x5035ba(0x229)](a0_0x5035ba(0x30b))}),WarpGrepGitHubArgsSchema=z[a0_0x5035ba(0x2f0)]({'search_string':z['string']()[a0_0x5035ba(0x229)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x259)]()[a0_0x5035ba(0x229)](a0_0x5035ba(0x286)),'owner_repo':z[a0_0x5035ba(0x2a6)]()['optional']()[a0_0x5035ba(0x229)](a0_0x5035ba(0x226)),'branch':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x259)]()[a0_0x5035ba(0x229)](a0_0x5035ba(0x2fb))}),CodebaseSearchArgsSchema=z['object']({'query':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x229)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x229)](a0_0x5035ba(0x219)),'branch':z[a0_0x5035ba(0x2a6)]()['optional']()['describe'](a0_0x5035ba(0x2fc)),'commitHash':z[a0_0x5035ba(0x2a6)]()[a0_0x5035ba(0x259)]()[a0_0x5035ba(0x229)]('Specific\x20commit\x20hash\x20to\x20search'),'targetDirectories':z[a0_0x5035ba(0x23f)](z[a0_0x5035ba(0x2a6)]())[a0_0x5035ba(0x25e)]([])[a0_0x5035ba(0x229)](a0_0x5035ba(0x1eb)),'limit':z[a0_0x5035ba(0x2fa)]()[a0_0x5035ba(0x259)]()[a0_0x5035ba(0x25e)](0xa)['describe'](a0_0x5035ba(0x20e))}),server=new Server({'name':a0_0x5035ba(0x26a),'version':a0_0x5035ba(0x2e1)},{'capabilities':{'tools':{}}});server[a0_0x5035ba(0x1e0)](ListToolsRequestSchema,async()=>{const _0x18857a=a0_0x5035ba,_0x4d8cb3=[{'name':TOOL_NAMES['EDIT_FILE'],'description':'**PRIMARY\x20TOOL\x20FOR\x20EDITING\x20FILES.**\x20Fast,\x20accurate,\x20and\x20prevents\x20context\x20pollution.\x20Especially\x20useful\x20when\x20making\x20multiple\x20edits\x20in\x20one\x20file:\x20describe\x20all\x20changes\x20in\x20a\x20single\x20call\x20and\x20the\x20semantic\x20edit\x20applies\x20them\x20all\x20at\x20once,\x20more\x20accurately\x20and\x20faster\x20than\x20sequential\x20edits.\x20Unlike\x20search-and-replace\x20or\x20patch\x20edits\x20which\x20do\x20narrow\x20edits\x20one\x20at\x20a\x20time,\x20with\x20this\x20tool\x20you\x20should\x20do\x20all\x20your\x20code\x20changes\x20in\x20one\x20go\x20separated\x20by\x20`//\x20...\x20existing\x20code\x20...`\x20markers.\x20This\x20saves\x20tokens\x20and\x20improves\x20performance\x20because\x20you\x20do\x20not\x20need\x20to\x20reread\x20files\x20before\x20edits.\x20All\x20three\x20parameters\x20are\x20required.\x0a\x0a'+_0x18857a(0x280)+_0x18857a(0x309)+_0x18857a(0x1ea)+_0x18857a(0x256)+_0x18857a(0x2ab)+'Example\x20format:\x0a'+_0x18857a(0x28a)+_0x18857a(0x30a)+_0x18857a(0x281)+_0x18857a(0x2f2)+'-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a'+_0x18857a(0x28b),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':TOOL_NAMES[_0x18857a(0x311)],'description':_0x18857a(0x203)+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+_0x18857a(0x288)+'You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20'+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'requiresApiKey':!![]}],_0x3fca80=_0x4d8cb3[_0x18857a(0x254)](_0x3fce00=>{const _0x32abc1=_0x18857a;if(DISABLED_TOOLS[_0x32abc1(0x2bc)](_0x3fce00[_0x32abc1(0x21c)]))return console['error'](_0x32abc1(0x2d8)+_0x3fce00[_0x32abc1(0x21c)]+_0x32abc1(0x2d1)),![];if('requiresApiKey'in _0x3fce00&&_0x3fce00['requiresApiKey']&&!MORPH_API_KEY)return logMcpStderr('Warning:\x20'+_0x3fce00[_0x32abc1(0x21c)]+_0x32abc1(0x2d3)),![];return!![];});return{'tools':_0x3fca80[_0x18857a(0x2d6)](_0x487e9f=>({'name':_0x487e9f[_0x18857a(0x21c)],'description':_0x487e9f['description'],'inputSchema':_0x487e9f[_0x18857a(0x300)]}))};}),server[a0_0x5035ba(0x1e0)](CallToolRequestSchema,async _0x26e0b8=>{const _0x4492bc=a0_0x5035ba,{name:_0x33ec73,arguments:_0x189e0b}=_0x26e0b8[_0x4492bc(0x207)],_0x2c4ec8=Date[_0x4492bc(0x2cb)]();logger['debug'](_0x4492bc(0x233),'tool_call_received',{'tool':_0x33ec73,'args':_0x33ec73==='edit_file'?{'path':_0x189e0b?.[_0x4492bc(0x310)],'instruction':_0x189e0b?.[_0x4492bc(0x29a)]||_0x189e0b?.[_0x4492bc(0x200)],'dryRun':_0x189e0b?.[_0x4492bc(0x239)]}:_0x189e0b});try{if(!MORPH_API_KEY)return{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x22d)}],'isError':!![]};if(!MORPH_API_KEY[_0x4492bc(0x2c8)]('sk-')&&!MORPH_API_KEY['startsWith'](_0x4492bc(0x26e)))return{'content':[{'type':'text','text':_0x4492bc(0x24f)}],'isError':!![]};if(DISABLED_TOOLS['has'](_0x33ec73))return{'content':[{'type':'text','text':_0x4492bc(0x2c3)+_0x33ec73+_0x4492bc(0x220)}],'isError':![]};switch(_0x33ec73){case TOOL_NAMES['EDIT_FILE']:{let _0x3e6219=_0x189e0b;if(_0x3e6219&&typeof _0x3e6219===_0x4492bc(0x2f0)){if(!(_0x4492bc(0x310)in _0x3e6219)){const _0x560cb7=_0x3e6219[_0x4492bc(0x2a7)]??_0x3e6219[_0x4492bc(0x2fd)]??_0x3e6219[_0x4492bc(0x20a)]??_0x3e6219[_0x4492bc(0x296)]??_0x3e6219[_0x4492bc(0x263)];if(_0x560cb7)_0x3e6219={..._0x3e6219,'path':_0x560cb7};}_0x4492bc(0x200)in _0x3e6219&&!(_0x4492bc(0x29a)in _0x3e6219)&&(_0x3e6219={..._0x3e6219,'instruction':_0x3e6219['instructions']});if(!(_0x4492bc(0x2e5)in _0x3e6219)){const _0x5ea36f=_0x3e6219[_0x4492bc(0x27e)]??_0x3e6219[_0x4492bc(0x277)]??_0x3e6219[_0x4492bc(0x2bf)]??_0x3e6219[_0x4492bc(0x30e)];if(_0x5ea36f)_0x3e6219={..._0x3e6219,'code_edit':_0x5ea36f};}}const _0x408980=MorphEditFileArgsSchema[_0x4492bc(0x242)](_0x3e6219);if(!_0x408980[_0x4492bc(0x2f5)])throw new Error(_0x4492bc(0x2e8)+_0x408980[_0x4492bc(0x269)]);const _0x3557eb=await validatePath(_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x310)]);let _0x1b45d8=null,_0x267ff8=!![],_0x17e731=null;try{_0x1b45d8=await a0_0x1b5499[_0x4492bc(0x273)](_0x3557eb,_0x4492bc(0x1e6)),logger[_0x4492bc(0x302)](_0x4492bc(0x233),_0x4492bc(0x210),{'path':_0x3557eb,'size_bytes':_0x1b45d8[_0x4492bc(0x2e2)]});}catch(_0x4ed777){const _0x30ec08=_0x4ed777[_0x4492bc(0x27e)];_0x30ec08===_0x4492bc(0x1fa)?(_0x267ff8=![],_0x1b45d8='',logger[_0x4492bc(0x302)](_0x4492bc(0x233),'file_read_complete',{'path':_0x3557eb,'exists':![]})):(_0x17e731=_0x4492bc(0x206)+(_0x30ec08||_0x4492bc(0x2ba))+'\x20-\x20'+(_0x4ed777 instanceof Error?_0x4ed777[_0x4492bc(0x20b)]:String(_0x4ed777)),logger[_0x4492bc(0x269)](_0x4492bc(0x233),'file_read_failed',{'path':_0x3557eb,'error':_0x17e731}),logMcpStderr(_0x4492bc(0x23a)+_0x17e731));}let _0x4d59c2;try{const _0x16aa45=MORPH_API_KEY;if(!_0x16aa45)throw new Error(_0x4492bc(0x2d7));const _0x15577c=a0_0x390fe1[_0x4492bc(0x1e9)](_0x3557eb),_0x17cf81=a0_0x390fe1[_0x4492bc(0x201)](_0x3557eb);logger[_0x4492bc(0x302)](_0x4492bc(0x233),_0x4492bc(0x2dc),{'model':_0x4492bc(0x252),'path':_0x408980[_0x4492bc(0x2b1)]['path'],'instruction_len':_0x408980[_0x4492bc(0x2b1)]['instruction']['length'],'code_edit_len':_0x408980['data'][_0x4492bc(0x2e5)][_0x4492bc(0x2e2)],'original_code_len':_0x1b45d8?.[_0x4492bc(0x2e2)]??0x0,'dry_run':_0x408980['data'][_0x4492bc(0x239)]});const _0xee0892=Date['now'](),_0x29433d=await executeEditFile({'target_filepath':_0x17cf81,'code_edit':_0x408980[_0x4492bc(0x2b1)]['code_edit'],'instruction':_0x408980['data'][_0x4492bc(0x29a)]},{'morphApiKey':_0x16aa45,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x15577c,'autoWrite':!_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x239)],'generateUdiff':![],'debug':![]}),_0x16e7f2=Date[_0x4492bc(0x2cb)]()-_0xee0892;_0x4d59c2=_0x29433d[_0x4492bc(0x2e4)];if(!_0x29433d[_0x4492bc(0x2f5)])throw new Error(_0x29433d[_0x4492bc(0x269)]||_0x4492bc(0x21b));const _0x16264d=_0x29433d[_0x4492bc(0x2bd)],_0x58a30a=_0x4492bc(0x29d)+_0x16264d[_0x4492bc(0x236)]+_0x4492bc(0x25f)+_0x16264d[_0x4492bc(0x1fe)]+_0x4492bc(0x221)+_0x16264d[_0x4492bc(0x2e3)];logger[_0x4492bc(0x302)](_0x4492bc(0x233),_0x4492bc(0x258),{'tool':_0x4492bc(0x29e),'success':!![],'latency_ms':Date[_0x4492bc(0x2cb)]()-_0x2c4ec8,'edit_latency_ms':_0x16e7f2,'changes':{'added':_0x16264d[_0x4492bc(0x236)],'removed':_0x16264d[_0x4492bc(0x1fe)],'modified':_0x16264d['linesModified']},'completion_id':_0x4d59c2});if(_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x239)])return{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x1ee)+(_0x267ff8?'':_0x4492bc(0x307))+':\x20'+_0x408980['data']['instruction']+_0x4492bc(0x260)+_0x58a30a+_0x4492bc(0x29b)+_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x310)]+'.'}]};return{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x2c7)+(_0x267ff8?_0x4492bc(0x22b):_0x4492bc(0x2ff))+':\x20'+_0x408980[_0x4492bc(0x2b1)]['instruction']+_0x4492bc(0x260)+_0x58a30a+_0x4492bc(0x29b)+_0x408980[_0x4492bc(0x2b1)]['path']+'.'}]};}catch(_0x32f252){const _0x4101aa=handleMorphAPIError(_0x32f252);if(_0x4101aa)return logger[_0x4492bc(0x269)](_0x4492bc(0x233),_0x4492bc(0x2be),{'tool':_0x4492bc(0x29e),'error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0x4492bc(0x2cb)]()-_0x2c4ec8}),_0x4101aa;const _0x3a0782=_0x32f252 instanceof Error?_0x32f252[_0x4492bc(0x20b)]:String(_0x32f252);return logger[_0x4492bc(0x269)](_0x4492bc(0x233),_0x4492bc(0x2be),{'tool':_0x4492bc(0x29e),'error':_0x3a0782,'path':_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x310)],'validated_path':_0x3557eb,'latency_ms':Date[_0x4492bc(0x2cb)]()-_0x2c4ec8,'stack':_0x32f252 instanceof Error?_0x32f252[_0x4492bc(0x246)]:undefined}),reportMorphError({'error_message':_0x3a0782,'error_type':_0x32f252 instanceof Error?_0x32f252['constructor']['name']:'UnknownError','context':{'tool':_0x4492bc(0x29e),'completion_id':_0x4d59c2,'file_path':_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x310)],'validated_path':_0x3557eb,'instruction':_0x408980['data'][_0x4492bc(0x29a)],'model':MORPH_LARGE_APPLY?_0x4492bc(0x299):_0x4492bc(0x252),'dry_run':_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x239)],'file_exists':_0x267ff8,'file_read_error':_0x17e731,'file_readable':_0x1b45d8!==null,'request_content':{'path':_0x408980[_0x4492bc(0x2b1)]['path'],'code_edit':_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x2e5)],'instruction':_0x408980[_0x4492bc(0x2b1)][_0x4492bc(0x29a)],'original_code':_0x1b45d8!==null?_0x1b45d8[_0x4492bc(0x2e2)]>0xc350?_0x1b45d8['substring'](0x0,0xc350)+_0x4492bc(0x287)+_0x1b45d8[_0x4492bc(0x2e2)]+'\x20chars)':_0x1b45d8:_0x4492bc(0x27a)+(_0x17e731||_0x4492bc(0x2e7))+']','original_code_length':_0x1b45d8?.[_0x4492bc(0x2e2)]??0x0,'model':MORPH_LARGE_APPLY?_0x4492bc(0x299):_0x4492bc(0x252),'dry_run':_0x408980['data']['dryRun']}},'stack_trace':_0x32f252 instanceof Error?_0x32f252[_0x4492bc(0x246)]:undefined,'source':'mcp-filesystem'})[_0x4492bc(0x1ec)](()=>{}),{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x2c4)+_0x3a0782}],'isError':!![]};}}case TOOL_NAMES[_0x4492bc(0x311)]:{const _0x1e98d4=WarpGrepArgsSchema[_0x4492bc(0x242)](_0x189e0b);if(!_0x1e98d4[_0x4492bc(0x2f5)])return{'content':[{'type':_0x4492bc(0x28c),'text':'Invalid\x20arguments:\x20'+_0x1e98d4[_0x4492bc(0x269)]}],'isError':!![]};const _0x573713=_0x334d94=>{const _0x4bc638=_0x4492bc,_0x89faf7=[];for(const _0xefe52f of _0x334d94||[]){if(_0xefe52f[_0x4bc638(0x261)]==='assistant'&&Array['isArray'](_0xefe52f[_0x4bc638(0x285)]))for(const _0x423dba of _0xefe52f['tool_calls']){try{const _0x54f0cb=_0x423dba[_0x4bc638(0x22c)]?.['name'],_0x1fb22a=JSON[_0x4bc638(0x271)](_0x423dba[_0x4bc638(0x22c)]?.[_0x4bc638(0x24e)]||'{}');if(_0x54f0cb==='grep_search')_0x89faf7[_0x4bc638(0x1e2)]('grep\x20\x27'+_0x1fb22a[_0x4bc638(0x2eb)]+'\x27\x20'+(_0x1fb22a[_0x4bc638(0x310)]||'.'));else{if(_0x54f0cb===_0x4bc638(0x2cc))_0x89faf7[_0x4bc638(0x1e2)](_0x4bc638(0x1f3)+_0x1fb22a[_0x4bc638(0x310)]);else{if(_0x54f0cb===_0x4bc638(0x295))_0x89faf7[_0x4bc638(0x1e2)](_0x4bc638(0x1e4)+(_0x1fb22a[_0x4bc638(0x2b9)]||'.'));else{if(_0x54f0cb===_0x4bc638(0x255))_0x89faf7['push'](_0x4bc638(0x23c)+_0x1fb22a[_0x4bc638(0x2eb)]+'\x27\x20'+(_0x1fb22a[_0x4bc638(0x310)]||'.'));else _0x54f0cb==='finish'&&_0x89faf7[_0x4bc638(0x1e2)]('finish');}}}}catch{}}}return _0x89faf7;},_0xcb4fe0=_0x54a056=>{const _0x556bb9=_0x4492bc,_0x190380=[];if(!_0x54a056||!Array['isArray'](_0x54a056))return _0x190380;const _0x3569c4=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x556bb9(0x27f),'tool':_0x556bb9(0x2cc)},{'pattern':/\[PATH ERROR\]/,'error_type':_0x556bb9(0x30f),'tool':_0x556bb9(0x2cc)},{'pattern':/\[READ ERROR\]/,'error_type':'ReadError','tool':'read'},{'pattern':/\[UNREADABLE FILE\]/,'error_type':_0x556bb9(0x2c0),'tool':_0x556bb9(0x2cc)},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x556bb9(0x265),'tool':_0x556bb9(0x270)},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x556bb9(0x29f),'tool':'grep'},{'pattern':/\[BINARY FILE\]/,'error_type':_0x556bb9(0x2c0),'tool':_0x556bb9(0x2cc)},{'pattern':/\[SYMLINK\]/,'error_type':_0x556bb9(0x257),'tool':'read'},{'pattern':/not a text file/,'error_type':_0x556bb9(0x2c0),'tool':'read'},{'pattern':/symbolic link/,'error_type':'SymlinkError','tool':_0x556bb9(0x2cc)},{'pattern':/Error reading file:/,'error_type':_0x556bb9(0x2f7),'tool':_0x556bb9(0x2cc)},{'pattern':/status="error"/,'error_type':_0x556bb9(0x2e0),'tool':_0x556bb9(0x2ba)}];let _0x557ef2=0x0;for(const _0x652997 of _0x54a056){_0x652997[_0x556bb9(0x261)]===_0x556bb9(0x224)&&Array[_0x556bb9(0x202)](_0x652997['tool_calls'])&&_0x557ef2++;const _0xce5755=_0x652997[_0x556bb9(0x2bf)];if((_0x652997[_0x556bb9(0x261)]===_0x556bb9(0x217)||_0x652997[_0x556bb9(0x261)]===_0x556bb9(0x2a2))&&_0xce5755&&typeof _0xce5755===_0x556bb9(0x2a6))for(const {pattern:_0x5f2b5e,error_type:_0x451bd7,tool:_0x882862}of _0x3569c4){const _0x2b6751=_0xce5755['match'](new RegExp(_0x5f2b5e[_0x556bb9(0x2b6)],'g'));if(_0x2b6751)for(const _0x4a5f33 of _0x2b6751){const _0x570ef1=_0xce5755[_0x556bb9(0x253)](_0x4a5f33),_0x40025a=_0xce5755[_0x556bb9(0x274)](_0x570ef1,Math[_0x556bb9(0x2b8)](_0x570ef1+0xc8,_0xce5755[_0x556bb9(0x2e2)]));_0x190380[_0x556bb9(0x1e2)]({'tool':_0x882862,'error_type':_0x451bd7,'error_message':_0x40025a[_0x556bb9(0x26f)]('\x0a')[0x0],'turn':_0x557ef2});}}}return _0x190380;};try{const _0x1b5ac3=a0_0x390fe1[_0x4492bc(0x24c)](_0x1e98d4['data']['repo_path']),_0x21d8bd=_0x1e98d4['data']['search_type'],_0x492c8b=_0x21d8bd==='node_modules'?{'allowNames':[_0x4492bc(0x284)]}:undefined,_0x61b80b=new LocalRipgrepProvider(_0x1b5ac3,undefined,_0x492c8b);logger['debug'](_0x4492bc(0x233),_0x4492bc(0x216),{'type':'LocalRipgrepProvider','repo_root':_0x1b5ac3,'search_type':_0x21d8bd||_0x4492bc(0x25e)}),logger[_0x4492bc(0x302)]('MCP',_0x4492bc(0x305),{'query':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'repo_root':_0x1b5ac3,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x1e5350=Date[_0x4492bc(0x2cb)](),_0xb9d435=await runWarpGrep({'searchTerm':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'repoRoot':_0x1b5ac3,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x61b80b,'search_type':_0x21d8bd}),_0x75b7c0=Date['now']()-_0x1e5350,_0x533101=_0xb9d435[_0x4492bc(0x28f)]?.['metadata']?.[_0x4492bc(0x1f9)]?.[_0x4492bc(0x2e2)]??0x0;logger['debug'](_0x4492bc(0x233),'warp_grep_complete',{'termination':_0xb9d435[_0x4492bc(0x290)],'turns':_0xb9d435[_0x4492bc(0x1fb)]?.[_0x4492bc(0x232)]??0x0,'files_found':_0x533101,'latency_ms':_0x75b7c0});const _0x36cf2a=_0xcb4fe0(_0xb9d435[_0x4492bc(0x2e9)]);_0x36cf2a[_0x4492bc(0x2e2)]>0x0&&reportMorphError({'error_message':_0x4492bc(0x21a)+_0x36cf2a['length']+_0x4492bc(0x2a8),'error_type':_0x4492bc(0x213),'level':'warn','tool':'codebase_search','context':{'repo_path':_0x1e98d4['data']['repo_path'],'query':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'model':'morph-warp-grep-v2.1','termination_reason':_0xb9d435[_0x4492bc(0x290)],'sub_tool_errors':_0x36cf2a,'timings':_0xb9d435[_0x4492bc(0x1fb)],'tool_calls':_0x573713(_0xb9d435[_0x4492bc(0x2e9)]),'messages':_0xb9d435[_0x4492bc(0x2e9)]?.[_0x4492bc(0x2d6)](_0x19b82d=>({'role':_0x19b82d[_0x4492bc(0x261)],'content':_0x19b82d[_0x4492bc(0x2bf)],..._0x19b82d['tool_calls']?{'tool_calls':_0x19b82d['tool_calls'][_0x4492bc(0x2e2)]}:{},..._0x19b82d[_0x4492bc(0x2b7)]?{'tool_call_id':_0x19b82d['tool_call_id']}:{}}))},'source':_0x4492bc(0x266)})[_0x4492bc(0x1ec)](()=>{});let _0x141909='';if(_0xb9d435[_0x4492bc(0x290)]===_0x4492bc(0x225)&&_0xb9d435[_0x4492bc(0x28f)]?.[_0x4492bc(0x2a5)]?.[_0x4492bc(0x1f9)]){const _0x35f3ab=_0xb9d435[_0x4492bc(0x28f)][_0x4492bc(0x2a5)][_0x4492bc(0x1f9)];if(_0x35f3ab[_0x4492bc(0x2e2)]===0x0)return _0x141909=_0xb9d435[_0x4492bc(0x28f)][_0x4492bc(0x1f5)]||'No\x20relevant\x20code\x20found\x20for\x20the\x20query.',{'content':[{'type':_0x4492bc(0x28c),'text':_0x141909}]};const _0x44d589=[],_0x49e85c=['Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:'];for(const _0xcc7410 of _0xb9d435['messages']){if(_0xcc7410[_0x4492bc(0x261)]==='assistant'&&Array['isArray'](_0xcc7410[_0x4492bc(0x285)]))for(const _0x3a908e of _0xcc7410[_0x4492bc(0x285)]){try{const _0x428778=_0x3a908e[_0x4492bc(0x22c)]?.['name'],_0x122e94=JSON[_0x4492bc(0x271)](_0x3a908e[_0x4492bc(0x22c)]?.[_0x4492bc(0x24e)]||'{}');if(_0x428778==='grep_search')_0x49e85c[_0x4492bc(0x1e2)](_0x4492bc(0x293)+_0x122e94[_0x4492bc(0x2eb)]+'\x27\x20in\x20`'+(_0x122e94[_0x4492bc(0x310)]||'.')+'`');else{if(_0x428778===_0x4492bc(0x2cc))_0x49e85c['push'](_0x4492bc(0x289)+_0x122e94[_0x4492bc(0x310)]+'`');else{if(_0x428778===_0x4492bc(0x295))_0x49e85c[_0x4492bc(0x1e2)](_0x4492bc(0x1f1)+(_0x122e94[_0x4492bc(0x2b9)]||'.')+'`');else _0x428778===_0x4492bc(0x255)&&_0x49e85c[_0x4492bc(0x1e2)](_0x4492bc(0x276)+_0x122e94[_0x4492bc(0x2eb)]+'`\x20in\x20`'+(_0x122e94[_0x4492bc(0x310)]||'.')+'`');}}}catch{}}}_0x44d589[_0x4492bc(0x1e2)](_0x49e85c['join']('\x0a'));const _0x563e9f=['',_0x4492bc(0x2a0)];for(const _0x119964 of _0x35f3ab){if(_0x119964[_0x4492bc(0x22e)]==='*')_0x563e9f[_0x4492bc(0x1e2)]('-\x20'+_0x119964[_0x4492bc(0x310)]+':*');else{if(Array[_0x4492bc(0x202)](_0x119964['lines'])){const _0xc1704a=_0x119964[_0x4492bc(0x22e)][_0x4492bc(0x2d6)](([_0x32cc73,_0x55f459])=>{if(_0x32cc73===_0x55f459)return''+_0x32cc73;return _0x32cc73+'-'+_0x55f459;});_0x563e9f[_0x4492bc(0x1e2)]('-\x20'+_0x119964[_0x4492bc(0x310)]+':'+_0xc1704a[_0x4492bc(0x2cf)](','));}else _0x563e9f[_0x4492bc(0x1e2)]('-\x20'+_0x119964[_0x4492bc(0x310)]+':*');}}_0x563e9f[_0x4492bc(0x1e2)](''),_0x44d589['push'](_0x563e9f['join']('\x0a')),_0x44d589[_0x4492bc(0x1e2)](_0x4492bc(0x2ce));const _0x5c8a0c=[],_0x288e67=[];for(const _0x2f818e of _0x35f3ab){let _0x3cecd5=a0_0x390fe1[_0x4492bc(0x24c)](_0x1e98d4['data'][_0x4492bc(0x30d)],_0x2f818e['path']),_0x425634=null,_0x2efd74=null;try{_0x425634=await a0_0x1b5499[_0x4492bc(0x273)](_0x3cecd5,{'encoding':'utf-8'});}catch(_0xe6151){const _0x3cfa28=fixPathRepetition(_0x3cecd5);if(_0x3cfa28)try{_0x425634=await a0_0x1b5499[_0x4492bc(0x273)](_0x3cfa28,{'encoding':_0x4492bc(0x1e6)}),_0x3cecd5=_0x3cfa28;}catch{_0x2efd74=_0xe6151 instanceof Error?_0xe6151:new Error(String(_0xe6151));}else _0x2efd74=_0xe6151 instanceof Error?_0xe6151:new Error(String(_0xe6151));}if(_0x425634!==null){const _0x18db96=_0x425634[_0x4492bc(0x26f)](/\r?\n/),_0x24ddfc=[];if(_0x2f818e['lines']==='*'||!Array[_0x4492bc(0x202)](_0x2f818e[_0x4492bc(0x22e)]))for(let _0x429bd4=0x1;_0x429bd4<=_0x18db96[_0x4492bc(0x2e2)];_0x429bd4++){const _0x2891da=_0x18db96[_0x429bd4-0x1];_0x24ddfc[_0x4492bc(0x1e2)](_0x429bd4+'|\x20'+_0x2891da);}else for(const [_0x5dfbdc,_0x41adc1]of _0x2f818e[_0x4492bc(0x22e)]){_0x24ddfc[_0x4492bc(0x2e2)]>0x0&&_0x24ddfc[_0x4492bc(0x1e2)]('');for(let _0x10951b=_0x5dfbdc;_0x10951b<=_0x41adc1&&_0x10951b<=_0x18db96[_0x4492bc(0x2e2)];_0x10951b++){const _0x12c53f=_0x18db96[_0x10951b-0x1];_0x24ddfc['push'](_0x10951b+'|\x20'+_0x12c53f);}}_0x288e67[_0x4492bc(0x1e2)]({'path':_0x2f818e[_0x4492bc(0x310)],'content':_0x24ddfc[_0x4492bc(0x2cf)]('\x0a')});}else _0x5c8a0c['push'](_0x4492bc(0x304)+_0x2f818e['path']+_0x4492bc(0x241)+(_0x2efd74?.[_0x4492bc(0x20b)]||_0x4492bc(0x2f8))+'\x0a</file>');}try{const _0x34436f=await compactFileContexts(_0x288e67,_0x1e98d4['data'][_0x4492bc(0x2ed)],MORPH_API_KEY,MORPH_API_URL);for(const _0xb8fb21 of _0x34436f){_0x5c8a0c[_0x4492bc(0x1e2)](_0x4492bc(0x304)+_0xb8fb21[_0x4492bc(0x310)]+_0x4492bc(0x2f1)+_0xb8fb21['content']+_0x4492bc(0x24d));}}catch(_0x5227de){logger[_0x4492bc(0x25a)]('MCP',_0x4492bc(0x25d),{'error':_0x5227de instanceof Error?_0x5227de['message']:String(_0x5227de),'files_count':_0x288e67['length']});for(const _0x151c39 of _0x288e67){_0x5c8a0c[_0x4492bc(0x1e2)]('<file\x20path=\x22'+_0x151c39[_0x4492bc(0x310)]+'\x22>\x0a'+_0x151c39[_0x4492bc(0x2bf)]+'\x0a</file>');}}_0x44d589[_0x4492bc(0x1e2)](_0x5c8a0c[_0x4492bc(0x2cf)]('\x0a\x0a')),_0x141909=_0x44d589[_0x4492bc(0x2cf)]('\x0a');const _0xc722ba=_0xb9d435['errors']?.[_0x4492bc(0x254)](_0x29e735=>_0x29e735[_0x4492bc(0x20b)]?.[_0x4492bc(0x2c8)]('File\x20read\x20error:'))||[];if(_0xc722ba['length']>0x0){const _0x4dd627=_0xc722ba[_0x4492bc(0x2d6)](_0x274673=>_0x274673[_0x4492bc(0x20b)])[_0x4492bc(0x2cf)](';\x20');reportMorphError({'error_message':_0x4dd627,'error_type':_0x4492bc(0x29c),'context':{'tool':_0x4492bc(0x26d),'repo_path':_0x1e98d4[_0x4492bc(0x2b1)]['repo_path'],'query':_0x1e98d4[_0x4492bc(0x2b1)]['search_string'],'model':_0x4492bc(0x2b4),'termination_reason':_0x4492bc(0x1fc),'error_count':_0xc722ba[_0x4492bc(0x2e2)],'is_timeout':![],'timings':_0xb9d435[_0x4492bc(0x1fb)],'files_attempted':_0x35f3ab[_0x4492bc(0x2d6)](_0x511d4c=>({'path':_0x511d4c[_0x4492bc(0x310)],'lines':_0x511d4c['lines']})),'tool_calls':_0x573713(_0xb9d435[_0x4492bc(0x2e9)]),'messages':_0xb9d435[_0x4492bc(0x2e9)]?.[_0x4492bc(0x2d6)](_0x3b2db9=>({'role':_0x3b2db9[_0x4492bc(0x261)],'content':_0x3b2db9[_0x4492bc(0x2bf)],..._0x3b2db9[_0x4492bc(0x285)]?{'tool_calls':_0x3b2db9[_0x4492bc(0x285)][_0x4492bc(0x2e2)]}:{},..._0x3b2db9[_0x4492bc(0x2b7)]?{'tool_call_id':_0x3b2db9['tool_call_id']}:{}})),'request_content':{'query':_0x1e98d4[_0x4492bc(0x2b1)]['search_string'],'repo_path':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x30d)],'repoRoot':a0_0x390fe1[_0x4492bc(0x24c)](_0x1e98d4[_0x4492bc(0x2b1)]['repo_path']),'model':'morph-warp-grep-v2.1'}},'source':_0x4492bc(0x266)})[_0x4492bc(0x1ec)](()=>{});}}else{if(_0xb9d435[_0x4492bc(0x290)]===_0x4492bc(0x2ca)&&_0xb9d435['errors'][_0x4492bc(0x2e2)]>0x0){const _0x121ab4=_0xb9d435[_0x4492bc(0x25c)]['map'](_0x1f420d=>_0x1f420d[_0x4492bc(0x20b)])[_0x4492bc(0x2cf)](';\x20');_0x141909='Error:\x20'+_0x121ab4;const _0xd40a7d=_0x121ab4['toLowerCase']()[_0x4492bc(0x27b)](_0x4492bc(0x1e7))||_0x121ab4[_0x4492bc(0x222)]()[_0x4492bc(0x27b)](_0x4492bc(0x2d5))||_0x121ab4[_0x4492bc(0x222)]()[_0x4492bc(0x27b)](_0x4492bc(0x2a4)),_0x203c3d=_0xb9d435[_0x4492bc(0x28f)]?.[_0x4492bc(0x2a5)]?.[_0x4492bc(0x1f9)],_0x582c3e=_0xb9d435[_0x4492bc(0x25c)][0x0];reportMorphError({'error_message':_0x121ab4,'error_type':_0xd40a7d?'TimeoutError':_0x582c3e?.[_0x4492bc(0x298)]?.[_0x4492bc(0x21c)]||_0x4492bc(0x20d),'context':{'tool':'codebase_search','repo_path':_0x1e98d4[_0x4492bc(0x2b1)]['repo_path'],'query':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'model':_0x4492bc(0x2b4),'termination_reason':_0xb9d435[_0x4492bc(0x290)],'error_count':_0xb9d435['errors'][_0x4492bc(0x2e2)],'is_timeout':_0xd40a7d,'timings':_0xb9d435[_0x4492bc(0x1fb)],'files_attempted':_0x203c3d?.[_0x4492bc(0x2d6)](_0x391c60=>({'path':_0x391c60[_0x4492bc(0x310)],'lines':_0x391c60[_0x4492bc(0x22e)]})),'tool_calls':_0x573713(_0xb9d435[_0x4492bc(0x2e9)]),'messages':_0xb9d435[_0x4492bc(0x2e9)]?.['map'](_0x20cb32=>({'role':_0x20cb32[_0x4492bc(0x261)],'content':_0x20cb32[_0x4492bc(0x2bf)],..._0x20cb32[_0x4492bc(0x285)]?{'tool_calls':_0x20cb32[_0x4492bc(0x285)][_0x4492bc(0x2e2)]}:{},..._0x20cb32['tool_call_id']?{'tool_call_id':_0x20cb32[_0x4492bc(0x2b7)]}:{}})),'request_content':{'query':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'repo_path':_0x1e98d4['data']['repo_path'],'repoRoot':a0_0x390fe1['resolve'](_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x30d)]),'model':'morph-warp-grep-v2.1'}},'stack_trace':_0x582c3e?.['stack']||undefined,'source':_0x4492bc(0x266)})[_0x4492bc(0x1ec)](()=>{});}else _0x141909=_0x4492bc(0x303);}return{'content':[{'type':_0x4492bc(0x28c),'text':_0x141909}]};}catch(_0x9b71e2){const _0x1d4718=handleMorphAPIError(_0x9b71e2);if(_0x1d4718)return logger[_0x4492bc(0x269)](_0x4492bc(0x233),'tool_call_error',{'tool':'codebase_search','error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0x4492bc(0x2cb)]()-_0x2c4ec8}),_0x1d4718;const _0xca1b88=_0x9b71e2 instanceof Error?_0x9b71e2['message']:String(_0x9b71e2);logger[_0x4492bc(0x269)]('MCP',_0x4492bc(0x2be),{'tool':'codebase_search','error':_0xca1b88,'repo_path':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x30d)],'query':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'latency_ms':Date[_0x4492bc(0x2cb)]()-_0x2c4ec8});const _0x142611=_0xca1b88[_0x4492bc(0x222)]()['includes'](_0x4492bc(0x1e7))||_0xca1b88[_0x4492bc(0x222)]()[_0x4492bc(0x27b)](_0x4492bc(0x2d5))||_0xca1b88[_0x4492bc(0x222)]()['includes'](_0x4492bc(0x2a4))||_0x9b71e2 instanceof Error&&_0x9b71e2['name']===_0x4492bc(0x1e3);return reportMorphError({'error_message':_0xca1b88,'error_type':_0x142611?_0x4492bc(0x1e3):_0x9b71e2 instanceof Error?_0x9b71e2[_0x4492bc(0x298)]['name']:_0x4492bc(0x2ae),'context':{'tool':_0x4492bc(0x26d),'repo_path':_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x30d)],'query':_0x1e98d4['data']['search_string'],'model':_0x4492bc(0x2b4),'is_timeout':_0x142611,'exception_phase':_0x4492bc(0x1e8),'request_content':{'query':_0x1e98d4['data'][_0x4492bc(0x2ed)],'repo_path':_0x1e98d4['data']['repo_path'],'repoRoot':a0_0x390fe1[_0x4492bc(0x24c)](_0x1e98d4[_0x4492bc(0x2b1)][_0x4492bc(0x30d)]),'model':_0x4492bc(0x2b4)}},'stack_trace':_0x9b71e2 instanceof Error?_0x9b71e2[_0x4492bc(0x246)]:undefined,'source':'mcp-filesystem'})['catch'](()=>{}),{'content':[{'type':'text','text':'Error\x20running\x20fast\x20context\x20search:\x20'+_0xca1b88}],'isError':![]};}}case TOOL_NAMES[_0x4492bc(0x212)]:{const _0x4147b7=WarpGrepGitHubArgsSchema['safeParse'](_0x189e0b);if(!_0x4147b7[_0x4492bc(0x2f5)])return{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x1ed)+_0x4147b7[_0x4492bc(0x269)]}],'isError':!![]};const _0x164b78=_0x4147b7[_0x4492bc(0x2b1)]['github_url']||_0x4147b7[_0x4492bc(0x2b1)][_0x4492bc(0x2ee)];if(!_0x164b78)return{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x2ea)}],'isError':!![]};const _0x3d7013=MORPH_API_KEY;if(!_0x3d7013)throw new Error(_0x4492bc(0x2d7));const _0x5e7bbb=Date[_0x4492bc(0x2cb)]();logger[_0x4492bc(0x302)](_0x4492bc(0x233),_0x4492bc(0x2c5),{'identifier':_0x164b78,'query':_0x4147b7[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'branch':_0x4147b7[_0x4492bc(0x2b1)][_0x4492bc(0x30c)]});try{const _0x17f940=new WarpGrepClient({'morphApiKey':_0x3d7013,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x32c82b=await _0x17f940[_0x4492bc(0x2c9)]({'searchTerm':_0x4147b7[_0x4492bc(0x2b1)]['search_string'],'github':_0x164b78,'branch':_0x4147b7[_0x4492bc(0x2b1)]['branch']}),_0x51abf0=Date[_0x4492bc(0x2cb)]()-_0x5e7bbb;logMcpStderr(_0x4492bc(0x245)+_0x51abf0+_0x4492bc(0x2c1)+_0x32c82b[_0x4492bc(0x2f5)]);const _0x2bd1e4=formatResult(_0x32c82b);return{'content':[{'type':_0x4492bc(0x28c),'text':_0x2bd1e4}]};}catch(_0x154c17){const _0x323838=handleMorphAPIError(_0x154c17);if(_0x323838)return _0x323838;const _0x1f9a91=Date[_0x4492bc(0x2cb)]()-_0x5e7bbb,_0x693805=_0x154c17 instanceof Error?_0x154c17['message']:String(_0x154c17);return logMcpStderr(_0x4492bc(0x28d)+_0x1f9a91+_0x4492bc(0x223),_0x693805),reportMorphError({'error_message':_0x693805,'error_type':_0x154c17 instanceof Error?_0x154c17[_0x4492bc(0x298)][_0x4492bc(0x21c)]:'UnknownError','context':{'tool':_0x4492bc(0x264),'github_url':_0x164b78,'search_string':_0x4147b7[_0x4492bc(0x2b1)][_0x4492bc(0x2ed)],'branch':_0x4147b7[_0x4492bc(0x2b1)]['branch']},'stack_trace':_0x154c17 instanceof Error?_0x154c17[_0x4492bc(0x246)]:undefined,'source':_0x4492bc(0x266),'tool':_0x4492bc(0x264),'latency_ms':_0x1f9a91})[_0x4492bc(0x1ec)](()=>{}),{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x2a9)+_0x693805}],'isError':![]};}}default:throw new Error('Unknown\x20tool:\x20'+_0x33ec73);}}catch(_0x486072){const _0x3aa603=_0x486072 instanceof Error?_0x486072[_0x4492bc(0x20b)]:String(_0x486072);return reportMorphError({'error_message':_0x3aa603,'error_type':_0x486072 instanceof Error?_0x486072[_0x4492bc(0x298)][_0x4492bc(0x21c)]:_0x4492bc(0x2ae),'context':{'tool':_0x33ec73,'arguments':_0x189e0b?JSON[_0x4492bc(0x2da)](_0x189e0b)[_0x4492bc(0x274)](0x0,0x1f4):undefined,'mcp_server_version':_0x4492bc(0x2e1)},'stack_trace':_0x486072 instanceof Error?_0x486072[_0x4492bc(0x246)]:undefined,'source':_0x4492bc(0x266)})[_0x4492bc(0x1ec)](()=>{}),{'content':[{'type':_0x4492bc(0x28c),'text':_0x4492bc(0x211)+_0x3aa603}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x58d520){const _0x33d193=a0_0x5035ba,_0x5487b8=await getValidRootDirectories(_0x58d520);if(_0x5487b8[_0x33d193(0x2e2)]>0x0)allowedDirectories=[..._0x5487b8],logMcpStderr(_0x33d193(0x250)+_0x5487b8[_0x33d193(0x2e2)]+_0x33d193(0x1f7));else{logMcpStderr(_0x33d193(0x2ad));if(ENABLE_WORKSPACE_MODE)try{const _0x1d7d33=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x1d7d33&&(allowedDirectories=[_0x1d7d33],logMcpStderr(_0x33d193(0x209)+_0x1d7d33));}catch(_0x26bb32){logMcpStderr(_0x33d193(0x214)+_0x26bb32);}}}server['setNotificationHandler'](RootsListChangedNotificationSchema,async()=>{const _0x3cc250=a0_0x5035ba;try{const _0x566eb1=await server[_0x3cc250(0x2db)]();_0x566eb1&&_0x3cc250(0x2e6)in _0x566eb1&&await updateAllowedDirectoriesFromRoots(_0x566eb1[_0x3cc250(0x2e6)]);}catch(_0x35a56c){logMcpStderr(_0x3cc250(0x20f),_0x35a56c instanceof Error?_0x35a56c['message']:String(_0x35a56c));}}),server[a0_0x5035ba(0x21d)]=async()=>{const _0x577075=a0_0x5035ba,_0x22c7d6=server['getClientCapabilities']();if(_0x22c7d6?.['roots'])try{const _0x32bfbe=await server[_0x577075(0x2db)]();_0x32bfbe&&_0x577075(0x2e6)in _0x32bfbe?await updateAllowedDirectoriesFromRoots(_0x32bfbe[_0x577075(0x2e6)]):logMcpStderr(_0x577075(0x279));}catch(_0x529065){logMcpStderr(_0x577075(0x2f6),_0x529065 instanceof Error?_0x529065[_0x577075(0x20b)]:String(_0x529065));}else{if(allowedDirectories[_0x577075(0x2e2)]>0x0)logMcpStderr(_0x577075(0x215),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr(_0x577075(0x308));else throw new Error(_0x577075(0x2fe));}}};async function runServer(){const _0x23bd27=a0_0x5035ba,_0x187e6c=new StdioServerTransport();await server[_0x23bd27(0x294)](_0x187e6c),logMcpStderr(_0x23bd27(0x2aa)),allowedDirectories[_0x23bd27(0x2e2)]===0x0&&logMcpStderr(_0x23bd27(0x230));}runServer()[a0_0x5035ba(0x1ec)](_0x150e66=>{logMcpStderr('Fatal\x20error\x20running\x20server:',_0x150e66),process['exit'](0x1);});
|
|
2
|
+
const a0_0x104249=a0_0x312c;(function(_0x1eceda,_0x5aac8f){const _0x5c2fae=a0_0x312c,_0x3e36b6=_0x1eceda();while(!![]){try{const _0x375da5=-parseInt(_0x5c2fae(0x106))/0x1+parseInt(_0x5c2fae(0x167))/0x2*(parseInt(_0x5c2fae(0xa8))/0x3)+-parseInt(_0x5c2fae(0xf3))/0x4*(-parseInt(_0x5c2fae(0xbc))/0x5)+parseInt(_0x5c2fae(0xec))/0x6+-parseInt(_0x5c2fae(0x18b))/0x7+-parseInt(_0x5c2fae(0x182))/0x8+parseInt(_0x5c2fae(0x19e))/0x9;if(_0x375da5===_0x5aac8f)break;else _0x3e36b6['push'](_0x3e36b6['shift']());}catch(_0x19d695){_0x3e36b6['push'](_0x3e36b6['shift']());}}}(a0_0x12a6,0x4777e));import{Server}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';function a0_0x312c(_0x3ac145,_0x2c3cb2){_0x3ac145=_0x3ac145-0x86;const _0x12a6b9=a0_0x12a6();let _0x312c24=_0x12a6b9[_0x3ac145];return _0x312c24;}import{CallToolRequestSchema,ListToolsRequestSchema,RootsListChangedNotificationSchema}from'@modelcontextprotocol/sdk/types.js';import a0_0x1abd9e from'fs/promises';import a0_0x2f511b from'path';import a0_0x3c7415 from'os';import{createRequire}from'module';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{getValidRootDirectories}from'./roots-utils.js';import{getOperatingSystemType,logMcpStderr}from'./log-utils.js';import{logger}from'./logger.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider,GITHUB_SEARCH_TOOL_NAME,GITHUB_SEARCH_DESCRIPTION}from'@morphllm/morphsdk/tools/warp-grep';import{WarpGrepClient,formatResult}from'@morphllm/morphsdk/tools/warp-grep/client';import{compactFileContexts}from'@morphllm/morphsdk/tools/compact';import a0_0x41924f from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES}from'./tool-definitions.js';function fixPathRepetition(_0x234501){const _0x1c2a5a=a0_0x312c,_0x1adb29=_0x234501['split'](a0_0x2f511b['sep'])[_0x1c2a5a(0x108)](Boolean);if(_0x1adb29[_0x1c2a5a(0x14d)]<0x2)return null;for(let _0x1a9aa3=Math[_0x1c2a5a(0x169)](_0x1adb29[_0x1c2a5a(0x14d)]/0x2);_0x1a9aa3>=0x1;_0x1a9aa3--){for(let _0x149d0a=0x0;_0x149d0a<=_0x1adb29[_0x1c2a5a(0x14d)]-0x2*_0x1a9aa3;_0x149d0a++){const _0x330b97=_0x1adb29['slice'](_0x149d0a,_0x149d0a+_0x1a9aa3),_0x3ebdc5=_0x1adb29[_0x1c2a5a(0x149)](_0x149d0a+_0x1a9aa3,_0x149d0a+0x2*_0x1a9aa3);if(_0x330b97[_0x1c2a5a(0xdc)]((_0x396202,_0x709ccb)=>_0x396202===_0x3ebdc5[_0x709ccb])){const _0x26ffee=[..._0x1adb29['slice'](0x0,_0x149d0a),..._0x1adb29[_0x1c2a5a(0x149)](_0x149d0a+_0x1a9aa3)];return a0_0x2f511b['sep']+_0x26ffee['join'](a0_0x2f511b[_0x1c2a5a(0x1a3)]);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x47ab60=a0_0x312c;try{const _0x52b525=require(_0x47ab60(0xba));return _0x52b525[_0x47ab60(0xf0)]??_0x47ab60(0x191);}catch(_0x18db0b){return logMcpStderr(_0x47ab60(0x174),_0x18db0b),_0x47ab60(0x191);}}function printHelp(){const _0x5a97b7=a0_0x312c;console[_0x5a97b7(0x197)](_0x5a97b7(0x1a1)+getPackageVersion()),console[_0x5a97b7(0x197)](_0x5a97b7(0x121)),console['log'](_0x5a97b7(0x10c)),console[_0x5a97b7(0x197)](_0x5a97b7(0xd0)),console['log'](_0x5a97b7(0x188)),console[_0x5a97b7(0x197)](_0x5a97b7(0xfe)),console[_0x5a97b7(0x197)]('\x0aExamples:'),console[_0x5a97b7(0x197)]('\x20\x20morph-mcp'),console[_0x5a97b7(0x197)](_0x5a97b7(0xb9));}const cliArgs=process[a0_0x104249(0xee)]['slice'](0x2),VERSION_FLAGS=new Set([a0_0x104249(0x11c),'-v','-V']),HELP_FLAGS=new Set([a0_0x104249(0x14c),'-h']);cliArgs['some'](_0x565ae2=>VERSION_FLAGS['has'](_0x565ae2))&&(console['log'](a0_0x104249(0x1a1)+getPackageVersion()),process[a0_0x104249(0x168)](0x0));cliArgs[a0_0x104249(0x102)](_0xe4394a=>HELP_FLAGS[a0_0x104249(0x99)](_0xe4394a))&&(printHelp(),process[a0_0x104249(0x168)](0x0));function a0_0x12a6(){const _0x85255b=['Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','tool_call_received','repo_path','map','arguments','added\x20','path_validation_failed','tsconfig.json','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','Failed\x20to\x20request\x20roots\x20from\x20client:','utf-8','Tool\x20','[could\x20not\x20read\x20file:\x20','number','parse','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','**PRIMARY\x20TOOL\x20FOR\x20EDITING\x20FILES.**\x20Fast,\x20accurate,\x20and\x20prevents\x20context\x20pollution.\x20Especially\x20useful\x20when\x20making\x20multiple\x20edits\x20in\x20one\x20file:\x20describe\x20all\x20changes\x20in\x20a\x20single\x20call\x20and\x20the\x20semantic\x20edit\x20applies\x20them\x20all\x20at\x20once,\x20more\x20accurately\x20and\x20faster\x20than\x20sequential\x20edits.\x20Unlike\x20search-and-replace\x20or\x20patch\x20edits\x20which\x20do\x20narrow\x20edits\x20one\x20at\x20a\x20time,\x20with\x20this\x20tool\x20you\x20should\x20do\x20all\x20your\x20code\x20changes\x20in\x20one\x20go\x20separated\x20by\x20`//\x20...\x20existing\x20code\x20...`\x20markers.\x20This\x20saves\x20tokens\x20and\x20improves\x20performance\x20because\x20you\x20do\x20not\x20need\x20to\x20reread\x20files\x20before\x20edits.\x20All\x20three\x20parameters\x20are\x20required.\x0a\x0a','payload','Fatal\x20error\x20running\x20server:','<file\x20path=\x22','PWD','array','\x20error(s)','\x0a</file>','[github_codebase_search]\x20Done\x20in\x20','slice','connect','pyproject.toml','--help','length','path','terminated','dirname','mcp-filesystem','now','size','Error\x20running\x20fast\x20context\x20search:\x20','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.','roots','isDirectory','linesRemoved','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','changes','search_string','tool_call_complete','warp_grep_complete','Error\x20accessing\x20directory\x20','morph-v3-large','.vscode','GitHub\x20repository\x20URL\x20to\x20search\x20(e.g.\x20\x27https://github.com/vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','completionId','optional','target_filepath','tool_calls','min','62102CqEGKh','exit','floor','package.json','file_read_complete','errors','string','edit_file','metadata','path_validation_start','Repository\x20identifier','SubToolError','\x0a...\x20(truncated,\x20total:\x20','Warning:\x20Unable\x20to\x20determine\x20package\x20version:','listRoots','Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20','WarpGrepError','catch','messages','ENOENT','glob','code_edit','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','Rules:\x0a','Fallback:\x20Using\x20workspace\x20root\x20','target_file','UnknownError','3609016QzkOeJ','MORPH_LARGE_APPLY','unknown\x20error','.\x20Path:\x20','timings','terminationReason','\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit','TimeoutError','realpath','3826606cyxmFc','instruction','error','-\x20Listed\x20directory\x20`','\x22>\x0aError\x20reading\x20file:\x20','A\x20code\x20exploration\x20tool,\x20use\x20this\x20tool\x20when\x20exploring\x20an\x20unfamiliar\x20codebase,\x20and\x20you\x27re\x20unsure\x20of\x20the\x20exact\x20file\x20or\x20string\x20to\x20look\x20for.\x20This\x20tool\x20will\x20find\x20all\x20relevant\x20bits\x20of\x20code\x20given\x20a\x20natural\x20lanugage\x20description,\x20or\x20questin\x20of\x20the\x20thing\x20you\x27re\x20looking\x20for.\x20','unknown','join','-\x20Grepped\x20\x27','substring','Use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code\x20blocks.\x20Include\x20just\x20enough\x20surrounding\x20context\x20to\x20locate\x20each\x20edit\x20precisely.\x0a\x0a','function','log','code','owner_repo','Bearer\x20','\x20-\x20','enum','startsWith','13407948RYiHse','includes','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','@morphllm/morphmcp\x20','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','sep','pattern','-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a','github_codebase_search','Authentication\x20failed:\x20Your\x20Morph\x20API\x20key\x20is\x20invalid\x20or\x20has\x20been\x20revoked.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20a\x20valid\x20API\x20key,\x20then\x20update\x20your\x20MCP\x20configuration.','.\x20Changes:\x20','SymlinkError','context','EDIT_FILE','`\x20in\x20`','oninitialized','WarpGrep\x20sub-tool\x20errors:\x20','boolean','normalize','FileNotFound','toLowerCase','linesModified','grep','push','-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','\x22.\x20Known\x20tools:\x20','object','default','files','grep_search','ReadError','Failed\x20to\x20read\x20file:\x20','has','BinaryFile','grep\x20\x27','all','Cargo.toml','env','Error:\x20','Applied','instructions','toISOString','finish','warn','tool_call_error','response','morph-warp-grep-v2.1','3peBoKE','requiresApiKey','Morph\x20FastApply\x20failed\x20without\x20error\x20message','DISABLED_TOOLS','morph-mcp','\x20chars)','WHEN\x20TO\x20USE\x20vs\x20native\x20edit/patch\x20tools:\x20prefer\x20this\x20tool\x20for\x20large\x20files,\x20multiple\x20or\x20scattered\x20edits,\x20refactors,\x20and\x20whitespace-sensitive\x20changes.\x20A\x20single\x20tiny\x20exact-string\x20replacement\x20can\x20use\x20the\x20native\x20edit/patch\x20tool.\x20If\x20this\x20tool\x20errors\x20or\x20times\x20out,\x20fall\x20back\x20to\x20native\x20edit\x20with\x20exact\x20string\x20matching.\x0a\x0a','Invalid\x20arguments:\x20','description','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','text','content','source','cwd','runWarpGrep_call','Example\x20format:\x0a','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','../package.json','node_modules','8830IjSBwq','RipgrepNotAvailable','dryRun','Morph\x20Edit\x20Preview','compaction_failed','searchGitHub','0.2.0','command','-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a','isArray','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','Specific\x20commit\x20hash\x20to\x20search','\x20valid\x20directories','turns','match','etimedout','warp_grep_start','homedir','MORPH_WARP_GREP_TIMEOUT','data','\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','resolve','\x27\x20in\x20`','sk-','basename','stack','success','safeParse','split','\x22>\x0a','Warning:\x20DISABLED_TOOLS\x20contains\x20unknown\x20tool\x20\x22','every','constructor','https://morphllm.com/api/error-report','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','inputSchema','github_search_start','ToolException','list_directory','codebase_search','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','Warning:\x20Workspace\x20fallback\x20failed:\x20','Disabled\x20tools:\x20','path_validation_resolved','Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.','setRequestHandler','PathError','328998Xnfmgl','//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a','argv','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','version','list_directory\x20','Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.','392ldZGby','Here\x20is\x20the\x20content\x20of\x20files:\x0a','timeout','getClientCapabilities','stat','filePath','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','describe','readFile','MCP','morph-','\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit','API\x20error\x20(auth/rate-limit)','Max\x20results\x20to\x20return','Workspace\x20mode\x20enabled:\x20Using\x20','some','debug','Created\x20File','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','458205qzvSRD','\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)','filter','read','assistant','status','\x0aOptions:','branch','setNotificationHandler','LocalRipgrepProvider','Relevant\x20context\x20found:','name','Parent\x20directory\x20does\x20not\x20exist:\x20','MORPH_API_URL','GitHub\x20search\x20failed:\x20','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20','trim','[github_codebase_search]\x20Failed\x20in\x20','tool_call_id','-\x20Glob\x20search\x20`','No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','--version','\x20disabled\x20via\x20DISABLED_TOOLS','CODEBASE_SEARCH','user','File\x20read\x20error:','\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','ENABLE_WORKSPACE_MODE','\x20is\x20not\x20a\x20directory','--api-key','-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','message','go.mod','Unknown\x20tool:\x20','role','-\x20Preserve\x20exact\x20indentation\x0a','RipgrepError','MORPH_API_KEY','lines'];a0_0x12a6=function(){return _0x85255b;};return a0_0x12a6();}function getCliArg(_0x3fafd3){const _0x4862f1=a0_0x104249;for(let _0x4b9021=0x0;_0x4b9021<cliArgs['length'];_0x4b9021++){const _0x4ae5f6=cliArgs[_0x4b9021];if(_0x4ae5f6[_0x4862f1(0x19d)]('--'+_0x3fafd3+'='))return _0x4ae5f6['slice'](('--'+_0x3fafd3+'=')[_0x4862f1(0x14d)]);if(_0x4ae5f6==='--'+_0x3fafd3&&_0x4b9021+0x1<cliArgs[_0x4862f1(0x14d)])return cliArgs[_0x4b9021+0x1];}return undefined;}const args=[];for(let i=0x0;i<cliArgs['length'];i++){const arg=cliArgs[i];if(VERSION_FLAGS[a0_0x104249(0x99)](arg)||HELP_FLAGS['has'](arg))continue;if(arg['startsWith']('--api-key='))continue;if(arg===a0_0x104249(0x126)){i++;continue;}args[a0_0x104249(0x8f)](arg);}const WORKSPACE_ROOT=process[a0_0x104249(0x9e)]['WORKSPACE_ROOT']||process[a0_0x104249(0x9e)][a0_0x104249(0x144)]||process[a0_0x104249(0xb6)](),ENABLE_WORKSPACE_MODE=process['env'][a0_0x104249(0x124)]!=='false',MORPH_API_KEY=getCliArg('api-key')??process[a0_0x104249(0x9e)][a0_0x104249(0x12e)],MORPH_API_URL=process[a0_0x104249(0x9e)][a0_0x104249(0x113)],MORPH_LARGE_APPLY=process[a0_0x104249(0x9e)][a0_0x104249(0x183)]!=='false',MORPH_WARP_GREP_TIMEOUT=process[a0_0x104249(0x9e)]['MORPH_WARP_GREP_TIMEOUT']?parseInt(process[a0_0x104249(0x9e)][a0_0x104249(0xce)],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),DEFAULT_DISABLED_TOOLS=new Set(),DISABLED_TOOLS=process['env'][a0_0x104249(0xab)]?new Set(process[a0_0x104249(0x9e)][a0_0x104249(0xab)][a0_0x104249(0xd9)](',')[a0_0x104249(0x133)](_0x28de8f=>_0x28de8f[a0_0x104249(0x116)]())[a0_0x104249(0x108)](_0x2350be=>_0x2350be[a0_0x104249(0x14d)]>0x0)):DEFAULT_DISABLED_TOOLS;if(DISABLED_TOOLS[a0_0x104249(0x153)]>0x0){for(const tool of DISABLED_TOOLS){!KNOWN_TOOL_NAMES[a0_0x104249(0x99)](tool)&&console[a0_0x104249(0x18d)](a0_0x104249(0xdb)+tool+a0_0x104249(0x92)+[...KNOWN_TOOL_NAMES][a0_0x104249(0x192)](',\x20'));}console[a0_0x104249(0x18d)](a0_0x104249(0xe7)+[...DISABLED_TOOLS]['join'](',\x20'));}MORPH_API_KEY&&!MORPH_API_KEY[a0_0x104249(0x19d)](a0_0x104249(0xd4))&&!MORPH_API_KEY[a0_0x104249(0x19d)](a0_0x104249(0xfd))&&logMcpStderr('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x558865){const _0x350f1f=a0_0x104249;try{await a0_0x41924f['post'](_0x350f1f(0xde),{..._0x558865,'timestamp':new Date()[_0x350f1f(0xa2)](),'source':_0x558865[_0x350f1f(0xb5)]||_0x350f1f(0x151),'os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x558865[_0x350f1f(0x1aa)]}},{'timeout':0x1388,'headers':{'Content-Type':'application/json','Authorization':_0x350f1f(0x19a)+MORPH_API_KEY}});}catch{}}function extractStatusCode(_0x1f9ea5,_0x316269){const _0x49c92d=a0_0x104249;if(_0x1f9ea5&&typeof _0x1f9ea5===_0x49c92d(0x93)&&_0x49c92d(0x10b)in _0x1f9ea5)return _0x1f9ea5['status'];if(_0x1f9ea5&&typeof _0x1f9ea5===_0x49c92d(0x93)&&_0x49c92d(0xa6)in _0x1f9ea5)return _0x1f9ea5[_0x49c92d(0xa6)]?.[_0x49c92d(0x10b)];const _0x40c65d=_0x316269[_0x49c92d(0xca)](/\b(401|429)\b/);return _0x40c65d?parseInt(_0x40c65d[0x1],0xa):null;}function handleMorphAPIError(_0x42cf88){const _0x11cf49=a0_0x104249,_0x25557a=_0x42cf88 instanceof Error?_0x42cf88['message']:String(_0x42cf88),_0x13743b=extractStatusCode(_0x42cf88,_0x25557a);switch(_0x13743b){case 0x191:return{'content':[{'type':_0x11cf49(0xb3),'text':_0x11cf49(0x1a7)}],'isError':!![]};case 0x1ad:return{'content':[{'type':'text','text':_0x11cf49(0xe9)}],'isError':!![]};default:return null;}}args['length']===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr('Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]'),logMcpStderr('Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:'),logMcpStderr(a0_0x104249(0xf9)),logMcpStderr('\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)'),logMcpStderr(a0_0x104249(0x107)),logMcpStderr('At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.'));function normalizePath(_0x1f3333){const _0x386186=a0_0x104249;return a0_0x2f511b[_0x386186(0x8a)](_0x1f3333);}function expandHome(_0x3d58fb){const _0x485624=a0_0x104249;if(_0x3d58fb[_0x485624(0x19d)]('~/')||_0x3d58fb==='~')return a0_0x2f511b[_0x485624(0x192)](a0_0x3c7415[_0x485624(0xcd)](),_0x3d58fb[_0x485624(0x149)](0x1));return _0x3d58fb;}let allowedDirectories=await Promise[a0_0x104249(0x9c)](args[a0_0x104249(0x133)](async _0x2e1364=>{const _0x4e895a=a0_0x104249,_0x55be25=expandHome(_0x2e1364),_0x3d7ecf=a0_0x2f511b[_0x4e895a(0xd2)](_0x55be25);try{const _0x504010=await a0_0x1abd9e['realpath'](_0x3d7ecf);return normalizePath(_0x504010);}catch(_0x184ef9){return normalizePath(_0x3d7ecf);}}));if(ENABLE_WORKSPACE_MODE&&args[a0_0x104249(0x14d)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories['push'](workspaceDir),logMcpStderr(a0_0x104249(0x101)+workspaceDir+'\x20as\x20allowed\x20directory'));}catch(a0_0x29a207){logMcpStderr(a0_0x104249(0x176)+a0_0x29a207);}async function detectWorkspaceRoot(_0x5a78b7){const _0x173952=a0_0x104249;let _0x161089=a0_0x2f511b[_0x173952(0xd2)](_0x5a78b7);const _0x52a083=['.git',_0x173952(0x160),_0x173952(0x16a),_0x173952(0x9d),_0x173952(0x14b),_0x173952(0x129),'.cursor',_0x173952(0x137),'composer.json'];while(_0x161089!==a0_0x2f511b[_0x173952(0x150)](_0x161089)){for(const _0x471170 of _0x52a083){const _0x3f72bb=a0_0x2f511b[_0x173952(0x192)](_0x161089,_0x471170);try{return await a0_0x1abd9e['access'](_0x3f72bb),normalizePath(_0x161089);}catch{}}_0x161089=a0_0x2f511b[_0x173952(0x150)](_0x161089);}return normalizePath(_0x5a78b7);}await Promise[a0_0x104249(0x9c)](args[a0_0x104249(0x133)](async _0x5a8802=>{const _0x5077a5=a0_0x104249;try{const _0x37185b=await a0_0x1abd9e[_0x5077a5(0xf7)](expandHome(_0x5a8802));!_0x37185b[_0x5077a5(0x157)]()&&(logMcpStderr(_0x5077a5(0x9f)+_0x5a8802+_0x5077a5(0x125)),process['exit'](0x1));}catch(_0x43ec71){logMcpStderr(_0x5077a5(0x15e)+_0x5a8802+':',_0x43ec71),process[_0x5077a5(0x168)](0x1);}}));async function validatePath(_0x3d73a6){const _0x396587=a0_0x104249,_0x263077=expandHome(_0x3d73a6),_0x2fc694=a0_0x2f511b[_0x396587(0xd2)](_0x263077);logger['debug'](_0x396587(0xfc),_0x396587(0x170),{'raw_path':_0x3d73a6,'absolute':_0x2fc694});try{const _0x38a541=await a0_0x1abd9e[_0x396587(0x18a)](_0x2fc694);return logger['debug']('MCP','path_validation_resolved',{'resolved':_0x38a541,'symlink':_0x38a541!==_0x2fc694}),_0x38a541;}catch(_0x2776cd){if(_0x2776cd[_0x396587(0x198)]===_0x396587(0x17a)){const _0x4522da=a0_0x2f511b[_0x396587(0x150)](_0x2fc694);try{const _0x142aad=await a0_0x1abd9e[_0x396587(0x18a)](_0x4522da),_0x32e4ed=a0_0x2f511b['join'](_0x142aad,a0_0x2f511b['basename'](_0x2fc694));return logger[_0x396587(0x103)]('MCP',_0x396587(0xe8),{'resolved':_0x32e4ed,'new_file':!![]}),_0x32e4ed;}catch{logger[_0x396587(0x18d)](_0x396587(0xfc),_0x396587(0x136),{'raw_path':_0x3d73a6,'error':_0x396587(0x112)+_0x4522da});throw new Error(_0x396587(0x112)+_0x4522da);}}logger[_0x396587(0x18d)](_0x396587(0xfc),'path_validation_failed',{'raw_path':_0x3d73a6,'error':_0x2776cd[_0x396587(0x128)]});throw _0x2776cd;}}const MorphEditFileArgsSchema=z['object']({'path':z[a0_0x104249(0x16d)](),'code_edit':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](a0_0x104249(0x1a2)),'instruction':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](a0_0x104249(0x11b)),'dryRun':z[a0_0x104249(0x89)]()[a0_0x104249(0x94)](![])['describe']('Preview\x20changes\x20without\x20applying\x20them.')}),CODEBASE_SEARCH_QUERY_DESCRIPTION='Natural-language\x20question/description\x20about\x20the\x20code\x20you\x20want\x20to\x20understand.\x20Good\x20example:\x20\x22Where\x20does\x20auth\x20get\x20handled,\x20what\x20are\x20the\x20different\x20oauth\x20methods\x20supported?\x22,\x20\x22Trace\x20all\x20code\x20that\x20relates\x20to\x20how\x20data\x20is\x20injested\x20and\x20processed\x22.\x20Bad\x20example:\x20\x22auth()\x22,\x20\x22auth\x20login\x20dashoard\x20google\x20email\x22.\x20This\x20tool\x20does\x20NOT\x20accept\x20regex,\x20keyword\x20dumps,\x20or\x20symbol-only\x20queries.',WarpGrepArgsSchema=z[a0_0x104249(0x93)]({'search_string':z['string']()[a0_0x104249(0xfa)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](a0_0x104249(0x13f)),'search_type':z[a0_0x104249(0x19c)]([a0_0x104249(0x94),'node_modules'])['optional']()[a0_0x104249(0xfa)]('Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.')}),WarpGrepGitHubArgsSchema=z[a0_0x104249(0x93)]({'search_string':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z[a0_0x104249(0x16d)]()[a0_0x104249(0x163)]()[a0_0x104249(0xfa)](a0_0x104249(0x161)),'owner_repo':z[a0_0x104249(0x16d)]()[a0_0x104249(0x163)]()['describe'](a0_0x104249(0xdf)),'branch':z[a0_0x104249(0x16d)]()['optional']()[a0_0x104249(0xfa)](a0_0x104249(0xb2))}),CodebaseSearchArgsSchema=z[a0_0x104249(0x93)]({'query':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x104249(0x16d)]()[a0_0x104249(0xfa)](a0_0x104249(0x171)),'branch':z[a0_0x104249(0x16d)]()[a0_0x104249(0x163)]()[a0_0x104249(0xfa)](a0_0x104249(0x17d)),'commitHash':z['string']()['optional']()['describe'](a0_0x104249(0xc7)),'targetDirectories':z[a0_0x104249(0x145)](z[a0_0x104249(0x16d)]())['default']([])[a0_0x104249(0xfa)](a0_0x104249(0x1a0)),'limit':z[a0_0x104249(0x13d)]()[a0_0x104249(0x163)]()[a0_0x104249(0x94)](0xa)[a0_0x104249(0xfa)](a0_0x104249(0x100))}),server=new Server({'name':a0_0x104249(0xac),'version':a0_0x104249(0xc2)},{'capabilities':{'tools':{}}});server['setRequestHandler'](ListToolsRequestSchema,async()=>{const _0x376169=a0_0x104249,_0x8ee404=[{'name':TOOL_NAMES[_0x376169(0x1ab)],'description':_0x376169(0x140)+_0x376169(0xae)+'Parameters:\x0a'+_0x376169(0xc6)+_0x376169(0x105)+_0x376169(0x90)+_0x376169(0x195)+_0x376169(0xb8)+_0x376169(0xed)+_0x376169(0x17e)+_0x376169(0x1a5)+_0x376169(0x12c)+_0x376169(0xc4)+_0x376169(0x127),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':TOOL_NAMES[_0x376169(0x11e)],'description':_0x376169(0x190)+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+'Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20'+_0x376169(0x115)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'requiresApiKey':!![]}],_0x5dde74=_0x8ee404[_0x376169(0x108)](_0x46d642=>{const _0x4f2b65=_0x376169;if(DISABLED_TOOLS[_0x4f2b65(0x99)](_0x46d642[_0x4f2b65(0x111)]))return console[_0x4f2b65(0x18d)](_0x4f2b65(0x13b)+_0x46d642[_0x4f2b65(0x111)]+_0x4f2b65(0x11d)),![];if(_0x4f2b65(0xa9)in _0x46d642&&_0x46d642['requiresApiKey']&&!MORPH_API_KEY)return logMcpStderr('Warning:\x20'+_0x46d642[_0x4f2b65(0x111)]+_0x4f2b65(0xb1)),![];return!![];});return{'tools':_0x5dde74[_0x376169(0x133)](_0x12e647=>({'name':_0x12e647[_0x376169(0x111)],'description':_0x12e647[_0x376169(0xb0)],'inputSchema':_0x12e647[_0x376169(0xe0)]}))};}),server[a0_0x104249(0xea)](CallToolRequestSchema,async _0xf33704=>{const _0xa94536=a0_0x104249,{name:_0x43da34,arguments:_0x3d9cdd}=_0xf33704['params'],_0x307c28=Date[_0xa94536(0x152)]();logger['debug'](_0xa94536(0xfc),_0xa94536(0x131),{'tool':_0x43da34,'args':_0x43da34==='edit_file'?{'path':_0x3d9cdd?.[_0xa94536(0x14e)],'instruction':_0x3d9cdd?.[_0xa94536(0x18c)]||_0x3d9cdd?.[_0xa94536(0xa1)],'dryRun':_0x3d9cdd?.[_0xa94536(0xbe)]}:_0x3d9cdd});try{if(!MORPH_API_KEY)return{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0x11a)}],'isError':!![]};if(!MORPH_API_KEY[_0xa94536(0x19d)](_0xa94536(0xd4))&&!MORPH_API_KEY[_0xa94536(0x19d)]('morph-'))return{'content':[{'type':_0xa94536(0xb3),'text':'Invalid\x20Morph\x20API\x20key\x20format.\x20API\x20keys\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20a\x20valid\x20API\x20key.'}],'isError':!![]};if(DISABLED_TOOLS[_0xa94536(0x99)](_0x43da34))return{'content':[{'type':'text','text':'Tool\x20\x22'+_0x43da34+'\x22\x20is\x20disabled\x20via\x20the\x20DISABLED_TOOLS\x20environment\x20variable\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.'}],'isError':![]};switch(_0x43da34){case TOOL_NAMES['EDIT_FILE']:{let _0x3a1a7b=_0x3d9cdd;if(_0x3a1a7b&&typeof _0x3a1a7b==='object'){if(!(_0xa94536(0x14e)in _0x3a1a7b)){const _0xf7f7bd=_0x3a1a7b[_0xa94536(0x180)]??_0x3a1a7b[_0xa94536(0xf8)]??_0x3a1a7b[_0xa94536(0x164)]??_0x3a1a7b['file_path']??_0x3a1a7b['file'];if(_0xf7f7bd)_0x3a1a7b={..._0x3a1a7b,'path':_0xf7f7bd};}_0xa94536(0xa1)in _0x3a1a7b&&!('instruction'in _0x3a1a7b)&&(_0x3a1a7b={..._0x3a1a7b,'instruction':_0x3a1a7b['instructions']});if(!(_0xa94536(0x17c)in _0x3a1a7b)){const _0x4a56a=_0x3a1a7b[_0xa94536(0x198)]??_0x3a1a7b['new_string']??_0x3a1a7b[_0xa94536(0xb4)]??_0x3a1a7b['edit'];if(_0x4a56a)_0x3a1a7b={..._0x3a1a7b,'code_edit':_0x4a56a};}}const _0x2cbebd=MorphEditFileArgsSchema[_0xa94536(0xd8)](_0x3a1a7b);if(!_0x2cbebd[_0xa94536(0xd7)])throw new Error(_0xa94536(0xd1)+_0x2cbebd['error']);const _0x30b8f1=await validatePath(_0x2cbebd[_0xa94536(0xcf)]['path']);let _0x56a6b7=null,_0x325eab=!![],_0x4b0f6=null;try{_0x56a6b7=await a0_0x1abd9e[_0xa94536(0xfb)](_0x30b8f1,_0xa94536(0x13a)),logger['debug'](_0xa94536(0xfc),'file_read_complete',{'path':_0x30b8f1,'size_bytes':_0x56a6b7[_0xa94536(0x14d)]});}catch(_0xc27ea0){const _0x577776=_0xc27ea0['code'];_0x577776===_0xa94536(0x17a)?(_0x325eab=![],_0x56a6b7='',logger[_0xa94536(0x103)]('MCP',_0xa94536(0x16b),{'path':_0x30b8f1,'exists':![]})):(_0x4b0f6=_0xa94536(0x98)+(_0x577776||_0xa94536(0x191))+_0xa94536(0x19b)+(_0xc27ea0 instanceof Error?_0xc27ea0[_0xa94536(0x128)]:String(_0xc27ea0)),logger[_0xa94536(0x18d)](_0xa94536(0xfc),'file_read_failed',{'path':_0x30b8f1,'error':_0x4b0f6}),logMcpStderr('Warning:\x20'+_0x4b0f6));}let _0x7c0788;try{const _0x1b86e7=MORPH_API_KEY;if(!_0x1b86e7)throw new Error(_0xa94536(0x123));const _0x4eea07=a0_0x2f511b[_0xa94536(0x150)](_0x30b8f1),_0x4f9aca=a0_0x2f511b[_0xa94536(0xd5)](_0x30b8f1);logger[_0xa94536(0x103)]('MCP','api_request_start',{'model':'morph-v3-fast','path':_0x2cbebd['data'][_0xa94536(0x14e)],'instruction_len':_0x2cbebd[_0xa94536(0xcf)]['instruction'][_0xa94536(0x14d)],'code_edit_len':_0x2cbebd['data'][_0xa94536(0x17c)][_0xa94536(0x14d)],'original_code_len':_0x56a6b7?.[_0xa94536(0x14d)]??0x0,'dry_run':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0xbe)]});const _0x57d63e=Date[_0xa94536(0x152)](),_0x5d60ee=await executeEditFile({'target_filepath':_0x4f9aca,'code_edit':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x17c)],'instruction':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x18c)]},{'morphApiKey':_0x1b86e7,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x4eea07,'autoWrite':!_0x2cbebd['data']['dryRun'],'generateUdiff':![],'debug':![]}),_0x2c3bf1=Date[_0xa94536(0x152)]()-_0x57d63e;_0x7c0788=_0x5d60ee[_0xa94536(0x162)];if(!_0x5d60ee[_0xa94536(0xd7)])throw new Error(_0x5d60ee[_0xa94536(0x18d)]||_0xa94536(0xaa));const _0x2e8f96=_0x5d60ee[_0xa94536(0x15a)],_0x51d82b=_0xa94536(0x135)+_0x2e8f96['linesAdded']+',\x20removed\x20'+_0x2e8f96[_0xa94536(0x158)]+',\x20modified\x20'+_0x2e8f96[_0xa94536(0x8d)];logger['debug'](_0xa94536(0xfc),_0xa94536(0x15c),{'tool':_0xa94536(0x16e),'success':!![],'latency_ms':Date[_0xa94536(0x152)]()-_0x307c28,'edit_latency_ms':_0x2c3bf1,'changes':{'added':_0x2e8f96['linesAdded'],'removed':_0x2e8f96[_0xa94536(0x158)],'modified':_0x2e8f96[_0xa94536(0x8d)]},'completion_id':_0x7c0788});if(_0x2cbebd['data']['dryRun'])return{'content':[{'type':'text','text':_0xa94536(0xbf)+(_0x325eab?'':'\x20(new\x20file)')+':\x20'+_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x18c)]+_0xa94536(0x1a8)+_0x51d82b+'.\x20Path:\x20'+_0x2cbebd['data'][_0xa94536(0x14e)]+'.'}]};return{'content':[{'type':'text','text':'Morph\x20Edit\x20'+(_0x325eab?_0xa94536(0xa0):_0xa94536(0x104))+':\x20'+_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x18c)]+'.\x20Changes:\x20'+_0x51d82b+_0xa94536(0x185)+_0x2cbebd['data'][_0xa94536(0x14e)]+'.'}]};}catch(_0x51b2dc){const _0x44c2ea=handleMorphAPIError(_0x51b2dc);if(_0x44c2ea)return logger[_0xa94536(0x18d)](_0xa94536(0xfc),_0xa94536(0xa5),{'tool':_0xa94536(0x16e),'error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0xa94536(0x152)]()-_0x307c28}),_0x44c2ea;const _0x28f106=_0x51b2dc instanceof Error?_0x51b2dc[_0xa94536(0x128)]:String(_0x51b2dc);return logger[_0xa94536(0x18d)](_0xa94536(0xfc),'tool_call_error',{'tool':'edit_file','error':_0x28f106,'path':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x14e)],'validated_path':_0x30b8f1,'latency_ms':Date['now']()-_0x307c28,'stack':_0x51b2dc instanceof Error?_0x51b2dc[_0xa94536(0xd6)]:undefined}),reportMorphError({'error_message':_0x28f106,'error_type':_0x51b2dc instanceof Error?_0x51b2dc[_0xa94536(0xdd)][_0xa94536(0x111)]:'UnknownError','context':{'tool':_0xa94536(0x16e),'completion_id':_0x7c0788,'file_path':_0x2cbebd[_0xa94536(0xcf)]['path'],'validated_path':_0x30b8f1,'instruction':_0x2cbebd[_0xa94536(0xcf)]['instruction'],'model':MORPH_LARGE_APPLY?'morph-v3-large':'morph-v3-fast','dry_run':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0xbe)],'file_exists':_0x325eab,'file_read_error':_0x4b0f6,'file_readable':_0x56a6b7!==null,'request_content':{'path':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x14e)],'code_edit':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x17c)],'instruction':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0x18c)],'original_code':_0x56a6b7!==null?_0x56a6b7[_0xa94536(0x14d)]>0xc350?_0x56a6b7[_0xa94536(0x194)](0x0,0xc350)+_0xa94536(0x173)+_0x56a6b7[_0xa94536(0x14d)]+_0xa94536(0xad):_0x56a6b7:_0xa94536(0x13c)+(_0x4b0f6||_0xa94536(0x184))+']','original_code_length':_0x56a6b7?.[_0xa94536(0x14d)]??0x0,'model':MORPH_LARGE_APPLY?_0xa94536(0x15f):'morph-v3-fast','dry_run':_0x2cbebd[_0xa94536(0xcf)][_0xa94536(0xbe)]}},'stack_trace':_0x51b2dc instanceof Error?_0x51b2dc[_0xa94536(0xd6)]:undefined,'source':'mcp-filesystem'})[_0xa94536(0x178)](()=>{}),{'content':[{'type':_0xa94536(0xb3),'text':'❌\x20Morph\x20Edit\x20Failed:\x20'+_0x28f106}],'isError':!![]};}}case TOOL_NAMES[_0xa94536(0x11e)]:{const _0x31fb29=WarpGrepArgsSchema[_0xa94536(0xd8)](_0x3d9cdd);if(!_0x31fb29[_0xa94536(0xd7)])return{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0xaf)+_0x31fb29[_0xa94536(0x18d)]}],'isError':!![]};const _0x4c8f01=_0x4d9d3f=>{const _0x1197a4=_0xa94536,_0x93fe58=[];for(const _0x1b7f1f of _0x4d9d3f||[]){if(_0x1b7f1f[_0x1197a4(0x12b)]===_0x1197a4(0x10a)&&Array[_0x1197a4(0xc5)](_0x1b7f1f[_0x1197a4(0x165)]))for(const _0x583fed of _0x1b7f1f[_0x1197a4(0x165)]){try{const _0x292830=_0x583fed[_0x1197a4(0x196)]?.[_0x1197a4(0x111)],_0x478073=JSON[_0x1197a4(0x13e)](_0x583fed[_0x1197a4(0x196)]?.[_0x1197a4(0x134)]||'{}');if(_0x292830===_0x1197a4(0x96))_0x93fe58[_0x1197a4(0x8f)](_0x1197a4(0x9b)+_0x478073[_0x1197a4(0x1a4)]+'\x27\x20'+(_0x478073[_0x1197a4(0x14e)]||'.'));else{if(_0x292830===_0x1197a4(0x109))_0x93fe58['push']('read\x20'+_0x478073['path']);else{if(_0x292830===_0x1197a4(0xe3))_0x93fe58[_0x1197a4(0x8f)](_0x1197a4(0xf1)+(_0x478073[_0x1197a4(0xc3)]||'.'));else{if(_0x292830===_0x1197a4(0x17b))_0x93fe58[_0x1197a4(0x8f)]('glob\x20\x27'+_0x478073[_0x1197a4(0x1a4)]+'\x27\x20'+(_0x478073['path']||'.'));else _0x292830===_0x1197a4(0xa3)&&_0x93fe58[_0x1197a4(0x8f)]('finish');}}}}catch{}}}return _0x93fe58;},_0x1b08f2=_0x27e4c4=>{const _0x2351a0=_0xa94536,_0xa27665=[];if(!_0x27e4c4||!Array['isArray'](_0x27e4c4))return _0xa27665;const _0x490a05=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x2351a0(0x8b),'tool':_0x2351a0(0x109)},{'pattern':/\[PATH ERROR\]/,'error_type':_0x2351a0(0xeb),'tool':'read'},{'pattern':/\[READ ERROR\]/,'error_type':'ReadError','tool':'read'},{'pattern':/\[UNREADABLE FILE\]/,'error_type':_0x2351a0(0x9a),'tool':_0x2351a0(0x109)},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x2351a0(0x12d),'tool':_0x2351a0(0x8e)},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x2351a0(0xbd),'tool':_0x2351a0(0x8e)},{'pattern':/\[BINARY FILE\]/,'error_type':_0x2351a0(0x9a),'tool':_0x2351a0(0x109)},{'pattern':/\[SYMLINK\]/,'error_type':_0x2351a0(0x1a9),'tool':_0x2351a0(0x109)},{'pattern':/not a text file/,'error_type':_0x2351a0(0x9a),'tool':_0x2351a0(0x109)},{'pattern':/symbolic link/,'error_type':_0x2351a0(0x1a9),'tool':_0x2351a0(0x109)},{'pattern':/Error reading file:/,'error_type':_0x2351a0(0x97),'tool':_0x2351a0(0x109)},{'pattern':/status="error"/,'error_type':_0x2351a0(0xe2),'tool':_0x2351a0(0x191)}];let _0xbc974=0x0;for(const _0x3f21b2 of _0x27e4c4){_0x3f21b2[_0x2351a0(0x12b)]===_0x2351a0(0x10a)&&Array[_0x2351a0(0xc5)](_0x3f21b2[_0x2351a0(0x165)])&&_0xbc974++;const _0x2dec93=_0x3f21b2[_0x2351a0(0xb4)];if((_0x3f21b2['role']==='tool'||_0x3f21b2[_0x2351a0(0x12b)]===_0x2351a0(0x11f))&&_0x2dec93&&typeof _0x2dec93==='string')for(const {pattern:_0x1bc4ef,error_type:_0x57e58b,tool:_0x17af61}of _0x490a05){const _0x5c0d33=_0x2dec93['match'](new RegExp(_0x1bc4ef[_0x2351a0(0xb5)],'g'));if(_0x5c0d33)for(const _0x4ffc12 of _0x5c0d33){const _0x1d9c0f=_0x2dec93['indexOf'](_0x4ffc12),_0x6d8c60=_0x2dec93[_0x2351a0(0x194)](_0x1d9c0f,Math[_0x2351a0(0x166)](_0x1d9c0f+0xc8,_0x2dec93['length']));_0xa27665[_0x2351a0(0x8f)]({'tool':_0x17af61,'error_type':_0x57e58b,'error_message':_0x6d8c60[_0x2351a0(0xd9)]('\x0a')[0x0],'turn':_0xbc974});}}}return _0xa27665;};try{const _0x557e6e=a0_0x2f511b[_0xa94536(0xd2)](_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)]),_0x136493=_0x31fb29[_0xa94536(0xcf)]['search_type'],_0x219c9a=_0x136493===_0xa94536(0xbb)?{'allowNames':['node_modules']}:undefined,_0x1496a=new LocalRipgrepProvider(_0x557e6e,undefined,_0x219c9a);logger['debug'](_0xa94536(0xfc),'provider_created',{'type':_0xa94536(0x10f),'repo_root':_0x557e6e,'search_type':_0x136493||_0xa94536(0x94)}),logger[_0xa94536(0x103)](_0xa94536(0xfc),_0xa94536(0xcc),{'query':_0x31fb29['data'][_0xa94536(0x15b)],'repo_root':_0x557e6e,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x233740=Date[_0xa94536(0x152)](),_0xd48d15=await runWarpGrep({'searchTerm':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x15b)],'repoRoot':_0x557e6e,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x1496a,'search_type':_0x136493}),_0x420555=Date[_0xa94536(0x152)]()-_0x233740,_0x3452d4=_0xd48d15[_0xa94536(0xa3)]?.[_0xa94536(0x16f)]?.[_0xa94536(0x95)]?.[_0xa94536(0x14d)]??0x0;logger[_0xa94536(0x103)]('MCP',_0xa94536(0x15d),{'termination':_0xd48d15[_0xa94536(0x187)],'turns':_0xd48d15['timings']?.[_0xa94536(0xc9)]??0x0,'files_found':_0x3452d4,'latency_ms':_0x420555});const _0x3cc472=_0x1b08f2(_0xd48d15[_0xa94536(0x179)]);_0x3cc472[_0xa94536(0x14d)]>0x0&&reportMorphError({'error_message':_0xa94536(0x88)+_0x3cc472[_0xa94536(0x14d)]+_0xa94536(0x146),'error_type':_0xa94536(0x172),'level':_0xa94536(0xa4),'tool':_0xa94536(0xe4),'context':{'repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'query':_0x31fb29['data'][_0xa94536(0x15b)],'model':_0xa94536(0xa7),'termination_reason':_0xd48d15[_0xa94536(0x187)],'sub_tool_errors':_0x3cc472,'timings':_0xd48d15[_0xa94536(0x186)],'tool_calls':_0x4c8f01(_0xd48d15[_0xa94536(0x179)]),'messages':_0xd48d15['messages']?.[_0xa94536(0x133)](_0x5aa8a6=>({'role':_0x5aa8a6[_0xa94536(0x12b)],'content':_0x5aa8a6[_0xa94536(0xb4)],..._0x5aa8a6['tool_calls']?{'tool_calls':_0x5aa8a6['tool_calls'][_0xa94536(0x14d)]}:{},..._0x5aa8a6[_0xa94536(0x118)]?{'tool_call_id':_0x5aa8a6[_0xa94536(0x118)]}:{}}))},'source':_0xa94536(0x151)})[_0xa94536(0x178)](()=>{});let _0x58438a='';if(_0xd48d15['terminationReason']==='completed'&&_0xd48d15[_0xa94536(0xa3)]?.[_0xa94536(0x16f)]?.['files']){const _0x559c73=_0xd48d15[_0xa94536(0xa3)][_0xa94536(0x16f)]['files'];if(_0x559c73[_0xa94536(0x14d)]===0x0)return _0x58438a=_0xd48d15[_0xa94536(0xa3)][_0xa94536(0x141)]||'No\x20relevant\x20code\x20found\x20for\x20the\x20query.',{'content':[{'type':_0xa94536(0xb3),'text':_0x58438a}]};const _0x2962d4=[],_0x479fcb=['Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:'];for(const _0x2953c8 of _0xd48d15[_0xa94536(0x179)]){if(_0x2953c8[_0xa94536(0x12b)]===_0xa94536(0x10a)&&Array['isArray'](_0x2953c8['tool_calls']))for(const _0x355a99 of _0x2953c8[_0xa94536(0x165)]){try{const _0x297e25=_0x355a99[_0xa94536(0x196)]?.[_0xa94536(0x111)],_0x2cb15a=JSON['parse'](_0x355a99['function']?.[_0xa94536(0x134)]||'{}');if(_0x297e25===_0xa94536(0x96))_0x479fcb[_0xa94536(0x8f)](_0xa94536(0x193)+_0x2cb15a[_0xa94536(0x1a4)]+_0xa94536(0xd3)+(_0x2cb15a[_0xa94536(0x14e)]||'.')+'`');else{if(_0x297e25===_0xa94536(0x109))_0x479fcb['push']('-\x20Read\x20file\x20`'+_0x2cb15a[_0xa94536(0x14e)]+'`');else{if(_0x297e25===_0xa94536(0xe3))_0x479fcb['push'](_0xa94536(0x18e)+(_0x2cb15a[_0xa94536(0xc3)]||'.')+'`');else _0x297e25===_0xa94536(0x17b)&&_0x479fcb[_0xa94536(0x8f)](_0xa94536(0x119)+_0x2cb15a[_0xa94536(0x1a4)]+_0xa94536(0x86)+(_0x2cb15a['path']||'.')+'`');}}}catch{}}}_0x2962d4[_0xa94536(0x8f)](_0x479fcb[_0xa94536(0x192)]('\x0a'));const _0x4abbfe=['',_0xa94536(0x110)];for(const _0x10a154 of _0x559c73){if(_0x10a154[_0xa94536(0x12f)]==='*')_0x4abbfe[_0xa94536(0x8f)]('-\x20'+_0x10a154[_0xa94536(0x14e)]+':*');else{if(Array[_0xa94536(0xc5)](_0x10a154['lines'])){const _0x22ac3c=_0x10a154['lines'][_0xa94536(0x133)](([_0x18d6b5,_0x1a946e])=>{if(_0x18d6b5===_0x1a946e)return''+_0x18d6b5;return _0x18d6b5+'-'+_0x1a946e;});_0x4abbfe[_0xa94536(0x8f)]('-\x20'+_0x10a154['path']+':'+_0x22ac3c[_0xa94536(0x192)](','));}else _0x4abbfe[_0xa94536(0x8f)]('-\x20'+_0x10a154[_0xa94536(0x14e)]+':*');}}_0x4abbfe[_0xa94536(0x8f)](''),_0x2962d4[_0xa94536(0x8f)](_0x4abbfe[_0xa94536(0x192)]('\x0a')),_0x2962d4[_0xa94536(0x8f)](_0xa94536(0xf4));const _0x1a917e=[],_0x361587=[];for(const _0xfb75b0 of _0x559c73){let _0x13a360=a0_0x2f511b['resolve'](_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],_0xfb75b0[_0xa94536(0x14e)]),_0x1a6e23=null,_0x40eec7=null;try{_0x1a6e23=await a0_0x1abd9e[_0xa94536(0xfb)](_0x13a360,{'encoding':_0xa94536(0x13a)});}catch(_0x23f2dc){const _0x45941e=fixPathRepetition(_0x13a360);if(_0x45941e)try{_0x1a6e23=await a0_0x1abd9e['readFile'](_0x45941e,{'encoding':'utf-8'}),_0x13a360=_0x45941e;}catch{_0x40eec7=_0x23f2dc instanceof Error?_0x23f2dc:new Error(String(_0x23f2dc));}else _0x40eec7=_0x23f2dc instanceof Error?_0x23f2dc:new Error(String(_0x23f2dc));}if(_0x1a6e23!==null){const _0x304834=_0x1a6e23['split'](/\r?\n/),_0x5bb039=[];if(_0xfb75b0[_0xa94536(0x12f)]==='*'||!Array[_0xa94536(0xc5)](_0xfb75b0[_0xa94536(0x12f)]))for(let _0x192584=0x1;_0x192584<=_0x304834[_0xa94536(0x14d)];_0x192584++){const _0x3f60b1=_0x304834[_0x192584-0x1];_0x5bb039[_0xa94536(0x8f)](_0x192584+'|\x20'+_0x3f60b1);}else for(const [_0x1fb372,_0x270b61]of _0xfb75b0['lines']){_0x5bb039['length']>0x0&&_0x5bb039[_0xa94536(0x8f)]('');for(let _0x221f85=_0x1fb372;_0x221f85<=_0x270b61&&_0x221f85<=_0x304834['length'];_0x221f85++){const _0x34d1c7=_0x304834[_0x221f85-0x1];_0x5bb039[_0xa94536(0x8f)](_0x221f85+'|\x20'+_0x34d1c7);}}_0x361587[_0xa94536(0x8f)]({'path':_0xfb75b0['path'],'content':_0x5bb039[_0xa94536(0x192)]('\x0a')});}else _0x1a917e['push']('<file\x20path=\x22'+_0xfb75b0['path']+_0xa94536(0x18f)+(_0x40eec7?.[_0xa94536(0x128)]||'Unknown\x20error')+_0xa94536(0x147));}try{const _0x5a1a32=await compactFileContexts(_0x361587,_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x15b)],MORPH_API_KEY,MORPH_API_URL);for(const _0x3587a4 of _0x5a1a32){_0x1a917e['push']('<file\x20path=\x22'+_0x3587a4[_0xa94536(0x14e)]+_0xa94536(0xda)+_0x3587a4['content']+'\x0a</file>');}}catch(_0x2ed781){logger[_0xa94536(0xa4)]('MCP',_0xa94536(0xc0),{'error':_0x2ed781 instanceof Error?_0x2ed781[_0xa94536(0x128)]:String(_0x2ed781),'files_count':_0x361587[_0xa94536(0x14d)]});for(const _0x3de63a of _0x361587){_0x1a917e['push'](_0xa94536(0x143)+_0x3de63a['path']+_0xa94536(0xda)+_0x3de63a[_0xa94536(0xb4)]+_0xa94536(0x147));}}_0x2962d4[_0xa94536(0x8f)](_0x1a917e[_0xa94536(0x192)]('\x0a\x0a')),_0x58438a=_0x2962d4['join']('\x0a');const _0x20f7ec=_0xd48d15['errors']?.[_0xa94536(0x108)](_0x223519=>_0x223519[_0xa94536(0x128)]?.[_0xa94536(0x19d)](_0xa94536(0x120)))||[];if(_0x20f7ec[_0xa94536(0x14d)]>0x0){const _0xbe9167=_0x20f7ec[_0xa94536(0x133)](_0x24b6a2=>_0x24b6a2['message'])[_0xa94536(0x192)](';\x20');reportMorphError({'error_message':_0xbe9167,'error_type':'FileReadError','context':{'tool':_0xa94536(0xe4),'repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'query':_0x31fb29['data'][_0xa94536(0x15b)],'model':_0xa94536(0xa7),'termination_reason':'completed_with_file_errors','error_count':_0x20f7ec['length'],'is_timeout':![],'timings':_0xd48d15['timings'],'files_attempted':_0x559c73['map'](_0x332802=>({'path':_0x332802['path'],'lines':_0x332802[_0xa94536(0x12f)]})),'tool_calls':_0x4c8f01(_0xd48d15[_0xa94536(0x179)]),'messages':_0xd48d15[_0xa94536(0x179)]?.['map'](_0x4daf5d=>({'role':_0x4daf5d[_0xa94536(0x12b)],'content':_0x4daf5d[_0xa94536(0xb4)],..._0x4daf5d[_0xa94536(0x165)]?{'tool_calls':_0x4daf5d[_0xa94536(0x165)][_0xa94536(0x14d)]}:{},..._0x4daf5d[_0xa94536(0x118)]?{'tool_call_id':_0x4daf5d['tool_call_id']}:{}})),'request_content':{'query':_0x31fb29[_0xa94536(0xcf)]['search_string'],'repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'repoRoot':a0_0x2f511b[_0xa94536(0xd2)](_0x31fb29['data'][_0xa94536(0x132)]),'model':_0xa94536(0xa7)}},'source':_0xa94536(0x151)})[_0xa94536(0x178)](()=>{});}}else{if(_0xd48d15[_0xa94536(0x187)]===_0xa94536(0x14f)&&_0xd48d15[_0xa94536(0x16c)][_0xa94536(0x14d)]>0x0){const _0x2224a9=_0xd48d15[_0xa94536(0x16c)][_0xa94536(0x133)](_0x1f6571=>_0x1f6571[_0xa94536(0x128)])[_0xa94536(0x192)](';\x20');_0x58438a=_0xa94536(0x9f)+_0x2224a9;const _0x3dde7c=_0x2224a9[_0xa94536(0x8c)]()[_0xa94536(0x19f)](_0xa94536(0xf5))||_0x2224a9[_0xa94536(0x8c)]()[_0xa94536(0x19f)]('timed\x20out')||_0x2224a9[_0xa94536(0x8c)]()[_0xa94536(0x19f)]('etimedout'),_0x23d00f=_0xd48d15[_0xa94536(0xa3)]?.['metadata']?.[_0xa94536(0x95)],_0x27cf72=_0xd48d15['errors'][0x0];reportMorphError({'error_message':_0x2224a9,'error_type':_0x3dde7c?'TimeoutError':_0x27cf72?.[_0xa94536(0xdd)]?.[_0xa94536(0x111)]||_0xa94536(0x177),'context':{'tool':'codebase_search','repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'query':_0x31fb29['data'][_0xa94536(0x15b)],'model':_0xa94536(0xa7),'termination_reason':_0xd48d15['terminationReason'],'error_count':_0xd48d15[_0xa94536(0x16c)][_0xa94536(0x14d)],'is_timeout':_0x3dde7c,'timings':_0xd48d15[_0xa94536(0x186)],'files_attempted':_0x23d00f?.[_0xa94536(0x133)](_0x28ac3a=>({'path':_0x28ac3a[_0xa94536(0x14e)],'lines':_0x28ac3a[_0xa94536(0x12f)]})),'tool_calls':_0x4c8f01(_0xd48d15[_0xa94536(0x179)]),'messages':_0xd48d15['messages']?.[_0xa94536(0x133)](_0x335766=>({'role':_0x335766[_0xa94536(0x12b)],'content':_0x335766[_0xa94536(0xb4)],..._0x335766['tool_calls']?{'tool_calls':_0x335766[_0xa94536(0x165)][_0xa94536(0x14d)]}:{},..._0x335766[_0xa94536(0x118)]?{'tool_call_id':_0x335766[_0xa94536(0x118)]}:{}})),'request_content':{'query':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x15b)],'repo_path':_0x31fb29[_0xa94536(0xcf)]['repo_path'],'repoRoot':a0_0x2f511b['resolve'](_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)]),'model':'morph-warp-grep-v2.1'}},'stack_trace':_0x27cf72?.[_0xa94536(0xd6)]||undefined,'source':_0xa94536(0x151)})[_0xa94536(0x178)](()=>{});}else _0x58438a=_0xa94536(0xf2);}return{'content':[{'type':'text','text':_0x58438a}]};}catch(_0x150559){const _0x14973d=handleMorphAPIError(_0x150559);if(_0x14973d)return logger[_0xa94536(0x18d)]('MCP',_0xa94536(0xa5),{'tool':_0xa94536(0xe4),'error':_0xa94536(0xff),'latency_ms':Date['now']()-_0x307c28}),_0x14973d;const _0x93e522=_0x150559 instanceof Error?_0x150559[_0xa94536(0x128)]:String(_0x150559);logger[_0xa94536(0x18d)]('MCP',_0xa94536(0xa5),{'tool':_0xa94536(0xe4),'error':_0x93e522,'repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'query':_0x31fb29['data'][_0xa94536(0x15b)],'latency_ms':Date[_0xa94536(0x152)]()-_0x307c28});const _0x5870c0=_0x93e522[_0xa94536(0x8c)]()['includes'](_0xa94536(0xf5))||_0x93e522['toLowerCase']()['includes']('timed\x20out')||_0x93e522['toLowerCase']()['includes'](_0xa94536(0xcb))||_0x150559 instanceof Error&&_0x150559['name']===_0xa94536(0x189);return reportMorphError({'error_message':_0x93e522,'error_type':_0x5870c0?'TimeoutError':_0x150559 instanceof Error?_0x150559[_0xa94536(0xdd)]['name']:_0xa94536(0x181),'context':{'tool':_0xa94536(0xe4),'repo_path':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x132)],'query':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x15b)],'model':_0xa94536(0xa7),'is_timeout':_0x5870c0,'exception_phase':_0xa94536(0xb7),'request_content':{'query':_0x31fb29[_0xa94536(0xcf)][_0xa94536(0x15b)],'repo_path':_0x31fb29['data'][_0xa94536(0x132)],'repoRoot':a0_0x2f511b[_0xa94536(0xd2)](_0x31fb29['data'][_0xa94536(0x132)]),'model':_0xa94536(0xa7)}},'stack_trace':_0x150559 instanceof Error?_0x150559[_0xa94536(0xd6)]:undefined,'source':_0xa94536(0x151)})[_0xa94536(0x178)](()=>{}),{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0x154)+_0x93e522}],'isError':![]};}}case TOOL_NAMES['GITHUB_CODEBASE_SEARCH']:{const _0x51666b=WarpGrepGitHubArgsSchema[_0xa94536(0xd8)](_0x3d9cdd);if(!_0x51666b['success'])return{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0xaf)+_0x51666b['error']}],'isError':!![]};const _0x373134=_0x51666b[_0xa94536(0xcf)]['github_url']||_0x51666b[_0xa94536(0xcf)][_0xa94536(0x199)];if(!_0x373134)return{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0x91)}],'isError':!![]};const _0x54ec8f=MORPH_API_KEY;if(!_0x54ec8f)throw new Error(_0xa94536(0x123));const _0x304fc9=Date[_0xa94536(0x152)]();logger[_0xa94536(0x103)](_0xa94536(0xfc),_0xa94536(0xe1),{'identifier':_0x373134,'query':_0x51666b[_0xa94536(0xcf)][_0xa94536(0x15b)],'branch':_0x51666b[_0xa94536(0xcf)][_0xa94536(0x10d)]});try{const _0x5b9440=new WarpGrepClient({'morphApiKey':_0x54ec8f,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x3079e0=await _0x5b9440[_0xa94536(0xc1)]({'searchTerm':_0x51666b['data'][_0xa94536(0x15b)],'github':_0x373134,'branch':_0x51666b['data'][_0xa94536(0x10d)]}),_0xd8cce0=Date[_0xa94536(0x152)]()-_0x304fc9;logMcpStderr(_0xa94536(0x148)+_0xd8cce0+'ms.\x20Success:\x20'+_0x3079e0[_0xa94536(0xd7)]);const _0x3c4c3d=formatResult(_0x3079e0);return{'content':[{'type':_0xa94536(0xb3),'text':_0x3c4c3d}]};}catch(_0x1a7e36){const _0x11841b=handleMorphAPIError(_0x1a7e36);if(_0x11841b)return _0x11841b;const _0x2ea1dc=Date['now']()-_0x304fc9,_0x470d9a=_0x1a7e36 instanceof Error?_0x1a7e36['message']:String(_0x1a7e36);return logMcpStderr(_0xa94536(0x117)+_0x2ea1dc+'ms:',_0x470d9a),reportMorphError({'error_message':_0x470d9a,'error_type':_0x1a7e36 instanceof Error?_0x1a7e36[_0xa94536(0xdd)][_0xa94536(0x111)]:'UnknownError','context':{'tool':_0xa94536(0x1a6),'github_url':_0x373134,'search_string':_0x51666b[_0xa94536(0xcf)][_0xa94536(0x15b)],'branch':_0x51666b['data'][_0xa94536(0x10d)]},'stack_trace':_0x1a7e36 instanceof Error?_0x1a7e36[_0xa94536(0xd6)]:undefined,'source':_0xa94536(0x151),'tool':_0xa94536(0x1a6),'latency_ms':_0x2ea1dc})[_0xa94536(0x178)](()=>{}),{'content':[{'type':_0xa94536(0xb3),'text':_0xa94536(0x114)+_0x470d9a}],'isError':![]};}}default:throw new Error(_0xa94536(0x12a)+_0x43da34);}}catch(_0x3a6aa3){const _0x2d1639=_0x3a6aa3 instanceof Error?_0x3a6aa3[_0xa94536(0x128)]:String(_0x3a6aa3);return reportMorphError({'error_message':_0x2d1639,'error_type':_0x3a6aa3 instanceof Error?_0x3a6aa3[_0xa94536(0xdd)][_0xa94536(0x111)]:_0xa94536(0x181),'context':{'tool':_0x43da34,'arguments':_0x3d9cdd?JSON['stringify'](_0x3d9cdd)[_0xa94536(0x194)](0x0,0x1f4):undefined,'mcp_server_version':'0.2.0'},'stack_trace':_0x3a6aa3 instanceof Error?_0x3a6aa3[_0xa94536(0xd6)]:undefined,'source':_0xa94536(0x151)})[_0xa94536(0x178)](()=>{}),{'content':[{'type':_0xa94536(0xb3),'text':'Error:\x20'+_0x2d1639}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x4975f2){const _0x4107d9=a0_0x104249,_0x3db85e=await getValidRootDirectories(_0x4975f2);if(_0x3db85e[_0x4107d9(0x14d)]>0x0)allowedDirectories=[..._0x3db85e],logMcpStderr(_0x4107d9(0x122)+_0x3db85e['length']+_0x4107d9(0xc8));else{logMcpStderr('No\x20valid\x20root\x20directories\x20provided\x20by\x20client');if(ENABLE_WORKSPACE_MODE)try{const _0x187736=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x187736&&(allowedDirectories=[_0x187736],logMcpStderr(_0x4107d9(0x17f)+_0x187736));}catch(_0x3f2b26){logMcpStderr(_0x4107d9(0xe6)+_0x3f2b26);}}}server[a0_0x104249(0x10e)](RootsListChangedNotificationSchema,async()=>{const _0x363f50=a0_0x104249;try{const _0x399e4b=await server[_0x363f50(0x175)]();_0x399e4b&&'roots'in _0x399e4b&&await updateAllowedDirectoriesFromRoots(_0x399e4b[_0x363f50(0x156)]);}catch(_0x1d7890){logMcpStderr(_0x363f50(0x139),_0x1d7890 instanceof Error?_0x1d7890[_0x363f50(0x128)]:String(_0x1d7890));}}),server[a0_0x104249(0x87)]=async()=>{const _0x10845e=a0_0x104249,_0x1eb1fc=server[_0x10845e(0xf6)]();if(_0x1eb1fc?.[_0x10845e(0x156)])try{const _0x54f3ac=await server[_0x10845e(0x175)]();_0x54f3ac&&_0x10845e(0x156)in _0x54f3ac?await updateAllowedDirectoriesFromRoots(_0x54f3ac[_0x10845e(0x156)]):logMcpStderr(_0x10845e(0x159));}catch(_0x3f1c70){logMcpStderr(_0x10845e(0x130),_0x3f1c70 instanceof Error?_0x3f1c70[_0x10845e(0x128)]:String(_0x3f1c70));}else{if(allowedDirectories[_0x10845e(0x14d)]>0x0)logMcpStderr(_0x10845e(0xef),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr('Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode');else throw new Error(_0x10845e(0x155));}}};async function runServer(){const _0x272889=a0_0x104249,_0x3351e1=new StdioServerTransport();await server[_0x272889(0x14a)](_0x3351e1),logMcpStderr(_0x272889(0x138)),allowedDirectories['length']===0x0&&logMcpStderr(_0x272889(0xe5));}runServer()[a0_0x104249(0x178)](_0x472fae=>{const _0x3c5083=a0_0x104249;logMcpStderr(_0x3c5083(0x142),_0x472fae),process[_0x3c5083(0x168)](0x1);});
|
package/dist/log-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
var a1_0x3643c1=a1_0x3562;function a1_0x192a(){var _0x4c6e65=['[os=','342764SVFTji','2230254txxqmo','win32','length','1768VHAAYQ','error','info','darwin','map','184ekXgxV','7DnSAzO','6361470TxuOje','10020328iaqBUK','macOS','Linux','platform','linux','390NSwyhB','335403fKYoNO','2198220cbjzhT','Unknown'];a1_0x192a=function(){return _0x4c6e65;};return a1_0x192a();}(function(_0x13bc15,_0x23cbfd){var _0x27aede=a1_0x3562,_0x24ac7f=_0x13bc15();while(!![]){try{var _0x22352d=parseInt(_0x27aede(0x1f4))/0x1*(-parseInt(_0x27aede(0x1ef))/0x2)+-parseInt(_0x27aede(0x1ec))/0x3+-parseInt(_0x27aede(0x1eb))/0x4+parseInt(_0x27aede(0x1f6))/0x5+parseInt(_0x27aede(0x1e8))/0x6+-parseInt(_0x27aede(0x1f5))/0x7*(parseInt(_0x27aede(0x1e1))/0x8)+-parseInt(_0x27aede(0x1e7))/0x9*(-parseInt(_0x27aede(0x1e6))/0xa);if(_0x22352d===_0x23cbfd)break;else _0x24ac7f['push'](_0x24ac7f['shift']());}catch(_0x396917){_0x24ac7f['push'](_0x24ac7f['shift']());}}}(a1_0x192a,0xcef9b));import a1_0x3035c8 from'os';import{logger}from'./logger.js';export function getOperatingSystemType(_0x3a462a=a1_0x3035c8[a1_0x3643c1(0x1e4)]()){var _0x1e6803=a1_0x3643c1;switch(_0x3a462a){case _0x1e6803(0x1f2):return _0x1e6803(0x1e2);case _0x1e6803(0x1ed):return'Windows';case _0x1e6803(0x1e5):return _0x1e6803(0x1e3);default:return _0x1e6803(0x1e9);}}export function formatMcpLogMessage(_0x2d1d6e,_0x1077e8=a1_0x3035c8[a1_0x3643c1(0x1e4)]()){var _0x467777=a1_0x3643c1;return _0x467777(0x1ea)+getOperatingSystemType(_0x1077e8)+']\x20'+_0x2d1d6e;}function a1_0x3562(_0xaa71bc,_0xbb0b24){_0xaa71bc=_0xaa71bc-0x1e1;var _0x192a8c=a1_0x192a();var _0x3562c9=_0x192a8c[_0xaa71bc];return _0x3562c9;}export function logMcpStderr(_0x54d674,..._0x26fc15){var _0x10699a=a1_0x3643c1;console[_0x10699a(0x1f0)](formatMcpLogMessage(_0x54d674),..._0x26fc15),logger[_0x10699a(0x1f1)]('MCP',_0x54d674,_0x26fc15[_0x10699a(0x1ee)]?{'args':_0x26fc15[_0x10699a(0x1f3)](_0x5ccdd1=>String(_0x5ccdd1))}:undefined);}
|
package/dist/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const a2_0x1513c0=a2_0x1dae;(function(_0x2a8c32,_0x51f7c4){const _0x4f1b70=a2_0x1dae,_0x14a49d=_0x2a8c32();while(!![]){try{const _0x27dfba=-parseInt(_0x4f1b70(0x104))/0x1+parseInt(_0x4f1b70(0x10c))/0x2*(parseInt(_0x4f1b70(0x10f))/0x3)+-parseInt(_0x4f1b70(0x112))/0x4*(parseInt(_0x4f1b70(0x102))/0x5)+-parseInt(_0x4f1b70(0x100))/0x6*(-parseInt(_0x4f1b70(0x101))/0x7)+parseInt(_0x4f1b70(0x116))/0x8*(parseInt(_0x4f1b70(0x107))/0x9)+parseInt(_0x4f1b70(0xff))/0xa+-parseInt(_0x4f1b70(0x105))/0xb;if(_0x27dfba===_0x51f7c4)break;else _0x14a49d['push'](_0x14a49d['shift']());}catch(_0x24ff84){_0x14a49d['push'](_0x14a49d['shift']());}}}(a2_0x5bc8,0xca72e));import{createWriteStream}from'fs';class MorphLogger{['enabled'];[a2_0x1513c0(0x103)];constructor(){const _0x2b606d=a2_0x1513c0;this['enabled']=process[_0x2b606d(0x10e)][_0x2b606d(0x113)]==='1'||!!process['env']['MORPH_LOG_FILE'];const _0x2b1a3d=process[_0x2b606d(0x10e)]['MORPH_LOG_FILE'];this[_0x2b606d(0x103)]=_0x2b1a3d?createWriteStream(_0x2b1a3d,{'flags':'a'}):null;}['debug'](_0x5b267f,_0x2d75d2,_0x1d2211){const _0x2b051d=a2_0x1513c0;this['_log'](_0x2b051d(0x115),_0x5b267f,_0x2d75d2,_0x1d2211);}[a2_0x1513c0(0x111)](_0x520070,_0x197181,_0x219128){const _0x3d74cf=a2_0x1513c0;this['_log'](_0x3d74cf(0x111),_0x520070,_0x197181,_0x219128);}['warn'](_0x370617,_0x227d10,_0xf0df9d){this['_log']('warn',_0x370617,_0x227d10,_0xf0df9d);}['error'](_0x26fd5e,_0x38d3ce,_0x3abdbd){const _0x234f2d=a2_0x1513c0;this[_0x234f2d(0x10d)]('error',_0x26fd5e,_0x38d3ce,_0x3abdbd);}[a2_0x1513c0(0x114)](){const _0x3664fb=a2_0x1513c0;this[_0x3664fb(0x108)]=!![];}get['isEnabled'](){const _0x5d20d9=a2_0x1513c0;return this[_0x5d20d9(0x108)];}[a2_0x1513c0(0x10d)](_0x24c4ce,_0x26a74c,_0x32bd9b,_0x41201c){const _0x22679b=a2_0x1513c0;if(_0x24c4ce!==_0x22679b(0x110)&&!this[_0x22679b(0x108)])return;const _0x6fe2e5=new Date()[_0x22679b(0x106)](),_0x3bd9ce='['+_0x6fe2e5+_0x22679b(0x10a)+_0x24c4ce[_0x22679b(0x109)]()+']\x20['+_0x26a74c+']';console[_0x22679b(0x110)](_0x41201c?_0x3bd9ce+'\x20'+_0x32bd9b+'\x20'+JSON[_0x22679b(0x117)](_0x41201c):_0x3bd9ce+'\x20'+_0x32bd9b),this['fileStream']?.[_0x22679b(0x10b)](JSON[_0x22679b(0x117)]({'ts':_0x6fe2e5,'level':_0x24c4ce,'component':_0x26a74c,'msg':_0x32bd9b,..._0x41201c&&{'data':_0x41201c}})+'\x0a');}}function a2_0x1dae(_0x4482a5,_0x139cd0){_0x4482a5=_0x4482a5-0xff;const _0x5bc89a=a2_0x5bc8();let _0x1dae19=_0x5bc89a[_0x4482a5];return _0x1dae19;}function a2_0x5bc8(){const _0x4d6ceb=['write','26966zramDS','_log','env','177tKauhO','error','info','152868jaJPdy','MORPH_DEBUG','enable','debug','592024RGoBjp','stringify','10515660lAXZAP','6ZIyNpk','6035743tCFexT','20gVwaeG','fileStream','432746YuViHF','25635610YWtvvH','toISOString','126hcDUpn','enabled','toUpperCase',']\x20['];a2_0x5bc8=function(){return _0x4d6ceb;};return a2_0x5bc8();}export const logger=new MorphLogger();
|
package/dist/path-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function a3_0x597a(){const _0x24bbb5=['/mnt/','homedir','match','70ESgwvS','1092655eNBJfK','675485wJcWUB','normalize','slice','554554GDuhTM','charAt','3629709zRioqG','test','startsWith','88dXKPEP','275639eqKHTj','16dfAKZS','replace','26562324KTKwAX','103332IHqyrK','2UAhxtq','6XooihJ','toUpperCase','substring'];a3_0x597a=function(){return _0x24bbb5;};return a3_0x597a();}function a3_0x4c46(_0x2cd8a1,_0x3d5d74){_0x2cd8a1=_0x2cd8a1-0x16d;const _0x597a39=a3_0x597a();let _0x4c4622=_0x597a39[_0x2cd8a1];return _0x4c4622;}(function(_0x1b2d52,_0x7d438f){const _0x1c2dab=a3_0x4c46,_0x311aaf=_0x1b2d52();while(!![]){try{const _0x3142c6=-parseInt(_0x1c2dab(0x178))/0x1*(-parseInt(_0x1c2dab(0x170))/0x2)+-parseInt(_0x1c2dab(0x16f))/0x3*(-parseInt(_0x1c2dab(0x181))/0x4)+-parseInt(_0x1c2dab(0x179))/0x5+parseInt(_0x1c2dab(0x171))/0x6*(-parseInt(_0x1c2dab(0x182))/0x7)+parseInt(_0x1c2dab(0x183))/0x8*(parseInt(_0x1c2dab(0x17e))/0x9)+parseInt(_0x1c2dab(0x177))/0xa*(parseInt(_0x1c2dab(0x17c))/0xb)+-parseInt(_0x1c2dab(0x16e))/0xc;if(_0x3142c6===_0x7d438f)break;else _0x311aaf['push'](_0x311aaf['shift']());}catch(_0x4323d8){_0x311aaf['push'](_0x311aaf['shift']());}}}(a3_0x597a,0x97d62));import a3_0x2bdf57 from'path';import a3_0x1f553f from'os';export function convertToWindowsPath(_0x2b0af1){const _0x286253=a3_0x4c46;if(_0x2b0af1[_0x286253(0x180)](_0x286253(0x174))){const _0x6ed610=_0x2b0af1[_0x286253(0x17d)](0x5)[_0x286253(0x172)](),_0x48f9c2=_0x2b0af1['slice'](0x6)[_0x286253(0x16d)](/\//g,'\x5c');return _0x6ed610+':'+_0x48f9c2;}if(_0x2b0af1[_0x286253(0x176)](/^\/[a-zA-Z]\//)){const _0x23da02=_0x2b0af1['charAt'](0x1)[_0x286253(0x172)](),_0x3c8050=_0x2b0af1[_0x286253(0x17b)](0x2)[_0x286253(0x16d)](/\//g,'\x5c');return _0x23da02+':'+_0x3c8050;}if(_0x2b0af1['match'](/^[a-zA-Z]:/))return _0x2b0af1[_0x286253(0x16d)](/\//g,'\x5c');return _0x2b0af1;}export function normalizePath(_0x2bd468){const _0x3286d2=a3_0x4c46;_0x2bd468=_0x2bd468['trim']()[_0x3286d2(0x16d)](/^["']|["']$/g,'');const _0x3bcb14=_0x2bd468['startsWith']('/')&&!_0x2bd468[_0x3286d2(0x176)](/^\/mnt\/[a-z]\//i)&&!_0x2bd468[_0x3286d2(0x176)](/^\/[a-zA-Z]\//);if(_0x3bcb14)return _0x2bd468[_0x3286d2(0x16d)](/\/+/g,'/')['replace'](/\/+$/,'');_0x2bd468=convertToWindowsPath(_0x2bd468);if(_0x2bd468['startsWith']('\x5c\x5c')){let _0x13ddec=_0x2bd468;_0x13ddec=_0x13ddec[_0x3286d2(0x16d)](/^\\{2,}/,'\x5c\x5c');const _0x55cf21=_0x13ddec[_0x3286d2(0x173)](0x2)[_0x3286d2(0x16d)](/\\\\/g,'\x5c');_0x2bd468='\x5c\x5c'+_0x55cf21;}else _0x2bd468=_0x2bd468[_0x3286d2(0x16d)](/\\\\/g,'\x5c');let _0x57f938=a3_0x2bdf57[_0x3286d2(0x17a)](_0x2bd468);_0x2bd468['startsWith']('\x5c\x5c')&&!_0x57f938[_0x3286d2(0x180)]('\x5c\x5c')&&(_0x57f938='\x5c'+_0x57f938);if(_0x57f938[_0x3286d2(0x176)](/^[a-zA-Z]:/)){let _0x36a374=_0x57f938['replace'](/\//g,'\x5c');return/^[a-z]:/[_0x3286d2(0x17f)](_0x36a374)&&(_0x36a374=_0x36a374['charAt'](0x0)[_0x3286d2(0x172)]()+_0x36a374['slice'](0x1)),_0x36a374;}return _0x57f938[_0x3286d2(0x16d)](/\//g,'\x5c');}export function expandHome(_0x4c0cf3){const _0x4d38ee=a3_0x4c46;if(_0x4c0cf3['startsWith']('~/')||_0x4c0cf3==='~')return a3_0x2bdf57['join'](a3_0x1f553f[_0x4d38ee(0x175)](),_0x4c0cf3[_0x4d38ee(0x17b)](0x1));return _0x4c0cf3;}
|
package/dist/path-validation.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function a4_0x4266(){const _0x361fc3=['Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization','isAbsolute','3TWSLkk','some','startsWith','sep','1247121ypmOek','14KqNjZd','30dCppVW','resolve','2996056FqFASX','normalize','845TFqxHZ','Path\x20must\x20be\x20absolute\x20after\x20normalization','1508691NrZjFl','string','1667236zVvNde','659374SQuwaz','includes','8442MrrZGd','9150625dYfEDi','length'];a4_0x4266=function(){return _0x361fc3;};return a4_0x4266();}(function(_0xa0a6e6,_0x1e1757){const _0x2eb3a8=a4_0x4eb3,_0x5fa6a5=_0xa0a6e6();while(!![]){try{const _0x4b4ea0=-parseInt(_0x2eb3a8(0xfd))/0x1*(-parseInt(_0x2eb3a8(0x10c))/0x2)+parseInt(_0x2eb3a8(0x109))/0x3+-parseInt(_0x2eb3a8(0x10b))/0x4+parseInt(_0x2eb3a8(0x107))/0x5*(-parseInt(_0x2eb3a8(0xf8))/0x6)+parseInt(_0x2eb3a8(0x102))/0x7*(-parseInt(_0x2eb3a8(0x105))/0x8)+parseInt(_0x2eb3a8(0x101))/0x9*(-parseInt(_0x2eb3a8(0x103))/0xa)+parseInt(_0x2eb3a8(0xf9))/0xb;if(_0x4b4ea0===_0x1e1757)break;else _0x5fa6a5['push'](_0x5fa6a5['shift']());}catch(_0x1b6b68){_0x5fa6a5['push'](_0x5fa6a5['shift']());}}}(a4_0x4266,0x7b2c8));function a4_0x4eb3(_0x5ec8c2,_0x2b43a9){_0x5ec8c2=_0x5ec8c2-0xf8;const _0x4266dc=a4_0x4266();let _0x4eb37b=_0x4266dc[_0x5ec8c2];return _0x4eb37b;}import a4_0x5eb2ab from'path';export function isPathWithinAllowedDirectories(_0x14b201,_0x22c31e){const _0x4afed1=a4_0x4eb3;if(typeof _0x14b201!==_0x4afed1(0x10a)||!Array['isArray'](_0x22c31e))return![];if(!_0x14b201||_0x22c31e[_0x4afed1(0xfa)]===0x0)return![];if(_0x14b201[_0x4afed1(0x10d)]('\x00'))return![];let _0x80dec3;try{_0x80dec3=a4_0x5eb2ab[_0x4afed1(0x104)](a4_0x5eb2ab[_0x4afed1(0x106)](_0x14b201));}catch{return![];}if(!a4_0x5eb2ab['isAbsolute'](_0x80dec3))throw new Error(_0x4afed1(0x108));return _0x22c31e[_0x4afed1(0xfe)](_0x211a1a=>{const _0x27a345=_0x4afed1;if(typeof _0x211a1a!==_0x27a345(0x10a)||!_0x211a1a)return![];if(_0x211a1a[_0x27a345(0x10d)]('\x00'))return![];let _0x56a8ee;try{_0x56a8ee=a4_0x5eb2ab[_0x27a345(0x104)](a4_0x5eb2ab[_0x27a345(0x106)](_0x211a1a));}catch{return![];}if(!a4_0x5eb2ab[_0x27a345(0xfc)](_0x56a8ee))throw new Error(_0x27a345(0xfb));if(_0x80dec3===_0x56a8ee)return!![];if(_0x56a8ee===a4_0x5eb2ab[_0x27a345(0x100)])return _0x80dec3[_0x27a345(0xff)](a4_0x5eb2ab[_0x27a345(0x100)]);return _0x80dec3[_0x27a345(0xff)](_0x56a8ee+a4_0x5eb2ab[_0x27a345(0x100)]);});}
|
package/dist/roots-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x121cb3,_0x5e714a){const _0x57c85d=a5_0x43c6,_0x3e5959=_0x121cb3();while(!![]){try{const _0x2d1bd5=-parseInt(_0x57c85d(0x207))/0x1+parseInt(_0x57c85d(0x1fe))/0x2*(parseInt(_0x57c85d(0x1fa))/0x3)+parseInt(_0x57c85d(0x206))/0x4*(-parseInt(_0x57c85d(0x1ff))/0x5)+-parseInt(_0x57c85d(0x208))/0x6*(-parseInt(_0x57c85d(0x1f9))/0x7)+parseInt(_0x57c85d(0x209))/0x8+parseInt(_0x57c85d(0x1f3))/0x9*(parseInt(_0x57c85d(0x1fb))/0xa)+-parseInt(_0x57c85d(0x205))/0xb*(parseInt(_0x57c85d(0x1f7))/0xc);if(_0x2d1bd5===_0x5e714a)break;else _0x3e5959['push'](_0x3e5959['shift']());}catch(_0x375d8f){_0x3e5959['push'](_0x3e5959['shift']());}}}(a5_0x1c5f,0xb1e40));function a5_0x43c6(_0x3fc424,_0x504710){_0x3fc424=_0x3fc424-0x1f2;const _0x1c5fe=a5_0x1c5f();let _0x43c6fe=_0x1c5fe[_0x3fc424];return _0x43c6fe;}import{promises as a5_0x5c5257}from'fs';import a5_0x528ebe from'path';import a5_0xca0716 from'os';import{normalizePath}from'./path-utils.js';import{logMcpStderr}from'./log-utils.js';async function parseRootUri(_0x4c42dc){const _0x84f0d3=a5_0x43c6;try{const _0x14d6bd=_0x4c42dc[_0x84f0d3(0x201)](_0x84f0d3(0x1f2))?_0x4c42dc[_0x84f0d3(0x203)](0x7):_0x4c42dc,_0x136494=_0x14d6bd[_0x84f0d3(0x201)]('~/')||_0x14d6bd==='~'?a5_0x528ebe[_0x84f0d3(0x1f8)](a5_0xca0716[_0x84f0d3(0x1f5)](),_0x14d6bd[_0x84f0d3(0x203)](0x1)):_0x14d6bd,_0x34c3ce=a5_0x528ebe[_0x84f0d3(0x200)](_0x136494),_0x3a3b88=await a5_0x5c5257['realpath'](_0x34c3ce);return normalizePath(_0x3a3b88);}catch{return null;}}function formatDirectoryError(_0x28ce4e,_0x3a78c8,_0x2827d0){const _0x129003=a5_0x43c6;if(_0x2827d0)return'Skipping\x20'+_0x2827d0+':\x20'+_0x28ce4e;const _0x5cf2d0=_0x3a78c8 instanceof Error?_0x3a78c8['message']:String(_0x3a78c8);return _0x129003(0x1fd)+_0x28ce4e+'\x20due\x20to\x20error:\x20'+_0x5cf2d0;}function a5_0x1c5f(){const _0x4343ec=['Skipping\x20invalid\x20directory:\x20','2cyiAeO','79105lpECHH','resolve','startsWith','non-directory\x20root','slice','stat','33LLcQIE','28GHIHwL','501319ANlJSt','78GrSnPe','11114072JAHqZO','file://','99NesWbL','push','homedir','uri','8911476iRVUXZ','join','167937NTHWkL','3028596gIITrO','779910XYgnCe','isDirectory'];a5_0x1c5f=function(){return _0x4343ec;};return a5_0x1c5f();}export async function getValidRootDirectories(_0x5ce7ae){const _0x27e4b9=a5_0x43c6,_0x2ab7b8=[];for(const _0x5c1cf4 of _0x5ce7ae){const _0x13aabe=await parseRootUri(_0x5c1cf4[_0x27e4b9(0x1f6)]);if(!_0x13aabe){logMcpStderr(formatDirectoryError(_0x5c1cf4[_0x27e4b9(0x1f6)],undefined,'invalid\x20path\x20or\x20inaccessible'));continue;}try{const _0x27156e=await a5_0x5c5257[_0x27e4b9(0x204)](_0x13aabe);_0x27156e[_0x27e4b9(0x1fc)]()?_0x2ab7b8[_0x27e4b9(0x1f4)](_0x13aabe):logMcpStderr(formatDirectoryError(_0x13aabe,undefined,_0x27e4b9(0x202)));}catch(_0x4d841c){logMcpStderr(formatDirectoryError(_0x13aabe,_0x4d841c));}}return _0x2ab7b8;}
|
package/dist/tool-definitions.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a6_0x2b4d14=a6_0x5251;function a6_0x5251(_0xc7671a,_0x37ad9a){_0xc7671a=_0xc7671a-0xde;const _0x2ec54b=a6_0x2ec5();let _0x5251cf=_0x2ec54b[_0xc7671a];return _0x5251cf;}(function(_0x1df86f,_0x1d776e){const _0x17251d=a6_0x5251,_0x3eb4a7=_0x1df86f();while(!![]){try{const _0x2b6137=parseInt(_0x17251d(0xe2))/0x1*(-parseInt(_0x17251d(0xe8))/0x2)+parseInt(_0x17251d(0xdf))/0x3*(parseInt(_0x17251d(0xe3))/0x4)+-parseInt(_0x17251d(0xe0))/0x5+-parseInt(_0x17251d(0xe1))/0x6*(parseInt(_0x17251d(0xe7))/0x7)+-parseInt(_0x17251d(0xe4))/0x8+-parseInt(_0x17251d(0xe6))/0x9+parseInt(_0x17251d(0xe5))/0xa;if(_0x2b6137===_0x1d776e)break;else _0x3eb4a7['push'](_0x3eb4a7['shift']());}catch(_0x5c2d2a){_0x3eb4a7['push'](_0x3eb4a7['shift']());}}}(a6_0x2ec5,0x5d100));export const TOOL_NAMES={'EDIT_FILE':a6_0x2b4d14(0xde),'CODEBASE_SEARCH':a6_0x2b4d14(0xe9),'GITHUB_CODEBASE_SEARCH':'github_codebase_search'};function a6_0x2ec5(){const _0x2721c8=['edit_file','16971jCLuaH','582505gAdyui','6lehLBA','3386wKVzBr','424AhlZDU','4480160ZuNluc','17324030DCGzvZ','5946471IUVEPC','929663EEFggy','284qjOYnS','codebase_search'];a6_0x2ec5=function(){return _0x2721c8;};return a6_0x2ec5();}export const ALL_TOOL_NAMES=Object['values'](TOOL_NAMES);export const KNOWN_TOOL_NAMES=new Set(ALL_TOOL_NAMES);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morphllm/morphmcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.199",
|
|
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)",
|