@morphllm/morphsdk 0.2.143 → 0.2.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YIETFYCL.js → chunk-4LWMPKSB.js} +71 -44
- package/dist/chunk-4LWMPKSB.js.map +1 -0
- package/dist/{chunk-HZOTLGJH.js → chunk-4Y2NM6JD.js} +42 -2
- package/dist/chunk-4Y2NM6JD.js.map +1 -0
- package/dist/{chunk-YTPYQAIO.js → chunk-5FCXLQJU.js} +3 -3
- package/dist/{chunk-KQ6QSAE7.js → chunk-6CFKWZK3.js} +3 -3
- package/dist/{chunk-NF2QWJDY.js → chunk-B3AKP3RA.js} +31 -2
- package/dist/chunk-B3AKP3RA.js.map +1 -0
- package/dist/{chunk-ALY5S4XC.js → chunk-BAF33L6C.js} +2 -2
- package/dist/{chunk-TRPJAKAS.js → chunk-BXRJYLRS.js} +2 -2
- package/dist/chunk-CMSHXALI.js +60 -0
- package/dist/chunk-CMSHXALI.js.map +1 -0
- package/dist/{chunk-X5IVORU2.js → chunk-EPIOAODF.js} +2 -2
- package/dist/{chunk-T53IMLYK.js → chunk-G23BI5CQ.js} +2 -2
- package/dist/{chunk-FZQZZP3R.js → chunk-GHPQYSSF.js} +2 -2
- package/dist/{chunk-7POOJWBR.js → chunk-GXCWKYGU.js} +2 -2
- package/dist/{chunk-PBOKDQR3.js → chunk-GXM3G7Z4.js} +3 -3
- package/dist/{chunk-OSQ2EMUP.js → chunk-HBIW2XV2.js} +2 -2
- package/dist/{chunk-FJVYE6ZX.js → chunk-HE7K2QNQ.js} +17 -17
- package/dist/{chunk-FIVYDIHX.js → chunk-HYRHI2UL.js} +1 -1
- package/dist/{chunk-DKODF3YG.js → chunk-I3J46TSB.js} +5 -4
- package/dist/chunk-I3J46TSB.js.map +1 -0
- package/dist/{chunk-F6JGAEK5.js → chunk-IRWHN55G.js} +1 -1
- package/dist/{chunk-QFCED636.js → chunk-JHYH3NEP.js} +2 -2
- package/dist/chunk-JHYH3NEP.js.map +1 -0
- package/dist/{chunk-YJG2KRXY.js → chunk-JMUAQQJU.js} +3 -3
- package/dist/{chunk-W27OOF55.js → chunk-JRBU4UNP.js} +2 -2
- package/dist/{chunk-DN3WS37U.js → chunk-KELRCMA6.js} +2 -2
- package/dist/{chunk-DN3WS37U.js.map → chunk-KELRCMA6.js.map} +1 -1
- package/dist/{chunk-TLPFEK5S.js → chunk-MRPASJBX.js} +2 -2
- package/dist/{chunk-RMBIT3I3.js → chunk-MTJ3PR4M.js} +2 -2
- package/dist/{chunk-VFGM343D.js → chunk-N7TTZIBK.js} +2 -2
- package/dist/chunk-OPEQQGST.js +396 -0
- package/dist/chunk-OPEQQGST.js.map +1 -0
- package/dist/{chunk-Z5APBTQP.js → chunk-PX7ODEML.js} +2 -2
- package/dist/{chunk-OOZZE5BQ.js → chunk-RZXS4ADX.js} +2 -2
- package/dist/{chunk-VBSO32I2.js → chunk-S54SPKX3.js} +3 -3
- package/dist/{chunk-ENLZ45ZZ.js → chunk-SUE4GYA2.js} +2 -2
- package/dist/{chunk-TXOUDREW.js → chunk-VRV5UYTN.js} +2 -2
- package/dist/{chunk-ZGJLA2O6.js → chunk-XL7R3XN5.js} +2 -2
- package/dist/client.cjs +427 -439
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +27 -28
- package/dist/edge.cjs +1 -1
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.js +4 -4
- package/dist/{finish-DBKuo8yj.d.ts → finish-Ddj1MPGt.d.ts} +1 -1
- package/dist/index.cjs +446 -439
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +30 -30
- package/dist/modelrouter/core.cjs +1 -1
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.js +3 -3
- package/dist/modelrouter/index.cjs +1 -1
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.js +3 -3
- package/dist/subagents/anthropic.cjs +422 -434
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +8 -9
- package/dist/subagents/vercel.cjs +422 -434
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +8 -9
- package/dist/tools/browser/anthropic.cjs +1 -1
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +5 -5
- package/dist/tools/browser/core.cjs +1 -1
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +4 -4
- package/dist/tools/browser/index.cjs +1 -1
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +7 -7
- package/dist/tools/browser/openai.cjs +1 -1
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +5 -5
- package/dist/tools/browser/profiles/core.cjs +1 -1
- package/dist/tools/browser/profiles/core.cjs.map +1 -1
- package/dist/tools/browser/profiles/core.js +3 -3
- package/dist/tools/browser/profiles/index.cjs +1 -1
- package/dist/tools/browser/profiles/index.cjs.map +1 -1
- package/dist/tools/browser/profiles/index.js +3 -3
- package/dist/tools/browser/vercel.cjs +1 -1
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.js +5 -5
- package/dist/tools/codebase_search/anthropic.cjs +1 -1
- package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
- package/dist/tools/codebase_search/anthropic.js +4 -4
- package/dist/tools/codebase_search/core.cjs +1 -1
- package/dist/tools/codebase_search/core.cjs.map +1 -1
- package/dist/tools/codebase_search/core.js +3 -3
- package/dist/tools/codebase_search/index.cjs +1 -1
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +6 -6
- package/dist/tools/codebase_search/openai.cjs +1 -1
- package/dist/tools/codebase_search/openai.cjs.map +1 -1
- package/dist/tools/codebase_search/openai.js +4 -4
- package/dist/tools/codebase_search/vercel.cjs +1 -1
- package/dist/tools/codebase_search/vercel.cjs.map +1 -1
- package/dist/tools/codebase_search/vercel.js +4 -4
- package/dist/tools/fastapply/anthropic.cjs +1 -1
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +4 -4
- package/dist/tools/fastapply/apply.cjs +1 -1
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +2 -2
- package/dist/tools/fastapply/core.cjs +1 -1
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +3 -3
- package/dist/tools/fastapply/index.cjs +1 -1
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +6 -6
- package/dist/tools/fastapply/openai.cjs +1 -1
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +4 -4
- package/dist/tools/fastapply/vercel.cjs +1 -1
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +4 -4
- package/dist/tools/index.cjs +1 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +6 -6
- package/dist/tools/utils/resilience.cjs +1 -1
- package/dist/tools/utils/resilience.cjs.map +1 -1
- package/dist/tools/utils/resilience.js +2 -2
- package/dist/tools/warp_grep/agent/config.cjs +4 -3
- package/dist/tools/warp_grep/agent/config.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/config.d.ts +2 -1
- package/dist/tools/warp_grep/agent/config.js +1 -1
- package/dist/tools/warp_grep/agent/parser.cjs +52 -121
- package/dist/tools/warp_grep/agent/parser.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/parser.d.ts +12 -5
- package/dist/tools/warp_grep/agent/parser.js +7 -3
- package/dist/tools/warp_grep/agent/runner.cjs +335 -416
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.d.ts +6 -3
- package/dist/tools/warp_grep/agent/runner.js +5 -6
- package/dist/tools/warp_grep/agent/types.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/types.d.ts +22 -3
- package/dist/tools/warp_grep/anthropic.cjs +423 -435
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +9 -10
- package/dist/tools/warp_grep/client.cjs +422 -434
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +7 -8
- package/dist/tools/warp_grep/gemini.cjs +423 -435
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +8 -9
- package/dist/tools/warp_grep/gemini.js.map +1 -1
- package/dist/tools/warp_grep/harness.cjs +164 -176
- package/dist/tools/warp_grep/harness.cjs.map +1 -1
- package/dist/tools/warp_grep/harness.d.ts +17 -38
- package/dist/tools/warp_grep/harness.js +15 -14
- package/dist/tools/warp_grep/harness.js.map +1 -1
- package/dist/tools/warp_grep/index.cjs +442 -435
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.d.ts +1 -1
- package/dist/tools/warp_grep/index.js +11 -11
- package/dist/tools/warp_grep/openai.cjs +423 -435
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +9 -10
- package/dist/tools/warp_grep/providers/local.cjs +43 -2
- package/dist/tools/warp_grep/providers/local.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/local.d.ts +5 -1
- package/dist/tools/warp_grep/providers/local.js +2 -2
- package/dist/tools/warp_grep/providers/remote.cjs +32 -2
- package/dist/tools/warp_grep/providers/remote.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/remote.d.ts +9 -1
- package/dist/tools/warp_grep/providers/remote.js +2 -2
- package/dist/tools/warp_grep/providers/types.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/types.d.ts +14 -1
- package/dist/tools/warp_grep/vercel.cjs +423 -435
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +9 -10
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-DKODF3YG.js.map +0 -1
- package/dist/chunk-HZOTLGJH.js.map +0 -1
- package/dist/chunk-NF2QWJDY.js.map +0 -1
- package/dist/chunk-QFCED636.js.map +0 -1
- package/dist/chunk-SSQYLUKI.js +0 -409
- package/dist/chunk-SSQYLUKI.js.map +0 -1
- package/dist/chunk-VCKJ22DX.js +0 -131
- package/dist/chunk-VCKJ22DX.js.map +0 -1
- package/dist/chunk-YIETFYCL.js.map +0 -1
- /package/dist/{chunk-YTPYQAIO.js.map → chunk-5FCXLQJU.js.map} +0 -0
- /package/dist/{chunk-KQ6QSAE7.js.map → chunk-6CFKWZK3.js.map} +0 -0
- /package/dist/{chunk-ALY5S4XC.js.map → chunk-BAF33L6C.js.map} +0 -0
- /package/dist/{chunk-TRPJAKAS.js.map → chunk-BXRJYLRS.js.map} +0 -0
- /package/dist/{chunk-X5IVORU2.js.map → chunk-EPIOAODF.js.map} +0 -0
- /package/dist/{chunk-T53IMLYK.js.map → chunk-G23BI5CQ.js.map} +0 -0
- /package/dist/{chunk-FZQZZP3R.js.map → chunk-GHPQYSSF.js.map} +0 -0
- /package/dist/{chunk-7POOJWBR.js.map → chunk-GXCWKYGU.js.map} +0 -0
- /package/dist/{chunk-PBOKDQR3.js.map → chunk-GXM3G7Z4.js.map} +0 -0
- /package/dist/{chunk-OSQ2EMUP.js.map → chunk-HBIW2XV2.js.map} +0 -0
- /package/dist/{chunk-FJVYE6ZX.js.map → chunk-HE7K2QNQ.js.map} +0 -0
- /package/dist/{chunk-FIVYDIHX.js.map → chunk-HYRHI2UL.js.map} +0 -0
- /package/dist/{chunk-F6JGAEK5.js.map → chunk-IRWHN55G.js.map} +0 -0
- /package/dist/{chunk-YJG2KRXY.js.map → chunk-JMUAQQJU.js.map} +0 -0
- /package/dist/{chunk-W27OOF55.js.map → chunk-JRBU4UNP.js.map} +0 -0
- /package/dist/{chunk-TLPFEK5S.js.map → chunk-MRPASJBX.js.map} +0 -0
- /package/dist/{chunk-RMBIT3I3.js.map → chunk-MTJ3PR4M.js.map} +0 -0
- /package/dist/{chunk-VFGM343D.js.map → chunk-N7TTZIBK.js.map} +0 -0
- /package/dist/{chunk-Z5APBTQP.js.map → chunk-PX7ODEML.js.map} +0 -0
- /package/dist/{chunk-OOZZE5BQ.js.map → chunk-RZXS4ADX.js.map} +0 -0
- /package/dist/{chunk-VBSO32I2.js.map → chunk-S54SPKX3.js.map} +0 -0
- /package/dist/{chunk-ENLZ45ZZ.js.map → chunk-SUE4GYA2.js.map} +0 -0
- /package/dist/{chunk-TXOUDREW.js.map → chunk-VRV5UYTN.js.map} +0 -0
- /package/dist/{chunk-ZGJLA2O6.js.map → chunk-XL7R3XN5.js.map} +0 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildInitialState,
|
|
3
|
+
calculateContextBudget,
|
|
4
|
+
enforceContextLimit,
|
|
5
|
+
formatTurnMessage,
|
|
6
|
+
readFinishFiles,
|
|
7
|
+
toolGlob,
|
|
8
|
+
toolGrep,
|
|
9
|
+
toolListDirectory,
|
|
10
|
+
toolRead
|
|
11
|
+
} from "./chunk-4LWMPKSB.js";
|
|
12
|
+
import {
|
|
13
|
+
extractPathFromCommand,
|
|
14
|
+
parseFinishFiles,
|
|
15
|
+
parseReadLines
|
|
16
|
+
} from "./chunk-CMSHXALI.js";
|
|
17
|
+
import {
|
|
18
|
+
AGENT_CONFIG,
|
|
19
|
+
DEFAULT_MODEL
|
|
20
|
+
} from "./chunk-I3J46TSB.js";
|
|
21
|
+
import {
|
|
22
|
+
SDK_VERSION
|
|
23
|
+
} from "./chunk-KELRCMA6.js";
|
|
24
|
+
|
|
25
|
+
// tools/warp_grep/agent/runner.ts
|
|
26
|
+
import OpenAI from "openai";
|
|
27
|
+
import path from "path";
|
|
28
|
+
var DEFAULT_API_URL = "https://api.morphllm.com";
|
|
29
|
+
var TOOL_SPECS = [
|
|
30
|
+
{
|
|
31
|
+
type: "function",
|
|
32
|
+
function: {
|
|
33
|
+
name: "list_directory",
|
|
34
|
+
description: "Execute ls or find commands to explore directory structure. Max 500 results. Common junk directories are excluded automatically.",
|
|
35
|
+
parameters: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
command: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Full ls or find command (e.g. ls -la src/, find . -maxdepth 2 -type f -name '*.py', find . -type d, ls -d */)."
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
required: ["command"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: "function",
|
|
49
|
+
function: {
|
|
50
|
+
name: "grep_search",
|
|
51
|
+
description: "Search for a regex pattern in file contents. Returns matching lines with file paths and line numbers. Case-insensitive. Respects .gitignore.",
|
|
52
|
+
parameters: {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {
|
|
55
|
+
pattern: {
|
|
56
|
+
type: "string",
|
|
57
|
+
description: "Regex pattern to search for in file contents (e.g. 'class\\s+\\w+Error', 'import|require|from', 'def (get|set|update)_user')."
|
|
58
|
+
},
|
|
59
|
+
path: {
|
|
60
|
+
type: "string",
|
|
61
|
+
description: "File or directory to search in. Defaults to current working directory."
|
|
62
|
+
},
|
|
63
|
+
glob: {
|
|
64
|
+
type: "string",
|
|
65
|
+
description: "Glob pattern to filter files (e.g. '*.py', '*.{ts,tsx,js,jsx,py,go}', 'src/**/*.go', '!*.test.*')."
|
|
66
|
+
},
|
|
67
|
+
limit: {
|
|
68
|
+
type: "integer",
|
|
69
|
+
description: "Limit output to first N matching lines. Shows all matches if not specified."
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
required: ["pattern"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: "function",
|
|
78
|
+
function: {
|
|
79
|
+
name: "glob",
|
|
80
|
+
description: "Find files by name/extension using glob patterns. Returns absolute paths sorted by modification time (newest first). Respects .gitignore. Max 100 results.",
|
|
81
|
+
parameters: {
|
|
82
|
+
type: "object",
|
|
83
|
+
properties: {
|
|
84
|
+
pattern: {
|
|
85
|
+
type: "string",
|
|
86
|
+
description: "Glob pattern to match files (e.g. '*.py', 'src/**/*.js', '*.{ts,tsx}', 'test_*.py')."
|
|
87
|
+
},
|
|
88
|
+
path: {
|
|
89
|
+
type: "string",
|
|
90
|
+
description: "Directory to search in. Defaults to repository root."
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
required: ["pattern"]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: "function",
|
|
99
|
+
function: {
|
|
100
|
+
name: "read",
|
|
101
|
+
description: "Read entire files or specific line ranges using absolute paths.",
|
|
102
|
+
parameters: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
path: {
|
|
106
|
+
type: "string",
|
|
107
|
+
description: "File path to read, using absolute path (e.g. '/home/ubuntu/repo/src/main.py' or windows path)."
|
|
108
|
+
},
|
|
109
|
+
lines: {
|
|
110
|
+
type: "string",
|
|
111
|
+
description: "Optional line range (e.g. '1-50' or '1-20,45-80'). Omit to read entire file."
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
required: ["path"]
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: "function",
|
|
120
|
+
function: {
|
|
121
|
+
name: "finish",
|
|
122
|
+
description: "Submit final answer with all relevant code locations. Include imports and over-include rather than miss context.",
|
|
123
|
+
parameters: {
|
|
124
|
+
type: "object",
|
|
125
|
+
properties: {
|
|
126
|
+
files: {
|
|
127
|
+
type: "string",
|
|
128
|
+
description: "One file per line as path:lines (e.g. 'src/auth.py:1-15,25-50\\nsrc/user.py'). Omit line range to include entire file."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
required: ["files"]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
];
|
|
136
|
+
async function callModel(messages, model, options = {}) {
|
|
137
|
+
const baseUrl = options.morphApiUrl || DEFAULT_API_URL;
|
|
138
|
+
const apiKey = options.morphApiKey || process.env.MORPH_API_KEY || "";
|
|
139
|
+
const timeoutMs = options.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
|
|
140
|
+
const parsedUrl = new URL(baseUrl);
|
|
141
|
+
const baseURL = parsedUrl.pathname === "/" ? `${baseUrl}/v1` : baseUrl;
|
|
142
|
+
const client = new OpenAI({
|
|
143
|
+
apiKey,
|
|
144
|
+
baseURL,
|
|
145
|
+
maxRetries: options.retryConfig?.maxRetries,
|
|
146
|
+
timeout: timeoutMs,
|
|
147
|
+
defaultHeaders: { "X-Morph-SDK-Version": SDK_VERSION }
|
|
148
|
+
});
|
|
149
|
+
const MAX_EMPTY_RETRIES = 1;
|
|
150
|
+
for (let attempt = 0; attempt <= MAX_EMPTY_RETRIES; attempt++) {
|
|
151
|
+
let data;
|
|
152
|
+
try {
|
|
153
|
+
data = await client.chat.completions.create({
|
|
154
|
+
model,
|
|
155
|
+
temperature: 0,
|
|
156
|
+
max_tokens: 2048,
|
|
157
|
+
messages,
|
|
158
|
+
tools: TOOL_SPECS,
|
|
159
|
+
...options.search_type ? { search_type: options.search_type } : {}
|
|
160
|
+
});
|
|
161
|
+
} catch (error) {
|
|
162
|
+
if (error instanceof OpenAI.APIError && error.status === 404) {
|
|
163
|
+
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";
|
|
164
|
+
const errorText = error.message?.trim();
|
|
165
|
+
throw new Error(errorText || defaultMsg);
|
|
166
|
+
}
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
const choice = data?.choices?.[0];
|
|
170
|
+
const message = choice?.message;
|
|
171
|
+
if (!message) {
|
|
172
|
+
if (attempt === MAX_EMPTY_RETRIES) {
|
|
173
|
+
throw new Error("Invalid response from model: no message in response");
|
|
174
|
+
}
|
|
175
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const toolCalls = (message.tool_calls || []).map((tc) => ({
|
|
179
|
+
id: tc.id,
|
|
180
|
+
type: "function",
|
|
181
|
+
function: { name: tc.function.name, arguments: tc.function.arguments }
|
|
182
|
+
}));
|
|
183
|
+
if (message.content || toolCalls.length > 0) {
|
|
184
|
+
return { content: message.content ?? null, tool_calls: toolCalls };
|
|
185
|
+
}
|
|
186
|
+
if (attempt === MAX_EMPTY_RETRIES) {
|
|
187
|
+
const finishReason = choice?.finish_reason ?? "unknown";
|
|
188
|
+
throw new Error(
|
|
189
|
+
`Invalid response from model: no content and no tool_calls, finish_reason=${finishReason}`
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
193
|
+
}
|
|
194
|
+
throw new Error("Invalid response from model");
|
|
195
|
+
}
|
|
196
|
+
function safeParseJSON(s) {
|
|
197
|
+
try {
|
|
198
|
+
return JSON.parse(s);
|
|
199
|
+
} catch {
|
|
200
|
+
return {};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async function executeTool(provider, name, args, repoRoot) {
|
|
204
|
+
switch (name) {
|
|
205
|
+
case "grep_search": {
|
|
206
|
+
const grepArgs = {
|
|
207
|
+
pattern: args.pattern,
|
|
208
|
+
path: args.path || "."
|
|
209
|
+
};
|
|
210
|
+
if (args.glob) grepArgs.glob = args.glob;
|
|
211
|
+
if (args.case_sensitive !== void 0) grepArgs.case_sensitive = args.case_sensitive;
|
|
212
|
+
const result = await toolGrep(provider, grepArgs);
|
|
213
|
+
let output = result.output;
|
|
214
|
+
if (args.limit && typeof args.limit === "number") {
|
|
215
|
+
const lines = output.split("\n");
|
|
216
|
+
if (lines.length > args.limit) {
|
|
217
|
+
output = lines.slice(0, args.limit).join("\n") + `
|
|
218
|
+
... (truncated at ${args.limit} lines)`;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return output;
|
|
222
|
+
}
|
|
223
|
+
case "glob": {
|
|
224
|
+
return toolGlob(provider, {
|
|
225
|
+
pattern: args.pattern,
|
|
226
|
+
path: args.path
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
case "list_directory": {
|
|
230
|
+
const dirPath = extractPathFromCommand(args.command || ".");
|
|
231
|
+
return toolListDirectory(provider, { path: dirPath }, repoRoot);
|
|
232
|
+
}
|
|
233
|
+
case "read": {
|
|
234
|
+
const readArgs = {
|
|
235
|
+
path: args.path
|
|
236
|
+
};
|
|
237
|
+
if (args.lines && typeof args.lines === "string") {
|
|
238
|
+
Object.assign(readArgs, parseReadLines(args.lines));
|
|
239
|
+
}
|
|
240
|
+
return toolRead(provider, readArgs);
|
|
241
|
+
}
|
|
242
|
+
default:
|
|
243
|
+
return `Unknown tool: ${name}`;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async function* runWarpGrepStreaming(config) {
|
|
247
|
+
const totalStart = Date.now();
|
|
248
|
+
const timeoutMs = config.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
|
|
249
|
+
const timings = { turns: [], timeout_ms: timeoutMs };
|
|
250
|
+
const repoRoot = path.resolve(config.repoRoot || process.cwd());
|
|
251
|
+
const model = config.model || DEFAULT_MODEL;
|
|
252
|
+
const messages = [];
|
|
253
|
+
const maxTurns = AGENT_CONFIG.MAX_TURNS;
|
|
254
|
+
const initialStateStart = Date.now();
|
|
255
|
+
const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });
|
|
256
|
+
timings.initial_state_ms = Date.now() - initialStateStart;
|
|
257
|
+
messages.push({ role: "user", content: initialState });
|
|
258
|
+
const provider = config.provider;
|
|
259
|
+
const errors = [];
|
|
260
|
+
let finishMeta;
|
|
261
|
+
let terminationReason = "terminated";
|
|
262
|
+
for (let turn = 1; turn <= maxTurns; turn += 1) {
|
|
263
|
+
const turnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };
|
|
264
|
+
enforceContextLimit(messages);
|
|
265
|
+
const modelCallStart = Date.now();
|
|
266
|
+
const response = await callModel(messages, model, {
|
|
267
|
+
morphApiKey: config.morphApiKey,
|
|
268
|
+
morphApiUrl: config.morphApiUrl,
|
|
269
|
+
retryConfig: config.retryConfig,
|
|
270
|
+
timeout: timeoutMs,
|
|
271
|
+
search_type: config.search_type
|
|
272
|
+
}).catch((e) => {
|
|
273
|
+
const errMsg = e instanceof Error ? e.message : String(e);
|
|
274
|
+
console.error(`[warp_grep] Morph API call failed on turn ${turn}:`, errMsg);
|
|
275
|
+
errors.push({ message: errMsg });
|
|
276
|
+
return null;
|
|
277
|
+
});
|
|
278
|
+
turnMetrics.morph_api_ms = Date.now() - modelCallStart;
|
|
279
|
+
if (!response) {
|
|
280
|
+
timings.turns.push(turnMetrics);
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
const toolCalls = response.tool_calls;
|
|
284
|
+
messages.push({
|
|
285
|
+
role: "assistant",
|
|
286
|
+
content: response.content,
|
|
287
|
+
...toolCalls.length > 0 ? { tool_calls: toolCalls } : {}
|
|
288
|
+
});
|
|
289
|
+
if (toolCalls.length === 0) {
|
|
290
|
+
console.error(`[warp_grep] No tool calls on turn ${turn}. Content: ${(response.content || "").slice(0, 500)}`);
|
|
291
|
+
errors.push({ message: "No tool calls produced by the model." });
|
|
292
|
+
terminationReason = "terminated";
|
|
293
|
+
timings.turns.push(turnMetrics);
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
yield {
|
|
297
|
+
turn,
|
|
298
|
+
toolCalls: toolCalls.map((tc) => ({
|
|
299
|
+
name: tc.function.name,
|
|
300
|
+
arguments: safeParseJSON(tc.function.arguments)
|
|
301
|
+
}))
|
|
302
|
+
};
|
|
303
|
+
const finishCall = toolCalls.find((tc) => tc.function.name === "finish");
|
|
304
|
+
if (finishCall) {
|
|
305
|
+
const args = safeParseJSON(finishCall.function.arguments);
|
|
306
|
+
const filesStr = args.files || "";
|
|
307
|
+
const files = parseFinishFiles(filesStr);
|
|
308
|
+
finishMeta = { files };
|
|
309
|
+
terminationReason = "completed";
|
|
310
|
+
if (files.length === 0) {
|
|
311
|
+
const payload2 = filesStr || "No relevant code found.";
|
|
312
|
+
timings.turns.push(turnMetrics);
|
|
313
|
+
timings.total_ms = Date.now() - totalStart;
|
|
314
|
+
return {
|
|
315
|
+
terminationReason: "completed",
|
|
316
|
+
messages,
|
|
317
|
+
finish: { payload: payload2, metadata: finishMeta },
|
|
318
|
+
timings
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
timings.turns.push(turnMetrics);
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
const toolExecStart = Date.now();
|
|
325
|
+
const results = await Promise.all(
|
|
326
|
+
toolCalls.map(async (tc) => {
|
|
327
|
+
const args = safeParseJSON(tc.function.arguments);
|
|
328
|
+
const output = await executeTool(provider, tc.function.name, args, repoRoot).catch((err) => String(err));
|
|
329
|
+
return { tool_call_id: tc.id, content: output };
|
|
330
|
+
})
|
|
331
|
+
);
|
|
332
|
+
turnMetrics.local_tools_ms = Date.now() - toolExecStart;
|
|
333
|
+
for (const result of results) {
|
|
334
|
+
messages.push({ role: "tool", tool_call_id: result.tool_call_id, content: result.content });
|
|
335
|
+
}
|
|
336
|
+
const turnMsg = formatTurnMessage(turn, maxTurns);
|
|
337
|
+
const budget = calculateContextBudget(messages);
|
|
338
|
+
messages.push({ role: "user", content: turnMsg + "\n" + budget });
|
|
339
|
+
timings.turns.push(turnMetrics);
|
|
340
|
+
}
|
|
341
|
+
if (terminationReason !== "completed" || !finishMeta) {
|
|
342
|
+
timings.total_ms = Date.now() - totalStart;
|
|
343
|
+
return { terminationReason, messages, errors, timings };
|
|
344
|
+
}
|
|
345
|
+
const parts = ["Relevant context found:"];
|
|
346
|
+
for (const f of finishMeta.files) {
|
|
347
|
+
const ranges = f.lines === "*" ? "*" : Array.isArray(f.lines) ? f.lines.map(([s, e]) => `${s}-${e}`).join(", ") : "*";
|
|
348
|
+
parts.push(`- ${f.path}: ${ranges}`);
|
|
349
|
+
}
|
|
350
|
+
const payload = parts.join("\n");
|
|
351
|
+
const finishResolutionStart = Date.now();
|
|
352
|
+
const fileReadErrors = [];
|
|
353
|
+
const resolved = await readFinishFiles(
|
|
354
|
+
repoRoot,
|
|
355
|
+
finishMeta.files,
|
|
356
|
+
async (p, s, e) => {
|
|
357
|
+
try {
|
|
358
|
+
const rr = await provider.read({ path: p, start: s, end: e });
|
|
359
|
+
return rr.lines.map((l) => {
|
|
360
|
+
const idx = l.indexOf("|");
|
|
361
|
+
return idx >= 0 ? l.slice(idx + 1) : l;
|
|
362
|
+
});
|
|
363
|
+
} catch (err) {
|
|
364
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
365
|
+
fileReadErrors.push({ path: p, error: errorMsg });
|
|
366
|
+
console.error(`[warp_grep] Failed to read file: ${p} - ${errorMsg}`);
|
|
367
|
+
return [`[couldn't find: ${p}]`];
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
);
|
|
371
|
+
timings.finish_resolution_ms = Date.now() - finishResolutionStart;
|
|
372
|
+
if (fileReadErrors.length > 0) {
|
|
373
|
+
errors.push(...fileReadErrors.map((e) => ({ message: `File read error: ${e.path} - ${e.error}` })));
|
|
374
|
+
}
|
|
375
|
+
timings.total_ms = Date.now() - totalStart;
|
|
376
|
+
return {
|
|
377
|
+
terminationReason: "completed",
|
|
378
|
+
messages,
|
|
379
|
+
finish: { payload, metadata: finishMeta, resolved },
|
|
380
|
+
timings
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
async function runWarpGrep(config) {
|
|
384
|
+
const gen = runWarpGrepStreaming(config);
|
|
385
|
+
let result = await gen.next();
|
|
386
|
+
while (!result.done) {
|
|
387
|
+
result = await gen.next();
|
|
388
|
+
}
|
|
389
|
+
return result.value;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export {
|
|
393
|
+
runWarpGrepStreaming,
|
|
394
|
+
runWarpGrep
|
|
395
|
+
};
|
|
396
|
+
//# sourceMappingURL=chunk-OPEQQGST.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, ToolCallRef, WarpGrepExecutionMetrics, WarpGrepTurnMetrics, WarpGrepStep } from './types.js';\nimport { parseFinishFiles, parseReadLines, extractPathFromCommand } 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 { toolGlob } from './tools/glob.js';\nimport { readFinishFiles } from './tools/finish.js';\nimport type { RetryConfig } from '../../utils/resilience.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 DEFAULT_API_URL = 'https://api.morphllm.com';\n\n// Tool definitions sent to the model (OpenAI function calling format)\nconst TOOL_SPECS: OpenAI.Chat.ChatCompletionTool[] = [\n {\n type: 'function',\n function: {\n name: 'list_directory',\n description: 'Execute ls or find commands to explore directory structure. Max 500 results. Common junk directories are excluded automatically.',\n parameters: {\n type: 'object',\n properties: {\n command: {\n type: 'string',\n description: \"Full ls or find command (e.g. ls -la src/, find . -maxdepth 2 -type f -name '*.py', find . -type d, ls -d */).\",\n },\n },\n required: ['command'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'grep_search',\n description: 'Search for a regex pattern in file contents. Returns matching lines with file paths and line numbers. Case-insensitive. Respects .gitignore.',\n parameters: {\n type: 'object',\n properties: {\n pattern: {\n type: 'string',\n description: \"Regex pattern to search for in file contents (e.g. 'class\\\\s+\\\\w+Error', 'import|require|from', 'def (get|set|update)_user').\",\n },\n path: {\n type: 'string',\n description: 'File or directory to search in. Defaults to current working directory.',\n },\n glob: {\n type: 'string',\n description: \"Glob pattern to filter files (e.g. '*.py', '*.{ts,tsx,js,jsx,py,go}', 'src/**/*.go', '!*.test.*').\",\n },\n limit: {\n type: 'integer',\n description: 'Limit output to first N matching lines. Shows all matches if not specified.',\n },\n },\n required: ['pattern'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'glob',\n description: 'Find files by name/extension using glob patterns. Returns absolute paths sorted by modification time (newest first). Respects .gitignore. Max 100 results.',\n parameters: {\n type: 'object',\n properties: {\n pattern: {\n type: 'string',\n description: \"Glob pattern to match files (e.g. '*.py', 'src/**/*.js', '*.{ts,tsx}', 'test_*.py').\",\n },\n path: {\n type: 'string',\n description: 'Directory to search in. Defaults to repository root.',\n },\n },\n required: ['pattern'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'read',\n description: 'Read entire files or specific line ranges using absolute paths.',\n parameters: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: \"File path to read, using absolute path (e.g. '/home/ubuntu/repo/src/main.py' or windows path).\",\n },\n lines: {\n type: 'string',\n description: \"Optional line range (e.g. '1-50' or '1-20,45-80'). Omit to read entire file.\",\n },\n },\n required: ['path'],\n },\n },\n },\n {\n type: 'function',\n function: {\n name: 'finish',\n description: 'Submit final answer with all relevant code locations. Include imports and over-include rather than miss context.',\n parameters: {\n type: 'object',\n properties: {\n files: {\n type: 'string',\n description: \"One file per line as path:lines (e.g. 'src/auth.py:1-15,25-50\\\\nsrc/user.py'). Omit line range to include entire file.\",\n },\n },\n required: ['files'],\n },\n },\n },\n];\n\ninterface CallModelOptions {\n morphApiKey?: string;\n morphApiUrl?: string;\n retryConfig?: RetryConfig;\n timeout?: number;\n search_type?: string;\n}\n\ntype ModelResponse = {\n content: string | null;\n tool_calls: ToolCallRef[];\n};\n\nasync function callModel(\n messages: ChatMessage[],\n model: string,\n options: CallModelOptions = {}\n): Promise<ModelResponse> {\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 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: 2048,\n messages: messages as OpenAI.Chat.ChatCompletionMessageParam[],\n tools: TOOL_SPECS,\n ...(options.search_type ? { search_type: options.search_type } as Record<string, unknown> : {}),\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 message = choice?.message;\n\n if (!message) {\n if (attempt === MAX_EMPTY_RETRIES) {\n throw new Error('Invalid response from model: no message in response');\n }\n await new Promise(resolve => setTimeout(resolve, 200));\n continue;\n }\n\n const toolCalls: ToolCallRef[] = (message.tool_calls || []).map(tc => ({\n id: tc.id,\n type: 'function' as const,\n function: { name: tc.function.name, arguments: tc.function.arguments },\n }));\n\n if (message.content || toolCalls.length > 0) {\n return { content: message.content ?? null, tool_calls: toolCalls };\n }\n\n if (attempt === MAX_EMPTY_RETRIES) {\n const finishReason = choice?.finish_reason ?? 'unknown';\n throw new Error(\n `Invalid response from model: no content and no tool_calls, finish_reason=${finishReason}`\n );\n }\n await new Promise(resolve => setTimeout(resolve, 200));\n }\n\n throw new Error('Invalid response from model');\n}\n\n/** Safely parse JSON, returning empty object on failure */\nfunction safeParseJSON(s: string): Record<string, unknown> {\n try {\n return JSON.parse(s);\n } catch {\n return {};\n }\n}\n\n/**\n * Execute a single tool call against the provider, returning the output string.\n */\nasync function executeTool(\n provider: WarpGrepProvider,\n name: string,\n args: Record<string, unknown>,\n repoRoot?: string,\n): Promise<string> {\n switch (name) {\n case 'grep_search': {\n const grepArgs: { pattern: string; path: string; glob?: string; case_sensitive?: boolean } = {\n pattern: args.pattern as string,\n path: (args.path as string) || '.',\n };\n if (args.glob) grepArgs.glob = args.glob as string;\n if (args.case_sensitive !== undefined) grepArgs.case_sensitive = args.case_sensitive as boolean;\n const result = await toolGrep(provider, grepArgs);\n let output = result.output;\n if (args.limit && typeof args.limit === 'number') {\n const lines = output.split('\\n');\n if (lines.length > args.limit) {\n output = lines.slice(0, args.limit).join('\\n') + `\\n... (truncated at ${args.limit} lines)`;\n }\n }\n return output;\n }\n case 'glob': {\n return toolGlob(provider, {\n pattern: args.pattern as string,\n path: args.path as string | undefined,\n });\n }\n case 'list_directory': {\n const dirPath = extractPathFromCommand((args.command as string) || '.');\n return toolListDirectory(provider, { path: dirPath }, repoRoot);\n }\n case 'read': {\n const readArgs: { path: string; start?: number; end?: number; lines?: Array<[number, number]> } = {\n path: args.path as string,\n };\n if (args.lines && typeof args.lines === 'string') {\n Object.assign(readArgs, parseReadLines(args.lines));\n }\n return toolRead(provider, readArgs);\n }\n default:\n return `Unknown tool: ${name}`;\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 enforceContextLimit(messages);\n\n // Call model\n const modelCallStart = Date.now();\n const response = await callModel(messages, model, {\n morphApiKey: config.morphApiKey,\n morphApiUrl: config.morphApiUrl,\n retryConfig: config.retryConfig,\n timeout: timeoutMs,\n search_type: config.search_type,\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 null;\n });\n turnMetrics.morph_api_ms = Date.now() - modelCallStart;\n\n if (!response) {\n timings.turns!.push(turnMetrics);\n break;\n }\n\n const toolCalls = response.tool_calls;\n\n // Add assistant message to history\n messages.push({\n role: 'assistant',\n content: response.content,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n\n if (toolCalls.length === 0) {\n console.error(`[warp_grep] No tool calls on turn ${turn}. Content: ${(response.content || '').slice(0, 500)}`);\n errors.push({ message: 'No tool calls produced by the model.' });\n terminationReason = 'terminated';\n timings.turns!.push(turnMetrics);\n break;\n }\n\n // Yield step for streaming consumers\n yield {\n turn,\n toolCalls: toolCalls.map(tc => ({\n name: tc.function.name,\n arguments: safeParseJSON(tc.function.arguments),\n })),\n };\n\n // Check for finish call\n const finishCall = toolCalls.find(tc => tc.function.name === 'finish');\n if (finishCall) {\n const args = safeParseJSON(finishCall.function.arguments) as { files?: string };\n const filesStr = args.files || '';\n const files = parseFinishFiles(filesStr);\n finishMeta = { files };\n terminationReason = 'completed';\n\n if (files.length === 0) {\n const payload = filesStr || '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 timings.turns!.push(turnMetrics);\n break;\n }\n\n // Execute non-finish tool calls in parallel\n const toolExecStart = Date.now();\n const results = await Promise.all(\n toolCalls.map(async (tc) => {\n const args = safeParseJSON(tc.function.arguments);\n const output = await executeTool(provider, tc.function.name, args, repoRoot).catch(err => String(err));\n return { tool_call_id: tc.id, content: output };\n })\n );\n turnMetrics.local_tools_ms = Date.now() - toolExecStart;\n\n // Add tool result messages\n for (const result of results) {\n messages.push({ role: 'tool', tool_call_id: result.tool_call_id, content: result.content });\n }\n\n // Add turn counter hint\n const turnMsg = formatTurnMessage(turn, maxTurns);\n const budget = calculateContextBudget(messages);\n messages.push({ role: 'user', content: turnMsg + '\\n' + budget });\n\n timings.turns!.push(turnMetrics);\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 * Non-streaming version. Runs the agent loop and returns the final result.\n */\nexport async function runWarpGrep(config: SessionConfig & { provider: WarpGrepProvider }): Promise<AgentRunResult> {\n const gen = runWarpGrepStreaming(config);\n // Drain all yielded steps, return the final result\n let result = await gen.next();\n while (!result.done) {\n result = await gen.next();\n }\n return result.value;\n}\n"],"mappings":"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","names":["payload"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-2HMEZZKK.js";
|
|
4
4
|
import {
|
|
5
5
|
executeBrowserTask
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6CFKWZK3.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-
|
|
57
|
+
//# sourceMappingURL=chunk-PX7ODEML.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeCodebaseSearch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-G23BI5CQ.js";
|
|
4
4
|
import {
|
|
5
5
|
CODEBASE_SEARCH_DESCRIPTION,
|
|
6
6
|
CODEBASE_SEARCH_SYSTEM_PROMPT
|
|
@@ -80,4 +80,4 @@ function formatResult(result) {
|
|
|
80
80
|
export {
|
|
81
81
|
createCodebaseSearchTool
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-RZXS4ADX.js.map
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
GITHUB_SEARCH_TOOL_NAME,
|
|
8
8
|
WARP_GREP_DESCRIPTION,
|
|
9
9
|
WARP_GREP_TOOL_NAME
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JHYH3NEP.js";
|
|
11
11
|
import {
|
|
12
12
|
WarpGrepClient,
|
|
13
13
|
executeGitHubReadFile,
|
|
14
14
|
executeToolCall,
|
|
15
15
|
formatGitHubReadFileResult,
|
|
16
16
|
formatResult
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-JMUAQQJU.js";
|
|
18
18
|
|
|
19
19
|
// tools/warp_grep/openai.ts
|
|
20
20
|
var TOOL_PARAMETERS = {
|
|
@@ -104,4 +104,4 @@ export {
|
|
|
104
104
|
createGitHubReadFileTool,
|
|
105
105
|
openai_default
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-S54SPKX3.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeCodebaseSearch
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-G23BI5CQ.js";
|
|
4
4
|
import {
|
|
5
5
|
CODEBASE_SEARCH_DESCRIPTION
|
|
6
6
|
} from "./chunk-YQMPVJ2L.js";
|
|
@@ -55,4 +55,4 @@ export {
|
|
|
55
55
|
getSystemPrompt,
|
|
56
56
|
vercel_default
|
|
57
57
|
};
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
58
|
+
//# sourceMappingURL=chunk-SUE4GYA2.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-2HMEZZKK.js";
|
|
5
5
|
import {
|
|
6
6
|
executeBrowserTask
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-6CFKWZK3.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-
|
|
96
|
+
//# sourceMappingURL=chunk-VRV5UYTN.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
WarpGrepClient,
|
|
3
3
|
formatResult
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JMUAQQJU.js";
|
|
5
5
|
import {
|
|
6
6
|
CODEBASE_SEARCH_TOOL,
|
|
7
7
|
SEND_MESSAGE_TOOL,
|
|
@@ -262,4 +262,4 @@ function deduplicateContexts(contexts) {
|
|
|
262
262
|
export {
|
|
263
263
|
createExploreSubagent
|
|
264
264
|
};
|
|
265
|
-
//# sourceMappingURL=chunk-
|
|
265
|
+
//# sourceMappingURL=chunk-XL7R3XN5.js.map
|