@morphllm/morphsdk 0.2.69 → 0.2.71

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.
Files changed (57) hide show
  1. package/dist/{chunk-XFCMTW5L.js → chunk-4WJSTOHP.js} +3 -16
  2. package/dist/{chunk-XFCMTW5L.js.map → chunk-4WJSTOHP.js.map} +1 -1
  3. package/dist/chunk-B5A4XLSQ.js +10 -0
  4. package/dist/chunk-B5A4XLSQ.js.map +1 -0
  5. package/dist/{chunk-B3J2O2NW.js → chunk-BPVNNJ6D.js} +5 -5
  6. package/dist/{chunk-Q6GHKKS5.js → chunk-IYLEB6BY.js} +3 -15
  7. package/dist/{chunk-Q6GHKKS5.js.map → chunk-IYLEB6BY.js.map} +1 -1
  8. package/dist/{chunk-E4434A4Y.js → chunk-NGF2VIQV.js} +2 -2
  9. package/dist/{chunk-P6OEPI4N.js → chunk-POVU2CPK.js} +4 -20
  10. package/dist/{chunk-P6OEPI4N.js.map → chunk-POVU2CPK.js.map} +1 -1
  11. package/dist/{chunk-SUBBMTMY.js → chunk-RRWN62VU.js} +2 -2
  12. package/dist/chunk-RRWN62VU.js.map +1 -0
  13. package/dist/client.cjs +1 -1
  14. package/dist/client.cjs.map +1 -1
  15. package/dist/client.js +6 -6
  16. package/dist/index.cjs +6 -13
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.js +7 -8
  19. package/dist/tools/warp_grep/agent/runner.cjs +1 -1
  20. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  21. package/dist/tools/warp_grep/agent/runner.js +1 -1
  22. package/dist/tools/warp_grep/anthropic.cjs +1 -1
  23. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  24. package/dist/tools/warp_grep/anthropic.d.ts +78 -3
  25. package/dist/tools/warp_grep/anthropic.js +3 -3
  26. package/dist/tools/warp_grep/client.cjs +1 -1
  27. package/dist/tools/warp_grep/client.cjs.map +1 -1
  28. package/dist/tools/warp_grep/client.js +2 -2
  29. package/dist/tools/warp_grep/gemini.cjs +3 -4
  30. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  31. package/dist/tools/warp_grep/gemini.d.ts +109 -3
  32. package/dist/tools/warp_grep/gemini.js +46 -9
  33. package/dist/tools/warp_grep/gemini.js.map +1 -1
  34. package/dist/tools/warp_grep/index.cjs +7 -188
  35. package/dist/tools/warp_grep/index.cjs.map +1 -1
  36. package/dist/tools/warp_grep/index.d.ts +89 -9
  37. package/dist/tools/warp_grep/index.js +5 -18
  38. package/dist/tools/warp_grep/openai.cjs +1 -1
  39. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  40. package/dist/tools/warp_grep/openai.d.ts +78 -3
  41. package/dist/tools/warp_grep/openai.js +3 -3
  42. package/dist/tools/warp_grep/vercel.cjs +1 -1
  43. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  44. package/dist/tools/warp_grep/vercel.d.ts +56 -3
  45. package/dist/tools/warp_grep/vercel.js +3 -3
  46. package/package.json +1 -1
  47. package/dist/anthropic-BC-AMEIN.d.ts +0 -89
  48. package/dist/chunk-2LSVUHIE.js +0 -75
  49. package/dist/chunk-2LSVUHIE.js.map +0 -1
  50. package/dist/chunk-ISWL67SF.js +0 -1
  51. package/dist/chunk-ISWL67SF.js.map +0 -1
  52. package/dist/chunk-SUBBMTMY.js.map +0 -1
  53. package/dist/gemini-BIFBiIjY.d.ts +0 -119
  54. package/dist/openai-Beb9escY.d.ts +0 -89
  55. package/dist/vercel-Bo84tpBe.d.ts +0 -66
  56. /package/dist/{chunk-B3J2O2NW.js.map → chunk-BPVNNJ6D.js.map} +0 -0
  57. /package/dist/{chunk-E4434A4Y.js.map → chunk-NGF2VIQV.js.map} +0 -0
@@ -1,7 +1,60 @@
1
- import 'ai';
2
- import '../../types-CnvVDM63.js';
1
+ import * as ai from 'ai';
2
+ import { d as WarpGrepToolConfig, c as WarpGrepContext, b as WarpGrepResult } from '../../types-CnvVDM63.js';
3
3
  export { formatResult } from './client.js';
