@morphllm/morphsdk 0.2.137 → 0.2.139

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 (183) hide show
  1. package/dist/{chunk-AVIE6SRT.js → chunk-3J74OXN6.js} +2 -2
  2. package/dist/chunk-3T5W2D2W.js +288 -0
  3. package/dist/chunk-3T5W2D2W.js.map +1 -0
  4. package/dist/{chunk-HRJENFMZ.js → chunk-4J5UW34J.js} +4 -4
  5. package/dist/{chunk-L37HJNBY.js → chunk-5CBMLTG5.js} +5 -5
  6. package/dist/{chunk-5UDCVVZE.js → chunk-6W3X76KE.js} +21 -6
  7. package/dist/chunk-6W3X76KE.js.map +1 -0
  8. package/dist/{chunk-LQIGX3MX.js → chunk-6WSZDCGP.js} +2 -2
  9. package/dist/{chunk-6EQ5IEK6.js → chunk-73ZLTWKF.js} +4 -4
  10. package/dist/{chunk-Y4QRWCMI.js → chunk-7RCHQN7F.js} +2 -2
  11. package/dist/{chunk-5BLLE3UZ.js → chunk-ATAQZLQN.js} +2 -2
  12. package/dist/{chunk-JTBQIPLB.js → chunk-B55ZEX4M.js} +2 -2
  13. package/dist/{chunk-RI2GNU2V.js → chunk-DRAQDTSR.js} +2 -2
  14. package/dist/{chunk-4546AOKY.js → chunk-EEBGEMOO.js} +2 -2
  15. package/dist/{chunk-4YEGLW4W.js → chunk-EHRKLQ62.js} +2 -2
  16. package/dist/chunk-GQX4PKXZ.js +265 -0
  17. package/dist/chunk-GQX4PKXZ.js.map +1 -0
  18. package/dist/{chunk-SJKGUXNG.js → chunk-MHNCFELG.js} +4 -4
  19. package/dist/{chunk-3GEXJ6WJ.js → chunk-MTD2JOO7.js} +1 -1
  20. package/dist/{chunk-ODYZXYFX.js → chunk-NEVPVOTT.js} +3 -3
  21. package/dist/{chunk-JNMYWTLZ.js → chunk-NGHLDI64.js} +2 -2
  22. package/dist/{chunk-7JA4SBAA.js → chunk-OICUUS5Y.js} +4 -4
  23. package/dist/{chunk-3OG25CSW.js → chunk-TCXBKB7P.js} +2 -2
  24. package/dist/{chunk-2NVSFPMB.js → chunk-ULMSWACH.js} +9 -7
  25. package/dist/chunk-ULMSWACH.js.map +1 -0
  26. package/dist/{chunk-K632JRRH.js → chunk-XIEU3N3R.js} +4 -4
  27. package/dist/{chunk-D7E5WBMV.js → chunk-XUDE6SOY.js} +57 -21
  28. package/dist/{chunk-D7E5WBMV.js.map → chunk-XUDE6SOY.js.map} +1 -1
  29. package/dist/{chunk-MJZ5HL6P.js → chunk-ZUG2L4BJ.js} +2 -2
  30. package/dist/{chunk-OPVFUVNJ.js → chunk-ZYN64ZVG.js} +4 -4
  31. package/dist/chunk-ZZ25FZG2.js +73 -0
  32. package/dist/chunk-ZZ25FZG2.js.map +1 -0
  33. package/dist/{client-Ca7e11hJ.d.ts → client-BMmG3SZs.d.ts} +39 -0
  34. package/dist/client.cjs +653 -14
  35. package/dist/client.cjs.map +1 -1
  36. package/dist/client.d.ts +2 -1
  37. package/dist/client.js +30 -27
  38. package/dist/edge.cjs +20 -5
  39. package/dist/edge.cjs.map +1 -1
  40. package/dist/edge.js +9 -9
  41. package/dist/index.cjs +656 -17
  42. package/dist/index.cjs.map +1 -1
  43. package/dist/index.d.ts +2 -1
  44. package/dist/index.js +37 -34
  45. package/dist/modelrouter/core.cjs +20 -5
  46. package/dist/modelrouter/core.cjs.map +1 -1
  47. package/dist/modelrouter/core.js +3 -3
  48. package/dist/modelrouter/index.cjs +20 -5
  49. package/dist/modelrouter/index.cjs.map +1 -1
  50. package/dist/modelrouter/index.js +3 -3
  51. package/dist/subagents/anthropic.cjs +2397 -0
  52. package/dist/subagents/anthropic.cjs.map +1 -0
  53. package/dist/subagents/anthropic.d.ts +41 -0
  54. package/dist/subagents/anthropic.js +19 -0
  55. package/dist/subagents/anthropic.js.map +1 -0
  56. package/dist/subagents/index.cjs +101 -0
  57. package/dist/subagents/index.cjs.map +1 -0
  58. package/dist/subagents/index.d.ts +5 -0
  59. package/dist/subagents/index.js +12 -0
  60. package/dist/subagents/index.js.map +1 -0
  61. package/dist/subagents/prompts.cjs +99 -0
  62. package/dist/subagents/prompts.cjs.map +1 -0
  63. package/dist/subagents/prompts.d.ts +42 -0
  64. package/dist/subagents/prompts.js +12 -0
  65. package/dist/subagents/prompts.js.map +1 -0
  66. package/dist/subagents/types.cjs +19 -0
  67. package/dist/subagents/types.cjs.map +1 -0
  68. package/dist/subagents/types.d.ts +93 -0
  69. package/dist/subagents/types.js +1 -0
  70. package/dist/subagents/types.js.map +1 -0
  71. package/dist/subagents/vercel.cjs +2374 -0
  72. package/dist/subagents/vercel.cjs.map +1 -0
  73. package/dist/subagents/vercel.d.ts +32 -0
  74. package/dist/subagents/vercel.js +19 -0
  75. package/dist/subagents/vercel.js.map +1 -0
  76. package/dist/tools/browser/anthropic.cjs +20 -5
  77. package/dist/tools/browser/anthropic.cjs.map +1 -1
  78. package/dist/tools/browser/anthropic.js +6 -6
  79. package/dist/tools/browser/core.cjs +20 -5
  80. package/dist/tools/browser/core.cjs.map +1 -1
  81. package/dist/tools/browser/core.js +5 -5
  82. package/dist/tools/browser/index.cjs +20 -5
  83. package/dist/tools/browser/index.cjs.map +1 -1
  84. package/dist/tools/browser/index.js +15 -15
  85. package/dist/tools/browser/openai.cjs +20 -5
  86. package/dist/tools/browser/openai.cjs.map +1 -1
  87. package/dist/tools/browser/openai.js +6 -6
  88. package/dist/tools/browser/profiles/core.cjs +20 -5
  89. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  90. package/dist/tools/browser/profiles/core.js +3 -3
  91. package/dist/tools/browser/profiles/index.cjs +20 -5
  92. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  93. package/dist/tools/browser/profiles/index.js +3 -3
  94. package/dist/tools/browser/vercel.cjs +20 -5
  95. package/dist/tools/browser/vercel.cjs.map +1 -1
  96. package/dist/tools/browser/vercel.js +6 -6
  97. package/dist/tools/codebase_search/anthropic.cjs +20 -5
  98. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  99. package/dist/tools/codebase_search/anthropic.js +4 -4
  100. package/dist/tools/codebase_search/core.cjs +20 -5
  101. package/dist/tools/codebase_search/core.cjs.map +1 -1
  102. package/dist/tools/codebase_search/core.js +3 -3
  103. package/dist/tools/codebase_search/index.cjs +20 -5
  104. package/dist/tools/codebase_search/index.cjs.map +1 -1
  105. package/dist/tools/codebase_search/index.js +10 -10
  106. package/dist/tools/codebase_search/openai.cjs +20 -5
  107. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  108. package/dist/tools/codebase_search/openai.js +4 -4
  109. package/dist/tools/codebase_search/vercel.cjs +20 -5
  110. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  111. package/dist/tools/codebase_search/vercel.js +4 -4
  112. package/dist/tools/fastapply/anthropic.cjs +20 -5
  113. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  114. package/dist/tools/fastapply/anthropic.js +4 -4
  115. package/dist/tools/fastapply/apply.cjs +20 -5
  116. package/dist/tools/fastapply/apply.cjs.map +1 -1
  117. package/dist/tools/fastapply/apply.js +2 -2
  118. package/dist/tools/fastapply/core.cjs +20 -5
  119. package/dist/tools/fastapply/core.cjs.map +1 -1
  120. package/dist/tools/fastapply/core.js +3 -3
  121. package/dist/tools/fastapply/index.cjs +20 -5
  122. package/dist/tools/fastapply/index.cjs.map +1 -1
  123. package/dist/tools/fastapply/index.js +8 -8
  124. package/dist/tools/fastapply/openai.cjs +20 -5
  125. package/dist/tools/fastapply/openai.cjs.map +1 -1
  126. package/dist/tools/fastapply/openai.js +4 -4
  127. package/dist/tools/fastapply/vercel.cjs +20 -5
  128. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  129. package/dist/tools/fastapply/vercel.js +4 -4
  130. package/dist/tools/index.cjs +20 -5
  131. package/dist/tools/index.cjs.map +1 -1
  132. package/dist/tools/index.js +8 -8
  133. package/dist/tools/utils/resilience.cjs +20 -5
  134. package/dist/tools/utils/resilience.cjs.map +1 -1
  135. package/dist/tools/utils/resilience.js +2 -2
  136. package/dist/tools/warp_grep/agent/runner.cjs +23 -6
  137. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  138. package/dist/tools/warp_grep/agent/runner.js +3 -3
  139. package/dist/tools/warp_grep/anthropic.cjs +23 -6
  140. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  141. package/dist/tools/warp_grep/anthropic.js +6 -6
  142. package/dist/tools/warp_grep/client.cjs +23 -6
  143. package/dist/tools/warp_grep/client.cjs.map +1 -1
  144. package/dist/tools/warp_grep/client.js +5 -5
  145. package/dist/tools/warp_grep/gemini.cjs +23 -6
  146. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  147. package/dist/tools/warp_grep/gemini.js +5 -5
  148. package/dist/tools/warp_grep/harness.js +4 -4
  149. package/dist/tools/warp_grep/index.cjs +23 -6
  150. package/dist/tools/warp_grep/index.cjs.map +1 -1
  151. package/dist/tools/warp_grep/index.js +7 -7
  152. package/dist/tools/warp_grep/openai.cjs +23 -6
  153. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  154. package/dist/tools/warp_grep/openai.js +6 -6
  155. package/dist/tools/warp_grep/vercel.cjs +23 -6
  156. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  157. package/dist/tools/warp_grep/vercel.js +6 -6
  158. package/dist/version.cjs +20 -5
  159. package/dist/version.cjs.map +1 -1
  160. package/dist/version.js +1 -1
  161. package/package.json +20 -5
  162. package/dist/chunk-2NVSFPMB.js.map +0 -1
  163. package/dist/chunk-5UDCVVZE.js.map +0 -1
  164. /package/dist/{chunk-AVIE6SRT.js.map → chunk-3J74OXN6.js.map} +0 -0
  165. /package/dist/{chunk-HRJENFMZ.js.map → chunk-4J5UW34J.js.map} +0 -0
  166. /package/dist/{chunk-L37HJNBY.js.map → chunk-5CBMLTG5.js.map} +0 -0
  167. /package/dist/{chunk-LQIGX3MX.js.map → chunk-6WSZDCGP.js.map} +0 -0
  168. /package/dist/{chunk-6EQ5IEK6.js.map → chunk-73ZLTWKF.js.map} +0 -0
  169. /package/dist/{chunk-Y4QRWCMI.js.map → chunk-7RCHQN7F.js.map} +0 -0
  170. /package/dist/{chunk-5BLLE3UZ.js.map → chunk-ATAQZLQN.js.map} +0 -0
  171. /package/dist/{chunk-JTBQIPLB.js.map → chunk-B55ZEX4M.js.map} +0 -0
  172. /package/dist/{chunk-RI2GNU2V.js.map → chunk-DRAQDTSR.js.map} +0 -0
  173. /package/dist/{chunk-4546AOKY.js.map → chunk-EEBGEMOO.js.map} +0 -0
  174. /package/dist/{chunk-4YEGLW4W.js.map → chunk-EHRKLQ62.js.map} +0 -0
  175. /package/dist/{chunk-SJKGUXNG.js.map → chunk-MHNCFELG.js.map} +0 -0
  176. /package/dist/{chunk-3GEXJ6WJ.js.map → chunk-MTD2JOO7.js.map} +0 -0
  177. /package/dist/{chunk-ODYZXYFX.js.map → chunk-NEVPVOTT.js.map} +0 -0
  178. /package/dist/{chunk-JNMYWTLZ.js.map → chunk-NGHLDI64.js.map} +0 -0
  179. /package/dist/{chunk-7JA4SBAA.js.map → chunk-OICUUS5Y.js.map} +0 -0
  180. /package/dist/{chunk-3OG25CSW.js.map → chunk-TCXBKB7P.js.map} +0 -0
  181. /package/dist/{chunk-K632JRRH.js.map → chunk-XIEU3N3R.js.map} +0 -0
  182. /package/dist/{chunk-MJZ5HL6P.js.map → chunk-ZUG2L4BJ.js.map} +0 -0
  183. /package/dist/{chunk-OPVFUVNJ.js.map → chunk-ZYN64ZVG.js.map} +0 -0
