@morphllm/morphsdk 0.2.93 → 0.2.95
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/chunk-2AMEQAO2.js +46 -0
- package/dist/chunk-2AMEQAO2.js.map +1 -0
- package/dist/{chunk-EI4UKP24.js → chunk-2HMEZZKK.js} +2 -2
- package/dist/{chunk-EI4UKP24.js.map → chunk-2HMEZZKK.js.map} +1 -1
- package/dist/chunk-2VERUKO2.js +177 -0
- package/dist/chunk-2VERUKO2.js.map +1 -0
- package/dist/{chunk-VHOWYK66.js → chunk-43LQLGP6.js} +23 -33
- package/dist/chunk-43LQLGP6.js.map +1 -0
- package/dist/{chunk-LMUZ3NGC.js → chunk-73RV6EXR.js} +2 -2
- package/dist/{chunk-PBLPZ6AU.js → chunk-7D6TXC7X.js} +2 -2
- package/dist/{chunk-GU6DACME.js → chunk-O7LDZA52.js} +2 -2
- package/dist/{chunk-5QIWYEHJ.js → chunk-PE4KGDA6.js} +1 -8
- package/dist/chunk-PE4KGDA6.js.map +1 -0
- package/dist/{chunk-SQN4DUQS.js → chunk-Q6Y4R236.js} +26 -2
- package/dist/chunk-Q6Y4R236.js.map +1 -0
- package/dist/{chunk-PUGIOVSP.js → chunk-QAT5UVPX.js} +2 -2
- package/dist/{chunk-MIIJWDOQ.js → chunk-QJP62BXH.js} +166 -71
- package/dist/chunk-QJP62BXH.js.map +1 -0
- package/dist/{chunk-EYGBUH2R.js → chunk-R7IQWNSA.js} +8 -8
- package/dist/chunk-R7IQWNSA.js.map +1 -0
- package/dist/chunk-SI2CKRKJ.js +389 -0
- package/dist/chunk-SI2CKRKJ.js.map +1 -0
- package/dist/{chunk-4WLGDYWQ.js → chunk-TSENDJQI.js} +6 -6
- package/dist/chunk-TSENDJQI.js.map +1 -0
- package/dist/{chunk-IUG2FHNN.js → chunk-XH7P7HVT.js} +1 -8
- package/dist/chunk-XH7P7HVT.js.map +1 -0
- package/dist/{chunk-FNLNDMIX.js → chunk-YZ5NCWO2.js} +6 -6
- package/dist/chunk-YZ5NCWO2.js.map +1 -0
- package/dist/{chunk-IJ54DTJ3.js → chunk-ZYTAKEBW.js} +13 -13
- package/dist/client.cjs +770 -110
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.js +16 -13
- package/dist/index.cjs +770 -110
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +16 -13
- package/dist/tools/browser/anthropic.cjs +58 -23
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +7 -4
- package/dist/tools/browser/core.cjs +750 -70
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.d.ts +30 -24
- package/dist/tools/browser/core.js +5 -2
- package/dist/tools/browser/errors.cjs +208 -0
- package/dist/tools/browser/errors.cjs.map +1 -0
- package/dist/tools/browser/errors.d.ts +158 -0
- package/dist/tools/browser/errors.js +22 -0
- package/dist/tools/browser/errors.js.map +1 -0
- package/dist/tools/browser/index.cjs +783 -85
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.d.ts +5 -2
- package/dist/tools/browser/index.js +32 -9
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/browser/live.cjs +25 -1
- package/dist/tools/browser/live.cjs.map +1 -1
- package/dist/tools/browser/live.js +1 -1
- package/dist/tools/browser/openai.cjs +58 -23
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +7 -4
- package/dist/tools/browser/profiles/core.cjs +670 -0
- package/dist/tools/browser/profiles/core.cjs.map +1 -0
- package/dist/tools/browser/profiles/core.d.ts +187 -0
- package/dist/tools/browser/profiles/core.js +29 -0
- package/dist/tools/browser/profiles/core.js.map +1 -0
- package/dist/tools/browser/profiles/index.cjs +670 -0
- package/dist/tools/browser/profiles/index.cjs.map +1 -0
- package/dist/tools/browser/profiles/index.d.ts +4 -0
- package/dist/tools/browser/profiles/index.js +29 -0
- package/dist/tools/browser/profiles/index.js.map +1 -0
- package/dist/tools/browser/profiles/types.cjs +74 -0
- package/dist/tools/browser/profiles/types.cjs.map +1 -0
- package/dist/tools/browser/profiles/types.d.ts +195 -0
- package/dist/tools/browser/profiles/types.js +16 -0
- package/dist/tools/browser/profiles/types.js.map +1 -0
- package/dist/tools/browser/prompts.cjs +1 -1
- package/dist/tools/browser/prompts.cjs.map +1 -1
- package/dist/tools/browser/prompts.d.ts +1 -1
- package/dist/tools/browser/prompts.js +1 -1
- package/dist/tools/browser/types.cjs.map +1 -1
- package/dist/tools/browser/types.d.ts +55 -51
- package/dist/tools/browser/vercel.cjs +60 -25
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.d.ts +1 -1
- package/dist/tools/browser/vercel.js +7 -4
- package/dist/tools/fastapply/anthropic.cjs +0 -7
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +1 -1
- package/dist/tools/fastapply/index.cjs +0 -14
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +5 -5
- package/dist/tools/fastapply/openai.cjs +0 -7
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +1 -1
- package/dist/tools/index.cjs +0 -14
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +5 -5
- package/dist/tools/warp_grep/agent/runner.cjs +18 -98
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +2 -3
- package/dist/tools/warp_grep/anthropic.cjs +18 -98
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +8 -9
- package/dist/tools/warp_grep/client.cjs +18 -98
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +5 -6
- package/dist/tools/warp_grep/gemini.cjs +18 -98
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +7 -8
- package/dist/tools/warp_grep/gemini.js.map +1 -1
- package/dist/tools/warp_grep/harness.js +10 -10
- package/dist/tools/warp_grep/index.cjs +18 -98
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.js +8 -9
- package/dist/tools/warp_grep/openai.cjs +18 -98
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +8 -9
- package/dist/tools/warp_grep/vercel.cjs +18 -98
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +8 -9
- package/dist/{vercel-CsnNSdze.d.ts → vercel-CVF27qFK.d.ts} +10 -10
- package/package.json +7 -2
- package/dist/chunk-4WLGDYWQ.js.map +0 -1
- package/dist/chunk-5QIWYEHJ.js.map +0 -1
- package/dist/chunk-EYGBUH2R.js.map +0 -1
- package/dist/chunk-FNLNDMIX.js.map +0 -1
- package/dist/chunk-IUG2FHNN.js.map +0 -1
- package/dist/chunk-MIIJWDOQ.js.map +0 -1
- package/dist/chunk-SQN4DUQS.js.map +0 -1
- package/dist/chunk-VHOWYK66.js.map +0 -1
- /package/dist/{chunk-LMUZ3NGC.js.map → chunk-73RV6EXR.js.map} +0 -0
- /package/dist/{chunk-PBLPZ6AU.js.map → chunk-7D6TXC7X.js.map} +0 -0
- /package/dist/{chunk-GU6DACME.js.map → chunk-O7LDZA52.js.map} +0 -0
- /package/dist/{chunk-PUGIOVSP.js.map → chunk-QAT5UVPX.js.map} +0 -0
- /package/dist/{chunk-IJ54DTJ3.js.map → chunk-ZYTAKEBW.js.map} +0 -0
|
@@ -5,21 +5,20 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
executeToolCall,
|
|
7
7
|
formatResult
|
|
8
|
-
} from "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
} from "../../chunk-QAT5UVPX.js";
|
|
9
|
+
import "../../chunk-43LQLGP6.js";
|
|
10
10
|
import "../../chunk-PUGSTXLO.js";
|
|
11
11
|
import "../../chunk-KRDIR7GG.js";
|
|
12
|
-
import "../../chunk-APP75CBN.js";
|
|
13
|
-
import "../../chunk-SNGGSPYJ.js";
|
|
14
|
-
import {
|
|
15
|
-
getSystemPrompt
|
|
16
|
-
} from "../../chunk-FMLHRJDF.js";
|
|
17
12
|
import "../../chunk-4KMBU6T3.js";
|
|
18
13
|
import "../../chunk-G2RSY56Q.js";
|
|
19
14
|
import "../../chunk-YPKNMYD4.js";
|
|
20
15
|
import "../../chunk-TPP2UGQP.js";
|
|
21
16
|
import "../../chunk-5PNMAWLC.js";
|
|
22
|
-
import "../../chunk-
|
|
17
|
+
import "../../chunk-APP75CBN.js";
|
|
18
|
+
import "../../chunk-SNGGSPYJ.js";
|
|
19
|
+
import {
|
|
20
|
+
getSystemPrompt
|
|
21
|
+
} from "../../chunk-FMLHRJDF.js";
|
|
23
22
|
import "../../chunk-PZ5AY32C.js";
|
|
24
23
|
|
|
25
24
|
// tools/warp_grep/gemini.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../tools/warp_grep/gemini.ts"],"sourcesContent":["/**\n * Google Gemini SDK adapter for morph-warp-grep tool\n * \n * Requires @google/generative-ai as a peer dependency.\n * Install with: npm install @google/generative-ai\n */\n\nimport type { FunctionDeclaration, FunctionDeclarationSchema } from '@google/generative-ai';\nimport { executeToolCall, formatResult } from './client.js';\nimport { WARP_GREP_DESCRIPTION, WARP_GREP_TOOL_NAME, getSystemPrompt } from './prompts.js';\nimport type { WarpGrepToolConfig, WarpGrepResult } from './types.js';\n\n// Use plain object to avoid runtime import of SchemaType enum\nconst TOOL_PARAMETERS = {\n type: 'OBJECT',\n properties: {\n query: { \n type: 'STRING', \n description: 'Free-form repository question' \n },\n },\n required: ['query'],\n} as unknown as FunctionDeclarationSchema;\n\n/**\n * Gemini-native warp grep function declaration\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { warpGrepFunctionDeclaration, execute } from '@morphllm/morphsdk/tools/warp-grep/gemini';\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-2.0-flash',\n * tools: [{ functionDeclarations: [warpGrepFunctionDeclaration] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Find authentication middleware');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call) {\n * const searchResult = await execute(call.args, { repoRoot: '.' });\n * console.log(searchResult);\n * }\n * ```\n */\nexport const warpGrepFunctionDeclaration: FunctionDeclaration = {\n name: WARP_GREP_TOOL_NAME,\n description: WARP_GREP_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n};\n\n/**\n * Execute warp grep search\n * \n * @param input - Tool input with query\n * @param config - Configuration with repoRoot and optional provider\n * @returns Search results\n */\nexport async function execute(\n input: { query: string } | string,\n config: WarpGrepToolConfig\n): Promise<WarpGrepResult> {\n return executeToolCall(input, config);\n}\n\nexport { formatResult, getSystemPrompt };\n\n/**\n * Gemini tool with execute method attached\n */\nexport interface GeminiWarpGrepTool extends FunctionDeclaration {\n execute: (input: unknown) => Promise<WarpGrepResult>;\n formatResult: (result: WarpGrepResult) => string;\n getSystemPrompt: () => string;\n}\n\n/**\n * Create a custom warp grep tool with configuration and methods\n * \n * @param config - Configuration options\n * @returns Function declaration with execute and formatResult methods\n * \n * @example Local usage\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { createMorphWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/gemini';\n * \n * const tool = createMorphWarpGrepTool({ repoRoot: '.' });\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-2.0-flash',\n * tools: [{ functionDeclarations: [tool] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Find authentication middleware');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call && call.name === tool.name) {\n * const searchResult = await tool.execute(call.args);\n * console.log(tool.formatResult(searchResult));\n * \n * // Send result back to model\n * await chat.sendMessage([{\n * functionResponse: {\n * name: call.name,\n * response: { result: tool.formatResult(searchResult) }\n * }\n * }]);\n * }\n * ```\n * \n * @example Remote sandbox (E2B, Modal, etc.)\n * ```typescript\n * const tool = createMorphWarpGrepTool({\n * repoRoot: '/home/repo',\n * remoteCommands: {\n * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,\n * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,\n * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,\n * },\n * });\n * ```\n */\nexport function createWarpGrepTool(config: WarpGrepToolConfig): GeminiWarpGrepTool {\n const declaration: FunctionDeclaration = {\n name: config.name ?? WARP_GREP_TOOL_NAME,\n description: config.description ?? WARP_GREP_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n };\n\n return Object.assign(declaration, {\n execute: async (input: unknown): Promise<WarpGrepResult> => {\n return executeToolCall(input as { query: string } | string, config);\n },\n formatResult: (result: WarpGrepResult): string => {\n return formatResult(result);\n },\n getSystemPrompt: (): string => {\n return getSystemPrompt();\n },\n });\n}\n\n// Legacy alias for backwards compatibility\nexport const createMorphWarpGrepTool = createWarpGrepTool;\n\nexport default warpGrepFunctionDeclaration;\n\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../tools/warp_grep/gemini.ts"],"sourcesContent":["/**\n * Google Gemini SDK adapter for morph-warp-grep tool\n * \n * Requires @google/generative-ai as a peer dependency.\n * Install with: npm install @google/generative-ai\n */\n\nimport type { FunctionDeclaration, FunctionDeclarationSchema } from '@google/generative-ai';\nimport { executeToolCall, formatResult } from './client.js';\nimport { WARP_GREP_DESCRIPTION, WARP_GREP_TOOL_NAME, getSystemPrompt } from './prompts.js';\nimport type { WarpGrepToolConfig, WarpGrepResult } from './types.js';\n\n// Use plain object to avoid runtime import of SchemaType enum\nconst TOOL_PARAMETERS = {\n type: 'OBJECT',\n properties: {\n query: { \n type: 'STRING', \n description: 'Free-form repository question' \n },\n },\n required: ['query'],\n} as unknown as FunctionDeclarationSchema;\n\n/**\n * Gemini-native warp grep function declaration\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { warpGrepFunctionDeclaration, execute } from '@morphllm/morphsdk/tools/warp-grep/gemini';\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-2.0-flash',\n * tools: [{ functionDeclarations: [warpGrepFunctionDeclaration] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Find authentication middleware');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call) {\n * const searchResult = await execute(call.args, { repoRoot: '.' });\n * console.log(searchResult);\n * }\n * ```\n */\nexport const warpGrepFunctionDeclaration: FunctionDeclaration = {\n name: WARP_GREP_TOOL_NAME,\n description: WARP_GREP_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n};\n\n/**\n * Execute warp grep search\n * \n * @param input - Tool input with query\n * @param config - Configuration with repoRoot and optional provider\n * @returns Search results\n */\nexport async function execute(\n input: { query: string } | string,\n config: WarpGrepToolConfig\n): Promise<WarpGrepResult> {\n return executeToolCall(input, config);\n}\n\nexport { formatResult, getSystemPrompt };\n\n/**\n * Gemini tool with execute method attached\n */\nexport interface GeminiWarpGrepTool extends FunctionDeclaration {\n execute: (input: unknown) => Promise<WarpGrepResult>;\n formatResult: (result: WarpGrepResult) => string;\n getSystemPrompt: () => string;\n}\n\n/**\n * Create a custom warp grep tool with configuration and methods\n * \n * @param config - Configuration options\n * @returns Function declaration with execute and formatResult methods\n * \n * @example Local usage\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { createMorphWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/gemini';\n * \n * const tool = createMorphWarpGrepTool({ repoRoot: '.' });\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-2.0-flash',\n * tools: [{ functionDeclarations: [tool] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Find authentication middleware');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call && call.name === tool.name) {\n * const searchResult = await tool.execute(call.args);\n * console.log(tool.formatResult(searchResult));\n * \n * // Send result back to model\n * await chat.sendMessage([{\n * functionResponse: {\n * name: call.name,\n * response: { result: tool.formatResult(searchResult) }\n * }\n * }]);\n * }\n * ```\n * \n * @example Remote sandbox (E2B, Modal, etc.)\n * ```typescript\n * const tool = createMorphWarpGrepTool({\n * repoRoot: '/home/repo',\n * remoteCommands: {\n * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,\n * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,\n * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,\n * },\n * });\n * ```\n */\nexport function createWarpGrepTool(config: WarpGrepToolConfig): GeminiWarpGrepTool {\n const declaration: FunctionDeclaration = {\n name: config.name ?? WARP_GREP_TOOL_NAME,\n description: config.description ?? WARP_GREP_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n };\n\n return Object.assign(declaration, {\n execute: async (input: unknown): Promise<WarpGrepResult> => {\n return executeToolCall(input as { query: string } | string, config);\n },\n formatResult: (result: WarpGrepResult): string => {\n return formatResult(result);\n },\n getSystemPrompt: (): string => {\n return getSystemPrompt();\n },\n });\n}\n\n// Legacy alias for backwards compatibility\nexport const createMorphWarpGrepTool = createWarpGrepTool;\n\nexport default warpGrepFunctionDeclaration;\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,YAAY;AAAA,IACV,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU,CAAC,OAAO;AACpB;AA2BO,IAAM,8BAAmD;AAAA,EAC9D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AACd;AASA,eAAsB,QACpB,OACA,QACyB;AACzB,SAAO,gBAAgB,OAAO,MAAM;AACtC;AA+DO,SAAS,mBAAmB,QAAgD;AACjF,QAAM,cAAmC;AAAA,IACvC,MAAM,OAAO,QAAQ;AAAA,IACrB,aAAa,OAAO,eAAe;AAAA,IACnC,YAAY;AAAA,EACd;AAEA,SAAO,OAAO,OAAO,aAAa;AAAA,IAChC,SAAS,OAAO,UAA4C;AAC1D,aAAO,gBAAgB,OAAqC,MAAM;AAAA,IACpE;AAAA,IACA,cAAc,CAAC,WAAmC;AAChD,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,iBAAiB,MAAc;AAC7B,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAGO,IAAM,0BAA0B;AAEvC,IAAO,iBAAQ;","names":[]}
|
|
@@ -9,16 +9,6 @@ import {
|
|
|
9
9
|
toolListDirectory,
|
|
10
10
|
toolRead
|
|
11
11
|
} from "../../chunk-KRDIR7GG.js";
|
|
12
|
-
import {
|
|
13
|
-
formatAgentToolOutput
|
|
14
|
-
} from "../../chunk-APP75CBN.js";
|
|
15
|
-
import {
|
|
16
|
-
LLMResponseParser
|
|
17
|
-
} from "../../chunk-SNGGSPYJ.js";
|
|
18
|
-
import {
|
|
19
|
-
SYSTEM_PROMPT,
|
|
20
|
-
getSystemPrompt
|
|
21
|
-
} from "../../chunk-FMLHRJDF.js";
|
|
22
12
|
import {
|
|
23
13
|
LocalRipgrepProvider
|
|
24
14
|
} from "../../chunk-4KMBU6T3.js";
|
|
@@ -29,6 +19,16 @@ import {
|
|
|
29
19
|
AGENT_CONFIG,
|
|
30
20
|
DEFAULT_EXCLUDES
|
|
31
21
|
} from "../../chunk-5PNMAWLC.js";
|
|
22
|
+
import {
|
|
23
|
+
formatAgentToolOutput
|
|
24
|
+
} from "../../chunk-APP75CBN.js";
|
|
25
|
+
import {
|
|
26
|
+
LLMResponseParser
|
|
27
|
+
} from "../../chunk-SNGGSPYJ.js";
|
|
28
|
+
import {
|
|
29
|
+
SYSTEM_PROMPT,
|
|
30
|
+
getSystemPrompt
|
|
31
|
+
} from "../../chunk-FMLHRJDF.js";
|
|
32
32
|
import "../../chunk-PZ5AY32C.js";
|
|
33
33
|
|
|
34
34
|
// tools/warp_grep/harness.ts
|
|
@@ -752,80 +752,6 @@ function mergeRanges(ranges) {
|
|
|
752
752
|
return merged;
|
|
753
753
|
}
|
|
754
754
|
|
|
755
|
-
// tools/utils/resilience.ts
|
|
756
|
-
var DEFAULT_RETRY_CONFIG = {
|
|
757
|
-
maxRetries: 3,
|
|
758
|
-
initialDelay: 1e3,
|
|
759
|
-
maxDelay: 3e4,
|
|
760
|
-
backoffMultiplier: 2,
|
|
761
|
-
retryableErrors: ["ECONNREFUSED", "ETIMEDOUT", "ENOTFOUND"]
|
|
762
|
-
};
|
|
763
|
-
async function fetchWithRetry(url, options, retryConfig = {}) {
|
|
764
|
-
const {
|
|
765
|
-
maxRetries = DEFAULT_RETRY_CONFIG.maxRetries,
|
|
766
|
-
initialDelay = DEFAULT_RETRY_CONFIG.initialDelay,
|
|
767
|
-
maxDelay = DEFAULT_RETRY_CONFIG.maxDelay,
|
|
768
|
-
backoffMultiplier = DEFAULT_RETRY_CONFIG.backoffMultiplier,
|
|
769
|
-
retryableErrors = DEFAULT_RETRY_CONFIG.retryableErrors,
|
|
770
|
-
onRetry
|
|
771
|
-
} = retryConfig;
|
|
772
|
-
let lastError = null;
|
|
773
|
-
let delay = initialDelay;
|
|
774
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
775
|
-
try {
|
|
776
|
-
const response = await fetch(url, options);
|
|
777
|
-
if (response.status === 429 || response.status === 503) {
|
|
778
|
-
if (attempt < maxRetries) {
|
|
779
|
-
const retryAfter = response.headers.get("Retry-After");
|
|
780
|
-
const waitTime = retryAfter ? parseInt(retryAfter) * 1e3 : Math.min(delay, maxDelay);
|
|
781
|
-
const error = new Error(`HTTP ${response.status}: Retrying after ${waitTime}ms`);
|
|
782
|
-
if (onRetry) {
|
|
783
|
-
onRetry(attempt + 1, error);
|
|
784
|
-
}
|
|
785
|
-
await sleep(waitTime);
|
|
786
|
-
delay *= backoffMultiplier;
|
|
787
|
-
continue;
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
return response;
|
|
791
|
-
} catch (error) {
|
|
792
|
-
lastError = error;
|
|
793
|
-
const isRetryable = retryableErrors.some(
|
|
794
|
-
(errType) => lastError?.message?.includes(errType)
|
|
795
|
-
);
|
|
796
|
-
if (!isRetryable || attempt === maxRetries) {
|
|
797
|
-
throw lastError;
|
|
798
|
-
}
|
|
799
|
-
const waitTime = Math.min(delay, maxDelay);
|
|
800
|
-
if (onRetry) {
|
|
801
|
-
onRetry(attempt + 1, lastError);
|
|
802
|
-
}
|
|
803
|
-
await sleep(waitTime);
|
|
804
|
-
delay *= backoffMultiplier;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
throw lastError || new Error("Max retries exceeded");
|
|
808
|
-
}
|
|
809
|
-
async function withTimeout(promise, timeoutMs, errorMessage) {
|
|
810
|
-
let timeoutId;
|
|
811
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
812
|
-
timeoutId = setTimeout(() => {
|
|
813
|
-
reject(new Error(errorMessage || `Operation timed out after ${timeoutMs}ms`));
|
|
814
|
-
}, timeoutMs);
|
|
815
|
-
});
|
|
816
|
-
try {
|
|
817
|
-
const result = await Promise.race([promise, timeoutPromise]);
|
|
818
|
-
clearTimeout(timeoutId);
|
|
819
|
-
return result;
|
|
820
|
-
} catch (error) {
|
|
821
|
-
clearTimeout(timeoutId);
|
|
822
|
-
throw error;
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
function sleep(ms) {
|
|
826
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
827
|
-
}
|
|
828
|
-
|
|
829
755
|
// tools/warp_grep/agent/formatter.ts
|
|
830
756
|
var ToolOutputFormatter = class {
|
|
831
757
|
format(toolName, args, output, options = {}) {
|
|
@@ -1000,42 +926,36 @@ function enforceContextLimit(messages, maxChars = AGENT_CONFIG.MAX_CONTEXT_CHARS
|
|
|
1000
926
|
}
|
|
1001
927
|
|
|
1002
928
|
// tools/warp_grep/agent/runner.ts
|
|
929
|
+
var import_openai = __toESM(require("openai"), 1);
|
|
1003
930
|
var import_path2 = __toESM(require("path"), 1);
|
|
1004
931
|
var parser = new LLMResponseParser();
|
|
1005
932
|
var DEFAULT_API_URL = "https://api.morphllm.com";
|
|
1006
933
|
async function callModel(messages, model, options = {}) {
|
|
1007
934
|
const baseUrl = options.morphApiUrl || DEFAULT_API_URL;
|
|
1008
935
|
const apiKey = options.morphApiKey || process.env.MORPH_API_KEY || "";
|
|
1009
|
-
const fetchPromise = fetchWithRetry(
|
|
1010
|
-
`${baseUrl}/v1/chat/completions`,
|
|
1011
|
-
{
|
|
1012
|
-
method: "POST",
|
|
1013
|
-
headers: {
|
|
1014
|
-
"Content-Type": "application/json",
|
|
1015
|
-
Authorization: `Bearer ${apiKey}`
|
|
1016
|
-
},
|
|
1017
|
-
body: JSON.stringify({
|
|
1018
|
-
model,
|
|
1019
|
-
temperature: 0,
|
|
1020
|
-
max_tokens: 1024,
|
|
1021
|
-
repetition_penalty: 1.05,
|
|
1022
|
-
messages
|
|
1023
|
-
})
|
|
1024
|
-
},
|
|
1025
|
-
options.retryConfig
|
|
1026
|
-
);
|
|
1027
936
|
const timeoutMs = options.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1030
|
-
|
|
937
|
+
const client = new import_openai.default({
|
|
938
|
+
apiKey,
|
|
939
|
+
baseURL: baseUrl,
|
|
940
|
+
maxRetries: options.retryConfig?.maxRetries,
|
|
941
|
+
timeout: timeoutMs
|
|
942
|
+
});
|
|
943
|
+
let data;
|
|
944
|
+
try {
|
|
945
|
+
data = await client.chat.completions.create({
|
|
946
|
+
model,
|
|
947
|
+
temperature: 0,
|
|
948
|
+
max_tokens: 1024,
|
|
949
|
+
messages
|
|
950
|
+
});
|
|
951
|
+
} catch (error) {
|
|
952
|
+
if (error instanceof import_openai.default.APIError && error.status === 404) {
|
|
1031
953
|
throw new Error(
|
|
1032
954
|
"The endpoint you are trying to call is likely deprecated. Please update with: npm cache clean --force && npx -y @morphllm/morphmcp@latest or visit: https://morphllm.com/mcp"
|
|
1033
955
|
);
|
|
1034
956
|
}
|
|
1035
|
-
|
|
1036
|
-
throw new Error(`morph-warp-grep error ${resp.status}: ${t}`);
|
|
957
|
+
throw error;
|
|
1037
958
|
}
|
|
1038
|
-
const data = await resp.json();
|
|
1039
959
|
const content = data?.choices?.[0]?.message?.content;
|
|
1040
960
|
if (!content || typeof content !== "string") {
|
|
1041
961
|
throw new Error("Invalid response from model");
|