@morphllm/morphmcp 0.8.182 → 0.8.184
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/dist/index.js +1 -1
- package/dist/log-utils.js +1 -1
- package/dist/logger.js +1 -1
- package/dist/path-utils.js +1 -1
- package/dist/path-validation.js +1 -1
- package/dist/roots-utils.js +1 -1
- package/dist/tool-definitions.js +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const a0_0x240656=a0_0x1a82;(function(_0x43a044,_0x3fc623){const _0x530a01=a0_0x1a82,_0x54915c=_0x43a044();while(!![]){try{const _0x3019d0=parseInt(_0x530a01(0x232))/0x1+parseInt(_0x530a01(0x19e))/0x2+-parseInt(_0x530a01(0x196))/0x3+-parseInt(_0x530a01(0x249))/0x4*(-parseInt(_0x530a01(0x1a3))/0x5)+-parseInt(_0x530a01(0x24c))/0x6*(-parseInt(_0x530a01(0x299))/0x7)+parseInt(_0x530a01(0x1f6))/0x8+-parseInt(_0x530a01(0x1c6))/0x9*(parseInt(_0x530a01(0x25c))/0xa);if(_0x3019d0===_0x3fc623)break;else _0x54915c['push'](_0x54915c['shift']());}catch(_0x26494d){_0x54915c['push'](_0x54915c['shift']());}}}(a0_0x4719,0x19445));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_0x5207e6 from'fs/promises';import a0_0x4c88d7 from'path';import a0_0x1ee4d4 from'os';import{createRequire}from'module';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{getValidRootDirectories}from'./roots-utils.js';import{getOperatingSystemType,logMcpStderr}from'./log-utils.js';import{logger}from'./logger.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider,GITHUB_SEARCH_TOOL_NAME,GITHUB_SEARCH_DESCRIPTION}from'@morphllm/morphsdk/tools/warp-grep';import{WarpGrepClient,formatResult}from'@morphllm/morphsdk/tools/warp-grep/client';import{compactFileContexts}from'@morphllm/morphsdk/tools/compact';import a0_0x4832c4 from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES}from'./tool-definitions.js';function fixPathRepetition(_0x4a222b){const _0x3e8997=a0_0x1a82,_0x40ea2e=_0x4a222b[_0x3e8997(0x296)](a0_0x4c88d7['sep'])['filter'](Boolean);if(_0x40ea2e[_0x3e8997(0x19a)]<0x2)return null;for(let _0x539993=Math[_0x3e8997(0x1bd)](_0x40ea2e['length']/0x2);_0x539993>=0x1;_0x539993--){for(let _0x50f340=0x0;_0x50f340<=_0x40ea2e[_0x3e8997(0x19a)]-0x2*_0x539993;_0x50f340++){const _0xbb88d5=_0x40ea2e[_0x3e8997(0x199)](_0x50f340,_0x50f340+_0x539993),_0x14d241=_0x40ea2e['slice'](_0x50f340+_0x539993,_0x50f340+0x2*_0x539993);if(_0xbb88d5[_0x3e8997(0x23f)]((_0x564552,_0x4fe823)=>_0x564552===_0x14d241[_0x4fe823])){const _0x472d4b=[..._0x40ea2e[_0x3e8997(0x199)](0x0,_0x50f340),..._0x40ea2e[_0x3e8997(0x199)](_0x50f340+_0x539993)];return a0_0x4c88d7[_0x3e8997(0x27c)]+_0x472d4b[_0x3e8997(0x20e)](a0_0x4c88d7['sep']);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x25929f=a0_0x1a82;try{const _0x5e2d13=require(_0x25929f(0x263));return _0x5e2d13['version']??_0x25929f(0x1af);}catch(_0x4406aa){return logMcpStderr(_0x25929f(0x29e),_0x4406aa),_0x25929f(0x1af);}}function printHelp(){const _0x19ed23=a0_0x1a82;console[_0x19ed23(0x292)]('@morphllm/morphmcp\x20'+getPackageVersion()),console[_0x19ed23(0x292)](_0x19ed23(0x293)),console[_0x19ed23(0x292)]('\x0aOptions:'),console[_0x19ed23(0x292)](_0x19ed23(0x1e8)),console['log'](_0x19ed23(0x298)),console[_0x19ed23(0x292)](_0x19ed23(0x262)),console[_0x19ed23(0x292)](_0x19ed23(0x1ab)),console[_0x19ed23(0x292)](_0x19ed23(0x1bf)),console['log'](_0x19ed23(0x1b7));}const cliArgs=process[a0_0x240656(0x1a9)]['slice'](0x2),VERSION_FLAGS=new Set([a0_0x240656(0x18b),'-v','-V']),HELP_FLAGS=new Set(['--help','-h']);cliArgs[a0_0x240656(0x1c3)](_0x247935=>VERSION_FLAGS['has'](_0x247935))&&(console[a0_0x240656(0x292)](a0_0x240656(0x193)+getPackageVersion()),process['exit'](0x0));cliArgs[a0_0x240656(0x1c3)](_0x564fed=>HELP_FLAGS['has'](_0x564fed))&&(printHelp(),process['exit'](0x0));function getCliArg(_0x2f90d0){const _0x1cf539=a0_0x240656;for(let _0x5953a3=0x0;_0x5953a3<cliArgs[_0x1cf539(0x19a)];_0x5953a3++){const _0xf0309f=cliArgs[_0x5953a3];if(_0xf0309f[_0x1cf539(0x1c4)]('--'+_0x2f90d0+'='))return _0xf0309f[_0x1cf539(0x199)](('--'+_0x2f90d0+'=')[_0x1cf539(0x19a)]);if(_0xf0309f==='--'+_0x2f90d0&&_0x5953a3+0x1<cliArgs[_0x1cf539(0x19a)])return cliArgs[_0x5953a3+0x1];}return undefined;}const args=[];for(let i=0x0;i<cliArgs[a0_0x240656(0x19a)];i++){const arg=cliArgs[i];if(VERSION_FLAGS[a0_0x240656(0x204)](arg)||HELP_FLAGS[a0_0x240656(0x204)](arg))continue;if(arg['startsWith'](a0_0x240656(0x267)))continue;if(arg===a0_0x240656(0x22b)){i++;continue;}args[a0_0x240656(0x1a2)](arg);}const WORKSPACE_ROOT=process['env'][a0_0x240656(0x184)]||process[a0_0x240656(0x190)]['PWD']||process[a0_0x240656(0x197)](),ENABLE_WORKSPACE_MODE=process[a0_0x240656(0x190)][a0_0x240656(0x1d7)]!==a0_0x240656(0x28f),MORPH_API_KEY=getCliArg('api-key')??process[a0_0x240656(0x190)][a0_0x240656(0x1a1)],MORPH_API_URL=process[a0_0x240656(0x190)]['MORPH_API_URL'],MORPH_LARGE_APPLY=process[a0_0x240656(0x190)][a0_0x240656(0x244)]!==a0_0x240656(0x28f),MORPH_WARP_GREP_TIMEOUT=process[a0_0x240656(0x190)][a0_0x240656(0x24b)]?parseInt(process[a0_0x240656(0x190)]['MORPH_WARP_GREP_TIMEOUT'],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),DEFAULT_DISABLED_TOOLS=new Set(),DISABLED_TOOLS=process[a0_0x240656(0x190)][a0_0x240656(0x1b1)]?new Set(process[a0_0x240656(0x190)]['DISABLED_TOOLS']['split'](',')[a0_0x240656(0x185)](_0x5b25cd=>_0x5b25cd[a0_0x240656(0x17f)]())['filter'](_0x31ad5f=>_0x31ad5f[a0_0x240656(0x19a)]>0x0)):DEFAULT_DISABLED_TOOLS;if(DISABLED_TOOLS[a0_0x240656(0x269)]>0x0){for(const tool of DISABLED_TOOLS){!KNOWN_TOOL_NAMES['has'](tool)&&console[a0_0x240656(0x29c)](a0_0x240656(0x243)+tool+a0_0x240656(0x17e)+[...KNOWN_TOOL_NAMES][a0_0x240656(0x20e)](',\x20'));}console[a0_0x240656(0x29c)](a0_0x240656(0x210)+[...DISABLED_TOOLS][a0_0x240656(0x20e)](',\x20'));}MORPH_API_KEY&&!MORPH_API_KEY['startsWith'](a0_0x240656(0x219))&&!MORPH_API_KEY[a0_0x240656(0x1c4)](a0_0x240656(0x19d))&&logMcpStderr(a0_0x240656(0x29a));async function reportMorphError(_0x144b41){const _0x2e95d2=a0_0x240656;try{await a0_0x4832c4['post'](_0x2e95d2(0x1ac),{..._0x144b41,'timestamp':new Date()[_0x2e95d2(0x1db)](),'source':_0x144b41[_0x2e95d2(0x1e0)]||'mcp-filesystem','os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x144b41[_0x2e95d2(0x257)]}},{'timeout':0x1388,'headers':{'Content-Type':_0x2e95d2(0x1c1),'Authorization':_0x2e95d2(0x226)+MORPH_API_KEY}});}catch{}}function a0_0x1a82(_0x42a8f6,_0x233d48){_0x42a8f6=_0x42a8f6-0x17d;const _0x4719ac=a0_0x4719();let _0x1a8236=_0x4719ac[_0x42a8f6];return _0x1a8236;}function extractStatusCode(_0x3820d7,_0x4c92f5){const _0x3ee3ad=a0_0x240656;if(_0x3820d7&&typeof _0x3820d7===_0x3ee3ad(0x286)&&'status'in _0x3820d7)return _0x3820d7[_0x3ee3ad(0x18c)];if(_0x3820d7&&typeof _0x3820d7==='object'&&_0x3ee3ad(0x291)in _0x3820d7)return _0x3820d7[_0x3ee3ad(0x291)]?.[_0x3ee3ad(0x18c)];const _0x2630e8=_0x4c92f5[_0x3ee3ad(0x2a4)](/\b(401|429)\b/);return _0x2630e8?parseInt(_0x2630e8[0x1],0xa):null;}function handleMorphAPIError(_0x5d8342){const _0x3f1a55=a0_0x240656,_0x489dbc=_0x5d8342 instanceof Error?_0x5d8342[_0x3f1a55(0x282)]:String(_0x5d8342),_0x1b92d8=extractStatusCode(_0x5d8342,_0x489dbc);switch(_0x1b92d8){case 0x191:return{'content':[{'type':_0x3f1a55(0x23e),'text':'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.'}],'isError':!![]};case 0x1ad:return{'content':[{'type':_0x3f1a55(0x23e),'text':_0x3f1a55(0x295)}],'isError':!![]};default:return null;}}args[a0_0x240656(0x19a)]===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr(a0_0x240656(0x29d)),logMcpStderr(a0_0x240656(0x283)),logMcpStderr(a0_0x240656(0x2a0)),logMcpStderr(a0_0x240656(0x297)),logMcpStderr('\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)'),logMcpStderr(a0_0x240656(0x1a8)));function normalizePath(_0x31a301){const _0x25a908=a0_0x240656;return a0_0x4c88d7[_0x25a908(0x273)](_0x31a301);}function expandHome(_0x346f65){const _0x4cbc47=a0_0x240656;if(_0x346f65[_0x4cbc47(0x1c4)]('~/')||_0x346f65==='~')return a0_0x4c88d7[_0x4cbc47(0x20e)](a0_0x1ee4d4['homedir'](),_0x346f65[_0x4cbc47(0x199)](0x1));return _0x346f65;}let allowedDirectories=await Promise[a0_0x240656(0x1f8)](args['map'](async _0x31d402=>{const _0x2c9171=a0_0x240656,_0x5091d6=expandHome(_0x31d402),_0x416676=a0_0x4c88d7[_0x2c9171(0x24a)](_0x5091d6);try{const _0x2edc74=await a0_0x5207e6[_0x2c9171(0x26c)](_0x416676);return normalizePath(_0x2edc74);}catch(_0x35da41){return normalizePath(_0x416676);}}));function a0_0x4719(){const _0x3bd627=['now','tool_call_id','description','\x22>\x0a','1457152PyXnbT','assistant','all','changes','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.','github_search_start','Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:','repo_path','go.mod','compaction_failed','stringify','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','Invalid\x20arguments:\x20','has','Error\x20accessing\x20directory\x20','Preview\x20changes\x20without\x20applying\x20them.','linesRemoved','new_string','catch','etimedout','metadata','parse','No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.','join','\x20as\x20allowed\x20directory','Disabled\x20tools:\x20','ReadError','Failed\x20to\x20read\x20file:\x20','-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','-\x20Read\x20file\x20`','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','runWarpGrep_call','warn','errors','sk-','content','list_directory\x20','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','\x20-\x20','owner_repo','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','search_string','github_url','array','composer.json','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.','Bearer\x20','Specific\x20commit\x20hash\x20to\x20search','includes','Unknown\x20error','-\x20Preserve\x20exact\x20indentation\x0a','--api-key','read\x20','\x0a</file>','tool_call_error','number','Repository\x20identifier','No\x20relevant\x20code\x20found\x20for\x20the\x20query.','60682WMICZA','readFile','path_validation_start','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','command','role','grep_search','.\x20Changes:\x20','lines','boolean',',\x20removed\x20','code','text','every','FileNotFound','package.json','list_directory','Warning:\x20DISABLED_TOOLS\x20contains\x20unknown\x20tool\x20\x22','MORPH_LARGE_APPLY','instructions','Relevant\x20context\x20found:','code_edit','Workspace\x20mode\x20enabled:\x20Using\x20','18788nqsmuH','resolve','MORPH_WARP_GREP_TIMEOUT','18rRmwVp','No\x20valid\x20root\x20directories\x20provided\x20by\x20client','path_validation_failed','path_validation_resolved','file_read_failed','setRequestHandler','safeParse','Parent\x20directory\x20does\x20not\x20exist:\x20','RipgrepNotAvailable','Here\x20is\x20the\x20content\x20of\x20files:\x0a','substring','context','connect','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','branch','API\x20error\x20(auth/rate-limit)','30JIxvQG','FileReadError','timings','Warning:\x20Workspace\x20fallback\x20failed:\x20','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','**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','\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit','../package.json','searchGitHub','provider_created','describe','--api-key=','filter','size','ms:','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20','realpath','Max\x20results\x20to\x20return','[github_codebase_search]\x20Failed\x20in\x20','path','Unknown\x20tool:\x20','[could\x20not\x20read\x20file:\x20','A\x20code\x20exploration\x20tool,\x20use\x20this\x20tool\x20when\x20exploring\x20an\x20unfamiliar\x20codebase,\x20and\x20you\x27re\x20unsure\x20of\x20the\x20exact\x20file\x20or\x20string\x20to\x20look\x20for.\x20This\x20tool\x20will\x20find\x20all\x20relevant\x20bits\x20of\x20code\x20given\x20a\x20natural\x20lanugage\x20description,\x20or\x20questin\x20of\x20the\x20thing\x20you\x27re\x20looking\x20for.\x20','normalize','roots','messages','Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode','\x0a...\x20(truncated,\x20total:\x20','tool_calls','Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\x20','tool_call_received','`\x20in\x20`','sep','Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','.\x20Path:\x20','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','enum','message','Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:','dryRun','MCP','object','files','morph-v3-fast','constructor','default','grep\x20\x27','toLowerCase','RipgrepError','.git','false','isArray','response','log','\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]','Cargo.toml','Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.','split','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit','271285AKedCS','Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27','github_codebase_search','error','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','Warning:\x20Unable\x20to\x20determine\x20package\x20version:','timeout','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','\x27\x20in\x20`','-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a','completed','match','edit_file','added\x20','timed\x20out','completionId','user','Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.','edit','ENOENT','PathError','SubToolError','\x20valid\x20directories','\x22.\x20Known\x20tools:\x20','trim','debug','ms.\x20Success:\x20','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','access','WORKSPACE_ROOT','map','SymlinkError','ToolException','BinaryFile','LocalRipgrepProvider','function','--version','status','-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a','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.','oninitialized','env','linesModified','finish','@morphllm/morphmcp\x20','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','inputSchema','230178uDlQqK','cwd','completed_with_file_errors','slice','length','mcp-filesystem','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','morph-','155738mrQHtn','\x20disabled\x20via\x20DISABLED_TOOLS','data','MORPH_API_KEY','push','80PFUbXa','basename','Morph\x20FastApply\x20failed\x20without\x20error\x20message','string','//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','argv','grep','\x0aExamples:','https://morphllm.com/api/error-report','TimeoutError','-\x20Listed\x20directory\x20`','unknown','CODEBASE_SEARCH','DISABLED_TOOLS','stack','target_file','Tool\x20','Fatal\x20error\x20running\x20server:','terminated','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','read','Failed\x20to\x20request\x20roots\x20from\x20client:','tool','tool_call_complete','glob\x20\x27','floor','UnknownError','\x20\x20morph-mcp','\x22\x20is\x20disabled\x20via\x20the\x20DISABLED_TOOLS\x20environment\x20variable\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.','application/json','Fallback:\x20Using\x20workspace\x20root\x20','some','startsWith','requiresApiKey','995679vOhSjR','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.','params','Example\x20format:\x0a','dirname','morph-mcp','node_modules','EDIT_FILE','exit','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','glob','isDirectory',',\x20modified\x20','<file\x20path=\x22','file_read_complete','success','indexOf','ENABLE_WORKSPACE_MODE','warp_grep_complete','arguments','optional','toISOString','payload','Parameters:\x0a','Tool\x20\x22','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','source','codebase_search','unknown\x20error','pattern','search_type','Morph\x20Edit\x20','linesAdded','morph-warp-grep-v2.1','\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)','GITHUB_CODEBASE_SEARCH','\x20(new\x20file)','instruction','Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','name','-\x20Glob\x20search\x20`','listRoots','terminationReason','File\x20read\x20error:'];a0_0x4719=function(){return _0x3bd627;};return a0_0x4719();}if(ENABLE_WORKSPACE_MODE&&args[a0_0x240656(0x19a)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories['push'](workspaceDir),logMcpStderr(a0_0x240656(0x248)+workspaceDir+a0_0x240656(0x20f)));}catch(a0_0x4d6634){logMcpStderr(a0_0x240656(0x279)+a0_0x4d6634);}async function detectWorkspaceRoot(_0x58c676){const _0x255f3d=a0_0x240656;let _0x55cda6=a0_0x4c88d7[_0x255f3d(0x24a)](_0x58c676);const _0x383395=[_0x255f3d(0x28e),'.vscode',_0x255f3d(0x241),_0x255f3d(0x294),'pyproject.toml',_0x255f3d(0x1fe),'.cursor','tsconfig.json',_0x255f3d(0x224)];while(_0x55cda6!==a0_0x4c88d7['dirname'](_0x55cda6)){for(const _0x521827 of _0x383395){const _0x1823aa=a0_0x4c88d7[_0x255f3d(0x20e)](_0x55cda6,_0x521827);try{return await a0_0x5207e6[_0x255f3d(0x183)](_0x1823aa),normalizePath(_0x55cda6);}catch{}}_0x55cda6=a0_0x4c88d7[_0x255f3d(0x1ca)](_0x55cda6);}return normalizePath(_0x58c676);}await Promise[a0_0x240656(0x1f8)](args[a0_0x240656(0x185)](async _0x434d89=>{const _0x54ba0a=a0_0x240656;try{const _0x30aeec=await a0_0x5207e6['stat'](expandHome(_0x434d89));!_0x30aeec[_0x54ba0a(0x1d1)]()&&(logMcpStderr(_0x54ba0a(0x21c)+_0x434d89+'\x20is\x20not\x20a\x20directory'),process[_0x54ba0a(0x1ce)](0x1));}catch(_0x537a6c){logMcpStderr(_0x54ba0a(0x205)+_0x434d89+':',_0x537a6c),process['exit'](0x1);}}));async function validatePath(_0x4fb9ea){const _0x35f60f=a0_0x240656,_0x47c244=expandHome(_0x4fb9ea),_0x550569=a0_0x4c88d7['resolve'](_0x47c244);logger[_0x35f60f(0x180)](_0x35f60f(0x285),_0x35f60f(0x234),{'raw_path':_0x4fb9ea,'absolute':_0x550569});try{const _0x3a4b76=await a0_0x5207e6[_0x35f60f(0x26c)](_0x550569);return logger[_0x35f60f(0x180)](_0x35f60f(0x285),'path_validation_resolved',{'resolved':_0x3a4b76,'symlink':_0x3a4b76!==_0x550569}),_0x3a4b76;}catch(_0x1e7816){if(_0x1e7816[_0x35f60f(0x23d)]===_0x35f60f(0x2ac)){const _0x2b2205=a0_0x4c88d7[_0x35f60f(0x1ca)](_0x550569);try{const _0x4940a6=await a0_0x5207e6[_0x35f60f(0x26c)](_0x2b2205),_0x21ba7b=a0_0x4c88d7[_0x35f60f(0x20e)](_0x4940a6,a0_0x4c88d7[_0x35f60f(0x1a4)](_0x550569));return logger[_0x35f60f(0x180)](_0x35f60f(0x285),_0x35f60f(0x24f),{'resolved':_0x21ba7b,'new_file':!![]}),_0x21ba7b;}catch{logger['error']('MCP',_0x35f60f(0x24e),{'raw_path':_0x4fb9ea,'error':_0x35f60f(0x253)+_0x2b2205});throw new Error(_0x35f60f(0x253)+_0x2b2205);}}logger[_0x35f60f(0x29c)]('MCP',_0x35f60f(0x24e),{'raw_path':_0x4fb9ea,'error':_0x1e7816[_0x35f60f(0x282)]});throw _0x1e7816;}}const MorphEditFileArgsSchema=z[a0_0x240656(0x286)]({'path':z[a0_0x240656(0x1a6)](),'code_edit':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](a0_0x240656(0x202)),'instruction':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](a0_0x240656(0x194)),'dryRun':z[a0_0x240656(0x23b)]()[a0_0x240656(0x28a)](![])['describe'](a0_0x240656(0x206))}),CODEBASE_SEARCH_QUERY_DESCRIPTION=a0_0x240656(0x225),WarpGrepArgsSchema=z['object']({'search_string':z[a0_0x240656(0x1a6)]()['describe'](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](a0_0x240656(0x21d)),'search_type':z[a0_0x240656(0x281)](['default',a0_0x240656(0x1cc)])[a0_0x240656(0x1da)]()['describe'](a0_0x240656(0x27d))}),WarpGrepGitHubArgsSchema=z[a0_0x240656(0x286)]({'search_string':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x1da)]()['describe'](a0_0x240656(0x1fa)),'owner_repo':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x1da)]()[a0_0x240656(0x266)](a0_0x240656(0x280)),'branch':z['string']()[a0_0x240656(0x1da)]()[a0_0x240656(0x266)](a0_0x240656(0x27e))}),CodebaseSearchArgsSchema=z[a0_0x240656(0x286)]({'query':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x240656(0x1a6)]()[a0_0x240656(0x266)](a0_0x240656(0x230)),'branch':z['string']()['optional']()[a0_0x240656(0x266)]('Branch\x20to\x20search\x20(uses\x20latest\x20commit)'),'commitHash':z['string']()['optional']()[a0_0x240656(0x266)](a0_0x240656(0x227)),'targetDirectories':z[a0_0x240656(0x223)](z[a0_0x240656(0x1a6)]())[a0_0x240656(0x28a)]([])[a0_0x240656(0x266)](a0_0x240656(0x259)),'limit':z[a0_0x240656(0x22f)]()[a0_0x240656(0x1da)]()[a0_0x240656(0x28a)](0xa)['describe'](a0_0x240656(0x26d))}),server=new Server({'name':a0_0x240656(0x1cb),'version':'0.2.0'},{'capabilities':{'tools':{}}});server[a0_0x240656(0x251)](ListToolsRequestSchema,async()=>{const _0x596c63=a0_0x240656,_0x5c3978=[{'name':TOOL_NAMES['EDIT_FILE'],'description':_0x596c63(0x261)+_0x596c63(0x1dd)+_0x596c63(0x1df)+_0x596c63(0x235)+_0x596c63(0x2a2)+_0x596c63(0x260)+_0x596c63(0x1c9)+_0x596c63(0x1a7)+'Rules:\x0a'+_0x596c63(0x18d)+_0x596c63(0x22a)+'-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a'+_0x596c63(0x213),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':TOOL_NAMES[_0x596c63(0x1b0)],'description':_0x596c63(0x272)+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+'Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20'+_0x596c63(0x26b)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'requiresApiKey':!![]}],_0x3fc4ca=_0x5c3978[_0x596c63(0x268)](_0x38ae22=>{const _0x499db5=_0x596c63;if(DISABLED_TOOLS[_0x499db5(0x204)](_0x38ae22[_0x499db5(0x1ed)]))return console[_0x499db5(0x29c)](_0x499db5(0x1b4)+_0x38ae22[_0x499db5(0x1ed)]+_0x499db5(0x19f)),![];if(_0x499db5(0x1c5)in _0x38ae22&&_0x38ae22[_0x499db5(0x1c5)]&&!MORPH_API_KEY)return logMcpStderr('Warning:\x20'+_0x38ae22[_0x499db5(0x1ed)]+_0x499db5(0x1cf)),![];return!![];});return{'tools':_0x3fc4ca['map'](_0x2a7b33=>({'name':_0x2a7b33[_0x596c63(0x1ed)],'description':_0x2a7b33[_0x596c63(0x1f4)],'inputSchema':_0x2a7b33[_0x596c63(0x195)]}))};}),server['setRequestHandler'](CallToolRequestSchema,async _0x26e4a5=>{const _0x426f0e=a0_0x240656,{name:_0x5e3c72,arguments:_0x4aeb44}=_0x26e4a5[_0x426f0e(0x1c8)],_0x19a68a=Date[_0x426f0e(0x1f2)]();logger[_0x426f0e(0x180)]('MCP',_0x426f0e(0x27a),{'tool':_0x5e3c72,'args':_0x5e3c72==='edit_file'?{'path':_0x4aeb44?.[_0x426f0e(0x26f)],'instruction':_0x4aeb44?.['instruction']||_0x4aeb44?.[_0x426f0e(0x245)],'dryRun':_0x4aeb44?.[_0x426f0e(0x284)]}:_0x4aeb44});try{if(!MORPH_API_KEY)return{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x20d)}],'isError':!![]};if(!MORPH_API_KEY['startsWith']('sk-')&&!MORPH_API_KEY[_0x426f0e(0x1c4)](_0x426f0e(0x19d)))return{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x18e)}],'isError':!![]};if(DISABLED_TOOLS['has'](_0x5e3c72))return{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x1de)+_0x5e3c72+_0x426f0e(0x1c0)}],'isError':![]};switch(_0x5e3c72){case TOOL_NAMES[_0x426f0e(0x1cd)]:{let _0x347b27=_0x4aeb44;if(_0x347b27&&typeof _0x347b27==='object'){if(!(_0x426f0e(0x26f)in _0x347b27)){const _0x2be5e3=_0x347b27[_0x426f0e(0x1b3)]??_0x347b27['filePath']??_0x347b27['target_filepath']??_0x347b27['file_path']??_0x347b27['file'];if(_0x2be5e3)_0x347b27={..._0x347b27,'path':_0x2be5e3};}_0x426f0e(0x245)in _0x347b27&&!(_0x426f0e(0x1eb)in _0x347b27)&&(_0x347b27={..._0x347b27,'instruction':_0x347b27[_0x426f0e(0x245)]});if(!(_0x426f0e(0x247)in _0x347b27)){const _0x232689=_0x347b27[_0x426f0e(0x23d)]??_0x347b27[_0x426f0e(0x208)]??_0x347b27['content']??_0x347b27[_0x426f0e(0x2ab)];if(_0x232689)_0x347b27={..._0x347b27,'code_edit':_0x232689};}}const _0x29e50c=MorphEditFileArgsSchema[_0x426f0e(0x252)](_0x347b27);if(!_0x29e50c[_0x426f0e(0x1d5)])throw new Error('Invalid\x20arguments\x20for\x20morph_edit_file:\x20'+_0x29e50c[_0x426f0e(0x29c)]);const _0x44db33=await validatePath(_0x29e50c['data'][_0x426f0e(0x26f)]);let _0x2a806c=null,_0x4721f4=!![],_0x552c58=null;try{_0x2a806c=await a0_0x5207e6[_0x426f0e(0x233)](_0x44db33,'utf-8'),logger['debug'](_0x426f0e(0x285),_0x426f0e(0x1d4),{'path':_0x44db33,'size_bytes':_0x2a806c[_0x426f0e(0x19a)]});}catch(_0x5caa45){const _0x23f4dd=_0x5caa45[_0x426f0e(0x23d)];_0x23f4dd===_0x426f0e(0x2ac)?(_0x4721f4=![],_0x2a806c='',logger['debug'](_0x426f0e(0x285),'file_read_complete',{'path':_0x44db33,'exists':![]})):(_0x552c58=_0x426f0e(0x212)+(_0x23f4dd||_0x426f0e(0x1af))+_0x426f0e(0x21e)+(_0x5caa45 instanceof Error?_0x5caa45[_0x426f0e(0x282)]:String(_0x5caa45)),logger[_0x426f0e(0x29c)](_0x426f0e(0x285),_0x426f0e(0x250),{'path':_0x44db33,'error':_0x552c58}),logMcpStderr('Warning:\x20'+_0x552c58));}let _0x57c52a;try{const _0x467539=MORPH_API_KEY;if(!_0x467539)throw new Error('MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.');const _0x434b46=a0_0x4c88d7[_0x426f0e(0x1ca)](_0x44db33),_0xba21c=a0_0x4c88d7[_0x426f0e(0x1a4)](_0x44db33);logger[_0x426f0e(0x180)](_0x426f0e(0x285),'api_request_start',{'model':_0x426f0e(0x288),'path':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x26f)],'instruction_len':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x1eb)]['length'],'code_edit_len':_0x29e50c['data'][_0x426f0e(0x247)][_0x426f0e(0x19a)],'original_code_len':_0x2a806c?.['length']??0x0,'dry_run':_0x29e50c[_0x426f0e(0x1a0)]['dryRun']});const _0x67ddb8=Date[_0x426f0e(0x1f2)](),_0x23f2bd=await executeEditFile({'target_filepath':_0xba21c,'code_edit':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x247)],'instruction':_0x29e50c['data'][_0x426f0e(0x1eb)]},{'morphApiKey':_0x467539,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x434b46,'autoWrite':!_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x284)],'generateUdiff':![],'debug':![]}),_0x221939=Date[_0x426f0e(0x1f2)]()-_0x67ddb8;_0x57c52a=_0x23f2bd[_0x426f0e(0x2a8)];if(!_0x23f2bd['success'])throw new Error(_0x23f2bd[_0x426f0e(0x29c)]||_0x426f0e(0x1a5));const _0x4fa55d=_0x23f2bd[_0x426f0e(0x1f9)],_0x1a42e0=_0x426f0e(0x2a6)+_0x4fa55d[_0x426f0e(0x1e6)]+_0x426f0e(0x23c)+_0x4fa55d[_0x426f0e(0x207)]+_0x426f0e(0x1d2)+_0x4fa55d[_0x426f0e(0x191)];logger[_0x426f0e(0x180)](_0x426f0e(0x285),_0x426f0e(0x1bb),{'tool':'edit_file','success':!![],'latency_ms':Date[_0x426f0e(0x1f2)]()-_0x19a68a,'edit_latency_ms':_0x221939,'changes':{'added':_0x4fa55d[_0x426f0e(0x1e6)],'removed':_0x4fa55d[_0x426f0e(0x207)],'modified':_0x4fa55d[_0x426f0e(0x191)]},'completion_id':_0x57c52a});if(_0x29e50c[_0x426f0e(0x1a0)]['dryRun'])return{'content':[{'type':'text','text':'Morph\x20Edit\x20Preview'+(_0x4721f4?'':_0x426f0e(0x1ea))+':\x20'+_0x29e50c['data'][_0x426f0e(0x1eb)]+_0x426f0e(0x239)+_0x1a42e0+_0x426f0e(0x27f)+_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x26f)]+'.'}]};return{'content':[{'type':'text','text':_0x426f0e(0x1e5)+(_0x4721f4?'Applied':'Created\x20File')+':\x20'+_0x29e50c[_0x426f0e(0x1a0)]['instruction']+_0x426f0e(0x239)+_0x1a42e0+_0x426f0e(0x27f)+_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x26f)]+'.'}]};}catch(_0x1a6928){const _0x3cd8a9=handleMorphAPIError(_0x1a6928);if(_0x3cd8a9)return logger[_0x426f0e(0x29c)]('MCP',_0x426f0e(0x22e),{'tool':_0x426f0e(0x2a5),'error':_0x426f0e(0x25b),'latency_ms':Date[_0x426f0e(0x1f2)]()-_0x19a68a}),_0x3cd8a9;const _0x58c548=_0x1a6928 instanceof Error?_0x1a6928['message']:String(_0x1a6928);return logger[_0x426f0e(0x29c)](_0x426f0e(0x285),_0x426f0e(0x22e),{'tool':_0x426f0e(0x2a5),'error':_0x58c548,'path':_0x29e50c[_0x426f0e(0x1a0)]['path'],'validated_path':_0x44db33,'latency_ms':Date[_0x426f0e(0x1f2)]()-_0x19a68a,'stack':_0x1a6928 instanceof Error?_0x1a6928[_0x426f0e(0x1b2)]:undefined}),reportMorphError({'error_message':_0x58c548,'error_type':_0x1a6928 instanceof Error?_0x1a6928[_0x426f0e(0x289)][_0x426f0e(0x1ed)]:_0x426f0e(0x1be),'context':{'tool':_0x426f0e(0x2a5),'completion_id':_0x57c52a,'file_path':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x26f)],'validated_path':_0x44db33,'instruction':_0x29e50c[_0x426f0e(0x1a0)]['instruction'],'model':MORPH_LARGE_APPLY?'morph-v3-large':_0x426f0e(0x288),'dry_run':_0x29e50c['data']['dryRun'],'file_exists':_0x4721f4,'file_read_error':_0x552c58,'file_readable':_0x2a806c!==null,'request_content':{'path':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x26f)],'code_edit':_0x29e50c[_0x426f0e(0x1a0)][_0x426f0e(0x247)],'instruction':_0x29e50c['data'][_0x426f0e(0x1eb)],'original_code':_0x2a806c!==null?_0x2a806c[_0x426f0e(0x19a)]>0xc350?_0x2a806c[_0x426f0e(0x256)](0x0,0xc350)+_0x426f0e(0x277)+_0x2a806c[_0x426f0e(0x19a)]+'\x20chars)':_0x2a806c:_0x426f0e(0x271)+(_0x552c58||_0x426f0e(0x1e2))+']','original_code_length':_0x2a806c?.['length']??0x0,'model':MORPH_LARGE_APPLY?'morph-v3-large':_0x426f0e(0x288),'dry_run':_0x29e50c['data'][_0x426f0e(0x284)]}},'stack_trace':_0x1a6928 instanceof Error?_0x1a6928[_0x426f0e(0x1b2)]:undefined,'source':_0x426f0e(0x19b)})[_0x426f0e(0x209)](()=>{}),{'content':[{'type':_0x426f0e(0x23e),'text':'❌\x20Morph\x20Edit\x20Failed:\x20'+_0x58c548}],'isError':!![]};}}case TOOL_NAMES['CODEBASE_SEARCH']:{const _0x16d1c7=WarpGrepArgsSchema[_0x426f0e(0x252)](_0x4aeb44);if(!_0x16d1c7['success'])return{'content':[{'type':'text','text':_0x426f0e(0x203)+_0x16d1c7[_0x426f0e(0x29c)]}],'isError':!![]};const _0x2f695c=_0x2ca39e=>{const _0x2e5e51=_0x426f0e,_0x4af8cd=[];for(const _0x3b0a94 of _0x2ca39e||[]){if(_0x3b0a94[_0x2e5e51(0x237)]===_0x2e5e51(0x1f7)&&Array['isArray'](_0x3b0a94[_0x2e5e51(0x278)]))for(const _0x3098a2 of _0x3b0a94[_0x2e5e51(0x278)]){try{const _0x3222af=_0x3098a2[_0x2e5e51(0x18a)]?.[_0x2e5e51(0x1ed)],_0x170498=JSON['parse'](_0x3098a2['function']?.[_0x2e5e51(0x1d9)]||'{}');if(_0x3222af==='grep_search')_0x4af8cd[_0x2e5e51(0x1a2)](_0x2e5e51(0x28b)+_0x170498['pattern']+'\x27\x20'+(_0x170498[_0x2e5e51(0x26f)]||'.'));else{if(_0x3222af==='read')_0x4af8cd[_0x2e5e51(0x1a2)](_0x2e5e51(0x22c)+_0x170498[_0x2e5e51(0x26f)]);else{if(_0x3222af===_0x2e5e51(0x242))_0x4af8cd[_0x2e5e51(0x1a2)](_0x2e5e51(0x21b)+(_0x170498['command']||'.'));else{if(_0x3222af===_0x2e5e51(0x1d0))_0x4af8cd[_0x2e5e51(0x1a2)](_0x2e5e51(0x1bc)+_0x170498['pattern']+'\x27\x20'+(_0x170498['path']||'.'));else _0x3222af===_0x2e5e51(0x192)&&_0x4af8cd[_0x2e5e51(0x1a2)](_0x2e5e51(0x192));}}}}catch{}}}return _0x4af8cd;},_0x5a292d=_0x4c581a=>{const _0x510d34=_0x426f0e,_0x3df306=[];if(!_0x4c581a||!Array[_0x510d34(0x290)](_0x4c581a))return _0x3df306;const _0x3db5d3=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x510d34(0x240),'tool':_0x510d34(0x1b8)},{'pattern':/\[PATH ERROR\]/,'error_type':_0x510d34(0x2ad),'tool':_0x510d34(0x1b8)},{'pattern':/\[READ ERROR\]/,'error_type':_0x510d34(0x211),'tool':'read'},{'pattern':/\[UNREADABLE FILE\]/,'error_type':_0x510d34(0x188),'tool':_0x510d34(0x1b8)},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x510d34(0x28d),'tool':_0x510d34(0x1aa)},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x510d34(0x254),'tool':_0x510d34(0x1aa)},{'pattern':/\[BINARY FILE\]/,'error_type':_0x510d34(0x188),'tool':_0x510d34(0x1b8)},{'pattern':/\[SYMLINK\]/,'error_type':_0x510d34(0x186),'tool':_0x510d34(0x1b8)},{'pattern':/not a text file/,'error_type':'BinaryFile','tool':'read'},{'pattern':/symbolic link/,'error_type':_0x510d34(0x186),'tool':_0x510d34(0x1b8)},{'pattern':/Error reading file:/,'error_type':'ReadError','tool':_0x510d34(0x1b8)},{'pattern':/status="error"/,'error_type':_0x510d34(0x187),'tool':'unknown'}];let _0x1bc69a=0x0;for(const _0x4e136f of _0x4c581a){_0x4e136f[_0x510d34(0x237)]===_0x510d34(0x1f7)&&Array[_0x510d34(0x290)](_0x4e136f['tool_calls'])&&_0x1bc69a++;const _0x3084fa=_0x4e136f[_0x510d34(0x21a)];if((_0x4e136f[_0x510d34(0x237)]===_0x510d34(0x1ba)||_0x4e136f[_0x510d34(0x237)]===_0x510d34(0x2a9))&&_0x3084fa&&typeof _0x3084fa===_0x510d34(0x1a6))for(const {pattern:_0x460bc5,error_type:_0x10b821,tool:_0x5285c6}of _0x3db5d3){const _0x1e1117=_0x3084fa[_0x510d34(0x2a4)](new RegExp(_0x460bc5['source'],'g'));if(_0x1e1117)for(const _0x45e74c of _0x1e1117){const _0x591753=_0x3084fa[_0x510d34(0x1d6)](_0x45e74c),_0x410df5=_0x3084fa[_0x510d34(0x256)](_0x591753,Math['min'](_0x591753+0xc8,_0x3084fa[_0x510d34(0x19a)]));_0x3df306['push']({'tool':_0x5285c6,'error_type':_0x10b821,'error_message':_0x410df5[_0x510d34(0x296)]('\x0a')[0x0],'turn':_0x1bc69a});}}}return _0x3df306;};try{const _0xf48624=a0_0x4c88d7[_0x426f0e(0x24a)](_0x16d1c7[_0x426f0e(0x1a0)]['repo_path']),_0x2357ff=_0x16d1c7['data'][_0x426f0e(0x1e4)],_0xa86b20=_0x2357ff===_0x426f0e(0x1cc)?{'allowNames':[_0x426f0e(0x1cc)]}:undefined,_0x4892d1=new LocalRipgrepProvider(_0xf48624,undefined,_0xa86b20);logger['debug'](_0x426f0e(0x285),_0x426f0e(0x265),{'type':_0x426f0e(0x189),'repo_root':_0xf48624,'search_type':_0x2357ff||_0x426f0e(0x28a)}),logger['debug'](_0x426f0e(0x285),'warp_grep_start',{'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'repo_root':_0xf48624,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x1171c3=Date[_0x426f0e(0x1f2)](),_0x2f776b=await runWarpGrep({'searchTerm':_0x16d1c7[_0x426f0e(0x1a0)]['search_string'],'repoRoot':_0xf48624,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x4892d1,'search_type':_0x2357ff}),_0x5b637c=Date['now']()-_0x1171c3,_0x38b456=_0x2f776b[_0x426f0e(0x192)]?.['metadata']?.[_0x426f0e(0x287)]?.[_0x426f0e(0x19a)]??0x0;logger[_0x426f0e(0x180)](_0x426f0e(0x285),_0x426f0e(0x1d8),{'termination':_0x2f776b[_0x426f0e(0x1f0)],'turns':_0x2f776b[_0x426f0e(0x25e)]?.['turns']??0x0,'files_found':_0x38b456,'latency_ms':_0x5b637c});const _0x429363=_0x5a292d(_0x2f776b['messages']);_0x429363['length']>0x0&&reportMorphError({'error_message':'WarpGrep\x20sub-tool\x20errors:\x20'+_0x429363['length']+'\x20error(s)','error_type':_0x426f0e(0x2ae),'level':'warn','tool':'codebase_search','context':{'repo_path':_0x16d1c7['data'][_0x426f0e(0x1fd)],'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'model':'morph-warp-grep-v2.1','termination_reason':_0x2f776b['terminationReason'],'sub_tool_errors':_0x429363,'timings':_0x2f776b[_0x426f0e(0x25e)],'tool_calls':_0x2f695c(_0x2f776b[_0x426f0e(0x275)]),'messages':_0x2f776b[_0x426f0e(0x275)]?.['map'](_0x4e9a15=>({'role':_0x4e9a15[_0x426f0e(0x237)],'content':_0x4e9a15[_0x426f0e(0x21a)],..._0x4e9a15['tool_calls']?{'tool_calls':_0x4e9a15[_0x426f0e(0x278)][_0x426f0e(0x19a)]}:{},..._0x4e9a15['tool_call_id']?{'tool_call_id':_0x4e9a15[_0x426f0e(0x1f3)]}:{}}))},'source':_0x426f0e(0x19b)})[_0x426f0e(0x209)](()=>{});let _0x2e9d71='';if(_0x2f776b['terminationReason']===_0x426f0e(0x2a3)&&_0x2f776b['finish']?.[_0x426f0e(0x20b)]?.['files']){const _0x5dde31=_0x2f776b[_0x426f0e(0x192)][_0x426f0e(0x20b)][_0x426f0e(0x287)];if(_0x5dde31[_0x426f0e(0x19a)]===0x0)return _0x2e9d71=_0x2f776b[_0x426f0e(0x192)][_0x426f0e(0x1dc)]||_0x426f0e(0x231),{'content':[{'type':_0x426f0e(0x23e),'text':_0x2e9d71}]};const _0x4bca2e=[],_0xc53af1=[_0x426f0e(0x1fc)];for(const _0xc90277 of _0x2f776b[_0x426f0e(0x275)]){if(_0xc90277[_0x426f0e(0x237)]===_0x426f0e(0x1f7)&&Array[_0x426f0e(0x290)](_0xc90277[_0x426f0e(0x278)]))for(const _0x296f07 of _0xc90277['tool_calls']){try{const _0x4c06c9=_0x296f07['function']?.['name'],_0x4d8d3b=JSON[_0x426f0e(0x20c)](_0x296f07[_0x426f0e(0x18a)]?.[_0x426f0e(0x1d9)]||'{}');if(_0x4c06c9===_0x426f0e(0x238))_0xc53af1[_0x426f0e(0x1a2)]('-\x20Grepped\x20\x27'+_0x4d8d3b['pattern']+_0x426f0e(0x2a1)+(_0x4d8d3b[_0x426f0e(0x26f)]||'.')+'`');else{if(_0x4c06c9===_0x426f0e(0x1b8))_0xc53af1[_0x426f0e(0x1a2)](_0x426f0e(0x214)+_0x4d8d3b['path']+'`');else{if(_0x4c06c9==='list_directory')_0xc53af1[_0x426f0e(0x1a2)](_0x426f0e(0x1ae)+(_0x4d8d3b[_0x426f0e(0x236)]||'.')+'`');else _0x4c06c9==='glob'&&_0xc53af1[_0x426f0e(0x1a2)](_0x426f0e(0x1ee)+_0x4d8d3b[_0x426f0e(0x1e3)]+_0x426f0e(0x27b)+(_0x4d8d3b[_0x426f0e(0x26f)]||'.')+'`');}}}catch{}}}_0x4bca2e['push'](_0xc53af1['join']('\x0a'));const _0x13788c=['',_0x426f0e(0x246)];for(const _0x18dae2 of _0x5dde31){if(_0x18dae2['lines']==='*')_0x13788c['push']('-\x20'+_0x18dae2[_0x426f0e(0x26f)]+':*');else{if(Array['isArray'](_0x18dae2[_0x426f0e(0x23a)])){const _0x4a4963=_0x18dae2['lines']['map'](([_0xc04d59,_0xd17907])=>{if(_0xc04d59===_0xd17907)return''+_0xc04d59;return _0xc04d59+'-'+_0xd17907;});_0x13788c[_0x426f0e(0x1a2)]('-\x20'+_0x18dae2[_0x426f0e(0x26f)]+':'+_0x4a4963[_0x426f0e(0x20e)](','));}else _0x13788c[_0x426f0e(0x1a2)]('-\x20'+_0x18dae2[_0x426f0e(0x26f)]+':*');}}_0x13788c['push'](''),_0x4bca2e['push'](_0x13788c[_0x426f0e(0x20e)]('\x0a')),_0x4bca2e[_0x426f0e(0x1a2)](_0x426f0e(0x255));const _0x132000=[],_0x21b1a1=[];for(const _0x55adf9 of _0x5dde31){let _0xd86ef=a0_0x4c88d7[_0x426f0e(0x24a)](_0x16d1c7[_0x426f0e(0x1a0)]['repo_path'],_0x55adf9[_0x426f0e(0x26f)]),_0x1c0122=null,_0x3a3cb2=null;try{_0x1c0122=await a0_0x5207e6[_0x426f0e(0x233)](_0xd86ef,{'encoding':'utf-8'});}catch(_0x118fcb){const _0x3246ee=fixPathRepetition(_0xd86ef);if(_0x3246ee)try{_0x1c0122=await a0_0x5207e6[_0x426f0e(0x233)](_0x3246ee,{'encoding':'utf-8'}),_0xd86ef=_0x3246ee;}catch{_0x3a3cb2=_0x118fcb instanceof Error?_0x118fcb:new Error(String(_0x118fcb));}else _0x3a3cb2=_0x118fcb instanceof Error?_0x118fcb:new Error(String(_0x118fcb));}if(_0x1c0122!==null){const _0x553f07=_0x1c0122[_0x426f0e(0x296)](/\r?\n/),_0xcba27d=[];if(_0x55adf9[_0x426f0e(0x23a)]==='*'||!Array['isArray'](_0x55adf9['lines']))for(let _0x46f4b1=0x1;_0x46f4b1<=_0x553f07[_0x426f0e(0x19a)];_0x46f4b1++){const _0x1f16c3=_0x553f07[_0x46f4b1-0x1];_0xcba27d[_0x426f0e(0x1a2)](_0x46f4b1+'|\x20'+_0x1f16c3);}else for(const [_0x4f1697,_0x2a8ea5]of _0x55adf9['lines']){_0xcba27d[_0x426f0e(0x19a)]>0x0&&_0xcba27d[_0x426f0e(0x1a2)]('');for(let _0x3573c3=_0x4f1697;_0x3573c3<=_0x2a8ea5&&_0x3573c3<=_0x553f07[_0x426f0e(0x19a)];_0x3573c3++){const _0x16fbe7=_0x553f07[_0x3573c3-0x1];_0xcba27d[_0x426f0e(0x1a2)](_0x3573c3+'|\x20'+_0x16fbe7);}}_0x21b1a1[_0x426f0e(0x1a2)]({'path':_0x55adf9[_0x426f0e(0x26f)],'content':_0xcba27d[_0x426f0e(0x20e)]('\x0a')});}else _0x132000[_0x426f0e(0x1a2)](_0x426f0e(0x1d3)+_0x55adf9[_0x426f0e(0x26f)]+'\x22>\x0aError\x20reading\x20file:\x20'+(_0x3a3cb2?.[_0x426f0e(0x282)]||_0x426f0e(0x229))+_0x426f0e(0x22d));}try{const _0x2625aa=await compactFileContexts(_0x21b1a1,_0x16d1c7['data'][_0x426f0e(0x221)],MORPH_API_KEY,MORPH_API_URL);for(const _0x33ea4f of _0x2625aa){_0x132000[_0x426f0e(0x1a2)](_0x426f0e(0x1d3)+_0x33ea4f[_0x426f0e(0x26f)]+'\x22>\x0a'+_0x33ea4f['content']+'\x0a</file>');}}catch(_0x2ae193){logger[_0x426f0e(0x217)](_0x426f0e(0x285),_0x426f0e(0x1ff),{'error':_0x2ae193 instanceof Error?_0x2ae193[_0x426f0e(0x282)]:String(_0x2ae193),'files_count':_0x21b1a1[_0x426f0e(0x19a)]});for(const _0x3f9c3 of _0x21b1a1){_0x132000[_0x426f0e(0x1a2)](_0x426f0e(0x1d3)+_0x3f9c3[_0x426f0e(0x26f)]+_0x426f0e(0x1f5)+_0x3f9c3[_0x426f0e(0x21a)]+_0x426f0e(0x22d));}}_0x4bca2e[_0x426f0e(0x1a2)](_0x132000[_0x426f0e(0x20e)]('\x0a\x0a')),_0x2e9d71=_0x4bca2e[_0x426f0e(0x20e)]('\x0a');const _0x5e85e8=_0x2f776b[_0x426f0e(0x218)]?.[_0x426f0e(0x268)](_0x4d3762=>_0x4d3762[_0x426f0e(0x282)]?.['startsWith'](_0x426f0e(0x1f1)))||[];if(_0x5e85e8['length']>0x0){const _0x44a081=_0x5e85e8[_0x426f0e(0x185)](_0x44f1ea=>_0x44f1ea[_0x426f0e(0x282)])[_0x426f0e(0x20e)](';\x20');reportMorphError({'error_message':_0x44a081,'error_type':_0x426f0e(0x25d),'context':{'tool':_0x426f0e(0x1e1),'repo_path':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)],'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'model':'morph-warp-grep-v2.1','termination_reason':_0x426f0e(0x198),'error_count':_0x5e85e8[_0x426f0e(0x19a)],'is_timeout':![],'timings':_0x2f776b['timings'],'files_attempted':_0x5dde31[_0x426f0e(0x185)](_0x3dd36a=>({'path':_0x3dd36a[_0x426f0e(0x26f)],'lines':_0x3dd36a[_0x426f0e(0x23a)]})),'tool_calls':_0x2f695c(_0x2f776b[_0x426f0e(0x275)]),'messages':_0x2f776b['messages']?.[_0x426f0e(0x185)](_0x30d88f=>({'role':_0x30d88f[_0x426f0e(0x237)],'content':_0x30d88f['content'],..._0x30d88f[_0x426f0e(0x278)]?{'tool_calls':_0x30d88f[_0x426f0e(0x278)][_0x426f0e(0x19a)]}:{},..._0x30d88f[_0x426f0e(0x1f3)]?{'tool_call_id':_0x30d88f[_0x426f0e(0x1f3)]}:{}})),'request_content':{'query':_0x16d1c7[_0x426f0e(0x1a0)]['search_string'],'repo_path':_0x16d1c7['data'][_0x426f0e(0x1fd)],'repoRoot':a0_0x4c88d7[_0x426f0e(0x24a)](_0x16d1c7[_0x426f0e(0x1a0)]['repo_path']),'model':_0x426f0e(0x1e7)}},'source':_0x426f0e(0x19b)})[_0x426f0e(0x209)](()=>{});}}else{if(_0x2f776b[_0x426f0e(0x1f0)]===_0x426f0e(0x1b6)&&_0x2f776b[_0x426f0e(0x218)][_0x426f0e(0x19a)]>0x0){const _0x38ef2f=_0x2f776b[_0x426f0e(0x218)][_0x426f0e(0x185)](_0x1a34a4=>_0x1a34a4['message'])[_0x426f0e(0x20e)](';\x20');_0x2e9d71='Error:\x20'+_0x38ef2f;const _0x9daf02=_0x38ef2f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)](_0x426f0e(0x29f))||_0x38ef2f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)]('timed\x20out')||_0x38ef2f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)](_0x426f0e(0x20a)),_0x59290c=_0x2f776b[_0x426f0e(0x192)]?.[_0x426f0e(0x20b)]?.[_0x426f0e(0x287)],_0x434b84=_0x2f776b[_0x426f0e(0x218)][0x0];reportMorphError({'error_message':_0x38ef2f,'error_type':_0x9daf02?_0x426f0e(0x1ad):_0x434b84?.[_0x426f0e(0x289)]?.['name']||'WarpGrepError','context':{'tool':_0x426f0e(0x1e1),'repo_path':_0x16d1c7['data']['repo_path'],'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'model':_0x426f0e(0x1e7),'termination_reason':_0x2f776b[_0x426f0e(0x1f0)],'error_count':_0x2f776b[_0x426f0e(0x218)][_0x426f0e(0x19a)],'is_timeout':_0x9daf02,'timings':_0x2f776b['timings'],'files_attempted':_0x59290c?.[_0x426f0e(0x185)](_0x11adc7=>({'path':_0x11adc7[_0x426f0e(0x26f)],'lines':_0x11adc7['lines']})),'tool_calls':_0x2f695c(_0x2f776b['messages']),'messages':_0x2f776b['messages']?.[_0x426f0e(0x185)](_0x36bcd2=>({'role':_0x36bcd2['role'],'content':_0x36bcd2['content'],..._0x36bcd2['tool_calls']?{'tool_calls':_0x36bcd2[_0x426f0e(0x278)][_0x426f0e(0x19a)]}:{},..._0x36bcd2[_0x426f0e(0x1f3)]?{'tool_call_id':_0x36bcd2[_0x426f0e(0x1f3)]}:{}})),'request_content':{'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'repo_path':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)],'repoRoot':a0_0x4c88d7[_0x426f0e(0x24a)](_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)]),'model':_0x426f0e(0x1e7)}},'stack_trace':_0x434b84?.[_0x426f0e(0x1b2)]||undefined,'source':_0x426f0e(0x19b)})[_0x426f0e(0x209)](()=>{});}else _0x2e9d71=_0x426f0e(0x2aa);}return{'content':[{'type':_0x426f0e(0x23e),'text':_0x2e9d71}]};}catch(_0x2ecf41){const _0xf8af4e=handleMorphAPIError(_0x2ecf41);if(_0xf8af4e)return logger[_0x426f0e(0x29c)](_0x426f0e(0x285),_0x426f0e(0x22e),{'tool':_0x426f0e(0x1e1),'error':_0x426f0e(0x25b),'latency_ms':Date['now']()-_0x19a68a}),_0xf8af4e;const _0x4a223f=_0x2ecf41 instanceof Error?_0x2ecf41[_0x426f0e(0x282)]:String(_0x2ecf41);logger[_0x426f0e(0x29c)]('MCP',_0x426f0e(0x22e),{'tool':_0x426f0e(0x1e1),'error':_0x4a223f,'repo_path':_0x16d1c7['data'][_0x426f0e(0x1fd)],'query':_0x16d1c7[_0x426f0e(0x1a0)]['search_string'],'latency_ms':Date[_0x426f0e(0x1f2)]()-_0x19a68a});const _0x2fe6db=_0x4a223f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)](_0x426f0e(0x29f))||_0x4a223f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)](_0x426f0e(0x2a7))||_0x4a223f[_0x426f0e(0x28c)]()[_0x426f0e(0x228)](_0x426f0e(0x20a))||_0x2ecf41 instanceof Error&&_0x2ecf41[_0x426f0e(0x1ed)]===_0x426f0e(0x1ad);return reportMorphError({'error_message':_0x4a223f,'error_type':_0x2fe6db?_0x426f0e(0x1ad):_0x2ecf41 instanceof Error?_0x2ecf41[_0x426f0e(0x289)]['name']:_0x426f0e(0x1be),'context':{'tool':'codebase_search','repo_path':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)],'query':_0x16d1c7[_0x426f0e(0x1a0)]['search_string'],'model':_0x426f0e(0x1e7),'is_timeout':_0x2fe6db,'exception_phase':_0x426f0e(0x216),'request_content':{'query':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'repo_path':_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)],'repoRoot':a0_0x4c88d7['resolve'](_0x16d1c7[_0x426f0e(0x1a0)][_0x426f0e(0x1fd)]),'model':_0x426f0e(0x1e7)}},'stack_trace':_0x2ecf41 instanceof Error?_0x2ecf41[_0x426f0e(0x1b2)]:undefined,'source':_0x426f0e(0x19b)})[_0x426f0e(0x209)](()=>{}),{'content':[{'type':_0x426f0e(0x23e),'text':'Error\x20running\x20fast\x20context\x20search:\x20'+_0x4a223f}],'isError':![]};}}case TOOL_NAMES[_0x426f0e(0x1e9)]:{const _0x59c49a=WarpGrepGitHubArgsSchema[_0x426f0e(0x252)](_0x4aeb44);if(!_0x59c49a[_0x426f0e(0x1d5)])return{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x203)+_0x59c49a[_0x426f0e(0x29c)]}],'isError':!![]};const _0x5ed080=_0x59c49a['data'][_0x426f0e(0x222)]||_0x59c49a['data'][_0x426f0e(0x21f)];if(!_0x5ed080)return{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x182)}],'isError':!![]};const _0x2de418=MORPH_API_KEY;if(!_0x2de418)throw new Error(_0x426f0e(0x19c));const _0x32b20d=Date[_0x426f0e(0x1f2)]();logger[_0x426f0e(0x180)](_0x426f0e(0x285),_0x426f0e(0x1fb),{'identifier':_0x5ed080,'query':_0x59c49a[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'branch':_0x59c49a[_0x426f0e(0x1a0)]['branch']});try{const _0x1c5e93=new WarpGrepClient({'morphApiKey':_0x2de418,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x484191=await _0x1c5e93[_0x426f0e(0x264)]({'searchTerm':_0x59c49a['data'][_0x426f0e(0x221)],'github':_0x5ed080,'branch':_0x59c49a[_0x426f0e(0x1a0)][_0x426f0e(0x25a)]}),_0x5e6a5c=Date['now']()-_0x32b20d;logMcpStderr('[github_codebase_search]\x20Done\x20in\x20'+_0x5e6a5c+_0x426f0e(0x181)+_0x484191['success']);const _0x376aa2=formatResult(_0x484191);return{'content':[{'type':'text','text':_0x376aa2}]};}catch(_0x42fee7){const _0x5117e9=handleMorphAPIError(_0x42fee7);if(_0x5117e9)return _0x5117e9;const _0x2d9692=Date['now']()-_0x32b20d,_0x5dceb3=_0x42fee7 instanceof Error?_0x42fee7['message']:String(_0x42fee7);return logMcpStderr(_0x426f0e(0x26e)+_0x2d9692+_0x426f0e(0x26a),_0x5dceb3),reportMorphError({'error_message':_0x5dceb3,'error_type':_0x42fee7 instanceof Error?_0x42fee7[_0x426f0e(0x289)][_0x426f0e(0x1ed)]:_0x426f0e(0x1be),'context':{'tool':_0x426f0e(0x29b),'github_url':_0x5ed080,'search_string':_0x59c49a[_0x426f0e(0x1a0)][_0x426f0e(0x221)],'branch':_0x59c49a[_0x426f0e(0x1a0)]['branch']},'stack_trace':_0x42fee7 instanceof Error?_0x42fee7[_0x426f0e(0x1b2)]:undefined,'source':'mcp-filesystem','tool':'github_codebase_search','latency_ms':_0x2d9692})[_0x426f0e(0x209)](()=>{}),{'content':[{'type':_0x426f0e(0x23e),'text':'GitHub\x20search\x20failed:\x20'+_0x5dceb3}],'isError':![]};}}default:throw new Error(_0x426f0e(0x270)+_0x5e3c72);}}catch(_0x3f68ce){const _0x3b344f=_0x3f68ce instanceof Error?_0x3f68ce[_0x426f0e(0x282)]:String(_0x3f68ce);return reportMorphError({'error_message':_0x3b344f,'error_type':_0x3f68ce instanceof Error?_0x3f68ce['constructor']['name']:_0x426f0e(0x1be),'context':{'tool':_0x5e3c72,'arguments':_0x4aeb44?JSON[_0x426f0e(0x200)](_0x4aeb44)['substring'](0x0,0x1f4):undefined,'mcp_server_version':'0.2.0'},'stack_trace':_0x3f68ce instanceof Error?_0x3f68ce['stack']:undefined,'source':_0x426f0e(0x19b)})['catch'](()=>{}),{'content':[{'type':_0x426f0e(0x23e),'text':_0x426f0e(0x21c)+_0x3b344f}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x54321f){const _0x258869=a0_0x240656,_0x2a9324=await getValidRootDirectories(_0x54321f);if(_0x2a9324[_0x258869(0x19a)]>0x0)allowedDirectories=[..._0x2a9324],logMcpStderr('Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20'+_0x2a9324['length']+_0x258869(0x17d));else{logMcpStderr(_0x258869(0x24d));if(ENABLE_WORKSPACE_MODE)try{const _0x1f74dc=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x1f74dc&&(allowedDirectories=[_0x1f74dc],logMcpStderr(_0x258869(0x1c2)+_0x1f74dc));}catch(_0x94dbaf){logMcpStderr(_0x258869(0x25f)+_0x94dbaf);}}}server['setNotificationHandler'](RootsListChangedNotificationSchema,async()=>{const _0x345da7=a0_0x240656;try{const _0x549c5d=await server[_0x345da7(0x1ef)]();_0x549c5d&&'roots'in _0x549c5d&&await updateAllowedDirectoriesFromRoots(_0x549c5d['roots']);}catch(_0x56a4ea){logMcpStderr(_0x345da7(0x1b9),_0x56a4ea instanceof Error?_0x56a4ea[_0x345da7(0x282)]:String(_0x56a4ea));}}),server[a0_0x240656(0x18f)]=async()=>{const _0x2170ec=a0_0x240656,_0x8fb490=server['getClientCapabilities']();if(_0x8fb490?.[_0x2170ec(0x274)])try{const _0x2a7957=await server['listRoots']();_0x2a7957&&_0x2170ec(0x274)in _0x2a7957?await updateAllowedDirectoriesFromRoots(_0x2a7957[_0x2170ec(0x274)]):logMcpStderr('Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings');}catch(_0x327325){logMcpStderr(_0x2170ec(0x1ec),_0x327325 instanceof Error?_0x327325[_0x2170ec(0x282)]:String(_0x327325));}else{if(allowedDirectories[_0x2170ec(0x19a)]>0x0)logMcpStderr(_0x2170ec(0x201),allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr(_0x2170ec(0x276));else throw new Error(_0x2170ec(0x1c7));}}};async function runServer(){const _0x59153a=a0_0x240656,_0x25aecc=new StdioServerTransport();await server[_0x59153a(0x258)](_0x25aecc),logMcpStderr(_0x59153a(0x215)),allowedDirectories[_0x59153a(0x19a)]===0x0&&logMcpStderr(_0x59153a(0x220));}runServer()[a0_0x240656(0x209)](_0x2eaf9d=>{const _0x2f9cad=a0_0x240656;logMcpStderr(_0x2f9cad(0x1b5),_0x2eaf9d),process['exit'](0x1);});
|
|
2
|
+
const a0_0x40eb78=a0_0x1a61;(function(_0x1d60cf,_0x22b412){const _0x2cb1ab=a0_0x1a61,_0x4326be=_0x1d60cf();while(!![]){try{const _0x26ca07=parseInt(_0x2cb1ab(0x1b7))/0x1+-parseInt(_0x2cb1ab(0x156))/0x2+-parseInt(_0x2cb1ab(0xee))/0x3+parseInt(_0x2cb1ab(0x131))/0x4+parseInt(_0x2cb1ab(0x1d2))/0x5*(-parseInt(_0x2cb1ab(0x10b))/0x6)+parseInt(_0x2cb1ab(0x18f))/0x7*(parseInt(_0x2cb1ab(0x1d9))/0x8)+parseInt(_0x2cb1ab(0xce))/0x9*(-parseInt(_0x2cb1ab(0x1cf))/0xa);if(_0x26ca07===_0x22b412)break;else _0x4326be['push'](_0x4326be['shift']());}catch(_0x39dd08){_0x4326be['push'](_0x4326be['shift']());}}}(a0_0x3b61,0x22e97));import{Server}from'@modelcontextprotocol/sdk/server/index.js';function a0_0x1a61(_0x1d2a59,_0x47bc1e){_0x1d2a59=_0x1d2a59-0xbe;const _0x3b6171=a0_0x3b61();let _0x1a6124=_0x3b6171[_0x1d2a59];return _0x1a6124;}import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{CallToolRequestSchema,ListToolsRequestSchema,RootsListChangedNotificationSchema}from'@modelcontextprotocol/sdk/types.js';import a0_0x198608 from'fs/promises';import a0_0x41cd8c from'path';import a0_0x4b32b0 from'os';import{createRequire}from'module';import{z}from'zod';import{zodToJsonSchema}from'zod-to-json-schema';import{getValidRootDirectories}from'./roots-utils.js';import{getOperatingSystemType,logMcpStderr}from'./log-utils.js';import{logger}from'./logger.js';import{executeEditFile}from'@morphllm/morphsdk/tools/fastapply';import{runWarpGrep,LocalRipgrepProvider,GITHUB_SEARCH_TOOL_NAME,GITHUB_SEARCH_DESCRIPTION}from'@morphllm/morphsdk/tools/warp-grep';import{WarpGrepClient,formatResult}from'@morphllm/morphsdk/tools/warp-grep/client';import{compactFileContexts}from'@morphllm/morphsdk/tools/compact';import a0_0x3c6dee from'axios';import{KNOWN_TOOL_NAMES,TOOL_NAMES}from'./tool-definitions.js';function fixPathRepetition(_0x442863){const _0x222dc4=a0_0x1a61,_0x21b46e=_0x442863['split'](a0_0x41cd8c[_0x222dc4(0x1bf)])[_0x222dc4(0x173)](Boolean);if(_0x21b46e[_0x222dc4(0x148)]<0x2)return null;for(let _0x8a8726=Math[_0x222dc4(0x193)](_0x21b46e[_0x222dc4(0x148)]/0x2);_0x8a8726>=0x1;_0x8a8726--){for(let _0x5a77ff=0x0;_0x5a77ff<=_0x21b46e[_0x222dc4(0x148)]-0x2*_0x8a8726;_0x5a77ff++){const _0x58ae5d=_0x21b46e['slice'](_0x5a77ff,_0x5a77ff+_0x8a8726),_0xb27a8a=_0x21b46e[_0x222dc4(0xf6)](_0x5a77ff+_0x8a8726,_0x5a77ff+0x2*_0x8a8726);if(_0x58ae5d[_0x222dc4(0x115)]((_0x4c22f9,_0x2123a3)=>_0x4c22f9===_0xb27a8a[_0x2123a3])){const _0x54f9e3=[..._0x21b46e['slice'](0x0,_0x5a77ff),..._0x21b46e[_0x222dc4(0xf6)](_0x5a77ff+_0x8a8726)];return a0_0x41cd8c['sep']+_0x54f9e3[_0x222dc4(0xe4)](a0_0x41cd8c[_0x222dc4(0x1bf)]);}}}return null;}const require=createRequire(import.meta.url);function getPackageVersion(){const _0x2b82a4=a0_0x1a61;try{const _0x2ab66f=require(_0x2b82a4(0x114));return _0x2ab66f[_0x2b82a4(0x134)]??_0x2b82a4(0x125);}catch(_0x2af014){return logMcpStderr('Warning:\x20Unable\x20to\x20determine\x20package\x20version:',_0x2af014),_0x2b82a4(0x125);}}function printHelp(){const _0x3f8c68=a0_0x1a61;console[_0x3f8c68(0xe0)]('@morphllm/morphmcp\x20'+getPackageVersion()),console[_0x3f8c68(0xe0)]('\x0aUsage:\x20morph-mcp\x20[options]\x20[allowed-directory\x20...]'),console[_0x3f8c68(0xe0)](_0x3f8c68(0x161)),console['log']('\x20\x20--api-key\x20<key>\x20\x20Morph\x20API\x20key\x20(takes\x20priority\x20over\x20MORPH_API_KEY\x20env\x20var)'),console[_0x3f8c68(0xe0)](_0x3f8c68(0xe6)),console['log']('\x20\x20-v,\x20--version\x20\x20\x20\x20Print\x20version\x20and\x20exit'),console[_0x3f8c68(0xe0)]('\x0aExamples:'),console[_0x3f8c68(0xe0)](_0x3f8c68(0x169)),console[_0x3f8c68(0xe0)](_0x3f8c68(0x199));}const cliArgs=process[a0_0x40eb78(0xdd)][a0_0x40eb78(0xf6)](0x2),VERSION_FLAGS=new Set([a0_0x40eb78(0xc2),'-v','-V']),HELP_FLAGS=new Set([a0_0x40eb78(0x1bb),'-h']);cliArgs[a0_0x40eb78(0x1b5)](_0x157e4e=>VERSION_FLAGS[a0_0x40eb78(0xe5)](_0x157e4e))&&(console[a0_0x40eb78(0xe0)](a0_0x40eb78(0x1cc)+getPackageVersion()),process[a0_0x40eb78(0xfe)](0x0));cliArgs['some'](_0x33c525=>HELP_FLAGS[a0_0x40eb78(0xe5)](_0x33c525))&&(printHelp(),process['exit'](0x0));function getCliArg(_0x23bfbc){const _0x47f1de=a0_0x40eb78;for(let _0x2916f2=0x0;_0x2916f2<cliArgs[_0x47f1de(0x148)];_0x2916f2++){const _0x40d10f=cliArgs[_0x2916f2];if(_0x40d10f[_0x47f1de(0xff)]('--'+_0x23bfbc+'='))return _0x40d10f[_0x47f1de(0xf6)](('--'+_0x23bfbc+'=')[_0x47f1de(0x148)]);if(_0x40d10f==='--'+_0x23bfbc&&_0x2916f2+0x1<cliArgs[_0x47f1de(0x148)])return cliArgs[_0x2916f2+0x1];}return undefined;}const args=[];for(let i=0x0;i<cliArgs[a0_0x40eb78(0x148)];i++){const arg=cliArgs[i];if(VERSION_FLAGS[a0_0x40eb78(0xe5)](arg)||HELP_FLAGS[a0_0x40eb78(0xe5)](arg))continue;if(arg[a0_0x40eb78(0xff)]('--api-key='))continue;if(arg===a0_0x40eb78(0x1a7)){i++;continue;}args[a0_0x40eb78(0xfb)](arg);}const WORKSPACE_ROOT=process['env'][a0_0x40eb78(0x1b0)]||process[a0_0x40eb78(0x183)][a0_0x40eb78(0x126)]||process[a0_0x40eb78(0x177)](),ENABLE_WORKSPACE_MODE=process[a0_0x40eb78(0x183)]['ENABLE_WORKSPACE_MODE']!==a0_0x40eb78(0x132),MORPH_API_KEY=getCliArg(a0_0x40eb78(0x13e))??process[a0_0x40eb78(0x183)]['MORPH_API_KEY'],MORPH_API_URL=process[a0_0x40eb78(0x183)][a0_0x40eb78(0x182)],MORPH_LARGE_APPLY=process[a0_0x40eb78(0x183)][a0_0x40eb78(0x146)]!=='false',MORPH_WARP_GREP_TIMEOUT=process[a0_0x40eb78(0x183)][a0_0x40eb78(0x174)]?parseInt(process[a0_0x40eb78(0x183)][a0_0x40eb78(0x174)],0xa):undefined,OPERATING_SYSTEM_TYPE=getOperatingSystemType(),DEFAULT_DISABLED_TOOLS=new Set(),DISABLED_TOOLS=process[a0_0x40eb78(0x183)]['DISABLED_TOOLS']?new Set(process['env'][a0_0x40eb78(0x14a)][a0_0x40eb78(0x1af)](',')[a0_0x40eb78(0x1c4)](_0x22c6a8=>_0x22c6a8['trim']())['filter'](_0x17e983=>_0x17e983[a0_0x40eb78(0x148)]>0x0)):DEFAULT_DISABLED_TOOLS;if(DISABLED_TOOLS[a0_0x40eb78(0x1b4)]>0x0){for(const tool of DISABLED_TOOLS){!KNOWN_TOOL_NAMES['has'](tool)&&console[a0_0x40eb78(0x14e)](a0_0x40eb78(0xcd)+tool+a0_0x40eb78(0x10f)+[...KNOWN_TOOL_NAMES][a0_0x40eb78(0xe4)](',\x20'));}console[a0_0x40eb78(0x14e)](a0_0x40eb78(0xf8)+[...DISABLED_TOOLS]['join'](',\x20'));}function a0_0x3b61(){const _0x3e212b=['warp_grep_complete','finish','repo_path','Secure\x20MCP\x20Filesystem\x20Server\x20running\x20on\x20stdio','\x20disabled\x20via\x20DISABLED_TOOLS','FileNotFound','api-key','\x20valid\x20directories','added\x20','Parent\x20directory\x20does\x20not\x20exist:\x20','FileReadError',',\x20removed\x20','morph-warp-grep-v2.1','catch','MORPH_LARGE_APPLY','edit_file','length','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','DISABLED_TOOLS','inputSchema','grep\x20\x27','terminationReason','error','debug','github_codebase_search','\x20chars)','-\x20Read\x20file\x20`','File\x20read\x20error:','normalize','searchGitHub','125796KmnjRM','Unknown\x20tool:\x20','realpath','ms:','Warning:\x20Could\x20not\x20initialize\x20workspace\x20mode:\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','Warning:\x20Workspace\x20fallback\x20failed:\x20','terminated','Example\x20format:\x0a','assistant','roots','\x0aOptions:','message','composer.json','text','constructor','github_search_start','Morph\x20Edit\x20Preview','Fill\x20out\x20extra\x20details\x20that\x20you\x20as\x20a\x20smart\x20model\x20can\x20infer\x20in\x20the\x20question\x20to\x20aid\x20the\x20toolin\x20its\x20search.\x20','\x20\x20morph-mcp','file_path','Morph\x20Edit\x20','❌\x20Morph\x20Edit\x20Failed:\x20','morph-v3-fast','content','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.','Rules:\x0a','isArray','instruction','filter','MORPH_WARP_GREP_TIMEOUT','-\x20path:\x20Absolute\x20file\x20path\x20to\x20edit\x0a','runWarpGrep_call','cwd','\x20\x203.\x20Workspace\x20mode\x20(default\x20behavior,\x20set\x20ENABLE_WORKSPACE_MODE=false\x20to\x20disable)','\x20\x201.\x20Command-line\x20arguments\x20(shown\x20above)','string','compaction_failed','-\x20Grepped\x20\x27','.vscode','linesRemoved','Repository\x20owner/repo\x20shorthand\x20(e.g.\x20\x27vercel/next.js\x27).\x20You\x20must\x20provide\x20either\x20github_url\x20or\x20owner_repo.','Warning:\x20API\x20key\x20format\x20may\x20be\x20incorrect.\x20Morph\x20API\x20keys\x20typically\x20start\x20with\x20\x27sk-\x27\x20or\x20\x27morph-\x27','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','MORPH_API_URL','env','glob','timeout','changes','Changed\x20lines\x20with\x20minimal\x20context.\x20Use\x20placeholders\x20intelligently\x20like\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20to\x20represent\x20unchanged\x20code.','GitHub\x20search\x20failed:\x20','application/json','arguments','-\x20instruction:\x20Brief\x20first-person\x20description\x20of\x20what\x20you\x27re\x20changing\x0a','LocalRipgrepProvider','//\x20...\x20existing\x20code\x20...\x0aFIRST_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0aSECOND_EDIT\x0a//\x20...\x20existing\x20code\x20...\x0a\x0a','file_read_failed','20125uFRVcZ','setRequestHandler','substring','\x20tool\x20unavailable\x20-\x20MORPH_API_KEY\x20not\x20provided\x20in\x20MCP\x20config','floor','user','search_type','Invalid\x20arguments\x20for\x20morph_edit_file:\x20','path_validation_failed','toISOString','\x20\x20morph-mcp\x20--api-key\x20sk-xxx\x20~/repo','command','Invalid\x20arguments:\x20','Error\x20accessing\x20directory\x20','-\x20code_edit:\x20Only\x20the\x20changed\x20lines\x20with\x20//\x20...\x20existing\x20code\x20...\x20markers\x0a\x0a','-\x20Batch\x20multiple\x20edits\x20to\x20the\x20same\x20file\x20in\x20one\x20call\x0a','Updated\x20allowed\x20directories\x20from\x20MCP\x20roots:\x20','Workspace\x20mode\x20enabled:\x20Using\x20','Agent\x20completed\x20but\x20did\x20not\x20call\x20finish\x20tool.','post','\x20(new\x20file)','provider_created','morph-','array','--api-key','owner_repo','lines','BinaryFile','response','<file\x20path=\x22','filePath','API\x20error\x20(auth/rate-limit)','split','WORKSPACE_ROOT','\x20as\x20allowed\x20directory','Unknown\x20error','data','size','some','go.mod','80597GlPAUk','tool_call_received','utf-8','describe','--help','homedir','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.','readFile','sep','UnknownError','metadata','new_string','description','map','Tool\x20\x22','`\x20in\x20`','list_directory','basename','file','tool_calls','You\x20should\x20ALWAYS\x20use\x20this\x20tool\x20to\x20start\x20your\x20search.\x20','@morphllm/morphmcp\x20','stat','function','68790sPnTTK','0.2.0','parse','5WArbUS','glob\x20\x27','Morph\x20Fast\x20Context\x20subagent\x20performed\x20search\x20on\x20repository:','target_filepath','[could\x20not\x20read\x20file:\x20','TimeoutError','number','696IZyMzk','\x20\x202.\x20MCP\x20roots\x20protocol\x20(if\x20client\x20supports\x20it)','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.','tool_call_id','match','timed\x20out','Error:\x20','messages','Failed\x20to\x20request\x20initial\x20roots\x20from\x20client:','access','Fallback:\x20Using\x20workspace\x20root\x20','At\x20least\x20one\x20directory\x20must\x20be\x20provided\x20by\x20EITHER\x20method\x20for\x20the\x20server\x20to\x20operate.','Created\x20File','Authentication\x20failed:\x20Your\x20Morph\x20API\x20key\x20is\x20invalid\x20or\x20has\x20been\x20revoked.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20a\x20valid\x20API\x20key,\x20then\x20update\x20your\x20MCP\x20configuration.','.\x20Changes:\x20','instructions','\x0a</file>','now','EDIT_FILE','.git','MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.','target_file','branch','grep','--version','codebase_search','MCP','Usage:\x20mcp-server-filesystem\x20[allowed-directory]\x20[additional-directories...]','etimedout','RipgrepNotAvailable','source','node_modules','WarpGrepError','linesAdded','requiresApiKey','Warning:\x20DISABLED_TOOLS\x20contains\x20unknown\x20tool\x20\x22','144FgaqbT','Tool\x20','Filter\x20to\x20specific\x20directories,\x20empty\x20for\x20all','\x20error(s)','\x22>\x0aError\x20reading\x20file:\x20','role','No\x20relevant\x20code\x20found\x20for\x20the\x20query.','A\x20brief\x20single\x20first-person\x20sentence\x20instruction\x20describing\x20changes\x20being\x20made\x20to\x20this\x20file.\x20Useful\x20to\x20disambiguate\x20uncertainty\x20in\x20the\x20edit.','path','list_directory\x20','ENOENT','search_string','code','-\x20Glob\x20search\x20`','isDirectory','argv','Branch\x20to\x20search\x20(defaults\x20to\x20repo\x27s\x20default\x20branch)','grep_search','log','Parameters:\x0a','errors','SubToolError','join','has','\x20\x20-h,\x20--help\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help\x20message\x20and\x20exit','completed_with_file_errors','read','safeParse','enum','CODEBASE_SEARCH','SymlinkError','includes','423810RxIJmG','listRoots','optional','https://morphllm.com/api/error-report','object','Cargo.toml','-\x20ALWAYS\x20use\x20\x22//\x20...\x20existing\x20code\x20...\x22\x20for\x20unchanged\x20sections\x20(omitting\x20this\x20marker\x20will\x20cause\x20deletions)\x0a','\x0a...\x20(truncated,\x20total:\x20','slice','code_edit','Disabled\x20tools:\x20','success','files','push','pattern','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.','exit','startsWith','dirname','WarpGrep\x20sub-tool\x20errors:\x20','github_url','oninitialized','completed','tool_call_complete','Bearer\x20','Fatal\x20error\x20running\x20server:','Error\x20running\x20fast\x20context\x20search:\x20','mcp-filesystem','stack','130254dfScOn','tsconfig.json','Started\x20without\x20allowed\x20directories\x20-\x20waiting\x20for\x20client\x20to\x20provide\x20roots\x20via\x20MCP\x20protocol','Please\x20provide\x20github\x20search\x20url\x20or\x20owner/repo\x20id','\x22.\x20Known\x20tools:\x20','toLowerCase','\x20is\x20not\x20a\x20directory','path_validation_resolved','name','../package.json','every','file_read_complete','resolve','.cursor','status','default',',\x20modified\x20','ReadError','RipgrepError','completionId','Failed\x20to\x20read\x20file:\x20','dryRun','path_validation_start','tool_call_error','warn','timings','unknown','PWD','Here\x20is\x20the\x20content\x20of\x20files:\x0a','package.json','GITHUB_CODEBASE_SEARCH','Warning:\x20','params','\x22>\x0a','ToolException','\x20-\x20','.\x20Path:\x20','Repository\x20identifier','592872usHJcC','false','indexOf','version','all','linesModified','payload'];a0_0x3b61=function(){return _0x3e212b;};return a0_0x3b61();}MORPH_API_KEY&&!MORPH_API_KEY[a0_0x40eb78(0xff)]('sk-')&&!MORPH_API_KEY[a0_0x40eb78(0xff)](a0_0x40eb78(0x1a5))&&logMcpStderr(a0_0x40eb78(0x180));async function reportMorphError(_0x5b0853){const _0x395bbc=a0_0x40eb78;try{await a0_0x3c6dee[_0x395bbc(0x1a2)](_0x395bbc(0xf1),{..._0x5b0853,'timestamp':new Date()[_0x395bbc(0x198)](),'source':_0x5b0853[_0x395bbc(0xc8)]||_0x395bbc(0x109),'os_type':OPERATING_SYSTEM_TYPE,'context':{'os_type':OPERATING_SYSTEM_TYPE,..._0x5b0853['context']}},{'timeout':0x1388,'headers':{'Content-Type':_0x395bbc(0x189),'Authorization':_0x395bbc(0x106)+MORPH_API_KEY}});}catch{}}function extractStatusCode(_0x30d3fa,_0x54405d){const _0x4e1908=a0_0x40eb78;if(_0x30d3fa&&typeof _0x30d3fa==='object'&&'status'in _0x30d3fa)return _0x30d3fa[_0x4e1908(0x119)];if(_0x30d3fa&&typeof _0x30d3fa==='object'&&'response'in _0x30d3fa)return _0x30d3fa[_0x4e1908(0x1ab)]?.['status'];const _0x52fcd1=_0x54405d['match'](/\b(401|429)\b/);return _0x52fcd1?parseInt(_0x52fcd1[0x1],0xa):null;}function handleMorphAPIError(_0x5bb34c){const _0x593fc7=a0_0x40eb78,_0x156cb8=_0x5bb34c instanceof Error?_0x5bb34c['message']:String(_0x5bb34c),_0x441f79=extractStatusCode(_0x5bb34c,_0x156cb8);switch(_0x441f79){case 0x191:return{'content':[{'type':_0x593fc7(0x164),'text':_0x593fc7(0x1e6)}],'isError':!![]};case 0x1ad:return{'content':[{'type':_0x593fc7(0x164),'text':'Rate\x20limited:\x20You\x27ve\x20exceeded\x20your\x20Morph\x20API\x20usage\x20limits.\x20Please\x20visit\x20https://morphllm.com\x20to\x20check\x20your\x20plan\x20and\x20purchase\x20additional\x20credits.'}],'isError':!![]};default:return null;}}args[a0_0x40eb78(0x148)]===0x0&&!ENABLE_WORKSPACE_MODE&&(logMcpStderr(a0_0x40eb78(0xc5)),logMcpStderr('Note:\x20Allowed\x20directories\x20can\x20be\x20provided\x20via:'),logMcpStderr(a0_0x40eb78(0x179)),logMcpStderr(a0_0x40eb78(0x1da)),logMcpStderr(a0_0x40eb78(0x178)),logMcpStderr(a0_0x40eb78(0x1e4)));function normalizePath(_0x53fb89){const _0x142533=a0_0x40eb78;return a0_0x41cd8c[_0x142533(0x154)](_0x53fb89);}function expandHome(_0x59b5f8){const _0x41521e=a0_0x40eb78;if(_0x59b5f8['startsWith']('~/')||_0x59b5f8==='~')return a0_0x41cd8c[_0x41521e(0xe4)](a0_0x4b32b0[_0x41521e(0x1bc)](),_0x59b5f8[_0x41521e(0xf6)](0x1));return _0x59b5f8;}let allowedDirectories=await Promise[a0_0x40eb78(0x135)](args['map'](async _0x2eb477=>{const _0x1a5518=a0_0x40eb78,_0x46cca=expandHome(_0x2eb477),_0x27829b=a0_0x41cd8c[_0x1a5518(0x117)](_0x46cca);try{const _0x4dd584=await a0_0x198608[_0x1a5518(0x158)](_0x27829b);return normalizePath(_0x4dd584);}catch(_0x1da7ce){return normalizePath(_0x27829b);}}));if(ENABLE_WORKSPACE_MODE&&args[a0_0x40eb78(0x148)]===0x0)try{const workspaceDir=await detectWorkspaceRoot(WORKSPACE_ROOT);workspaceDir&&(allowedDirectories[a0_0x40eb78(0xfb)](workspaceDir),logMcpStderr(a0_0x40eb78(0x1a0)+workspaceDir+a0_0x40eb78(0x1b1)));}catch(a0_0x1431c5){logMcpStderr(a0_0x40eb78(0x15a)+a0_0x1431c5);}async function detectWorkspaceRoot(_0x46fe36){const _0x25657e=a0_0x40eb78;let _0x382fcb=a0_0x41cd8c[_0x25657e(0x117)](_0x46fe36);const _0x31f53d=[_0x25657e(0x1ec),_0x25657e(0x17d),_0x25657e(0x128),_0x25657e(0xf3),'pyproject.toml',_0x25657e(0x1b6),_0x25657e(0x118),_0x25657e(0x10c),_0x25657e(0x163)];while(_0x382fcb!==a0_0x41cd8c[_0x25657e(0x100)](_0x382fcb)){for(const _0x44b50f of _0x31f53d){const _0x5ab363=a0_0x41cd8c[_0x25657e(0xe4)](_0x382fcb,_0x44b50f);try{return await a0_0x198608[_0x25657e(0x1e2)](_0x5ab363),normalizePath(_0x382fcb);}catch{}}_0x382fcb=a0_0x41cd8c[_0x25657e(0x100)](_0x382fcb);}return normalizePath(_0x46fe36);}await Promise[a0_0x40eb78(0x135)](args[a0_0x40eb78(0x1c4)](async _0x8ca957=>{const _0x30aeee=a0_0x40eb78;try{const _0x581547=await a0_0x198608[_0x30aeee(0x1cd)](expandHome(_0x8ca957));!_0x581547[_0x30aeee(0xdc)]()&&(logMcpStderr('Error:\x20'+_0x8ca957+_0x30aeee(0x111)),process['exit'](0x1));}catch(_0x29cca0){logMcpStderr(_0x30aeee(0x19c)+_0x8ca957+':',_0x29cca0),process[_0x30aeee(0xfe)](0x1);}}));async function validatePath(_0x298936){const _0x1c0518=a0_0x40eb78,_0x49829b=expandHome(_0x298936),_0x6b13f1=a0_0x41cd8c[_0x1c0518(0x117)](_0x49829b);logger[_0x1c0518(0x14f)](_0x1c0518(0xc4),_0x1c0518(0x121),{'raw_path':_0x298936,'absolute':_0x6b13f1});try{const _0x4289c5=await a0_0x198608[_0x1c0518(0x158)](_0x6b13f1);return logger[_0x1c0518(0x14f)](_0x1c0518(0xc4),'path_validation_resolved',{'resolved':_0x4289c5,'symlink':_0x4289c5!==_0x6b13f1}),_0x4289c5;}catch(_0x457dfb){if(_0x457dfb[_0x1c0518(0xda)]===_0x1c0518(0xd8)){const _0x1aa68c=a0_0x41cd8c[_0x1c0518(0x100)](_0x6b13f1);try{const _0x1dcf3d=await a0_0x198608['realpath'](_0x1aa68c),_0x53762a=a0_0x41cd8c[_0x1c0518(0xe4)](_0x1dcf3d,a0_0x41cd8c[_0x1c0518(0x1c8)](_0x6b13f1));return logger[_0x1c0518(0x14f)]('MCP',_0x1c0518(0x112),{'resolved':_0x53762a,'new_file':!![]}),_0x53762a;}catch{logger[_0x1c0518(0x14e)]('MCP',_0x1c0518(0x197),{'raw_path':_0x298936,'error':_0x1c0518(0x141)+_0x1aa68c});throw new Error(_0x1c0518(0x141)+_0x1aa68c);}}logger[_0x1c0518(0x14e)](_0x1c0518(0xc4),_0x1c0518(0x197),{'raw_path':_0x298936,'error':_0x457dfb[_0x1c0518(0x162)]});throw _0x457dfb;}}const MorphEditFileArgsSchema=z[a0_0x40eb78(0xf2)]({'path':z['string'](),'code_edit':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0x187)),'instruction':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0xd5)),'dryRun':z['boolean']()[a0_0x40eb78(0x11a)](![])[a0_0x40eb78(0x1ba)]('Preview\x20changes\x20without\x20applying\x20them.')}),CODEBASE_SEARCH_QUERY_DESCRIPTION=a0_0x40eb78(0xfd),WarpGrepArgsSchema=z[a0_0x40eb78(0xf2)]({'search_string':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0x1ba)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repo_path':z['string']()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0x15b)),'search_type':z[a0_0x40eb78(0xea)]([a0_0x40eb78(0x11a),a0_0x40eb78(0xc9)])['optional']()[a0_0x40eb78(0x1ba)]('Search\x20type\x20hint.\x20Use\x20\x27node_modules\x27\x20when\x20searching\x20inside\x20node_modules\x20or\x20other\x20dependency\x20directories\x20that\x20are\x20normally\x20excluded.')}),WarpGrepGitHubArgsSchema=z[a0_0x40eb78(0xf2)]({'search_string':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0x1ba)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'github_url':z[a0_0x40eb78(0x17a)]()['optional']()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0x1db)),'owner_repo':z[a0_0x40eb78(0x17a)]()['optional']()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0x17f)),'branch':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0xf0)]()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0xde))}),CodebaseSearchArgsSchema=z[a0_0x40eb78(0xf2)]({'query':z['string']()[a0_0x40eb78(0x1ba)](CODEBASE_SEARCH_QUERY_DESCRIPTION),'repoId':z[a0_0x40eb78(0x17a)]()[a0_0x40eb78(0x1ba)](a0_0x40eb78(0x130)),'branch':z['string']()['optional']()[a0_0x40eb78(0x1ba)]('Branch\x20to\x20search\x20(uses\x20latest\x20commit)'),'commitHash':z['string']()[a0_0x40eb78(0xf0)]()[a0_0x40eb78(0x1ba)]('Specific\x20commit\x20hash\x20to\x20search'),'targetDirectories':z[a0_0x40eb78(0x1a6)](z[a0_0x40eb78(0x17a)]())[a0_0x40eb78(0x11a)]([])['describe'](a0_0x40eb78(0xd0)),'limit':z[a0_0x40eb78(0x1d8)]()['optional']()[a0_0x40eb78(0x11a)](0xa)[a0_0x40eb78(0x1ba)]('Max\x20results\x20to\x20return')}),server=new Server({'name':'morph-mcp','version':a0_0x40eb78(0x1d0)},{'capabilities':{'tools':{}}});server[a0_0x40eb78(0x190)](ListToolsRequestSchema,async()=>{const _0x45e7fb=a0_0x40eb78,_0x1b7e58=[{'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'+_0x45e7fb(0xe1)+_0x45e7fb(0x175)+_0x45e7fb(0x18b)+_0x45e7fb(0x19d)+_0x45e7fb(0x181)+_0x45e7fb(0x15e)+_0x45e7fb(0x18d)+_0x45e7fb(0x170)+_0x45e7fb(0xf4)+'-\x20Preserve\x20exact\x20indentation\x0a'+'-\x20For\x20deletions:\x20show\x20context\x20before\x20and\x20after,\x20omit\x20the\x20deleted\x20lines\x0a'+_0x45e7fb(0x19e),'inputSchema':zodToJsonSchema(MorphEditFileArgsSchema),'requiresApiKey':!![]},{'name':TOOL_NAMES[_0x45e7fb(0xeb)],'description':_0x45e7fb(0x149)+CODEBASE_SEARCH_QUERY_DESCRIPTION+'\x20'+_0x45e7fb(0x168)+_0x45e7fb(0x1cb)+'','inputSchema':zodToJsonSchema(WarpGrepArgsSchema),'requiresApiKey':!![]},{'name':GITHUB_SEARCH_TOOL_NAME,'description':GITHUB_SEARCH_DESCRIPTION,'inputSchema':zodToJsonSchema(WarpGrepGitHubArgsSchema),'requiresApiKey':!![]}],_0x57d626=_0x1b7e58['filter'](_0x130cbd=>{const _0x280f7b=_0x45e7fb;if(DISABLED_TOOLS[_0x280f7b(0xe5)](_0x130cbd[_0x280f7b(0x113)]))return console['error'](_0x280f7b(0xcf)+_0x130cbd[_0x280f7b(0x113)]+_0x280f7b(0x13c)),![];if(_0x280f7b(0xcc)in _0x130cbd&&_0x130cbd[_0x280f7b(0xcc)]&&!MORPH_API_KEY)return logMcpStderr(_0x280f7b(0x12a)+_0x130cbd[_0x280f7b(0x113)]+_0x280f7b(0x192)),![];return!![];});return{'tools':_0x57d626[_0x45e7fb(0x1c4)](_0x295ee3=>({'name':_0x295ee3['name'],'description':_0x295ee3[_0x45e7fb(0x1c3)],'inputSchema':_0x295ee3[_0x45e7fb(0x14b)]}))};}),server['setRequestHandler'](CallToolRequestSchema,async _0x14fb5c=>{const _0x31a3bd=a0_0x40eb78,{name:_0x2061d5,arguments:_0x59abb9}=_0x14fb5c[_0x31a3bd(0x12b)],_0x3cf95c=Date['now']();logger[_0x31a3bd(0x14f)](_0x31a3bd(0xc4),_0x31a3bd(0x1b8),{'tool':_0x2061d5,'args':_0x2061d5==='edit_file'?{'path':_0x59abb9?.[_0x31a3bd(0xd6)],'instruction':_0x59abb9?.[_0x31a3bd(0x172)]||_0x59abb9?.[_0x31a3bd(0x1e8)],'dryRun':_0x59abb9?.[_0x31a3bd(0x120)]}:_0x59abb9});try{if(!MORPH_API_KEY)return{'content':[{'type':_0x31a3bd(0x164),'text':'No\x20Morph\x20API\x20key\x20configured.\x20Please\x20visit\x20https://morphllm.com\x20to\x20get\x20an\x20API\x20key,\x20then\x20set\x20MORPH_API_KEY\x20in\x20your\x20MCP\x20configuration.'}],'isError':!![]};if(!MORPH_API_KEY[_0x31a3bd(0xff)]('sk-')&&!MORPH_API_KEY[_0x31a3bd(0xff)](_0x31a3bd(0x1a5)))return{'content':[{'type':'text','text':_0x31a3bd(0x16f)}],'isError':!![]};if(DISABLED_TOOLS[_0x31a3bd(0xe5)](_0x2061d5))return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x1c5)+_0x2061d5+'\x22\x20is\x20disabled\x20via\x20the\x20DISABLED_TOOLS\x20environment\x20variable\x20in\x20your\x20MCP\x20configuration.\x20Please\x20use\x20an\x20alternative\x20approach.'}],'isError':![]};switch(_0x2061d5){case TOOL_NAMES[_0x31a3bd(0x1eb)]:{let _0x216beb=_0x59abb9;if(_0x216beb&&typeof _0x216beb===_0x31a3bd(0xf2)){if(!(_0x31a3bd(0xd6)in _0x216beb)){const _0x45a0aa=_0x216beb[_0x31a3bd(0xbf)]??_0x216beb[_0x31a3bd(0x1ad)]??_0x216beb[_0x31a3bd(0x1d5)]??_0x216beb[_0x31a3bd(0x16a)]??_0x216beb[_0x31a3bd(0x1c9)];if(_0x45a0aa)_0x216beb={..._0x216beb,'path':_0x45a0aa};}_0x31a3bd(0x1e8)in _0x216beb&&!(_0x31a3bd(0x172)in _0x216beb)&&(_0x216beb={..._0x216beb,'instruction':_0x216beb[_0x31a3bd(0x1e8)]});if(!('code_edit'in _0x216beb)){const _0x729abc=_0x216beb[_0x31a3bd(0xda)]??_0x216beb[_0x31a3bd(0x1c2)]??_0x216beb[_0x31a3bd(0x16e)]??_0x216beb['edit'];if(_0x729abc)_0x216beb={..._0x216beb,'code_edit':_0x729abc};}}const _0x1518ef=MorphEditFileArgsSchema[_0x31a3bd(0xe9)](_0x216beb);if(!_0x1518ef['success'])throw new Error(_0x31a3bd(0x196)+_0x1518ef[_0x31a3bd(0x14e)]);const _0x58ce77=await validatePath(_0x1518ef[_0x31a3bd(0x1b3)]['path']);let _0x1be44e=null,_0x5172cf=!![],_0x3baea4=null;try{_0x1be44e=await a0_0x198608[_0x31a3bd(0x1be)](_0x58ce77,_0x31a3bd(0x1b9)),logger['debug'](_0x31a3bd(0xc4),_0x31a3bd(0x116),{'path':_0x58ce77,'size_bytes':_0x1be44e[_0x31a3bd(0x148)]});}catch(_0x2130df){const _0x516d8a=_0x2130df['code'];_0x516d8a===_0x31a3bd(0xd8)?(_0x5172cf=![],_0x1be44e='',logger[_0x31a3bd(0x14f)]('MCP',_0x31a3bd(0x116),{'path':_0x58ce77,'exists':![]})):(_0x3baea4=_0x31a3bd(0x11f)+(_0x516d8a||'unknown')+_0x31a3bd(0x12e)+(_0x2130df instanceof Error?_0x2130df[_0x31a3bd(0x162)]:String(_0x2130df)),logger[_0x31a3bd(0x14e)]('MCP',_0x31a3bd(0x18e),{'path':_0x58ce77,'error':_0x3baea4}),logMcpStderr(_0x31a3bd(0x12a)+_0x3baea4));}let _0x40e544;try{const _0x6f918d=MORPH_API_KEY;if(!_0x6f918d)throw new Error(_0x31a3bd(0xbe));const _0x5a2c1e=a0_0x41cd8c['dirname'](_0x58ce77),_0x68c565=a0_0x41cd8c[_0x31a3bd(0x1c8)](_0x58ce77);logger[_0x31a3bd(0x14f)](_0x31a3bd(0xc4),'api_request_start',{'model':_0x31a3bd(0x16d),'path':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)],'instruction_len':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x172)]['length'],'code_edit_len':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xf7)][_0x31a3bd(0x148)],'original_code_len':_0x1be44e?.[_0x31a3bd(0x148)]??0x0,'dry_run':_0x1518ef[_0x31a3bd(0x1b3)]['dryRun']});const _0x37a49c=Date[_0x31a3bd(0x1ea)](),_0x55f78a=await executeEditFile({'target_filepath':_0x68c565,'code_edit':_0x1518ef['data'][_0x31a3bd(0xf7)],'instruction':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x172)]},{'morphApiKey':_0x6f918d,'morphApiUrl':MORPH_API_URL,'large':MORPH_LARGE_APPLY,'baseDir':_0x5a2c1e,'autoWrite':!_0x1518ef['data'][_0x31a3bd(0x120)],'generateUdiff':![],'debug':![]}),_0x165d9f=Date['now']()-_0x37a49c;_0x40e544=_0x55f78a[_0x31a3bd(0x11e)];if(!_0x55f78a[_0x31a3bd(0xf9)])throw new Error(_0x55f78a[_0x31a3bd(0x14e)]||'Morph\x20FastApply\x20failed\x20without\x20error\x20message');const _0x11458b=_0x55f78a[_0x31a3bd(0x186)],_0x497ee3=_0x31a3bd(0x140)+_0x11458b['linesAdded']+_0x31a3bd(0x143)+_0x11458b[_0x31a3bd(0x17e)]+_0x31a3bd(0x11b)+_0x11458b[_0x31a3bd(0x136)];logger[_0x31a3bd(0x14f)](_0x31a3bd(0xc4),_0x31a3bd(0x105),{'tool':_0x31a3bd(0x147),'success':!![],'latency_ms':Date['now']()-_0x3cf95c,'edit_latency_ms':_0x165d9f,'changes':{'added':_0x11458b[_0x31a3bd(0xcb)],'removed':_0x11458b[_0x31a3bd(0x17e)],'modified':_0x11458b['linesModified']},'completion_id':_0x40e544});if(_0x1518ef['data'][_0x31a3bd(0x120)])return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x167)+(_0x5172cf?'':_0x31a3bd(0x1a3))+':\x20'+_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x172)]+_0x31a3bd(0x1e7)+_0x497ee3+_0x31a3bd(0x12f)+_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)]+'.'}]};return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x16b)+(_0x5172cf?'Applied':_0x31a3bd(0x1e5))+':\x20'+_0x1518ef[_0x31a3bd(0x1b3)]['instruction']+_0x31a3bd(0x1e7)+_0x497ee3+_0x31a3bd(0x12f)+_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)]+'.'}]};}catch(_0x5429fa){const _0x3b0e25=handleMorphAPIError(_0x5429fa);if(_0x3b0e25)return logger[_0x31a3bd(0x14e)]('MCP','tool_call_error',{'tool':'edit_file','error':'API\x20error\x20(auth/rate-limit)','latency_ms':Date[_0x31a3bd(0x1ea)]()-_0x3cf95c}),_0x3b0e25;const _0x20656a=_0x5429fa instanceof Error?_0x5429fa[_0x31a3bd(0x162)]:String(_0x5429fa);return logger[_0x31a3bd(0x14e)](_0x31a3bd(0xc4),'tool_call_error',{'tool':'edit_file','error':_0x20656a,'path':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)],'validated_path':_0x58ce77,'latency_ms':Date[_0x31a3bd(0x1ea)]()-_0x3cf95c,'stack':_0x5429fa instanceof Error?_0x5429fa[_0x31a3bd(0x10a)]:undefined}),reportMorphError({'error_message':_0x20656a,'error_type':_0x5429fa instanceof Error?_0x5429fa[_0x31a3bd(0x165)]['name']:_0x31a3bd(0x1c0),'context':{'tool':_0x31a3bd(0x147),'completion_id':_0x40e544,'file_path':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)],'validated_path':_0x58ce77,'instruction':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x172)],'model':MORPH_LARGE_APPLY?'morph-v3-large':_0x31a3bd(0x16d),'dry_run':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x120)],'file_exists':_0x5172cf,'file_read_error':_0x3baea4,'file_readable':_0x1be44e!==null,'request_content':{'path':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0xd6)],'code_edit':_0x1518ef['data'][_0x31a3bd(0xf7)],'instruction':_0x1518ef[_0x31a3bd(0x1b3)]['instruction'],'original_code':_0x1be44e!==null?_0x1be44e[_0x31a3bd(0x148)]>0xc350?_0x1be44e['substring'](0x0,0xc350)+_0x31a3bd(0xf5)+_0x1be44e[_0x31a3bd(0x148)]+_0x31a3bd(0x151):_0x1be44e:_0x31a3bd(0x1d6)+(_0x3baea4||'unknown\x20error')+']','original_code_length':_0x1be44e?.[_0x31a3bd(0x148)]??0x0,'model':MORPH_LARGE_APPLY?'morph-v3-large':_0x31a3bd(0x16d),'dry_run':_0x1518ef[_0x31a3bd(0x1b3)][_0x31a3bd(0x120)]}},'stack_trace':_0x5429fa instanceof Error?_0x5429fa[_0x31a3bd(0x10a)]:undefined,'source':'mcp-filesystem'})['catch'](()=>{}),{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x16c)+_0x20656a}],'isError':!![]};}}case TOOL_NAMES[_0x31a3bd(0xeb)]:{const _0x351f2f=WarpGrepArgsSchema[_0x31a3bd(0xe9)](_0x59abb9);if(!_0x351f2f[_0x31a3bd(0xf9)])return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x19b)+_0x351f2f['error']}],'isError':!![]};const _0x4d1d6f=_0x35a321=>{const _0x54804c=_0x31a3bd,_0x43624d=[];for(const _0x50c48a of _0x35a321||[]){if(_0x50c48a[_0x54804c(0xd3)]===_0x54804c(0x15f)&&Array['isArray'](_0x50c48a[_0x54804c(0x1ca)]))for(const _0x48826c of _0x50c48a[_0x54804c(0x1ca)]){try{const _0x3abcab=_0x48826c['function']?.[_0x54804c(0x113)],_0x29fb0b=JSON[_0x54804c(0x1d1)](_0x48826c[_0x54804c(0x1ce)]?.[_0x54804c(0x18a)]||'{}');if(_0x3abcab===_0x54804c(0xdf))_0x43624d[_0x54804c(0xfb)](_0x54804c(0x14c)+_0x29fb0b[_0x54804c(0xfc)]+'\x27\x20'+(_0x29fb0b[_0x54804c(0xd6)]||'.'));else{if(_0x3abcab==='read')_0x43624d[_0x54804c(0xfb)]('read\x20'+_0x29fb0b[_0x54804c(0xd6)]);else{if(_0x3abcab===_0x54804c(0x1c7))_0x43624d[_0x54804c(0xfb)](_0x54804c(0xd7)+(_0x29fb0b['command']||'.'));else{if(_0x3abcab===_0x54804c(0x184))_0x43624d[_0x54804c(0xfb)](_0x54804c(0x1d3)+_0x29fb0b[_0x54804c(0xfc)]+'\x27\x20'+(_0x29fb0b[_0x54804c(0xd6)]||'.'));else _0x3abcab===_0x54804c(0x139)&&_0x43624d['push']('finish');}}}}catch{}}}return _0x43624d;},_0x3cc303=_0xeb47d3=>{const _0x1c9bda=_0x31a3bd,_0x526027=[];if(!_0xeb47d3||!Array[_0x1c9bda(0x171)](_0xeb47d3))return _0x526027;const _0x4a184c=[{'pattern':/\[FILE NOT FOUND\]/,'error_type':_0x1c9bda(0x13d),'tool':_0x1c9bda(0xe8)},{'pattern':/\[PATH ERROR\]/,'error_type':'PathError','tool':_0x1c9bda(0xe8)},{'pattern':/\[READ ERROR\]/,'error_type':_0x1c9bda(0x11c),'tool':_0x1c9bda(0xe8)},{'pattern':/\[UNREADABLE FILE\]/,'error_type':_0x1c9bda(0x1aa),'tool':_0x1c9bda(0xe8)},{'pattern':/\[RIPGREP ERROR\]/,'error_type':_0x1c9bda(0x11d),'tool':'grep'},{'pattern':/\[RIPGREP NOT AVAILABLE\]/,'error_type':_0x1c9bda(0xc7),'tool':_0x1c9bda(0xc1)},{'pattern':/\[BINARY FILE\]/,'error_type':_0x1c9bda(0x1aa),'tool':_0x1c9bda(0xe8)},{'pattern':/\[SYMLINK\]/,'error_type':_0x1c9bda(0xec),'tool':'read'},{'pattern':/not a text file/,'error_type':_0x1c9bda(0x1aa),'tool':_0x1c9bda(0xe8)},{'pattern':/symbolic link/,'error_type':_0x1c9bda(0xec),'tool':_0x1c9bda(0xe8)},{'pattern':/Error reading file:/,'error_type':_0x1c9bda(0x11c),'tool':_0x1c9bda(0xe8)},{'pattern':/status="error"/,'error_type':_0x1c9bda(0x12d),'tool':_0x1c9bda(0x125)}];let _0x1c7060=0x0;for(const _0x2fdc88 of _0xeb47d3){_0x2fdc88[_0x1c9bda(0xd3)]==='assistant'&&Array[_0x1c9bda(0x171)](_0x2fdc88[_0x1c9bda(0x1ca)])&&_0x1c7060++;const _0x1e6563=_0x2fdc88[_0x1c9bda(0x16e)];if((_0x2fdc88[_0x1c9bda(0xd3)]==='tool'||_0x2fdc88[_0x1c9bda(0xd3)]===_0x1c9bda(0x194))&&_0x1e6563&&typeof _0x1e6563===_0x1c9bda(0x17a))for(const {pattern:_0xe1dccc,error_type:_0x436bd6,tool:_0x244342}of _0x4a184c){const _0x3a4535=_0x1e6563[_0x1c9bda(0x1dd)](new RegExp(_0xe1dccc[_0x1c9bda(0xc8)],'g'));if(_0x3a4535)for(const _0x4bfad1 of _0x3a4535){const _0x24edf9=_0x1e6563[_0x1c9bda(0x133)](_0x4bfad1),_0x25f1ed=_0x1e6563['substring'](_0x24edf9,Math['min'](_0x24edf9+0xc8,_0x1e6563[_0x1c9bda(0x148)]));_0x526027['push']({'tool':_0x244342,'error_type':_0x436bd6,'error_message':_0x25f1ed['split']('\x0a')[0x0],'turn':_0x1c7060});}}}return _0x526027;};try{const _0xd1b741=a0_0x41cd8c[_0x31a3bd(0x117)](_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)]),_0x32605d=_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x195)],_0x4ffd4e=_0x32605d===_0x31a3bd(0xc9)?{'allowNames':[_0x31a3bd(0xc9)]}:undefined,_0x15dcc6=new LocalRipgrepProvider(_0xd1b741,undefined,_0x4ffd4e);logger[_0x31a3bd(0x14f)]('MCP',_0x31a3bd(0x1a4),{'type':_0x31a3bd(0x18c),'repo_root':_0xd1b741,'search_type':_0x32605d||'default'}),logger[_0x31a3bd(0x14f)]('MCP','warp_grep_start',{'query':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'repo_root':_0xd1b741,'timeout_ms':MORPH_WARP_GREP_TIMEOUT});const _0x342f13=Date[_0x31a3bd(0x1ea)](),_0x3896c9=await runWarpGrep({'searchTerm':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'repoRoot':_0xd1b741,'morphApiKey':MORPH_API_KEY,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT,'provider':_0x15dcc6,'search_type':_0x32605d}),_0x397a82=Date[_0x31a3bd(0x1ea)]()-_0x342f13,_0x3f1938=_0x3896c9[_0x31a3bd(0x139)]?.[_0x31a3bd(0x1c1)]?.[_0x31a3bd(0xfa)]?.['length']??0x0;logger[_0x31a3bd(0x14f)]('MCP',_0x31a3bd(0x138),{'termination':_0x3896c9[_0x31a3bd(0x14d)],'turns':_0x3896c9['timings']?.['turns']??0x0,'files_found':_0x3f1938,'latency_ms':_0x397a82});const _0x27bac9=_0x3cc303(_0x3896c9[_0x31a3bd(0x1e0)]);_0x27bac9[_0x31a3bd(0x148)]>0x0&&reportMorphError({'error_message':_0x31a3bd(0x101)+_0x27bac9[_0x31a3bd(0x148)]+_0x31a3bd(0xd1),'error_type':_0x31a3bd(0xe3),'level':_0x31a3bd(0x123),'tool':_0x31a3bd(0xc3),'context':{'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'query':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'model':'morph-warp-grep-v2.1','termination_reason':_0x3896c9['terminationReason'],'sub_tool_errors':_0x27bac9,'timings':_0x3896c9[_0x31a3bd(0x124)],'tool_calls':_0x4d1d6f(_0x3896c9[_0x31a3bd(0x1e0)]),'messages':_0x3896c9[_0x31a3bd(0x1e0)]?.['map'](_0x1969ca=>({'role':_0x1969ca[_0x31a3bd(0xd3)],'content':_0x1969ca[_0x31a3bd(0x16e)],..._0x1969ca[_0x31a3bd(0x1ca)]?{'tool_calls':_0x1969ca[_0x31a3bd(0x1ca)][_0x31a3bd(0x148)]}:{},..._0x1969ca[_0x31a3bd(0x1dc)]?{'tool_call_id':_0x1969ca[_0x31a3bd(0x1dc)]}:{}}))},'source':_0x31a3bd(0x109)})['catch'](()=>{});let _0x4037bc='';if(_0x3896c9['terminationReason']===_0x31a3bd(0x104)&&_0x3896c9['finish']?.[_0x31a3bd(0x1c1)]?.[_0x31a3bd(0xfa)]){const _0x5b2085=_0x3896c9[_0x31a3bd(0x139)][_0x31a3bd(0x1c1)][_0x31a3bd(0xfa)];if(_0x5b2085[_0x31a3bd(0x148)]===0x0)return _0x4037bc=_0x3896c9[_0x31a3bd(0x139)][_0x31a3bd(0x137)]||_0x31a3bd(0xd4),{'content':[{'type':_0x31a3bd(0x164),'text':_0x4037bc}]};const _0x3012d7=[],_0x1b3835=[_0x31a3bd(0x1d4)];for(const _0x11f62b of _0x3896c9[_0x31a3bd(0x1e0)]){if(_0x11f62b[_0x31a3bd(0xd3)]===_0x31a3bd(0x15f)&&Array[_0x31a3bd(0x171)](_0x11f62b[_0x31a3bd(0x1ca)]))for(const _0x38c7dc of _0x11f62b['tool_calls']){try{const _0x313c7f=_0x38c7dc['function']?.[_0x31a3bd(0x113)],_0x564284=JSON[_0x31a3bd(0x1d1)](_0x38c7dc[_0x31a3bd(0x1ce)]?.[_0x31a3bd(0x18a)]||'{}');if(_0x313c7f===_0x31a3bd(0xdf))_0x1b3835[_0x31a3bd(0xfb)](_0x31a3bd(0x17c)+_0x564284[_0x31a3bd(0xfc)]+'\x27\x20in\x20`'+(_0x564284[_0x31a3bd(0xd6)]||'.')+'`');else{if(_0x313c7f===_0x31a3bd(0xe8))_0x1b3835[_0x31a3bd(0xfb)](_0x31a3bd(0x152)+_0x564284[_0x31a3bd(0xd6)]+'`');else{if(_0x313c7f==='list_directory')_0x1b3835['push']('-\x20Listed\x20directory\x20`'+(_0x564284[_0x31a3bd(0x19a)]||'.')+'`');else _0x313c7f===_0x31a3bd(0x184)&&_0x1b3835[_0x31a3bd(0xfb)](_0x31a3bd(0xdb)+_0x564284[_0x31a3bd(0xfc)]+_0x31a3bd(0x1c6)+(_0x564284['path']||'.')+'`');}}}catch{}}}_0x3012d7['push'](_0x1b3835[_0x31a3bd(0xe4)]('\x0a'));const _0x17b8cc=['','Relevant\x20context\x20found:'];for(const _0x3a2262 of _0x5b2085){if(_0x3a2262['lines']==='*')_0x17b8cc[_0x31a3bd(0xfb)]('-\x20'+_0x3a2262['path']+':*');else{if(Array[_0x31a3bd(0x171)](_0x3a2262[_0x31a3bd(0x1a9)])){const _0x9f6b89=_0x3a2262[_0x31a3bd(0x1a9)][_0x31a3bd(0x1c4)](([_0x51e895,_0x5464a1])=>{if(_0x51e895===_0x5464a1)return''+_0x51e895;return _0x51e895+'-'+_0x5464a1;});_0x17b8cc[_0x31a3bd(0xfb)]('-\x20'+_0x3a2262[_0x31a3bd(0xd6)]+':'+_0x9f6b89[_0x31a3bd(0xe4)](','));}else _0x17b8cc[_0x31a3bd(0xfb)]('-\x20'+_0x3a2262[_0x31a3bd(0xd6)]+':*');}}_0x17b8cc[_0x31a3bd(0xfb)](''),_0x3012d7[_0x31a3bd(0xfb)](_0x17b8cc['join']('\x0a')),_0x3012d7['push'](_0x31a3bd(0x127));const _0xf1a98c=[],_0x528b0a=[];for(const _0x25f5a9 of _0x5b2085){let _0x560cbf=a0_0x41cd8c[_0x31a3bd(0x117)](_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],_0x25f5a9[_0x31a3bd(0xd6)]),_0x2ada8c=null,_0x48a037=null;try{_0x2ada8c=await a0_0x198608['readFile'](_0x560cbf,{'encoding':_0x31a3bd(0x1b9)});}catch(_0x580044){const _0x33cd3=fixPathRepetition(_0x560cbf);if(_0x33cd3)try{_0x2ada8c=await a0_0x198608['readFile'](_0x33cd3,{'encoding':_0x31a3bd(0x1b9)}),_0x560cbf=_0x33cd3;}catch{_0x48a037=_0x580044 instanceof Error?_0x580044:new Error(String(_0x580044));}else _0x48a037=_0x580044 instanceof Error?_0x580044:new Error(String(_0x580044));}if(_0x2ada8c!==null){const _0x20d295=_0x2ada8c['split'](/\r?\n/),_0x66bbfd=[];if(_0x25f5a9['lines']==='*'||!Array[_0x31a3bd(0x171)](_0x25f5a9[_0x31a3bd(0x1a9)]))for(let _0x226f35=0x1;_0x226f35<=_0x20d295[_0x31a3bd(0x148)];_0x226f35++){const _0x453e8c=_0x20d295[_0x226f35-0x1];_0x66bbfd[_0x31a3bd(0xfb)](_0x226f35+'|\x20'+_0x453e8c);}else for(const [_0x413547,_0x5c2e09]of _0x25f5a9['lines']){_0x66bbfd[_0x31a3bd(0x148)]>0x0&&_0x66bbfd[_0x31a3bd(0xfb)]('');for(let _0x5ac1dd=_0x413547;_0x5ac1dd<=_0x5c2e09&&_0x5ac1dd<=_0x20d295[_0x31a3bd(0x148)];_0x5ac1dd++){const _0x3b1410=_0x20d295[_0x5ac1dd-0x1];_0x66bbfd['push'](_0x5ac1dd+'|\x20'+_0x3b1410);}}_0x528b0a[_0x31a3bd(0xfb)]({'path':_0x25f5a9[_0x31a3bd(0xd6)],'content':_0x66bbfd['join']('\x0a')});}else _0xf1a98c[_0x31a3bd(0xfb)](_0x31a3bd(0x1ac)+_0x25f5a9[_0x31a3bd(0xd6)]+_0x31a3bd(0xd2)+(_0x48a037?.[_0x31a3bd(0x162)]||_0x31a3bd(0x1b2))+_0x31a3bd(0x1e9));}try{const _0x1386ab=await compactFileContexts(_0x528b0a,_0x351f2f['data']['search_string'],MORPH_API_KEY,MORPH_API_URL);for(const _0x5e739d of _0x1386ab){_0xf1a98c['push']('<file\x20path=\x22'+_0x5e739d[_0x31a3bd(0xd6)]+_0x31a3bd(0x12c)+_0x5e739d[_0x31a3bd(0x16e)]+_0x31a3bd(0x1e9));}}catch(_0x2dc928){logger[_0x31a3bd(0x123)]('MCP',_0x31a3bd(0x17b),{'error':_0x2dc928 instanceof Error?_0x2dc928[_0x31a3bd(0x162)]:String(_0x2dc928),'files_count':_0x528b0a['length']});for(const _0x2490e3 of _0x528b0a){_0xf1a98c[_0x31a3bd(0xfb)](_0x31a3bd(0x1ac)+_0x2490e3['path']+'\x22>\x0a'+_0x2490e3[_0x31a3bd(0x16e)]+_0x31a3bd(0x1e9));}}_0x3012d7['push'](_0xf1a98c[_0x31a3bd(0xe4)]('\x0a\x0a')),_0x4037bc=_0x3012d7[_0x31a3bd(0xe4)]('\x0a');const _0x4dcd92=_0x3896c9[_0x31a3bd(0xe2)]?.[_0x31a3bd(0x173)](_0x37b2b4=>_0x37b2b4[_0x31a3bd(0x162)]?.[_0x31a3bd(0xff)](_0x31a3bd(0x153)))||[];if(_0x4dcd92[_0x31a3bd(0x148)]>0x0){const _0x44a57d=_0x4dcd92[_0x31a3bd(0x1c4)](_0x43c9d0=>_0x43c9d0[_0x31a3bd(0x162)])[_0x31a3bd(0xe4)](';\x20');reportMorphError({'error_message':_0x44a57d,'error_type':_0x31a3bd(0x142),'context':{'tool':_0x31a3bd(0xc3),'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'query':_0x351f2f['data'][_0x31a3bd(0xd9)],'model':_0x31a3bd(0x144),'termination_reason':_0x31a3bd(0xe7),'error_count':_0x4dcd92[_0x31a3bd(0x148)],'is_timeout':![],'timings':_0x3896c9[_0x31a3bd(0x124)],'files_attempted':_0x5b2085[_0x31a3bd(0x1c4)](_0x1edcf5=>({'path':_0x1edcf5[_0x31a3bd(0xd6)],'lines':_0x1edcf5['lines']})),'tool_calls':_0x4d1d6f(_0x3896c9[_0x31a3bd(0x1e0)]),'messages':_0x3896c9[_0x31a3bd(0x1e0)]?.[_0x31a3bd(0x1c4)](_0x26f160=>({'role':_0x26f160[_0x31a3bd(0xd3)],'content':_0x26f160[_0x31a3bd(0x16e)],..._0x26f160['tool_calls']?{'tool_calls':_0x26f160[_0x31a3bd(0x1ca)][_0x31a3bd(0x148)]}:{},..._0x26f160[_0x31a3bd(0x1dc)]?{'tool_call_id':_0x26f160[_0x31a3bd(0x1dc)]}:{}})),'request_content':{'query':_0x351f2f['data'][_0x31a3bd(0xd9)],'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'repoRoot':a0_0x41cd8c[_0x31a3bd(0x117)](_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)]),'model':_0x31a3bd(0x144)}},'source':_0x31a3bd(0x109)})[_0x31a3bd(0x145)](()=>{});}}else{if(_0x3896c9[_0x31a3bd(0x14d)]===_0x31a3bd(0x15d)&&_0x3896c9[_0x31a3bd(0xe2)][_0x31a3bd(0x148)]>0x0){const _0x69fb13=_0x3896c9[_0x31a3bd(0xe2)]['map'](_0x2708bf=>_0x2708bf[_0x31a3bd(0x162)])[_0x31a3bd(0xe4)](';\x20');_0x4037bc=_0x31a3bd(0x1df)+_0x69fb13;const _0x32c5e2=_0x69fb13[_0x31a3bd(0x110)]()[_0x31a3bd(0xed)](_0x31a3bd(0x185))||_0x69fb13[_0x31a3bd(0x110)]()[_0x31a3bd(0xed)](_0x31a3bd(0x1de))||_0x69fb13[_0x31a3bd(0x110)]()['includes'](_0x31a3bd(0xc6)),_0x420617=_0x3896c9[_0x31a3bd(0x139)]?.[_0x31a3bd(0x1c1)]?.['files'],_0x3e0e6d=_0x3896c9['errors'][0x0];reportMorphError({'error_message':_0x69fb13,'error_type':_0x32c5e2?'TimeoutError':_0x3e0e6d?.[_0x31a3bd(0x165)]?.[_0x31a3bd(0x113)]||_0x31a3bd(0xca),'context':{'tool':_0x31a3bd(0xc3),'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'query':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'model':_0x31a3bd(0x144),'termination_reason':_0x3896c9[_0x31a3bd(0x14d)],'error_count':_0x3896c9[_0x31a3bd(0xe2)][_0x31a3bd(0x148)],'is_timeout':_0x32c5e2,'timings':_0x3896c9[_0x31a3bd(0x124)],'files_attempted':_0x420617?.[_0x31a3bd(0x1c4)](_0x474d41=>({'path':_0x474d41[_0x31a3bd(0xd6)],'lines':_0x474d41[_0x31a3bd(0x1a9)]})),'tool_calls':_0x4d1d6f(_0x3896c9[_0x31a3bd(0x1e0)]),'messages':_0x3896c9[_0x31a3bd(0x1e0)]?.[_0x31a3bd(0x1c4)](_0x52c6b5=>({'role':_0x52c6b5[_0x31a3bd(0xd3)],'content':_0x52c6b5[_0x31a3bd(0x16e)],..._0x52c6b5['tool_calls']?{'tool_calls':_0x52c6b5['tool_calls'][_0x31a3bd(0x148)]}:{},..._0x52c6b5['tool_call_id']?{'tool_call_id':_0x52c6b5['tool_call_id']}:{}})),'request_content':{'query':_0x351f2f[_0x31a3bd(0x1b3)]['search_string'],'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'repoRoot':a0_0x41cd8c[_0x31a3bd(0x117)](_0x351f2f[_0x31a3bd(0x1b3)]['repo_path']),'model':_0x31a3bd(0x144)}},'stack_trace':_0x3e0e6d?.['stack']||undefined,'source':_0x31a3bd(0x109)})[_0x31a3bd(0x145)](()=>{});}else _0x4037bc=_0x31a3bd(0x1a1);}return{'content':[{'type':_0x31a3bd(0x164),'text':_0x4037bc}]};}catch(_0x262fea){const _0x4b121=handleMorphAPIError(_0x262fea);if(_0x4b121)return logger[_0x31a3bd(0x14e)](_0x31a3bd(0xc4),_0x31a3bd(0x122),{'tool':_0x31a3bd(0xc3),'error':_0x31a3bd(0x1ae),'latency_ms':Date['now']()-_0x3cf95c}),_0x4b121;const _0x5bab25=_0x262fea instanceof Error?_0x262fea[_0x31a3bd(0x162)]:String(_0x262fea);logger[_0x31a3bd(0x14e)](_0x31a3bd(0xc4),'tool_call_error',{'tool':_0x31a3bd(0xc3),'error':_0x5bab25,'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'query':_0x351f2f[_0x31a3bd(0x1b3)]['search_string'],'latency_ms':Date[_0x31a3bd(0x1ea)]()-_0x3cf95c});const _0x51f976=_0x5bab25[_0x31a3bd(0x110)]()['includes'](_0x31a3bd(0x185))||_0x5bab25[_0x31a3bd(0x110)]()[_0x31a3bd(0xed)](_0x31a3bd(0x1de))||_0x5bab25[_0x31a3bd(0x110)]()['includes'](_0x31a3bd(0xc6))||_0x262fea instanceof Error&&_0x262fea[_0x31a3bd(0x113)]===_0x31a3bd(0x1d7);return reportMorphError({'error_message':_0x5bab25,'error_type':_0x51f976?_0x31a3bd(0x1d7):_0x262fea instanceof Error?_0x262fea[_0x31a3bd(0x165)]['name']:_0x31a3bd(0x1c0),'context':{'tool':_0x31a3bd(0xc3),'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'query':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'model':_0x31a3bd(0x144),'is_timeout':_0x51f976,'exception_phase':_0x31a3bd(0x176),'request_content':{'query':_0x351f2f['data'][_0x31a3bd(0xd9)],'repo_path':_0x351f2f[_0x31a3bd(0x1b3)][_0x31a3bd(0x13a)],'repoRoot':a0_0x41cd8c['resolve'](_0x351f2f['data'][_0x31a3bd(0x13a)]),'model':_0x31a3bd(0x144)}},'stack_trace':_0x262fea instanceof Error?_0x262fea[_0x31a3bd(0x10a)]:undefined,'source':_0x31a3bd(0x109)})[_0x31a3bd(0x145)](()=>{}),{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x108)+_0x5bab25}],'isError':![]};}}case TOOL_NAMES[_0x31a3bd(0x129)]:{const _0x539188=WarpGrepGitHubArgsSchema[_0x31a3bd(0xe9)](_0x59abb9);if(!_0x539188[_0x31a3bd(0xf9)])return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x19b)+_0x539188[_0x31a3bd(0x14e)]}],'isError':!![]};const _0xed5cc8=_0x539188[_0x31a3bd(0x1b3)][_0x31a3bd(0x102)]||_0x539188[_0x31a3bd(0x1b3)][_0x31a3bd(0x1a8)];if(!_0xed5cc8)return{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x10e)}],'isError':!![]};const _0x2b3ade=MORPH_API_KEY;if(!_0x2b3ade)throw new Error('MORPH_API_KEY\x20environment\x20variable\x20must\x20be\x20set\x20in\x20MCP\x20config.\x20Check\x20your\x20global\x20MCP\x20configuration.');const _0x325492=Date[_0x31a3bd(0x1ea)]();logger[_0x31a3bd(0x14f)]('MCP',_0x31a3bd(0x166),{'identifier':_0xed5cc8,'query':_0x539188[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'branch':_0x539188['data'][_0x31a3bd(0xc0)]});try{const _0xf6df82=new WarpGrepClient({'morphApiKey':_0x2b3ade,'morphApiUrl':MORPH_API_URL,'timeout':MORPH_WARP_GREP_TIMEOUT}),_0x26574e=await _0xf6df82[_0x31a3bd(0x155)]({'searchTerm':_0x539188['data'][_0x31a3bd(0xd9)],'github':_0xed5cc8,'branch':_0x539188[_0x31a3bd(0x1b3)][_0x31a3bd(0xc0)]}),_0x37082d=Date[_0x31a3bd(0x1ea)]()-_0x325492;logMcpStderr('[github_codebase_search]\x20Done\x20in\x20'+_0x37082d+'ms.\x20Success:\x20'+_0x26574e['success']);const _0x5933c5=formatResult(_0x26574e);return{'content':[{'type':'text','text':_0x5933c5}]};}catch(_0x4944aa){const _0x1a2a4e=handleMorphAPIError(_0x4944aa);if(_0x1a2a4e)return _0x1a2a4e;const _0x27dca5=Date['now']()-_0x325492,_0x46b2b9=_0x4944aa instanceof Error?_0x4944aa[_0x31a3bd(0x162)]:String(_0x4944aa);return logMcpStderr('[github_codebase_search]\x20Failed\x20in\x20'+_0x27dca5+_0x31a3bd(0x159),_0x46b2b9),reportMorphError({'error_message':_0x46b2b9,'error_type':_0x4944aa instanceof Error?_0x4944aa[_0x31a3bd(0x165)][_0x31a3bd(0x113)]:_0x31a3bd(0x1c0),'context':{'tool':'github_codebase_search','github_url':_0xed5cc8,'search_string':_0x539188[_0x31a3bd(0x1b3)][_0x31a3bd(0xd9)],'branch':_0x539188[_0x31a3bd(0x1b3)]['branch']},'stack_trace':_0x4944aa instanceof Error?_0x4944aa[_0x31a3bd(0x10a)]:undefined,'source':_0x31a3bd(0x109),'tool':_0x31a3bd(0x150),'latency_ms':_0x27dca5})['catch'](()=>{}),{'content':[{'type':'text','text':_0x31a3bd(0x188)+_0x46b2b9}],'isError':![]};}}default:throw new Error(_0x31a3bd(0x157)+_0x2061d5);}}catch(_0x3bccb2){const _0x2a4546=_0x3bccb2 instanceof Error?_0x3bccb2['message']:String(_0x3bccb2);return reportMorphError({'error_message':_0x2a4546,'error_type':_0x3bccb2 instanceof Error?_0x3bccb2[_0x31a3bd(0x165)]['name']:'UnknownError','context':{'tool':_0x2061d5,'arguments':_0x59abb9?JSON['stringify'](_0x59abb9)[_0x31a3bd(0x191)](0x0,0x1f4):undefined,'mcp_server_version':'0.2.0'},'stack_trace':_0x3bccb2 instanceof Error?_0x3bccb2[_0x31a3bd(0x10a)]:undefined,'source':_0x31a3bd(0x109)})['catch'](()=>{}),{'content':[{'type':_0x31a3bd(0x164),'text':_0x31a3bd(0x1df)+_0x2a4546}],'isError':!![]};}});async function updateAllowedDirectoriesFromRoots(_0x1bfd05){const _0x3878ad=a0_0x40eb78,_0x1062ca=await getValidRootDirectories(_0x1bfd05);if(_0x1062ca[_0x3878ad(0x148)]>0x0)allowedDirectories=[..._0x1062ca],logMcpStderr(_0x3878ad(0x19f)+_0x1062ca[_0x3878ad(0x148)]+_0x3878ad(0x13f));else{logMcpStderr('No\x20valid\x20root\x20directories\x20provided\x20by\x20client');if(ENABLE_WORKSPACE_MODE)try{const _0x4a9d31=await detectWorkspaceRoot(WORKSPACE_ROOT);_0x4a9d31&&(allowedDirectories=[_0x4a9d31],logMcpStderr(_0x3878ad(0x1e3)+_0x4a9d31));}catch(_0x824515){logMcpStderr(_0x3878ad(0x15c)+_0x824515);}}}server['setNotificationHandler'](RootsListChangedNotificationSchema,async()=>{const _0x4e9246=a0_0x40eb78;try{const _0x2a2d37=await server[_0x4e9246(0xef)]();_0x2a2d37&&'roots'in _0x2a2d37&&await updateAllowedDirectoriesFromRoots(_0x2a2d37[_0x4e9246(0x160)]);}catch(_0x353fbb){logMcpStderr('Failed\x20to\x20request\x20roots\x20from\x20client:',_0x353fbb instanceof Error?_0x353fbb[_0x4e9246(0x162)]:String(_0x353fbb));}}),server[a0_0x40eb78(0x103)]=async()=>{const _0x116d47=a0_0x40eb78,_0x5366cc=server['getClientCapabilities']();if(_0x5366cc?.[_0x116d47(0x160)])try{const _0x46689a=await server[_0x116d47(0xef)]();_0x46689a&&'roots'in _0x46689a?await updateAllowedDirectoriesFromRoots(_0x46689a[_0x116d47(0x160)]):logMcpStderr('Client\x20returned\x20no\x20roots\x20set,\x20keeping\x20current\x20settings');}catch(_0x5a7418){logMcpStderr(_0x116d47(0x1e1),_0x5a7418 instanceof Error?_0x5a7418[_0x116d47(0x162)]:String(_0x5a7418));}else{if(allowedDirectories['length']>0x0)logMcpStderr('Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20allowed\x20directories\x20set\x20from\x20server\x20args:',allowedDirectories);else{if(ENABLE_WORKSPACE_MODE)logMcpStderr('Client\x20does\x20not\x20support\x20MCP\x20Roots,\x20using\x20workspace\x20mode');else throw new Error(_0x116d47(0x1bd));}}};async function runServer(){const _0x2886b4=a0_0x40eb78,_0x18f143=new StdioServerTransport();await server['connect'](_0x18f143),logMcpStderr(_0x2886b4(0x13b)),allowedDirectories[_0x2886b4(0x148)]===0x0&&logMcpStderr(_0x2886b4(0x10d));}runServer()[a0_0x40eb78(0x145)](_0x5a788f=>{const _0xb5cff4=a0_0x40eb78;logMcpStderr(_0xb5cff4(0x107),_0x5a788f),process[_0xb5cff4(0xfe)](0x1);});
|
package/dist/log-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var a1_0x175f5e=a1_0x57c7;function a1_0x25da(){var _0x11558a=['32066560zokUkw','141jOTzKE','linux','length','1335LvyVQv','darwin','error','Unknown','8340ISeTDx','macOS','802089aepCve','791EOlkKw','286902JPlTQt','[os=','11lMLNUM','platform','win32','Linux','36592ToPJNk','map','1709826KNdmXO','20252gPMLqL'];a1_0x25da=function(){return _0x11558a;};return a1_0x25da();}(function(_0x1bd0a6,_0x20e09f){var _0x61d6f3=a1_0x57c7,_0x216bf9=_0x1bd0a6();while(!![]){try{var _0x4ad8ae=-parseInt(_0x61d6f3(0x83))/0x1+-parseInt(_0x61d6f3(0x77))/0x2+-parseInt(_0x61d6f3(0x7a))/0x3*(parseInt(_0x61d6f3(0x78))/0x4)+parseInt(_0x61d6f3(0x7d))/0x5*(-parseInt(_0x61d6f3(0x81))/0x6)+-parseInt(_0x61d6f3(0x84))/0x7*(parseInt(_0x61d6f3(0x75))/0x8)+parseInt(_0x61d6f3(0x85))/0x9+parseInt(_0x61d6f3(0x79))/0xa*(parseInt(_0x61d6f3(0x87))/0xb);if(_0x4ad8ae===_0x20e09f)break;else _0x216bf9['push'](_0x216bf9['shift']());}catch(_0x26b447){_0x216bf9['push'](_0x216bf9['shift']());}}}(a1_0x25da,0x6f39b));import a1_0x42ca57 from'os';import{logger}from'./logger.js';function a1_0x57c7(_0x21eef5,_0x485b3d){_0x21eef5=_0x21eef5-0x72;var _0x25da2c=a1_0x25da();var _0x57c7b4=_0x25da2c[_0x21eef5];return _0x57c7b4;}export function getOperatingSystemType(_0x565e41=a1_0x42ca57['platform']()){var _0x4553bb=a1_0x57c7;switch(_0x565e41){case _0x4553bb(0x7e):return _0x4553bb(0x82);case _0x4553bb(0x73):return'Windows';case _0x4553bb(0x7b):return _0x4553bb(0x74);default:return _0x4553bb(0x80);}}export function formatMcpLogMessage(_0x1655cc,_0x5575ba=a1_0x42ca57[a1_0x175f5e(0x72)]()){var _0x3b996e=a1_0x175f5e;return _0x3b996e(0x86)+getOperatingSystemType(_0x5575ba)+']\x20'+_0x1655cc;}export function logMcpStderr(_0xc27ea,..._0xeaa069){var _0x46d0cb=a1_0x175f5e;console[_0x46d0cb(0x7f)](formatMcpLogMessage(_0xc27ea),..._0xeaa069),logger['info']('MCP',_0xc27ea,_0xeaa069[_0x46d0cb(0x7c)]?{'args':_0xeaa069[_0x46d0cb(0x76)](_0x1a3d64=>String(_0x1a3d64))}:undefined);}
|
package/dist/logger.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function a2_0x1e8f(){const _0x24c165=['debug','enable','isEnabled','726498OmsyMN','263060NlxiTW','4356uORjNl','warn','_log','fileStream','80gSYnCE','MORPH_LOG_FILE','131ZbhPOQ','error','write','2379615WlTCwY','stringify','MORPH_DEBUG','934960xYutcE','toUpperCase','enabled','1489314NXUIsP','info','1672365SeDTJl','env',']\x20['];a2_0x1e8f=function(){return _0x24c165;};return a2_0x1e8f();}const a2_0x3a410f=a2_0x18fc;(function(_0x293789,_0x5ea2ab){const _0x40c9aa=a2_0x18fc,_0x20c3ac=_0x293789();while(!![]){try{const _0x41e985=-parseInt(_0x40c9aa(0x7b))/0x1*(parseInt(_0x40c9aa(0x75))/0x2)+-parseInt(_0x40c9aa(0x6d))/0x3+parseInt(_0x40c9aa(0x81))/0x4+parseInt(_0x40c9aa(0x7e))/0x5+-parseInt(_0x40c9aa(0x84))/0x6+parseInt(_0x40c9aa(0x74))/0x7+-parseInt(_0x40c9aa(0x79))/0x8*(-parseInt(_0x40c9aa(0x73))/0x9);if(_0x41e985===_0x5ea2ab)break;else _0x20c3ac['push'](_0x20c3ac['shift']());}catch(_0x379e12){_0x20c3ac['push'](_0x20c3ac['shift']());}}}(a2_0x1e8f,0x7126f));function a2_0x18fc(_0x5cad37,_0x1ad232){_0x5cad37=_0x5cad37-0x6c;const _0x1e8f5f=a2_0x1e8f();let _0x18fc77=_0x1e8f5f[_0x5cad37];return _0x18fc77;}import{createWriteStream}from'fs';class MorphLogger{[a2_0x3a410f(0x83)];['fileStream'];constructor(){const _0x4066d1=a2_0x3a410f;this['enabled']=process['env'][_0x4066d1(0x80)]==='1'||!!process[_0x4066d1(0x6e)][_0x4066d1(0x7a)];const _0x5892a9=process['env'][_0x4066d1(0x7a)];this[_0x4066d1(0x78)]=_0x5892a9?createWriteStream(_0x5892a9,{'flags':'a'}):null;}[a2_0x3a410f(0x70)](_0x12a444,_0x504333,_0x3ca0a1){const _0x3fbc32=a2_0x3a410f;this[_0x3fbc32(0x77)](_0x3fbc32(0x70),_0x12a444,_0x504333,_0x3ca0a1);}[a2_0x3a410f(0x6c)](_0x131569,_0x2b8408,_0x2cfeea){const _0x3e6a8a=a2_0x3a410f;this['_log'](_0x3e6a8a(0x6c),_0x131569,_0x2b8408,_0x2cfeea);}[a2_0x3a410f(0x76)](_0x3a151d,_0x50c6a8,_0x34faf8){const _0x456d5e=a2_0x3a410f;this[_0x456d5e(0x77)](_0x456d5e(0x76),_0x3a151d,_0x50c6a8,_0x34faf8);}[a2_0x3a410f(0x7c)](_0x216285,_0x48f948,_0x1035c3){const _0x1f5c94=a2_0x3a410f;this[_0x1f5c94(0x77)](_0x1f5c94(0x7c),_0x216285,_0x48f948,_0x1035c3);}[a2_0x3a410f(0x71)](){const _0xf8d3d6=a2_0x3a410f;this[_0xf8d3d6(0x83)]=!![];}get[a2_0x3a410f(0x72)](){const _0x389cd0=a2_0x3a410f;return this[_0x389cd0(0x83)];}[a2_0x3a410f(0x77)](_0x14cfae,_0x3a3975,_0x68e7e4,_0x1d4754){const _0x4b0291=a2_0x3a410f;if(_0x14cfae!==_0x4b0291(0x7c)&&!this[_0x4b0291(0x83)])return;const _0x3bd93c=new Date()['toISOString'](),_0x21154a='['+_0x3bd93c+_0x4b0291(0x6f)+_0x14cfae[_0x4b0291(0x82)]()+_0x4b0291(0x6f)+_0x3a3975+']';console[_0x4b0291(0x7c)](_0x1d4754?_0x21154a+'\x20'+_0x68e7e4+'\x20'+JSON[_0x4b0291(0x7f)](_0x1d4754):_0x21154a+'\x20'+_0x68e7e4),this[_0x4b0291(0x78)]?.[_0x4b0291(0x7d)](JSON[_0x4b0291(0x7f)]({'ts':_0x3bd93c,'level':_0x14cfae,'component':_0x3a3975,'msg':_0x68e7e4,..._0x1d4754&&{'data':_0x1d4754}})+'\x0a');}}export const logger=new MorphLogger();
|
package/dist/path-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0xce80b6,_0x2202a4){const _0x1cfc02=a3_0x2eb6,_0x373240=_0xce80b6();while(!![]){try{const _0x4aed29=parseInt(_0x1cfc02(0x92))/0x1*(-parseInt(_0x1cfc02(0x8f))/0x2)+parseInt(_0x1cfc02(0x93))/0x3+parseInt(_0x1cfc02(0x8e))/0x4+parseInt(_0x1cfc02(0x81))/0x5+-parseInt(_0x1cfc02(0x95))/0x6*(-parseInt(_0x1cfc02(0x8a))/0x7)+-parseInt(_0x1cfc02(0x8d))/0x8+-parseInt(_0x1cfc02(0x86))/0x9;if(_0x4aed29===_0x2202a4)break;else _0x373240['push'](_0x373240['shift']());}catch(_0x18dd05){_0x373240['push'](_0x373240['shift']());}}}(a3_0x5a9c,0x31a30));import a3_0x1af97f from'path';import a3_0x21ad06 from'os';function a3_0x2eb6(_0x5a4590,_0x4fc082){_0x5a4590=_0x5a4590-0x81;const _0x5a9cc4=a3_0x5a9c();let _0x2eb60c=_0x5a9cc4[_0x5a4590];return _0x2eb60c;}export function convertToWindowsPath(_0x5450b3){const _0x3f5b35=a3_0x2eb6;if(_0x5450b3[_0x3f5b35(0x89)]('/mnt/')){const _0xee8898=_0x5450b3[_0x3f5b35(0x8c)](0x5)['toUpperCase'](),_0x42a465=_0x5450b3[_0x3f5b35(0x87)](0x6)[_0x3f5b35(0x8b)](/\//g,'\x5c');return _0xee8898+':'+_0x42a465;}if(_0x5450b3[_0x3f5b35(0x85)](/^\/[a-zA-Z]\//)){const _0x114dd8=_0x5450b3[_0x3f5b35(0x8c)](0x1)[_0x3f5b35(0x88)](),_0x2aefd7=_0x5450b3['slice'](0x2)[_0x3f5b35(0x8b)](/\//g,'\x5c');return _0x114dd8+':'+_0x2aefd7;}if(_0x5450b3[_0x3f5b35(0x85)](/^[a-zA-Z]:/))return _0x5450b3['replace'](/\//g,'\x5c');return _0x5450b3;}function a3_0x5a9c(){const _0x10f8c6=['133637fSPVCe','replace','charAt','60816CACRaE','214712YaVCup','78994kUehQk','join','homedir','7JMKXUJ','1105392IwOsun','normalize','42VoGZdx','1673310PuEjUq','substring','test','trim','match','3627432toaxIS','slice','toUpperCase','startsWith'];a3_0x5a9c=function(){return _0x10f8c6;};return a3_0x5a9c();}export function normalizePath(_0x7a0434){const _0x5b6c03=a3_0x2eb6;_0x7a0434=_0x7a0434[_0x5b6c03(0x84)]()['replace'](/^["']|["']$/g,'');const _0x25adad=_0x7a0434[_0x5b6c03(0x89)]('/')&&!_0x7a0434[_0x5b6c03(0x85)](/^\/mnt\/[a-z]\//i)&&!_0x7a0434[_0x5b6c03(0x85)](/^\/[a-zA-Z]\//);if(_0x25adad)return _0x7a0434[_0x5b6c03(0x8b)](/\/+/g,'/')[_0x5b6c03(0x8b)](/\/+$/,'');_0x7a0434=convertToWindowsPath(_0x7a0434);if(_0x7a0434['startsWith']('\x5c\x5c')){let _0x5270ff=_0x7a0434;_0x5270ff=_0x5270ff[_0x5b6c03(0x8b)](/^\\{2,}/,'\x5c\x5c');const _0x4d4ef8=_0x5270ff[_0x5b6c03(0x82)](0x2)[_0x5b6c03(0x8b)](/\\\\/g,'\x5c');_0x7a0434='\x5c\x5c'+_0x4d4ef8;}else _0x7a0434=_0x7a0434[_0x5b6c03(0x8b)](/\\\\/g,'\x5c');let _0x198ba2=a3_0x1af97f[_0x5b6c03(0x94)](_0x7a0434);_0x7a0434[_0x5b6c03(0x89)]('\x5c\x5c')&&!_0x198ba2['startsWith']('\x5c\x5c')&&(_0x198ba2='\x5c'+_0x198ba2);if(_0x198ba2[_0x5b6c03(0x85)](/^[a-zA-Z]:/)){let _0xb84fb0=_0x198ba2[_0x5b6c03(0x8b)](/\//g,'\x5c');return/^[a-z]:/[_0x5b6c03(0x83)](_0xb84fb0)&&(_0xb84fb0=_0xb84fb0[_0x5b6c03(0x8c)](0x0)[_0x5b6c03(0x88)]()+_0xb84fb0[_0x5b6c03(0x87)](0x1)),_0xb84fb0;}return _0x198ba2[_0x5b6c03(0x8b)](/\//g,'\x5c');}export function expandHome(_0x95fb69){const _0xe8337d=a3_0x2eb6;if(_0x95fb69[_0xe8337d(0x89)]('~/')||_0x95fb69==='~')return a3_0x1af97f[_0xe8337d(0x90)](a3_0x21ad06[_0xe8337d(0x91)](),_0x95fb69['slice'](0x1));return _0x95fb69;}
|
package/dist/path-validation.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
function a4_0x22ce(_0x4af2ef,_0x57459c){_0x4af2ef=_0x4af2ef-0x143;const _0x10b451=a4_0x10b4();let _0x22ce96=_0x10b451[_0x4af2ef];return _0x22ce96;}(function(_0x5cb206,_0xee7d03){const _0x12ad9f=a4_0x22ce,_0x39aeb9=_0x5cb206();while(!![]){try{const _0x5aeb7b=parseInt(_0x12ad9f(0x14b))/0x1+parseInt(_0x12ad9f(0x14d))/0x2+parseInt(_0x12ad9f(0x14a))/0x3+parseInt(_0x12ad9f(0x143))/0x4*(-parseInt(_0x12ad9f(0x14e))/0x5)+-parseInt(_0x12ad9f(0x151))/0x6+-parseInt(_0x12ad9f(0x149))/0x7*(parseInt(_0x12ad9f(0x145))/0x8)+-parseInt(_0x12ad9f(0x148))/0x9;if(_0x5aeb7b===_0xee7d03)break;else _0x39aeb9['push'](_0x39aeb9['shift']());}catch(_0x1e53b8){_0x39aeb9['push'](_0x39aeb9['shift']());}}}(a4_0x10b4,0x8b40a));import a4_0x4099dd from'path';export function isPathWithinAllowedDirectories(_0x2a05be,_0x5e4d78){const _0x21c44f=a4_0x22ce;if(typeof _0x2a05be!==_0x21c44f(0x144)||!Array[_0x21c44f(0x153)](_0x5e4d78))return![];if(!_0x2a05be||_0x5e4d78[_0x21c44f(0x14c)]===0x0)return![];if(_0x2a05be[_0x21c44f(0x152)]('\x00'))return![];let _0x1244c9;try{_0x1244c9=a4_0x4099dd[_0x21c44f(0x154)](a4_0x4099dd[_0x21c44f(0x150)](_0x2a05be));}catch{return![];}if(!a4_0x4099dd[_0x21c44f(0x156)](_0x1244c9))throw new Error(_0x21c44f(0x14f));return _0x5e4d78[_0x21c44f(0x155)](_0x4a8718=>{const _0x2dc512=_0x21c44f;if(typeof _0x4a8718!==_0x2dc512(0x144)||!_0x4a8718)return![];if(_0x4a8718['includes']('\x00'))return![];let _0x15f636;try{_0x15f636=a4_0x4099dd[_0x2dc512(0x154)](a4_0x4099dd['normalize'](_0x4a8718));}catch{return![];}if(!a4_0x4099dd[_0x2dc512(0x156)](_0x15f636))throw new Error('Allowed\x20directories\x20must\x20be\x20absolute\x20paths\x20after\x20normalization');if(_0x1244c9===_0x15f636)return!![];if(_0x15f636===a4_0x4099dd[_0x2dc512(0x147)])return _0x1244c9[_0x2dc512(0x146)](a4_0x4099dd[_0x2dc512(0x147)]);return _0x1244c9[_0x2dc512(0x146)](_0x15f636+a4_0x4099dd[_0x2dc512(0x147)]);});}function a4_0x10b4(){const _0x6f7593=['some','isAbsolute','4zszesc','string','645912LJPOju','startsWith','sep','3495717kpJqXV','35tddBVQ','2062875YSpWmH','1084200mjPjYy','length','830206YtmVGi','2367745uSOxIL','Path\x20must\x20be\x20absolute\x20after\x20normalization','normalize','2105358lFKDlS','includes','isArray','resolve'];a4_0x10b4=function(){return _0x6f7593;};return a4_0x10b4();}
|
package/dist/roots-utils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x3231e2,_0x4b8309){const _0x20aadf=a5_0x3bda,_0x33b8bc=_0x3231e2();while(!![]){try{const _0x5065=parseInt(_0x20aadf(0x1e8))/0x1*(parseInt(_0x20aadf(0x1f4))/0x2)+-parseInt(_0x20aadf(0x1ea))/0x3*(parseInt(_0x20aadf(0x1f1))/0x4)+parseInt(_0x20aadf(0x1e9))/0x5+parseInt(_0x20aadf(0x1e2))/0x6+parseInt(_0x20aadf(0x1ef))/0x7*(parseInt(_0x20aadf(0x1e3))/0x8)+parseInt(_0x20aadf(0x1f7))/0x9*(parseInt(_0x20aadf(0x1f0))/0xa)+-parseInt(_0x20aadf(0x1f5))/0xb*(parseInt(_0x20aadf(0x1f2))/0xc);if(_0x5065===_0x4b8309)break;else _0x33b8bc['push'](_0x33b8bc['shift']());}catch(_0x2352d1){_0x33b8bc['push'](_0x33b8bc['shift']());}}}(a5_0x3ef1,0xdfd02));import{promises as a5_0x518111}from'fs';import a5_0x308d2a from'path';import a5_0x2e0c5d from'os';function a5_0x3ef1(){const _0xe9fb7e=['\x20due\x20to\x20error:\x20','39708iPyJSP','non-directory\x20root','Skipping\x20invalid\x20directory:\x20','10400544keovyX','2108688Bimuuu','isDirectory','slice','stat','realpath','1lduoNC','6489330SSIKnI','50484NcHzun','file://','resolve','uri','Skipping\x20','14RaOKRy','1170cHnDVu','368iQMspR','782664KXDaxF','join','1867812NKGMKs','429vAdlEU'];a5_0x3ef1=function(){return _0xe9fb7e;};return a5_0x3ef1();}import{normalizePath}from'./path-utils.js';import{logMcpStderr}from'./log-utils.js';function a5_0x3bda(_0x35f3b8,_0x239681){_0x35f3b8=_0x35f3b8-0x1e1;const _0x3ef17a=a5_0x3ef1();let _0x3bdac1=_0x3ef17a[_0x35f3b8];return _0x3bdac1;}async function parseRootUri(_0x140d4c){const _0x316e13=a5_0x3bda;try{const _0x517491=_0x140d4c['startsWith'](_0x316e13(0x1eb))?_0x140d4c['slice'](0x7):_0x140d4c,_0x177614=_0x517491['startsWith']('~/')||_0x517491==='~'?a5_0x308d2a[_0x316e13(0x1f3)](a5_0x2e0c5d['homedir'](),_0x517491[_0x316e13(0x1e5)](0x1)):_0x517491,_0x1e1627=a5_0x308d2a[_0x316e13(0x1ec)](_0x177614),_0x20b19a=await a5_0x518111[_0x316e13(0x1e7)](_0x1e1627);return normalizePath(_0x20b19a);}catch{return null;}}function formatDirectoryError(_0x221dcc,_0x2b4493,_0x14b988){const _0x4acf39=a5_0x3bda;if(_0x14b988)return _0x4acf39(0x1ee)+_0x14b988+':\x20'+_0x221dcc;const _0x5ef671=_0x2b4493 instanceof Error?_0x2b4493['message']:String(_0x2b4493);return _0x4acf39(0x1e1)+_0x221dcc+_0x4acf39(0x1f6)+_0x5ef671;}export async function getValidRootDirectories(_0xaa525){const _0x34d661=a5_0x3bda,_0x18db06=[];for(const _0xb10967 of _0xaa525){const _0x4fe84f=await parseRootUri(_0xb10967[_0x34d661(0x1ed)]);if(!_0x4fe84f){logMcpStderr(formatDirectoryError(_0xb10967[_0x34d661(0x1ed)],undefined,'invalid\x20path\x20or\x20inaccessible'));continue;}try{const _0x4ccfd5=await a5_0x518111[_0x34d661(0x1e6)](_0x4fe84f);_0x4ccfd5[_0x34d661(0x1e4)]()?_0x18db06['push'](_0x4fe84f):logMcpStderr(formatDirectoryError(_0x4fe84f,undefined,_0x34d661(0x1f8)));}catch(_0x30d3dc){logMcpStderr(formatDirectoryError(_0x4fe84f,_0x30d3dc));}}return _0x18db06;}
|
package/dist/tool-definitions.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function a6_0x2d53(){const _0x5c4ca4=['18nwlIDY','7891156fQAbfu','23830wREeEn','7564256NJLYxi','1866944yaDRlV','3020880ldgvvg','668274zTkOrO','7092138efZMQu'];a6_0x2d53=function(){return _0x5c4ca4;};return a6_0x2d53();}(function(_0x517afc,_0x230d65){const _0x5454af=a6_0xf094,_0x6464c8=_0x517afc();while(!![]){try{const _0x5cca16=-parseInt(_0x5454af(0x11c))/0x1*(parseInt(_0x5454af(0x11a))/0x2)+-parseInt(_0x5454af(0x120))/0x3+-parseInt(_0x5454af(0x11e))/0x4+parseInt(_0x5454af(0x11f))/0x5+-parseInt(_0x5454af(0x121))/0x6+parseInt(_0x5454af(0x11b))/0x7+parseInt(_0x5454af(0x11d))/0x8;if(_0x5cca16===_0x230d65)break;else _0x6464c8['push'](_0x6464c8['shift']());}catch(_0x130e94){_0x6464c8['push'](_0x6464c8['shift']());}}}(a6_0x2d53,0x904b5));export const TOOL_NAMES={'EDIT_FILE':'edit_file','CODEBASE_SEARCH':'codebase_search','GITHUB_CODEBASE_SEARCH':'github_codebase_search'};function a6_0xf094(_0x4405e2,_0x5424cd){_0x4405e2=_0x4405e2-0x11a;const _0x2d53da=a6_0x2d53();let _0xf09465=_0x2d53da[_0x4405e2];return _0xf09465;}export const ALL_TOOL_NAMES=Object['values'](TOOL_NAMES);export const KNOWN_TOOL_NAMES=new Set(ALL_TOOL_NAMES);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morphllm/morphmcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.184",
|
|
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.
|
|
38
|
+
"@morphllm/morphsdk": "0.2.174",
|
|
39
39
|
"@vscode/ripgrep": "^1.15.14",
|
|
40
40
|
"axios": "^1.6.0",
|
|
41
41
|
"chalk": "^5.3.0",
|