@@ -0,0 +1,265 @@
1
+ import {
2
+ WarpGrepClient,
3
+ formatResult
4
+ } from "./chunk-5CBMLTG5.js";
5
+ import {
6
+ CODEBASE_SEARCH_TOOL,
7
+ SEND_MESSAGE_TOOL,
8
+ getSystemPrompt
9
+ } from "./chunk-ZZ25FZG2.js";
10
+
11
+ // subagents/vercel.ts
12
+ import { tool, generateText, stepCountIs } from "ai";
13
+ import { z } from "zod";
14
+ var DEFAULT_MAX_TURNS = {
15
+ quick: 3,
16
+ medium: 6,
17
+ thorough: 12
18
+ };
19
+ function getMaxTurns(config) {
20
+ return config.maxTurns ?? DEFAULT_MAX_TURNS[config.thoroughness ?? "medium"] ?? 6;
21
+ }
22
+ function createExploreSubagent(config) {
23
+ if (!config.repoRoot) {
24
+ throw new Error("repoRoot is required for Explore subagent");
25
+ }
26
+ const warpGrep = new WarpGrepClient({
27
+ morphApiKey: config.morphApiKey
28
+ });
29
+ const thoroughness = config.thoroughness ?? "medium";
30
+ const replyTimeout = config.replyTimeout ?? 3e4;
31
+ async function runExplore(prompt, callbacks = {}) {
32
+ const startTime = Date.now();
33
+ const allContexts = [];
34
+ let searchCount = 0;
35
+ const timeoutMs = config.timeout;
36
+ const timeoutPromise = timeoutMs ? new Promise(
37
+ (_, reject) => setTimeout(() => reject(new Error(`Exploration timed out after ${timeoutMs}ms`)), timeoutMs)
38
+ ) : null;
39
+ const runPromise = (async () => {
40
+ try {
41
+ const codebaseSearchSchema = z.object({
42
+ searchRequest: z.string().describe("Natural language description of what to search for")
43
+ });
44
+ const sendMessageSchema = z.object({
45
+ message: z.string().describe("The message to send to the orchestrator")
46
+ });
47
+ const result = await generateText({
48
+ model: config.model,
49
+ system: getSystemPrompt(thoroughness),
50
+ prompt,
51
+ tools: {
52
+ codebase_search: tool({
53
+ description: CODEBASE_SEARCH_TOOL.description,
54
+ inputSchema: codebaseSearchSchema,
55
+ execute: async (params) => {
56
+ searchCount++;
57
+ const warpResult = await warpGrep.execute({
58
+ searchTerm: params.searchRequest,
59
+ repoRoot: config.repoRoot,
60
+ excludes: config.excludes,
61
+ includes: config.includes
62
+ });
63
+ if (warpResult.contexts) {
64
+ allContexts.push(...warpResult.contexts);
65
+ }
66
+ callbacks.onStep?.({
67
+ step: searchCount,
68
+ searchRequest: params.searchRequest,
69
+ contextsFound: warpResult.contexts?.length ?? 0,
70
+ isFinal: false
71
+ });
72
+ return formatResult(warpResult);
73
+ }
74
+ }),
75
+ send_message: tool({
76
+ description: SEND_MESSAGE_TOOL.description,
77
+ inputSchema: sendMessageSchema,
78
+ execute: async (params) => {
79
+ const subagentMsg = {
80
+ from: "explore",
81
+ content: params.message,
82
+ timestamp: Date.now()
83
+ };
84
+ const replyPromise = new Promise((resolve) => {
85
+ if (callbacks.onMessage) {
86
+ callbacks.onMessage(subagentMsg, (replyText) => {
87
+ resolve(replyText);
88
+ });
89
+ } else {
90
+ setTimeout(() => resolve(""), replyTimeout);
91
+ }
92
+ });
93
+ const reply = await Promise.race([
94
+ replyPromise,
95
+ new Promise(
96
+ (resolve) => setTimeout(() => resolve(""), replyTimeout)
97
+ )
98
+ ]);
99
+ if (reply) {
100
+ return `Response from orchestrator: ${reply}`;
101
+ }
102
+ return "No response. Continue with your best judgment.";
103
+ }
104
+ })
105
+ },
106
+ stopWhen: stepCountIs(getMaxTurns(config))
107
+ });
108
+ callbacks.onStep?.({
109
+ step: searchCount,
110
+ searchRequest: "",
111
+ contextsFound: allContexts.length,
112
+ isFinal: true
113
+ });
114
+ const uniqueContexts = deduplicateContexts(allContexts);
115
+ return {
116
+ success: true,
117
+ summary: result.text || "Exploration completed but no summary was generated.",
118
+ contexts: uniqueContexts,
119
+ searchCount,
120
+ durationMs: Date.now() - startTime
121
+ };
122
+ } catch (error) {
123
+ return {
124
+ success: false,
125
+ summary: "",
126
+ contexts: deduplicateContexts(allContexts),
127
+ searchCount,
128
+ durationMs: Date.now() - startTime,
129
+ error: error instanceof Error ? error.message : String(error)
130
+ };
131
+ }
132
+ })();
133
+ if (timeoutPromise) {
134
+ try {
135
+ return await Promise.race([runPromise, timeoutPromise]);
136
+ } catch (error) {
137
+ return {
138
+ success: false,
139
+ summary: "",
140
+ contexts: deduplicateContexts(allContexts),
141
+ searchCount,
142
+ durationMs: Date.now() - startTime,
143
+ error: error instanceof Error ? error.message : String(error)
144
+ };
145
+ }
146
+ }
147
+ return runPromise;
148
+ }
149
+ const exploreToolSchema = z.object({
150
+ searchRequest: z.string().describe("What to explore in the codebase. Be specific about what you want to understand.")
151
+ });
152
+ const exploreTool = tool({
153
+ description: "Explore a codebase to answer questions about code structure, find implementations, trace call chains, and understand architecture. Returns a summary of findings. Use this for broad exploration rather than pinpoint keyword searches.",
154
+ inputSchema: exploreToolSchema,
155
+ execute: async (params) => {
156
+ const result = await runExplore(params.searchRequest);
157
+ return {
158
+ success: result.success,
159
+ summary: result.summary,
160
+ searchCount: result.searchCount,
161
+ error: result.error
162
+ };
163
+ }
164
+ });
165
+ return {
166
+ /** Vercel AI SDK tool for use as a tool in parent agents */
167
+ tool: exploreTool,
168
+ /** Run exploration with messaging support */
169
+ run(prompt) {
170
+ const messageHandlers = [];
171
+ const stepHandlers = [];
172
+ let resultPromise = null;
173
+ const session = {
174
+ on(event, handler) {
175
+ if (event === "message") messageHandlers.push(handler);
176
+ if (event === "step") stepHandlers.push(handler);
177
+ return session;
178
+ },
179
+ send(_text) {
180
+ },
181
+ get result() {
182
+ if (!resultPromise) {
183
+ resultPromise = runExplore(prompt, {
184
+ onStep: (step) => {
185
+ for (const handler of stepHandlers) handler(step);
186
+ },
187
+ onMessage: (msg, reply) => {
188
+ if (messageHandlers.length > 0) {
189
+ for (const handler of messageHandlers) handler(msg, reply);
190
+ } else {
191
+ reply("");
192
+ }
193
+ }
194
+ });
195
+ }
196
+ return resultPromise;
197
+ }
198
+ };
199
+ return session;
200
+ },
201
+ /** Stream exploration events as an async generator */
202
+ async *stream(prompt) {
203
+ const events = [];
204
+ let resolveNext = null;
205
+ let done = false;
206
+ const resultPromise = runExplore(prompt, {
207
+ onStep: (step) => {
208
+ events.push({
209
+ type: "step",
210
+ step: step.step,
211
+ searchRequest: step.searchRequest,
212
+ contextsFound: step.contextsFound,
213
+ isFinal: step.isFinal
214
+ });
215
+ resolveNext?.();
216
+ },
217
+ onMessage: (msg, reply) => {
218
+ events.push({
219
+ type: "message",
220
+ from: msg.from,
221
+ content: msg.content,
222
+ timestamp: msg.timestamp
223
+ });
224
+ resolveNext?.();
225
+ reply("Continue with your best judgment.");
226
+ }
227
+ });
228
+ while (!done) {
229
+ if (events.length > 0) {
230
+ yield events.shift();
231
+ } else {
232
+ const raceResult = await Promise.race([
233
+ resultPromise.then((r) => ({ type: "done", result: r })),
234
+ new Promise((resolve) => {
235
+ resolveNext = () => resolve({ type: "event" });
236
+ })
237
+ ]);
238
+ if (raceResult.type === "done") {
239
+ while (events.length > 0) {
240
+ yield events.shift();
241
+ }
242
+ done = true;
243
+ return raceResult.result;
244
+ }
245
+ }
246
+ }
247
+ return await resultPromise;
248
+ }
249
+ };
250
+ }
251
+ function deduplicateContexts(contexts) {
252
+ const map = /* @__PURE__ */ new Map();
253
+ for (const ctx of contexts) {
254
+ const existing = map.get(ctx.file);
255
+ if (!existing || ctx.content.length > existing.content.length) {
256
+ map.set(ctx.file, ctx);
257
+ }
258
+ }
259
+ return Array.from(map.values());
260
+ }
261
+
262
+ export {
263
+ createExploreSubagent
264
+ };
265
+ //# sourceMappingURL=chunk-GQX4PKXZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../subagents/vercel.ts"],"sourcesContent":["/**\n * Vercel AI SDK adapter for Explore subagent\n */\n\nimport { tool, generateText, stepCountIs } from 'ai';\nimport type { LanguageModel } from 'ai';\nimport { z } from 'zod';\nimport { WarpGrepClient } from '../tools/warp_grep/client.js';\nimport { formatResult } from '../tools/warp_grep/client.js';\nimport type { WarpGrepContext } from '../tools/warp_grep/types.js';\nimport { getSystemPrompt, CODEBASE_SEARCH_TOOL, SEND_MESSAGE_TOOL } from './prompts.js';\nimport type {\n ExploreSubagentConfig,\n ExploreResult,\n ExploreStep,\n ExploreSession,\n ExploreEvent,\n SubagentMessage,\n MessageHandler,\n StepHandler,\n} from './types.js';\n\n/** Config for Vercel AI SDK Explore subagent */\nexport interface VercelExploreConfig extends ExploreSubagentConfig {\n /** Vercel AI SDK model instance */\n model: LanguageModel;\n}\n\nconst DEFAULT_MAX_TURNS: Record<string, number> = {\n quick: 3,\n medium: 6,\n thorough: 12,\n};\n\nfunction getMaxTurns(config: ExploreSubagentConfig): number {\n return config.maxTurns ?? DEFAULT_MAX_TURNS[config.thoroughness ?? 'medium'] ?? 6;\n}\n\n/**\n * Create an Explore subagent using Vercel AI SDK\n */\nexport function createExploreSubagent(config: VercelExploreConfig) {\n if (!config.repoRoot) {\n throw new Error('repoRoot is required for Explore subagent');\n }\n\n const warpGrep = new WarpGrepClient({\n morphApiKey: config.morphApiKey,\n });\n\n const thoroughness = config.thoroughness ?? 'medium';\n const replyTimeout = config.replyTimeout ?? 30_000;\n\n /** Run the agent loop and collect results */\n async function runExplore(\n prompt: string,\n callbacks: {\n onStep?: StepHandler;\n onMessage?: MessageHandler;\n } = {},\n ): Promise<ExploreResult> {\n const startTime = Date.now();\n const allContexts: WarpGrepContext[] = [];\n let searchCount = 0;\n\n const timeoutMs = config.timeout;\n const timeoutPromise = timeoutMs\n ? new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Exploration timed out after ${timeoutMs}ms`)), timeoutMs),\n )\n : null;\n\n const runPromise = (async (): Promise<ExploreResult> => {\n try {\n const codebaseSearchSchema = z.object({\n searchRequest: z.string().describe('Natural language description of what to search for'),\n });\n\n const sendMessageSchema = z.object({\n message: z.string().describe('The message to send to the orchestrator'),\n });\n\n const result = await generateText({\n model: config.model,\n system: getSystemPrompt(thoroughness),\n prompt,\n tools: {\n codebase_search: tool({\n description: CODEBASE_SEARCH_TOOL.description,\n inputSchema: codebaseSearchSchema,\n execute: async (params: z.infer<typeof codebaseSearchSchema>) => {\n searchCount++;\n const warpResult = await warpGrep.execute({\n searchTerm: params.searchRequest,\n repoRoot: config.repoRoot,\n excludes: config.excludes,\n includes: config.includes,\n });\n\n if (warpResult.contexts) {\n allContexts.push(...warpResult.contexts);\n }\n\n callbacks.onStep?.({\n step: searchCount,\n searchRequest: params.searchRequest,\n contextsFound: warpResult.contexts?.length ?? 0,\n isFinal: false,\n });\n\n return formatResult(warpResult);\n },\n }),\n send_message: tool({\n description: SEND_MESSAGE_TOOL.description,\n inputSchema: sendMessageSchema,\n execute: async (params: z.infer<typeof sendMessageSchema>) => {\n const subagentMsg: SubagentMessage = {\n from: 'explore',\n content: params.message,\n timestamp: Date.now(),\n };\n\n // Create a promise that waits for the host's reply\n const replyPromise = new Promise<string>((resolve) => {\n // Emit the message to the host via callback\n if (callbacks.onMessage) {\n callbacks.onMessage(subagentMsg, (replyText: string) => {\n resolve(replyText);\n });\n } else {\n // No handler registered, auto-resolve after timeout\n setTimeout(() => resolve(''), replyTimeout);\n }\n });\n\n // Wait for reply with timeout\n const reply = await Promise.race([\n replyPromise,\n new Promise<string>((resolve) =>\n setTimeout(() => resolve(''), replyTimeout),\n ),\n ]);\n\n if (reply) {\n return `Response from orchestrator: ${reply}`;\n }\n return 'No response. Continue with your best judgment.';\n },\n }),\n },\n stopWhen: stepCountIs(getMaxTurns(config)),\n });\n\n // Emit final step\n callbacks.onStep?.({\n step: searchCount,\n searchRequest: '',\n contextsFound: allContexts.length,\n isFinal: true,\n });\n\n // Deduplicate contexts by file path\n const uniqueContexts = deduplicateContexts(allContexts);\n\n return {\n success: true,\n summary: result.text || 'Exploration completed but no summary was generated.',\n contexts: uniqueContexts,\n searchCount,\n durationMs: Date.now() - startTime,\n };\n } catch (error) {\n return {\n success: false,\n summary: '',\n contexts: deduplicateContexts(allContexts),\n searchCount,\n durationMs: Date.now() - startTime,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n })();\n\n if (timeoutPromise) {\n try {\n return await Promise.race([runPromise, timeoutPromise]);\n } catch (error) {\n return {\n success: false,\n summary: '',\n contexts: deduplicateContexts(allContexts),\n searchCount,\n durationMs: Date.now() - startTime,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return runPromise;\n }\n\n const exploreToolSchema = z.object({\n searchRequest: z\n .string()\n .describe('What to explore in the codebase. Be specific about what you want to understand.'),\n });\n\n /** The Vercel AI tool for use in parent agents */\n const exploreTool = tool({\n description:\n 'Explore a codebase to answer questions about code structure, find implementations, trace call chains, and understand architecture. Returns a summary of findings. Use this for broad exploration rather than pinpoint keyword searches.',\n inputSchema: exploreToolSchema,\n execute: async (params: z.infer<typeof exploreToolSchema>) => {\n const result = await runExplore(params.searchRequest);\n return {\n success: result.success,\n summary: result.summary,\n searchCount: result.searchCount,\n error: result.error,\n };\n },\n });\n\n return {\n /** Vercel AI SDK tool for use as a tool in parent agents */\n tool: exploreTool,\n\n /** Run exploration with messaging support */\n run(prompt: string): ExploreSession {\n const messageHandlers: MessageHandler[] = [];\n const stepHandlers: StepHandler[] = [];\n\n // Start the run lazily (after handlers are attached)\n let resultPromise: Promise<ExploreResult> | null = null;\n\n const session: ExploreSession = {\n on(event: string, handler: any) {\n if (event === 'message') messageHandlers.push(handler);\n if (event === 'step') stepHandlers.push(handler);\n return session;\n },\n send(_text: string) {\n // Convenience method — pause-and-ask flow uses the reply callback\n },\n get result() {\n if (!resultPromise) {\n resultPromise = runExplore(prompt, {\n onStep: (step) => {\n for (const handler of stepHandlers) handler(step);\n },\n onMessage: (msg, reply) => {\n if (messageHandlers.length > 0) {\n for (const handler of messageHandlers) handler(msg, reply);\n } else {\n // No handlers, auto-reply\n reply('');\n }\n },\n });\n }\n return resultPromise;\n },\n };\n\n return session;\n },\n\n /** Stream exploration events as an async generator */\n async *stream(prompt: string): AsyncGenerator<ExploreEvent, ExploreResult, undefined> {\n const events: ExploreEvent[] = [];\n let resolveNext: (() => void) | null = null;\n let done = false;\n\n const resultPromise = runExplore(prompt, {\n onStep: (step) => {\n events.push({\n type: 'step',\n step: step.step,\n searchRequest: step.searchRequest,\n contextsFound: step.contextsFound,\n isFinal: step.isFinal,\n });\n resolveNext?.();\n },\n onMessage: (msg, reply) => {\n events.push({\n type: 'message',\n from: msg.from,\n content: msg.content,\n timestamp: msg.timestamp,\n });\n resolveNext?.();\n // Auto-reply in streaming mode\n reply('Continue with your best judgment.');\n },\n });\n\n // Yield events as they come in\n while (!done) {\n if (events.length > 0) {\n yield events.shift()!;\n } else {\n // Check if the result is already done\n const raceResult = await Promise.race([\n resultPromise.then((r) => ({ type: 'done' as const, result: r })),\n new Promise<{ type: 'event' }>((resolve) => {\n resolveNext = () => resolve({ type: 'event' });\n }),\n ]);\n\n if (raceResult.type === 'done') {\n // Drain remaining events\n while (events.length > 0) {\n yield events.shift()!;\n }\n done = true;\n return raceResult.result;\n }\n }\n }\n\n return await resultPromise;\n },\n };\n}\n\n/** Deduplicate contexts, keeping the latest version of each file */\nfunction deduplicateContexts(contexts: WarpGrepContext[]): WarpGrepContext[] {\n const map = new Map<string, WarpGrepContext>();\n for (const ctx of contexts) {\n const existing = map.get(ctx.file);\n if (!existing || ctx.content.length > existing.content.length) {\n map.set(ctx.file, ctx);\n }\n }\n return Array.from(map.values());\n}\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
+ import {
2
+ executeCodebaseSearch
3
+ } from "./chunk-EEBGEMOO.js";
1
4
  import {
2
5
  CODEBASE_SEARCH_DESCRIPTION,
3
6
  CODEBASE_SEARCH_SYSTEM_PROMPT
4
7
  } from "./chunk-YQMPVJ2L.js";
