@morphllm/morphsdk 0.2.121 → 0.2.123

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 (186) hide show
  1. package/dist/{chunk-L4PK4VC7.js → chunk-5OJE7GH4.js} +2 -2
  2. package/dist/chunk-63VHBANJ.js +22 -0
  3. package/dist/chunk-63VHBANJ.js.map +1 -0
  4. package/dist/{chunk-BDKXYMU2.js → chunk-ANPZFWYV.js} +2 -2
  5. package/dist/{chunk-DL3Y3R6A.js → chunk-BJ2764MK.js} +2 -2
  6. package/dist/{chunk-JBIFS33U.js → chunk-DBSOONOY.js} +2 -2
  7. package/dist/chunk-ETTCJWJK.js +113 -0
  8. package/dist/chunk-ETTCJWJK.js.map +1 -0
  9. package/dist/{chunk-EJYFE73S.js → chunk-FMKJ72KT.js} +3 -3
  10. package/dist/{chunk-EJYFE73S.js.map → chunk-FMKJ72KT.js.map} +1 -1
  11. package/dist/{chunk-7QZFNYOH.js → chunk-GXFJLL5O.js} +2 -2
  12. package/dist/chunk-H3U7J5RI.js +98 -0
  13. package/dist/chunk-H3U7J5RI.js.map +1 -0
  14. package/dist/{chunk-MAAULSSQ.js → chunk-HVBJ4UO6.js} +2 -2
  15. package/dist/{chunk-3HBZXN6E.js → chunk-K74GLGST.js} +2 -2
  16. package/dist/{chunk-EZFXR52Q.js → chunk-KL3AMLGL.js} +2 -2
  17. package/dist/{chunk-YMOTJ6ZP.js → chunk-L426IMZD.js} +2 -2
  18. package/dist/{chunk-C3BQUIFE.js → chunk-MXSGTN7R.js} +145 -9
  19. package/dist/chunk-MXSGTN7R.js.map +1 -0
  20. package/dist/{chunk-266SWRHK.js → chunk-OFJYDTQI.js} +2 -2
  21. package/dist/chunk-OTOVGCG6.js +42 -0
  22. package/dist/chunk-OTOVGCG6.js.map +1 -0
  23. package/dist/{chunk-W37KJB25.js → chunk-QD7KPI7A.js} +2 -2
  24. package/dist/chunk-QGRFAVGK.js +112 -0
  25. package/dist/chunk-QGRFAVGK.js.map +1 -0
  26. package/dist/{chunk-WEBUKGPK.js → chunk-UHL2ZEWG.js} +3 -3
  27. package/dist/{chunk-CIFPLFBQ.js → chunk-UJS3AIWS.js} +2 -2
  28. package/dist/{chunk-FV3R3JGV.js → chunk-UX65IRCX.js} +2 -2
  29. package/dist/{chunk-L5C6E32T.js → chunk-V3HLOZK2.js} +1 -1
  30. package/dist/{chunk-L5C6E32T.js.map → chunk-V3HLOZK2.js.map} +1 -1
  31. package/dist/{chunk-7IZUNRPZ.js → chunk-V4KBK66V.js} +54 -15
  32. package/dist/{chunk-7IZUNRPZ.js.map → chunk-V4KBK66V.js.map} +1 -1
  33. package/dist/{chunk-AI3ZCOCT.js → chunk-WE75QX2B.js} +1 -1
  34. package/dist/chunk-WYYR2EU6.js +29 -0
  35. package/dist/chunk-WYYR2EU6.js.map +1 -0
  36. package/dist/{chunk-GNRMDXJA.js → chunk-XXL62KSJ.js} +2 -2
  37. package/dist/{chunk-QDGB6FLI.js → chunk-ZZCMAFN7.js} +5 -5
  38. package/dist/chunk-ZZCMAFN7.js.map +1 -0
  39. package/dist/{client-Bp3MRcJc.d.ts → client-JHPwle1Z.d.ts} +46 -1
  40. package/dist/client.cjs +287 -12
  41. package/dist/client.cjs.map +1 -1
  42. package/dist/client.d.ts +2 -2
  43. package/dist/client.js +23 -21
  44. package/dist/edge.cjs +2 -2
  45. package/dist/edge.cjs.map +1 -1
  46. package/dist/edge.js +4 -4
  47. package/dist/index.cjs +287 -12
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.ts +2 -2
  50. package/dist/index.js +24 -22
  51. package/dist/modelrouter/core.cjs +2 -2
  52. package/dist/modelrouter/core.cjs.map +1 -1
  53. package/dist/modelrouter/core.js +3 -3
  54. package/dist/modelrouter/index.cjs +2 -2
  55. package/dist/modelrouter/index.cjs.map +1 -1
  56. package/dist/modelrouter/index.js +3 -3
  57. package/dist/tools/browser/anthropic.cjs +2 -2
  58. package/dist/tools/browser/anthropic.cjs.map +1 -1
  59. package/dist/tools/browser/anthropic.js +5 -5
  60. package/dist/tools/browser/core.cjs +2 -2
  61. package/dist/tools/browser/core.cjs.map +1 -1
  62. package/dist/tools/browser/core.js +4 -4
  63. package/dist/tools/browser/index.cjs +2 -2
  64. package/dist/tools/browser/index.cjs.map +1 -1
  65. package/dist/tools/browser/index.js +7 -7
  66. package/dist/tools/browser/openai.cjs +2 -2
  67. package/dist/tools/browser/openai.cjs.map +1 -1
  68. package/dist/tools/browser/openai.js +5 -5
  69. package/dist/tools/browser/profiles/core.cjs +2 -2
  70. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  71. package/dist/tools/browser/profiles/core.js +3 -3
  72. package/dist/tools/browser/profiles/index.cjs +2 -2
  73. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  74. package/dist/tools/browser/profiles/index.js +3 -3
  75. package/dist/tools/browser/vercel.cjs +2 -2
  76. package/dist/tools/browser/vercel.cjs.map +1 -1
  77. package/dist/tools/browser/vercel.js +5 -5
  78. package/dist/tools/codebase_search/anthropic.cjs +2 -2
  79. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  80. package/dist/tools/codebase_search/anthropic.js +4 -4
  81. package/dist/tools/codebase_search/core.cjs +2 -2
  82. package/dist/tools/codebase_search/core.cjs.map +1 -1
  83. package/dist/tools/codebase_search/core.js +3 -3
  84. package/dist/tools/codebase_search/index.cjs +2 -2
  85. package/dist/tools/codebase_search/index.cjs.map +1 -1
  86. package/dist/tools/codebase_search/index.js +6 -6
  87. package/dist/tools/codebase_search/openai.cjs +2 -2
  88. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  89. package/dist/tools/codebase_search/openai.js +4 -4
  90. package/dist/tools/codebase_search/vercel.cjs +2 -2
  91. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  92. package/dist/tools/codebase_search/vercel.js +4 -4
  93. package/dist/tools/fastapply/anthropic.cjs +2 -2
  94. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  95. package/dist/tools/fastapply/anthropic.js +4 -4
  96. package/dist/tools/fastapply/apply.cjs +2 -2
  97. package/dist/tools/fastapply/apply.cjs.map +1 -1
  98. package/dist/tools/fastapply/apply.js +2 -2
  99. package/dist/tools/fastapply/core.cjs +2 -2
  100. package/dist/tools/fastapply/core.cjs.map +1 -1
  101. package/dist/tools/fastapply/core.js +3 -3
  102. package/dist/tools/fastapply/index.cjs +2 -2
  103. package/dist/tools/fastapply/index.cjs.map +1 -1
  104. package/dist/tools/fastapply/index.js +6 -6
  105. package/dist/tools/fastapply/openai.cjs +2 -2
  106. package/dist/tools/fastapply/openai.cjs.map +1 -1
  107. package/dist/tools/fastapply/openai.js +4 -4
  108. package/dist/tools/fastapply/vercel.cjs +2 -2
  109. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  110. package/dist/tools/fastapply/vercel.js +4 -4
  111. package/dist/tools/index.cjs +2 -2
  112. package/dist/tools/index.cjs.map +1 -1
  113. package/dist/tools/index.js +6 -6
  114. package/dist/tools/utils/resilience.cjs +2 -2
  115. package/dist/tools/utils/resilience.cjs.map +1 -1
  116. package/dist/tools/utils/resilience.js +2 -2
  117. package/dist/tools/warp_grep/agent/runner.cjs +5 -5
  118. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  119. package/dist/tools/warp_grep/agent/runner.js +2 -2
  120. package/dist/tools/warp_grep/anthropic.cjs +476 -5
  121. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  122. package/dist/tools/warp_grep/anthropic.d.ts +62 -2
  123. package/dist/tools/warp_grep/anthropic.js +11 -5
  124. package/dist/tools/warp_grep/client.cjs +187 -12
  125. package/dist/tools/warp_grep/client.cjs.map +1 -1
  126. package/dist/tools/warp_grep/client.d.ts +58 -2
  127. package/dist/tools/warp_grep/client.js +9 -3
  128. package/dist/tools/warp_grep/gemini.cjs +475 -5
  129. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  130. package/dist/tools/warp_grep/gemini.d.ts +62 -2
  131. package/dist/tools/warp_grep/gemini.js +69 -4
  132. package/dist/tools/warp_grep/gemini.js.map +1 -1
  133. package/dist/tools/warp_grep/index.cjs +228 -12
  134. package/dist/tools/warp_grep/index.cjs.map +1 -1
  135. package/dist/tools/warp_grep/index.d.ts +52 -3
  136. package/dist/tools/warp_grep/index.js +26 -5
  137. package/dist/tools/warp_grep/openai.cjs +482 -5
  138. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  139. package/dist/tools/warp_grep/openai.d.ts +62 -2
  140. package/dist/tools/warp_grep/openai.js +11 -5
  141. package/dist/tools/warp_grep/providers/code_storage_http.cjs +53 -0
  142. package/dist/tools/warp_grep/providers/code_storage_http.cjs.map +1 -0
  143. package/dist/tools/warp_grep/providers/code_storage_http.d.ts +23 -0
  144. package/dist/tools/warp_grep/providers/code_storage_http.js +8 -0
  145. package/dist/tools/warp_grep/providers/code_storage_http.js.map +1 -0
  146. package/dist/tools/warp_grep/providers/remote.d.ts +1 -1
  147. package/dist/tools/warp_grep/utils/github.cjs +46 -0
  148. package/dist/tools/warp_grep/utils/github.cjs.map +1 -0
  149. package/dist/tools/warp_grep/utils/github.d.ts +13 -0
  150. package/dist/tools/warp_grep/utils/github.js +8 -0
  151. package/dist/tools/warp_grep/utils/github.js.map +1 -0
  152. package/dist/tools/warp_grep/vercel.cjs +245 -5
  153. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  154. package/dist/tools/warp_grep/vercel.d.ts +60 -2
  155. package/dist/tools/warp_grep/vercel.js +11 -5
  156. package/dist/{types-D5p8QErL.d.ts → types-DY_hq2eZ.d.ts} +53 -1
  157. package/dist/version.cjs +2 -2
  158. package/dist/version.cjs.map +1 -1
  159. package/dist/version.js +1 -1
  160. package/package.json +2 -2
  161. package/dist/chunk-C3BQUIFE.js.map +0 -1
  162. package/dist/chunk-CXP63PHW.js +0 -61
  163. package/dist/chunk-CXP63PHW.js.map +0 -1
  164. package/dist/chunk-KW7OEGZK.js +0 -9
  165. package/dist/chunk-KW7OEGZK.js.map +0 -1
  166. package/dist/chunk-QDGB6FLI.js.map +0 -1
  167. package/dist/chunk-U5UDFQXK.js +0 -66
  168. package/dist/chunk-U5UDFQXK.js.map +0 -1
  169. package/dist/chunk-XERAWJ3H.js +0 -53
  170. package/dist/chunk-XERAWJ3H.js.map +0 -1
  171. /package/dist/{chunk-L4PK4VC7.js.map → chunk-5OJE7GH4.js.map} +0 -0
  172. /package/dist/{chunk-BDKXYMU2.js.map → chunk-ANPZFWYV.js.map} +0 -0
  173. /package/dist/{chunk-DL3Y3R6A.js.map → chunk-BJ2764MK.js.map} +0 -0
  174. /package/dist/{chunk-JBIFS33U.js.map → chunk-DBSOONOY.js.map} +0 -0
  175. /package/dist/{chunk-7QZFNYOH.js.map → chunk-GXFJLL5O.js.map} +0 -0
  176. /package/dist/{chunk-MAAULSSQ.js.map → chunk-HVBJ4UO6.js.map} +0 -0
  177. /package/dist/{chunk-3HBZXN6E.js.map → chunk-K74GLGST.js.map} +0 -0
  178. /package/dist/{chunk-EZFXR52Q.js.map → chunk-KL3AMLGL.js.map} +0 -0
  179. /package/dist/{chunk-YMOTJ6ZP.js.map → chunk-L426IMZD.js.map} +0 -0
  180. /package/dist/{chunk-266SWRHK.js.map → chunk-OFJYDTQI.js.map} +0 -0
  181. /package/dist/{chunk-W37KJB25.js.map → chunk-QD7KPI7A.js.map} +0 -0
  182. /package/dist/{chunk-WEBUKGPK.js.map → chunk-UHL2ZEWG.js.map} +0 -0
  183. /package/dist/{chunk-CIFPLFBQ.js.map → chunk-UJS3AIWS.js.map} +0 -0
  184. /package/dist/{chunk-FV3R3JGV.js.map → chunk-UX65IRCX.js.map} +0 -0
  185. /package/dist/{chunk-AI3ZCOCT.js.map → chunk-WE75QX2B.js.map} +0 -0
  186. /package/dist/{chunk-GNRMDXJA.js.map → chunk-XXL62KSJ.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { Tool } from '@anthropic-ai/sdk/resources/messages';
2
2
  export { formatResult } from './client.js';
3
3
  export { getSystemPrompt } from './agent/prompt.js';
4
- import { d as WarpGrepToolConfig, b as WarpGrepResult } from '../../types-D5p8QErL.js';
4
+ import { d as WarpGrepToolConfig, b as WarpGrepResult, g as GitHubSearchToolConfig, h as GitHubReadFileToolConfig, e as GitHubReadFileInput, f as GitHubReadFileResult } from '../../types-DY_hq2eZ.js';
5
5
  import './agent/types.js';
6
6
  import '../utils/resilience.js';
7
7
  import './providers/types.js';
@@ -79,5 +79,65 @@ declare function createWarpGrepTool(config: WarpGrepToolConfig): Tool & {
79
79
  formatResult: (result: WarpGrepResult) => string;
80
80
  getSystemPrompt: () => string;
81
81
  };
82
+ /**
83
+ * Create a GitHub search tool for Anthropic SDK
84
+ *
85
+ * @param config - Configuration options (morphApiKey, morphApiUrl, codeSearchUrl, timeout)
86
+ * @returns Anthropic Tool with execute and formatResult methods
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * import Anthropic from '@anthropic-ai/sdk';
91
+ * import { createGitHubSearchTool } from '@morphllm/morphsdk/tools/warp-grep/anthropic';
92
+ *
93
+ * const tool = createGitHubSearchTool({ morphApiKey: process.env.MORPH_API_KEY });
94
+ *
95
+ * const response = await client.messages.create({
96
+ * model: 'claude-sonnet-4-5-20250929',
97
+ * tools: [tool],
98
+ * messages: [{ role: 'user', content: 'How does auth work in vercel/next.js?' }]
99
+ * });
100
+ *
101
+ * // Execute
102
+ * const result = await tool.execute({ query: 'auth middleware', github: 'vercel/next.js' });
103
+ * console.log(tool.formatResult(result));
104
+ * ```
105
+ */
106
+ declare function createGitHubSearchTool(config: GitHubSearchToolConfig): Tool & {
107
+ execute: (input: {
108
+ query: string;
109
+ github: string;
110
+ branch?: string;
111
+ }) => Promise<WarpGrepResult>;
112
+ formatResult: (result: WarpGrepResult) => string;
113
+ getSystemPrompt: () => string;
114
+ };
115
+ /**
116
+ * Create a GitHub read file tool for Anthropic SDK
117
+ *
118
+ * @param config - Optional configuration (timeout)
119
+ * @returns Anthropic Tool with execute and formatResult methods
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * import Anthropic from '@anthropic-ai/sdk';
124
+ * import { createGitHubReadFileTool } from '@morphllm/morphsdk/tools/warp-grep/anthropic';
125
+ *
126
+ * const tool = createGitHubReadFileTool();
127
+ *
128
+ * const response = await client.messages.create({
129
+ * model: 'claude-sonnet-4-5-20250929',
130
+ * tools: [tool],
131
+ * messages: [{ role: 'user', content: 'Read the package.json from vercel/next.js' }]
132
+ * });
133
+ *
134
+ * const result = await tool.execute({ github: 'vercel/next.js', path: 'package.json' });
135
+ * console.log(tool.formatResult(result));
136
+ * ```
137
+ */
138
+ declare function createGitHubReadFileTool(config?: GitHubReadFileToolConfig): Tool & {
139
+ execute: (input: GitHubReadFileInput) => Promise<GitHubReadFileResult>;
140
+ formatResult: (result: GitHubReadFileResult) => string;
141
+ };
82
142
 
83
- export { createWarpGrepTool, execute, warpGrepTool };
143
+ export { createGitHubReadFileTool, createGitHubSearchTool, createWarpGrepTool, execute, warpGrepTool };
@@ -1,14 +1,18 @@
1
1
  import {
2
+ createGitHubReadFileTool,
3
+ createGitHubSearchTool,
2
4
  createWarpGrepTool,
3
5
  execute,
4
6
  warpGrepTool
5
- } from "../../chunk-XERAWJ3H.js";
6
- import "../../chunk-KW7OEGZK.js";
7
+ } from "../../chunk-H3U7J5RI.js";
8
+ import "../../chunk-OTOVGCG6.js";
7
9
  import {
8
10
  formatResult
9
- } from "../../chunk-C3BQUIFE.js";
11
+ } from "../../chunk-MXSGTN7R.js";
12
+ import "../../chunk-WYYR2EU6.js";
10
13
  import "../../chunk-PUGSTXLO.js";
