@morphllm/morphsdk 0.2.121 → 0.2.122

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 (180) hide show
  1. package/dist/{chunk-L4PK4VC7.js → chunk-2AQLRL4U.js} +2 -2
  2. package/dist/{chunk-266SWRHK.js → chunk-2MJEULZU.js} +2 -2
  3. package/dist/{chunk-YMOTJ6ZP.js → chunk-3PMFQ5AV.js} +2 -2
  4. package/dist/{chunk-EZFXR52Q.js → chunk-4GEBF5OH.js} +2 -2
  5. package/dist/{chunk-BDKXYMU2.js → chunk-4IU2K63O.js} +2 -2
  6. package/dist/{chunk-XERAWJ3H.js → chunk-4LA3OT4Q.js} +28 -4
  7. package/dist/chunk-4LA3OT4Q.js.map +1 -0
  8. package/dist/{chunk-CIFPLFBQ.js → chunk-5UUJULLM.js} +2 -2
  9. package/dist/chunk-63VHBANJ.js +22 -0
  10. package/dist/chunk-63VHBANJ.js.map +1 -0
  11. package/dist/{chunk-L5C6E32T.js → chunk-64KNVHR4.js} +1 -1
  12. package/dist/{chunk-L5C6E32T.js.map → chunk-64KNVHR4.js.map} +1 -1
  13. package/dist/{chunk-3HBZXN6E.js → chunk-73GZ6KUK.js} +2 -2
  14. package/dist/{chunk-W37KJB25.js → chunk-7KOUCN6T.js} +2 -2
  15. package/dist/{chunk-7QZFNYOH.js → chunk-EBROW6GK.js} +2 -2
  16. package/dist/{chunk-JBIFS33U.js → chunk-GTANVDUZ.js} +2 -2
  17. package/dist/{chunk-KW7OEGZK.js → chunk-KJZMKDDP.js} +16 -2
  18. package/dist/{chunk-KW7OEGZK.js.map → chunk-KJZMKDDP.js.map} +1 -1
  19. package/dist/{chunk-WEBUKGPK.js → chunk-L4URLBKV.js} +3 -3
  20. package/dist/{chunk-MAAULSSQ.js → chunk-LE24SVVU.js} +2 -2
  21. package/dist/{chunk-QDGB6FLI.js → chunk-MQWEZJTP.js} +2 -2
  22. package/dist/{chunk-DL3Y3R6A.js → chunk-OTGBQEVH.js} +2 -2
  23. package/dist/{chunk-GNRMDXJA.js → chunk-OWISPSLH.js} +2 -2
  24. package/dist/{chunk-FV3R3JGV.js → chunk-QGE7FGGT.js} +2 -2
  25. package/dist/{chunk-EJYFE73S.js → chunk-RNKHRNSG.js} +3 -3
  26. package/dist/{chunk-EJYFE73S.js.map → chunk-RNKHRNSG.js.map} +1 -1
  27. package/dist/{chunk-CXP63PHW.js → chunk-T3T4LGRD.js} +30 -3
  28. package/dist/chunk-T3T4LGRD.js.map +1 -0
  29. package/dist/{chunk-U5UDFQXK.js → chunk-TBLMIAIH.js} +28 -3
  30. package/dist/chunk-TBLMIAIH.js.map +1 -0
  31. package/dist/{chunk-C3BQUIFE.js → chunk-TXT3W4QK.js} +67 -9
  32. package/dist/chunk-TXT3W4QK.js.map +1 -0
  33. package/dist/{chunk-7IZUNRPZ.js → chunk-UDGJQBTC.js} +54 -15
  34. package/dist/{chunk-7IZUNRPZ.js.map → chunk-UDGJQBTC.js.map} +1 -1
  35. package/dist/chunk-WYYR2EU6.js +29 -0
  36. package/dist/chunk-WYYR2EU6.js.map +1 -0
  37. package/dist/{chunk-AI3ZCOCT.js → chunk-ZHRT6F72.js} +1 -1
  38. package/dist/{client-Bp3MRcJc.d.ts → client-BJrzbMYL.d.ts} +46 -1
  39. package/dist/client.cjs +214 -9
  40. package/dist/client.cjs.map +1 -1
  41. package/dist/client.d.ts +2 -2
  42. package/dist/client.js +23 -21
  43. package/dist/edge.cjs +2 -2
  44. package/dist/edge.cjs.map +1 -1
  45. package/dist/edge.js +4 -4
  46. package/dist/index.cjs +214 -9
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.js +24 -22
  50. package/dist/modelrouter/core.cjs +2 -2
  51. package/dist/modelrouter/core.cjs.map +1 -1
  52. package/dist/modelrouter/core.js +3 -3
  53. package/dist/modelrouter/index.cjs +2 -2
  54. package/dist/modelrouter/index.cjs.map +1 -1
  55. package/dist/modelrouter/index.js +3 -3
  56. package/dist/tools/browser/anthropic.cjs +2 -2
  57. package/dist/tools/browser/anthropic.cjs.map +1 -1
  58. package/dist/tools/browser/anthropic.js +5 -5
  59. package/dist/tools/browser/core.cjs +2 -2
  60. package/dist/tools/browser/core.cjs.map +1 -1
  61. package/dist/tools/browser/core.js +4 -4
  62. package/dist/tools/browser/index.cjs +2 -2
  63. package/dist/tools/browser/index.cjs.map +1 -1
  64. package/dist/tools/browser/index.js +7 -7
  65. package/dist/tools/browser/openai.cjs +2 -2
  66. package/dist/tools/browser/openai.cjs.map +1 -1
  67. package/dist/tools/browser/openai.js +5 -5
  68. package/dist/tools/browser/profiles/core.cjs +2 -2
  69. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  70. package/dist/tools/browser/profiles/core.js +3 -3
  71. package/dist/tools/browser/profiles/index.cjs +2 -2
  72. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  73. package/dist/tools/browser/profiles/index.js +3 -3
  74. package/dist/tools/browser/vercel.cjs +2 -2
  75. package/dist/tools/browser/vercel.cjs.map +1 -1
  76. package/dist/tools/browser/vercel.js +5 -5
  77. package/dist/tools/codebase_search/anthropic.cjs +2 -2
  78. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  79. package/dist/tools/codebase_search/anthropic.js +4 -4
  80. package/dist/tools/codebase_search/core.cjs +2 -2
  81. package/dist/tools/codebase_search/core.cjs.map +1 -1
  82. package/dist/tools/codebase_search/core.js +3 -3
  83. package/dist/tools/codebase_search/index.cjs +2 -2
  84. package/dist/tools/codebase_search/index.cjs.map +1 -1
  85. package/dist/tools/codebase_search/index.js +6 -6
  86. package/dist/tools/codebase_search/openai.cjs +2 -2
  87. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  88. package/dist/tools/codebase_search/openai.js +4 -4
  89. package/dist/tools/codebase_search/vercel.cjs +2 -2
  90. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  91. package/dist/tools/codebase_search/vercel.js +4 -4
  92. package/dist/tools/fastapply/anthropic.cjs +2 -2
  93. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  94. package/dist/tools/fastapply/anthropic.js +4 -4
  95. package/dist/tools/fastapply/apply.cjs +2 -2
  96. package/dist/tools/fastapply/apply.cjs.map +1 -1
  97. package/dist/tools/fastapply/apply.js +2 -2
  98. package/dist/tools/fastapply/core.cjs +2 -2
  99. package/dist/tools/fastapply/core.cjs.map +1 -1
  100. package/dist/tools/fastapply/core.js +3 -3
  101. package/dist/tools/fastapply/index.cjs +2 -2
  102. package/dist/tools/fastapply/index.cjs.map +1 -1
  103. package/dist/tools/fastapply/index.js +6 -6
  104. package/dist/tools/fastapply/openai.cjs +2 -2
  105. package/dist/tools/fastapply/openai.cjs.map +1 -1
  106. package/dist/tools/fastapply/openai.js +4 -4
  107. package/dist/tools/fastapply/vercel.cjs +2 -2
  108. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  109. package/dist/tools/fastapply/vercel.js +4 -4
  110. package/dist/tools/index.cjs +2 -2
  111. package/dist/tools/index.cjs.map +1 -1
  112. package/dist/tools/index.js +6 -6
  113. package/dist/tools/utils/resilience.cjs +2 -2
  114. package/dist/tools/utils/resilience.cjs.map +1 -1
  115. package/dist/tools/utils/resilience.js +2 -2
  116. package/dist/tools/warp_grep/agent/runner.cjs +2 -2
  117. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  118. package/dist/tools/warp_grep/agent/runner.js +2 -2
  119. package/dist/tools/warp_grep/anthropic.cjs +364 -2
  120. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  121. package/dist/tools/warp_grep/anthropic.d.ts +35 -2
  122. package/dist/tools/warp_grep/anthropic.js +9 -5
  123. package/dist/tools/warp_grep/client.cjs +104 -9
  124. package/dist/tools/warp_grep/client.cjs.map +1 -1
  125. package/dist/tools/warp_grep/client.d.ts +32 -1
  126. package/dist/tools/warp_grep/client.js +5 -3
  127. package/dist/tools/warp_grep/gemini.cjs +364 -2
  128. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  129. package/dist/tools/warp_grep/gemini.d.ts +35 -2
  130. package/dist/tools/warp_grep/gemini.js +38 -4
  131. package/dist/tools/warp_grep/gemini.js.map +1 -1
  132. package/dist/tools/warp_grep/index.cjs +123 -9
  133. package/dist/tools/warp_grep/index.cjs.map +1 -1
  134. package/dist/tools/warp_grep/index.d.ts +23 -2
  135. package/dist/tools/warp_grep/index.js +16 -5
  136. package/dist/tools/warp_grep/openai.cjs +367 -2
  137. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  138. package/dist/tools/warp_grep/openai.d.ts +35 -2
  139. package/dist/tools/warp_grep/openai.js +9 -5
  140. package/dist/tools/warp_grep/providers/code_storage_http.cjs +53 -0
  141. package/dist/tools/warp_grep/providers/code_storage_http.cjs.map +1 -0
  142. package/dist/tools/warp_grep/providers/code_storage_http.d.ts +23 -0
  143. package/dist/tools/warp_grep/providers/code_storage_http.js +8 -0
  144. package/dist/tools/warp_grep/providers/code_storage_http.js.map +1 -0
  145. package/dist/tools/warp_grep/providers/remote.d.ts +1 -1
  146. package/dist/tools/warp_grep/utils/github.cjs +46 -0
  147. package/dist/tools/warp_grep/utils/github.cjs.map +1 -0
  148. package/dist/tools/warp_grep/utils/github.d.ts +13 -0
  149. package/dist/tools/warp_grep/utils/github.js +8 -0
  150. package/dist/tools/warp_grep/utils/github.js.map +1 -0
  151. package/dist/tools/warp_grep/vercel.cjs +152 -2
  152. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  153. package/dist/tools/warp_grep/vercel.d.ts +32 -2
  154. package/dist/tools/warp_grep/vercel.js +9 -5
  155. package/dist/{types-D5p8QErL.d.ts → types-CA7989hK.d.ts} +17 -1
  156. package/dist/version.cjs +2 -2
  157. package/dist/version.cjs.map +1 -1
  158. package/dist/version.js +1 -1
  159. package/package.json +2 -2
  160. package/dist/chunk-C3BQUIFE.js.map +0 -1
  161. package/dist/chunk-CXP63PHW.js.map +0 -1
  162. package/dist/chunk-U5UDFQXK.js.map +0 -1
  163. package/dist/chunk-XERAWJ3H.js.map +0 -1
  164. /package/dist/{chunk-L4PK4VC7.js.map → chunk-2AQLRL4U.js.map} +0 -0
  165. /package/dist/{chunk-266SWRHK.js.map → chunk-2MJEULZU.js.map} +0 -0
  166. /package/dist/{chunk-YMOTJ6ZP.js.map → chunk-3PMFQ5AV.js.map} +0 -0
  167. /package/dist/{chunk-EZFXR52Q.js.map → chunk-4GEBF5OH.js.map} +0 -0
  168. /package/dist/{chunk-BDKXYMU2.js.map → chunk-4IU2K63O.js.map} +0 -0
  169. /package/dist/{chunk-CIFPLFBQ.js.map → chunk-5UUJULLM.js.map} +0 -0
  170. /package/dist/{chunk-3HBZXN6E.js.map → chunk-73GZ6KUK.js.map} +0 -0
  171. /package/dist/{chunk-W37KJB25.js.map → chunk-7KOUCN6T.js.map} +0 -0
  172. /package/dist/{chunk-7QZFNYOH.js.map → chunk-EBROW6GK.js.map} +0 -0
  173. /package/dist/{chunk-JBIFS33U.js.map → chunk-GTANVDUZ.js.map} +0 -0
  174. /package/dist/{chunk-WEBUKGPK.js.map → chunk-L4URLBKV.js.map} +0 -0
  175. /package/dist/{chunk-MAAULSSQ.js.map → chunk-LE24SVVU.js.map} +0 -0
  176. /package/dist/{chunk-QDGB6FLI.js.map → chunk-MQWEZJTP.js.map} +0 -0
  177. /package/dist/{chunk-DL3Y3R6A.js.map → chunk-OTGBQEVH.js.map} +0 -0
  178. /package/dist/{chunk-GNRMDXJA.js.map → chunk-OWISPSLH.js.map} +0 -0
  179. /package/dist/{chunk-FV3R3JGV.js.map → chunk-QGE7FGGT.js.map} +0 -0
  180. /package/dist/{chunk-AI3ZCOCT.js.map → chunk-ZHRT6F72.js.map} +0 -0