5
- import {
6
- executeCodebaseSearch
7
- } from "./chunk-4546AOKY.js";
8
8
 
9
9
  // tools/codebase_search/anthropic.ts
10
10
  function createCodebaseSearchTool(config) {
@@ -80,4 +80,4 @@ function formatResult(result) {
80
80
  export {
81
81
  createCodebaseSearchTool
82
82
  };
83
- //# sourceMappingURL=chunk-SJKGUXNG.js.map
83
+ //# sourceMappingURL=chunk-MHNCFELG.js.map
@@ -112,4 +112,4 @@ export {
112
112
  FastApplyClient,
113
113
  executeEditFile
114
114
  };
115
- //# sourceMappingURL=chunk-3GEXJ6WJ.js.map
115
+ //# sourceMappingURL=chunk-MTD2JOO7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ProfilesClient
3
- } from "./chunk-Y4QRWCMI.js";
3
+ } from "./chunk-7RCHQN7F.js";
4
4
  import {
5
5
  buildEmbedCode,
6
6
  buildLiveIframe,
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  fetchWithRetry,
12
12
  withTimeout
13
- } from "./chunk-JTBQIPLB.js";
13
+ } from "./chunk-B55ZEX4M.js";
14
14
 
15
15
  // tools/browser/core.ts
