@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
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
createWarpGrepTool,
|
|
5
5
|
execute,
|
|
6
6
|
warpGrepTool
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-CRU3FQ54.js";
|
|
8
8
|
import "../../chunk-Q6QCHAMD.js";
|
|
9
9
|
import {
|
|
10
10
|
formatResult
|
|
11
|
-
} from "../../chunk-
|
|
11
|
+
} from "../../chunk-3HVVQHHX.js";
|
|
12
12
|
import "../../chunk-63VHBANJ.js";
|
|
13
|
-
import "../../chunk-
|
|
13
|
+
import "../../chunk-NKFMGSUH.js";
|
|
14
14
|
import "../../chunk-GVGJIXV2.js";
|
|
15
15
|
import "../../chunk-B3AKP3RA.js";
|
|
16
16
|
import "../../chunk-VNAGVCSP.js";
|
|
@@ -18,7 +18,8 @@ import "../../chunk-FBRNUWEB.js";
|
|
|
18
18
|
import "../../chunk-I3J46TSB.js";
|
|
19
19
|
import "../../chunk-GLQWEINZ.js";
|
|
20
20
|
import "../../chunk-SCVWDNQP.js";
|
|
21
|
-
import "../../chunk-
|
|
21
|
+
import "../../chunk-5AM23TC7.js";
|
|
22
|
+
import "../../chunk-CFCNSELX.js";
|
|
22
23
|
import "../../chunk-PZ5AY32C.js";
|
|
23
24
|
export {
|
|
24
25
|
createGitHubReadFileTool,
|
|
@@ -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
|
});
|
|
@@ -940,7 +940,7 @@ var import_openai = __toESM(require("openai"), 1);
|
|
|
940
940
|
// package.json
|
|
941
941
|
var package_default = {
|
|
942
942
|
name: "@morphllm/morphsdk",
|
|
943
|
-
version: "0.2.
|
|
943
|
+
version: "0.2.164",
|
|
944
944
|
description: "TypeScript SDK and CLI for Morph Fast Apply integration",
|
|
945
945
|
type: "module",
|
|
946
946
|
main: "./dist/index.cjs",
|
|
@@ -952,6 +952,11 @@ var package_default = {
|
|
|
952
952
|
import: "./dist/index.js",
|
|
953
953
|
require: "./dist/index.cjs"
|
|
954
954
|
},
|
|
955
|
+
"./logger": {
|
|
956
|
+
types: "./dist/logger.d.ts",
|
|
957
|
+
import: "./dist/logger.js",
|
|
958
|
+
require: "./dist/logger.cjs"
|
|
959
|
+
},
|
|
955
960
|
"./edge": {
|
|
956
961
|
types: "./dist/edge.d.ts",
|
|
957
962
|
import: "./dist/edge.js",
|
|
@@ -1110,6 +1115,7 @@ var package_default = {
|
|
|
1110
1115
|
"test:browser": "vitest run browser",
|
|
1111
1116
|
"test:agent": "npx tsx tests/fullAgentTest.ts",
|
|
1112
1117
|
"test:integration": "npx tsx tests/fullIntegrationTest.ts",
|
|
1118
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
1113
1119
|
"release:patch": "npm version patch && npm publish",
|
|
1114
1120
|
"release:minor": "npm version minor && npm publish",
|
|
1115
1121
|
"release:major": "npm version major && npm publish"
|
|
@@ -1180,6 +1186,46 @@ var SDK_VERSION = package_default.version;
|
|
|
1180
1186
|
|
|
1181
1187
|
// tools/warp_grep/agent/runner.ts
|
|
1182
1188
|
var import_path3 = __toESM(require("path"), 1);
|
|
1189
|
+
|
|
1190
|
+
// logger.ts
|
|
1191
|
+
var import_fs = require("fs");
|
|
1192
|
+
var MorphLogger = class {
|
|
1193
|
+
enabled;
|
|
1194
|
+
fileStream;
|
|
1195
|
+
constructor() {
|
|
1196
|
+
this.enabled = process.env.MORPH_DEBUG === "1" || !!process.env.MORPH_LOG_FILE;
|
|
1197
|
+
const f = process.env.MORPH_LOG_FILE;
|
|
1198
|
+
this.fileStream = f ? (0, import_fs.createWriteStream)(f, { flags: "a" }) : null;
|
|
1199
|
+
}
|
|
1200
|
+
debug(component, msg, data) {
|
|
1201
|
+
this._log("debug", component, msg, data);
|
|
1202
|
+
}
|
|
1203
|
+
info(component, msg, data) {
|
|
1204
|
+
this._log("info", component, msg, data);
|
|
1205
|
+
}
|
|
1206
|
+
warn(component, msg, data) {
|
|
1207
|
+
this._log("warn", component, msg, data);
|
|
1208
|
+
}
|
|
1209
|
+
error(component, msg, data) {
|
|
1210
|
+
this._log("error", component, msg, data);
|
|
1211
|
+
}
|
|
1212
|
+
enable() {
|
|
1213
|
+
this.enabled = true;
|
|
1214
|
+
}
|
|
1215
|
+
get isEnabled() {
|
|
1216
|
+
return this.enabled;
|
|
1217
|
+
}
|
|
1218
|
+
_log(level, component, msg, data) {
|
|
1219
|
+
if (level !== "error" && !this.enabled) return;
|
|
1220
|
+
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
1221
|
+
const prefix = `[${ts}] [${level.toUpperCase()}] [${component}]`;
|
|
1222
|
+
console.error(data ? `${prefix} ${msg} ${JSON.stringify(data)}` : `${prefix} ${msg}`);
|
|
1223
|
+
this.fileStream?.write(JSON.stringify({ ts, level, component, msg, ...data && { data } }) + "\n");
|
|
1224
|
+
}
|
|
1225
|
+
};
|
|
1226
|
+
var logger = new MorphLogger();
|
|
1227
|
+
|
|
1228
|
+
// tools/warp_grep/agent/runner.ts
|
|
1183
1229
|
var DEFAULT_API_URL = "https://api.morphllm.com";
|
|
1184
1230
|
var TOOL_SPECS = [
|
|
1185
1231
|
{
|
|
@@ -1302,6 +1348,8 @@ async function callModel(messages, model, options = {}) {
|
|
|
1302
1348
|
defaultHeaders: { "X-Morph-SDK-Version": SDK_VERSION }
|
|
1303
1349
|
});
|
|
1304
1350
|
const MAX_EMPTY_RETRIES = 1;
|
|
1351
|
+
logger.debug("WarpGrep", "model_call", { url: baseURL, model, message_count: messages.length });
|
|
1352
|
+
const callStartTime = Date.now();
|
|
1305
1353
|
for (let attempt = 0; attempt <= MAX_EMPTY_RETRIES; attempt++) {
|
|
1306
1354
|
let data;
|
|
1307
1355
|
try {
|
|
@@ -1314,10 +1362,16 @@ async function callModel(messages, model, options = {}) {
|
|
|
1314
1362
|
...options.search_type ? { search_type: options.search_type } : {}
|
|
1315
1363
|
});
|
|
1316
1364
|
} catch (error) {
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1365
|
+
const callLatencyMs = Date.now() - callStartTime;
|
|
1366
|
+
if (error instanceof import_openai.default.APIError) {
|
|
1367
|
+
logger.error("WarpGrep", "model_call_error", { status: error.status, error: error.message, latency_ms: callLatencyMs });
|
|
1368
|
+
if (error.status === 404) {
|
|
1369
|
+
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";
|
|
1370
|
+
const errorText = error.message?.trim();
|
|
1371
|
+
throw new Error(errorText || defaultMsg);
|
|
1372
|
+
}
|
|
1373
|
+
} else {
|
|
1374
|
+
logger.error("WarpGrep", "model_call_error", { status: void 0, error: error instanceof Error ? error.message : String(error), latency_ms: callLatencyMs });
|
|
1321
1375
|
}
|
|
1322
1376
|
throw error;
|
|
1323
1377
|
}
|
|
@@ -1336,6 +1390,7 @@ async function callModel(messages, model, options = {}) {
|
|
|
1336
1390
|
function: { name: tc.function.name, arguments: tc.function.arguments }
|
|
1337
1391
|
}));
|
|
1338
1392
|
if (message.content || toolCalls.length > 0) {
|
|
1393
|
+
logger.debug("WarpGrep", "model_call_complete", { latency_ms: Date.now() - callStartTime, tool_calls_count: toolCalls.length, finish_reason: choice?.finish_reason ?? "unknown" });
|
|
1339
1394
|
return { content: message.content ?? null, tool_calls: toolCalls };
|
|
1340
1395
|
}
|
|
1341
1396
|
if (attempt === MAX_EMPTY_RETRIES) {
|
|
@@ -1406,9 +1461,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1406
1461
|
const model = config.model || DEFAULT_MODEL;
|
|
1407
1462
|
const messages = [];
|
|
1408
1463
|
const maxTurns = AGENT_CONFIG.MAX_TURNS;
|
|
1464
|
+
logger.debug("WarpGrep", "session_start", { search_term: config.searchTerm, model, max_turns: maxTurns });
|
|
1409
1465
|
const initialStateStart = Date.now();
|
|
1410
1466
|
const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });
|
|
1411
1467
|
timings.initial_state_ms = Date.now() - initialStateStart;
|
|
1468
|
+
logger.debug("WarpGrep", "initial_state", { system_prompt_len: initialState.length, user_message_len: initialState.length });
|
|
1412
1469
|
messages.push({ role: "user", content: initialState });
|
|
1413
1470
|
const provider = config.provider;
|
|
1414
1471
|
const errors = [];
|
|
@@ -1416,7 +1473,13 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1416
1473
|
let terminationReason = "terminated";
|
|
1417
1474
|
for (let turn = 1; turn <= maxTurns; turn += 1) {
|
|
1418
1475
|
const turnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };
|
|
1476
|
+
logger.debug("WarpGrep", "turn_start", { turn, message_count: messages.length });
|
|
1477
|
+
const beforeChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1419
1478
|
enforceContextLimit(messages);
|
|
1479
|
+
const afterChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1480
|
+
if (afterChars < beforeChars) {
|
|
1481
|
+
logger.debug("WarpGrep", "context_truncated", { before_chars: beforeChars, after_chars: afterChars });
|
|
1482
|
+
}
|
|
1420
1483
|
const modelCallStart = Date.now();
|
|
1421
1484
|
const response = await callModel(messages, model, {
|
|
1422
1485
|
morphApiKey: config.morphApiKey,
|
|
@@ -1427,6 +1490,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1427
1490
|
}).catch((e) => {
|
|
1428
1491
|
const errMsg = e instanceof Error ? e.message : String(e);
|
|
1429
1492
|
console.error(`[warp_grep] Morph API call failed on turn ${turn}:`, errMsg);
|
|
1493
|
+
logger.error("WarpGrep", "error", { turn, error: errMsg, phase: "model_call" });
|
|
1430
1494
|
errors.push({ message: errMsg });
|
|
1431
1495
|
return null;
|
|
1432
1496
|
});
|
|
@@ -1436,6 +1500,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1436
1500
|
break;
|
|
1437
1501
|
}
|
|
1438
1502
|
const toolCalls = response.tool_calls;
|
|
1503
|
+
logger.debug("WarpGrep", "model_response", { turn, tool_calls: toolCalls.map((tc) => tc.function.name), latency_ms: turnMetrics.morph_api_ms });
|
|
1439
1504
|
messages.push({
|
|
1440
1505
|
role: "assistant",
|
|
1441
1506
|
content: response.content,
|
|
@@ -1462,6 +1527,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1462
1527
|
const files = parseFinishFiles(filesStr);
|
|
1463
1528
|
finishMeta = { files };
|
|
1464
1529
|
terminationReason = "completed";
|
|
1530
|
+
logger.debug("WarpGrep", "finish", { turns: turn, files: files.map((f) => f.path) });
|
|
1465
1531
|
if (files.length === 0) {
|
|
1466
1532
|
const payload2 = filesStr || "No relevant code found.";
|
|
1467
1533
|
timings.turns.push(turnMetrics);
|
|
@@ -1480,7 +1546,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1480
1546
|
const results = await Promise.all(
|
|
1481
1547
|
toolCalls.map(async (tc) => {
|
|
1482
1548
|
const args = safeParseJSON(tc.function.arguments);
|
|
1549
|
+
const argsSummary = Object.fromEntries(Object.entries(args).map(([k, v]) => [k, typeof v === "string" && v.length > 100 ? v.slice(0, 100) + "..." : v]));
|
|
1550
|
+
logger.debug("WarpGrep", "tool_exec", { turn, tool: tc.function.name, args_summary: argsSummary });
|
|
1551
|
+
const toolStart = Date.now();
|
|
1483
1552
|
const output = await executeTool(provider, tc.function.name, args, repoRoot).catch((err) => String(err));
|
|
1553
|
+
logger.debug("WarpGrep", "tool_result", { turn, tool: tc.function.name, result_len: output.length, latency_ms: Date.now() - toolStart });
|
|
1484
1554
|
return { tool_call_id: tc.id, content: output };
|
|
1485
1555
|
})
|
|
1486
1556
|
);
|
|
@@ -1988,12 +2058,16 @@ var WarpGrepClient = class {
|
|
|
1988
2058
|
async _resolveGitHubRepo(input) {
|
|
1989
2059
|
const { owner, repo } = parseGitHubUrl(input.github);
|
|
1990
2060
|
const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;
|
|
2061
|
+
logger.debug("WarpGrep", "github_resolve", { owner_repo: `${owner}/${repo}`, branch: input.branch });
|
|
2062
|
+
const resolveStart = Date.now();
|
|
1991
2063
|
const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);
|
|
1992
2064
|
if (!importRes.ok) {
|
|
1993
2065
|
const text = await importRes.text().catch(() => importRes.statusText);
|
|
2066
|
+
logger.error("WarpGrep", "github_resolve_failed", { owner_repo: `${owner}/${repo}`, status: importRes.status, error: text });
|
|
1994
2067
|
throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);
|
|
1995
2068
|
}
|
|
1996
2069
|
const { repoId, defaultBranch } = await importRes.json();
|
|
2070
|
+
logger.debug("WarpGrep", "github_repo_fetched", { repo_id: repoId, default_branch: defaultBranch, latency_ms: Date.now() - resolveStart });
|
|
1997
2071
|
return {
|
|
1998
2072
|
repo,
|
|
1999
2073
|
remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch })
|