@@ -1,10 +1,12 @@
1
1
  import {
2
+ GITHUB_SEARCH_DESCRIPTION,
2
3
  WARP_GREP_DESCRIPTION
3
- } from "./chunk-KW7OEGZK.js";
4
+ } from "./chunk-KJZMKDDP.js";
4
5
  import {
6
+ WarpGrepClient,
5
7
  executeToolCall,
6
8
  executeToolCallStreaming
7
- } from "./chunk-C3BQUIFE.js";
9
+ } from "./chunk-TXT3W4QK.js";
8
10
 
9
11
  // tools/warp_grep/vercel.ts
10
12
  import { tool } from "ai";
@@ -55,12 +57,35 @@ function createWarpGrepTool(config) {
55
57
  }
56
58
  });
57
59
  }
60
+ function createGitHubSearchTool(config) {
61
+ const client = new WarpGrepClient(config);
62
+ return tool({
63
+ description: GITHUB_SEARCH_DESCRIPTION,
64
+ inputSchema: z.object({
65
+ query: z.string().describe("Natural language search query"),
66
+ github: z.string().describe('GitHub URL or "owner/repo" shorthand'),
67
+ branch: z.string().optional().describe("Branch to search (defaults to repo default branch)")
68
+ }),
69
+ execute: async (params) => {
70
+ const result = await client.searchGitHub(params);
71
+ if (!result.success) {
72
+ throw new Error(`GitHub search failed: ${result.error}`);
73
+ }
74
+ return {
75
+ success: true,
76
+ contexts: result.contexts,
77
+ summary: result.summary
78
+ };
79
+ }
80
+ });
81
+ }
58
82
  var vercel_default = createWarpGrepTool;