16
16
  var DEFAULT_CONFIG = {
@@ -609,4 +609,4 @@ export {
609
609
  getWebp,
610
610
  checkHealth
611
611
  };
612
- //# sourceMappingURL=chunk-ODYZXYFX.js.map
612
+ //# sourceMappingURL=chunk-NEVPVOTT.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-2HMEZZKK.js";
5
5
  import {
6
6
  executeBrowserTask
7
- } from "./chunk-ODYZXYFX.js";
7
+ } from "./chunk-NEVPVOTT.js";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-PZ5AY32C.js";
@@ -93,4 +93,4 @@ export {
93
93
  createBrowserTool,
94
94
  openai_exports
95
95
  };
96
- //# sourceMappingURL=chunk-JNMYWTLZ.js.map
96
+ //# sourceMappingURL=chunk-NGHLDI64.js.map
@@ -1,10 +1,10 @@
1
- import {
2
- executeEditFile
3
- } from "./chunk-3GEXJ6WJ.js";
4
1
  import {
5
2
  EDIT_FILE_SYSTEM_PROMPT,
6
3
  EDIT_FILE_TOOL_DESCRIPTION
7
4
  } from "./chunk-63WE2C5R.js";
5
+ import {
6
+ executeEditFile
7
+ } from "./chunk-MTD2JOO7.js";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-PZ5AY32C.js";
@@ -79,4 +79,4 @@ export {
79
79
  getSystemPrompt,
80
80
  anthropic_exports
81
81
  };
