@morphllm/morphsdk 0.2.161 → 0.2.163
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-JIPYZNK3.js → chunk-2KDJKRZG.js} +2 -2
- package/dist/chunk-5AM23TC7.js +42 -0
- package/dist/chunk-5AM23TC7.js.map +1 -0
- package/dist/{chunk-PQXJ32G4.js → chunk-5BMWOPYW.js} +2 -2
- package/dist/{chunk-F2SBKBBS.js → chunk-5FYJMU6H.js} +2 -2
- package/dist/{chunk-KP3CAEH5.js → chunk-6PFGM4CM.js} +2 -2
- package/dist/{chunk-5R3QCYHW.js → chunk-6YOSNPHS.js} +2 -2
- package/dist/{chunk-G3E75GPM.js → chunk-6YTCBLRI.js} +2 -2
- package/dist/{chunk-2CE4PG2F.js → chunk-COUYHTIO.js} +2 -2
- package/dist/{chunk-KCJRKSMG.js → chunk-CUMC7Z5R.js} +11 -26
- package/dist/chunk-CUMC7Z5R.js.map +1 -0
- package/dist/{chunk-HDZ4XYUX.js → chunk-EJBWDGTH.js} +2 -2
- package/dist/{chunk-DKQMGEHV.js → chunk-FNCPPCPV.js} +2 -2
- package/dist/{chunk-IHSLH64T.js → chunk-FQXUOZBX.js} +9 -12
- package/dist/chunk-FQXUOZBX.js.map +1 -0
- package/dist/{chunk-27VVVW57.js → chunk-HBH56DLN.js} +2 -2
- package/dist/{chunk-5GVI7L4O.js → chunk-HFN3YCF4.js} +2 -2
- package/dist/{chunk-QQBEGCX2.js → chunk-HMGC7FLZ.js} +2 -2
- package/dist/{chunk-KF2AYKGJ.js → chunk-KHR4CZMX.js} +24 -17
- package/dist/{chunk-KF2AYKGJ.js.map → chunk-KHR4CZMX.js.map} +1 -1
- package/dist/{chunk-LGF2WTXG.js → chunk-LSHQISAX.js} +9 -2
- package/dist/chunk-LSHQISAX.js.map +1 -0
- package/dist/{chunk-L6WYOSFK.js → chunk-LST7MZOZ.js} +7 -2
- package/dist/chunk-LST7MZOZ.js.map +1 -0
- package/dist/{chunk-63JAZOI3.js → chunk-LW5EAPZ6.js} +2 -2
- package/dist/{chunk-N4EFVT45.js → chunk-NNATBEOF.js} +2 -2
- package/dist/{chunk-RZS5DQAX.js → chunk-OKFW4KGU.js} +2 -2
- package/dist/{chunk-QR34LBOS.js → chunk-QXGOEDZD.js} +2 -2
- package/dist/{chunk-442YHCTX.js → chunk-SELI567A.js} +12 -21
- package/dist/chunk-SELI567A.js.map +1 -0
- package/dist/{chunk-VM4TVOBU.js → chunk-VMNEYCFP.js} +17 -6
- package/dist/chunk-VMNEYCFP.js.map +1 -0
- package/dist/{chunk-NBGHPRU6.js → chunk-WM6SBI4B.js} +37 -29
- package/dist/chunk-WM6SBI4B.js.map +1 -0
- package/dist/{chunk-CMRUAJYD.js → chunk-ZMCDGAGF.js} +33 -6
- package/dist/chunk-ZMCDGAGF.js.map +1 -0
- package/dist/client.cjs +186 -117
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +23 -22
- package/dist/edge.cjs +84 -52
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.js +5 -4
- package/dist/index.cjs +188 -117
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +23 -22
- package/dist/modelrouter/core.cjs +50 -25
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.js +4 -3
- package/dist/modelrouter/index.cjs +50 -25
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.js +4 -3
- package/dist/subagents/anthropic.cjs +85 -12
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +5 -4
- package/dist/subagents/vercel.cjs +85 -12
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +5 -4
- package/dist/tools/browser/anthropic.cjs +47 -9
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +6 -5
- package/dist/tools/browser/core.cjs +50 -19
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +5 -4
- package/dist/tools/browser/index.cjs +50 -19
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +8 -7
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/browser/openai.cjs +47 -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 +6 -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 +6 -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 +47 -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 +48 -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 +48 -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 +48 -11
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +7 -6
- package/dist/tools/codebase_search/openai.cjs +48 -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 +48 -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 +96 -33
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +5 -4
- package/dist/tools/fastapply/apply.cjs +76 -28
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +3 -2
- package/dist/tools/fastapply/core.cjs +96 -33
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +4 -3
- package/dist/tools/fastapply/index.cjs +96 -33
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +7 -6
- package/dist/tools/fastapply/openai.cjs +96 -33
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +5 -4
- package/dist/tools/fastapply/types.cjs.map +1 -1
- package/dist/tools/fastapply/types.d.ts +4 -4
- package/dist/tools/fastapply/vercel.cjs +96 -33
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +5 -4
- package/dist/tools/index.cjs +96 -33
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +7 -6
- package/dist/tools/utils/resilience.cjs +6 -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 +74 -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 +85 -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 +85 -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 +85 -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 +85 -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 +85 -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 +85 -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 +6 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -1
- package/dist/chunk-442YHCTX.js.map +0 -1
- package/dist/chunk-CMRUAJYD.js.map +0 -1
- package/dist/chunk-IHSLH64T.js.map +0 -1
- package/dist/chunk-KCJRKSMG.js.map +0 -1
- package/dist/chunk-L6WYOSFK.js.map +0 -1
- package/dist/chunk-LGF2WTXG.js.map +0 -1
- package/dist/chunk-NBGHPRU6.js.map +0 -1
- package/dist/chunk-VM4TVOBU.js.map +0 -1
- package/dist/{chunk-JIPYZNK3.js.map → chunk-2KDJKRZG.js.map} +0 -0
- package/dist/{chunk-PQXJ32G4.js.map → chunk-5BMWOPYW.js.map} +0 -0
- package/dist/{chunk-F2SBKBBS.js.map → chunk-5FYJMU6H.js.map} +0 -0
- package/dist/{chunk-KP3CAEH5.js.map → chunk-6PFGM4CM.js.map} +0 -0
- package/dist/{chunk-5R3QCYHW.js.map → chunk-6YOSNPHS.js.map} +0 -0
- package/dist/{chunk-G3E75GPM.js.map → chunk-6YTCBLRI.js.map} +0 -0
- package/dist/{chunk-2CE4PG2F.js.map → chunk-COUYHTIO.js.map} +0 -0
- package/dist/{chunk-HDZ4XYUX.js.map → chunk-EJBWDGTH.js.map} +0 -0
- package/dist/{chunk-DKQMGEHV.js.map → chunk-FNCPPCPV.js.map} +0 -0
- package/dist/{chunk-27VVVW57.js.map → chunk-HBH56DLN.js.map} +0 -0
- package/dist/{chunk-5GVI7L4O.js.map → chunk-HFN3YCF4.js.map} +0 -0
- package/dist/{chunk-QQBEGCX2.js.map → chunk-HMGC7FLZ.js.map} +0 -0
- package/dist/{chunk-63JAZOI3.js.map → chunk-LW5EAPZ6.js.map} +0 -0
- package/dist/{chunk-N4EFVT45.js.map → chunk-NNATBEOF.js.map} +0 -0
- package/dist/{chunk-RZS5DQAX.js.map → chunk-OKFW4KGU.js.map} +0 -0
- package/dist/{chunk-QR34LBOS.js.map → chunk-QXGOEDZD.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-LW5EAPZ6.js";
|
|
4
|
+
import "../chunk-LSHQISAX.js";
|
|
5
5
|
import "../chunk-63VHBANJ.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-ZMCDGAGF.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-LST7MZOZ.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.163",
|
|
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",
|
|
@@ -1176,6 +1181,46 @@ var SDK_VERSION = package_default.version;
|
|
|
1176
1181
|
|
|
1177
1182
|
// tools/warp_grep/agent/runner.ts
|
|
1178
1183
|
var import_path3 = __toESM(require("path"), 1);
|
|
1184
|
+
|
|
1185
|
+
// logger.ts
|
|
1186
|
+
var import_fs = require("fs");
|
|
1187
|
+
var MorphLogger = class {
|
|
1188
|
+
enabled;
|
|
1189
|
+
fileStream;
|
|
1190
|
+
constructor() {
|
|
1191
|
+
this.enabled = process.env.MORPH_DEBUG === "1" || !!process.env.MORPH_LOG_FILE;
|
|
1192
|
+
const f = process.env.MORPH_LOG_FILE;
|
|
1193
|
+
this.fileStream = f ? (0, import_fs.createWriteStream)(f, { flags: "a" }) : null;
|
|
1194
|
+
}
|
|
1195
|
+
debug(component, msg, data) {
|
|
1196
|
+
this._log("debug", component, msg, data);
|
|
1197
|
+
}
|
|
1198
|
+
info(component, msg, data) {
|
|
1199
|
+
this._log("info", component, msg, data);
|
|
1200
|
+
}
|
|
1201
|
+
warn(component, msg, data) {
|
|
1202
|
+
this._log("warn", component, msg, data);
|
|
1203
|
+
}
|
|
1204
|
+
error(component, msg, data) {
|
|
1205
|
+
this._log("error", component, msg, data);
|
|
1206
|
+
}
|
|
1207
|
+
enable() {
|
|
1208
|
+
this.enabled = true;
|
|
1209
|
+
}
|
|
1210
|
+
get isEnabled() {
|
|
1211
|
+
return this.enabled;
|
|
1212
|
+
}
|
|
1213
|
+
_log(level, component, msg, data) {
|
|
1214
|
+
if (level !== "error" && !this.enabled) return;
|
|
1215
|
+
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
1216
|
+
const prefix = `[${ts}] [${level.toUpperCase()}] [${component}]`;
|
|
1217
|
+
console.error(data ? `${prefix} ${msg} ${JSON.stringify(data)}` : `${prefix} ${msg}`);
|
|
1218
|
+
this.fileStream?.write(JSON.stringify({ ts, level, component, msg, ...data && { data } }) + "\n");
|
|
1219
|
+
}
|
|
1220
|
+
};
|
|
1221
|
+
var logger = new MorphLogger();
|
|
1222
|
+
|
|
1223
|
+
// tools/warp_grep/agent/runner.ts
|
|
1179
1224
|
var DEFAULT_API_URL = "https://api.morphllm.com";
|
|
1180
1225
|
var TOOL_SPECS = [
|
|
1181
1226
|
{
|
|
@@ -1298,6 +1343,8 @@ async function callModel(messages, model, options = {}) {
|
|
|
1298
1343
|
defaultHeaders: { "X-Morph-SDK-Version": SDK_VERSION }
|
|
1299
1344
|
});
|
|
1300
1345
|
const MAX_EMPTY_RETRIES = 1;
|
|
1346
|
+
logger.debug("WarpGrep", "model_call", { url: baseURL, model, message_count: messages.length });
|
|
1347
|
+
const callStartTime = Date.now();
|
|
1301
1348
|
for (let attempt = 0; attempt <= MAX_EMPTY_RETRIES; attempt++) {
|
|
1302
1349
|
let data;
|
|
1303
1350
|
try {
|
|
@@ -1310,10 +1357,16 @@ async function callModel(messages, model, options = {}) {
|
|
|
1310
1357
|
...options.search_type ? { search_type: options.search_type } : {}
|
|
1311
1358
|
});
|
|
1312
1359
|
} catch (error) {
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1360
|
+
const callLatencyMs = Date.now() - callStartTime;
|
|
1361
|
+
if (error instanceof import_openai.default.APIError) {
|
|
1362
|
+
logger.error("WarpGrep", "model_call_error", { status: error.status, error: error.message, latency_ms: callLatencyMs });
|
|
1363
|
+
if (error.status === 404) {
|
|
1364
|
+
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";
|
|
1365
|
+
const errorText = error.message?.trim();
|
|
1366
|
+
throw new Error(errorText || defaultMsg);
|
|
1367
|
+
}
|
|
1368
|
+
} else {
|
|
1369
|
+
logger.error("WarpGrep", "model_call_error", { status: void 0, error: error instanceof Error ? error.message : String(error), latency_ms: callLatencyMs });
|
|
1317
1370
|
}
|
|
1318
1371
|
throw error;
|
|
1319
1372
|
}
|
|
@@ -1332,6 +1385,7 @@ async function callModel(messages, model, options = {}) {
|
|
|
1332
1385
|
function: { name: tc.function.name, arguments: tc.function.arguments }
|
|
1333
1386
|
}));
|
|
1334
1387
|
if (message.content || toolCalls.length > 0) {
|
|
1388
|
+
logger.debug("WarpGrep", "model_call_complete", { latency_ms: Date.now() - callStartTime, tool_calls_count: toolCalls.length, finish_reason: choice?.finish_reason ?? "unknown" });
|
|
1335
1389
|
return { content: message.content ?? null, tool_calls: toolCalls };
|
|
1336
1390
|
}
|
|
1337
1391
|
if (attempt === MAX_EMPTY_RETRIES) {
|
|
@@ -1402,9 +1456,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1402
1456
|
const model = config.model || DEFAULT_MODEL;
|
|
1403
1457
|
const messages = [];
|
|
1404
1458
|
const maxTurns = AGENT_CONFIG.MAX_TURNS;
|
|
1459
|
+
logger.debug("WarpGrep", "session_start", { search_term: config.searchTerm, model, max_turns: maxTurns });
|
|
1405
1460
|
const initialStateStart = Date.now();
|
|
1406
1461
|
const initialState = await buildInitialState(repoRoot, config.searchTerm, config.provider, { search_type: config.search_type });
|
|
1407
1462
|
timings.initial_state_ms = Date.now() - initialStateStart;
|
|
1463
|
+
logger.debug("WarpGrep", "initial_state", { system_prompt_len: initialState.length, user_message_len: initialState.length });
|
|
1408
1464
|
messages.push({ role: "user", content: initialState });
|
|
1409
1465
|
const provider = config.provider;
|
|
1410
1466
|
const errors = [];
|
|
@@ -1412,7 +1468,13 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1412
1468
|
let terminationReason = "terminated";
|
|
1413
1469
|
for (let turn = 1; turn <= maxTurns; turn += 1) {
|
|
1414
1470
|
const turnMetrics = { turn, morph_api_ms: 0, local_tools_ms: 0 };
|
|
1471
|
+
logger.debug("WarpGrep", "turn_start", { turn, message_count: messages.length });
|
|
1472
|
+
const beforeChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1415
1473
|
enforceContextLimit(messages);
|
|
1474
|
+
const afterChars = messages.reduce((sum, m) => sum + (typeof m.content === "string" ? m.content.length : 0), 0);
|
|
1475
|
+
if (afterChars < beforeChars) {
|
|
1476
|
+
logger.debug("WarpGrep", "context_truncated", { before_chars: beforeChars, after_chars: afterChars });
|
|
1477
|
+
}
|
|
1416
1478
|
const modelCallStart = Date.now();
|
|
1417
1479
|
const response = await callModel(messages, model, {
|
|
1418
1480
|
morphApiKey: config.morphApiKey,
|
|
@@ -1423,6 +1485,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1423
1485
|
}).catch((e) => {
|
|
1424
1486
|
const errMsg = e instanceof Error ? e.message : String(e);
|
|
1425
1487
|
console.error(`[warp_grep] Morph API call failed on turn ${turn}:`, errMsg);
|
|
1488
|
+
logger.error("WarpGrep", "error", { turn, error: errMsg, phase: "model_call" });
|
|
1426
1489
|
errors.push({ message: errMsg });
|
|
1427
1490
|
return null;
|
|
1428
1491
|
});
|
|
@@ -1432,6 +1495,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1432
1495
|
break;
|
|
1433
1496
|
}
|
|
1434
1497
|
const toolCalls = response.tool_calls;
|
|
1498
|
+
logger.debug("WarpGrep", "model_response", { turn, tool_calls: toolCalls.map((tc) => tc.function.name), latency_ms: turnMetrics.morph_api_ms });
|
|
1435
1499
|
messages.push({
|
|
1436
1500
|
role: "assistant",
|
|
1437
1501
|
content: response.content,
|
|
@@ -1458,6 +1522,7 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1458
1522
|
const files = parseFinishFiles(filesStr);
|
|
1459
1523
|
finishMeta = { files };
|
|
1460
1524
|
terminationReason = "completed";
|
|
1525
|
+
logger.debug("WarpGrep", "finish", { turns: turn, files: files.map((f) => f.path) });
|
|
1461
1526
|
if (files.length === 0) {
|
|
1462
1527
|
const payload2 = filesStr || "No relevant code found.";
|
|
1463
1528
|
timings.turns.push(turnMetrics);
|
|
@@ -1476,7 +1541,11 @@ async function* runWarpGrepStreaming(config) {
|
|
|
1476
1541
|
const results = await Promise.all(
|
|
1477
1542
|
toolCalls.map(async (tc) => {
|
|
1478
1543
|
const args = safeParseJSON(tc.function.arguments);
|
|
1544
|
+
const argsSummary = Object.fromEntries(Object.entries(args).map(([k, v]) => [k, typeof v === "string" && v.length > 100 ? v.slice(0, 100) + "..." : v]));
|
|
1545
|
+
logger.debug("WarpGrep", "tool_exec", { turn, tool: tc.function.name, args_summary: argsSummary });
|
|
1546
|
+
const toolStart = Date.now();
|
|
1479
1547
|
const output = await executeTool(provider, tc.function.name, args, repoRoot).catch((err) => String(err));
|
|
1548
|
+
logger.debug("WarpGrep", "tool_result", { turn, tool: tc.function.name, result_len: output.length, latency_ms: Date.now() - toolStart });
|
|
1480
1549
|
return { tool_call_id: tc.id, content: output };
|
|
1481
1550
|
})
|
|
1482
1551
|
);
|
|
@@ -1984,12 +2053,16 @@ var WarpGrepClient = class {
|
|
|
1984
2053
|
async _resolveGitHubRepo(input) {
|
|
1985
2054
|
const { owner, repo } = parseGitHubUrl(input.github);
|
|
1986
2055
|
const baseUrl = this.config.codeSearchUrl || DEFAULT_CODE_SEARCH_URL;
|
|
2056
|
+
logger.debug("WarpGrep", "github_resolve", { owner_repo: `${owner}/${repo}`, branch: input.branch });
|
|
2057
|
+
const resolveStart = Date.now();
|
|
1987
2058
|
const importRes = await fetch(`${baseUrl}/api/code-search/get-or-create?url=${encodeURIComponent(`${owner}/${repo}`)}`);
|
|
1988
2059
|
if (!importRes.ok) {
|
|
1989
2060
|
const text = await importRes.text().catch(() => importRes.statusText);
|
|
2061
|
+
logger.error("WarpGrep", "github_resolve_failed", { owner_repo: `${owner}/${repo}`, status: importRes.status, error: text });
|
|
1990
2062
|
throw new Error(`Failed to import repo ${owner}/${repo}: ${text}`);
|
|
1991
2063
|
}
|
|
1992
2064
|
const { repoId, defaultBranch } = await importRes.json();
|
|
2065
|
+
logger.debug("WarpGrep", "github_repo_fetched", { repo_id: repoId, default_branch: defaultBranch, latency_ms: Date.now() - resolveStart });
|
|
1993
2066
|
return {
|
|
1994
2067
|
repo,
|
|
1995
2068
|
remoteCommands: createCodeStorageHttpCommands({ baseUrl, repoId, branch: input.branch || defaultBranch })
|