4
4
  export { getSystemPrompt } from './agent/prompt.js';
5
- export { c as createWarpGrepTool, c as default, e as execute } from '../../vercel-Bo84tpBe.js';
6
5
  import './providers/types.js';
7
6
  import '../utils/resilience.js';
7
+
8
+ /**
9
+ * Execute warp grep search
10
+ *
11
+ * @param input - Tool input with query
12
+ * @param config - Configuration with repoRoot and optional provider
13
+ * @returns Search results
14
+ */
15
+ declare function execute(input: {
16
+ query: string;
17
+ }, config: WarpGrepToolConfig): Promise<WarpGrepResult>;
18
+
19
+ /**
20
+ * Create Vercel AI SDK warp grep tool
21
+ *
22
+ * @param config - Configuration options
23
+ * @returns Vercel AI SDK tool
24
+ *
25
+ * @example Local usage
26
+ * ```typescript
27
+ * import { generateText } from 'ai';
28
+ * import { anthropic } from '@ai-sdk/anthropic';
29
+ * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';
30
+ *
31
+ * const grepTool = createWarpGrepTool({ repoRoot: '.' });
32
+ *
33
+ * const result = await generateText({
34
+ * model: anthropic('claude-sonnet-4-5-20250929'),
35
+ * tools: { grep: grepTool },
36
+ * prompt: 'Find authentication middleware'
37
+ * });
38
+ * ```
39
+ *
40
+ * @example Remote sandbox (E2B, Modal, etc.)
41
+ * ```typescript
42
+ * const grepTool = createMorphWarpGrepTool({
43
+ * repoRoot: '/home/repo',
44
+ * remoteCommands: {
45
+ * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,
46
+ * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,
47
+ * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,
48
+ * },
49
+ * });
50
+ * ```
51
+ */
52
+ declare function createWarpGrepTool(config: WarpGrepToolConfig): ai.Tool<{
53
+ query: string;
54
+ }, {
55
+ success: boolean;
56
+ contexts: WarpGrepContext[] | undefined;
57
+ summary: string | undefined;
58
+ }>;
59
+
60
+ export { createWarpGrepTool, createWarpGrepTool as default, execute };
@@ -2,12 +2,12 @@ import {
2
2
  createWarpGrepTool,
3
3
  execute,
4
4
  vercel_default
5
- } from "../../chunk-P6OEPI4N.js";
5
+ } from "../../chunk-POVU2CPK.js";
6
6
  import "../../chunk-KW7OEGZK.js";
7
7
  import {
8
8
  formatResult
9
- } from "../../chunk-E4434A4Y.js";
10
- import "../../chunk-SUBBMTMY.js";
9
+ } from "../../chunk-NGF2VIQV.js";
10
+ import "../../chunk-RRWN62VU.js";
11
11
  import "../../chunk-26QXQFLZ.js";
12
12
  import "../../chunk-DCIUCDWJ.js";
13
13
  import "../../chunk-APP75CBN.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphllm/morphsdk",
3
- "version": "0.2.69",
3
+ "version": "0.2.71",
4
4
  "description": "TypeScript SDK and CLI for Morph Fast Apply integration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1,89 +0,0 @@