82
- //# sourceMappingURL=chunk-7JA4SBAA.js.map
82
+ //# sourceMappingURL=chunk-OICUUS5Y.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2HMEZZKK.js";
4
4
  import {
5
5
  executeBrowserTask
6
- } from "./chunk-ODYZXYFX.js";
6
+ } from "./chunk-NEVPVOTT.js";
7
7
  import {
8
8
  __export
9
9
  } from "./chunk-PZ5AY32C.js";
@@ -54,4 +54,4 @@ export {
54
54
  browserTool,
55
55
  vercel_exports
56
56
  };
57
- //# sourceMappingURL=chunk-3OG25CSW.js.map
57
+ //# sourceMappingURL=chunk-TCXBKB7P.js.map
@@ -8,19 +8,19 @@ import {
8
8
  toolListDirectory,
9
9
  toolRead
10
10
  } from "./chunk-YLT4PSXT.js";
11
- import {
12
- AGENT_CONFIG,
13
- DEFAULT_MODEL
14
- } from "./chunk-DKODF3YG.js";
15
11
  import {
16
12
  formatAgentToolOutput
17
13
  } from "./chunk-QRXG5CAZ.js";
18
14
  import {
19
15
  LLMResponseParser
20
16
  } from "./chunk-VCKJ22DX.js";