59
83
 
60
84
  export {
61
85
  warpGrepJsonSchema,
62
86
  execute,
63
87
  createWarpGrepTool,
88
+ createGitHubSearchTool,
64
89
  vercel_default
65
90
  };
66
- //# sourceMappingURL=chunk-U5UDFQXK.js.map
91
+ //# sourceMappingURL=chunk-TBLMIAIH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tools/warp_grep/vercel.ts"],"sourcesContent":["/**\n * Vercel AI SDK adapter for morph-warp-grep tool\n *\n * @example Using with your own Zod instance (recommended for avoiding version conflicts)\n * ```typescript\n * import { z } from 'zod'; // Your project's Zod\n * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const schema = z.object({\n * query: z.string().describe('Free-form repository question'),\n * });\n *\n * const grepTool = createWarpGrepTool({\n * repoRoot: '.',\n * inputSchema: schema,\n * });\n * ```\n */\n\nimport { tool } from 'ai';\nimport { z } from 'zod';\nimport { jsonSchema } from 'ai';\nimport { executeToolCall, executeToolCallStreaming, formatResult, WarpGrepClient } from './client.js';\nimport { WARP_GREP_DESCRIPTION, GITHUB_SEARCH_DESCRIPTION, getSystemPrompt } from './prompts.js';\nimport type { WarpGrepToolConfig, WarpGrepResult, GitHubSearchToolConfig } from './types.js';\nimport type { WarpGrepStep } from './agent/types.js';\n\n/**\n * Raw JSON Schema for warp grep input (no Zod dependency).\n * Use this with jsonSchema() from 'ai' if you have Zod version conflicts.\n *\n * @example\n * ```typescript\n * import { jsonSchema } from 'ai';\n * import { warpGrepJsonSchema, createWarpGrepToolWithSchema } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const grepTool = createWarpGrepToolWithSchema({\n * repoRoot: '.',\n * inputSchema: jsonSchema(warpGrepJsonSchema),\n * });\n * ```\n */\nexport const warpGrepJsonSchema = {\n type: 'object' as const,\n properties: {\n query: {\n type: 'string' as const,\n description: 'Free-form repository question',\n },\n },\n required: ['query'] as const,\n additionalProperties: false as const,\n};\n\n/** Type for the warp grep input */\nexport type WarpGrepInput = { query: string };\n\n/**\n * Extended config that accepts a custom inputSchema\n */\nexport interface WarpGrepVercelConfig extends WarpGrepToolConfig {\n /**\n * Custom Zod schema or AI SDK schema. Use this to provide your own Zod instance\n * to avoid version conflicts between your project and the SDK.\n *\n * @example Using your own Zod\n * ```typescript\n * import { z } from 'zod'; // Your Zod version\n *\n * const grepTool = createWarpGrepTool({\n * repoRoot: '.',\n * inputSchema: z.object({\n * query: z.string().describe('Free-form repository question'),\n * }),\n * });\n * ```\n *\n * @example Using jsonSchema (no Zod needed)\n * ```typescript\n * import { jsonSchema } from 'ai';\n * import { warpGrepJsonSchema } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const grepTool = createWarpGrepTool({\n * repoRoot: '.',\n * inputSchema: jsonSchema(warpGrepJsonSchema),\n * });\n * ```\n */\n inputSchema?: Parameters<typeof tool>[0]['inputSchema'];\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 },\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 * Create Vercel AI SDK warp grep tool\n *\n * @param config - Configuration options\n * @returns Vercel AI SDK tool\n *\n * @example Local usage (uses SDK's Zod)\n * ```typescript\n * import { generateText } from 'ai';\n * import { anthropic } from '@ai-sdk/anthropic';\n * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const grepTool = createWarpGrepTool({ repoRoot: '.' });\n *\n * const result = await generateText({\n * model: anthropic('claude-sonnet-4-5-20250929'),\n * tools: { grep: grepTool },\n * prompt: 'Find authentication middleware'\n * });\n * ```\n *\n * @example With your own Zod (avoids version conflicts)\n * ```typescript\n * import { z } from 'zod'; // Your project's Zod\n * import { createWarpGrepTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const grepTool = createWarpGrepTool({\n * repoRoot: '.',\n * inputSchema: z.object({\n * query: z.string().describe('Free-form repository question'),\n * }),\n * });\n * ```\n *\n * @example Without Zod (using jsonSchema)\n * ```typescript\n * import { jsonSchema } from 'ai';\n * import { createWarpGrepTool, warpGrepJsonSchema } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const grepTool = createWarpGrepTool({\n * repoRoot: '.',\n * inputSchema: jsonSchema(warpGrepJsonSchema),\n * });\n * ```\n *\n * @example Remote sandbox (E2B, Modal, etc.)\n * ```typescript\n * const grepTool = createWarpGrepTool({\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: WarpGrepVercelConfig) {\n // Use provided schema or fall back to SDK's Zod schema\n const schema = config.inputSchema ?? z.object({\n query: z.string().describe('Free-form repository question'),\n });\n\n return tool({\n description: config.description ?? WARP_GREP_DESCRIPTION,\n inputSchema: schema,\n execute: async (params: WarpGrepInput) => {\n // Use streaming execution to collect intermediate steps\n const steps: WarpGrepStep[] = [];\n const generator = executeToolCallStreaming(params, config);\n\n let result: WarpGrepResult;\n for (;;) {\n const { value, done } = await generator.next();\n if (done) {\n result = value;\n break;\n }\n steps.push(value);\n }\n\n if (!result!.success) {\n throw new Error(`Failed to search codebase: ${result!.error}`);\n }\n\n // Flatten all intermediate tool calls across turns for progress display\n const allToolCalls = steps.flatMap(s => s.toolCalls);\n return {\n success: true,\n contexts: result!.contexts,\n summary: result!.summary,\n progress: allToolCalls.length > 0 ? { turn: steps.length, toolCalls: allToolCalls } : undefined,\n };\n },\n });\n}\n\n/**\n * Create a GitHub search tool for Vercel AI SDK\n *\n * @param config - Configuration options (morphApiKey, morphApiUrl, codeSearchUrl, timeout)\n * @returns Vercel AI SDK tool\n *\n * @example\n * ```typescript\n * import { generateText } from 'ai';\n * import { anthropic } from '@ai-sdk/anthropic';\n * import { createGitHubSearchTool } from '@morphllm/morphsdk/tools/warp-grep/vercel';\n *\n * const githubTool = createGitHubSearchTool({ morphApiKey: process.env.MORPH_API_KEY });\n *\n * const result = await generateText({\n * model: anthropic('claude-sonnet-4-5-20250929'),\n * tools: { githubSearch: githubTool },\n * prompt: 'How does auth work in vercel/next.js?'\n * });\n * ```\n */\nexport function createGitHubSearchTool(config: GitHubSearchToolConfig) {\n const client = new WarpGrepClient(config);\n\n return tool({\n description: GITHUB_SEARCH_DESCRIPTION,\n inputSchema: z.object({\n query: z.string().describe('Natural language search query'),\n github: z.string().describe('GitHub URL or \"owner/repo\" shorthand'),\n branch: z.string().optional().describe('Branch to search (defaults to repo default branch)'),\n }),\n execute: async (params: { query: string; github: string; branch?: string }) => {\n const result = await client.searchGitHub(params);\n if (!result.success) {\n throw new Error(`GitHub search failed: ${result.error}`);\n }\n return {\n success: true,\n contexts: result.contexts,\n summary: result.summary,\n };\n },\n });\n}\n\n// Default export for convenience\nexport default createWarpGrepTool;\n"],"mappings":";;;;;;;;;;;AAmBA,SAAS,YAAY;AACrB,SAAS,SAAS;AAsBX,IAAM,qBAAqB;AAAA,EAChC,MAAM;AAAA,EACN,YAAY;AAAA,IACV,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU,CAAC,OAAO;AAAA,EAClB,sBAAsB;AACxB;AA8CA,eAAsB,QACpB,OACA,QACyB;AACzB,SAAO,gBAAgB,OAAO,MAAM;AACtC;AA8DO,SAAS,mBAAmB,QAA8B;AAE/D,QAAM,SAAS,OAAO,eAAe,EAAE,OAAO;AAAA,IAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,EAC5D,CAAC;AAED,SAAO,KAAK;AAAA,IACV,aAAa,OAAO,eAAe;AAAA,IACnC,aAAa;AAAA,IACb,SAAS,OAAO,WAA0B;AAExC,YAAM,QAAwB,CAAC;AAC/B,YAAM,YAAY,yBAAyB,QAAQ,MAAM;AAEzD,UAAI;AACJ,iBAAS;AACP,cAAM,EAAE,OAAO,KAAK,IAAI,MAAM,UAAU,KAAK;AAC7C,YAAI,MAAM;AACR,mBAAS;AACT;AAAA,QACF;AACA,cAAM,KAAK,KAAK;AAAA,MAClB;AAEA,UAAI,CAAC,OAAQ,SAAS;AACpB,cAAM,IAAI,MAAM,8BAA8B,OAAQ,KAAK,EAAE;AAAA,MAC/D;AAGA,YAAM,eAAe,MAAM,QAAQ,OAAK,EAAE,SAAS;AACnD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,OAAQ;AAAA,QAClB,SAAS,OAAQ;AAAA,QACjB,UAAU,aAAa,SAAS,IAAI,EAAE,MAAM,MAAM,QAAQ,WAAW,aAAa,IAAI;AAAA,MACxF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAuBO,SAAS,uBAAuB,QAAgC;AACrE,QAAM,SAAS,IAAI,eAAe,MAAM;AAExC,SAAO,KAAK;AAAA,IACV,aAAa;AAAA,IACb,aAAa,EAAE,OAAO;AAAA,MACpB,OAAO,EAAE,OAAO,EAAE,SAAS,+BAA+B;AAAA,MAC1D,QAAQ,EAAE,OAAO,EAAE,SAAS,sCAAsC;AAAA,MAClE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oDAAoD;AAAA,IAC7F,CAAC;AAAA,IACD,SAAS,OAAO,WAA+D;AAC7E,YAAM,SAAS,MAAM,OAAO,aAAa,MAAM;AAC/C,UAAI,CAAC,OAAO,SAAS;AACnB,cAAM,IAAI,MAAM,yBAAyB,OAAO,KAAK,EAAE;AAAA,MACzD;AACA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,OAAO;AAAA,QACjB,SAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAGA,IAAO,iBAAQ;","names":[]}
@@ -1,12 +1,19 @@
1
+ import {
2
+ createCodeStorageHttpCommands
3
+ } from "./chunk-WYYR2EU6.js";
1
4
  import {
2
5
  RemoteCommandsProvider
3
6
  } from "./chunk-PUGSTXLO.js";