1
- import { Tool } from '@anthropic-ai/sdk/resources/messages';
2
- import { formatResult } from './tools/warp_grep/client.js';
3
- import { getSystemPrompt } from './tools/warp_grep/agent/prompt.js';
4
- import { d as WarpGrepToolConfig, b as WarpGrepResult } from './types-CnvVDM63.js';
5
-
6
- /**
7
- * Anthropic SDK adapter for morph-warp-grep tool
8
- */
9
-
10
- /**
11
- * Anthropic-native warp grep tool definition
12
- *
13
- * @example
14
- * ```typescript
15
- * import Anthropic from '@anthropic-ai/sdk';
16
- * import { warpGrepTool, execute } from '@morphllm/morphsdk/tools/warp-grep/anthropic';
17
- *
18
- * const client = new Anthropic();
19
- * const response = await client.messages.create({
20
- * model: 'claude-sonnet-4-5-20250929',
21
- * tools: [warpGrepTool],
22
- * messages: [{ role: 'user', content: 'Find authentication middleware' }]
23
- * });
24
- *
25
- * // Execute the tool call
26
- * const result = await execute({ query: '...' }, { repoRoot: '.' });
27
- * ```
28
- */
29
- declare const warpGrepTool: Tool;
30
- /**
31
- * Execute warp grep search
32
- *
33
- * @param input - Tool input with query
34
- * @param config - Configuration with repoRoot and optional provider
35
- * @returns Search results
36
- */
37
- declare function execute(input: {
38
- query: string;
39
- } | string, config: WarpGrepToolConfig): Promise<WarpGrepResult>;
40
-
41
- /**
42
- * Create a custom warp grep tool with configuration and methods
43
- *
44
- * @param config - Configuration options
45
- * @returns Tool definition with execute and formatResult methods
46
- *
47
- * @example Local usage
48
- * ```typescript
49
- * import Anthropic from '@anthropic-ai/sdk';
50
- * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/anthropic';
51
- *
52
- * const tool = createWarpGrepTool({ repoRoot: '.' });
53
- *
54
- * const client = new Anthropic();
55
- * const response = await client.messages.create({
56
- * model: 'claude-sonnet-4-5-20250929',
57
- * tools: [tool],
58
- * messages: [{ role: 'user', content: 'Find authentication middleware' }]
59
- * });
60
- * ```
61
- *
62
- * @example Remote sandbox (E2B, Modal, etc.)
63
- * ```typescript
64
- * const tool = createMorphWarpGrepTool({
65
- * repoRoot: '/home/repo',
66
- * remoteCommands: {
67
- * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,
68
- * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,
69
- * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,
70
- * },
71
- * });
72
- * ```
73
- */
74
- declare function createWarpGrepTool(config: WarpGrepToolConfig): Tool & {
75
- execute: (input: unknown) => Promise<WarpGrepResult>;
76
- formatResult: (result: WarpGrepResult) => string;
77
- getSystemPrompt: () => string;
78
- };
79
-
80
- declare const anthropic_createWarpGrepTool: typeof createWarpGrepTool;
81
- declare const anthropic_execute: typeof execute;
82
- declare const anthropic_formatResult: typeof formatResult;
83
- declare const anthropic_getSystemPrompt: typeof getSystemPrompt;
84
- declare const anthropic_warpGrepTool: typeof warpGrepTool;
85
- declare namespace anthropic {
86
- export { anthropic_createWarpGrepTool as createWarpGrepTool, anthropic_execute as execute, anthropic_formatResult as formatResult, anthropic_getSystemPrompt as getSystemPrompt, anthropic_warpGrepTool as warpGrepTool };
87
- }
88
-
89
- export { anthropic as a, createWarpGrepTool as c, execute as e, warpGrepTool as w };
@@ -1,75 +0,0 @@
1
- import {
2
- WARP_GREP_DESCRIPTION,
3
- WARP_GREP_TOOL_NAME
4
- } from "./chunk-KW7OEGZK.js";
5
- import {
6
- executeToolCall,
7
- formatResult
8
- } from "./chunk-E4434A4Y.js";
9
- import {
10
- getSystemPrompt
11
- } from "./chunk-Q5AHGIQO.js";
12
- import {
13
- __export
14
- } from "./chunk-PZ5AY32C.js";
15
-
16
- // tools/warp_grep/gemini.ts
17
- var gemini_exports = {};
18
- __export(gemini_exports, {
19
- createMorphWarpGrepTool: () => createMorphWarpGrepTool,
20
- createWarpGrepTool: () => createWarpGrepTool,
21
- default: () => gemini_default,
22
- execute: () => execute,
23
- formatResult: () => formatResult,
24
- getSystemPrompt: () => getSystemPrompt,
25
- warpGrepFunctionDeclaration: () => warpGrepFunctionDeclaration
26
- });
27
- import { SchemaType } from "@google/generative-ai";
28
- var TOOL_PARAMETERS = {
29
- type: SchemaType.OBJECT,
30
- properties: {
31
- query: {
32
- type: SchemaType.STRING,
33
- description: "Free-form repository question"
34
- }
35
- },
36
- required: ["query"]
37
- };
38
- var warpGrepFunctionDeclaration = {
39
- name: WARP_GREP_TOOL_NAME,
40
- description: WARP_GREP_DESCRIPTION,
41
- parameters: TOOL_PARAMETERS
42
- };
43
- async function execute(input, config) {
44
- return executeToolCall(input, config);
45
- }
46
- function createWarpGrepTool(config) {
47
- const declaration = {
48
- name: config.name ?? WARP_GREP_TOOL_NAME,
49
- description: config.description ?? WARP_GREP_DESCRIPTION,
50
- parameters: TOOL_PARAMETERS
51
- };
52
- return Object.assign(declaration, {
53
- execute: async (input) => {
54
- return executeToolCall(input, config);
55
- },
56
- formatResult: (result) => {
57
- return formatResult(result);
58
- },
59
- getSystemPrompt: () => {
60
- return getSystemPrompt();
61
- }
62
- });
63
- }
64
- var createMorphWarpGrepTool = createWarpGrepTool;
65
- var gemini_default = warpGrepFunctionDeclaration;
66
-
67
- export {
68
- warpGrepFunctionDeclaration,
69
- execute,
70
- createWarpGrepTool,
71
- createMorphWarpGrepTool,
72
- gemini_default,
73
- gemini_exports
74
- };
75
- //# sourceMappingURL=chunk-2LSVUHIE.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../tools/warp_grep/gemini.ts"],"sourcesContent":["/**\n * Google Gemini SDK adapter for morph-warp-grep tool\n */\n\nimport type { FunctionDeclaration, FunctionDeclarationSchema } from '@google/generative-ai';\nimport { SchemaType } 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/**\n * Parameter schema for the warp grep tool (Gemini format)\n */\nconst TOOL_PARAMETERS: FunctionDeclarationSchema = {\n type: SchemaType.OBJECT,\n properties: {\n query: { \n type: SchemaType.STRING, \n description: 'Free-form repository question' \n },\n },\n required: ['query'],\n};\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\n// Re-export formatResult and getSystemPrompt for convenience\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,kBAAkB;AAQ3B,IAAM,kBAA6C;AAAA,EACjD,MAAM,WAAW;AAAA,EACjB,YAAY;AAAA,IACV,OAAO;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,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;AAgEO,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":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-ISWL67SF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../tools/warp_grep/agent/runner.ts"],"sourcesContent":["import { AGENT_CONFIG, DEFAULT_MODEL } from './config.js';\nimport { getSystemPrompt } from './prompt.js';\nimport type { AgentRunResult, ChatMessage, SessionConfig, AgentFinish } from './types.js';\nimport { LLMResponseParser } from './parser.js';\nimport type { WarpGrepProvider } from '../providers/types.js';\nimport { toolGrep } from './tools/grep.js';\nimport { toolRead } from './tools/read.js';\nimport { toolListDirectory } from './tools/list_directory.js';\nimport { readFinishFiles } from './tools/finish.js';\nimport { fetchWithRetry, withTimeout, type RetryConfig } from '../../utils/resilience.js';\nimport { formatAgentToolOutput } from './formatter.js';\nimport { formatTurnMessage, calculateContextBudget, buildInitialState, enforceContextLimit } from './helpers.js';\nimport path from 'path';\n\ntype EventName =\n | 'initial_state'\n | 'round_start'\n | 'round_end'\n | 'finish'\n | 'error';\n\nexport type EventCallback = (name: EventName, payload: Record<string, unknown>) => void;\n\nconst parser = new LLMResponseParser();\n\nconst DEFAULT_API_URL = 'https://api.morphllm.com';\n\ninterface CallModelOptions {\n morphApiKey?: string;\n morphApiUrl?: string;\n retryConfig?: RetryConfig;\n}\n\nasync function callModel(\n messages: ChatMessage[],\n model: string,\n options: CallModelOptions = {}\n): Promise<string> {\n const baseUrl = DEFAULT_API_URL;\n const apiKey = options.morphApiKey || process.env.MORPH_API_KEY || '';\n \n const fetchPromise = fetchWithRetry(\n `${baseUrl}/v1/chat/completions`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n model,\n temperature: 0.0,\n max_tokens: 1024,\n messages,\n }),\n },\n options.retryConfig\n );\n const resp = await withTimeout(fetchPromise, AGENT_CONFIG.TIMEOUT_MS, 'morph-warp-grep request timed out');\n if (!resp.ok) {\n if (resp.status === 404) {\n throw new Error(\n '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'\n );\n }\n // keeping these cases are real throws, if this happens retry will likely not help, so best we just throw here, notice the error and fix\n const t = await resp.text();\n throw new Error(`morph-warp-grep error ${resp.status}: ${t}`);\n }\n const data = await resp.json();\n const content = data?.choices?.[0]?.message?.content;\n if (!content || typeof content !== 'string') {\n throw new Error('Invalid response from model');\n }\n return content;\n}\n\nexport async function runWarpGrep(config: SessionConfig & { provider: WarpGrepProvider }): Promise<AgentRunResult> {\n const repoRoot = path.resolve(config.repoRoot || process.cwd());\n const messages: ChatMessage[] = [];\n\n messages.push({ role: 'system' as const, content: getSystemPrompt() });\n const initialState = await buildInitialState(repoRoot, config.query, config.provider);\n messages.push({ role: 'user', content: initialState });\n\n const maxTurns = AGENT_CONFIG.MAX_TURNS;\n const model = config.model || DEFAULT_MODEL;\n const provider = config.provider;\n const errors: Array<{ message: string }> = [];\n\n let finishMeta: AgentFinish | undefined;\n let terminationReason: AgentRunResult['terminationReason'] = 'terminated';\n\n for (let turn = 1; turn <= maxTurns; turn += 1) {\n // Enforce hard context limit before calling model\n enforceContextLimit(messages);\n \n // call model\n const assistantContent = await callModel(messages, model, {\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n }).catch((e: unknown) => {\n errors.push({ message: e instanceof Error ? e.message : String(e) });\n return '';\n });\n if (!assistantContent) break;\n messages.push({ role: 'assistant', content: assistantContent });\n\n // parse tool calls (no longer throws - returns _skip calls for malformed commands)\n const toolCalls = parser.parse(assistantContent);\n if (toolCalls.length === 0) {\n errors.push({ message: 'No tool calls produced by the model. Your MCP is likely out of date! Update it by running: rm -rf ~/.npm/_npx && npm cache clean --force && npx -y @morphllm/morphmcp@latest' });\n terminationReason = 'terminated';\n break;\n }\n\n const finishCalls = toolCalls.filter(c => c.name === 'finish');\n const grepCalls = toolCalls.filter(c => c.name === 'grep');\n const listDirCalls = toolCalls.filter(c => c.name === 'list_directory');\n const readCalls = toolCalls.filter(c => c.name === 'read');\n const skipCalls = toolCalls.filter(c => c.name === '_skip');\n\n const formatted: string[] = [];\n\n // Surface any skipped commands as feedback to the LLM\n for (const c of skipCalls) {\n const msg = (c.arguments as { message?: string })?.message || 'Command skipped due to parsing error';\n formatted.push(msg);\n }\n\n const allPromises: Array<Promise<string>> = [];\n \n for (const c of grepCalls) {\n const args = (c.arguments ?? {}) as { pattern: string; path: string; glob?: string };\n allPromises.push(\n toolGrep(provider, args).then(\n ({ output }) => formatAgentToolOutput('grep', args, output, { isError: false }),\n err => formatAgentToolOutput('grep', args, String(err), { isError: true })\n )\n );\n }\n \n for (const c of listDirCalls) {\n const args = (c.arguments ?? {}) as { path: string; pattern?: string | null };\n allPromises.push(\n toolListDirectory(provider, args).then(\n p => formatAgentToolOutput('list_directory', args, p, { isError: false }),\n err => formatAgentToolOutput('list_directory', args, String(err), { isError: true })\n )\n );\n }\n \n for (const c of readCalls) {\n const args = (c.arguments ?? {}) as { path: string; start?: number; end?: number; lines?: Array<[number, number]> };\n allPromises.push(\n toolRead(provider, args).then(\n p => formatAgentToolOutput('read', args, p, { isError: false }),\n err => formatAgentToolOutput('read', args, String(err), { isError: true })\n )\n );\n }\n \n const allResults = await Promise.all(allPromises);\n for (const result of allResults) {\n formatted.push(result);\n }\n\n if (formatted.length > 0) {\n const turnMessage = formatTurnMessage(turn, maxTurns);\n const contextBudget = calculateContextBudget(messages);\n messages.push({ role: 'user', content: formatted.join('\\n') + turnMessage + '\\n' + contextBudget });\n }\n\n if (finishCalls.length) {\n const fc = finishCalls[0];\n const files = ((fc.arguments as any)?.files ?? []) as AgentFinish['files'];\n finishMeta = { files };\n terminationReason = 'completed';\n break;\n }\n }\n\n if (terminationReason !== 'completed' || !finishMeta) {\n return { terminationReason, messages, errors };\n }\n\n // Build finish payload\n const parts: string[] = ['Relevant context found:'];\n for (const f of finishMeta.files) {\n const ranges = f.lines === '*' ? '*' : f.lines.map(([s, e]) => `${s}-${e}`).join(', ');\n parts.push(`- ${f.path}: ${ranges}`);\n }\n const payload = parts.join('\\n');\n\n // Resolve file contents for returned ranges\n // Wrap reader in try-catch to handle non-existent or unreadable files gracefully\n // Track files that couldn't be read for error reporting\n const fileReadErrors: Array<{ path: string; error: string }> = [];\n const resolved = await readFinishFiles(\n repoRoot,\n finishMeta.files,\n async (p: string, s?: number, e?: number) => {\n try {\n const rr = await provider.read({ path: p, start: s, end: e });\n // rr.lines are \"line|content\" → strip the \"line|\" prefix\n return rr.lines.map(l => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n } catch (err) {\n // File doesn't exist or can't be read - log error but don't throw\n // This handles cases where the agent hallucinated a path or the file was deleted\n const errorMsg = err instanceof Error ? err.message : String(err);\n fileReadErrors.push({ path: p, error: errorMsg });\n console.error(`[warp_grep] Failed to read file: ${p} - ${errorMsg}`);\n return [`[couldn't find: ${p}]`];\n }\n }\n );\n\n // Add file read errors to the result so MCP can report them\n if (fileReadErrors.length > 0) {\n errors.push(...fileReadErrors.map(e => ({ message: `File read error: ${e.path} - ${e.error}` })));\n }\n\n return {\n terminationReason: 'completed',\n messages,\n finish: { payload, metadata: finishMeta, resolved },\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,119 +0,0 @@
1
- import { FunctionDeclaration } from '@google/generative-ai';
2
- import { formatResult } from './tools/warp_grep/client.js';
3
- import { getSystemPrompt } from './tools/warp_grep/agent/prompt.js';
4
- import { d as WarpGrepToolConfig, b as WarpGrepResult } from './types-CnvVDM63.js';
5
-
6
- /**
7
- * Google Gemini SDK adapter for morph-warp-grep tool
8
- */
9
-
10
- /**
11
- * Gemini-native warp grep function declaration
12
- *
13
- * @example
14
- * ```typescript
15
- * import { GoogleGenerativeAI } from '@google/generative-ai';
16
- * import { warpGrepFunctionDeclaration, execute } from '@morphllm/morphsdk/tools/warp-grep/gemini';
17
- *
18
- * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
19
- * const model = genAI.getGenerativeModel({
20
- * model: 'gemini-2.0-flash',
21
- * tools: [{ functionDeclarations: [warpGrepFunctionDeclaration] }]
22
- * });
23
- *
24
- * const chat = model.startChat();
25
- * const result = await chat.sendMessage('Find authentication middleware');
26
- *
27
- * // Handle function call
28
- * const call = result.response.functionCalls()?.[0];
29
- * if (call) {
30
- * const searchResult = await execute(call.args, { repoRoot: '.' });
31
- * console.log(searchResult);
32
- * }
33
- * ```
34
- */
35
- declare const warpGrepFunctionDeclaration: FunctionDeclaration;
36
- /**
37
- * Execute warp grep search
38
- *
39
- * @param input - Tool input with query
40
- * @param config - Configuration with repoRoot and optional provider
41
- * @returns Search results
42
- */
43
- declare function execute(input: {
44
- query: string;
45
- } | string, config: WarpGrepToolConfig): Promise<WarpGrepResult>;
46
-
47
- /**
48
- * Gemini tool with execute method attached
49
- */
50
- interface GeminiWarpGrepTool extends FunctionDeclaration {
51
- execute: (input: unknown) => Promise<WarpGrepResult>;
52
- formatResult: (result: WarpGrepResult) => string;
53
- getSystemPrompt: () => string;
54
- }
55
- /**
56
- * Create a custom warp grep tool with configuration and methods
57
- *
58
- * @param config - Configuration options
59
- * @returns Function declaration with execute and formatResult methods
60
- *
61
- * @example Local usage
62
- * ```typescript
63
- * import { GoogleGenerativeAI } from '@google/generative-ai';
64
- * import { createMorphWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/gemini';
65
- *
66
- * const tool = createMorphWarpGrepTool({ repoRoot: '.' });
67
- *
68
- * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
69
- * const model = genAI.getGenerativeModel({
70
- * model: 'gemini-2.0-flash',
71
- * tools: [{ functionDeclarations: [tool] }]
72
- * });
73
- *
74
- * const chat = model.startChat();
75
- * const result = await chat.sendMessage('Find authentication middleware');
76
- *
77
- * // Handle function call
78
- * const call = result.response.functionCalls()?.[0];
79
- * if (call && call.name === tool.name) {
80
- * const searchResult = await tool.execute(call.args);
81
- * console.log(tool.formatResult(searchResult));
82
- *
83
- * // Send result back to model
84
- * await chat.sendMessage([{
85
- * functionResponse: {
86
- * name: call.name,
87
- * response: { result: tool.formatResult(searchResult) }
88
- * }
89
- * }]);
90
- * }
91
- * ```
92
- *
93
- * @example Remote sandbox (E2B, Modal, etc.)
94
- * ```typescript
95
- * const tool = createMorphWarpGrepTool({
96
- * repoRoot: '/home/repo',
97
- * remoteCommands: {
98
- * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,
99
- * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,
100
- * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,
101
- * },
102
- * });
103
- * ```
104
- */
105
- declare function createWarpGrepTool(config: WarpGrepToolConfig): GeminiWarpGrepTool;
106
- declare const createMorphWarpGrepTool: typeof createWarpGrepTool;
107
-
108
- type gemini_GeminiWarpGrepTool = GeminiWarpGrepTool;
109
- declare const gemini_createMorphWarpGrepTool: typeof createMorphWarpGrepTool;
110
- declare const gemini_createWarpGrepTool: typeof createWarpGrepTool;
111
- declare const gemini_execute: typeof execute;
112
- declare const gemini_formatResult: typeof formatResult;
113
- declare const gemini_getSystemPrompt: typeof getSystemPrompt;
114
- declare const gemini_warpGrepFunctionDeclaration: typeof warpGrepFunctionDeclaration;
115
- declare namespace gemini {
116
- export { type gemini_GeminiWarpGrepTool as GeminiWarpGrepTool, gemini_createMorphWarpGrepTool as createMorphWarpGrepTool, gemini_createWarpGrepTool as createWarpGrepTool, warpGrepFunctionDeclaration as default, gemini_execute as execute, gemini_formatResult as formatResult, gemini_getSystemPrompt as getSystemPrompt, gemini_warpGrepFunctionDeclaration as warpGrepFunctionDeclaration };
117
- }
118
-
119
- export { type GeminiWarpGrepTool as G, createMorphWarpGrepTool as a, createWarpGrepTool as c, execute as e, gemini as g, warpGrepFunctionDeclaration as w };
@@ -1,89 +0,0 @@
1
- import { ChatCompletionTool } from 'openai/resources/chat/completions';
2
- import { formatResult } from './tools/warp_grep/client.js';
3
- import { getSystemPrompt } from './tools/warp_grep/agent/prompt.js';
4
- import { d as WarpGrepToolConfig, b as WarpGrepResult } from './types-CnvVDM63.js';
5
-
6
- /**
7
- * OpenAI SDK adapter for morph-warp-grep tool
8
- */
9
-
10
- /**
11
- * OpenAI-native warp grep tool definition
12
- *
13
- * @example
14
- * ```typescript
15
- * import OpenAI from 'openai';
16
- * import { warpGrepTool, execute } from '@morphllm/morphsdk/tools/warp-grep/openai';
17
- *
18
- * const client = new OpenAI();
19
- * const response = await client.chat.completions.create({
20
- * model: 'gpt-4o',
21
- * tools: [warpGrepTool],
22
- * messages: [{ role: 'user', content: 'Find authentication middleware' }]
23
- * });
24
- *
25
- * // Execute the tool call
26
- * const result = await execute({ query: '...' }, { repoRoot: '.' });
27
- * ```
28
- */
29
- declare const warpGrepTool: ChatCompletionTool;
30
- /**
31
- * Execute warp grep search
32
- *
33
- * @param input - Tool input with query
34
- * @param config - Configuration with repoRoot and optional provider
35
- * @returns Search results
36
- */
37
- declare function execute(input: {
38
- query: string;
39
- } | string, config: WarpGrepToolConfig): Promise<WarpGrepResult>;
40
-
41
- /**
42
- * Create a custom warp grep tool with configuration and methods
43
- *
44
- * @param config - Configuration options
45
- * @returns Tool definition with execute and formatResult methods
46
- *
47
- * @example Local usage
48
- * ```typescript
49
- * import OpenAI from 'openai';
50
- * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/openai';
51
- *
52
- * const tool = createWarpGrepTool({ repoRoot: '.' });
53
- *
54
- * const client = new OpenAI();
55
- * const response = await client.chat.completions.create({
56
- * model: 'gpt-4o',
57
- * tools: [tool],
58
- * messages: [{ role: 'user', content: 'Find authentication middleware' }]
59
- * });
60
- * ```
61
- *
62
- * @example Remote sandbox (E2B, Modal, etc.)
63
- * ```typescript
64
- * const tool = createMorphWarpGrepTool({
65
- * repoRoot: '/home/repo',
66
- * remoteCommands: {
67
- * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,
68
- * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,
69
- * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,
70
- * },
71
- * });
72
- * ```
73
- */
74
- declare function createWarpGrepTool(config: WarpGrepToolConfig): ChatCompletionTool & {
75
- execute: (input: unknown) => Promise<WarpGrepResult>;
76
- formatResult: (result: WarpGrepResult) => string;
77
- getSystemPrompt: () => string;
78
- };
79
-
80
- declare const openai_createWarpGrepTool: typeof createWarpGrepTool;
81
- declare const openai_execute: typeof execute;
82
- declare const openai_formatResult: typeof formatResult;
83
- declare const openai_getSystemPrompt: typeof getSystemPrompt;
84
- declare const openai_warpGrepTool: typeof warpGrepTool;
85
- declare namespace openai {
86
- export { openai_createWarpGrepTool as createWarpGrepTool, warpGrepTool as default, openai_execute as execute, openai_formatResult as formatResult, openai_getSystemPrompt as getSystemPrompt, openai_warpGrepTool as warpGrepTool };
87
- }
88
-
89
- export { createWarpGrepTool as c, execute as e, openai as o, warpGrepTool as w };
@@ -1,66 +0,0 @@
1
- import * as ai from 'ai';
2
- import { d as WarpGrepToolConfig, c as WarpGrepContext, b as WarpGrepResult } from './types-CnvVDM63.js';
3
- import { formatResult } from './tools/warp_grep/client.js';
4
- import { getSystemPrompt } from './tools/warp_grep/agent/prompt.js';
5
-
6
- /**
7
- * Execute warp grep search
8
- *
9
- * @param input - Tool input with query
10
- * @param config - Configuration with repoRoot and optional provider
11
- * @returns Search results
12
- */
13
- declare function execute(input: {
14
- query: string;
15
- }, config: WarpGrepToolConfig): Promise<WarpGrepResult>;
16
-
17
- /**
18
- * Create Vercel AI SDK warp grep tool
19
- *
20
- * @param config - Configuration options
21
- * @returns Vercel AI SDK tool
22
- *
23
- * @example Local usage
24
- * ```typescript
25
- * import { generateText } from 'ai';
26
- * import { anthropic } from '@ai-sdk/anthropic';
27
- * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';
28
- *
29
- * const grepTool = createWarpGrepTool({ repoRoot: '.' });
30
- *
31
- * const result = await generateText({
32
- * model: anthropic('claude-sonnet-4-5-20250929'),
33
- * tools: { grep: grepTool },
34
- * prompt: 'Find authentication middleware'
35
- * });
36
- * ```
37
- *
38
- * @example Remote sandbox (E2B, Modal, etc.)
39
- * ```typescript
40
- * const grepTool = createMorphWarpGrepTool({
41
- * repoRoot: '/home/repo',
42
- * remoteCommands: {
43
- * grep: async (pattern, path) => (await sandbox.run(`rg '${pattern}' '${path}'`)).stdout,
44
- * read: async (path, start, end) => (await sandbox.run(`sed -n '${start},${end}p' '${path}'`)).stdout,
45
- * listDir: async (path, maxDepth) => (await sandbox.run(`find '${path}' -maxdepth ${maxDepth}`)).stdout,
46
- * },
47
- * });
48
- * ```
49
- */
50
- declare function createWarpGrepTool(config: WarpGrepToolConfig): ai.Tool<{
51
- query: string;
52
- }, {
53
- success: boolean;
54
- contexts: WarpGrepContext[] | undefined;
55
- summary: string | undefined;
56
- }>;
57
-
58
- declare const vercel_createWarpGrepTool: typeof createWarpGrepTool;
59
- declare const vercel_execute: typeof execute;
60
- declare const vercel_formatResult: typeof formatResult;
61
- declare const vercel_getSystemPrompt: typeof getSystemPrompt;
62
- declare namespace vercel {
63
- export { vercel_createWarpGrepTool as createWarpGrepTool, createWarpGrepTool as default, vercel_execute as execute, vercel_formatResult as formatResult, vercel_getSystemPrompt as getSystemPrompt };
64
- }
65
-
66
- export { createWarpGrepTool as c, execute as e, vercel as v };