17
+ import {
18
+ AGENT_CONFIG,
19
+ DEFAULT_MODEL
20
+ } from "./chunk-DKODF3YG.js";
21
21
  import {
22
22
  SDK_VERSION
23
- } from "./chunk-5UDCVVZE.js";
23
+ } from "./chunk-6W3X76KE.js";
24
24
 
25
25
  // tools/warp_grep/agent/runner.ts
26
26
  import OpenAI from "openai";
@@ -31,9 +31,11 @@ async function callModel(messages, model, options = {}) {
31
31
  const baseUrl = options.morphApiUrl || DEFAULT_API_URL;
32
32
  const apiKey = options.morphApiKey || process.env.MORPH_API_KEY || "";
33
33
  const timeoutMs = options.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
34
+ const parsedUrl = new URL(baseUrl);
35
+ const baseURL = parsedUrl.pathname === "/" ? `${baseUrl}/v1` : baseUrl;
34
36
  const client = new OpenAI({
35
37
  apiKey,
36
- baseURL: `${baseUrl}/v1`,
38
+ baseURL,
37
39
  maxRetries: options.retryConfig?.maxRetries,
38
40
  timeout: timeoutMs,
39
41
  defaultHeaders: { "X-Morph-SDK-Version": SDK_VERSION }
@@ -401,4 +403,4 @@ export {
401
403
  runWarpGrep,
402
404
  runWarpGrepStreaming
403
405
  };
404
- //# sourceMappingURL=chunk-2NVSFPMB.js.map
406
+ //# sourceMappingURL=chunk-ULMSWACH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tools/warp_grep/agent/runner.ts"],"sourcesContent":["import { AGENT_CONFIG, DEFAULT_MODEL } from './config.js';\nimport type { AgentRunResult, ChatMessage, SessionConfig, AgentFinish, WarpGrepExecutionMetrics, WarpGrepTurnMetrics, WarpGrepStep } 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 type { RetryConfig } from '../../utils/resilience.js';\nimport { formatAgentToolOutput } from './formatter.js';\nimport { formatTurnMessage, calculateContextBudget, buildInitialState, enforceContextLimit } from './helpers.js';\nimport OpenAI from 'openai';\nimport { SDK_VERSION } from '../../../version.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 timeout?: number;\n}\n\nasync function callModel(\n messages: ChatMessage[],\n model: string,\n options: CallModelOptions = {}\n): Promise<string> {\n const baseUrl = options.morphApiUrl || DEFAULT_API_URL;\n const apiKey = options.morphApiKey || process.env.MORPH_API_KEY || '';\n const timeoutMs = options.timeout ?? AGENT_CONFIG.TIMEOUT_MS;\n\n // If the URL has a custom path (e.g. /api/gateway), use it as-is as the\n // OpenAI-compatible baseURL. Otherwise append /v1 for the standard Morph API.\n const parsedUrl = new URL(baseUrl);\n const baseURL = parsedUrl.pathname === '/' ? `${baseUrl}/v1` : baseUrl;\n\n const client = new OpenAI({\n apiKey,\n baseURL,\n maxRetries: options.retryConfig?.maxRetries,\n timeout: timeoutMs,\n defaultHeaders: { 'X-Morph-SDK-Version': SDK_VERSION },\n });\n\n const MAX_EMPTY_RETRIES = 1;\n\n for (let attempt = 0; attempt <= MAX_EMPTY_RETRIES; attempt++) {\n let data;\n try {\n data = await client.chat.completions.create({\n model,\n temperature: 0.0,\n max_tokens: 1024,\n messages,\n });\n } catch (error) {\n if (error instanceof OpenAI.APIError && error.status === 404) {\n const defaultMsg =\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 const errorText = error.message?.trim();\n throw new Error(errorText || defaultMsg);\n }\n throw error;\n }\n\n const choice = data?.choices?.[0];\n const content = choice?.message?.content;\n\n if (content && typeof content === 'string') {\n return content;\n }\n\n // Last attempt — throw with diagnostics\n if (attempt === MAX_EMPTY_RETRIES) {\n const finishReason = choice?.finish_reason ?? 'unknown';\n const hasToolCalls = Array.isArray(choice?.message?.tool_calls) && choice.message.tool_calls.length > 0;\n const choicesLen = data?.choices?.length ?? 0;\n const contentType = content === null ? 'null' : content === undefined ? 'undefined' : typeof content;\n\n throw new Error(\n `Invalid response from model: content=${contentType}, finish_reason=${finishReason}, ` +\n `has_tool_calls=${hasToolCalls}, choices_length=${choicesLen}`\n );\n }\n\n // Retry — brief pause before next attempt\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n\n // Unreachable, but satisfies TypeScript\n throw new Error('Invalid response from model');\n}\n\nexport async function runWarpGrep(config: SessionConfig & { provider: WarpGrepProvider }): Promise<AgentRunResult> {\n const totalStart = Date.now();\n const timeoutMs = config.timeout ?? AGENT_CONFIG.TIMEOUT_MS;\n const timings: Partial<WarpGrepExecutionMetrics> = { turns: [], timeout_ms: timeoutMs };\n\n const repoRoot = path.resolve(config.repoRoot || process.cwd());\n const model = config.model || DEFAULT_MODEL;\n const messages: ChatMessage[] = [];\n\n const maxTurns = AGENT_CONFIG.MAX_TURNS;\n\n const initialStateStart = Date.now();\n const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });\n timings.initial_state_ms = Date.now() - initialStateStart;\n\n messages.push({ role: 'user', content: initialState });\n\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 const turnMetrics: WarpGrepTurnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };\n\n // Enforce hard context limit before calling model\n enforceContextLimit(messages);\n\n // call model\n const modelCallStart = Date.now();\n const assistantContent = await callModel(messages, model, {\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n timeout: timeoutMs,\n }).catch((e: unknown) => {\n const errMsg = e instanceof Error ? e.message : String(e);\n console.error(`[warp_grep] Morph API call failed on turn ${turn}:`, errMsg);\n errors.push({ message: errMsg });\n return '';\n });\n turnMetrics.morph_api_ms = Date.now() - modelCallStart;\n\n if (!assistantContent) {\n console.error(`[warp_grep] Empty response from Morph API on turn ${turn}. Errors so far:`, errors);\n timings.turns!.push(turnMetrics);\n break;\n }\n messages.push({ role: 'assistant', content: assistantContent });\n\n // parse tool calls\n const toolCalls = parser.parse(assistantContent);\n if (toolCalls.length === 0) {\n console.error(`[warp_grep] No tool calls parsed on turn ${turn}. Assistant content (first 500 chars):`, assistantContent.slice(0, 500));\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 timings.turns!.push(turnMetrics);\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; context_lines?: number; case_sensitive?: boolean };\n allPromises.push(\n toolGrep(provider, args).then(\n ({ output }) => formatAgentToolOutput('grep', args, output),\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),\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),\n err => formatAgentToolOutput('read', args, String(err), { isError: true })\n )\n );\n }\n\n const toolExecStart = Date.now();\n const allResults = await Promise.all(allPromises);\n turnMetrics.local_tools_ms = Date.now() - toolExecStart;\n\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 timings.turns!.push(turnMetrics);\n\n if (finishCalls.length) {\n const fc = finishCalls[0];\n const files = ((fc.arguments as any)?.files ?? []) as AgentFinish['files'];\n const textResult = (fc.arguments as any)?.textResult as string | undefined;\n finishMeta = { files };\n terminationReason = 'completed';\n\n // Text-only finish: model returned a text response instead of file references\n if (files.length === 0) {\n const payload = textResult || 'No relevant code found.';\n timings.turns!.push(turnMetrics);\n timings.total_ms = Date.now() - totalStart;\n return {\n terminationReason: 'completed',\n messages,\n finish: { payload, metadata: finishMeta },\n timings: timings as WarpGrepExecutionMetrics,\n };\n }\n\n break;\n }\n }\n\n if (terminationReason !== 'completed' || !finishMeta) {\n timings.total_ms = Date.now() - totalStart;\n return { terminationReason, messages, errors, timings: timings as WarpGrepExecutionMetrics };\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 === '*' ? '*'\n : Array.isArray(f.lines) ? f.lines.map(([s, e]) => `${s}-${e}`).join(', ')\n : '*';\n parts.push(`- ${f.path}: ${ranges}`);\n }\n const payload = parts.join('\\n');\n\n // Resolve file contents for returned ranges\n const finishResolutionStart = Date.now();\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 return rr.lines.map(l => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n } catch (err) {\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 timings.finish_resolution_ms = Date.now() - finishResolutionStart;\n\n if (fileReadErrors.length > 0) {\n errors.push(...fileReadErrors.map(e => ({ message: `File read error: ${e.path} - ${e.error}` })));\n }\n\n timings.total_ms = Date.now() - totalStart;\n return {\n terminationReason: 'completed',\n messages,\n finish: { payload, metadata: finishMeta, resolved },\n timings: timings as WarpGrepExecutionMetrics,\n };\n}\n\n/**\n * Streaming version of runWarpGrep that yields step information after each turn.\n * Yields WarpGrepStep with tool calls for each turn, then returns the final AgentRunResult.\n */\nexport async function* runWarpGrepStreaming(\n config: SessionConfig & { provider: WarpGrepProvider }\n): AsyncGenerator<WarpGrepStep, AgentRunResult, undefined> {\n const totalStart = Date.now();\n const timeoutMs = config.timeout ?? AGENT_CONFIG.TIMEOUT_MS;\n const timings: Partial<WarpGrepExecutionMetrics> = { turns: [], timeout_ms: timeoutMs };\n\n const repoRoot = path.resolve(config.repoRoot || process.cwd());\n const model = config.model || DEFAULT_MODEL;\n const messages: ChatMessage[] = [];\n\n const maxTurns = AGENT_CONFIG.MAX_TURNS;\n\n const initialStateStart = Date.now();\n const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });\n timings.initial_state_ms = Date.now() - initialStateStart;\n\n messages.push({ role: 'user', content: initialState });\n\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 const turnMetrics: WarpGrepTurnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };\n\n // Enforce hard context limit before calling model\n enforceContextLimit(messages);\n\n // call model\n const modelCallStart = Date.now();\n const assistantContent = await callModel(messages, model, {\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n timeout: timeoutMs,\n }).catch((e: unknown) => {\n const errMsg = e instanceof Error ? e.message : String(e);\n console.error(`[warp_grep:stream] Morph API call failed on turn ${turn}:`, errMsg);\n errors.push({ message: errMsg });\n return '';\n });\n turnMetrics.morph_api_ms = Date.now() - modelCallStart;\n\n if (!assistantContent) {\n console.error(`[warp_grep:stream] Empty response from Morph API on turn ${turn}. Errors so far:`, errors);\n timings.turns!.push(turnMetrics);\n break;\n }\n messages.push({ role: 'assistant', content: assistantContent });\n\n // parse tool calls\n const toolCalls = parser.parse(assistantContent);\n if (toolCalls.length === 0) {\n console.error(`[warp_grep:stream] No tool calls parsed on turn ${turn}. Assistant content (first 500 chars):`, assistantContent.slice(0, 500));\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 timings.turns!.push(turnMetrics);\n break;\n }\n\n // Yield step with tool calls (before execution)\n yield {\n turn,\n toolCalls: toolCalls.map(c => ({\n name: c.name,\n arguments: c.arguments ?? {}\n }))\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; context_lines?: number; case_sensitive?: boolean };\n allPromises.push(\n toolGrep(provider, args).then(\n ({ output }) => formatAgentToolOutput('grep', args, output),\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),\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),\n err => formatAgentToolOutput('read', args, String(err), { isError: true })\n )\n );\n }\n\n const toolExecStart = Date.now();\n const allResults = await Promise.all(allPromises);\n turnMetrics.local_tools_ms = Date.now() - toolExecStart;\n\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 timings.turns!.push(turnMetrics);\n\n if (finishCalls.length) {\n const fc = finishCalls[0];\n const files = ((fc.arguments as any)?.files ?? []) as AgentFinish['files'];\n const textResult = (fc.arguments as any)?.textResult as string | undefined;\n finishMeta = { files };\n terminationReason = 'completed';\n\n // Text-only finish\n if (files.length === 0) {\n const payload = textResult || 'No relevant code found.';\n timings.total_ms = Date.now() - totalStart;\n return {\n terminationReason: 'completed',\n messages,\n finish: { payload, metadata: finishMeta },\n timings: timings as WarpGrepExecutionMetrics,\n };\n }\n\n break;\n }\n }\n\n if (terminationReason !== 'completed' || !finishMeta) {\n timings.total_ms = Date.now() - totalStart;\n return { terminationReason, messages, errors, timings: timings as WarpGrepExecutionMetrics };\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 === '*' ? '*'\n : Array.isArray(f.lines) ? f.lines.map(([s, e]) => `${s}-${e}`).join(', ')\n : '*';\n parts.push(`- ${f.path}: ${ranges}`);\n }\n const payload = parts.join('\\n');\n\n // Resolve file contents for returned ranges\n const finishResolutionStart = Date.now();\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 return rr.lines.map(l => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n } catch (err) {\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 timings.finish_resolution_ms = Date.now() - finishResolutionStart;\n\n if (fileReadErrors.length > 0) {\n errors.push(...fileReadErrors.map(e => ({ message: `File read error: ${e.path} - ${e.error}` })));\n }\n\n timings.total_ms = Date.now() - totalStart;\n return {\n terminationReason: 'completed',\n messages,\n finish: { payload, metadata: finishMeta, resolved },\n timings: timings as WarpGrepExecutionMetrics,\n };\n}\n"],"mappings":"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","names":["payload"]}
@@ -1,9 +1,9 @@
1
+ import {
2
+ executeCodebaseSearch
3
+ } from "./chunk-EEBGEMOO.js";
1
4
  import {
2
5
  CODEBASE_SEARCH_DESCRIPTION
3
6
  } from "./chunk-YQMPVJ2L.js";
4
- import {
5
- executeCodebaseSearch
6
- } from "./chunk-4546AOKY.js";
7
7
 
8
8
  // tools/codebase_search/vercel.ts
9
9
  import { tool } from "ai";
@@ -55,4 +55,4 @@ export {
55
55
  getSystemPrompt,
56
56
  vercel_default
57
57
  };
58
- //# sourceMappingURL=chunk-K632JRRH.js.map
58
+ //# sourceMappingURL=chunk-XIEU3N3R.js.map
@@ -1,45 +1,51 @@
1
- import {
2
- createGitHubSearchTool as createGitHubSearchTool2,
3
- createWarpGrepTool as createWarpGrepTool2
4
- } from "./chunk-AVIE6SRT.js";
5
1
  import {
6
2
  createGitHubSearchTool,
7
3
  createWarpGrepTool
8
- } from "./chunk-LQIGX3MX.js";
4
+ } from "./chunk-6WSZDCGP.js";
9
5
  import {
10
6
  createGitHubSearchTool as createGitHubSearchTool3,
11
7
  createWarpGrepTool as createWarpGrepTool3
12
- } from "./chunk-4YEGLW4W.js";
8
+ } from "./chunk-EHRKLQ62.js";
13
9
  import {
14
- WarpGrepClient
15
- } from "./chunk-L37HJNBY.js";
16
- import {
17
- createCodebaseSearchTool
18
- } from "./chunk-HRJENFMZ.js";
10
+ createGitHubSearchTool as createGitHubSearchTool2,
11
+ createWarpGrepTool as createWarpGrepTool2
12
+ } from "./chunk-3J74OXN6.js";
19
13
  import {
20
14
  createCodebaseSearchTool as createCodebaseSearchTool3
21
- } from "./chunk-K632JRRH.js";
15
+ } from "./chunk-XIEU3N3R.js";
22
16
  import {
23
17
  createCodebaseSearchTool as createCodebaseSearchTool2
24
- } from "./chunk-SJKGUXNG.js";
18
+ } from "./chunk-MHNCFELG.js";
19
+ import {
20
+ createCodebaseSearchTool
21
+ } from "./chunk-4J5UW34J.js";
25
22
  import {
26
23
  CodebaseSearchClient
27
- } from "./chunk-4546AOKY.js";
24
+ } from "./chunk-EEBGEMOO.js";
28
25
  import {
29
26
  createEditFileTool
30
- } from "./chunk-OPVFUVNJ.js";
27
+ } from "./chunk-ZYN64ZVG.js";
31
28
  import {
32
29
  createEditFileTool as createEditFileTool3
33
- } from "./chunk-6EQ5IEK6.js";
30
+ } from "./chunk-73ZLTWKF.js";
34
31
  import {
35
32
  createEditFileTool as createEditFileTool2
36
- } from "./chunk-7JA4SBAA.js";
33
+ } from "./chunk-OICUUS5Y.js";
37
34
  import {
38
35
  FastApplyClient
39
- } from "./chunk-3GEXJ6WJ.js";
36
+ } from "./chunk-MTD2JOO7.js";
40
37
  import {
41
38
  BrowserClient
42
- } from "./chunk-ODYZXYFX.js";
39
+ } from "./chunk-NEVPVOTT.js";
40
+ import {
41
+ createExploreSubagent
42
+ } from "./chunk-3T5W2D2W.js";
43
+ import {
44
+ createExploreSubagent as createExploreSubagent2
45
+ } from "./chunk-GQX4PKXZ.js";
46
+ import {
47
+ WarpGrepClient
48
+ } from "./chunk-5CBMLTG5.js";
43
49
  import {
44
50
  CompactClient
45
51
  } from "./chunk-AGFVQOGJ.js";
