@morphllm/morphsdk 0.2.162 → 0.2.164
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-OGMHU4PJ.js → chunk-3HVVQHHX.js} +9 -2
- package/dist/chunk-3HVVQHHX.js.map +1 -0
- package/dist/{chunk-JVKGSMEF.js → chunk-3NWJ74R4.js} +2 -2
- package/dist/{chunk-XUV5B27P.js → chunk-4DDD65QF.js} +2 -2
- package/dist/{chunk-DRTPCCEI.js → chunk-4FZXI4FI.js} +2 -2
- package/dist/chunk-5AM23TC7.js +42 -0
- package/dist/chunk-5AM23TC7.js.map +1 -0
- package/dist/{chunk-CNFHKQ42.js → chunk-BFNH475L.js} +2 -2
- package/dist/{chunk-ZG3YLRR5.js → chunk-CFCNSELX.js} +8 -2
- package/dist/chunk-CFCNSELX.js.map +1 -0
- package/dist/{chunk-NKUGRAYU.js → chunk-CRU3FQ54.js} +2 -2
- package/dist/{chunk-DXMNKPB6.js → chunk-DKPC5ZVX.js} +2 -2
- package/dist/{chunk-PWGBAVQ5.js → chunk-DVCIADH3.js} +2 -2
- package/dist/{chunk-LECHLXI4.js → chunk-EAIAZ2GD.js} +17 -6
- package/dist/chunk-EAIAZ2GD.js.map +1 -0
- package/dist/{chunk-4GQNYJBB.js → chunk-ECELX2KF.js} +9 -12
- package/dist/chunk-ECELX2KF.js.map +1 -0
- package/dist/{chunk-YRHM3RCQ.js → chunk-EPYCKNQ3.js} +2 -2
- package/dist/{chunk-OOE2TKKY.js → chunk-MRYULNMU.js} +12 -21
- package/dist/chunk-MRYULNMU.js.map +1 -0
- package/dist/{chunk-4U5JFT6X.js → chunk-MVMB6GBY.js} +33 -26
- package/dist/{chunk-4U5JFT6X.js.map → chunk-MVMB6GBY.js.map} +1 -1
- package/dist/{chunk-UKT3CKC7.js → chunk-N4SSQFYN.js} +2 -2
- package/dist/{chunk-7QMX45QD.js → chunk-NKFMGSUH.js} +33 -6
- package/dist/chunk-NKFMGSUH.js.map +1 -0
- package/dist/{chunk-LZQBVEY2.js → chunk-NMRQWMTH.js} +35 -27
- package/dist/chunk-NMRQWMTH.js.map +1 -0
- package/dist/{chunk-UVRC4LKZ.js → chunk-Q7XZ6JGW.js} +2 -2
- package/dist/{chunk-UZX7SY33.js → chunk-RR7P4SMP.js} +2 -2
- package/dist/{chunk-UETFIUIG.js → chunk-VCFUU5TL.js} +2 -2
- package/dist/{chunk-5XTA7GCY.js → chunk-VDMF4WWF.js} +2 -2
- package/dist/{chunk-YBKT2UOK.js → chunk-XULEBEBX.js} +2 -2
- package/dist/{chunk-Y4NYT5L6.js → chunk-YOF3N2EL.js} +11 -26
- package/dist/chunk-YOF3N2EL.js.map +1 -0
- package/dist/{chunk-4Q6VFODP.js → chunk-ZEEHRQYJ.js} +2 -2
- package/dist/{chunk-VQSLLYKE.js → chunk-ZEMLB2KV.js} +2 -2
- package/dist/client.cjs +185 -115
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +25 -24
- package/dist/edge.cjs +83 -50
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.js +5 -4
- package/dist/index.cjs +187 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +29 -28
- package/dist/modelrouter/core.cjs +51 -25
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.js +4 -3
- package/dist/modelrouter/index.cjs +51 -25
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.js +4 -3
- package/dist/subagents/anthropic.cjs +86 -12
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +5 -4
- package/dist/subagents/vercel.cjs +86 -12
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +5 -4
- package/dist/tools/browser/anthropic.cjs +48 -9
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +6 -5
- package/dist/tools/browser/core.cjs +51 -19
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +5 -4
- package/dist/tools/browser/index.cjs +51 -19
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +10 -9
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/browser/openai.cjs +48 -9
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +6 -5
- package/dist/tools/browser/profiles/core.cjs +7 -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 +7 -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 +48 -9
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.js +6 -5
- package/dist/tools/codebase_search/anthropic.cjs +49 -11
- package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
- package/dist/tools/codebase_search/anthropic.js +5 -4
- package/dist/tools/codebase_search/core.cjs +49 -11
- package/dist/tools/codebase_search/core.cjs.map +1 -1
- package/dist/tools/codebase_search/core.js +4 -3
- package/dist/tools/codebase_search/index.cjs +49 -11
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +9 -8
- package/dist/tools/codebase_search/openai.cjs +49 -11
- package/dist/tools/codebase_search/openai.cjs.map +1 -1
- package/dist/tools/codebase_search/openai.js +5 -4
- package/dist/tools/codebase_search/vercel.cjs +49 -11
- package/dist/tools/codebase_search/vercel.cjs.map +1 -1
- package/dist/tools/codebase_search/vercel.js +5 -4
- package/dist/tools/fastapply/anthropic.cjs +95 -31
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +5 -4
- package/dist/tools/fastapply/apply.cjs +75 -26
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +3 -2
- package/dist/tools/fastapply/core.cjs +95 -31
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +4 -3
- package/dist/tools/fastapply/index.cjs +95 -31
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +9 -8
- package/dist/tools/fastapply/openai.cjs +95 -31
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +5 -4
- package/dist/tools/fastapply/vercel.cjs +95 -31
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +5 -4
- package/dist/tools/index.cjs +95 -31
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +9 -8
- package/dist/tools/utils/resilience.cjs +7 -1
- package/dist/tools/utils/resilience.cjs.map +1 -1
- package/dist/tools/utils/resilience.js +2 -2
- package/dist/tools/warp_grep/agent/runner.cjs +75 -5
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +3 -2
- package/dist/tools/warp_grep/anthropic.cjs +86 -12
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +5 -4
- package/dist/tools/warp_grep/client.cjs +86 -12
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +4 -3
- package/dist/tools/warp_grep/gemini.cjs +86 -12
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +4 -3
- package/dist/tools/warp_grep/gemini.js.map +1 -1
- package/dist/tools/warp_grep/index.cjs +86 -12
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.js +4 -3
- package/dist/tools/warp_grep/openai.cjs +86 -12
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +5 -4
- package/dist/tools/warp_grep/vercel.cjs +86 -12
- 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 +5 -4
- package/dist/version.cjs +7 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -1
- package/dist/chunk-4GQNYJBB.js.map +0 -1
- package/dist/chunk-7QMX45QD.js.map +0 -1
- package/dist/chunk-LECHLXI4.js.map +0 -1
- package/dist/chunk-LZQBVEY2.js.map +0 -1
- package/dist/chunk-OGMHU4PJ.js.map +0 -1
- package/dist/chunk-OOE2TKKY.js.map +0 -1
- package/dist/chunk-Y4NYT5L6.js.map +0 -1
- package/dist/chunk-ZG3YLRR5.js.map +0 -1
- package/dist/{chunk-JVKGSMEF.js.map → chunk-3NWJ74R4.js.map} +0 -0
- package/dist/{chunk-XUV5B27P.js.map → chunk-4DDD65QF.js.map} +0 -0
- package/dist/{chunk-DRTPCCEI.js.map → chunk-4FZXI4FI.js.map} +0 -0
- package/dist/{chunk-CNFHKQ42.js.map → chunk-BFNH475L.js.map} +0 -0
- package/dist/{chunk-NKUGRAYU.js.map → chunk-CRU3FQ54.js.map} +0 -0
- package/dist/{chunk-DXMNKPB6.js.map → chunk-DKPC5ZVX.js.map} +0 -0
- package/dist/{chunk-PWGBAVQ5.js.map → chunk-DVCIADH3.js.map} +0 -0
- package/dist/{chunk-YRHM3RCQ.js.map → chunk-EPYCKNQ3.js.map} +0 -0
- package/dist/{chunk-UKT3CKC7.js.map → chunk-N4SSQFYN.js.map} +0 -0
- package/dist/{chunk-UVRC4LKZ.js.map → chunk-Q7XZ6JGW.js.map} +0 -0
- package/dist/{chunk-UZX7SY33.js.map → chunk-RR7P4SMP.js.map} +0 -0
- package/dist/{chunk-UETFIUIG.js.map → chunk-VCFUU5TL.js.map} +0 -0
- package/dist/{chunk-5XTA7GCY.js.map → chunk-VDMF4WWF.js.map} +0 -0
- package/dist/{chunk-YBKT2UOK.js.map → chunk-XULEBEBX.js.map} +0 -0
- package/dist/{chunk-4Q6VFODP.js.map → chunk-ZEEHRQYJ.js.map} +0 -0
- package/dist/{chunk-VQSLLYKE.js.map → chunk-ZEMLB2KV.js.map} +0 -0
- package/dist/{client-PkB7g9SA.d.ts → client-DsAAqupx.d.ts} +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createExploreSubagent
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-VDMF4WWF.js";
|
|
4
|
+
import "../chunk-3HVVQHHX.js";
|
|
5
5
|
import "../chunk-63VHBANJ.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-NKFMGSUH.js";
|
|
7
7
|
import "../chunk-GVGJIXV2.js";
|
|
8
8
|
import "../chunk-B3AKP3RA.js";
|
|
9
9
|
import "../chunk-VNAGVCSP.js";
|
|
@@ -12,7 +12,8 @@ import "../chunk-I3J46TSB.js";
|
|
|
12
12
|
import "../chunk-GLQWEINZ.js";
|
|
13
13
|
import "../chunk-ZZ25FZG2.js";
|
|
14
14
|
import "../chunk-SCVWDNQP.js";
|
|
15
|
-
import "../chunk-
|
|
15
|
+
import "../chunk-5AM23TC7.js";
|
|
16
|
+
import "../chunk-CFCNSELX.js";
|
|
16
17
|
import "../chunk-PZ5AY32C.js";
|
|
17
18
|
export {
|
|
18
19
|
createExploreSubagent
|
|
@@ -220,7 +220,7 @@ function toRepoRelative(repoRoot, absPath) {
|
|
|
220
220
|
}
|
|
221
221
|
function isSymlink(p) {
|
|
222
222
|
try {
|
|
223
|
-
const st =
|
|
223
|
+
const st = import_fs2.default.lstatSync(p);
|
|
224
224
|
return st.isSymbolicLink();
|
|
225
225
|
} catch {
|
|
226
226
|
return false;
|
|
@@ -243,13 +243,13 @@ function fixPathRepetition(fullPath) {
|
|
|
243
243
|
}
|
|
244
244
|
function isTextualFile(filePath, maxBytes = 2e6) {
|
|
245
245
|
try {
|
|
246
|
-
const st =
|
|
246
|
+
const st = import_fs2.default.statSync(filePath);
|
|
247
247
|
if (!st.isFile()) return false;
|
|
248
248
|
if (st.size > maxBytes) return false;
|
|
249
|
-
const fd =
|
|
249
|
+
const fd = import_fs2.default.openSync(filePath, "r");
|
|
250
250
|
const buf = Buffer.alloc(512);
|
|
251
|
-
const read =
|
|
252
|
-
|
|
251
|
+
const read = import_fs2.default.readSync(fd, buf, 0, buf.length, 0);
|
|
252
|
+
import_fs2.default.closeSync(fd);
|
|
253
253
|
for (let i = 0; i < read; i++) {
|
|
254
254
|
const c = buf[i];
|
|
255
255
|
if (c === 0) return false;
|
|
@@ -259,11 +259,11 @@ function isTextualFile(filePath, maxBytes = 2e6) {
|
|
|
259
259
|
return false;
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
|
-
var
|
|
262
|
+
var import_fs2, import_path4;
|
|
263
263
|
var init_paths = __esm({
|
|
264
264
|
"tools/warp_grep/utils/paths.ts"() {
|
|
265
265
|
"use strict";
|
|
266
|
-
|
|
266
|
+
import_fs2 = __toESM(require("fs"), 1);
|
|
267
267
|
import_path4 = __toESM(require("path"), 1);
|
|
268
268
|
}
|
|
269
269
|
});
|
|
@@ -936,7 +936,7 @@ var import_openai = __toESM(require("openai"), 1);
|
|
|
936
936
|
// package.json
|
|
937
937
|
var package_default = {
|
|
938
938
|
name: "@morphllm/morphsdk",
|
|
939
|
-
version: "0.2.
|
|
939
|
+
version: "0.2.164",
|
|
940
940
|
description: "TypeScript SDK and CLI for Morph Fast Apply integration",
|
|
941
941
|
type: "module",
|
|
942
942
|
main: "./dist/index.cjs",
|
|
@@ -948,6 +948,11 @@ var package_default = {
|
|
|
948
948
|
import: "./dist/index.js",
|
|
949
949
|
require: "./dist/index.cjs"
|
|
950
950
|
},
|
|
951
|
+
"./logger": {
|
|
952
|
+
types: "./dist/logger.d.ts",
|
|
953
|
+
import: "./dist/logger.js",
|
|
954
|
+
require: "./dist/logger.cjs"
|
|
955
|
+
},
|
|
951
956
|
"./edge": {
|
|
952
957
|
types: "./dist/edge.d.ts",
|
|
953
958
|
import: "./dist/edge.js",
|
|
@@ -1106,6 +1111,7 @@ var package_default = {
|
|
|
1106
1111
|
"test:browser": "vitest run browser",
|
|
1107
1112
|
"test:agent": "npx tsx tests/fullAgentTest.ts",
|
|
1108
1113
|
"test:integration": "npx tsx tests/fullIntegrationTest.ts",
|
|
1114
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
1109
1115
|
"release:patch": "npm version patch && npm publish",
|
|
1110
1116
|
"release:minor": "npm version minor && npm publish",
|
|
1111
1117
|
"release:major": "npm version major && npm publish"
|
|
@@ -1176,6 +1182,46 @@ var SDK_VERSION = package_default.version;
|
|
|
1176
1182
|
|
|
1177
1183
|
// tools/warp_grep/agent/runner.ts
|
|
1178
1184
|
var import_path3 = __toESM(require("path"), 1);
|
|
1185
|
+
|
|
1186
|
+
// logger.ts
|
|
1187
|
+
var import_fs = require("fs");
|
|
1188
|
+
var MorphLogger = class {
|
|
1189
|
+
enabled;
|
|
1190
|
+
fileStream;
|
|
1191
|
+
constructor() {
|
|
1192
|
+
this.enabled = process.env.MORPH_DEBUG === "1" || !!process.env.MORPH_LOG_FILE;
|
|
1193
|
+
const f = process.env.MORPH_LOG_FILE;
|
|
1194
|
+
this.fileStream = f ? (0, import_fs.createWriteStream)(f, { flags: "a" }) : null;
|
|
1195
|
+
}
|
|
1196
|
+
debug(component, msg, data) {
|
|
1197
|
+
this._log("debug", component, msg, data);
|
|
1198
|
+
}
|
|
1199
|
+
info(component, msg, data) {
|
|
1200
|
+
this._log("info", component, msg, data);
|
|
1201
|
+
}
|
|
1202
|
+
warn(component, msg, data) {
|
|
1203
|
+
this._log("warn", component, msg, data);
|
|
1204
|
+
}
|
|
1205
|
+
error(component, msg, data) {
|
|
1206
|
+
this._log("error", component, msg, data);
|
|
1207
|
+
}
|
|
1208
|
+
enable() {
|
|
1209
|
+
this.enabled = true;
|
|
1210
|
+
}
|
|
1211
|
+
get isEnabled() {
|
|
1212
|
+
return this.enabled;
|
|
1213
|
+
}
|
|
1214
|
+
_log(level, component, msg, data) {
|
|
1215
|
+
if (level !== "error" && !this.enabled) return;
|
|
1216
|
+
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
1217
|
+
const prefix = `[${ts}] [${level.toUpperCase()}] [${component}]`;
|
|
1218
|
+
console.error(data ? `${prefix} ${msg} ${JSON.stringify(data)}` : `${prefix} ${msg}`);
|
|
1219
|
+
this.fileStream?.write(JSON.stringify({ ts, level, component, msg, ...data && { data } }) + "\n");
|
|
1220
|
+
}
|
|
1221
|
+
};
|
|
1222
|
+
var logger = new MorphLogger();
|
|
1223
|
+
|
|
1224
|
+
// tools/warp_grep/agent/runner.ts
|
|
1179
1225
|
var DEFAULT_API_URL = "https://api.morphllm.com";
|
|
1180
1226
|
var TOOL_SPECS = [
|
|
1181
1227
|
{
|
|
@@ -1298,6 +1344,8 @@ async function callModel(messages, model, options = {}) {
|
|
|
1298
1344
|
defaultHeaders: { "X-Morph-SDK-Version": SDK_VERSION }
|
|
1299
1345
|
});
|
|
1300
1346
|
const MAX_EMPTY_RETRIES = 1;
|
|
1347
|
+
logger.debug("WarpGrep", "model_call", { url: baseURL, model, message_count: messages.length });
|
|
1348
|
+
const callStartTime = Date.now();
|
|
1301
1349
|
for (let attempt = 0; attempt <= MAX_EMPTY_RETRIES; attempt++) {
|
|
1302
1350
|
let data;
|
|
1303
1351
|
try {
|
|
@@ -1310,10 +1358,16 @@ async function callModel(messages, model, options = {}) {
|
|
|
1310
1358
|
...options.search_type ? { search_type: options.search_type } : {}
|
|
1311
1359
|
});
|
|
1312
1360
|
} catch (error) {
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1361
|
+
const callLatencyMs = Date.now() - callStartTime;
|
|
1362
|
+
if (error instanceof import_openai.default.APIError) {
|
|
1363
|
+
logger.error("WarpGrep", "model_call_error", { status: error.status, error: error.message, latency_ms: callLatencyMs });
|
|
1364
|
+
if (error.status === 404) {
|
|
1365
|
+
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";
|
|
1366
|
+
const errorText = error.message?.trim();
|
|
1367
|
+
throw new Error(errorText || defaultMsg);
|
|
1368
|
+
}
|
|
1369
|
+
} else {
|
|
1370
|
+
logger.error("WarpGrep", "model_call_error", { status: void 0, error: error instanceof Error ? error.message : String(error), latency_ms: callLatencyMs });
|
|
1317
1371
|
}
|
|
1318
1372
|
throw error;
|
|
1319
1373
|
}
|
|
@@ -1332,6 +1386,7 @@ async function callModel(messages, model, options = {}) {
|
|
|
1332
1386
|
function: { name: tc.function.name, arguments: tc.function.arguments }
|
|
1333
1387
|
}));
|
|
1334
1388
|
if (message.content || toolCalls.length > 0) {
|
|
1389
|
+
logger.debug("WarpGrep", "model_call_complete", { latency_ms: Date.now() - callStartTime, tool_calls_count: toolCalls.length, finish_reason: choice?.finish_reason ?? "unknown" });
|
|
1335
1390
|
return { content: message.content ?? null, tool_calls: toolCalls };
|
|
1336
1391
|
}
|
|
1337
1392
|
if (attempt === MAX_EMPTY_RETRIES) {
|
|
@@ -1402,9 +1457,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1402
1457
|
const model = config.model || DEFAULT_MODEL;
|
|
1403
1458
|
const messages = [];
|
|
1404
1459
|
const maxTurns = AGENT_CONFIG.MAX_TURNS;
|
|
1460
|
+
logger.debug("WarpGrep", "session_start", { search_term: config.searchTerm, model, max_turns: maxTurns });
|
|
1405
1461
|
const initialStateStart = Date.now();
|
|
1406
1462
|
const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });
|
|
1407
1463
|
timings.initial_state_ms = Date.now() - initialStateStart;
|
|
1464
|
+
logger.debug("WarpGrep", "initial_state", { system_prompt_len: initialState.length, user_message_len: initialState.length });
|
|
1408
1465
|
messages.push({ role: "user", content: initialState });
|
|
1409
1466
|
const provider = config.provider;
|
|
1410
1467
|
const errors = [];
|
|
@@ -1412,7 +1469,13 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1412
1469
|
let terminationReason = "terminated";
|
|
1413
1470
|
for (let turn = 1; turn <= maxTurns; turn += 1) {
|
|
1414
1471
|
const turnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };
|
|
1472
|
+
logger.debug("WarpGrep", "turn_start", { turn, message_count: messages.length });
|
|
1473
|
+
const beforeChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1415
1474
|
enforceContextLimit(messages);
|
|
1475
|
+
const afterChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1476
|
+
if (afterChars < beforeChars) {
|
|
1477
|
+
logger.debug("WarpGrep", "context_truncated", { before_chars: beforeChars, after_chars: afterChars });
|
|
1478
|
+
}
|
|
1416
1479
|
const modelCallStart = Date.now();
|
|
1417
1480
|
const response = await callModel(messages, model, {
|
|
1418
1481
|
morphApiKey: config.morphApiKey,
|
|
@@ -1423,6 +1486,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1423
1486
|
}).catch((e) => {
|
|
1424
1487
|
const errMsg = e instanceof Error ? e.message : String(e);
|
|
1425
1488
|
console.error(`[warp_grep] Morph API call failed on turn ${turn}:`, errMsg);
|
|
1489
|
+
logger.error("WarpGrep", "error", { turn, error: errMsg, phase: "model_call" });
|
|
1426
1490
|
errors.push({ message: errMsg });
|
|
1427
1491
|
return null;
|
|
1428
1492
|
});
|
|
@@ -1432,6 +1496,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1432
1496
|
break;
|
|
1433
1497
|
}
|
|
1434
1498
|
const toolCalls = response.tool_calls;
|
|
1499
|
+
logger.debug("WarpGrep", "model_response", { turn, tool_calls: toolCalls.map((tc) => tc.function.name), latency_ms: turnMetrics.morph_api_ms });
|
|
1435
1500
|
messages.push({
|
|
1436
1501
|
role: "assistant",
|
|
1437
1502
|
content: response.content,
|
|
@@ -1458,6 +1523,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1458
1523
|
const files = parseFinishFiles(filesStr);
|
|
1459
1524
|
finishMeta = { files };
|
|
1460
1525
|
terminationReason = "completed";
|
|
1526
|
+
logger.debug("WarpGrep", "finish", { turns: turn, files: files.map((f) => f.path) });
|
|
1461
1527
|
if (files.length === 0) {
|
|
1462
1528
|
const payload2 = filesStr || "No relevant code found.";
|
|
1463
1529
|
timings.turns.push(turnMetrics);
|
|
@@ -1476,7 +1542,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1476
1542
|
const results = await Promise.all(
|
|
1477
1543
|
toolCalls.map(async (tc) => {
|
|
1478
1544
|
const args = safeParseJSON(tc.function.arguments);
|
|
1545
|
+
const argsSummary = Object.fromEntries(Object.entries(args).map(([k, v]) => [k, typeof v === "string" && v.length > 100 ? v.slice(0, 100) + "..." : v]));
|
|
1546
|
+
logger.debug("WarpGrep", "tool_exec", { turn, tool: tc.function.name, args_summary: argsSummary });
|
|
1547
|
+
const toolStart = Date.now();
|
|
1479
1548
|
const output = await executeTool(provider, tc.function.name, args, repoRoot).catch((err) => String(err));
|
|
1549
|
+
logger.debug("WarpGrep", "tool_result", { turn, tool: tc.function.name, result_len: output.length, latency_ms: Date.now() - toolStart });
|
|
1480
1550
|
return { tool_call_id: tc.id, content: output };
|
|
1481
1551
|
})
|
|
1482
1552
|
);
|
|
@@ -1984,12 +2054,16 @@ var WarpGrepClient = class {
|
|
|
1984
2054
|
async _resolveGitHubRepo(input) {
|
|
1985
2055
|
const { owner, repo } = parseGitHubUrl(input.github);
|
|
1986
2056
|
const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;
|
|
2057
|
+
logger.debug("WarpGrep", "github_resolve", { owner_repo: `${owner}/${repo}`, branch: input.branch });
|
|
2058
|
+
const resolveStart = Date.now();
|
|
1987
2059
|
const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);
|
|
1988
2060
|
if (!importRes.ok) {
|
|
1989
2061
|
const text = await importRes.text().catch(() => importRes.statusText);
|
|
2062
|
+
logger.error("WarpGrep", "github_resolve_failed", { owner_repo: `${owner}/${repo}`, status: importRes.status, error: text });
|
|
1990
2063
|
throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);
|
|
1991
2064
|
}
|
|
1992
2065
|
const { repoId, defaultBranch } = await importRes.json();
|
|
2066
|
+
logger.debug("WarpGrep", "github_repo_fetched", { repo_id: repoId, default_branch: defaultBranch, latency_ms: Date.now() - resolveStart });
|
|
1993
2067
|
return {
|
|
1994
2068
|
repo,
|
|
1995
2069
|
remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch })
|