7
+ import {
8
+ parseGitHubUrl
9
+ } from "./chunk-63VHBANJ.js";
4
10
  import {
5
11
  runWarpGrep,
6
12
  runWarpGrepStreaming
7
- } from "./chunk-QDGB6FLI.js";
13
+ } from "./chunk-MQWEZJTP.js";
8
14
 
9
15
  // tools/warp_grep/client.ts
16
+ var DEFAULT_CODE_SEARCH_URL = "https://morphllm.com";
10
17
  async function getLocalProvider(repoRoot, excludes) {
11
18
  const { LocalRipgrepProvider } = await import("./tools/warp_grep/providers/local.js");
12
19
  return new LocalRipgrepProvider(repoRoot, excludes);
@@ -14,13 +21,7 @@ async function getLocalProvider(repoRoot, excludes) {
14
21
  var WarpGrepClient = class {
15
22
  config;
16
23
  constructor(config = {}) {
17
- this.config = {
18
- morphApiKey: config.morphApiKey,
19
- morphApiUrl: config.morphApiUrl,
20
- debug: config.debug,
21
- timeout: config.timeout,
22
- retryConfig: config.retryConfig
23
- };
24
+ this.config = { ...config };
24
25
  }
25
26
  execute(input) {
26
27
  const toolConfig = {
@@ -40,6 +41,63 @@ var WarpGrepClient = class {
40
41
  }
41
42
  return executeToolCall({ query: input.query }, toolConfig);
42
43
  }
44
+ searchGitHub(input) {
45
+ if (input.streamSteps) {
46
+ return this._searchGitHubStreaming(input);
47
+ }
48
+ return this._searchGitHubAsync(input);
49
+ }
50
+ async _resolveGitHubRepo(input) {
51
+ const { owner, repo } = parseGitHubUrl(input.github);
52
+ const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;
53
+ const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);
54
+ if (!importRes.ok) {
55
+ const text = await importRes.text().catch(() => importRes.statusText);
56
+ throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);
57
+ }
58
+ const { repoId, defaultBranch } = await importRes.json();
59
+ return {
60
+ repo,
61
+ remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch })
62
+ };
63
+ }
64
+ async _searchGitHubAsync(input) {
65
+ try {
66
+ const { repo, remoteCommands } = await this._resolveGitHubRepo(input);
67
+ return this.execute({
68
+ query: input.query,
69
+ repoRoot: repo,
70
+ remoteCommands
71
+ });
72
+ } catch (error) {
73
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
74
+ }
75
+ }
76
+ async *_searchGitHubStreaming(input) {
77
+ let repo;
78
+ let remoteCommands;
79
+ try {
80
+ ({ repo, remoteCommands } = await this._resolveGitHubRepo(input));
81
+ } catch (error) {
82
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
83
+ }
84
+ const generator = this.execute({
85
+ query: input.query,
86
+ repoRoot: repo,
87
+ remoteCommands,
88
+ streamSteps: true
89
+ });
90
+ let result;
91
+ for (; ; ) {
92
+ const { value, done } = await generator.next();
93
+ if (done) {
94
+ result = value;
95
+ break;
96
+ }
97
+ yield value;
98
+ }
99
+ return result;
100
+ }
43
101
  };