11
- import "../../chunk-QDGB6FLI.js";
14
+ import "../../chunk-63VHBANJ.js";
15
+ import "../../chunk-ZZCMAFN7.js";
12
16
  import "../../chunk-3MLWXJTJ.js";
13
17
  import "../../chunk-5PNMAWLC.js";
14
18
  import "../../chunk-APP75CBN.js";
@@ -16,9 +20,11 @@ import "../../chunk-GHGJAQSJ.js";
16
20
  import {
17
21
  getSystemPrompt
18
22
  } from "../../chunk-FMLHRJDF.js";
19
- import "../../chunk-EJYFE73S.js";
23
+ import "../../chunk-FMKJ72KT.js";
20
24
  import "../../chunk-PZ5AY32C.js";
21
25
  export {
26
+ createGitHubReadFileTool,
27
+ createGitHubSearchTool,
22
28
  createWarpGrepTool,
23
29
  execute,
24
30
  formatResult,
@@ -573,9 +573,11 @@ Details: ${res.stderr}` : ""}`
573
573
  var client_exports = {};
574
574
  __export(client_exports, {
575
575
  WarpGrepClient: () => WarpGrepClient,
576
+ executeGitHubReadFile: () => executeGitHubReadFile,
576
577
  executeToolCall: () => executeToolCall,
577
578
  executeToolCallStreaming: () => executeToolCallStreaming,
578
579
  executeWarpGrep: () => executeWarpGrep,
580
+ formatGitHubReadFileResult: () => formatGitHubReadFileResult,
579
581
  formatResult: () => formatResult
580
582
  });
581
583
  module.exports = __toCommonJS(client_exports);
@@ -1377,7 +1379,7 @@ var import_openai = __toESM(require("openai"), 1);
1377
1379
  // package.json
1378
1380
  var package_default = {
1379
1381
  name: "@morphllm/morphsdk",
1380
- version: "0.2.121",
1382
+ version: "0.2.123",
1381
1383
  description: "TypeScript SDK and CLI for Morph Fast Apply integration",
1382
1384
  type: "module",
1383
1385
  main: "./dist/index.cjs",
@@ -1519,7 +1521,7 @@ var package_default = {
1519
1521
  "!dist/**/*.test.*"
1520
1522
  ],
1521
1523
  scripts: {
1522
- build: "tsup version.ts index.ts edge.ts client.ts tools/index.ts tools/fastapply/index.ts tools/fastapply/core.ts tools/fastapply/apply.ts tools/fastapply/types.ts tools/fastapply/prompts.ts tools/fastapply/anthropic.ts tools/fastapply/openai.ts tools/fastapply/vercel.ts tools/codebase_search/index.ts tools/codebase_search/core.ts tools/codebase_search/types.ts tools/codebase_search/prompts.ts tools/codebase_search/anthropic.ts tools/codebase_search/openai.ts tools/codebase_search/vercel.ts tools/warp_grep/index.ts tools/warp_grep/client.ts tools/warp_grep/openai.ts tools/warp_grep/anthropic.ts tools/warp_grep/vercel.ts tools/warp_grep/gemini.ts tools/warp_grep/harness.ts tools/warp_grep/agent/config.ts tools/warp_grep/agent/prompt.ts tools/warp_grep/agent/parser.ts tools/warp_grep/agent/runner.ts tools/warp_grep/agent/types.ts tools/warp_grep/agent/formatter.ts tools/warp_grep/providers/types.ts tools/warp_grep/providers/local.ts tools/warp_grep/providers/remote.ts tools/warp_grep/tools/grep.ts tools/warp_grep/tools/analyse.ts tools/warp_grep/tools/read.ts tools/warp_grep/tools/finish.ts tools/warp_grep/utils/paths.ts tools/warp_grep/utils/ripgrep.ts tools/warp_grep/utils/format.ts tools/warp_grep/utils/files.ts git/index.ts git/client.ts git/config.ts git/types.ts tools/browser/index.ts tools/browser/core.ts tools/browser/types.ts tools/browser/prompts.ts tools/browser/anthropic.ts tools/browser/openai.ts tools/browser/vercel.ts tools/browser/live.ts tools/browser/errors.ts tools/browser/profiles/index.ts tools/browser/profiles/core.ts tools/browser/profiles/types.ts modelrouter/index.ts modelrouter/core.ts modelrouter/types.ts tools/compact/index.ts tools/compact/core.ts tools/compact/types.ts tools/utils/resilience.ts --format esm,cjs --sourcemap --clean --dts --dts-resolve",
1524
+ build: "tsup version.ts index.ts edge.ts client.ts tools/index.ts tools/fastapply/index.ts tools/fastapply/core.ts tools/fastapply/apply.ts tools/fastapply/types.ts tools/fastapply/prompts.ts tools/fastapply/anthropic.ts tools/fastapply/openai.ts tools/fastapply/vercel.ts tools/codebase_search/index.ts tools/codebase_search/core.ts tools/codebase_search/types.ts tools/codebase_search/prompts.ts tools/codebase_search/anthropic.ts tools/codebase_search/openai.ts tools/codebase_search/vercel.ts tools/warp_grep/index.ts tools/warp_grep/client.ts tools/warp_grep/openai.ts tools/warp_grep/anthropic.ts tools/warp_grep/vercel.ts tools/warp_grep/gemini.ts tools/warp_grep/harness.ts tools/warp_grep/agent/config.ts tools/warp_grep/agent/prompt.ts tools/warp_grep/agent/parser.ts tools/warp_grep/agent/runner.ts tools/warp_grep/agent/types.ts tools/warp_grep/agent/formatter.ts tools/warp_grep/providers/types.ts tools/warp_grep/providers/local.ts tools/warp_grep/providers/remote.ts tools/warp_grep/providers/code_storage_http.ts tools/warp_grep/tools/grep.ts tools/warp_grep/tools/analyse.ts tools/warp_grep/tools/read.ts tools/warp_grep/tools/finish.ts tools/warp_grep/utils/paths.ts tools/warp_grep/utils/github.ts tools/warp_grep/utils/ripgrep.ts tools/warp_grep/utils/format.ts tools/warp_grep/utils/files.ts git/index.ts git/client.ts git/config.ts git/types.ts tools/browser/index.ts tools/browser/core.ts tools/browser/types.ts tools/browser/prompts.ts tools/browser/anthropic.ts tools/browser/openai.ts tools/browser/vercel.ts tools/browser/live.ts tools/browser/errors.ts tools/browser/profiles/index.ts tools/browser/profiles/core.ts tools/browser/profiles/types.ts modelrouter/index.ts modelrouter/core.ts modelrouter/types.ts tools/compact/index.ts tools/compact/core.ts tools/compact/types.ts tools/utils/resilience.ts --format esm,cjs --sourcemap --clean --dts --dts-resolve",
1523
1525
  prepare: "npm run build",
1524
1526
  typecheck: "tsc --noEmit",
1525
1527
  lint: "eslint .",
@@ -1627,9 +1629,9 @@ async function callModel(messages, model, options = {}) {
1627
1629
  });
1628
1630
  } catch (error) {
1629
1631
  if (error instanceof import_openai.default.APIError && error.status === 404) {
1630
- throw new Error(
1631
- "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"
1632
- );
1632
+ const defaultMsg = "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";
1633
+ const errorText = error.message?.trim();
1634
+ throw new Error(errorText || defaultMsg);
1633
1635
  }
1634
1636
  throw error;
1635
1637
  }
@@ -2157,7 +2159,51 @@ var RemoteCommandsProvider = class {
2157
2159
  }
2158
2160
  };
