@morphllm/morphmcp 0.8.215 → 0.8.217

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  Supercharge your coding agent. One MCP with two specialized tools for faster edits and smarter retrieval.
4
4
 
5
+ > **Prefer the `morph` CLI + skills.** Same Fast Apply and WarpGrep, no tool schemas in every prompt, works in any agent with a shell:
6
+ > `curl -fsSL https://www.morphllm.com/install.sh | bash && morph install`. This MCP server stays published for hosts that need MCP.
7
+
5
8
  > **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
9
 
7
10
  ## Which integration should I use?
@@ -21,7 +24,7 @@ Conversation **compaction is only available through the OpenCode plugin**. The M
21
24
  | `codebase_search` | Natural-language code exploration sub-agent backed by WarpGrep under the hood |
22
25
  | `github_codebase_search` | Search any public GitHub repo by URL or `owner/repo` shorthand |
23
26
 
24
- All three tools are always exposed. Clients can manage tool visibility on their side.
27
+ All three tools are exposed by default. Narrow the set with `ENABLED_TOOLS` or `DISABLED_TOOLS` (see Configuration).
25
28
 
26
29
  ## Quick Start
27
30
 
@@ -115,6 +118,16 @@ Output: List of files with specific line ranges + actual code content
115
118
  | `MORPH_API_KEY` | Your API key from [morphllm.com](https://morphllm.com) | Required |
116
119
  | `MORPH_API_URL` | Override Morph API base URL for custom proxies | `https://api.morphllm.com` |
117
120
  | `MORPH_WARP_GREP_TIMEOUT` | Timeout for warp grep model calls in ms | `30000` |
121
+ | `ENABLED_TOOLS` | Comma-separated allow-list of tools to expose, or `all` | all tools |
122
+ | `DISABLED_TOOLS` | Comma-separated deny-list of tools to hide | none |
123
+
124
+ Search only, no `edit_file`:
125
+
126
+ ```json
127
+ "env": { "MORPH_API_KEY": "sk-...", "ENABLED_TOOLS": "codebase_search,github_codebase_search" }
128
+ ```
129
+
130
+ `DISABLED_TOOLS=edit_file` is equivalent. When both are set a tool is on only if allowed and not denied. The pre-0.8.124 names `warpgrep_codebase_search` and `warpgrep_github_search` still work.
118
131
 
119
132
  ## Get an API Key
120
133
 
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const a0_0x2775e7=a0_0x3be1;(function(_0x4b5281,_0xeb2be1){const _0x1231f1=a0_0x3be1,_0x1f195a=_0x4b5281();while(!![]){try{const _0x1da608=parseInt(_0x1231f1(0x2cc))/0x1+-parseInt(_0x1231f1(0x20c))/0x2*(parseInt(_0x1231f1(0x205))/0x3)+parseInt(_0x1231f1(0x228))/0x4+parseInt(_0x1231f1(0x20b))/0x5*(parseInt(_0x1231f1(0x1dd))/0x6)+parseInt(_0x1231f1(0x21d))/0x7*(parseInt(_0x1231f1(0x273))/0x8)+-parseInt(_0x1231f1(0x1f3))/0x9+-parseInt(_0x1231f1(0x1e3))/0xa;if(_0x1da608===_0xeb2be1)break;else _0x1f195a['push'](_0x1f195a['shift']());}catch(_0x2dcb7c){_0x1f195a['push'](_0x1f195a['shift']());}}}(a0_0x4b33,0xa40b3));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_0x29e6e9 from'fs/promises';import a0_0x381603 from'path';import a0_0x518c28 from'os';import{createRequire}from'module';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';function a0_0x4b33(){const _0x371840=['\x0aOptions:','application/json','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode','completed_with_file_errors','timeout','runWarpGrep_call','composer.json','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','8210268eIkcym','Fallback:\x20Using\x20workspace\x20root\x20','map','enum','source','[github_codebase_search]\x20Failed\x20in\x20','ms.\x20Success:\x20','data','path_validation_failed','exit','@morphllm/morphmcp\x20','\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)','basename','BinaryFile','Warning:\x20','tsconfig.json','false','access','1552308LWrIck','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','morph-v3-fast','CODEBASE_SEARCH','message','10SnWXtc','2jWycJa','warp_grep_start','slice','morph-warp-grep-v2.1','catch','every','sk-','mcp-filesystem','\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit','setRequestHandler','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.','tool_call_received','min','string','\x20is\x20not\x20a\x20directory','\x20chars)','toLowerCase','5332523gwDfVv','debug','FileReadError','startsWith','Repository\x20identifier','UnknownError','EDIT_FILE','Morph\x20Edit\x20','Invalid\x20arguments:\x20','\x27\x20in\x20`',',\x20removed\x20','2102712luEcJj','resolve','Disabled\x20tools:\x20','grep','searchGitHub','linesAdded','-\x20Preserve\x20exact\x20indentation\x0a','list_directory','added\x20','GITHUB_CODEBASE_SEARCH','function','MORPH_LARGE_APPLY','Cargo.toml','WORKSPACE_ROOT','`\x20in\x20`','.\x20Path:\x20','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20','sep','Parameters:\x0a','Rules:\x0a','.vscode','indexOf','utf-8','etimedout','--api-key=','filePath','MORPH_API_KEY','\x20as\x20allowed\x20directory','warp_grep_complete','MORPH_API_URL','ENOENT','now','RipgrepError','Bearer\x20','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','-\x20Grepped\x20\x27','-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a','Relevant\x20context\x20found:','api-key','timed\x20out','name','readFile','instructions','path_validation_resolved','glob','ToolException','Failed\x20to\x20read\x20file:\x20','LocalRipgrepProvider','tool_call_id','completionId','metadata','Tool\x20','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','morph-','Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:','status','[could\x20not\x20read\x20file:\x20','homedir','Preview\x20changes\x20without\x20applying\x20them.','Parent\x20directory\x20does\x20not\x20exist:\x20','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','text','tool','.\x20Changes:\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.','--api-key','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.','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','\x20error(s)','Fatal\x20error\x20running\x20server:','code_edit','length','8Wbxalu','content','some','turns','edit_file','stringify','describe','target_filepath','tool_calls','push','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','DISABLED_TOOLS',',\x20modified\x20','Unknown\x20tool:\x20','file','-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a','isArray','https://morphllm.com/api/error-report','arguments','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','setNotificationHandler','-\x20Listed\x20directory\x20`','join','stack','github_url','tool_call_error','terminationReason','Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:','code','timings','ENABLE_WORKSPACE_MODE','Morph\x20FastApply\x20failed\x20without\x20error\x20message','Workspace\x20mode\x20enabled:\x20Using\x20','../package.json','provider_created','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','Created\x20File','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','has','finish','warn','grep\x20\x27','ms:','\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit','github_codebase_search','changes','file_read_complete','read','match','search_string','WarpGrep\x20sub-tool\x20errors:\x20','substring','filter','realpath','WarpGrepError','isDirectory','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','\x0aExamples:','listRoots','glob\x20\x27','MCP','log','Error\x20running\x20fast\x20context\x20search:\x20','annotations','--help','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','path','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','node_modules','\x20(new\x20file)','getClientCapabilities','RipgrepNotAvailable','SubToolError','includes','dirname','assistant','unknown\x20error','safeParse','github_search_start','\x22>\x0aError\x20reading\x20file:\x20','codebase_search','requiresApiKey','-\x20Read\x20file\x20`','package.json','grep_search','path_validation_start','list_directory\x20','morph-v3-large','constructor','418716JFGtOk','env','size','MORPH_WARP_GREP_TIMEOUT','connect','\x0a...\x20(truncated,\x20total:\x20','unknown','ReadError','-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','pattern','Here\x20is\x20the\x20content\x20of\x20files:\x0a','role','Tool\x20\x22','instruction','Max\x20results\x20to\x20return','linesRemoved','errors','toISOString','Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.','.git','context','all','array','params','messages','GitHub\x20search\x20failed:\x20','\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)','<file\x20path=\x22','target_file','dryRun','success','Specific\x20commit\x20hash\x20to\x20search','version','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20','\x22>\x0a','title','0.2.0','file_path','roots','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','\x20-\x20','File\x20read\x20error:','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','split','lines','TimeoutError','file_read_failed','Warning:\x20DISABLED_TOOLS\x20contains\x20unknown\x20tool\x20\x22','Failed\x20to\x20request\x20roots\x20from\x20client:','argv','payload','\x0a</file>','oninitialized','Warning:\x20Unable\x20to\x20determine\x20package\x20version:','Example\x20format:\x0a','linesModified','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','number','command','cwd','optional','No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.','Error:\x20','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','default','-\x20Glob\x20search\x20`','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.','Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.','2976174TzBngY','files','branch','response','object','\x20disabled\x20via\x20DISABLED_TOOLS','5966300czPCnw','error','Error\x20accessing\x20directory\x20','FileNotFound','Applied','repo_path','inputSchema'];a0_0x4b33=function(){return _0x371840;};return a0_0x4b33();}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_0x12bda9 from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES}from'./tool-definitions.js';function fixPathRepetition(_0x5a48c7){const _0x285ec0=a0_0x3be1,_0x1069b=_0x5a48c7[_0x285ec0(0x2f7)](a0_0x381603['sep'])[_0x285ec0(0x2a7)](Boolean);if(_0x1069b[_0x285ec0(0x272)]<0x2)return null;for(let _0x483df6=Math['floor'](_0x1069b[_0x285ec0(0x272)]/0x2);_0x483df6>=0x1;_0x483df6--){for(let _0x5c4574=0x0;_0x5c4574<=_0x1069b[_0x285ec0(0x272)]-0x2*_0x483df6;_0x5c4574++){const _0x3bc9dd=_0x1069b[_0x285ec0(0x20e)](_0x5c4574,_0x5c4574+_0x483df6),_0x4d97cf=_0x1069b['slice'](_0x5c4574+_0x483df6,_0x5c4574+0x2*_0x483df6);if(_0x3bc9dd[_0x285ec0(0x211)]((_0x2ccd47,_0x301da3)=>_0x2ccd47===_0x4d97cf[_0x301da3])){const _0x1d1616=[..._0x1069b[_0x285ec0(0x20e)](0x0,_0x5c4574),..._0x1069b[_0x285ec0(0x20e)](_0x5c4574+_0x483df6)];return a0_0x381603[_0x285ec0(0x23c)]+_0x1d1616[_0x285ec0(0x289)](a0_0x381603[_0x285ec0(0x23c)]);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x4cf48a=a0_0x3be1;try{const _0x2b4391=require(_0x4cf48a(0x294));return _0x2b4391[_0x4cf48a(0x2ec)]??_0x4cf48a(0x2d2);}catch(_0x5b6974){return logMcpStderr(_0x4cf48a(0x301),_0x5b6974),'unknown';}}function printHelp(){const _0x3bfa05=a0_0x3be1;console['log'](_0x3bfa05(0x1fd)+getPackageVersion()),console[_0x3bfa05(0x2b0)]('\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]'),console[_0x3bfa05(0x2b0)](_0x3bfa05(0x1ea)),console[_0x3bfa05(0x2b0)](_0x3bfa05(0x1fe)),console[_0x3bfa05(0x2b0)](_0x3bfa05(0x214)),console[_0x3bfa05(0x2b0)](_0x3bfa05(0x29e)),console['log'](_0x3bfa05(0x2ac)),console[_0x3bfa05(0x2b0)]('\x20\x20morph-mcp'),console[_0x3bfa05(0x2b0)](_0x3bfa05(0x304));}const cliArgs=process[a0_0x2775e7(0x2fd)]['slice'](0x2),VERSION_FLAGS=new Set(['--version','-v','-V']),HELP_FLAGS=new Set([a0_0x2775e7(0x2b3),'-h']);cliArgs[a0_0x2775e7(0x275)](_0x5ee5b1=>VERSION_FLAGS[a0_0x2775e7(0x299)](_0x5ee5b1))&&(console[a0_0x2775e7(0x2b0)]('@morphllm/morphmcp\x20'+getPackageVersion()),process[a0_0x2775e7(0x1fc)](0x0));cliArgs[a0_0x2775e7(0x275)](_0x1d191e=>HELP_FLAGS[a0_0x2775e7(0x299)](_0x1d191e))&&(printHelp(),process['exit'](0x0));function getCliArg(_0xd5d27e){const _0x5f0954=a0_0x2775e7;for(let _0x3ec202=0x0;_0x3ec202<cliArgs[_0x5f0954(0x272)];_0x3ec202++){const _0x29740d=cliArgs[_0x3ec202];if(_0x29740d[_0x5f0954(0x220)]('--'+_0xd5d27e+'='))return _0x29740d['slice'](('--'+_0xd5d27e+'=')[_0x5f0954(0x272)]);if(_0x29740d==='--'+_0xd5d27e&&_0x3ec202+0x1<cliArgs[_0x5f0954(0x272)])return cliArgs[_0x3ec202+0x1];}return undefined;}const args=[];function a0_0x3be1(_0xdd6604,_0x494f2b){_0xdd6604=_0xdd6604-0x1d5;const _0x4b33cd=a0_0x4b33();let _0x3be12c=_0x4b33cd[_0xdd6604];return _0x3be12c;}for(let i=0x0;i<cliArgs[a0_0x2775e7(0x272)];i++){const arg=cliArgs[i];if(VERSION_FLAGS[a0_0x2775e7(0x299)](arg)||HELP_FLAGS[a0_0x2775e7(0x299)](arg))continue;if(arg[a0_0x2775e7(0x220)](a0_0x2775e7(0x243)))continue;if(arg===a0_0x2775e7(0x26c)){i++;continue;}args['push'](arg);}const WORKSPACE_ROOT=process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x235)]||process['env']['PWD']||process[a0_0x2775e7(0x307)](),ENABLE_WORKSPACE_MODE=process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x291)]!=='false',MORPH_API_KEY=getCliArg(a0_0x2775e7(0x251))??process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x245)],MORPH_API_URL=process['env'][a0_0x2775e7(0x248)],MORPH_LARGE_APPLY=process['env'][a0_0x2775e7(0x233)]!==a0_0x2775e7(0x203),MORPH_WARP_GREP_TIMEOUT=process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x2cf)]?parseInt(process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x2cf)],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),DEFAULT_DISABLED_TOOLS=new Set(),DISABLED_TOOLS=process[a0_0x2775e7(0x2cd)][a0_0x2775e7(0x27e)]?new Set(process[a0_0x2775e7(0x2cd)]['DISABLED_TOOLS'][a0_0x2775e7(0x2f7)](',')['map'](_0x3a350a=>_0x3a350a['trim']())[a0_0x2775e7(0x2a7)](_0x1433c5=>_0x1433c5[a0_0x2775e7(0x272)]>0x0)):DEFAULT_DISABLED_TOOLS;if(DISABLED_TOOLS[a0_0x2775e7(0x2ce)]>0x0){for(const tool of DISABLED_TOOLS){!KNOWN_TOOL_NAMES[a0_0x2775e7(0x299)](tool)&&console[a0_0x2775e7(0x1e4)](a0_0x2775e7(0x2fb)+tool+'\x22.\x20Known\x20tools:\x20'+[...KNOWN_TOOL_NAMES][a0_0x2775e7(0x289)](',\x20'));}console['error'](a0_0x2775e7(0x22a)+[...DISABLED_TOOLS]['join'](',\x20'));}MORPH_API_KEY&&!MORPH_API_KEY[a0_0x2775e7(0x220)](a0_0x2775e7(0x212))&&!MORPH_API_KEY[a0_0x2775e7(0x220)](a0_0x2775e7(0x260))&&logMcpStderr('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x50dd55){const _0x2179db=a0_0x2775e7;try{await a0_0x12bda9['post'](_0x2179db(0x284),{..._0x50dd55,'timestamp':new Date()[_0x2179db(0x2dd)](),'source':_0x50dd55[_0x2179db(0x1f7)]||_0x2179db(0x213),'os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x50dd55[_0x2179db(0x2e0)]}},{'timeout':0x1388,'headers':{'Content-Type':_0x2179db(0x1eb),'Authorization':_0x2179db(0x24c)+MORPH_API_KEY}});}catch{}}function extractStatusCode(_0xf789e4,_0x3f39be){const _0x5ed122=a0_0x2775e7;if(_0xf789e4&&typeof _0xf789e4===_0x5ed122(0x1e1)&&'status'in _0xf789e4)return _0xf789e4[_0x5ed122(0x262)];if(_0xf789e4&&typeof _0xf789e4===_0x5ed122(0x1e1)&&_0x5ed122(0x1e0)in _0xf789e4)return _0xf789e4[_0x5ed122(0x1e0)]?.['status'];const _0x5f49cb=_0x3f39be[_0x5ed122(0x2a3)](/\b(401|429)\b/);return _0x5f49cb?parseInt(_0x5f49cb[0x1],0xa):null;}function handleMorphAPIError(_0x37ad04){const _0x1f9afd=a0_0x2775e7,_0x3b24b3=_0x37ad04 instanceof Error?_0x37ad04[_0x1f9afd(0x20a)]:String(_0x37ad04),_0x230b62=extractStatusCode(_0x37ad04,_0x3b24b3);switch(_0x230b62){case 0x191:return{'content':[{'type':'text','text':_0x1f9afd(0x26d)}],'isError':!![]};case 0x1ad:return{'content':[{'type':_0x1f9afd(0x268),'text':_0x1f9afd(0x2de)}],'isError':!![]};default:return null;}}args['length']===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr('Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]'),logMcpStderr(a0_0x2775e7(0x28e)),logMcpStderr('\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)'),logMcpStderr(a0_0x2775e7(0x239)),logMcpStderr(a0_0x2775e7(0x2e6)),logMcpStderr(a0_0x2775e7(0x267)));function normalizePath(_0x488cd9){return a0_0x381603['normalize'](_0x488cd9);}function expandHome(_0x39ad8e){const _0x6d0d3e=a0_0x2775e7;if(_0x39ad8e[_0x6d0d3e(0x220)]('~/')||_0x39ad8e==='~')return a0_0x381603[_0x6d0d3e(0x289)](a0_0x518c28[_0x6d0d3e(0x264)](),_0x39ad8e[_0x6d0d3e(0x20e)](0x1));return _0x39ad8e;}let allowedDirectories=await Promise[a0_0x2775e7(0x2e1)](args[a0_0x2775e7(0x1f5)](async _0x21a1fe=>{const _0x4bef76=a0_0x2775e7,_0x49263d=expandHome(_0x21a1fe),_0x2eb8fe=a0_0x381603[_0x4bef76(0x229)](_0x49263d);try{const _0x327c57=await a0_0x29e6e9[_0x4bef76(0x2a8)](_0x2eb8fe);return normalizePath(_0x327c57);}catch(_0xcfc26b){return normalizePath(_0x2eb8fe);}}));if(ENABLE_WORKSPACE_MODE&&args[a0_0x2775e7(0x272)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x2775e7(0x27c)](workspaceDir),logMcpStderr(a0_0x2775e7(0x293)+workspaceDir+a0_0x2775e7(0x246)));}catch(a0_0xfd6aa4){logMcpStderr('Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20'+a0_0xfd6aa4);}async function detectWorkspaceRoot(_0x5d48ac){const _0x531bd2=a0_0x2775e7;let _0x29ce81=a0_0x381603[_0x531bd2(0x229)](_0x5d48ac);const _0x331331=[_0x531bd2(0x2df),_0x531bd2(0x23f),_0x531bd2(0x2c6),_0x531bd2(0x234),'pyproject.toml','go.mod','.cursor',_0x531bd2(0x202),_0x531bd2(0x1f1)];while(_0x29ce81!==a0_0x381603['dirname'](_0x29ce81)){for(const _0xe9d899 of _0x331331){const _0x2d2a05=a0_0x381603[_0x531bd2(0x289)](_0x29ce81,_0xe9d899);try{return await a0_0x29e6e9[_0x531bd2(0x204)](_0x2d2a05),normalizePath(_0x29ce81);}catch{}}_0x29ce81=a0_0x381603['dirname'](_0x29ce81);}return normalizePath(_0x5d48ac);}await Promise[a0_0x2775e7(0x2e1)](args[a0_0x2775e7(0x1f5)](async _0x99dae6=>{const _0x1c0e7b=a0_0x2775e7;try{const _0x109d1d=await a0_0x29e6e9['stat'](expandHome(_0x99dae6));!_0x109d1d[_0x1c0e7b(0x2aa)]()&&(logMcpStderr(_0x1c0e7b(0x1d7)+_0x99dae6+_0x1c0e7b(0x21a)),process[_0x1c0e7b(0x1fc)](0x1));}catch(_0x4dc23d){logMcpStderr(_0x1c0e7b(0x1e5)+_0x99dae6+':',_0x4dc23d),process['exit'](0x1);}}));async function validatePath(_0x795d67){const _0x19c337=a0_0x2775e7,_0x41c021=expandHome(_0x795d67),_0x4b5fbd=a0_0x381603['resolve'](_0x41c021);logger['debug'](_0x19c337(0x2af),_0x19c337(0x2c8),{'raw_path':_0x795d67,'absolute':_0x4b5fbd});try{const _0x4a821f=await a0_0x29e6e9[_0x19c337(0x2a8)](_0x4b5fbd);return logger[_0x19c337(0x21e)](_0x19c337(0x2af),_0x19c337(0x256),{'resolved':_0x4a821f,'symlink':_0x4a821f!==_0x4b5fbd}),_0x4a821f;}catch(_0xb3ad32){if(_0xb3ad32[_0x19c337(0x28f)]===_0x19c337(0x249)){const _0x49b619=a0_0x381603['dirname'](_0x4b5fbd);try{const _0xe522f1=await a0_0x29e6e9['realpath'](_0x49b619),_0x1e2079=a0_0x381603['join'](_0xe522f1,a0_0x381603['basename'](_0x4b5fbd));return logger[_0x19c337(0x21e)]('MCP',_0x19c337(0x256),{'resolved':_0x1e2079,'new_file':!![]}),_0x1e2079;}catch{logger[_0x19c337(0x1e4)](_0x19c337(0x2af),_0x19c337(0x1fb),{'raw_path':_0x795d67,'error':_0x19c337(0x266)+_0x49b619});throw new Error(_0x19c337(0x266)+_0x49b619);}}logger[_0x19c337(0x1e4)]('MCP','path_validation_failed',{'raw_path':_0x795d67,'error':_0xb3ad32['message']});throw _0xb3ad32;}}const MorphEditFileArgsSchema=z['object']({'path':z[a0_0x2775e7(0x219)](),'code_edit':z[a0_0x2775e7(0x219)]()['describe'](a0_0x2775e7(0x206)),'instruction':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x298)),'dryRun':z['boolean']()[a0_0x2775e7(0x1d9)](![])[a0_0x2775e7(0x279)](a0_0x2775e7(0x265))}),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_0x2775e7(0x1e1)]({'search_string':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x279)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x1d8)),'search_type':z[a0_0x2775e7(0x1f6)](['default',a0_0x2775e7(0x2b7)])[a0_0x2775e7(0x1d5)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x1dc))}),WarpGrepGitHubArgsSchema=z[a0_0x2775e7(0x1e1)]({'search_string':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x279)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x1d5)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x1db)),'owner_repo':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x1d5)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x2b6)),'branch':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x1d5)]()['describe'](a0_0x2775e7(0x25f))}),CodebaseSearchArgsSchema=z['object']({'query':z[a0_0x2775e7(0x219)]()['describe'](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x221)),'branch':z[a0_0x2775e7(0x219)]()[a0_0x2775e7(0x1d5)]()[a0_0x2775e7(0x279)](a0_0x2775e7(0x24d)),'commitHash':z[a0_0x2775e7(0x219)]()['optional']()[a0_0x2775e7(0x279)](a0_0x2775e7(0x2eb)),'targetDirectories':z[a0_0x2775e7(0x2e2)](z[a0_0x2775e7(0x219)]())[a0_0x2775e7(0x1d9)]([])[a0_0x2775e7(0x279)]('Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all'),'limit':z[a0_0x2775e7(0x305)]()[a0_0x2775e7(0x1d5)]()[a0_0x2775e7(0x1d9)](0xa)[a0_0x2775e7(0x279)](a0_0x2775e7(0x2da))}),server=new Server({'name':'morph-mcp','version':a0_0x2775e7(0x2f0)},{'capabilities':{'tools':{}}});server[a0_0x2775e7(0x215)](ListToolsRequestSchema,async()=>{const _0x1b8ac9=a0_0x2775e7,_0x310bef=[{'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'+_0x1b8ac9(0x2f3)+_0x1b8ac9(0x23d)+_0x1b8ac9(0x286)+_0x1b8ac9(0x27d)+_0x1b8ac9(0x282)+_0x1b8ac9(0x26e)+_0x1b8ac9(0x302)+'//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a'+_0x1b8ac9(0x23e)+'-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a'+_0x1b8ac9(0x22e)+_0x1b8ac9(0x24f)+_0x1b8ac9(0x2d4),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'annotations':{'readOnlyHint':![],'destructiveHint':!![],'idempotentHint':![],'openWorldHint':![]},'requiresApiKey':!![]},{'name':TOOL_NAMES[_0x1b8ac9(0x209)],'description':'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'+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+_0x1b8ac9(0x2ed)+_0x1b8ac9(0x23b)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':!![]},'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':!![]},'requiresApiKey':!![]}],_0x2d37fa=_0x310bef[_0x1b8ac9(0x2a7)](_0x6ba729=>{const _0x2c7a95=_0x1b8ac9;if(DISABLED_TOOLS['has'](_0x6ba729[_0x2c7a95(0x253)]))return console[_0x2c7a95(0x1e4)](_0x2c7a95(0x25e)+_0x6ba729[_0x2c7a95(0x253)]+_0x2c7a95(0x1e2)),![];if(_0x2c7a95(0x2c4)in _0x6ba729&&_0x6ba729[_0x2c7a95(0x2c4)]&&!MORPH_API_KEY)return logMcpStderr(_0x2c7a95(0x201)+_0x6ba729['name']+_0x2c7a95(0x296)),![];return!![];});return{'tools':_0x2d37fa['map'](_0x199ca1=>({'name':_0x199ca1[_0x1b8ac9(0x253)],..._0x1b8ac9(0x2ef)in _0x199ca1&&_0x199ca1[_0x1b8ac9(0x2ef)]?{'title':_0x199ca1[_0x1b8ac9(0x2ef)]}:{},'description':_0x199ca1['description'],'inputSchema':_0x199ca1[_0x1b8ac9(0x1e9)],..._0x1b8ac9(0x2b2)in _0x199ca1&&_0x199ca1[_0x1b8ac9(0x2b2)]?{'annotations':_0x199ca1[_0x1b8ac9(0x2b2)]}:{}}))};}),server[a0_0x2775e7(0x215)](CallToolRequestSchema,async _0x39b999=>{const _0x1458b0=a0_0x2775e7,{name:_0x24b97e,arguments:_0x29e3ca}=_0x39b999[_0x1458b0(0x2e3)],_0x424f80=Date['now']();logger[_0x1458b0(0x21e)](_0x1458b0(0x2af),_0x1458b0(0x217),{'tool':_0x24b97e,'args':_0x24b97e===_0x1458b0(0x277)?{'path':_0x29e3ca?.[_0x1458b0(0x2b5)],'instruction':_0x29e3ca?.['instruction']||_0x29e3ca?.[_0x1458b0(0x255)],'dryRun':_0x29e3ca?.['dryRun']}:_0x29e3ca});try{if(!MORPH_API_KEY)return{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x1d6)}],'isError':!![]};if(!MORPH_API_KEY[_0x1458b0(0x220)](_0x1458b0(0x212))&&!MORPH_API_KEY[_0x1458b0(0x220)](_0x1458b0(0x260)))return{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x216)}],'isError':!![]};if(DISABLED_TOOLS[_0x1458b0(0x299)](_0x24b97e))return{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x2d8)+_0x24b97e+'\x22\x20is\x20disabled\x20via\x20the\x20DISABLED_TOOLS\x20environment\x20variable\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.'}],'isError':![]};switch(_0x24b97e){case TOOL_NAMES[_0x1458b0(0x223)]:{let _0x56a5fb=_0x29e3ca;if(_0x56a5fb&&typeof _0x56a5fb===_0x1458b0(0x1e1)){if(!(_0x1458b0(0x2b5)in _0x56a5fb)){const _0x455d0f=_0x56a5fb[_0x1458b0(0x2e8)]??_0x56a5fb[_0x1458b0(0x244)]??_0x56a5fb[_0x1458b0(0x27a)]??_0x56a5fb[_0x1458b0(0x2f1)]??_0x56a5fb[_0x1458b0(0x281)];if(_0x455d0f)_0x56a5fb={..._0x56a5fb,'path':_0x455d0f};}_0x1458b0(0x255)in _0x56a5fb&&!(_0x1458b0(0x2d9)in _0x56a5fb)&&(_0x56a5fb={..._0x56a5fb,'instruction':_0x56a5fb[_0x1458b0(0x255)]});if(!(_0x1458b0(0x271)in _0x56a5fb)){const _0x41234a=_0x56a5fb[_0x1458b0(0x28f)]??_0x56a5fb['new_string']??_0x56a5fb[_0x1458b0(0x274)]??_0x56a5fb['edit'];if(_0x41234a)_0x56a5fb={..._0x56a5fb,'code_edit':_0x41234a};}}const _0x5ee10a=MorphEditFileArgsSchema['safeParse'](_0x56a5fb);if(!_0x5ee10a['success'])throw new Error(_0x1458b0(0x2f6)+_0x5ee10a[_0x1458b0(0x1e4)]);const _0x279def=await validatePath(_0x5ee10a['data'][_0x1458b0(0x2b5)]);let _0x201fc3=null,_0x1cdbee=!![],_0x498af4=null;try{_0x201fc3=await a0_0x29e6e9[_0x1458b0(0x254)](_0x279def,_0x1458b0(0x241)),logger[_0x1458b0(0x21e)](_0x1458b0(0x2af),_0x1458b0(0x2a1),{'path':_0x279def,'size_bytes':_0x201fc3[_0x1458b0(0x272)]});}catch(_0x16be33){const _0xe35979=_0x16be33[_0x1458b0(0x28f)];_0xe35979===_0x1458b0(0x249)?(_0x1cdbee=![],_0x201fc3='',logger[_0x1458b0(0x21e)](_0x1458b0(0x2af),_0x1458b0(0x2a1),{'path':_0x279def,'exists':![]})):(_0x498af4=_0x1458b0(0x259)+(_0xe35979||_0x1458b0(0x2d2))+_0x1458b0(0x2f4)+(_0x16be33 instanceof Error?_0x16be33[_0x1458b0(0x20a)]:String(_0x16be33)),logger[_0x1458b0(0x1e4)](_0x1458b0(0x2af),_0x1458b0(0x2fa),{'path':_0x279def,'error':_0x498af4}),logMcpStderr(_0x1458b0(0x201)+_0x498af4));}let _0x110b87;try{const _0x4489d9=MORPH_API_KEY;if(!_0x4489d9)throw new Error('MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.');const _0x5e66ee=a0_0x381603[_0x1458b0(0x2bd)](_0x279def),_0x425988=a0_0x381603[_0x1458b0(0x1ff)](_0x279def);logger['debug'](_0x1458b0(0x2af),'api_request_start',{'model':'morph-v3-fast','path':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2b5)],'instruction_len':_0x5ee10a[_0x1458b0(0x1fa)]['instruction'][_0x1458b0(0x272)],'code_edit_len':_0x5ee10a['data'][_0x1458b0(0x271)][_0x1458b0(0x272)],'original_code_len':_0x201fc3?.[_0x1458b0(0x272)]??0x0,'dry_run':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2e9)]});const _0x36674a=Date['now'](),_0x116f9e=await executeEditFile({'target_filepath':_0x425988,'code_edit':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x271)],'instruction':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2d9)]},{'morphApiKey':_0x4489d9,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x5e66ee,'autoWrite':!_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2e9)],'generateUdiff':![],'debug':![]}),_0x1e9acc=Date[_0x1458b0(0x24a)]()-_0x36674a;_0x110b87=_0x116f9e[_0x1458b0(0x25c)];if(!_0x116f9e[_0x1458b0(0x2ea)])throw new Error(_0x116f9e[_0x1458b0(0x1e4)]||_0x1458b0(0x292));const _0x218ba7=_0x116f9e[_0x1458b0(0x2a0)],_0x21d7c7=_0x1458b0(0x230)+_0x218ba7[_0x1458b0(0x22d)]+_0x1458b0(0x227)+_0x218ba7[_0x1458b0(0x2db)]+_0x1458b0(0x27f)+_0x218ba7[_0x1458b0(0x303)];logger[_0x1458b0(0x21e)](_0x1458b0(0x2af),'tool_call_complete',{'tool':_0x1458b0(0x277),'success':!![],'latency_ms':Date[_0x1458b0(0x24a)]()-_0x424f80,'edit_latency_ms':_0x1e9acc,'changes':{'added':_0x218ba7[_0x1458b0(0x22d)],'removed':_0x218ba7[_0x1458b0(0x2db)],'modified':_0x218ba7[_0x1458b0(0x303)]},'completion_id':_0x110b87});if(_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2e9)])return{'content':[{'type':'text','text':'Morph\x20Edit\x20Preview'+(_0x1cdbee?'':_0x1458b0(0x2b8))+':\x20'+_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2d9)]+_0x1458b0(0x26a)+_0x21d7c7+_0x1458b0(0x237)+_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2b5)]+'.'}]};return{'content':[{'type':'text','text':_0x1458b0(0x224)+(_0x1cdbee?_0x1458b0(0x1e7):_0x1458b0(0x297))+':\x20'+_0x5ee10a[_0x1458b0(0x1fa)]['instruction']+_0x1458b0(0x26a)+_0x21d7c7+_0x1458b0(0x237)+_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2b5)]+'.'}]};}catch(_0x2cb956){const _0xc6eff2=handleMorphAPIError(_0x2cb956);if(_0xc6eff2)return logger['error'](_0x1458b0(0x2af),_0x1458b0(0x28c),{'tool':_0x1458b0(0x277),'error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0x1458b0(0x24a)]()-_0x424f80}),_0xc6eff2;const _0x1b239f=_0x2cb956 instanceof Error?_0x2cb956['message']:String(_0x2cb956);return logger[_0x1458b0(0x1e4)](_0x1458b0(0x2af),_0x1458b0(0x28c),{'tool':'edit_file','error':_0x1b239f,'path':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2b5)],'validated_path':_0x279def,'latency_ms':Date[_0x1458b0(0x24a)]()-_0x424f80,'stack':_0x2cb956 instanceof Error?_0x2cb956[_0x1458b0(0x28a)]:undefined}),reportMorphError({'error_message':_0x1b239f,'error_type':_0x2cb956 instanceof Error?_0x2cb956['constructor'][_0x1458b0(0x253)]:_0x1458b0(0x222),'context':{'tool':'edit_file','completion_id':_0x110b87,'file_path':_0x5ee10a['data']['path'],'validated_path':_0x279def,'instruction':_0x5ee10a[_0x1458b0(0x1fa)]['instruction'],'model':MORPH_LARGE_APPLY?_0x1458b0(0x2ca):_0x1458b0(0x208),'dry_run':_0x5ee10a[_0x1458b0(0x1fa)]['dryRun'],'file_exists':_0x1cdbee,'file_read_error':_0x498af4,'file_readable':_0x201fc3!==null,'request_content':{'path':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2b5)],'code_edit':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x271)],'instruction':_0x5ee10a[_0x1458b0(0x1fa)]['instruction'],'original_code':_0x201fc3!==null?_0x201fc3[_0x1458b0(0x272)]>0xc350?_0x201fc3[_0x1458b0(0x2a6)](0x0,0xc350)+_0x1458b0(0x2d1)+_0x201fc3[_0x1458b0(0x272)]+_0x1458b0(0x21b):_0x201fc3:_0x1458b0(0x263)+(_0x498af4||_0x1458b0(0x2bf))+']','original_code_length':_0x201fc3?.[_0x1458b0(0x272)]??0x0,'model':MORPH_LARGE_APPLY?_0x1458b0(0x2ca):'morph-v3-fast','dry_run':_0x5ee10a[_0x1458b0(0x1fa)][_0x1458b0(0x2e9)]}},'stack_trace':_0x2cb956 instanceof Error?_0x2cb956[_0x1458b0(0x28a)]:undefined,'source':_0x1458b0(0x213)})[_0x1458b0(0x210)](()=>{}),{'content':[{'type':_0x1458b0(0x268),'text':'❌\x20Morph\x20Edit\x20Failed:\x20'+_0x1b239f}],'isError':!![]};}}case TOOL_NAMES[_0x1458b0(0x209)]:{const _0x58003b=WarpGrepArgsSchema[_0x1458b0(0x2c0)](_0x29e3ca);if(!_0x58003b['success'])return{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x225)+_0x58003b['error']}],'isError':!![]};const _0x51b1fe=_0x3b63a7=>{const _0x1d7069=_0x1458b0,_0x453770=[];for(const _0x2f593d of _0x3b63a7||[]){if(_0x2f593d['role']===_0x1d7069(0x2be)&&Array[_0x1d7069(0x283)](_0x2f593d[_0x1d7069(0x27b)]))for(const _0x3b40dc of _0x2f593d[_0x1d7069(0x27b)]){try{const _0x2807c3=_0x3b40dc[_0x1d7069(0x232)]?.[_0x1d7069(0x253)],_0x346cd7=JSON['parse'](_0x3b40dc[_0x1d7069(0x232)]?.[_0x1d7069(0x285)]||'{}');if(_0x2807c3===_0x1d7069(0x2c7))_0x453770[_0x1d7069(0x27c)](_0x1d7069(0x29c)+_0x346cd7[_0x1d7069(0x2d5)]+'\x27\x20'+(_0x346cd7[_0x1d7069(0x2b5)]||'.'));else{if(_0x2807c3===_0x1d7069(0x2a2))_0x453770['push']('read\x20'+_0x346cd7[_0x1d7069(0x2b5)]);else{if(_0x2807c3===_0x1d7069(0x22f))_0x453770['push'](_0x1d7069(0x2c9)+(_0x346cd7['command']||'.'));else{if(_0x2807c3==='glob')_0x453770[_0x1d7069(0x27c)](_0x1d7069(0x2ae)+_0x346cd7[_0x1d7069(0x2d5)]+'\x27\x20'+(_0x346cd7[_0x1d7069(0x2b5)]||'.'));else _0x2807c3===_0x1d7069(0x29a)&&_0x453770[_0x1d7069(0x27c)]('finish');}}}}catch{}}}return _0x453770;},_0x42383f=_0x45f831=>{const _0x191d54=_0x1458b0,_0x241bfd=[];if(!_0x45f831||!Array[_0x191d54(0x283)](_0x45f831))return _0x241bfd;const _0x2b148e=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x191d54(0x1e6),'tool':_0x191d54(0x2a2)},{'pattern':/\[PATH ERROR\]/,'error_type':'PathError','tool':_0x191d54(0x2a2)},{'pattern':/\[READ ERROR\]/,'error_type':_0x191d54(0x2d3),'tool':_0x191d54(0x2a2)},{'pattern':/\[UNREADABLE FILE\]/,'error_type':'BinaryFile','tool':'read'},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x191d54(0x24b),'tool':_0x191d54(0x22b)},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x191d54(0x2ba),'tool':_0x191d54(0x22b)},{'pattern':/\[BINARY FILE\]/,'error_type':_0x191d54(0x200),'tool':_0x191d54(0x2a2)},{'pattern':/\[SYMLINK\]/,'error_type':'SymlinkError','tool':_0x191d54(0x2a2)},{'pattern':/not a text file/,'error_type':_0x191d54(0x200),'tool':_0x191d54(0x2a2)},{'pattern':/symbolic link/,'error_type':'SymlinkError','tool':_0x191d54(0x2a2)},{'pattern':/Error reading file:/,'error_type':_0x191d54(0x2d3),'tool':_0x191d54(0x2a2)},{'pattern':/status="error"/,'error_type':_0x191d54(0x258),'tool':_0x191d54(0x2d2)}];let _0x27834d=0x0;for(const _0x187c68 of _0x45f831){_0x187c68['role']===_0x191d54(0x2be)&&Array[_0x191d54(0x283)](_0x187c68[_0x191d54(0x27b)])&&_0x27834d++;const _0x1ece03=_0x187c68[_0x191d54(0x274)];if((_0x187c68['role']===_0x191d54(0x269)||_0x187c68[_0x191d54(0x2d7)]==='user')&&_0x1ece03&&typeof _0x1ece03==='string')for(const {pattern:_0x3d6bfc,error_type:_0x111cad,tool:_0x12ad06}of _0x2b148e){const _0x48e75c=_0x1ece03['match'](new RegExp(_0x3d6bfc['source'],'g'));if(_0x48e75c)for(const _0x2d8d9f of _0x48e75c){const _0x3b299c=_0x1ece03[_0x191d54(0x240)](_0x2d8d9f),_0x48f115=_0x1ece03[_0x191d54(0x2a6)](_0x3b299c,Math[_0x191d54(0x218)](_0x3b299c+0xc8,_0x1ece03[_0x191d54(0x272)]));_0x241bfd[_0x191d54(0x27c)]({'tool':_0x12ad06,'error_type':_0x111cad,'error_message':_0x48f115[_0x191d54(0x2f7)]('\x0a')[0x0],'turn':_0x27834d});}}}return _0x241bfd;};try{const _0x35b13d=a0_0x381603[_0x1458b0(0x229)](_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)]),_0x77f46c=_0x58003b[_0x1458b0(0x1fa)]['search_type'],_0x13c50a=_0x77f46c==='node_modules'?{'allowNames':[_0x1458b0(0x2b7)]}:undefined,_0x50e525=new LocalRipgrepProvider(_0x35b13d,undefined,_0x13c50a);logger[_0x1458b0(0x21e)]('MCP',_0x1458b0(0x295),{'type':_0x1458b0(0x25a),'repo_root':_0x35b13d,'search_type':_0x77f46c||_0x1458b0(0x1d9)}),logger['debug']('MCP',_0x1458b0(0x20d),{'query':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],'repo_root':_0x35b13d,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x28ceca=Date[_0x1458b0(0x24a)](),_0x282056=await runWarpGrep({'searchTerm':_0x58003b['data'][_0x1458b0(0x2a4)],'repoRoot':_0x35b13d,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x50e525,'search_type':_0x77f46c}),_0x105d54=Date[_0x1458b0(0x24a)]()-_0x28ceca,_0x10e6d9=_0x282056[_0x1458b0(0x29a)]?.[_0x1458b0(0x25d)]?.[_0x1458b0(0x1de)]?.[_0x1458b0(0x272)]??0x0;logger['debug'](_0x1458b0(0x2af),_0x1458b0(0x247),{'termination':_0x282056[_0x1458b0(0x28d)],'turns':_0x282056[_0x1458b0(0x290)]?.[_0x1458b0(0x276)]??0x0,'files_found':_0x10e6d9,'latency_ms':_0x105d54});const _0x139faa=_0x42383f(_0x282056[_0x1458b0(0x2e4)]);_0x139faa['length']>0x0&&reportMorphError({'error_message':_0x1458b0(0x2a5)+_0x139faa[_0x1458b0(0x272)]+_0x1458b0(0x26f),'error_type':_0x1458b0(0x2bb),'level':'warn','tool':_0x1458b0(0x2c3),'context':{'repo_path':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],'query':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],'model':_0x1458b0(0x20f),'termination_reason':_0x282056['terminationReason'],'sub_tool_errors':_0x139faa,'timings':_0x282056['timings'],'tool_calls':_0x51b1fe(_0x282056['messages']),'messages':_0x282056[_0x1458b0(0x2e4)]?.[_0x1458b0(0x1f5)](_0x35a114=>({'role':_0x35a114[_0x1458b0(0x2d7)],'content':_0x35a114['content'],..._0x35a114[_0x1458b0(0x27b)]?{'tool_calls':_0x35a114[_0x1458b0(0x27b)][_0x1458b0(0x272)]}:{},..._0x35a114['tool_call_id']?{'tool_call_id':_0x35a114['tool_call_id']}:{}}))},'source':_0x1458b0(0x213)})[_0x1458b0(0x210)](()=>{});let _0x570752='';if(_0x282056[_0x1458b0(0x28d)]==='completed'&&_0x282056[_0x1458b0(0x29a)]?.[_0x1458b0(0x25d)]?.[_0x1458b0(0x1de)]){const _0x1214cc=_0x282056[_0x1458b0(0x29a)][_0x1458b0(0x25d)][_0x1458b0(0x1de)];if(_0x1214cc[_0x1458b0(0x272)]===0x0)return _0x570752=_0x282056['finish'][_0x1458b0(0x2fe)]||'No\x20relevant\x20code\x20found\x20for\x20the\x20query.',{'content':[{'type':_0x1458b0(0x268),'text':_0x570752}]};const _0x583c88=[],_0x7dc076=[_0x1458b0(0x261)];for(const _0x239ded of _0x282056[_0x1458b0(0x2e4)]){if(_0x239ded[_0x1458b0(0x2d7)]===_0x1458b0(0x2be)&&Array['isArray'](_0x239ded[_0x1458b0(0x27b)]))for(const _0xb22334 of _0x239ded[_0x1458b0(0x27b)]){try{const _0x1b7190=_0xb22334[_0x1458b0(0x232)]?.['name'],_0x5192b9=JSON['parse'](_0xb22334[_0x1458b0(0x232)]?.[_0x1458b0(0x285)]||'{}');if(_0x1b7190===_0x1458b0(0x2c7))_0x7dc076[_0x1458b0(0x27c)](_0x1458b0(0x24e)+_0x5192b9[_0x1458b0(0x2d5)]+_0x1458b0(0x226)+(_0x5192b9[_0x1458b0(0x2b5)]||'.')+'`');else{if(_0x1b7190==='read')_0x7dc076[_0x1458b0(0x27c)](_0x1458b0(0x2c5)+_0x5192b9[_0x1458b0(0x2b5)]+'`');else{if(_0x1b7190===_0x1458b0(0x22f))_0x7dc076[_0x1458b0(0x27c)](_0x1458b0(0x288)+(_0x5192b9[_0x1458b0(0x306)]||'.')+'`');else _0x1b7190===_0x1458b0(0x257)&&_0x7dc076['push'](_0x1458b0(0x1da)+_0x5192b9['pattern']+_0x1458b0(0x236)+(_0x5192b9[_0x1458b0(0x2b5)]||'.')+'`');}}}catch{}}}_0x583c88['push'](_0x7dc076['join']('\x0a'));const _0x5e2490=['',_0x1458b0(0x250)];for(const _0x4efd62 of _0x1214cc){if(_0x4efd62[_0x1458b0(0x2f8)]==='*')_0x5e2490[_0x1458b0(0x27c)]('-\x20'+_0x4efd62[_0x1458b0(0x2b5)]+':*');else{if(Array[_0x1458b0(0x283)](_0x4efd62[_0x1458b0(0x2f8)])){const _0x3a1971=_0x4efd62[_0x1458b0(0x2f8)][_0x1458b0(0x1f5)](([_0x28455b,_0x5c01ef])=>{if(_0x28455b===_0x5c01ef)return''+_0x28455b;return _0x28455b+'-'+_0x5c01ef;});_0x5e2490['push']('-\x20'+_0x4efd62[_0x1458b0(0x2b5)]+':'+_0x3a1971[_0x1458b0(0x289)](','));}else _0x5e2490[_0x1458b0(0x27c)]('-\x20'+_0x4efd62[_0x1458b0(0x2b5)]+':*');}}_0x5e2490[_0x1458b0(0x27c)](''),_0x583c88[_0x1458b0(0x27c)](_0x5e2490['join']('\x0a')),_0x583c88['push'](_0x1458b0(0x2d6));const _0x1fc552=[],_0x53025c=[];for(const _0x391fe0 of _0x1214cc){let _0xd7b26d=a0_0x381603[_0x1458b0(0x229)](_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],_0x391fe0[_0x1458b0(0x2b5)]),_0x5b5d12=null,_0x41561a=null;try{_0x5b5d12=await a0_0x29e6e9[_0x1458b0(0x254)](_0xd7b26d,{'encoding':_0x1458b0(0x241)});}catch(_0x441f1b){const _0x4c52d2=fixPathRepetition(_0xd7b26d);if(_0x4c52d2)try{_0x5b5d12=await a0_0x29e6e9[_0x1458b0(0x254)](_0x4c52d2,{'encoding':_0x1458b0(0x241)}),_0xd7b26d=_0x4c52d2;}catch{_0x41561a=_0x441f1b instanceof Error?_0x441f1b:new Error(String(_0x441f1b));}else _0x41561a=_0x441f1b instanceof Error?_0x441f1b:new Error(String(_0x441f1b));}if(_0x5b5d12!==null){const _0xa3e60=_0x5b5d12[_0x1458b0(0x2f7)](/\r?\n/),_0xf4a509=[];if(_0x391fe0['lines']==='*'||!Array[_0x1458b0(0x283)](_0x391fe0[_0x1458b0(0x2f8)]))for(let _0x4b431c=0x1;_0x4b431c<=_0xa3e60[_0x1458b0(0x272)];_0x4b431c++){const _0x3ad20a=_0xa3e60[_0x4b431c-0x1];_0xf4a509[_0x1458b0(0x27c)](_0x4b431c+'|\x20'+_0x3ad20a);}else for(const [_0x385e53,_0x87f87]of _0x391fe0['lines']){_0xf4a509[_0x1458b0(0x272)]>0x0&&_0xf4a509[_0x1458b0(0x27c)]('');for(let _0xbca9de=_0x385e53;_0xbca9de<=_0x87f87&&_0xbca9de<=_0xa3e60[_0x1458b0(0x272)];_0xbca9de++){const _0x54308a=_0xa3e60[_0xbca9de-0x1];_0xf4a509[_0x1458b0(0x27c)](_0xbca9de+'|\x20'+_0x54308a);}}_0x53025c[_0x1458b0(0x27c)]({'path':_0x391fe0[_0x1458b0(0x2b5)],'content':_0xf4a509[_0x1458b0(0x289)]('\x0a')});}else _0x1fc552[_0x1458b0(0x27c)](_0x1458b0(0x2e7)+_0x391fe0['path']+_0x1458b0(0x2c2)+(_0x41561a?.[_0x1458b0(0x20a)]||'Unknown\x20error')+_0x1458b0(0x2ff));}try{const _0x513e59=await compactFileContexts(_0x53025c,_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],MORPH_API_KEY,MORPH_API_URL);for(const _0x413fb4 of _0x513e59){_0x1fc552[_0x1458b0(0x27c)]('<file\x20path=\x22'+_0x413fb4['path']+_0x1458b0(0x2ee)+_0x413fb4[_0x1458b0(0x274)]+_0x1458b0(0x2ff));}}catch(_0x3fb656){logger[_0x1458b0(0x29b)](_0x1458b0(0x2af),'compaction_failed',{'error':_0x3fb656 instanceof Error?_0x3fb656[_0x1458b0(0x20a)]:String(_0x3fb656),'files_count':_0x53025c[_0x1458b0(0x272)]});for(const _0xd74b25 of _0x53025c){_0x1fc552[_0x1458b0(0x27c)](_0x1458b0(0x2e7)+_0xd74b25[_0x1458b0(0x2b5)]+_0x1458b0(0x2ee)+_0xd74b25[_0x1458b0(0x274)]+_0x1458b0(0x2ff));}}_0x583c88['push'](_0x1fc552['join']('\x0a\x0a')),_0x570752=_0x583c88[_0x1458b0(0x289)]('\x0a');const _0x383d02=_0x282056['errors']?.[_0x1458b0(0x2a7)](_0x1b1260=>_0x1b1260[_0x1458b0(0x20a)]?.[_0x1458b0(0x220)](_0x1458b0(0x2f5)))||[];if(_0x383d02[_0x1458b0(0x272)]>0x0){const _0x27d3c7=_0x383d02[_0x1458b0(0x1f5)](_0x267e60=>_0x267e60[_0x1458b0(0x20a)])['join'](';\x20');reportMorphError({'error_message':_0x27d3c7,'error_type':_0x1458b0(0x21f),'context':{'tool':_0x1458b0(0x2c3),'repo_path':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],'query':_0x58003b['data'][_0x1458b0(0x2a4)],'model':_0x1458b0(0x20f),'termination_reason':_0x1458b0(0x1ee),'error_count':_0x383d02[_0x1458b0(0x272)],'is_timeout':![],'timings':_0x282056[_0x1458b0(0x290)],'files_attempted':_0x1214cc[_0x1458b0(0x1f5)](_0x66c5ce=>({'path':_0x66c5ce[_0x1458b0(0x2b5)],'lines':_0x66c5ce[_0x1458b0(0x2f8)]})),'tool_calls':_0x51b1fe(_0x282056[_0x1458b0(0x2e4)]),'messages':_0x282056[_0x1458b0(0x2e4)]?.[_0x1458b0(0x1f5)](_0x31bf73=>({'role':_0x31bf73[_0x1458b0(0x2d7)],'content':_0x31bf73[_0x1458b0(0x274)],..._0x31bf73[_0x1458b0(0x27b)]?{'tool_calls':_0x31bf73['tool_calls'][_0x1458b0(0x272)]}:{},..._0x31bf73[_0x1458b0(0x25b)]?{'tool_call_id':_0x31bf73['tool_call_id']}:{}})),'request_content':{'query':_0x58003b[_0x1458b0(0x1fa)]['search_string'],'repo_path':_0x58003b['data'][_0x1458b0(0x1e8)],'repoRoot':a0_0x381603['resolve'](_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)]),'model':_0x1458b0(0x20f)}},'source':_0x1458b0(0x213)})[_0x1458b0(0x210)](()=>{});}}else{if(_0x282056[_0x1458b0(0x28d)]==='terminated'&&_0x282056[_0x1458b0(0x2dc)][_0x1458b0(0x272)]>0x0){const _0x11eb6e=_0x282056['errors'][_0x1458b0(0x1f5)](_0x1882fc=>_0x1882fc[_0x1458b0(0x20a)])['join'](';\x20');_0x570752=_0x1458b0(0x1d7)+_0x11eb6e;const _0x4c42d0=_0x11eb6e[_0x1458b0(0x21c)]()['includes'](_0x1458b0(0x1ef))||_0x11eb6e[_0x1458b0(0x21c)]()[_0x1458b0(0x2bc)](_0x1458b0(0x252))||_0x11eb6e[_0x1458b0(0x21c)]()[_0x1458b0(0x2bc)](_0x1458b0(0x242)),_0x5c3baa=_0x282056[_0x1458b0(0x29a)]?.['metadata']?.[_0x1458b0(0x1de)],_0xe1fa0f=_0x282056[_0x1458b0(0x2dc)][0x0];reportMorphError({'error_message':_0x11eb6e,'error_type':_0x4c42d0?_0x1458b0(0x2f9):_0xe1fa0f?.[_0x1458b0(0x2cb)]?.['name']||_0x1458b0(0x2a9),'context':{'tool':_0x1458b0(0x2c3),'repo_path':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],'query':_0x58003b[_0x1458b0(0x1fa)]['search_string'],'model':_0x1458b0(0x20f),'termination_reason':_0x282056[_0x1458b0(0x28d)],'error_count':_0x282056[_0x1458b0(0x2dc)][_0x1458b0(0x272)],'is_timeout':_0x4c42d0,'timings':_0x282056['timings'],'files_attempted':_0x5c3baa?.[_0x1458b0(0x1f5)](_0x1b2101=>({'path':_0x1b2101[_0x1458b0(0x2b5)],'lines':_0x1b2101['lines']})),'tool_calls':_0x51b1fe(_0x282056[_0x1458b0(0x2e4)]),'messages':_0x282056[_0x1458b0(0x2e4)]?.['map'](_0x1a7f6c=>({'role':_0x1a7f6c[_0x1458b0(0x2d7)],'content':_0x1a7f6c['content'],..._0x1a7f6c['tool_calls']?{'tool_calls':_0x1a7f6c[_0x1458b0(0x27b)]['length']}:{},..._0x1a7f6c[_0x1458b0(0x25b)]?{'tool_call_id':_0x1a7f6c['tool_call_id']}:{}})),'request_content':{'query':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],'repo_path':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],'repoRoot':a0_0x381603[_0x1458b0(0x229)](_0x58003b['data'][_0x1458b0(0x1e8)]),'model':'morph-warp-grep-v2.1'}},'stack_trace':_0xe1fa0f?.['stack']||undefined,'source':_0x1458b0(0x213)})[_0x1458b0(0x210)](()=>{});}else _0x570752='Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.';}return{'content':[{'type':'text','text':_0x570752}]};}catch(_0x5a9bd1){const _0xf3b445=handleMorphAPIError(_0x5a9bd1);if(_0xf3b445)return logger[_0x1458b0(0x1e4)](_0x1458b0(0x2af),'tool_call_error',{'tool':_0x1458b0(0x2c3),'error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0x1458b0(0x24a)]()-_0x424f80}),_0xf3b445;const _0x257063=_0x5a9bd1 instanceof Error?_0x5a9bd1['message']:String(_0x5a9bd1);logger[_0x1458b0(0x1e4)](_0x1458b0(0x2af),_0x1458b0(0x28c),{'tool':_0x1458b0(0x2c3),'error':_0x257063,'repo_path':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)],'query':_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],'latency_ms':Date['now']()-_0x424f80});const _0x123321=_0x257063['toLowerCase']()['includes'](_0x1458b0(0x1ef))||_0x257063[_0x1458b0(0x21c)]()[_0x1458b0(0x2bc)](_0x1458b0(0x252))||_0x257063[_0x1458b0(0x21c)]()['includes'](_0x1458b0(0x242))||_0x5a9bd1 instanceof Error&&_0x5a9bd1[_0x1458b0(0x253)]===_0x1458b0(0x2f9);return reportMorphError({'error_message':_0x257063,'error_type':_0x123321?_0x1458b0(0x2f9):_0x5a9bd1 instanceof Error?_0x5a9bd1[_0x1458b0(0x2cb)][_0x1458b0(0x253)]:_0x1458b0(0x222),'context':{'tool':_0x1458b0(0x2c3),'repo_path':_0x58003b['data'][_0x1458b0(0x1e8)],'query':_0x58003b[_0x1458b0(0x1fa)]['search_string'],'model':_0x1458b0(0x20f),'is_timeout':_0x123321,'exception_phase':_0x1458b0(0x1f0),'request_content':{'query':_0x58003b[_0x1458b0(0x1fa)]['search_string'],'repo_path':_0x58003b[_0x1458b0(0x1fa)]['repo_path'],'repoRoot':a0_0x381603[_0x1458b0(0x229)](_0x58003b[_0x1458b0(0x1fa)][_0x1458b0(0x1e8)]),'model':_0x1458b0(0x20f)}},'stack_trace':_0x5a9bd1 instanceof Error?_0x5a9bd1[_0x1458b0(0x28a)]:undefined,'source':_0x1458b0(0x213)})['catch'](()=>{}),{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x2b1)+_0x257063}],'isError':![]};}}case TOOL_NAMES[_0x1458b0(0x231)]:{const _0xce2db4=WarpGrepGitHubArgsSchema[_0x1458b0(0x2c0)](_0x29e3ca);if(!_0xce2db4['success'])return{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x225)+_0xce2db4[_0x1458b0(0x1e4)]}],'isError':!![]};const _0x443dbe=_0xce2db4[_0x1458b0(0x1fa)][_0x1458b0(0x28b)]||_0xce2db4[_0x1458b0(0x1fa)]['owner_repo'];if(!_0x443dbe)return{'content':[{'type':'text','text':_0x1458b0(0x1f2)}],'isError':!![]};const _0x9f60e7=MORPH_API_KEY;if(!_0x9f60e7)throw new Error(_0x1458b0(0x207));const _0x31943c=Date[_0x1458b0(0x24a)]();logger[_0x1458b0(0x21e)](_0x1458b0(0x2af),_0x1458b0(0x2c1),{'identifier':_0x443dbe,'query':_0xce2db4[_0x1458b0(0x1fa)][_0x1458b0(0x2a4)],'branch':_0xce2db4[_0x1458b0(0x1fa)][_0x1458b0(0x1df)]});try{const _0x5967a6=new WarpGrepClient({'morphApiKey':_0x9f60e7,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x2e3882=await _0x5967a6[_0x1458b0(0x22c)]({'searchTerm':_0xce2db4['data'][_0x1458b0(0x2a4)],'github':_0x443dbe,'branch':_0xce2db4[_0x1458b0(0x1fa)]['branch']}),_0x5cc096=Date['now']()-_0x31943c;logMcpStderr('[github_codebase_search]\x20Done\x20in\x20'+_0x5cc096+_0x1458b0(0x1f9)+_0x2e3882[_0x1458b0(0x2ea)]);const _0x5190c8=formatResult(_0x2e3882);return{'content':[{'type':'text','text':_0x5190c8}]};}catch(_0x2ca430){const _0x149d73=handleMorphAPIError(_0x2ca430);if(_0x149d73)return _0x149d73;const _0x44a55d=Date[_0x1458b0(0x24a)]()-_0x31943c,_0x2cd8af=_0x2ca430 instanceof Error?_0x2ca430['message']:String(_0x2ca430);return logMcpStderr(_0x1458b0(0x1f8)+_0x44a55d+_0x1458b0(0x29d),_0x2cd8af),reportMorphError({'error_message':_0x2cd8af,'error_type':_0x2ca430 instanceof Error?_0x2ca430[_0x1458b0(0x2cb)][_0x1458b0(0x253)]:_0x1458b0(0x222),'context':{'tool':_0x1458b0(0x29f),'github_url':_0x443dbe,'search_string':_0xce2db4['data'][_0x1458b0(0x2a4)],'branch':_0xce2db4['data'][_0x1458b0(0x1df)]},'stack_trace':_0x2ca430 instanceof Error?_0x2ca430[_0x1458b0(0x28a)]:undefined,'source':_0x1458b0(0x213),'tool':_0x1458b0(0x29f),'latency_ms':_0x44a55d})[_0x1458b0(0x210)](()=>{}),{'content':[{'type':_0x1458b0(0x268),'text':_0x1458b0(0x2e5)+_0x2cd8af}],'isError':![]};}}default:throw new Error(_0x1458b0(0x280)+_0x24b97e);}}catch(_0x560cc5){const _0x1e5682=_0x560cc5 instanceof Error?_0x560cc5['message']:String(_0x560cc5);return reportMorphError({'error_message':_0x1e5682,'error_type':_0x560cc5 instanceof Error?_0x560cc5['constructor'][_0x1458b0(0x253)]:'UnknownError','context':{'tool':_0x24b97e,'arguments':_0x29e3ca?JSON[_0x1458b0(0x278)](_0x29e3ca)[_0x1458b0(0x2a6)](0x0,0x1f4):undefined,'mcp_server_version':_0x1458b0(0x2f0)},'stack_trace':_0x560cc5 instanceof Error?_0x560cc5['stack']:undefined,'source':_0x1458b0(0x213)})[_0x1458b0(0x210)](()=>{}),{'content':[{'type':'text','text':_0x1458b0(0x1d7)+_0x1e5682}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0xd4d1f1){const _0x1dcda1=a0_0x2775e7,_0x224516=await getValidRootDirectories(_0xd4d1f1);if(_0x224516['length']>0x0)allowedDirectories=[..._0x224516],logMcpStderr(_0x1dcda1(0x238)+_0x224516[_0x1dcda1(0x272)]+'\x20valid\x20directories');else{logMcpStderr('No\x20valid\x20root\x20directories\x20provided\x20by\x20client');if(ENABLE_WORKSPACE_MODE)try{const _0x52fd60=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x52fd60&&(allowedDirectories=[_0x52fd60],logMcpStderr(_0x1dcda1(0x1f4)+_0x52fd60));}catch(_0x57f917){logMcpStderr('Warning:\x20Workspace\x20fallback\x20failed:\x20'+_0x57f917);}}}server[a0_0x2775e7(0x287)](RootsListChangedNotificationSchema,async()=>{const _0x25d819=a0_0x2775e7;try{const _0x1aaafc=await server[_0x25d819(0x2ad)]();_0x1aaafc&&_0x25d819(0x2f2)in _0x1aaafc&&await updateAllowedDirectoriesFromRoots(_0x1aaafc[_0x25d819(0x2f2)]);}catch(_0x1b1a6d){logMcpStderr(_0x25d819(0x2fc),_0x1b1a6d instanceof Error?_0x1b1a6d[_0x25d819(0x20a)]:String(_0x1b1a6d));}}),server[a0_0x2775e7(0x300)]=async()=>{const _0xac5f58=a0_0x2775e7,_0x4f0563=server[_0xac5f58(0x2b9)]();if(_0x4f0563?.[_0xac5f58(0x2f2)])try{const _0x24d476=await server['listRoots']();_0x24d476&&_0xac5f58(0x2f2)in _0x24d476?await updateAllowedDirectoriesFromRoots(_0x24d476[_0xac5f58(0x2f2)]):logMcpStderr(_0xac5f58(0x23a));}catch(_0xc8372b){logMcpStderr('Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:',_0xc8372b instanceof Error?_0xc8372b['message']:String(_0xc8372b));}else{if(allowedDirectories[_0xac5f58(0x272)]>0x0)logMcpStderr(_0xac5f58(0x2b4),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr(_0xac5f58(0x1ed));else throw new Error(_0xac5f58(0x26b));}}};async function runServer(){const _0x1068dd=a0_0x2775e7,_0x31f57d=new StdioServerTransport();await server[_0x1068dd(0x2d0)](_0x31f57d),logMcpStderr(_0x1068dd(0x1ec)),allowedDirectories['length']===0x0&&logMcpStderr(_0x1068dd(0x2ab));}runServer()[a0_0x2775e7(0x210)](_0x247c54=>{const _0x24c7c7=a0_0x2775e7;logMcpStderr(_0x24c7c7(0x270),_0x247c54),process[_0x24c7c7(0x1fc)](0x1);});
2
+ const a0_0x80080d=a0_0x3e92;(function(_0x2b7f59,_0x3efe96){const _0x50aa55=a0_0x3e92,_0x3d0467=_0x2b7f59();while(!![]){try{const _0x1a65cb=-parseInt(_0x50aa55(0x12f))/0x1+-parseInt(_0x50aa55(0x149))/0x2*(parseInt(_0x50aa55(0x1b5))/0x3)+-parseInt(_0x50aa55(0x12e))/0x4*(parseInt(_0x50aa55(0x212))/0x5)+-parseInt(_0x50aa55(0x1be))/0x6+-parseInt(_0x50aa55(0x169))/0x7*(parseInt(_0x50aa55(0x18d))/0x8)+-parseInt(_0x50aa55(0x122))/0x9*(parseInt(_0x50aa55(0x1e9))/0xa)+-parseInt(_0x50aa55(0x1ec))/0xb*(-parseInt(_0x50aa55(0x15c))/0xc);if(_0x1a65cb===_0x3efe96)break;else _0x3d0467['push'](_0x3d0467['shift']());}catch(_0x1ff015){_0x3d0467['push'](_0x3d0467['shift']());}}}(a0_0x141f,0xce907));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_0x4e6f41 from'fs/promises';import a0_0x39ae41 from'path';import a0_0x50a395 from'os';import{createRequire}from'module';import{z}from'zod';function a0_0x3e92(_0x595e2a,_0x581468){_0x595e2a=_0x595e2a-0xfb;const _0x141f5e=a0_0x141f();let _0x3e921d=_0x141f5e[_0x595e2a];return _0x3e921d;}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_0x337660 from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES,resolveToolFilter}from'./tool-definitions.js';function fixPathRepetition(_0x355048){const _0x4b20a4=a0_0x3e92,_0x4c341c=_0x355048['split'](a0_0x39ae41[_0x4b20a4(0x12b)])[_0x4b20a4(0x142)](Boolean);if(_0x4c341c['length']<0x2)return null;for(let _0x37d099=Math[_0x4b20a4(0x21c)](_0x4c341c[_0x4b20a4(0x17c)]/0x2);_0x37d099>=0x1;_0x37d099--){for(let _0x5146d9=0x0;_0x5146d9<=_0x4c341c[_0x4b20a4(0x17c)]-0x2*_0x37d099;_0x5146d9++){const _0x316379=_0x4c341c[_0x4b20a4(0x146)](_0x5146d9,_0x5146d9+_0x37d099),_0x4fecc0=_0x4c341c[_0x4b20a4(0x146)](_0x5146d9+_0x37d099,_0x5146d9+0x2*_0x37d099);if(_0x316379[_0x4b20a4(0x173)]((_0x1d03a9,_0x6d3475)=>_0x1d03a9===_0x4fecc0[_0x6d3475])){const _0x32ea46=[..._0x4c341c[_0x4b20a4(0x146)](0x0,_0x5146d9),..._0x4c341c[_0x4b20a4(0x146)](_0x5146d9+_0x37d099)];return a0_0x39ae41['sep']+_0x32ea46[_0x4b20a4(0x210)](a0_0x39ae41[_0x4b20a4(0x12b)]);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x1aed4a=a0_0x3e92;try{const _0x39f49f=require('../package.json');return _0x39f49f[_0x1aed4a(0x118)]??_0x1aed4a(0x177);}catch(_0x18242c){return logMcpStderr(_0x1aed4a(0x176),_0x18242c),_0x1aed4a(0x177);}}function printHelp(){const _0x2a5e61=a0_0x3e92;console[_0x2a5e61(0x203)](_0x2a5e61(0x1ee)+getPackageVersion()),console[_0x2a5e61(0x203)](_0x2a5e61(0x20a)),console[_0x2a5e61(0x203)](_0x2a5e61(0x1cc)),console['log']('\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)'),console[_0x2a5e61(0x203)]('\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit'),console[_0x2a5e61(0x203)](_0x2a5e61(0x21f)),console[_0x2a5e61(0x203)](_0x2a5e61(0x1ae)),console[_0x2a5e61(0x203)](_0x2a5e61(0x14d)),console['log'](_0x2a5e61(0x1f8));}const cliArgs=process[a0_0x80080d(0x107)][a0_0x80080d(0x146)](0x2),VERSION_FLAGS=new Set([a0_0x80080d(0x1f9),'-v','-V']),HELP_FLAGS=new Set(['--help','-h']);function a0_0x141f(){const _0x1e505a=['tool_call_error','2967414YjogaW','FileReadError','min','match','https://morphllm.com/api/error-report','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','SubToolError','role','isArray','pyproject.toml','default','Preview\x20changes\x20without\x20applying\x20them.','Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20','.\x20Changes:\x20','\x0aOptions:',',\x20modified\x20','`\x20in\x20`','enum','No\x20relevant\x20code\x20found\x20for\x20the\x20query.','MORPH_API_URL','Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.','Workspace\x20mode\x20enabled:\x20Using\x20','WORKSPACE_ROOT','optional','string','MCP','normalize','Unknown\x20error','Tool\x20\x22','Fallback:\x20Using\x20workspace\x20root\x20','listRoots','parse','catch','tsconfig.json','setNotificationHandler','RipgrepNotAvailable','path','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','path_validation_resolved','new_string','terminationReason','content','Cargo.toml','5486870DIipkK','lines','read\x20','2629XbTIDb','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','@morphllm/morphmcp\x20','tool','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','unknown\x20error','tool_calls','[could\x20not\x20read\x20file:\x20','startsWith','file_path','readFile','Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','--version','[github_codebase_search]\x20Failed\x20in\x20','Example\x20format:\x0a','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20','success','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','Parameters:\x0a','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','status','stat','log','UnknownError','PWD','read','-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a','completionId','No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.','\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','File\x20read\x20error:','params','context','Error:\x20','join','annotations','1340eKyDhj','filePath','ReadError','dirname','.\x20Path:\x20','GitHub\x20search\x20failed:\x20','glob\x20\x27','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','\x0a</file>','roots','floor','<file\x20path=\x22','metadata','\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit','access','stack','substring','boolean','utf-8','instruction','-\x20Glob\x20search\x20`','morph-v3-fast','\x20as\x20allowed\x20directory','messages','array','all','TimeoutError','package.json','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','argv','Morph\x20Edit\x20Preview','-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a','data','toLowerCase','error','instructions','code_edit','describe','ToolException','WarpGrep\x20sub-tool\x20errors:\x20','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','resolve','includes','--api-key=','Relevant\x20context\x20found:','\x22.\x20Known\x20tools:\x20','version','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','node_modules','compaction_failed','name','safeParse','realpath','Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','No\x20valid\x20root\x20directories\x20provided\x20by\x20client','9XqgiBI','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','message','source','finish','EDIT_FILE','Bearer\x20','basename','linesModified','sep','command','assistant','6100hToWfL','1546513DPvkdX','response','Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:','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.','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','.git','post','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode','env','API\x20error\x20(auth/rate-limit)','ENABLE_WORKSPACE_MODE','api-key','mcp-filesystem','\x20(new\x20file)','Max\x20results\x20to\x20return','etimedout','application/json','changes','file','filter','files','timed\x20out','title','slice','0.2.0','now','4aZDGAb','warp_grep_complete','\x22>\x0a','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','\x20\x20morph-mcp','split','Tool\x20','search_type','indexOf','false','constructor','errors','warp_grep_start','edit_file','//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a','function','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','push','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20','308868YQcYYY','debug','file_read_complete','tool_call_id','connect','terminated','morph-v3-large','linesRemoved','\x20-\x20','isDirectory','search_string','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','[github_codebase_search]\x20Done\x20in\x20','75481fhAfcA','runWarpGrep_call','Warning:\x20','.cursor','morph-mcp','object','\x0a...\x20(truncated,\x20total:\x20','disabled','codebase_search','path_validation_failed','every','-\x20Grepped\x20\x27','has','Warning:\x20Unable\x20to\x20determine\x20package\x20version:','unknown','Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:','BinaryFile','glob',',\x20removed\x20','length','MORPH_API_KEY','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','file_read_failed','morph-warp-grep-v2.1','Parent\x20directory\x20does\x20not\x20exist:\x20','-\x20Listed\x20directory\x20`','github_codebase_search','description','number','SymlinkError','-\x20Read\x20file\x20`','list_directory','linesAdded','arguments','Repository\x20identifier','1048WvXjQT','text','Disabled\x20tools:\x20','timings','branch','sk-','\x20valid\x20directories','FileNotFound','\x22>\x0aError\x20reading\x20file:\x20','toISOString','--api-key','tool_call_complete','exit','Branch\x20to\x20search\x20(uses\x20latest\x20commit)','Invalid\x20arguments:\x20','repo_path','Morph\x20FastApply\x20failed\x20without\x20error\x20message','**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','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','oninitialized','ENOENT','turns','❌\x20Morph\x20Edit\x20Failed:\x20','\x20disabled\x20via\x20ENABLED_TOOLS/DISABLED_TOOLS','Error\x20running\x20fast\x20context\x20search:\x20','grep','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.','pattern','map','\x20error(s)','GITHUB_CODEBASE_SEARCH','Failed\x20to\x20read\x20file:\x20','\x0aExamples:','Specific\x20commit\x20hash\x20to\x20search','grep_search','dryRun','target_file','code','some','1341738xLsxvf','completed','Unknown\x20tool:\x20','CODEBASE_SEARCH','MORPH_WARP_GREP_TIMEOUT','Failed\x20to\x20request\x20roots\x20from\x20client:','completed_with_file_errors','RipgrepError'];a0_0x141f=function(){return _0x1e505a;};return a0_0x141f();}cliArgs['some'](_0x584e1c=>VERSION_FLAGS[a0_0x80080d(0x175)](_0x584e1c))&&(console[a0_0x80080d(0x203)](a0_0x80080d(0x1ee)+getPackageVersion()),process[a0_0x80080d(0x199)](0x0));cliArgs[a0_0x80080d(0x1b4)](_0x156057=>HELP_FLAGS['has'](_0x156057))&&(printHelp(),process['exit'](0x0));function getCliArg(_0x18d684){const _0x226c9c=a0_0x80080d;for(let _0x5db3ab=0x0;_0x5db3ab<cliArgs[_0x226c9c(0x17c)];_0x5db3ab++){const _0x356c8c=cliArgs[_0x5db3ab];if(_0x356c8c[_0x226c9c(0x1f4)]('--'+_0x18d684+'='))return _0x356c8c[_0x226c9c(0x146)](('--'+_0x18d684+'=')['length']);if(_0x356c8c==='--'+_0x18d684&&_0x5db3ab+0x1<cliArgs[_0x226c9c(0x17c)])return cliArgs[_0x5db3ab+0x1];}return undefined;}const args=[];for(let i=0x0;i<cliArgs['length'];i++){const arg=cliArgs[i];if(VERSION_FLAGS['has'](arg)||HELP_FLAGS[a0_0x80080d(0x175)](arg))continue;if(arg[a0_0x80080d(0x1f4)](a0_0x80080d(0x115)))continue;if(arg===a0_0x80080d(0x197)){i++;continue;}args[a0_0x80080d(0x15a)](arg);}const WORKSPACE_ROOT=process[a0_0x80080d(0x137)][a0_0x80080d(0x1d4)]||process['env'][a0_0x80080d(0x205)]||process['cwd'](),ENABLE_WORKSPACE_MODE=process[a0_0x80080d(0x137)][a0_0x80080d(0x139)]!=='false',MORPH_API_KEY=getCliArg(a0_0x80080d(0x13a))??process[a0_0x80080d(0x137)][a0_0x80080d(0x17d)],MORPH_API_URL=process[a0_0x80080d(0x137)][a0_0x80080d(0x1d1)],MORPH_LARGE_APPLY=process['env']['MORPH_LARGE_APPLY']!==a0_0x80080d(0x152),MORPH_WARP_GREP_TIMEOUT=process[a0_0x80080d(0x137)][a0_0x80080d(0x1b9)]?parseInt(process[a0_0x80080d(0x137)][a0_0x80080d(0x1b9)],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),TOOL_FILTER=resolveToolFilter(process['env']),DISABLED_TOOLS=TOOL_FILTER[a0_0x80080d(0x170)];for(const tool of TOOL_FILTER[a0_0x80080d(0x177)]){console['error']('Warning:\x20ENABLED_TOOLS/DISABLED_TOOLS\x20names\x20unknown\x20tool\x20\x22'+tool+a0_0x80080d(0x117)+[...KNOWN_TOOL_NAMES]['join'](',\x20'));}DISABLED_TOOLS['size']>0x0&&console[a0_0x80080d(0x10c)](a0_0x80080d(0x18f)+[...DISABLED_TOOLS][a0_0x80080d(0x210)](',\x20'));MORPH_API_KEY&&!MORPH_API_KEY[a0_0x80080d(0x1f4)](a0_0x80080d(0x192))&&!MORPH_API_KEY[a0_0x80080d(0x1f4)]('morph-')&&logMcpStderr('Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27');async function reportMorphError(_0x4d4945){const _0x2fe166=a0_0x80080d;try{await a0_0x337660[_0x2fe166(0x135)](_0x2fe166(0x1c2),{..._0x4d4945,'timestamp':new Date()[_0x2fe166(0x196)](),'source':_0x4d4945['source']||_0x2fe166(0x13b),'os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x4d4945[_0x2fe166(0x20e)]}},{'timeout':0x1388,'headers':{'Content-Type':_0x2fe166(0x13f),'Authorization':_0x2fe166(0x128)+MORPH_API_KEY}});}catch{}}function extractStatusCode(_0x642b78,_0x488754){const _0x50abeb=a0_0x80080d;if(_0x642b78&&typeof _0x642b78==='object'&&_0x50abeb(0x201)in _0x642b78)return _0x642b78[_0x50abeb(0x201)];if(_0x642b78&&typeof _0x642b78==='object'&&_0x50abeb(0x130)in _0x642b78)return _0x642b78['response']?.[_0x50abeb(0x201)];const _0x39e92c=_0x488754[_0x50abeb(0x1c1)](/\b(401|429)\b/);return _0x39e92c?parseInt(_0x39e92c[0x1],0xa):null;}function handleMorphAPIError(_0x580bac){const _0x2334dc=a0_0x80080d,_0x2b50fa=_0x580bac instanceof Error?_0x580bac[_0x2334dc(0x124)]:String(_0x580bac),_0x2c5bb0=extractStatusCode(_0x580bac,_0x2b50fa);switch(_0x2c5bb0){case 0x191:return{'content':[{'type':_0x2334dc(0x18e),'text':_0x2334dc(0x132)}],'isError':!![]};case 0x1ad:return{'content':[{'type':_0x2334dc(0x18e),'text':_0x2334dc(0x11f)}],'isError':!![]};default:return null;}}args[a0_0x80080d(0x17c)]===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr(a0_0x80080d(0x106)),logMcpStderr(a0_0x80080d(0x131)),logMcpStderr(a0_0x80080d(0x167)),logMcpStderr(a0_0x80080d(0x120)),logMcpStderr('\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)'),logMcpStderr(a0_0x80080d(0x112)));function normalizePath(_0x40fa62){const _0x4c59ae=a0_0x80080d;return a0_0x39ae41[_0x4c59ae(0x1d8)](_0x40fa62);}function expandHome(_0x53b107){const _0x12c91b=a0_0x80080d;if(_0x53b107[_0x12c91b(0x1f4)]('~/')||_0x53b107==='~')return a0_0x39ae41[_0x12c91b(0x210)](a0_0x50a395['homedir'](),_0x53b107[_0x12c91b(0x146)](0x1));return _0x53b107;}let allowedDirectories=await Promise[a0_0x80080d(0x103)](args[a0_0x80080d(0x1aa)](async _0x166c67=>{const _0x5be14b=a0_0x80080d,_0x12ff96=expandHome(_0x166c67),_0x149a2f=a0_0x39ae41[_0x5be14b(0x113)](_0x12ff96);try{const _0x20fa26=await a0_0x4e6f41['realpath'](_0x149a2f);return normalizePath(_0x20fa26);}catch(_0x621780){return normalizePath(_0x149a2f);}}));if(ENABLE_WORKSPACE_MODE&&args[a0_0x80080d(0x17c)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x80080d(0x15a)](workspaceDir),logMcpStderr(a0_0x80080d(0x1d3)+workspaceDir+a0_0x80080d(0x100)));}catch(a0_0x42912e){logMcpStderr(a0_0x80080d(0x1ca)+a0_0x42912e);}async function detectWorkspaceRoot(_0x3eea35){const _0x1c0940=a0_0x80080d;let _0x2a7272=a0_0x39ae41[_0x1c0940(0x113)](_0x3eea35);const _0x29ae0d=[_0x1c0940(0x134),'.vscode',_0x1c0940(0x105),_0x1c0940(0x1e8),_0x1c0940(0x1c7),'go.mod',_0x1c0940(0x16c),_0x1c0940(0x1df),'composer.json'];while(_0x2a7272!==a0_0x39ae41[_0x1c0940(0x215)](_0x2a7272)){for(const _0x49c01c of _0x29ae0d){const _0x365569=a0_0x39ae41[_0x1c0940(0x210)](_0x2a7272,_0x49c01c);try{return await a0_0x4e6f41[_0x1c0940(0x220)](_0x365569),normalizePath(_0x2a7272);}catch{}}_0x2a7272=a0_0x39ae41[_0x1c0940(0x215)](_0x2a7272);}return normalizePath(_0x3eea35);}await Promise[a0_0x80080d(0x103)](args[a0_0x80080d(0x1aa)](async _0x5c7b10=>{const _0x4497b8=a0_0x80080d;try{const _0x2c174a=await a0_0x4e6f41[_0x4497b8(0x202)](expandHome(_0x5c7b10));!_0x2c174a[_0x4497b8(0x165)]()&&(logMcpStderr(_0x4497b8(0x20f)+_0x5c7b10+'\x20is\x20not\x20a\x20directory'),process['exit'](0x1));}catch(_0x1f7eda){logMcpStderr('Error\x20accessing\x20directory\x20'+_0x5c7b10+':',_0x1f7eda),process['exit'](0x1);}}));async function validatePath(_0x8c306d){const _0x50e75a=a0_0x80080d,_0x26224e=expandHome(_0x8c306d),_0x13a580=a0_0x39ae41[_0x50e75a(0x113)](_0x26224e);logger[_0x50e75a(0x15d)]('MCP','path_validation_start',{'raw_path':_0x8c306d,'absolute':_0x13a580});try{const _0x8bf115=await a0_0x4e6f41[_0x50e75a(0x11e)](_0x13a580);return logger[_0x50e75a(0x15d)]('MCP','path_validation_resolved',{'resolved':_0x8bf115,'symlink':_0x8bf115!==_0x13a580}),_0x8bf115;}catch(_0x4ded69){if(_0x4ded69[_0x50e75a(0x1b3)]===_0x50e75a(0x1a2)){const _0x2a88a6=a0_0x39ae41[_0x50e75a(0x215)](_0x13a580);try{const _0x2f401f=await a0_0x4e6f41[_0x50e75a(0x11e)](_0x2a88a6),_0x5351cf=a0_0x39ae41['join'](_0x2f401f,a0_0x39ae41[_0x50e75a(0x129)](_0x13a580));return logger[_0x50e75a(0x15d)](_0x50e75a(0x1d7),_0x50e75a(0x1e4),{'resolved':_0x5351cf,'new_file':!![]}),_0x5351cf;}catch{logger[_0x50e75a(0x10c)](_0x50e75a(0x1d7),_0x50e75a(0x172),{'raw_path':_0x8c306d,'error':_0x50e75a(0x182)+_0x2a88a6});throw new Error(_0x50e75a(0x182)+_0x2a88a6);}}logger[_0x50e75a(0x10c)]('MCP',_0x50e75a(0x172),{'raw_path':_0x8c306d,'error':_0x4ded69[_0x50e75a(0x124)]});throw _0x4ded69;}}const MorphEditFileArgsSchema=z[a0_0x80080d(0x16e)]({'path':z[a0_0x80080d(0x1d6)](),'code_edit':z[a0_0x80080d(0x1d6)]()[a0_0x80080d(0x10f)](a0_0x80080d(0x17f)),'instruction':z['string']()[a0_0x80080d(0x10f)](a0_0x80080d(0x119)),'dryRun':z[a0_0x80080d(0xfb)]()[a0_0x80080d(0x1c8)](![])[a0_0x80080d(0x10f)](a0_0x80080d(0x1c9))}),CODEBASE_SEARCH_QUERY_DESCRIPTION=a0_0x80080d(0x1a8),WarpGrepArgsSchema=z['object']({'search_string':z['string']()['describe'](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z[a0_0x80080d(0x1d6)]()[a0_0x80080d(0x10f)](a0_0x80080d(0x200)),'search_type':z[a0_0x80080d(0x1cf)]([a0_0x80080d(0x1c8),a0_0x80080d(0x11a)])[a0_0x80080d(0x1d5)]()['describe'](a0_0x80080d(0x1d2))}),WarpGrepGitHubArgsSchema=z[a0_0x80080d(0x16e)]({'search_string':z[a0_0x80080d(0x1d6)]()[a0_0x80080d(0x10f)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z['string']()[a0_0x80080d(0x1d5)]()['describe']('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.'),'owner_repo':z['string']()[a0_0x80080d(0x1d5)]()[a0_0x80080d(0x10f)](a0_0x80080d(0x1f0)),'branch':z[a0_0x80080d(0x1d6)]()[a0_0x80080d(0x1d5)]()['describe'](a0_0x80080d(0x1ed))}),CodebaseSearchArgsSchema=z[a0_0x80080d(0x16e)]({'query':z[a0_0x80080d(0x1d6)]()['describe'](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x80080d(0x1d6)]()['describe'](a0_0x80080d(0x18c)),'branch':z['string']()['optional']()['describe'](a0_0x80080d(0x19a)),'commitHash':z[a0_0x80080d(0x1d6)]()[a0_0x80080d(0x1d5)]()[a0_0x80080d(0x10f)](a0_0x80080d(0x1af)),'targetDirectories':z[a0_0x80080d(0x102)](z[a0_0x80080d(0x1d6)]())[a0_0x80080d(0x1c8)]([])[a0_0x80080d(0x10f)](a0_0x80080d(0x17e)),'limit':z[a0_0x80080d(0x186)]()[a0_0x80080d(0x1d5)]()['default'](0xa)[a0_0x80080d(0x10f)](a0_0x80080d(0x13d))}),server=new Server({'name':a0_0x80080d(0x16d),'version':a0_0x80080d(0x147)},{'capabilities':{'tools':{}}});server['setRequestHandler'](ListToolsRequestSchema,async()=>{const _0xdfd3f0=a0_0x80080d,_0xa2191=[{'name':TOOL_NAMES[_0xdfd3f0(0x127)],'description':_0xdfd3f0(0x19e)+'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'+_0xdfd3f0(0x1ff)+_0xdfd3f0(0x1e3)+_0xdfd3f0(0x1c3)+'-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a'+_0xdfd3f0(0x14c)+_0xdfd3f0(0x1fb)+_0xdfd3f0(0x157)+'Rules:\x0a'+_0xdfd3f0(0x207)+'-\x20Preserve\x20exact\x20indentation\x0a'+_0xdfd3f0(0x109)+'-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'annotations':{'readOnlyHint':![],'destructiveHint':!![],'idempotentHint':![],'openWorldHint':![]},'requiresApiKey':!![]},{'name':TOOL_NAMES[_0xdfd3f0(0x1b8)],'description':'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'+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+_0xdfd3f0(0x15b)+_0xdfd3f0(0x1fc)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':!![]},'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':!![]},'requiresApiKey':!![]}],_0x59b52b=_0xa2191[_0xdfd3f0(0x142)](_0xf0cb69=>{const _0x286572=_0xdfd3f0;if(DISABLED_TOOLS['has'](_0xf0cb69['name']))return console[_0x286572(0x10c)](_0x286572(0x14f)+_0xf0cb69[_0x286572(0x11c)]+_0x286572(0x1a5)),![];if('requiresApiKey'in _0xf0cb69&&_0xf0cb69['requiresApiKey']&&!MORPH_API_KEY)return logMcpStderr(_0x286572(0x16b)+_0xf0cb69[_0x286572(0x11c)]+_0x286572(0x219)),![];return!![];});return{'tools':_0x59b52b['map'](_0x583304=>({'name':_0x583304['name'],...'title'in _0x583304&&_0x583304[_0xdfd3f0(0x145)]?{'title':_0x583304[_0xdfd3f0(0x145)]}:{},'description':_0x583304[_0xdfd3f0(0x185)],'inputSchema':_0x583304['inputSchema'],..._0xdfd3f0(0x211)in _0x583304&&_0x583304[_0xdfd3f0(0x211)]?{'annotations':_0x583304[_0xdfd3f0(0x211)]}:{}}))};}),server['setRequestHandler'](CallToolRequestSchema,async _0x245a2b=>{const _0x97bc15=a0_0x80080d,{name:_0x321354,arguments:_0x419369}=_0x245a2b[_0x97bc15(0x20d)],_0x4a5140=Date[_0x97bc15(0x148)]();logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),'tool_call_received',{'tool':_0x321354,'args':_0x321354==='edit_file'?{'path':_0x419369?.['path'],'instruction':_0x419369?.[_0x97bc15(0xfd)]||_0x419369?.[_0x97bc15(0x10d)],'dryRun':_0x419369?.[_0x97bc15(0x1b1)]}:_0x419369});try{if(!MORPH_API_KEY)return{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x209)}],'isError':!![]};if(!MORPH_API_KEY[_0x97bc15(0x1f4)](_0x97bc15(0x192))&&!MORPH_API_KEY['startsWith']('morph-'))return{'content':[{'type':'text','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['has'](_0x321354))return{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x1da)+_0x321354+'\x22\x20is\x20disabled\x20via\x20ENABLED_TOOLS/DISABLED_TOOLS\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.'}],'isError':![]};switch(_0x321354){case TOOL_NAMES[_0x97bc15(0x127)]:{let _0x4c6f33=_0x419369;if(_0x4c6f33&&typeof _0x4c6f33===_0x97bc15(0x16e)){if(!('path'in _0x4c6f33)){const _0x4e5c31=_0x4c6f33[_0x97bc15(0x1b2)]??_0x4c6f33[_0x97bc15(0x213)]??_0x4c6f33['target_filepath']??_0x4c6f33[_0x97bc15(0x1f5)]??_0x4c6f33[_0x97bc15(0x141)];if(_0x4e5c31)_0x4c6f33={..._0x4c6f33,'path':_0x4e5c31};}_0x97bc15(0x10d)in _0x4c6f33&&!(_0x97bc15(0xfd)in _0x4c6f33)&&(_0x4c6f33={..._0x4c6f33,'instruction':_0x4c6f33[_0x97bc15(0x10d)]});if(!(_0x97bc15(0x10e)in _0x4c6f33)){const _0x409e1c=_0x4c6f33[_0x97bc15(0x1b3)]??_0x4c6f33[_0x97bc15(0x1e5)]??_0x4c6f33[_0x97bc15(0x1e7)]??_0x4c6f33['edit'];if(_0x409e1c)_0x4c6f33={..._0x4c6f33,'code_edit':_0x409e1c};}}const _0x3604bc=MorphEditFileArgsSchema[_0x97bc15(0x11d)](_0x4c6f33);if(!_0x3604bc[_0x97bc15(0x1fd)])throw new Error(_0x97bc15(0x1a0)+_0x3604bc[_0x97bc15(0x10c)]);const _0x1d50c9=await validatePath(_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1e2)]);let _0x199329=null,_0xfdebf=!![],_0x2472bf=null;try{_0x199329=await a0_0x4e6f41[_0x97bc15(0x1f6)](_0x1d50c9,_0x97bc15(0xfc)),logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),'file_read_complete',{'path':_0x1d50c9,'size_bytes':_0x199329[_0x97bc15(0x17c)]});}catch(_0x1f47a6){const _0x50e454=_0x1f47a6['code'];_0x50e454===_0x97bc15(0x1a2)?(_0xfdebf=![],_0x199329='',logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),_0x97bc15(0x15e),{'path':_0x1d50c9,'exists':![]})):(_0x2472bf=_0x97bc15(0x1ad)+(_0x50e454||_0x97bc15(0x177))+_0x97bc15(0x164)+(_0x1f47a6 instanceof Error?_0x1f47a6[_0x97bc15(0x124)]:String(_0x1f47a6)),logger[_0x97bc15(0x10c)](_0x97bc15(0x1d7),_0x97bc15(0x180),{'path':_0x1d50c9,'error':_0x2472bf}),logMcpStderr(_0x97bc15(0x16b)+_0x2472bf));}let _0x483252;try{const _0x465903=MORPH_API_KEY;if(!_0x465903)throw new Error(_0x97bc15(0x20b));const _0x56099d=a0_0x39ae41[_0x97bc15(0x215)](_0x1d50c9),_0x5aa681=a0_0x39ae41[_0x97bc15(0x129)](_0x1d50c9);logger[_0x97bc15(0x15d)]('MCP','api_request_start',{'model':_0x97bc15(0xff),'path':_0x3604bc[_0x97bc15(0x10a)]['path'],'instruction_len':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0xfd)][_0x97bc15(0x17c)],'code_edit_len':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x10e)][_0x97bc15(0x17c)],'original_code_len':_0x199329?.[_0x97bc15(0x17c)]??0x0,'dry_run':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1b1)]});const _0x1d0142=Date[_0x97bc15(0x148)](),_0x9de7c7=await executeEditFile({'target_filepath':_0x5aa681,'code_edit':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x10e)],'instruction':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0xfd)]},{'morphApiKey':_0x465903,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x56099d,'autoWrite':!_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1b1)],'generateUdiff':![],'debug':![]}),_0x869860=Date['now']()-_0x1d0142;_0x483252=_0x9de7c7[_0x97bc15(0x208)];if(!_0x9de7c7['success'])throw new Error(_0x9de7c7['error']||_0x97bc15(0x19d));const _0x428a09=_0x9de7c7[_0x97bc15(0x140)],_0x2e0bda='added\x20'+_0x428a09[_0x97bc15(0x18a)]+_0x97bc15(0x17b)+_0x428a09[_0x97bc15(0x163)]+_0x97bc15(0x1cd)+_0x428a09['linesModified'];logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),_0x97bc15(0x198),{'tool':'edit_file','success':!![],'latency_ms':Date[_0x97bc15(0x148)]()-_0x4a5140,'edit_latency_ms':_0x869860,'changes':{'added':_0x428a09[_0x97bc15(0x18a)],'removed':_0x428a09[_0x97bc15(0x163)],'modified':_0x428a09[_0x97bc15(0x12a)]},'completion_id':_0x483252});if(_0x3604bc['data'][_0x97bc15(0x1b1)])return{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x108)+(_0xfdebf?'':_0x97bc15(0x13c))+':\x20'+_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0xfd)]+_0x97bc15(0x1cb)+_0x2e0bda+_0x97bc15(0x216)+_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1e2)]+'.'}]};return{'content':[{'type':_0x97bc15(0x18e),'text':'Morph\x20Edit\x20'+(_0xfdebf?'Applied':'Created\x20File')+':\x20'+_0x3604bc[_0x97bc15(0x10a)]['instruction']+_0x97bc15(0x1cb)+_0x2e0bda+_0x97bc15(0x216)+_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1e2)]+'.'}]};}catch(_0x7e8d91){const _0x222665=handleMorphAPIError(_0x7e8d91);if(_0x222665)return logger[_0x97bc15(0x10c)]('MCP','tool_call_error',{'tool':_0x97bc15(0x156),'error':_0x97bc15(0x138),'latency_ms':Date[_0x97bc15(0x148)]()-_0x4a5140}),_0x222665;const _0x5255a4=_0x7e8d91 instanceof Error?_0x7e8d91['message']:String(_0x7e8d91);return logger[_0x97bc15(0x10c)]('MCP',_0x97bc15(0x1bd),{'tool':_0x97bc15(0x156),'error':_0x5255a4,'path':_0x3604bc['data'][_0x97bc15(0x1e2)],'validated_path':_0x1d50c9,'latency_ms':Date[_0x97bc15(0x148)]()-_0x4a5140,'stack':_0x7e8d91 instanceof Error?_0x7e8d91['stack']:undefined}),reportMorphError({'error_message':_0x5255a4,'error_type':_0x7e8d91 instanceof Error?_0x7e8d91['constructor'][_0x97bc15(0x11c)]:_0x97bc15(0x204),'context':{'tool':_0x97bc15(0x156),'completion_id':_0x483252,'file_path':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1e2)],'validated_path':_0x1d50c9,'instruction':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0xfd)],'model':MORPH_LARGE_APPLY?'morph-v3-large':_0x97bc15(0xff),'dry_run':_0x3604bc[_0x97bc15(0x10a)]['dryRun'],'file_exists':_0xfdebf,'file_read_error':_0x2472bf,'file_readable':_0x199329!==null,'request_content':{'path':_0x3604bc['data']['path'],'code_edit':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x10e)],'instruction':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0xfd)],'original_code':_0x199329!==null?_0x199329[_0x97bc15(0x17c)]>0xc350?_0x199329[_0x97bc15(0x222)](0x0,0xc350)+_0x97bc15(0x16f)+_0x199329[_0x97bc15(0x17c)]+'\x20chars)':_0x199329:_0x97bc15(0x1f3)+(_0x2472bf||_0x97bc15(0x1f1))+']','original_code_length':_0x199329?.['length']??0x0,'model':MORPH_LARGE_APPLY?_0x97bc15(0x162):_0x97bc15(0xff),'dry_run':_0x3604bc[_0x97bc15(0x10a)][_0x97bc15(0x1b1)]}},'stack_trace':_0x7e8d91 instanceof Error?_0x7e8d91[_0x97bc15(0x221)]:undefined,'source':_0x97bc15(0x13b)})[_0x97bc15(0x1de)](()=>{}),{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x1a4)+_0x5255a4}],'isError':!![]};}}case TOOL_NAMES['CODEBASE_SEARCH']:{const _0x315a77=WarpGrepArgsSchema[_0x97bc15(0x11d)](_0x419369);if(!_0x315a77[_0x97bc15(0x1fd)])return{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x19b)+_0x315a77[_0x97bc15(0x10c)]}],'isError':!![]};const _0x4ab666=_0x197f29=>{const _0xc24f58=_0x97bc15,_0x2dd2c1=[];for(const _0x2258bd of _0x197f29||[]){if(_0x2258bd['role']===_0xc24f58(0x12d)&&Array[_0xc24f58(0x1c6)](_0x2258bd[_0xc24f58(0x1f2)]))for(const _0x3021ce of _0x2258bd[_0xc24f58(0x1f2)]){try{const _0x427866=_0x3021ce['function']?.['name'],_0x25c76e=JSON[_0xc24f58(0x1dd)](_0x3021ce[_0xc24f58(0x158)]?.['arguments']||'{}');if(_0x427866===_0xc24f58(0x1b0))_0x2dd2c1[_0xc24f58(0x15a)]('grep\x20\x27'+_0x25c76e[_0xc24f58(0x1a9)]+'\x27\x20'+(_0x25c76e['path']||'.'));else{if(_0x427866===_0xc24f58(0x206))_0x2dd2c1[_0xc24f58(0x15a)](_0xc24f58(0x1eb)+_0x25c76e[_0xc24f58(0x1e2)]);else{if(_0x427866===_0xc24f58(0x189))_0x2dd2c1[_0xc24f58(0x15a)]('list_directory\x20'+(_0x25c76e[_0xc24f58(0x12c)]||'.'));else{if(_0x427866===_0xc24f58(0x17a))_0x2dd2c1[_0xc24f58(0x15a)](_0xc24f58(0x218)+_0x25c76e[_0xc24f58(0x1a9)]+'\x27\x20'+(_0x25c76e[_0xc24f58(0x1e2)]||'.'));else _0x427866===_0xc24f58(0x126)&&_0x2dd2c1[_0xc24f58(0x15a)](_0xc24f58(0x126));}}}}catch{}}}return _0x2dd2c1;},_0x2e7b81=_0x580cd0=>{const _0x152260=_0x97bc15,_0x50f61e=[];if(!_0x580cd0||!Array[_0x152260(0x1c6)](_0x580cd0))return _0x50f61e;const _0x4b55eb=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x152260(0x194),'tool':_0x152260(0x206)},{'pattern':/\[PATH ERROR\]/,'error_type':'PathError','tool':'read'},{'pattern':/\[READ ERROR\]/,'error_type':_0x152260(0x214),'tool':_0x152260(0x206)},{'pattern':/\[UNREADABLE FILE\]/,'error_type':_0x152260(0x179),'tool':_0x152260(0x206)},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x152260(0x1bc),'tool':_0x152260(0x1a7)},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x152260(0x1e1),'tool':_0x152260(0x1a7)},{'pattern':/\[BINARY FILE\]/,'error_type':'BinaryFile','tool':_0x152260(0x206)},{'pattern':/\[SYMLINK\]/,'error_type':_0x152260(0x187),'tool':_0x152260(0x206)},{'pattern':/not a text file/,'error_type':_0x152260(0x179),'tool':_0x152260(0x206)},{'pattern':/symbolic link/,'error_type':_0x152260(0x187),'tool':_0x152260(0x206)},{'pattern':/Error reading file:/,'error_type':_0x152260(0x214),'tool':'read'},{'pattern':/status="error"/,'error_type':_0x152260(0x110),'tool':_0x152260(0x177)}];let _0x38ea97=0x0;for(const _0x415a23 of _0x580cd0){_0x415a23[_0x152260(0x1c5)]===_0x152260(0x12d)&&Array[_0x152260(0x1c6)](_0x415a23['tool_calls'])&&_0x38ea97++;const _0x3fb9a9=_0x415a23['content'];if((_0x415a23[_0x152260(0x1c5)]===_0x152260(0x1ef)||_0x415a23['role']==='user')&&_0x3fb9a9&&typeof _0x3fb9a9===_0x152260(0x1d6))for(const {pattern:_0x1ebb8b,error_type:_0x4cc88c,tool:_0x4ea11a}of _0x4b55eb){const _0x3526fb=_0x3fb9a9[_0x152260(0x1c1)](new RegExp(_0x1ebb8b[_0x152260(0x125)],'g'));if(_0x3526fb)for(const _0x3b6163 of _0x3526fb){const _0x22af2d=_0x3fb9a9[_0x152260(0x151)](_0x3b6163),_0x469d83=_0x3fb9a9[_0x152260(0x222)](_0x22af2d,Math[_0x152260(0x1c0)](_0x22af2d+0xc8,_0x3fb9a9[_0x152260(0x17c)]));_0x50f61e[_0x152260(0x15a)]({'tool':_0x4ea11a,'error_type':_0x4cc88c,'error_message':_0x469d83[_0x152260(0x14e)]('\x0a')[0x0],'turn':_0x38ea97});}}}return _0x50f61e;};try{const _0x1d5a8e=a0_0x39ae41[_0x97bc15(0x113)](_0x315a77[_0x97bc15(0x10a)]['repo_path']),_0x29e278=_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x150)],_0x39b2d4=_0x29e278===_0x97bc15(0x11a)?{'allowNames':[_0x97bc15(0x11a)]}:undefined,_0x3a834f=new LocalRipgrepProvider(_0x1d5a8e,undefined,_0x39b2d4);logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),'provider_created',{'type':'LocalRipgrepProvider','repo_root':_0x1d5a8e,'search_type':_0x29e278||_0x97bc15(0x1c8)}),logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),_0x97bc15(0x155),{'query':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x166)],'repo_root':_0x1d5a8e,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x160e4c=Date[_0x97bc15(0x148)](),_0x56da8c=await runWarpGrep({'searchTerm':_0x315a77['data'][_0x97bc15(0x166)],'repoRoot':_0x1d5a8e,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x3a834f,'search_type':_0x29e278}),_0x28be6c=Date[_0x97bc15(0x148)]()-_0x160e4c,_0x426f63=_0x56da8c['finish']?.[_0x97bc15(0x21e)]?.[_0x97bc15(0x143)]?.['length']??0x0;logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),_0x97bc15(0x14a),{'termination':_0x56da8c[_0x97bc15(0x1e6)],'turns':_0x56da8c['timings']?.[_0x97bc15(0x1a3)]??0x0,'files_found':_0x426f63,'latency_ms':_0x28be6c});const _0x2b921c=_0x2e7b81(_0x56da8c['messages']);_0x2b921c['length']>0x0&&reportMorphError({'error_message':_0x97bc15(0x111)+_0x2b921c[_0x97bc15(0x17c)]+_0x97bc15(0x1ab),'error_type':_0x97bc15(0x1c4),'level':'warn','tool':_0x97bc15(0x171),'context':{'repo_path':_0x315a77[_0x97bc15(0x10a)]['repo_path'],'query':_0x315a77['data'][_0x97bc15(0x166)],'model':_0x97bc15(0x181),'termination_reason':_0x56da8c['terminationReason'],'sub_tool_errors':_0x2b921c,'timings':_0x56da8c[_0x97bc15(0x190)],'tool_calls':_0x4ab666(_0x56da8c['messages']),'messages':_0x56da8c[_0x97bc15(0x101)]?.['map'](_0x5ba64b=>({'role':_0x5ba64b[_0x97bc15(0x1c5)],'content':_0x5ba64b[_0x97bc15(0x1e7)],..._0x5ba64b['tool_calls']?{'tool_calls':_0x5ba64b[_0x97bc15(0x1f2)][_0x97bc15(0x17c)]}:{},..._0x5ba64b[_0x97bc15(0x15f)]?{'tool_call_id':_0x5ba64b[_0x97bc15(0x15f)]}:{}}))},'source':_0x97bc15(0x13b)})[_0x97bc15(0x1de)](()=>{});let _0x2c20e2='';if(_0x56da8c[_0x97bc15(0x1e6)]===_0x97bc15(0x1b6)&&_0x56da8c[_0x97bc15(0x126)]?.[_0x97bc15(0x21e)]?.['files']){const _0x505f98=_0x56da8c[_0x97bc15(0x126)][_0x97bc15(0x21e)][_0x97bc15(0x143)];if(_0x505f98[_0x97bc15(0x17c)]===0x0)return _0x2c20e2=_0x56da8c[_0x97bc15(0x126)][_0x97bc15(0x19f)]||_0x97bc15(0x1d0),{'content':[{'type':_0x97bc15(0x18e),'text':_0x2c20e2}]};const _0x479615=[],_0x2f1687=[_0x97bc15(0x178)];for(const _0x55d95d of _0x56da8c['messages']){if(_0x55d95d[_0x97bc15(0x1c5)]===_0x97bc15(0x12d)&&Array[_0x97bc15(0x1c6)](_0x55d95d[_0x97bc15(0x1f2)]))for(const _0x14a317 of _0x55d95d[_0x97bc15(0x1f2)]){try{const _0x12c418=_0x14a317[_0x97bc15(0x158)]?.[_0x97bc15(0x11c)],_0x2baf68=JSON[_0x97bc15(0x1dd)](_0x14a317['function']?.[_0x97bc15(0x18b)]||'{}');if(_0x12c418===_0x97bc15(0x1b0))_0x2f1687[_0x97bc15(0x15a)](_0x97bc15(0x174)+_0x2baf68[_0x97bc15(0x1a9)]+'\x27\x20in\x20`'+(_0x2baf68['path']||'.')+'`');else{if(_0x12c418===_0x97bc15(0x206))_0x2f1687[_0x97bc15(0x15a)](_0x97bc15(0x188)+_0x2baf68[_0x97bc15(0x1e2)]+'`');else{if(_0x12c418===_0x97bc15(0x189))_0x2f1687[_0x97bc15(0x15a)](_0x97bc15(0x183)+(_0x2baf68[_0x97bc15(0x12c)]||'.')+'`');else _0x12c418===_0x97bc15(0x17a)&&_0x2f1687['push'](_0x97bc15(0xfe)+_0x2baf68[_0x97bc15(0x1a9)]+_0x97bc15(0x1ce)+(_0x2baf68[_0x97bc15(0x1e2)]||'.')+'`');}}}catch{}}}_0x479615[_0x97bc15(0x15a)](_0x2f1687[_0x97bc15(0x210)]('\x0a'));const _0x51f035=['',_0x97bc15(0x116)];for(const _0x18712d of _0x505f98){if(_0x18712d[_0x97bc15(0x1ea)]==='*')_0x51f035[_0x97bc15(0x15a)]('-\x20'+_0x18712d['path']+':*');else{if(Array['isArray'](_0x18712d[_0x97bc15(0x1ea)])){const _0xc46157=_0x18712d[_0x97bc15(0x1ea)][_0x97bc15(0x1aa)](([_0x4ef581,_0x1127f1])=>{if(_0x4ef581===_0x1127f1)return''+_0x4ef581;return _0x4ef581+'-'+_0x1127f1;});_0x51f035['push']('-\x20'+_0x18712d[_0x97bc15(0x1e2)]+':'+_0xc46157['join'](','));}else _0x51f035[_0x97bc15(0x15a)]('-\x20'+_0x18712d[_0x97bc15(0x1e2)]+':*');}}_0x51f035['push'](''),_0x479615['push'](_0x51f035[_0x97bc15(0x210)]('\x0a')),_0x479615['push']('Here\x20is\x20the\x20content\x20of\x20files:\x0a');const _0x56164f=[],_0x2a8a34=[];for(const _0x4b5756 of _0x505f98){let _0xcb3fff=a0_0x39ae41['resolve'](_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],_0x4b5756['path']),_0x4745d0=null,_0x55b265=null;try{_0x4745d0=await a0_0x4e6f41[_0x97bc15(0x1f6)](_0xcb3fff,{'encoding':_0x97bc15(0xfc)});}catch(_0x39d0a5){const _0x413eb2=fixPathRepetition(_0xcb3fff);if(_0x413eb2)try{_0x4745d0=await a0_0x4e6f41[_0x97bc15(0x1f6)](_0x413eb2,{'encoding':_0x97bc15(0xfc)}),_0xcb3fff=_0x413eb2;}catch{_0x55b265=_0x39d0a5 instanceof Error?_0x39d0a5:new Error(String(_0x39d0a5));}else _0x55b265=_0x39d0a5 instanceof Error?_0x39d0a5:new Error(String(_0x39d0a5));}if(_0x4745d0!==null){const _0xb17c99=_0x4745d0[_0x97bc15(0x14e)](/\r?\n/),_0xab1e13=[];if(_0x4b5756['lines']==='*'||!Array['isArray'](_0x4b5756['lines']))for(let _0x5ed22a=0x1;_0x5ed22a<=_0xb17c99['length'];_0x5ed22a++){const _0x2dcf9d=_0xb17c99[_0x5ed22a-0x1];_0xab1e13['push'](_0x5ed22a+'|\x20'+_0x2dcf9d);}else for(const [_0x568976,_0x553db7]of _0x4b5756[_0x97bc15(0x1ea)]){_0xab1e13[_0x97bc15(0x17c)]>0x0&&_0xab1e13[_0x97bc15(0x15a)]('');for(let _0x40d85f=_0x568976;_0x40d85f<=_0x553db7&&_0x40d85f<=_0xb17c99[_0x97bc15(0x17c)];_0x40d85f++){const _0x4621ff=_0xb17c99[_0x40d85f-0x1];_0xab1e13['push'](_0x40d85f+'|\x20'+_0x4621ff);}}_0x2a8a34[_0x97bc15(0x15a)]({'path':_0x4b5756[_0x97bc15(0x1e2)],'content':_0xab1e13['join']('\x0a')});}else _0x56164f[_0x97bc15(0x15a)](_0x97bc15(0x21d)+_0x4b5756[_0x97bc15(0x1e2)]+_0x97bc15(0x195)+(_0x55b265?.['message']||_0x97bc15(0x1d9))+_0x97bc15(0x21a));}try{const _0x9f1673=await compactFileContexts(_0x2a8a34,_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x166)],MORPH_API_KEY,MORPH_API_URL);for(const _0x1acdf3 of _0x9f1673){_0x56164f[_0x97bc15(0x15a)](_0x97bc15(0x21d)+_0x1acdf3[_0x97bc15(0x1e2)]+_0x97bc15(0x14b)+_0x1acdf3[_0x97bc15(0x1e7)]+_0x97bc15(0x21a));}}catch(_0x544f48){logger['warn'](_0x97bc15(0x1d7),_0x97bc15(0x11b),{'error':_0x544f48 instanceof Error?_0x544f48['message']:String(_0x544f48),'files_count':_0x2a8a34[_0x97bc15(0x17c)]});for(const _0x12b2fd of _0x2a8a34){_0x56164f[_0x97bc15(0x15a)](_0x97bc15(0x21d)+_0x12b2fd[_0x97bc15(0x1e2)]+_0x97bc15(0x14b)+_0x12b2fd[_0x97bc15(0x1e7)]+_0x97bc15(0x21a));}}_0x479615['push'](_0x56164f[_0x97bc15(0x210)]('\x0a\x0a')),_0x2c20e2=_0x479615['join']('\x0a');const _0x20f5d5=_0x56da8c['errors']?.['filter'](_0x176f06=>_0x176f06[_0x97bc15(0x124)]?.['startsWith'](_0x97bc15(0x20c)))||[];if(_0x20f5d5[_0x97bc15(0x17c)]>0x0){const _0x446e1a=_0x20f5d5[_0x97bc15(0x1aa)](_0x493e11=>_0x493e11['message'])['join'](';\x20');reportMorphError({'error_message':_0x446e1a,'error_type':_0x97bc15(0x1bf),'context':{'tool':_0x97bc15(0x171),'repo_path':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],'query':_0x315a77[_0x97bc15(0x10a)]['search_string'],'model':'morph-warp-grep-v2.1','termination_reason':_0x97bc15(0x1bb),'error_count':_0x20f5d5['length'],'is_timeout':![],'timings':_0x56da8c[_0x97bc15(0x190)],'files_attempted':_0x505f98[_0x97bc15(0x1aa)](_0x3fd6ce=>({'path':_0x3fd6ce[_0x97bc15(0x1e2)],'lines':_0x3fd6ce[_0x97bc15(0x1ea)]})),'tool_calls':_0x4ab666(_0x56da8c[_0x97bc15(0x101)]),'messages':_0x56da8c['messages']?.[_0x97bc15(0x1aa)](_0x50a0e2=>({'role':_0x50a0e2[_0x97bc15(0x1c5)],'content':_0x50a0e2[_0x97bc15(0x1e7)],..._0x50a0e2['tool_calls']?{'tool_calls':_0x50a0e2[_0x97bc15(0x1f2)][_0x97bc15(0x17c)]}:{},..._0x50a0e2[_0x97bc15(0x15f)]?{'tool_call_id':_0x50a0e2['tool_call_id']}:{}})),'request_content':{'query':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x166)],'repo_path':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],'repoRoot':a0_0x39ae41[_0x97bc15(0x113)](_0x315a77[_0x97bc15(0x10a)]['repo_path']),'model':'morph-warp-grep-v2.1'}},'source':'mcp-filesystem'})[_0x97bc15(0x1de)](()=>{});}}else{if(_0x56da8c[_0x97bc15(0x1e6)]===_0x97bc15(0x161)&&_0x56da8c[_0x97bc15(0x154)][_0x97bc15(0x17c)]>0x0){const _0x33ba99=_0x56da8c[_0x97bc15(0x154)][_0x97bc15(0x1aa)](_0x4249de=>_0x4249de['message'])[_0x97bc15(0x210)](';\x20');_0x2c20e2=_0x97bc15(0x20f)+_0x33ba99;const _0x28ca9e=_0x33ba99[_0x97bc15(0x10b)]()[_0x97bc15(0x114)]('timeout')||_0x33ba99[_0x97bc15(0x10b)]()[_0x97bc15(0x114)](_0x97bc15(0x144))||_0x33ba99[_0x97bc15(0x10b)]()[_0x97bc15(0x114)](_0x97bc15(0x13e)),_0x15b41c=_0x56da8c['finish']?.[_0x97bc15(0x21e)]?.['files'],_0x48064b=_0x56da8c[_0x97bc15(0x154)][0x0];reportMorphError({'error_message':_0x33ba99,'error_type':_0x28ca9e?_0x97bc15(0x104):_0x48064b?.['constructor']?.[_0x97bc15(0x11c)]||'WarpGrepError','context':{'tool':_0x97bc15(0x171),'repo_path':_0x315a77[_0x97bc15(0x10a)]['repo_path'],'query':_0x315a77[_0x97bc15(0x10a)]['search_string'],'model':_0x97bc15(0x181),'termination_reason':_0x56da8c['terminationReason'],'error_count':_0x56da8c[_0x97bc15(0x154)][_0x97bc15(0x17c)],'is_timeout':_0x28ca9e,'timings':_0x56da8c['timings'],'files_attempted':_0x15b41c?.['map'](_0x575f6e=>({'path':_0x575f6e[_0x97bc15(0x1e2)],'lines':_0x575f6e[_0x97bc15(0x1ea)]})),'tool_calls':_0x4ab666(_0x56da8c[_0x97bc15(0x101)]),'messages':_0x56da8c[_0x97bc15(0x101)]?.[_0x97bc15(0x1aa)](_0x134fa2=>({'role':_0x134fa2[_0x97bc15(0x1c5)],'content':_0x134fa2[_0x97bc15(0x1e7)],..._0x134fa2['tool_calls']?{'tool_calls':_0x134fa2[_0x97bc15(0x1f2)]['length']}:{},..._0x134fa2['tool_call_id']?{'tool_call_id':_0x134fa2['tool_call_id']}:{}})),'request_content':{'query':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x166)],'repo_path':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],'repoRoot':a0_0x39ae41[_0x97bc15(0x113)](_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)]),'model':_0x97bc15(0x181)}},'stack_trace':_0x48064b?.['stack']||undefined,'source':'mcp-filesystem'})[_0x97bc15(0x1de)](()=>{});}else _0x2c20e2='Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.';}return{'content':[{'type':'text','text':_0x2c20e2}]};}catch(_0x394c95){const _0xdff22=handleMorphAPIError(_0x394c95);if(_0xdff22)return logger[_0x97bc15(0x10c)](_0x97bc15(0x1d7),_0x97bc15(0x1bd),{'tool':'codebase_search','error':_0x97bc15(0x138),'latency_ms':Date['now']()-_0x4a5140}),_0xdff22;const _0x61befa=_0x394c95 instanceof Error?_0x394c95[_0x97bc15(0x124)]:String(_0x394c95);logger['error'](_0x97bc15(0x1d7),'tool_call_error',{'tool':_0x97bc15(0x171),'error':_0x61befa,'repo_path':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],'query':_0x315a77['data']['search_string'],'latency_ms':Date[_0x97bc15(0x148)]()-_0x4a5140});const _0x507d8d=_0x61befa['toLowerCase']()[_0x97bc15(0x114)]('timeout')||_0x61befa[_0x97bc15(0x10b)]()['includes'](_0x97bc15(0x144))||_0x61befa[_0x97bc15(0x10b)]()[_0x97bc15(0x114)](_0x97bc15(0x13e))||_0x394c95 instanceof Error&&_0x394c95[_0x97bc15(0x11c)]===_0x97bc15(0x104);return reportMorphError({'error_message':_0x61befa,'error_type':_0x507d8d?'TimeoutError':_0x394c95 instanceof Error?_0x394c95[_0x97bc15(0x153)]['name']:'UnknownError','context':{'tool':_0x97bc15(0x171),'repo_path':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)],'query':_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x166)],'model':_0x97bc15(0x181),'is_timeout':_0x507d8d,'exception_phase':_0x97bc15(0x16a),'request_content':{'query':_0x315a77[_0x97bc15(0x10a)]['search_string'],'repo_path':_0x315a77['data']['repo_path'],'repoRoot':a0_0x39ae41[_0x97bc15(0x113)](_0x315a77[_0x97bc15(0x10a)][_0x97bc15(0x19c)]),'model':_0x97bc15(0x181)}},'stack_trace':_0x394c95 instanceof Error?_0x394c95[_0x97bc15(0x221)]:undefined,'source':_0x97bc15(0x13b)})[_0x97bc15(0x1de)](()=>{}),{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x1a6)+_0x61befa}],'isError':![]};}}case TOOL_NAMES[_0x97bc15(0x1ac)]:{const _0x2adbea=WarpGrepGitHubArgsSchema['safeParse'](_0x419369);if(!_0x2adbea['success'])return{'content':[{'type':_0x97bc15(0x18e),'text':'Invalid\x20arguments:\x20'+_0x2adbea[_0x97bc15(0x10c)]}],'isError':!![]};const _0x4a43ce=_0x2adbea['data']['github_url']||_0x2adbea[_0x97bc15(0x10a)]['owner_repo'];if(!_0x4a43ce)return{'content':[{'type':'text','text':_0x97bc15(0x123)}],'isError':!![]};const _0x16adf6=MORPH_API_KEY;if(!_0x16adf6)throw new Error(_0x97bc15(0x20b));const _0x11ff38=Date['now']();logger[_0x97bc15(0x15d)](_0x97bc15(0x1d7),'github_search_start',{'identifier':_0x4a43ce,'query':_0x2adbea[_0x97bc15(0x10a)][_0x97bc15(0x166)],'branch':_0x2adbea['data'][_0x97bc15(0x191)]});try{const _0x34a6c0=new WarpGrepClient({'morphApiKey':_0x16adf6,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x3541d1=await _0x34a6c0['searchGitHub']({'searchTerm':_0x2adbea[_0x97bc15(0x10a)]['search_string'],'github':_0x4a43ce,'branch':_0x2adbea[_0x97bc15(0x10a)][_0x97bc15(0x191)]}),_0x5bd56d=Date['now']()-_0x11ff38;logMcpStderr(_0x97bc15(0x168)+_0x5bd56d+'ms.\x20Success:\x20'+_0x3541d1['success']);const _0x12c71b=formatResult(_0x3541d1);return{'content':[{'type':'text','text':_0x12c71b}]};}catch(_0x3ae4e3){const _0x2d5ffd=handleMorphAPIError(_0x3ae4e3);if(_0x2d5ffd)return _0x2d5ffd;const _0x488e20=Date[_0x97bc15(0x148)]()-_0x11ff38,_0x317833=_0x3ae4e3 instanceof Error?_0x3ae4e3[_0x97bc15(0x124)]:String(_0x3ae4e3);return logMcpStderr(_0x97bc15(0x1fa)+_0x488e20+'ms:',_0x317833),reportMorphError({'error_message':_0x317833,'error_type':_0x3ae4e3 instanceof Error?_0x3ae4e3[_0x97bc15(0x153)][_0x97bc15(0x11c)]:_0x97bc15(0x204),'context':{'tool':'github_codebase_search','github_url':_0x4a43ce,'search_string':_0x2adbea[_0x97bc15(0x10a)][_0x97bc15(0x166)],'branch':_0x2adbea['data']['branch']},'stack_trace':_0x3ae4e3 instanceof Error?_0x3ae4e3[_0x97bc15(0x221)]:undefined,'source':_0x97bc15(0x13b),'tool':_0x97bc15(0x184),'latency_ms':_0x488e20})[_0x97bc15(0x1de)](()=>{}),{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x217)+_0x317833}],'isError':![]};}}default:throw new Error(_0x97bc15(0x1b7)+_0x321354);}}catch(_0x51dd2f){const _0x251b2b=_0x51dd2f instanceof Error?_0x51dd2f[_0x97bc15(0x124)]:String(_0x51dd2f);return reportMorphError({'error_message':_0x251b2b,'error_type':_0x51dd2f instanceof Error?_0x51dd2f[_0x97bc15(0x153)]['name']:'UnknownError','context':{'tool':_0x321354,'arguments':_0x419369?JSON['stringify'](_0x419369)[_0x97bc15(0x222)](0x0,0x1f4):undefined,'mcp_server_version':'0.2.0'},'stack_trace':_0x51dd2f instanceof Error?_0x51dd2f[_0x97bc15(0x221)]:undefined,'source':'mcp-filesystem'})[_0x97bc15(0x1de)](()=>{}),{'content':[{'type':_0x97bc15(0x18e),'text':_0x97bc15(0x20f)+_0x251b2b}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x4aa3a9){const _0x4a7618=a0_0x80080d,_0x98cfdd=await getValidRootDirectories(_0x4aa3a9);if(_0x98cfdd[_0x4a7618(0x17c)]>0x0)allowedDirectories=[..._0x98cfdd],logMcpStderr(_0x4a7618(0x159)+_0x98cfdd[_0x4a7618(0x17c)]+_0x4a7618(0x193));else{logMcpStderr(_0x4a7618(0x121));if(ENABLE_WORKSPACE_MODE)try{const _0x1cfe5f=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x1cfe5f&&(allowedDirectories=[_0x1cfe5f],logMcpStderr(_0x4a7618(0x1db)+_0x1cfe5f));}catch(_0x42857b){logMcpStderr('Warning:\x20Workspace\x20fallback\x20failed:\x20'+_0x42857b);}}}server[a0_0x80080d(0x1e0)](RootsListChangedNotificationSchema,async()=>{const _0x199cfb=a0_0x80080d;try{const _0x45ae6c=await server['listRoots']();_0x45ae6c&&_0x199cfb(0x21b)in _0x45ae6c&&await updateAllowedDirectoriesFromRoots(_0x45ae6c['roots']);}catch(_0x642276){logMcpStderr(_0x199cfb(0x1ba),_0x642276 instanceof Error?_0x642276['message']:String(_0x642276));}}),server[a0_0x80080d(0x1a1)]=async()=>{const _0x31f264=a0_0x80080d,_0x2c3aab=server['getClientCapabilities']();if(_0x2c3aab?.[_0x31f264(0x21b)])try{const _0x4f9693=await server[_0x31f264(0x1dc)]();_0x4f9693&&'roots'in _0x4f9693?await updateAllowedDirectoriesFromRoots(_0x4f9693['roots']):logMcpStderr(_0x31f264(0x1f7));}catch(_0x160ecc){logMcpStderr('Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:',_0x160ecc instanceof Error?_0x160ecc[_0x31f264(0x124)]:String(_0x160ecc));}else{if(allowedDirectories[_0x31f264(0x17c)]>0x0)logMcpStderr(_0x31f264(0x133),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr(_0x31f264(0x136));else throw new Error('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.');}}};async function runServer(){const _0x5d9a24=a0_0x80080d,_0x3c664e=new StdioServerTransport();await server[_0x5d9a24(0x160)](_0x3c664e),logMcpStderr(_0x5d9a24(0x1fe)),allowedDirectories[_0x5d9a24(0x17c)]===0x0&&logMcpStderr('Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol');}runServer()['catch'](_0x1a35e8=>{const _0xf777fd=a0_0x80080d;logMcpStderr('Fatal\x20error\x20running\x20server:',_0x1a35e8),process[_0xf777fd(0x199)](0x1);});
package/dist/log-utils.js CHANGED
@@ -1 +1 @@
1
- var a1_0x3f1526=a1_0x324e;(function(_0x33e70b,_0x238e78){var _0x506cc4=a1_0x324e,_0x5dbcf0=_0x33e70b();while(!![]){try{var _0x26f29c=-parseInt(_0x506cc4(0xaa))/0x1+-parseInt(_0x506cc4(0xb1))/0x2*(-parseInt(_0x506cc4(0xad))/0x3)+parseInt(_0x506cc4(0xb3))/0x4+parseInt(_0x506cc4(0xa4))/0x5+parseInt(_0x506cc4(0xa7))/0x6*(-parseInt(_0x506cc4(0x9f))/0x7)+-parseInt(_0x506cc4(0xa9))/0x8+-parseInt(_0x506cc4(0xac))/0x9*(-parseInt(_0x506cc4(0xa1))/0xa);if(_0x26f29c===_0x238e78)break;else _0x5dbcf0['push'](_0x5dbcf0['shift']());}catch(_0x3da7ff){_0x5dbcf0['push'](_0x5dbcf0['shift']());}}}(a1_0x33a9,0xd0976));function a1_0x324e(_0x374265,_0x88eedc){_0x374265=_0x374265-0x9f;var _0x33a9d4=a1_0x33a9();var _0x324e8e=_0x33a9d4[_0x374265];return _0x324e8e;}import a1_0x27b471 from'os';import{logger}from'./logger.js';export function getOperatingSystemType(_0x5bcd6f=a1_0x27b471['platform']()){var _0x2cd5e7=a1_0x324e;switch(_0x5bcd6f){case _0x2cd5e7(0xa8):return _0x2cd5e7(0xb2);case _0x2cd5e7(0xb0):return _0x2cd5e7(0xa2);case _0x2cd5e7(0xaf):return _0x2cd5e7(0xab);default:return _0x2cd5e7(0xa0);}}function a1_0x33a9(){var _0x534b33=['map','[os=','3264462sgDKPU','darwin','7896480bNKWzs','174425wReMPD','Linux','9rPgXbf','3yGxcsD','error','linux','win32','1462046YYrXFv','macOS','915872LsaCFt','7iqotGB','Unknown','10956130NTWxdH','Windows','platform','2521740vbOJib'];a1_0x33a9=function(){return _0x534b33;};return a1_0x33a9();}export function formatMcpLogMessage(_0x272a0b,_0x2a7f56=a1_0x27b471[a1_0x3f1526(0xa3)]()){var _0x21010a=a1_0x3f1526;return _0x21010a(0xa6)+getOperatingSystemType(_0x2a7f56)+']\x20'+_0x272a0b;}export function logMcpStderr(_0x349dcb,..._0x5a13a8){var _0xbdf2df=a1_0x3f1526;console[_0xbdf2df(0xae)](formatMcpLogMessage(_0x349dcb),..._0x5a13a8),logger['info']('MCP',_0x349dcb,_0x5a13a8['length']?{'args':_0x5a13a8[_0xbdf2df(0xa5)](_0x5cc284=>String(_0x5cc284))}:undefined);}
1
+ var a1_0x2243e4=a1_0x3a54;(function(_0x3e8f99,_0x5323d0){var _0x185823=a1_0x3a54,_0x31c708=_0x3e8f99();while(!![]){try{var _0x2a82c4=parseInt(_0x185823(0x1a2))/0x1*(-parseInt(_0x185823(0x19d))/0x2)+parseInt(_0x185823(0x1ac))/0x3*(-parseInt(_0x185823(0x19b))/0x4)+parseInt(_0x185823(0x1a0))/0x5*(-parseInt(_0x185823(0x1aa))/0x6)+parseInt(_0x185823(0x1a9))/0x7*(-parseInt(_0x185823(0x1a1))/0x8)+parseInt(_0x185823(0x195))/0x9+-parseInt(_0x185823(0x1a4))/0xa+parseInt(_0x185823(0x199))/0xb;if(_0x2a82c4===_0x5323d0)break;else _0x31c708['push'](_0x31c708['shift']());}catch(_0x3aa4ba){_0x31c708['push'](_0x31c708['shift']());}}}(a1_0x7681,0x1ee5c));function a1_0x7681(){var _0x5291a4=['map','Unknown','390315AsBOcK','8IahwKd','2DBsfnK','length','956560HNayuQ','Windows','[os=','info','error','1239245KsfSuf','6cpihai','linux','3wnPxaB','2193822wTdaRZ','platform','macOS','darwin','5316201hMVzqa','win32','310892lDKTMQ','MCP','172016asLkSp'];a1_0x7681=function(){return _0x5291a4;};return a1_0x7681();}import a1_0x5a2504 from'os';function a1_0x3a54(_0x3d617e,_0x64be2a){_0x3d617e=_0x3d617e-0x195;var _0x76818d=a1_0x7681();var _0x3a54e4=_0x76818d[_0x3d617e];return _0x3a54e4;}import{logger}from'./logger.js';export function getOperatingSystemType(_0x3e7b32=a1_0x5a2504['platform']()){var _0x213d48=a1_0x3a54;switch(_0x3e7b32){case _0x213d48(0x198):return _0x213d48(0x197);case _0x213d48(0x19a):return _0x213d48(0x1a5);case _0x213d48(0x1ab):return'Linux';default:return _0x213d48(0x19f);}}export function formatMcpLogMessage(_0x2a9730,_0x3f30b7=a1_0x5a2504[a1_0x2243e4(0x196)]()){var _0x2cda3c=a1_0x2243e4;return _0x2cda3c(0x1a6)+getOperatingSystemType(_0x3f30b7)+']\x20'+_0x2a9730;}export function logMcpStderr(_0xc606bf,..._0x38410c){var _0x5ecf31=a1_0x2243e4;console[_0x5ecf31(0x1a8)](formatMcpLogMessage(_0xc606bf),..._0x38410c),logger[_0x5ecf31(0x1a7)](_0x5ecf31(0x19c),_0xc606bf,_0x38410c[_0x5ecf31(0x1a3)]?{'args':_0x38410c[_0x5ecf31(0x19e)](_0x4263a5=>String(_0x4263a5))}:undefined);}
package/dist/logger.js CHANGED
@@ -1 +1 @@
1
- const a2_0xb5c121=a2_0x1faf;(function(_0x199537,_0x433b32){const _0x30e531=a2_0x1faf,_0x17dd19=_0x199537();while(!![]){try{const _0xd90ed5=parseInt(_0x30e531(0xf3))/0x1+parseInt(_0x30e531(0xf6))/0x2+-parseInt(_0x30e531(0xee))/0x3*(-parseInt(_0x30e531(0xf0))/0x4)+-parseInt(_0x30e531(0xfb))/0x5*(parseInt(_0x30e531(0xfe))/0x6)+-parseInt(_0x30e531(0x103))/0x7+parseInt(_0x30e531(0x102))/0x8*(parseInt(_0x30e531(0xf8))/0x9)+-parseInt(_0x30e531(0xf9))/0xa*(parseInt(_0x30e531(0xf5))/0xb);if(_0xd90ed5===_0x433b32)break;else _0x17dd19['push'](_0x17dd19['shift']());}catch(_0x4ae1b2){_0x17dd19['push'](_0x17dd19['shift']());}}}(a2_0x48c3,0x6f0de));import{createWriteStream}from'fs';class MorphLogger{['enabled'];['fileStream'];constructor(){const _0x35f141=a2_0x1faf;this[_0x35f141(0x101)]=process[_0x35f141(0xfd)]['MORPH_DEBUG']==='1'||!!process[_0x35f141(0xfd)][_0x35f141(0xfa)];const _0x44b2fb=process['env'][_0x35f141(0xfa)];this[_0x35f141(0xf7)]=_0x44b2fb?createWriteStream(_0x44b2fb,{'flags':'a'}):null;}['debug'](_0x5ae175,_0x419bf6,_0x1d06d1){const _0x18b185=a2_0x1faf;this[_0x18b185(0x104)]('debug',_0x5ae175,_0x419bf6,_0x1d06d1);}[a2_0xb5c121(0x100)](_0x54f474,_0x36baa3,_0x4f55c2){const _0x475575=a2_0xb5c121;this[_0x475575(0x104)](_0x475575(0x100),_0x54f474,_0x36baa3,_0x4f55c2);}[a2_0xb5c121(0xff)](_0xeef0c8,_0x500f1c,_0x8a8ec4){const _0x4f5de1=a2_0xb5c121;this[_0x4f5de1(0x104)](_0x4f5de1(0xff),_0xeef0c8,_0x500f1c,_0x8a8ec4);}['error'](_0xda013d,_0x10f91b,_0x3b0f64){const _0x24627a=a2_0xb5c121;this[_0x24627a(0x104)]('error',_0xda013d,_0x10f91b,_0x3b0f64);}[a2_0xb5c121(0xfc)](){this['enabled']=!![];}get['isEnabled'](){const _0x2d95b1=a2_0xb5c121;return this[_0x2d95b1(0x101)];}['_log'](_0x43c21e,_0x591942,_0x52c8a4,_0x4f4c45){const _0x4ed1ab=a2_0xb5c121;if(_0x43c21e!==_0x4ed1ab(0x106)&&!this['enabled'])return;const _0x376bad=new Date()[_0x4ed1ab(0x105)](),_0x3347ac='['+_0x376bad+_0x4ed1ab(0xf4)+_0x43c21e[_0x4ed1ab(0xef)]()+_0x4ed1ab(0xf4)+_0x591942+']';console['error'](_0x4f4c45?_0x3347ac+'\x20'+_0x52c8a4+'\x20'+JSON[_0x4ed1ab(0xf2)](_0x4f4c45):_0x3347ac+'\x20'+_0x52c8a4),this['fileStream']?.[_0x4ed1ab(0xf1)](JSON[_0x4ed1ab(0xf2)]({'ts':_0x376bad,'level':_0x43c21e,'component':_0x591942,'msg':_0x52c8a4,..._0x4f4c45&&{'data':_0x4f4c45}})+'\x0a');}}export const logger=new MorphLogger();function a2_0x1faf(_0x2e3143,_0x50580d){_0x2e3143=_0x2e3143-0xee;const _0x48c316=a2_0x48c3();let _0x1faf7e=_0x48c316[_0x2e3143];return _0x1faf7e;}function a2_0x48c3(){const _0x3ed28f=['326408kUYwaG','write','stringify','680274KnItKM',']\x20[','16071QhQRbg','596632OVqGQr','fileStream','387FMkUFO','730mEXJrV','MORPH_LOG_FILE','8020nJCbdf','enable','env','2298HsNjZv','warn','info','enabled','568polCRa','2638958HHqUsA','_log','toISOString','error','21pXQiLU','toUpperCase'];a2_0x48c3=function(){return _0x3ed28f;};return a2_0x48c3();}
1
+ function a2_0x3a5a(){const _0x5877e8=['358443KnTpip','_log','enable','stringify','debug','write','2248ufDVjr','info','42rSrKXx','error',']\x20[','40139oUTdzu','8mVugjn','3568896RTcqMn','fileStream','1601390iuxdpp','isEnabled','382300VMISjG','1881TLPHUT','4940NyEycU','toUpperCase','370ZDPaNW','env','enabled','warn','MORPH_LOG_FILE'];a2_0x3a5a=function(){return _0x5877e8;};return a2_0x3a5a();}const a2_0x244e69=a2_0x4ece;(function(_0x536b26,_0x3dca4c){const _0x30c0cc=a2_0x4ece,_0x2a92c5=_0x536b26();while(!![]){try{const _0xf89b61=parseInt(_0x30c0cc(0x1d4))/0x1+parseInt(_0x30c0cc(0x1e5))/0x2+parseInt(_0x30c0cc(0x1e6))/0x3*(-parseInt(_0x30c0cc(0x1da))/0x4)+-parseInt(_0x30c0cc(0x1e7))/0x5*(-parseInt(_0x30c0cc(0x1dc))/0x6)+-parseInt(_0x30c0cc(0x1e3))/0x7*(parseInt(_0x30c0cc(0x1e0))/0x8)+parseInt(_0x30c0cc(0x1e1))/0x9+parseInt(_0x30c0cc(0x1e9))/0xa*(-parseInt(_0x30c0cc(0x1df))/0xb);if(_0xf89b61===_0x3dca4c)break;else _0x2a92c5['push'](_0x2a92c5['shift']());}catch(_0x58b1ae){_0x2a92c5['push'](_0x2a92c5['shift']());}}}(a2_0x3a5a,0x39d60));function a2_0x4ece(_0x112c55,_0x277016){_0x112c55=_0x112c55-0x1d2;const _0x3a5aca=a2_0x3a5a();let _0x4ecea8=_0x3a5aca[_0x112c55];return _0x4ecea8;}import{createWriteStream}from'fs';class MorphLogger{['enabled'];['fileStream'];constructor(){const _0x1f3f4d=a2_0x4ece;this[_0x1f3f4d(0x1eb)]=process[_0x1f3f4d(0x1ea)]['MORPH_DEBUG']==='1'||!!process[_0x1f3f4d(0x1ea)][_0x1f3f4d(0x1d3)];const _0xc3c462=process[_0x1f3f4d(0x1ea)][_0x1f3f4d(0x1d3)];this[_0x1f3f4d(0x1e2)]=_0xc3c462?createWriteStream(_0xc3c462,{'flags':'a'}):null;}[a2_0x244e69(0x1d8)](_0x41c195,_0x1b9b99,_0x490545){const _0x45d99b=a2_0x244e69;this[_0x45d99b(0x1d5)](_0x45d99b(0x1d8),_0x41c195,_0x1b9b99,_0x490545);}[a2_0x244e69(0x1db)](_0x4d186a,_0x8b429e,_0x4788cf){const _0x3bd46a=a2_0x244e69;this['_log'](_0x3bd46a(0x1db),_0x4d186a,_0x8b429e,_0x4788cf);}[a2_0x244e69(0x1d2)](_0x591af6,_0x2e9c5e,_0x4ba913){this['_log']('warn',_0x591af6,_0x2e9c5e,_0x4ba913);}[a2_0x244e69(0x1dd)](_0x13f902,_0xde5fbe,_0x3762bb){const _0x2b406d=a2_0x244e69;this[_0x2b406d(0x1d5)](_0x2b406d(0x1dd),_0x13f902,_0xde5fbe,_0x3762bb);}[a2_0x244e69(0x1d6)](){const _0x59f7cf=a2_0x244e69;this[_0x59f7cf(0x1eb)]=!![];}get[a2_0x244e69(0x1e4)](){return this['enabled'];}['_log'](_0x3c664f,_0xc3d54b,_0x282c8b,_0x427730){const _0x4a125d=a2_0x244e69;if(_0x3c664f!==_0x4a125d(0x1dd)&&!this['enabled'])return;const _0x1658e1=new Date()['toISOString'](),_0x5101cd='['+_0x1658e1+_0x4a125d(0x1de)+_0x3c664f[_0x4a125d(0x1e8)]()+_0x4a125d(0x1de)+_0xc3d54b+']';console[_0x4a125d(0x1dd)](_0x427730?_0x5101cd+'\x20'+_0x282c8b+'\x20'+JSON['stringify'](_0x427730):_0x5101cd+'\x20'+_0x282c8b),this['fileStream']?.[_0x4a125d(0x1d9)](JSON[_0x4a125d(0x1d7)]({'ts':_0x1658e1,'level':_0x3c664f,'component':_0xc3d54b,'msg':_0x282c8b,..._0x427730&&{'data':_0x427730}})+'\x0a');}}export const logger=new MorphLogger();
@@ -1 +1 @@
1
- (function(_0x58c784,_0x365ad0){const _0x14d0d8=a3_0x2cde,_0x9b5141=_0x58c784();while(!![]){try{const _0x4b5606=parseInt(_0x14d0d8(0x141))/0x1*(parseInt(_0x14d0d8(0x133))/0x2)+parseInt(_0x14d0d8(0x135))/0x3+parseInt(_0x14d0d8(0x131))/0x4+-parseInt(_0x14d0d8(0x134))/0x5*(parseInt(_0x14d0d8(0x13e))/0x6)+-parseInt(_0x14d0d8(0x13d))/0x7*(-parseInt(_0x14d0d8(0x12b))/0x8)+parseInt(_0x14d0d8(0x136))/0x9+-parseInt(_0x14d0d8(0x13b))/0xa*(parseInt(_0x14d0d8(0x12d))/0xb);if(_0x4b5606===_0x365ad0)break;else _0x9b5141['push'](_0x9b5141['shift']());}catch(_0x24176d){_0x9b5141['push'](_0x9b5141['shift']());}}}(a3_0xef08,0xae9b0));function a3_0x2cde(_0x3ebc26,_0x39204b){_0x3ebc26=_0x3ebc26-0x12b;const _0xef0866=a3_0xef08();let _0x2cde67=_0xef0866[_0x3ebc26];return _0x2cde67;}import a3_0x2a3714 from'path';function a3_0xef08(){const _0xb2e3=['toUpperCase','80419OTpqPu','39920JBnIrE','charAt','38731fTRFYm','homedir','match','test','5452392xsIgaG','startsWith','20ZgDTcV','324215EUhBkr','1868094YoKVEV','10763550KJEHEg','trim','join','substring','replace','10990jxARrl','slice','931cFvoEz','6zPrnPA','/mnt/'];a3_0xef08=function(){return _0xb2e3;};return a3_0xef08();}import a3_0x1c60bd from'os';export function convertToWindowsPath(_0x1be974){const _0x1d0961=a3_0x2cde;if(_0x1be974[_0x1d0961(0x132)](_0x1d0961(0x13f))){const _0x1b1e11=_0x1be974[_0x1d0961(0x12c)](0x5)['toUpperCase'](),_0x4aae61=_0x1be974['slice'](0x6)[_0x1d0961(0x13a)](/\//g,'\x5c');return _0x1b1e11+':'+_0x4aae61;}if(_0x1be974[_0x1d0961(0x12f)](/^\/[a-zA-Z]\//)){const _0x591bf1=_0x1be974[_0x1d0961(0x12c)](0x1)[_0x1d0961(0x140)](),_0x40b7ee=_0x1be974[_0x1d0961(0x13c)](0x2)['replace'](/\//g,'\x5c');return _0x591bf1+':'+_0x40b7ee;}if(_0x1be974['match'](/^[a-zA-Z]:/))return _0x1be974[_0x1d0961(0x13a)](/\//g,'\x5c');return _0x1be974;}export function normalizePath(_0x1877fc){const _0xa54df7=a3_0x2cde;_0x1877fc=_0x1877fc[_0xa54df7(0x137)]()['replace'](/^["']|["']$/g,'');const _0x7dab5=_0x1877fc[_0xa54df7(0x132)]('/')&&!_0x1877fc[_0xa54df7(0x12f)](/^\/mnt\/[a-z]\//i)&&!_0x1877fc[_0xa54df7(0x12f)](/^\/[a-zA-Z]\//);if(_0x7dab5)return _0x1877fc[_0xa54df7(0x13a)](/\/+/g,'/')[_0xa54df7(0x13a)](/\/+$/,'');_0x1877fc=convertToWindowsPath(_0x1877fc);if(_0x1877fc[_0xa54df7(0x132)]('\x5c\x5c')){let _0x138cff=_0x1877fc;_0x138cff=_0x138cff['replace'](/^\\{2,}/,'\x5c\x5c');const _0x4910e6=_0x138cff[_0xa54df7(0x139)](0x2)[_0xa54df7(0x13a)](/\\\\/g,'\x5c');_0x1877fc='\x5c\x5c'+_0x4910e6;}else _0x1877fc=_0x1877fc[_0xa54df7(0x13a)](/\\\\/g,'\x5c');let _0x382747=a3_0x2a3714['normalize'](_0x1877fc);_0x1877fc[_0xa54df7(0x132)]('\x5c\x5c')&&!_0x382747[_0xa54df7(0x132)]('\x5c\x5c')&&(_0x382747='\x5c'+_0x382747);if(_0x382747[_0xa54df7(0x12f)](/^[a-zA-Z]:/)){let _0x4eef3d=_0x382747[_0xa54df7(0x13a)](/\//g,'\x5c');return/^[a-z]:/[_0xa54df7(0x130)](_0x4eef3d)&&(_0x4eef3d=_0x4eef3d['charAt'](0x0)[_0xa54df7(0x140)]()+_0x4eef3d[_0xa54df7(0x13c)](0x1)),_0x4eef3d;}return _0x382747[_0xa54df7(0x13a)](/\//g,'\x5c');}export function expandHome(_0x1500d2){const _0x574642=a3_0x2cde;if(_0x1500d2['startsWith']('~/')||_0x1500d2==='~')return a3_0x2a3714[_0x574642(0x138)](a3_0x1c60bd[_0x574642(0x12e)](),_0x1500d2[_0x574642(0x13c)](0x1));return _0x1500d2;}
1
+ function a3_0x2f97(){const _0x147527=['/mnt/','join','10518306bfTvQY','test','replace','3377032mpSVYc','5pioBSZ','normalize','charAt','trim','slice','match','4Nsuicu','511023Glgqxj','23881230jcgKmV','4070034siGUmq','328741MjsURY','substring','toUpperCase','startsWith','136ixCQtA','6964HUPjdC'];a3_0x2f97=function(){return _0x147527;};return a3_0x2f97();}function a3_0x2321(_0x2e62d4,_0x2381ab){_0x2e62d4=_0x2e62d4-0xa2;const _0x2f97c7=a3_0x2f97();let _0x232130=_0x2f97c7[_0x2e62d4];return _0x232130;}(function(_0x2547ad,_0x44ccf8){const _0x171fff=a3_0x2321,_0x3f2dbd=_0x2547ad();while(!![]){try{const _0xdd6628=-parseInt(_0x171fff(0xa9))/0x1*(-parseInt(_0x171fff(0xaa))/0x2)+-parseInt(_0x171fff(0xa2))/0x3*(parseInt(_0x171fff(0xb7))/0x4)+-parseInt(_0x171fff(0xb1))/0x5*(parseInt(_0x171fff(0xad))/0x6)+-parseInt(_0x171fff(0xa5))/0x7+-parseInt(_0x171fff(0xb0))/0x8+parseInt(_0x171fff(0xa4))/0x9+parseInt(_0x171fff(0xa3))/0xa;if(_0xdd6628===_0x44ccf8)break;else _0x3f2dbd['push'](_0x3f2dbd['shift']());}catch(_0x54b543){_0x3f2dbd['push'](_0x3f2dbd['shift']());}}}(a3_0x2f97,0xe0f49));import a3_0x386d7e from'path';import a3_0x31e2ef from'os';export function convertToWindowsPath(_0x410c02){const _0x5c49e8=a3_0x2321;if(_0x410c02[_0x5c49e8(0xa8)](_0x5c49e8(0xab))){const _0xb1af0b=_0x410c02[_0x5c49e8(0xb3)](0x5)['toUpperCase'](),_0x22aab6=_0x410c02[_0x5c49e8(0xb5)](0x6)[_0x5c49e8(0xaf)](/\//g,'\x5c');return _0xb1af0b+':'+_0x22aab6;}if(_0x410c02[_0x5c49e8(0xb6)](/^\/[a-zA-Z]\//)){const _0x4d728d=_0x410c02[_0x5c49e8(0xb3)](0x1)['toUpperCase'](),_0x355898=_0x410c02['slice'](0x2)[_0x5c49e8(0xaf)](/\//g,'\x5c');return _0x4d728d+':'+_0x355898;}if(_0x410c02['match'](/^[a-zA-Z]:/))return _0x410c02['replace'](/\//g,'\x5c');return _0x410c02;}export function normalizePath(_0x232cf5){const _0x503a6a=a3_0x2321;_0x232cf5=_0x232cf5[_0x503a6a(0xb4)]()[_0x503a6a(0xaf)](/^["']|["']$/g,'');const _0x3888c4=_0x232cf5['startsWith']('/')&&!_0x232cf5['match'](/^\/mnt\/[a-z]\//i)&&!_0x232cf5['match'](/^\/[a-zA-Z]\//);if(_0x3888c4)return _0x232cf5[_0x503a6a(0xaf)](/\/+/g,'/')['replace'](/\/+$/,'');_0x232cf5=convertToWindowsPath(_0x232cf5);if(_0x232cf5[_0x503a6a(0xa8)]('\x5c\x5c')){let _0x4b75f3=_0x232cf5;_0x4b75f3=_0x4b75f3[_0x503a6a(0xaf)](/^\\{2,}/,'\x5c\x5c');const _0x5ef80b=_0x4b75f3[_0x503a6a(0xa6)](0x2)[_0x503a6a(0xaf)](/\\\\/g,'\x5c');_0x232cf5='\x5c\x5c'+_0x5ef80b;}else _0x232cf5=_0x232cf5['replace'](/\\\\/g,'\x5c');let _0x200814=a3_0x386d7e[_0x503a6a(0xb2)](_0x232cf5);_0x232cf5[_0x503a6a(0xa8)]('\x5c\x5c')&&!_0x200814[_0x503a6a(0xa8)]('\x5c\x5c')&&(_0x200814='\x5c'+_0x200814);if(_0x200814[_0x503a6a(0xb6)](/^[a-zA-Z]:/)){let _0x3b557b=_0x200814[_0x503a6a(0xaf)](/\//g,'\x5c');return/^[a-z]:/[_0x503a6a(0xae)](_0x3b557b)&&(_0x3b557b=_0x3b557b[_0x503a6a(0xb3)](0x0)[_0x503a6a(0xa7)]()+_0x3b557b[_0x503a6a(0xb5)](0x1)),_0x3b557b;}return _0x200814[_0x503a6a(0xaf)](/\//g,'\x5c');}export function expandHome(_0x3a9a50){const _0x44aa44=a3_0x2321;if(_0x3a9a50['startsWith']('~/')||_0x3a9a50==='~')return a3_0x386d7e[_0x44aa44(0xac)](a3_0x31e2ef['homedir'](),_0x3a9a50[_0x44aa44(0xb5)](0x1));return _0x3a9a50;}
@@ -1 +1 @@
1
- (function(_0x1ddfff,_0x5740fc){const _0x182bfd=a4_0xe29b,_0x4f0e97=_0x1ddfff();while(!![]){try{const _0x5d0ea8=parseInt(_0x182bfd(0x1ef))/0x1*(parseInt(_0x182bfd(0x200))/0x2)+parseInt(_0x182bfd(0x1f2))/0x3+-parseInt(_0x182bfd(0x1f0))/0x4*(parseInt(_0x182bfd(0x1f6))/0x5)+-parseInt(_0x182bfd(0x1fc))/0x6*(parseInt(_0x182bfd(0x202))/0x7)+-parseInt(_0x182bfd(0x1f9))/0x8+parseInt(_0x182bfd(0x1ed))/0x9*(parseInt(_0x182bfd(0x1f5))/0xa)+-parseInt(_0x182bfd(0x1f8))/0xb;if(_0x5d0ea8===_0x5740fc)break;else _0x4f0e97['push'](_0x4f0e97['shift']());}catch(_0x385299){_0x4f0e97['push'](_0x4f0e97['shift']());}}}(a4_0xc1c6,0x64c01));function a4_0xe29b(_0x1757b4,_0x34b496){_0x1757b4=_0x1757b4-0x1ed;const _0xc1c6a=a4_0xc1c6();let _0xe29b7a=_0xc1c6a[_0x1757b4];return _0xe29b7a;}import a4_0x364073 from'path';function a4_0xc1c6(){const _0x49638e=['length','2xWFosF','508fgqceN','normalize','2074458wrbSOW','resolve','Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization','60760QndviX','4905YQmFvI','includes','3402179QksOUr','3527144DEMBya','sep','string','24JmezTM','some','isArray','isAbsolute','93960tlpCtL','startsWith','152908sfYHbi','873SHsYNs'];a4_0xc1c6=function(){return _0x49638e;};return a4_0xc1c6();}export function isPathWithinAllowedDirectories(_0xc50000,_0x4ba940){const _0x52ed80=a4_0xe29b;if(typeof _0xc50000!==_0x52ed80(0x1fb)||!Array[_0x52ed80(0x1fe)](_0x4ba940))return![];if(!_0xc50000||_0x4ba940[_0x52ed80(0x1ee)]===0x0)return![];if(_0xc50000['includes']('\x00'))return![];let _0x2e65a3;try{_0x2e65a3=a4_0x364073[_0x52ed80(0x1f3)](a4_0x364073[_0x52ed80(0x1f1)](_0xc50000));}catch{return![];}if(!a4_0x364073[_0x52ed80(0x1ff)](_0x2e65a3))throw new Error('Path\x20must\x20be\x20absolute\x20after\x20normalization');return _0x4ba940[_0x52ed80(0x1fd)](_0x38d81b=>{const _0x2f6ddc=_0x52ed80;if(typeof _0x38d81b!==_0x2f6ddc(0x1fb)||!_0x38d81b)return![];if(_0x38d81b[_0x2f6ddc(0x1f7)]('\x00'))return![];let _0x442a8b;try{_0x442a8b=a4_0x364073[_0x2f6ddc(0x1f3)](a4_0x364073[_0x2f6ddc(0x1f1)](_0x38d81b));}catch{return![];}if(!a4_0x364073[_0x2f6ddc(0x1ff)](_0x442a8b))throw new Error(_0x2f6ddc(0x1f4));if(_0x2e65a3===_0x442a8b)return!![];if(_0x442a8b===a4_0x364073['sep'])return _0x2e65a3['startsWith'](a4_0x364073['sep']);return _0x2e65a3[_0x2f6ddc(0x201)](_0x442a8b+a4_0x364073[_0x2f6ddc(0x1fa)]);});}
1
+ function a4_0x142d(_0x4f2f0b,_0x4015dd){_0x4f2f0b=_0x4f2f0b-0x126;const _0x228ae8=a4_0x228a();let _0x142d2d=_0x228ae8[_0x4f2f0b];return _0x142d2d;}(function(_0x449b07,_0x48544d){const _0x31fb9f=a4_0x142d,_0x508be9=_0x449b07();while(!![]){try{const _0x111ddd=-parseInt(_0x31fb9f(0x138))/0x1+parseInt(_0x31fb9f(0x131))/0x2*(-parseInt(_0x31fb9f(0x129))/0x3)+-parseInt(_0x31fb9f(0x127))/0x4+parseInt(_0x31fb9f(0x12a))/0x5*(-parseInt(_0x31fb9f(0x130))/0x6)+parseInt(_0x31fb9f(0x12b))/0x7*(-parseInt(_0x31fb9f(0x139))/0x8)+parseInt(_0x31fb9f(0x128))/0x9*(parseInt(_0x31fb9f(0x126))/0xa)+parseInt(_0x31fb9f(0x12c))/0xb;if(_0x111ddd===_0x48544d)break;else _0x508be9['push'](_0x508be9['shift']());}catch(_0x3e0704){_0x508be9['push'](_0x508be9['shift']());}}}(a4_0x228a,0xec082));import a4_0x35220b from'path';export function isPathWithinAllowedDirectories(_0x4e823c,_0xe9b23d){const _0x251c21=a4_0x142d;if(typeof _0x4e823c!==_0x251c21(0x12d)||!Array['isArray'](_0xe9b23d))return![];if(!_0x4e823c||_0xe9b23d['length']===0x0)return![];if(_0x4e823c['includes']('\x00'))return![];let _0x5ab9e3;try{_0x5ab9e3=a4_0x35220b[_0x251c21(0x136)](a4_0x35220b[_0x251c21(0x135)](_0x4e823c));}catch{return![];}if(!a4_0x35220b[_0x251c21(0x13a)](_0x5ab9e3))throw new Error(_0x251c21(0x137));return _0xe9b23d[_0x251c21(0x12f)](_0x4f8ade=>{const _0x5241ae=_0x251c21;if(typeof _0x4f8ade!==_0x5241ae(0x12d)||!_0x4f8ade)return![];if(_0x4f8ade[_0x5241ae(0x12e)]('\x00'))return![];let _0x3b1278;try{_0x3b1278=a4_0x35220b[_0x5241ae(0x136)](a4_0x35220b['normalize'](_0x4f8ade));}catch{return![];}if(!a4_0x35220b[_0x5241ae(0x13a)](_0x3b1278))throw new Error(_0x5241ae(0x134));if(_0x5ab9e3===_0x3b1278)return!![];if(_0x3b1278===a4_0x35220b[_0x5241ae(0x132)])return _0x5ab9e3[_0x5241ae(0x133)](a4_0x35220b[_0x5241ae(0x132)]);return _0x5ab9e3[_0x5241ae(0x133)](_0x3b1278+a4_0x35220b[_0x5241ae(0x132)]);});}function a4_0x228a(){const _0x3c8cb4=['1850WaeYKM','3330068gSsAWq','52432831xnbZBV','string','includes','some','17868aSZFJw','2hfUOPY','sep','startsWith','Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization','normalize','resolve','Path\x20must\x20be\x20absolute\x20after\x20normalization','820695JvAMyq','24zFzJvq','isAbsolute','49190uuGWbP','1896416Nqltdp','2241AnuXwQ','3602505QNhubL'];a4_0x228a=function(){return _0x3c8cb4;};return a4_0x228a();}
@@ -1 +1 @@
1
- function a5_0x6f93(_0x77686d,_0x7b7e15){_0x77686d=_0x77686d-0xfd;const _0x4500f9=a5_0x4500();let _0x6f9316=_0x4500f9[_0x77686d];return _0x6f9316;}(function(_0xea08f3,_0x13420d){const _0x3f1467=a5_0x6f93,_0xda5485=_0xea08f3();while(!![]){try{const _0xd7f192=parseInt(_0x3f1467(0x10c))/0x1*(parseInt(_0x3f1467(0x109))/0x2)+parseInt(_0x3f1467(0x10b))/0x3*(-parseInt(_0x3f1467(0x10d))/0x4)+parseInt(_0x3f1467(0xfe))/0x5+-parseInt(_0x3f1467(0x107))/0x6+-parseInt(_0x3f1467(0x106))/0x7*(-parseInt(_0x3f1467(0x102))/0x8)+-parseInt(_0x3f1467(0x110))/0x9*(parseInt(_0x3f1467(0xfd))/0xa)+-parseInt(_0x3f1467(0x111))/0xb*(-parseInt(_0x3f1467(0x112))/0xc);if(_0xd7f192===_0x13420d)break;else _0xda5485['push'](_0xda5485['shift']());}catch(_0x68d617){_0xda5485['push'](_0xda5485['shift']());}}}(a5_0x4500,0x86739));import{promises as a5_0x55644a}from'fs';import a5_0x43dbb9 from'path';import a5_0x12e683 from'os';function a5_0x4500(){const _0x31d88c=['11RUJYbE','16159092kzZRqx','stat','invalid\x20path\x20or\x20inaccessible','20WrKsUc','1910600HkgHsV','\x20due\x20to\x20error:\x20','isDirectory','non-directory\x20root','40xKuRIz','homedir','realpath','Skipping\x20invalid\x20directory:\x20','403851RuszhD','317280fEktRB','Skipping\x20','177996OJorai','push','9TTmSah','1HVAwJt','1422892COlSpV','startsWith','slice','1959354KYvjSj'];a5_0x4500=function(){return _0x31d88c;};return a5_0x4500();}import{normalizePath}from'./path-utils.js';import{logMcpStderr}from'./log-utils.js';async function parseRootUri(_0x4a4f11){const _0x2b3363=a5_0x6f93;try{const _0x4114ce=_0x4a4f11[_0x2b3363(0x10e)]('file://')?_0x4a4f11[_0x2b3363(0x10f)](0x7):_0x4a4f11,_0x2fb0ae=_0x4114ce[_0x2b3363(0x10e)]('~/')||_0x4114ce==='~'?a5_0x43dbb9['join'](a5_0x12e683[_0x2b3363(0x103)](),_0x4114ce['slice'](0x1)):_0x4114ce,_0x177b93=a5_0x43dbb9['resolve'](_0x2fb0ae),_0x3ef28a=await a5_0x55644a[_0x2b3363(0x104)](_0x177b93);return normalizePath(_0x3ef28a);}catch{return null;}}function formatDirectoryError(_0x106637,_0x500af3,_0x372aa4){const _0x4967d9=a5_0x6f93;if(_0x372aa4)return _0x4967d9(0x108)+_0x372aa4+':\x20'+_0x106637;const _0xe709ca=_0x500af3 instanceof Error?_0x500af3['message']:String(_0x500af3);return _0x4967d9(0x105)+_0x106637+_0x4967d9(0xff)+_0xe709ca;}export async function getValidRootDirectories(_0xa9fd9e){const _0x15e254=a5_0x6f93,_0xb18794=[];for(const _0x4ce5cf of _0xa9fd9e){const _0x16ac86=await parseRootUri(_0x4ce5cf['uri']);if(!_0x16ac86){logMcpStderr(formatDirectoryError(_0x4ce5cf['uri'],undefined,_0x15e254(0x114)));continue;}try{const _0x4738a0=await a5_0x55644a[_0x15e254(0x113)](_0x16ac86);_0x4738a0[_0x15e254(0x100)]()?_0xb18794[_0x15e254(0x10a)](_0x16ac86):logMcpStderr(formatDirectoryError(_0x16ac86,undefined,_0x15e254(0x101)));}catch(_0x1bf61b){logMcpStderr(formatDirectoryError(_0x16ac86,_0x1bf61b));}}return _0xb18794;}
1
+ function a5_0x3d51(){const _0x650377=['1120bsTwNe','stat','30bTKCPE','1928KSHIIV','resolve','realpath','non-directory\x20root','4993362MaHDUY','file://','isDirectory','Skipping\x20invalid\x20directory:\x20','1152wFNwga','invalid\x20path\x20or\x20inaccessible','Skipping\x20','4149PQImvo','1773360cwLAun','508764eaRiyl','push','message','8416156itFKSx','join','uri','\x20due\x20to\x20error:\x20','slice','6WAPZdj','startsWith','homedir','3323595dCGHJV'];a5_0x3d51=function(){return _0x650377;};return a5_0x3d51();}(function(_0x16c475,_0x5ca9fc){const _0x2816fa=a5_0x40ba,_0x21f650=_0x16c475();while(!![]){try{const _0xdedbd3=parseInt(_0x2816fa(0xce))/0x1*(-parseInt(_0x2816fa(0xd9))/0x2)+parseInt(_0x2816fa(0xd0))/0x3*(-parseInt(_0x2816fa(0xde))/0x4)+parseInt(_0x2816fa(0xcd))/0x5*(parseInt(_0x2816fa(0xca))/0x6)+parseInt(_0x2816fa(0xe1))/0x7+-parseInt(_0x2816fa(0xd1))/0x8*(-parseInt(_0x2816fa(0xdc))/0x9)+parseInt(_0x2816fa(0xdd))/0xa+parseInt(_0x2816fa(0xd5))/0xb;if(_0xdedbd3===_0x5ca9fc)break;else _0x21f650['push'](_0x21f650['shift']());}catch(_0x2124f5){_0x21f650['push'](_0x21f650['shift']());}}}(a5_0x3d51,0xa9098));function a5_0x40ba(_0x4b2b5f,_0x5294b2){_0x4b2b5f=_0x4b2b5f-0xc6;const _0x3d51c3=a5_0x3d51();let _0x40ba91=_0x3d51c3[_0x4b2b5f];return _0x40ba91;}import{promises as a5_0x468c94}from'fs';import a5_0x4fe4aa from'path';import a5_0x12c065 from'os';import{normalizePath}from'./path-utils.js';import{logMcpStderr}from'./log-utils.js';async function parseRootUri(_0x4edd58){const _0x9541af=a5_0x40ba;try{const _0x4e352c=_0x4edd58[_0x9541af(0xcb)](_0x9541af(0xd6))?_0x4edd58[_0x9541af(0xc9)](0x7):_0x4edd58,_0x23fd6a=_0x4e352c[_0x9541af(0xcb)]('~/')||_0x4e352c==='~'?a5_0x4fe4aa[_0x9541af(0xc6)](a5_0x12c065[_0x9541af(0xcc)](),_0x4e352c[_0x9541af(0xc9)](0x1)):_0x4e352c,_0xc4e9b3=a5_0x4fe4aa[_0x9541af(0xd2)](_0x23fd6a),_0x510782=await a5_0x468c94[_0x9541af(0xd3)](_0xc4e9b3);return normalizePath(_0x510782);}catch{return null;}}function formatDirectoryError(_0x5bfef0,_0x4cf199,_0x104b3c){const _0x425501=a5_0x40ba;if(_0x104b3c)return _0x425501(0xdb)+_0x104b3c+':\x20'+_0x5bfef0;const _0x53c329=_0x4cf199 instanceof Error?_0x4cf199[_0x425501(0xe0)]:String(_0x4cf199);return _0x425501(0xd8)+_0x5bfef0+_0x425501(0xc8)+_0x53c329;}export async function getValidRootDirectories(_0x387739){const _0x4c0c98=a5_0x40ba,_0xfd26f1=[];for(const _0x27a8d4 of _0x387739){const _0x1af45a=await parseRootUri(_0x27a8d4[_0x4c0c98(0xc7)]);if(!_0x1af45a){logMcpStderr(formatDirectoryError(_0x27a8d4['uri'],undefined,_0x4c0c98(0xda)));continue;}try{const _0x28d5d3=await a5_0x468c94[_0x4c0c98(0xcf)](_0x1af45a);_0x28d5d3[_0x4c0c98(0xd7)]()?_0xfd26f1[_0x4c0c98(0xdf)](_0x1af45a):logMcpStderr(formatDirectoryError(_0x1af45a,undefined,_0x4c0c98(0xd4)));}catch(_0x441e95){logMcpStderr(formatDirectoryError(_0x1af45a,_0x441e95));}}return _0xfd26f1;}
@@ -12,3 +12,27 @@ export declare const TOOL_NAMES: {
12
12
  export type ToolName = (typeof TOOL_NAMES)[keyof typeof TOOL_NAMES];
13
13
  export declare const ALL_TOOL_NAMES: readonly ToolName[];
14
14
  export declare const KNOWN_TOOL_NAMES: Set<string>;
15
+ /**
16
+ * Tool names from older releases (≤0.8.113) that configs in the wild still use.
17
+ * Both ENABLED_TOOLS and DISABLED_TOOLS accept them.
18
+ */
19
+ export declare const LEGACY_TOOL_ALIASES: Readonly<Record<string, ToolName>>;
20
+ export interface ToolFilter {
21
+ /** Tools the server must not advertise or run. */
22
+ disabled: Set<string>;
23
+ /** Names in either variable that match no tool, after alias resolution. */
24
+ unknown: string[];
25
+ }
26
+ /**
27
+ * Resolve which tools are off from the two env variables.
28
+ *
29
+ * `ENABLED_TOOLS` is an allow-list (`all` means every tool). `DISABLED_TOOLS`
30
+ * is a deny-list. When both are set, a tool is on only if it is allowed and
31
+ * not denied. Neither set → everything on. ENABLED_TOOLS existed in
32
+ * 0.8.22–0.8.113, was dropped in 0.8.114 and replaced by DISABLED_TOOLS in
33
+ * 0.8.125; honoring both keeps older configs working.
34
+ */
35
+ export declare function resolveToolFilter(env: {
36
+ ENABLED_TOOLS?: string;
37
+ DISABLED_TOOLS?: string;
38
+ }): ToolFilter;
@@ -1 +1 @@
1
- const a6_0x26cb94=a6_0x993b;(function(_0x3d1835,_0xf7a523){const _0x52f4c9=a6_0x993b,_0x3851f8=_0x3d1835();while(!![]){try{const _0x2ec69f=parseInt(_0x52f4c9(0x124))/0x1+parseInt(_0x52f4c9(0x12e))/0x2*(-parseInt(_0x52f4c9(0x127))/0x3)+-parseInt(_0x52f4c9(0x131))/0x4+-parseInt(_0x52f4c9(0x128))/0x5*(parseInt(_0x52f4c9(0x12d))/0x6)+-parseInt(_0x52f4c9(0x12c))/0x7*(parseInt(_0x52f4c9(0x12a))/0x8)+-parseInt(_0x52f4c9(0x12b))/0x9+parseInt(_0x52f4c9(0x125))/0xa*(parseInt(_0x52f4c9(0x123))/0xb);if(_0x2ec69f===_0xf7a523)break;else _0x3851f8['push'](_0x3851f8['shift']());}catch(_0x5bdc0d){_0x3851f8['push'](_0x3851f8['shift']());}}}(a6_0x1c8e,0x8e7e8));export const TOOL_NAMES={'EDIT_FILE':a6_0x26cb94(0x129),'CODEBASE_SEARCH':a6_0x26cb94(0x130),'GITHUB_CODEBASE_SEARCH':a6_0x26cb94(0x12f)};function a6_0x993b(_0x4706b7,_0xb0608d){_0x4706b7=_0x4706b7-0x123;const _0x1c8e05=a6_0x1c8e();let _0x993b5d=_0x1c8e05[_0x4706b7];return _0x993b5d;}export const ALL_TOOL_NAMES=Object[a6_0x26cb94(0x126)](TOOL_NAMES);export const KNOWN_TOOL_NAMES=new Set(ALL_TOOL_NAMES);function a6_0x1c8e(){const _0x333317=['134648lsnosQ','2376uARFOA','1103380xAVDWM','89620rJpmPk','values','986103xbgqBg','815755BttFbr','edit_file','5941480XnllqA','3344058OwfCxD','7mGggJu','36OtWXKj','2LMkONS','github_codebase_search','codebase_search'];a6_0x1c8e=function(){return _0x333317;};return a6_0x1c8e();}
1
+ function a6_0x341e(_0xe53c0d,_0x5c4687){_0xe53c0d=_0xe53c0d-0x1e7;const _0x3409a3=a6_0x3409();let _0x341e03=_0x3409a3[_0xe53c0d];return _0x341e03;}function a6_0x3409(){const _0x1cb473=['3VRZsqz','filter','1013288VyEXcv','1461964myjNFO','DISABLED_TOOLS','edit_file','toLowerCase','9uXkeAk','trim','map','17251oCxImA','values','github_codebase_search','908658tKIYCZ','ENABLED_TOOLS','2078252UksVOU','11623510rWkSsw','40lszyVb','all','has','CODEBASE_SEARCH','add','916485oVDaLp'];a6_0x3409=function(){return _0x1cb473;};return a6_0x3409();}const a6_0x20c2cf=a6_0x341e;(function(_0x261a01,_0x1818f5){const _0x1ee0a2=a6_0x341e,_0x26b395=_0x261a01();while(!![]){try{const _0x2a32c9=parseInt(_0x1ee0a2(0x1f6))/0x1*(parseInt(_0x1ee0a2(0x1fd))/0x2)+parseInt(_0x1ee0a2(0x1ec))/0x3*(-parseInt(_0x1ee0a2(0x1fb))/0x4)+-parseInt(_0x1ee0a2(0x1eb))/0x5+-parseInt(_0x1ee0a2(0x1f9))/0x6+-parseInt(_0x1ee0a2(0x1ef))/0x7+parseInt(_0x1ee0a2(0x1ee))/0x8+-parseInt(_0x1ee0a2(0x1f3))/0x9*(-parseInt(_0x1ee0a2(0x1fc))/0xa);if(_0x2a32c9===_0x1818f5)break;else _0x26b395['push'](_0x26b395['shift']());}catch(_0x3dcc41){_0x26b395['push'](_0x26b395['shift']());}}}(a6_0x3409,0x8b5fd));export const TOOL_NAMES={'EDIT_FILE':a6_0x20c2cf(0x1f1),'CODEBASE_SEARCH':'codebase_search','GITHUB_CODEBASE_SEARCH':a6_0x20c2cf(0x1f8)};export const ALL_TOOL_NAMES=Object[a6_0x20c2cf(0x1f7)](TOOL_NAMES);export const KNOWN_TOOL_NAMES=new Set(ALL_TOOL_NAMES);export const LEGACY_TOOL_ALIASES={'warpgrep_codebase_search':TOOL_NAMES[a6_0x20c2cf(0x1e9)],'warpgrep_github_search':TOOL_NAMES['GITHUB_CODEBASE_SEARCH']};function parseToolList(_0x252ae7){const _0x34d896=a6_0x20c2cf;if(!_0x252ae7)return[];return _0x252ae7['split'](',')[_0x34d896(0x1f5)](_0x22dafa=>_0x22dafa[_0x34d896(0x1f4)]())[_0x34d896(0x1ed)](_0x4ca6ed=>_0x4ca6ed['length']>0x0)[_0x34d896(0x1f5)](_0x4a4824=>LEGACY_TOOL_ALIASES[_0x4a4824]??_0x4a4824);}export function resolveToolFilter(_0x49466f){const _0x105928=a6_0x20c2cf,_0x69c0db=_0x49466f[_0x105928(0x1fa)]?.['trim'](),_0x15011b=_0x69c0db&&_0x69c0db[_0x105928(0x1f2)]()!==_0x105928(0x1e7)?parseToolList(_0x69c0db):undefined,_0x3a64d7=parseToolList(_0x49466f[_0x105928(0x1f0)]),_0x2e6d7f=[..._0x15011b??[],..._0x3a64d7][_0x105928(0x1ed)](_0x5d1cfd=>!KNOWN_TOOL_NAMES[_0x105928(0x1e8)](_0x5d1cfd)),_0x44229a=new Set(_0x3a64d7);if(_0x15011b){const _0x6179e5=new Set(_0x15011b);for(const _0x24f00b of ALL_TOOL_NAMES)if(!_0x6179e5['has'](_0x24f00b))_0x44229a[_0x105928(0x1ea)](_0x24f00b);}return{'disabled':_0x44229a,'unknown':_0x2e6d7f};}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphllm/morphmcp",
3
- "version": "0.8.215",
3
+ "version": "0.8.217",
4
4
  "description": "Fast & accurate MCP server with AI-powered file editing and intelligent code search. Prevents context pollution and saves time for a better user experience.",
5
5
  "license": "MIT",
6
6
  "author": "Morph (https://morphllm.com)",
@@ -35,7 +35,7 @@
35
35
  "dependencies": {
36
36
  "@google/generative-ai": "^0.21.0",
37
37
  "@modelcontextprotocol/sdk": "^1.12.3",
38
- "@morphllm/morphsdk": "0.2.198",
38
+ "@morphllm/morphsdk": "0.2.199",
39
39
  "@vscode/ripgrep": "^1.15.14",
40
40
  "axios": "^1.6.0",
41
41
  "chalk": "^5.3.0",