44
102
  function executeWarpGrep(input, config) {
45
103
  const client = new WarpGrepClient(config);
@@ -148,4 +206,4 @@ export {
148
206
  executeToolCallStreaming,
149
207
  formatResult
150
208
  };
151
- //# sourceMappingURL=chunk-C3BQUIFE.js.map
209
+ //# sourceMappingURL=chunk-TXT3W4QK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tools/warp_grep/client.ts"],"sourcesContent":["/**\n * WarpGrep client for programmatic code search\n */\n\nimport { runWarpGrep, runWarpGrepStreaming } from './agent/runner.js';\nimport { RemoteCommandsProvider } from './providers/remote.js';\nimport type { WarpGrepProvider } from './providers/types.js';\nimport type { AgentRunResult, WarpGrepStep } from './agent/types.js';\nimport type {\n WarpGrepClientConfig,\n WarpGrepInput,\n WarpGrepResult,\n WarpGrepContext,\n WarpGrepToolConfig,\n GitHubSearchInput,\n RemoteCommands,\n} from './types.js';\nimport { createCodeStorageHttpCommands } from './providers/code_storage_http.js';\nimport { parseGitHubUrl } from './utils/github.js';\n\nconst DEFAULT_CODE_SEARCH_URL = 'https://morphllm.com';\n\n/**\n * Lazy-load LocalRipgrepProvider to avoid importing Node.js-specific\n * modules (child_process, fs) in edge environments like Cloudflare Workers.\n * Only loads when actually needed (i.e., when no remoteCommands or provider is specified).\n */\nasync function getLocalProvider(repoRoot: string, excludes?: string[]): Promise<WarpGrepProvider> {\n const { LocalRipgrepProvider } = await import('./providers/local.js');\n return new LocalRipgrepProvider(repoRoot, excludes);\n}\n\n/**\n * WarpGrep client for programmatic code search\n * \n * @example\n * ```typescript\n * import { WarpGrepClient } from '@morphllm/morphsdk';\n * \n * const client = new WarpGrepClient({ morphApiKey: process.env.MORPH_API_KEY });\n * \n * // Simple usage - defaults to LocalRipgrepProvider\n * const result = await client.execute({\n * query: 'Find authentication middleware',\n * repoRoot: '.'\n * });\n * \n * // With custom excludes\n * const result = await client.execute({\n * query: 'Find database models',\n * repoRoot: '.',\n * excludes: ['node_modules', '.git', 'dist']\n * });\n * ```\n */\nexport class WarpGrepClient {\n private config: WarpGrepClientConfig;\n\n constructor(config: WarpGrepClientConfig = {}) {\n this.config = { ...config };\n }\n\n /**\n * Execute a code search query\n *\n * @param input - Search parameters including query, repoRoot, and optional provider\n * @returns Search results with relevant code contexts, or an AsyncGenerator if streamSteps is true\n *\n * @example\n * ```typescript\n * // Standard execution\n * const result = await client.execute({\n * query: 'Find authentication middleware',\n * repoRoot: '.'\n * });\n *\n * if (result.success) {\n * for (const ctx of result.contexts) {\n * console.log(`File: ${ctx.file}`);\n * console.log(ctx.content);\n * }\n * }\n *\n * // Streaming execution\n * const stream = client.execute({\n * query: 'Find auth middleware',\n * repoRoot: '.',\n * streamSteps: true\n * });\n *\n * for await (const step of stream) {\n * console.log(`Turn ${step.turn}:`, step.toolCalls);\n * }\n * ```\n */\n execute(input: WarpGrepInput & { streamSteps: true }): AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined>;\n execute(input: WarpGrepInput & { streamSteps?: false | undefined }): Promise<WarpGrepResult>;\n execute(input: WarpGrepInput): Promise<WarpGrepResult> | AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined> {\n const toolConfig: WarpGrepToolConfig = {\n repoRoot: input.repoRoot,\n remoteCommands: input.remoteCommands,\n provider: input.provider,\n excludes: input.excludes,\n includes: input.includes,\n debug: input.debug ?? this.config.debug,\n morphApiKey: this.config.morphApiKey,\n morphApiUrl: this.config.morphApiUrl,\n retryConfig: this.config.retryConfig,\n timeout: this.config.timeout,\n };\n\n if (input.streamSteps) {\n return executeToolCallStreaming({ query: input.query }, toolConfig);\n }\n return executeToolCall({ query: input.query }, toolConfig);\n }\n\n /**\n * Search a public GitHub repository\n *\n * @example\n * ```typescript\n * // Simple usage\n * const result = await client.searchGitHub({\n * query: 'Find authentication middleware',\n * github: 'vercel/next.js',\n * });\n *\n * // With streaming\n * const stream = client.searchGitHub({\n * query: 'Find auth middleware',\n * github: 'https://github.com/vercel/next.js',\n * streamSteps: true,\n * });\n * for await (const step of stream) {\n * console.log(`Turn ${step.turn}:`, step.toolCalls);\n * }\n * ```\n */\n searchGitHub(input: GitHubSearchInput & { streamSteps: true }): AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined>;\n searchGitHub(input: GitHubSearchInput & { streamSteps?: false | undefined }): Promise<WarpGrepResult>;\n searchGitHub(input: GitHubSearchInput): Promise<WarpGrepResult> | AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined> {\n if (input.streamSteps) {\n return this._searchGitHubStreaming(input);\n }\n return this._searchGitHubAsync(input);\n }\n\n private async _resolveGitHubRepo(input: GitHubSearchInput): Promise<{ repo: string; remoteCommands: RemoteCommands }> {\n const { owner, repo } = parseGitHubUrl(input.github);\n const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;\n const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);\n if (!importRes.ok) {\n const text = await importRes.text().catch(() => importRes.statusText);\n throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);\n }\n const { repoId, defaultBranch } = await importRes.json();\n return {\n repo,\n remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch }),\n };\n }\n\n private async _searchGitHubAsync(input: GitHubSearchInput): Promise<WarpGrepResult> {\n try {\n const { repo, remoteCommands } = await this._resolveGitHubRepo(input);\n return this.execute({\n query: input.query,\n repoRoot: repo,\n remoteCommands,\n });\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n\n private async *_searchGitHubStreaming(input: GitHubSearchInput): AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined> {\n let repo: string;\n let remoteCommands: RemoteCommands;\n try {\n ({ repo, remoteCommands } = await this._resolveGitHubRepo(input));\n } catch (error) {\n return { success: false, error: error instanceof Error ? error.message : String(error) };\n }\n\n const generator = this.execute({\n query: input.query,\n repoRoot: repo,\n remoteCommands,\n streamSteps: true,\n });\n\n let result: WarpGrepResult;\n for (;;) {\n const { value, done } = await generator.next();\n if (done) {\n result = value;\n break;\n }\n yield value;\n }\n return result;\n }\n}\n\n/**\n * Execute a warp grep search directly\n *\n * @param input - Search parameters\n * @param config - Optional client configuration\n * @returns Search results, or an AsyncGenerator if streamSteps is true\n *\n * @example\n * ```typescript\n * import { executeWarpGrep } from '@morphllm/morphsdk/tools/warp-grep';\n *\n * const result = await executeWarpGrep({\n * query: 'Find authentication middleware',\n * repoRoot: '.'\n * });\n *\n * // Streaming\n * const stream = executeWarpGrep({\n * query: 'Find auth',\n * repoRoot: '.',\n * streamSteps: true\n * });\n * for await (const step of stream) {\n * console.log(step.turn, step.toolCalls);\n * }\n * ```\n */\nexport function executeWarpGrep(\n input: WarpGrepInput & { streamSteps: true },\n config?: WarpGrepClientConfig\n): AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined>;\nexport function executeWarpGrep(\n input: WarpGrepInput & { streamSteps?: false | undefined },\n config?: WarpGrepClientConfig\n): Promise<WarpGrepResult>;\nexport function executeWarpGrep(\n input: WarpGrepInput,\n config?: WarpGrepClientConfig\n): Promise<WarpGrepResult> | AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined> {\n const client = new WarpGrepClient(config);\n if (input.streamSteps) {\n return client.execute({ ...input, streamSteps: true });\n }\n return client.execute({ ...input, streamSteps: false });\n}\n\nexport async function executeToolCall(\n input: { query: string } | string,\n config: WarpGrepToolConfig\n): Promise<WarpGrepResult> {\n const parsed = typeof input === 'string' ? JSON.parse(input) : input;\n\n // Priority: remoteCommands > provider > LocalRipgrepProvider (lazy-loaded for edge compatibility)\n const provider = config.remoteCommands\n ? new RemoteCommandsProvider(config.repoRoot, config.remoteCommands)\n : config.provider ?? await getLocalProvider(config.repoRoot, config.excludes);\n\n const result = await runWarpGrep({\n query: parsed.query,\n repoRoot: config.repoRoot,\n provider,\n excludes: config.excludes,\n includes: config.includes,\n debug: config.debug ?? false,\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n timeout: config.timeout,\n });\n\n const finish = result.finish;\n if (result.terminationReason !== 'completed' || !finish?.metadata) {\n const errorDetails = result.errors?.map(e => e.message).join('; ') || 'unknown reason';\n console.error(`[warp_grep] executeToolCall failed. Reason: ${result.terminationReason}. Errors: ${errorDetails}. Turns: ${result.timings?.turns?.length ?? 0}`);\n return { success: false, error: `Search did not complete: ${errorDetails}` };\n }\n\n const contexts: WarpGrepContext[] = (finish.resolved ?? []).map(r => ({\n file: r.path,\n content: r.content,\n lines: r.ranges,\n }));\n\n return { success: true, contexts, summary: finish.payload };\n}\n\n/**\n * Helper to process AgentRunResult into WarpGrepResult\n */\nfunction processAgentResult(result: AgentRunResult): WarpGrepResult {\n const finish = result.finish;\n if (result.terminationReason !== 'completed' || !finish?.metadata) {\n const errorDetails = result.errors?.map(e => e.message).join('; ') || 'unknown reason';\n console.error(`[warp_grep] processAgentResult failed. Reason: ${result.terminationReason}. Errors: ${errorDetails}. Turns: ${result.timings?.turns?.length ?? 0}`);\n return { success: false, error: `Search did not complete: ${errorDetails}` };\n }\n\n const contexts: WarpGrepContext[] = (finish.resolved ?? []).map(r => ({\n file: r.path,\n content: r.content,\n lines: r.ranges,\n }));\n\n return { success: true, contexts, summary: finish.payload };\n}\n\n/**\n * Streaming version of executeToolCall that yields WarpGrepStep for each turn.\n */\nexport async function* executeToolCallStreaming(\n input: { query: string } | string,\n config: WarpGrepToolConfig\n): AsyncGenerator<WarpGrepStep, WarpGrepResult, undefined> {\n const parsed = typeof input === 'string' ? JSON.parse(input) : input;\n\n // Priority: remoteCommands > provider > LocalRipgrepProvider (lazy-loaded for edge compatibility)\n const provider = config.remoteCommands\n ? new RemoteCommandsProvider(config.repoRoot, config.remoteCommands)\n : config.provider ?? await getLocalProvider(config.repoRoot, config.excludes);\n\n const generator = runWarpGrepStreaming({\n query: parsed.query,\n repoRoot: config.repoRoot,\n provider,\n excludes: config.excludes,\n includes: config.includes,\n debug: config.debug ?? false,\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n timeout: config.timeout,\n });\n\n // Forward all yielded steps\n let agentResult: AgentRunResult;\n for (;;) {\n const { value, done } = await generator.next();\n if (done) {\n agentResult = value;\n break;\n }\n yield value;\n }\n\n return processAgentResult(agentResult);\n}\n\n/**\n * Format warp grep results for display or tool responses\n * \n * @param result - The search result\n * @returns Formatted string representation\n */\nexport function formatResult(result: WarpGrepResult): string {\n if (!result.success) {\n return `Search failed: ${result.error}`;\n }\n\n if (!result.contexts || result.contexts.length === 0) {\n return 'No relevant code found. Try rephrasing your query.';\n }\n\n const parts: string[] = [];\n parts.push(`Morph Fast Context subagent performed search on repository:\\n`);\n parts.push('Relevant context found:');\n\n for (const ctx of result.contexts) {\n const rangeStr = !ctx.lines || ctx.lines === '*'\n ? '*'\n : ctx.lines.map(([s, e]) => `${s}-${e}`).join(',');\n parts.push(`- ${ctx.file}:${rangeStr}`);\n }\n\n parts.push('\\nHere is the content of files:\\n');\n\n for (const ctx of result.contexts) {\n const rangeStr = !ctx.lines || ctx.lines === '*'\n ? ''\n : ` lines=\"${ctx.lines.map(([s, e]) => `${s}-${e}`).join(',')}\"`;\n parts.push(`<file path=\"${ctx.file}\"${rangeStr}>`);\n parts.push(ctx.content);\n parts.push('</file>\\n');\n }\n\n return parts.join('\\n');\n}\n\n"],"mappings":"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","names":[]}
@@ -1,42 +1,45 @@
1
1
  import {
2
+ createGitHubSearchTool as createGitHubSearchTool2,
2
3
  createWarpGrepTool as createWarpGrepTool2
3
- } from "./chunk-XERAWJ3H.js";
4
+ } from "./chunk-4LA3OT4Q.js";
4
5
  import {
6
+ createGitHubSearchTool,
5
7
  createWarpGrepTool
6
- } from "./chunk-CXP63PHW.js";
8
+ } from "./chunk-T3T4LGRD.js";
7
9
  import {
10
+ createGitHubSearchTool as createGitHubSearchTool3,
8
11
  createWarpGrepTool as createWarpGrepTool3
9
- } from "./chunk-U5UDFQXK.js";
12
+ } from "./chunk-TBLMIAIH.js";
10
13
  import {
11
14
  WarpGrepClient
12
- } from "./chunk-C3BQUIFE.js";
15
+ } from "./chunk-TXT3W4QK.js";
13
16
  import {
14
17
  createCodebaseSearchTool
15
- } from "./chunk-266SWRHK.js";
18
+ } from "./chunk-2MJEULZU.js";
16
19
  import {
17
20
  createCodebaseSearchTool as createCodebaseSearchTool3
18
- } from "./chunk-W37KJB25.js";
21
+ } from "./chunk-7KOUCN6T.js";
19
22
  import {
20
23
  createCodebaseSearchTool as createCodebaseSearchTool2
21
- } from "./chunk-GNRMDXJA.js";
24
+ } from "./chunk-OWISPSLH.js";
22
25
  import {
23
26
  CodebaseSearchClient
24
- } from "./chunk-CIFPLFBQ.js";
27
+ } from "./chunk-5UUJULLM.js";
25
28
  import {
26
29
  createEditFileTool
27
- } from "./chunk-BDKXYMU2.js";
30
+ } from "./chunk-4IU2K63O.js";
28
31
  import {
29
32
  createEditFileTool as createEditFileTool3
30
- } from "./chunk-FV3R3JGV.js";
33
+ } from "./chunk-QGE7FGGT.js";
31
34
  import {
32
35
  createEditFileTool as createEditFileTool2
33
- } from "./chunk-YMOTJ6ZP.js";
36
+ } from "./chunk-3PMFQ5AV.js";
34
37
  import {
35
38
  FastApplyClient
36
- } from "./chunk-AI3ZCOCT.js";
39
+ } from "./chunk-ZHRT6F72.js";
37
40
  import {
38
41
  BrowserClient
39
- } from "./chunk-WEBUKGPK.js";
42
+ } from "./chunk-L4URLBKV.js";
40
43
  import {
41
44
  CompactClient
42
45
  } from "./chunk-J267T54M.js";