2159
2161
 
2162
+ // tools/warp_grep/providers/code_storage_http.ts
2163
+ async function post(url, body, op) {
2164
+ const res = await fetch(url, {
2165
+ method: "POST",
2166
+ headers: { "Content-Type": "application/json" },
2167
+ body: JSON.stringify(body)
2168
+ });
2169
+ if (!res.ok) {
2170
+ const text = await res.text().catch(() => res.statusText);
2171
+ throw new Error(`${op} failed (${res.status}): ${text}`);
2172
+ }
2173
+ const data = await res.json();
2174
+ if (data.error) throw new Error(data.error);
2175
+ return data.stdout;
2176
+ }
2177
+ function createCodeStorageHttpCommands(config) {
2178
+ const { baseUrl, repoId, branch } = config;
2179
+ const encodedRepoId = encodeURIComponent(repoId);
2180
+ return {
2181
+ grep: (pattern, path5, glob) => post(`${baseUrl}/api/code-search/${encodedRepoId}/grep`, { pattern, path: path5, glob, branch }, "grep"),
2182
+ read: (path5, start, end) => post(`${baseUrl}/api/code-search/${encodedRepoId}/read`, { path: path5, start, end, branch }, "read"),
2183
+ listDir: (path5, maxDepth) => post(`${baseUrl}/api/code-search/${encodedRepoId}/list`, { path: path5, maxDepth, branch }, "list")
2184
+ };
2185
+ }
2186
+
2187
+ // tools/warp_grep/utils/github.ts
2188
+ function parseGitHubUrl(input) {
2189
+ input = input.trim();
2190
+ const urlPattern = /^(?:https?:\/\/)?github\.com\/([^\/]+)\/([^\/\?\#]+)/;
2191
+ const match = input.match(urlPattern);
2192
+ if (match) {
2193
+ return { owner: match[1], repo: match[2].replace(/\.git$/, "") };
2194
+ }
2195
+ const shortPattern = /^([^\/]+)\/([^\/]+)$/;
2196
+ const shortMatch = input.match(shortPattern);
2197
+ if (shortMatch && !shortMatch[1].includes(".")) {
2198
+ return { owner: shortMatch[1], repo: shortMatch[2].replace(/\.git$/, "") };
2199
+ }
2200
+ throw new Error(
2201
+ `Invalid GitHub URL or shorthand: "${input}". Expected "owner/repo" or "https://github.com/owner/repo"`
2202
+ );
2203
+ }
2204
+
2160
2205
  // tools/warp_grep/client.ts
2206
+ var DEFAULT_CODE_SEARCH_URL = "https://morphllm.com";
2161
2207
  async function getLocalProvider(repoRoot, excludes) {
2162
2208
  const { LocalRipgrepProvider: LocalRipgrepProvider2 } = await Promise.resolve().then(() => (init_local(), local_exports));
2163
2209
  return new LocalRipgrepProvider2(repoRoot, excludes);
@@ -2165,13 +2211,7 @@ async function getLocalProvider(repoRoot, excludes) {
2165
2211
  var WarpGrepClient = class {
2166
2212
  config;
2167
2213
  constructor(config = {}) {
2168
- this.config = {
2169
- morphApiKey: config.morphApiKey,
2170
- morphApiUrl: config.morphApiUrl,
2171
- debug: config.debug,
2172
- timeout: config.timeout,
2173
- retryConfig: config.retryConfig
2174
- };
2214
+ this.config = { ...config };
2175
2215
  }
2176
2216
  execute(input) {
2177
2217
  const toolConfig = {
@@ -2191,6 +2231,80 @@ var WarpGrepClient = class {
2191
2231
  }
2192
2232
  return executeToolCall({ query: input.query }, toolConfig);
2193
2233
  }
2234
+ searchGitHub(input) {
2235
+ if (input.streamSteps) {
2236
+ return this._searchGitHubStreaming(input);
2237
+ }
2238
+ return this._searchGitHubAsync(input);
2239
+ }
2240
+ /**
2241
+ * Read a single file from a public GitHub repository
2242
+ *
2243
+ * @example
2244
+ * ```typescript
2245
+ * const result = await client.readGitHubFile({
2246
+ * github: 'vercel/next.js',
2247
+ * path: 'src/server/app-render/index.tsx',
2248
+ * startLine: 1,
2249
+ * endLine: 50,
2250
+ * });
2251
+ * if (result.success) console.log(result.content);
2252
+ * ```
2253
+ */
2254
+ async readGitHubFile(input) {
2255
+ return executeGitHubReadFile(input, { timeout: this.config.timeout });
2256
+ }
2257
+ async _resolveGitHubRepo(input) {
2258
+ const { owner, repo } = parseGitHubUrl(input.github);
2259
+ const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;
2260
+ const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);
2261
+ if (!importRes.ok) {
2262
+ const text = await importRes.text().catch(() => importRes.statusText);
2263
+ throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);
2264
+ }
2265
+ const { repoId, defaultBranch } = await importRes.json();
2266
+ return {
2267
+ repo,
2268
+ remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch })
2269
+ };
2270
+ }
2271
+ async _searchGitHubAsync(input) {
2272
+ try {
2273
+ const { repo, remoteCommands } = await this._resolveGitHubRepo(input);
2274
+ return this.execute({
2275
+ query: input.query,
2276
+ repoRoot: repo,
2277
+ remoteCommands
2278
+ });
2279
+ } catch (error) {
2280
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
2281
+ }
2282
+ }
2283
+ async *_searchGitHubStreaming(input) {
2284
+ let repo;
2285
+ let remoteCommands;
2286
+ try {
2287
+ ({ repo, remoteCommands } = await this._resolveGitHubRepo(input));
2288
+ } catch (error) {
2289
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
2290
+ }
2291
+ const generator = this.execute({
2292
+ query: input.query,
2293
+ repoRoot: repo,
2294
+ remoteCommands,
2295
+ streamSteps: true
2296
+ });
2297
+ let result;
2298
+ for (; ; ) {
2299
+ const { value, done } = await generator.next();
2300
+ if (done) {
2301
+ result = value;
2302
+ break;
2303
+ }
2304
+ yield value;
2305
+ }
2306
+ return result;
2307
+ }
2194
2308
  };
2195
2309
  function executeWarpGrep(input, config) {
2196
2310
  const client = new WarpGrepClient(config);
@@ -2267,6 +2381,65 @@ async function* executeToolCallStreaming(input, config) {
2267
2381
  }
2268
2382
  return processAgentResult(agentResult);
2269
2383
  }
2384
+ async function fetchRawGitHubFile(owner, repo, filePath, branch, timeout) {
2385
+ const branches = branch ? [branch] : ["HEAD"];
2386
+ const fallbacks = ["main", "master", "develop"];
2387
+ const fetchWithTimeout = (url) => timeout ? fetch(url, { signal: AbortSignal.timeout(timeout) }) : fetch(url);
2388
+ for (const b of branches) {
2389
+ const url = `https://raw.githubusercontent.com/${owner}/${repo}/${b}/${filePath}`;
2390
+ const res = await fetchWithTimeout(url);
2391
+ if (res.ok) return { content: await res.text(), branch: b };
2392
+ }
2393
+ for (const fb of fallbacks) {
2394
+ if (branch && fb === branch) continue;
2395
+ const url = `https://raw.githubusercontent.com/${owner}/${repo}/${fb}/${filePath}`;
2396
+ const res = await fetchWithTimeout(url);
2397
+ if (res.ok) return { content: await res.text(), branch: fb };
2398
+ }
2399
+ throw new Error(`File not found: ${owner}/${repo}/${filePath}`);
2400
+ }
2401
+ async function executeGitHubReadFile(input, config) {
2402
+ try {
2403
+ const { owner, repo } = parseGitHubUrl(input.github);
2404
+ const { content: raw, branch } = await fetchRawGitHubFile(
2405
+ owner,
2406
+ repo,
2407
+ input.path,
2408
+ input.branch,
2409
+ config?.timeout
2410
+ );
2411
+ const allLines = raw.split("\n");
2412
+ const totalLines = allLines.length;
2413
+ const start = Math.max(1, input.startLine ?? 1);
2414
+ const end = Math.min(totalLines, input.endLine ?? totalLines);
2415
+ const selected = allLines.slice(start - 1, end);
2416
+ const padWidth = String(end).length;
2417
+ const numbered = selected.map((line, i) => `${String(start + i).padStart(padWidth)}|${line}`).join("\n");
2418
+ return {
2419
+ success: true,
2420
+ content: numbered,
2421
+ path: input.path,
2422
+ github: `${owner}/${repo}`,
2423
+ branch,
2424
+ lineRange: [start, end],
2425
+ totalLines
2426
+ };
2427
+ } catch (error) {
2428
+ return {
2429
+ success: false,
2430
+ error: error instanceof Error ? error.message : String(error)
2431
+ };
2432
+ }
2433
+ }
2434
+ function formatGitHubReadFileResult(result) {
2435
+ if (!result.success) {
2436
+ return `Failed to read file: ${result.error}`;
2437
+ }
2438
+ const rangeStr = result.lineRange ? ` (lines ${result.lineRange[0]}-${result.lineRange[1]} of ${result.totalLines})` : "";
2439
+ return `File: ${result.github}/${result.path}${rangeStr}
2440
+
2441
+ ${result.content}`;
2442
+ }
2270
2443
  function formatResult(result) {
2271
2444
  if (!result.success) {
2272
2445
  return `Search failed: ${result.error}`;
@@ -2294,9 +2467,11 @@ function formatResult(result) {
2294
2467
  // Annotate the CommonJS export names for ESM import in node:
2295
2468
  0 && (module.exports = {
2296
2469
  WarpGrepClient,
2470
+ executeGitHubReadFile,
2297
2471
  executeToolCall,
2298
2472
  executeToolCallStreaming,
2299
2473
  executeWarpGrep,
2474
+ formatGitHubReadFileResult,
2300
2475
  formatResult
2301
2476
  });
2302
2477
  //# sourceMappingURL=client.cjs.map