@morphllm/morphsdk 0.2.81 → 0.2.83
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-4NI25AKV.js → chunk-4KMBU6T3.js} +2 -2
- package/dist/{chunk-XT5ZO6ES.js → chunk-5PNMAWLC.js} +8 -2
- package/dist/chunk-5PNMAWLC.js.map +1 -0
- package/dist/{chunk-X6A64F2F.js → chunk-HPR6BJA7.js} +5 -5
- package/dist/{chunk-4VMIPD4G.js → chunk-HRK53IKL.js} +8 -6
- package/dist/chunk-HRK53IKL.js.map +1 -0
- package/dist/{chunk-NTTQJM6O.js → chunk-LXG37353.js} +2 -2
- package/dist/{chunk-467MCW5R.js → chunk-P2O5JKE5.js} +2 -2
- package/dist/{chunk-PHJQ4N3T.js → chunk-PUGSTXLO.js} +2 -2
- package/dist/{chunk-B3UC7UVA.js → chunk-QOYI77CN.js} +30 -8
- package/dist/chunk-QOYI77CN.js.map +1 -0
- package/dist/{chunk-Z2HDXUH7.js → chunk-RL4JBZ3T.js} +2 -2
- package/dist/{chunk-OFMDENAQ.js → chunk-S27A4NQM.js} +2 -2
- package/dist/{client-CSINf0lQ.d.ts → client-CsO9LifG.d.ts} +1 -1
- package/dist/client.cjs +38 -8
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.ts +2 -2
- package/dist/client.js +10 -10
- package/dist/index.cjs +38 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -10
- package/dist/tools/warp_grep/agent/config.cjs +7 -1
- package/dist/tools/warp_grep/agent/config.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/config.d.ts +1 -0
- package/dist/tools/warp_grep/agent/config.js +1 -1
- package/dist/tools/warp_grep/agent/runner.cjs +34 -6
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +3 -3
- package/dist/tools/warp_grep/agent/types.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/types.d.ts +16 -1
- package/dist/tools/warp_grep/anthropic.cjs +36 -7
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.d.ts +1 -1
- package/dist/tools/warp_grep/anthropic.js +7 -7
- package/dist/tools/warp_grep/client.cjs +38 -8
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.d.ts +1 -1
- package/dist/tools/warp_grep/client.js +6 -6
- package/dist/tools/warp_grep/gemini.cjs +36 -7
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.d.ts +1 -1
- package/dist/tools/warp_grep/gemini.js +6 -6
- package/dist/tools/warp_grep/harness.cjs +7 -1
- package/dist/tools/warp_grep/harness.cjs.map +1 -1
- package/dist/tools/warp_grep/harness.js +3 -3
- package/dist/tools/warp_grep/index.cjs +38 -8
- 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 +6 -6
- package/dist/tools/warp_grep/openai.cjs +36 -7
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.d.ts +1 -1
- package/dist/tools/warp_grep/openai.js +7 -7
- package/dist/tools/warp_grep/providers/local.cjs +7 -1
- package/dist/tools/warp_grep/providers/local.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/local.js +2 -2
- package/dist/tools/warp_grep/providers/remote.cjs +7 -1
- package/dist/tools/warp_grep/providers/remote.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/remote.d.ts +1 -1
- package/dist/tools/warp_grep/providers/remote.js +2 -2
- package/dist/tools/warp_grep/vercel.cjs +36 -7
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.d.ts +1 -1
- package/dist/tools/warp_grep/vercel.js +7 -7
- package/dist/{types-CnvVDM63.d.ts → types-Cv4LpqVl.d.ts} +2 -0
- package/package.json +1 -1
- package/dist/chunk-4VMIPD4G.js.map +0 -1
- package/dist/chunk-B3UC7UVA.js.map +0 -1
- package/dist/chunk-XT5ZO6ES.js.map +0 -1
- /package/dist/{chunk-4NI25AKV.js.map → chunk-4KMBU6T3.js.map} +0 -0
- /package/dist/{chunk-X6A64F2F.js.map → chunk-HPR6BJA7.js.map} +0 -0
- /package/dist/{chunk-NTTQJM6O.js.map → chunk-LXG37353.js.map} +0 -0
- /package/dist/{chunk-467MCW5R.js.map → chunk-P2O5JKE5.js.map} +0 -0
- /package/dist/{chunk-PHJQ4N3T.js.map → chunk-PUGSTXLO.js.map} +0 -0
- /package/dist/{chunk-Z2HDXUH7.js.map → chunk-RL4JBZ3T.js.map} +0 -0
- /package/dist/{chunk-OFMDENAQ.js.map → chunk-S27A4NQM.js.map} +0 -0
|
@@ -53,9 +53,15 @@ module.exports = __toCommonJS(warp_grep_exports);
|
|
|
53
53
|
var import_zod = require("zod");
|
|
54
54
|
|
|
55
55
|
// tools/warp_grep/agent/config.ts
|
|
56
|
+
var parseEnvTimeout = (envValue, defaultMs) => {
|
|
57
|
+
if (!envValue) return defaultMs;
|
|
58
|
+
const parsed = parseInt(envValue, 10);
|
|
59
|
+
return isNaN(parsed) || parsed <= 0 ? defaultMs : parsed;
|
|
60
|
+
};
|
|
56
61
|
var AGENT_CONFIG = {
|
|
57
62
|
MAX_TURNS: 4,
|
|
58
|
-
|
|
63
|
+
/** Default timeout for model calls. Can be overridden via MORPH_WARP_GREP_TIMEOUT env var (in ms) */
|
|
64
|
+
TIMEOUT_MS: parseEnvTimeout(process.env.MORPH_WARP_GREP_TIMEOUT, 3e4),
|
|
59
65
|
MAX_CONTEXT_CHARS: 54e4,
|
|
60
66
|
MAX_OUTPUT_LINES: 200,
|
|
61
67
|
MAX_READ_LINES: 800,
|
|
@@ -1005,7 +1011,8 @@ async function callModel(messages, model, options = {}) {
|
|
|
1005
1011
|
},
|
|
1006
1012
|
options.retryConfig
|
|
1007
1013
|
);
|
|
1008
|
-
const
|
|
1014
|
+
const timeoutMs = options.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
|
|
1015
|
+
const resp = await withTimeout(fetchPromise, timeoutMs, "morph-warp-grep request timed out");
|
|
1009
1016
|
if (!resp.ok) {
|
|
1010
1017
|
if (resp.status === 404) {
|
|
1011
1018
|
throw new Error(
|
|
@@ -1023,10 +1030,15 @@ async function callModel(messages, model, options = {}) {
|
|
|
1023
1030
|
return content;
|
|
1024
1031
|
}
|
|
1025
1032
|
async function runWarpGrep(config) {
|
|
1033
|
+
const totalStart = Date.now();
|
|
1034
|
+
const timeoutMs = config.timeout ?? AGENT_CONFIG.TIMEOUT_MS;
|
|
1035
|
+
const timings = { turns: [], timeout_ms: timeoutMs };
|
|
1026
1036
|
const repoRoot = import_path2.default.resolve(config.repoRoot || process.cwd());
|
|
1027
1037
|
const messages = [];
|
|
1028
1038
|
messages.push({ role: "system", content: getSystemPrompt() });
|
|
1039
|
+
const initialStateStart = Date.now();
|
|
1029
1040
|
const initialState = await buildInitialState(repoRoot, config.query, config.provider);
|
|
1041
|
+
timings.initial_state_ms = Date.now() - initialStateStart;
|
|
1030
1042
|
messages.push({ role: "user", content: initialState });
|
|
1031
1043
|
const maxTurns = AGENT_CONFIG.MAX_TURNS;
|
|
1032
1044
|
const model = config.model || DEFAULT_MODEL;
|
|
@@ -1035,21 +1047,29 @@ async function runWarpGrep(config) {
|
|
|
1035
1047
|
let finishMeta;
|
|
1036
1048
|
let terminationReason = "terminated";
|
|
1037
1049
|
for (let turn = 1; turn <= maxTurns; turn += 1) {
|
|
1050
|
+
const turnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };
|
|
1038
1051
|
enforceContextLimit(messages);
|
|
1052
|
+
const modelCallStart = Date.now();
|
|
1039
1053
|
const assistantContent = await callModel(messages, model, {
|
|
1040
1054
|
morphApiKey: config.morphApiKey,
|
|
1041
1055
|
morphApiUrl: config.morphApiUrl,
|
|
1042
|
-
retryConfig: config.retryConfig
|
|
1056
|
+
retryConfig: config.retryConfig,
|
|
1057
|
+
timeout: timeoutMs
|
|
1043
1058
|
}).catch((e) => {
|
|
1044
1059
|
errors.push({ message: e instanceof Error ? e.message : String(e) });
|
|
1045
1060
|
return "";
|
|
1046
1061
|
});
|
|
1047
|
-
|
|
1062
|
+
turnMetrics.morph_api_ms = Date.now() - modelCallStart;
|
|
1063
|
+
if (!assistantContent) {
|
|
1064
|
+
timings.turns.push(turnMetrics);
|
|
1065
|
+
break;
|
|
1066
|
+
}
|
|
1048
1067
|
messages.push({ role: "assistant", content: assistantContent });
|
|
1049
1068
|
const toolCalls = parser.parse(assistantContent);
|
|
1050
1069
|
if (toolCalls.length === 0) {
|
|
1051
1070
|
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" });
|
|
1052
1071
|
terminationReason = "terminated";
|
|
1072
|
+
timings.turns.push(turnMetrics);
|
|
1053
1073
|
break;
|
|
1054
1074
|
}
|
|
1055
1075
|
const finishCalls = toolCalls.filter((c) => c.name === "finish");
|
|
@@ -1090,7 +1110,9 @@ async function runWarpGrep(config) {
|
|
|
1090
1110
|
)
|
|
1091
1111
|
);
|
|
1092
1112
|
}
|
|
1113
|
+
const toolExecStart = Date.now();
|
|
1093
1114
|
const allResults = await Promise.all(allPromises);
|
|
1115
|
+
turnMetrics.local_tools_ms = Date.now() - toolExecStart;
|
|
1094
1116
|
for (const result of allResults) {
|
|
1095
1117
|
formatted.push(result);
|
|
1096
1118
|
}
|
|
@@ -1099,6 +1121,7 @@ async function runWarpGrep(config) {
|
|
|
1099
1121
|
const contextBudget = calculateContextBudget(messages);
|
|
1100
1122
|
messages.push({ role: "user", content: formatted.join("\n") + turnMessage + "\n" + contextBudget });
|
|
1101
1123
|
}
|
|
1124
|
+
timings.turns.push(turnMetrics);
|
|
1102
1125
|
if (finishCalls.length) {
|
|
1103
1126
|
const fc = finishCalls[0];
|
|
1104
1127
|
const files = fc.arguments?.files ?? [];
|
|
@@ -1108,7 +1131,8 @@ async function runWarpGrep(config) {
|
|
|
1108
1131
|
}
|
|
1109
1132
|
}
|
|
1110
1133
|
if (terminationReason !== "completed" || !finishMeta) {
|
|
1111
|
-
|
|
1134
|
+
timings.total_ms = Date.now() - totalStart;
|
|
1135
|
+
return { terminationReason, messages, errors, timings };
|
|
1112
1136
|
}
|
|
1113
1137
|
const parts = ["Relevant context found:"];
|
|
1114
1138
|
for (const f of finishMeta.files) {
|
|
@@ -1116,6 +1140,7 @@ async function runWarpGrep(config) {
|
|
|
1116
1140
|
parts.push(`- ${f.path}: ${ranges}`);
|
|
1117
1141
|
}
|
|
1118
1142
|
const payload = parts.join("\n");
|
|
1143
|
+
const finishResolutionStart = Date.now();
|
|
1119
1144
|
const fileReadErrors = [];
|
|
1120
1145
|
const resolved = await readFinishFiles(
|
|
1121
1146
|
repoRoot,
|
|
@@ -1135,13 +1160,16 @@ async function runWarpGrep(config) {
|
|
|
1135
1160
|
}
|
|
1136
1161
|
}
|
|
1137
1162
|
);
|
|
1163
|
+
timings.finish_resolution_ms = Date.now() - finishResolutionStart;
|
|
1138
1164
|
if (fileReadErrors.length > 0) {
|
|
1139
1165
|
errors.push(...fileReadErrors.map((e) => ({ message: `File read error: ${e.path} - ${e.error}` })));
|
|
1140
1166
|
}
|
|
1167
|
+
timings.total_ms = Date.now() - totalStart;
|
|
1141
1168
|
return {
|
|
1142
1169
|
terminationReason: "completed",
|
|
1143
1170
|
messages,
|
|
1144
|
-
finish: { payload, metadata: finishMeta, resolved }
|
|
1171
|
+
finish: { payload, metadata: finishMeta, resolved },
|
|
1172
|
+
timings
|
|
1145
1173
|
};
|
|
1146
1174
|
}
|
|
1147
1175
|
|
|
@@ -1770,7 +1798,8 @@ var WarpGrepClient = class {
|
|
|
1770
1798
|
debug: input.debug ?? this.config.debug,
|
|
1771
1799
|
morphApiKey: this.config.morphApiKey,
|
|
1772
1800
|
morphApiUrl: this.config.morphApiUrl,
|
|
1773
|
-
retryConfig: this.config.retryConfig
|
|
1801
|
+
retryConfig: this.config.retryConfig,
|
|
1802
|
+
timeout: this.config.timeout
|
|
1774
1803
|
}
|
|
1775
1804
|
);
|
|
1776
1805
|
}
|
|
@@ -1791,7 +1820,8 @@ async function executeToolCall(input, config) {
|
|
|
1791
1820
|
debug: config.debug ?? false,
|
|
1792
1821
|
morphApiKey: config.morphApiKey,
|
|
1793
1822
|
morphApiUrl: config.morphApiUrl,
|
|
1794
|
-
retryConfig: config.retryConfig
|
|
1823
|
+
retryConfig: config.retryConfig,
|
|
1824
|
+
timeout: config.timeout
|
|
1795
1825
|
});
|
|
1796
1826
|
const finish = result.finish;
|
|
1797
1827
|
if (result.terminationReason !== "completed" || !finish?.metadata) {
|