@@ -45,7 +48,7 @@ import {
45
48
  GeminiRouter,
46
49
  OpenAIRouter,
47
50
  RawRouter
48
- } from "./chunk-L4PK4VC7.js";
51
+ } from "./chunk-2AQLRL4U.js";
49
52
  import {
50
53
  MorphGit
51
54
  } from "./chunk-LE66XCOI.js";
@@ -441,6 +444,18 @@ var OpenAIToolFactory = class {
441
444
  morphApiKey: this.config.apiKey
442
445
  });
443
446
  }
447
+ /**
448
+ * Create an OpenAI-compatible GitHub search tool
449
+ *
450
+ * @param toolConfig - Tool configuration (morphApiKey inherited from MorphClient)
451
+ * @returns OpenAI ChatCompletionTool with execute and formatResult methods
452
+ */
453
+ createGitHubSearchTool(toolConfig) {
454
+ return createGitHubSearchTool({
455
+ ...toolConfig,
456
+ morphApiKey: this.config.apiKey
457
+ });
458
+ }
444
459
  };
445
460
 
446
461
  // factories/anthropic.ts
@@ -484,6 +499,18 @@ var AnthropicToolFactory = class {
484
499
  morphApiKey: this.config.apiKey
485
500
  });
486
501
  }
502
+ /**
503
+ * Create an Anthropic-compatible GitHub search tool
504
+ *
505
+ * @param toolConfig - Tool configuration (morphApiKey inherited from MorphClient)
506
+ * @returns Anthropic Tool with execute and formatResult methods
507
+ */
508
+ createGitHubSearchTool(toolConfig) {
509
+ return createGitHubSearchTool2({
510
+ ...toolConfig,
511
+ morphApiKey: this.config.apiKey
512
+ });
513
+ }
487
514
  };
488
515
 
489
516
  // factories/vercel.ts
@@ -527,6 +554,18 @@ var VercelToolFactory = class {
527
554
  morphApiKey: this.config.apiKey
528
555
  });
529
556
  }
557
+ /**
558
+ * Create a Vercel AI SDK-compatible GitHub search tool
559
+ *
560
+ * @param toolConfig - Tool configuration (morphApiKey inherited from MorphClient)
561
+ * @returns Vercel AI SDK tool
562
+ */
563
+ createGitHubSearchTool(toolConfig) {
564
+ return createGitHubSearchTool3({
565
+ ...toolConfig,
566
+ morphApiKey: this.config.apiKey
567
+ });
568
+ }
530
569
  };
531
570
 
532
571
  // client.ts
@@ -657,4 +696,4 @@ export {
657
696
  VercelToolFactory,
658
697
  MorphClient
659
698
  };
660
- //# sourceMappingURL=chunk-7IZUNRPZ.js.map
699
+ //# sourceMappingURL=chunk-UDGJQBTC.js.map