@@ -48,7 +54,7 @@ import {
48
54
  GeminiRouter,
49
55
  OpenAIRouter,
50
56
  RawRouter
51
- } from "./chunk-RI2GNU2V.js";
57
+ } from "./chunk-DRAQDTSR.js";
52
58
  import {
53
59
  MorphGit
54
60
  } from "./chunk-LE66XCOI.js";
@@ -511,6 +517,22 @@ var AnthropicToolFactory = class {
511
517
  morphApiKey: this.config.apiKey
512
518
  });
513
519
  }
520
+ /**
521
+ * Create an Explore subagent that searches the codebase and returns summaries
522
+ *
523
+ * @param client - Anthropic SDK client instance
524
+ * @param model - Model name (e.g., 'claude-haiku-4-5-20251001')
525
+ * @param toolConfig - Subagent configuration (morphApiKey inherited from MorphClient)
526
+ * @returns Explore subagent with .tool, .run(), and .stream() methods
527
+ */
528
+ createExploreSubagent(client, model, toolConfig) {
529
+ return createExploreSubagent({
530
+ ...toolConfig,
531
+ client,
532
+ model,
533
+ morphApiKey: this.config.apiKey
534
+ });
535
+ }
514
536
  };
515
537
 
516
538
  // factories/vercel.ts
@@ -566,6 +588,20 @@ var VercelToolFactory = class {
566
588
  morphApiKey: this.config.apiKey
567
589
  });
568
590
  }
591
+ /**
592
+ * Create an Explore subagent that searches the codebase and returns summaries
593
+ *
594
+ * @param model - Vercel AI SDK model instance
595
+ * @param toolConfig - Subagent configuration (morphApiKey inherited from MorphClient)
596
+ * @returns Explore subagent with .tool, .run(), and .stream() methods
597
+ */
598
+ createExploreSubagent(model, toolConfig) {
599
+ return createExploreSubagent2({
600
+ ...toolConfig,
601
+ model,
602
+ morphApiKey: this.config.apiKey
603
+ });
604
+ }
569
605
  };
570
606
 
571
607
  // client.ts
@@ -694,4 +730,4 @@ export {
694
730
  VercelToolFactory,
695
731
  MorphClient
696
732
  };
697
- //# sourceMappingURL=chunk-D7E5WBMV.js.map
733
+ //# sourceMappingURL=chunk-XUDE6SOY.js.map