@morphllm/morphsdk 0.2.60 → 0.2.63
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-2CASO3ZO.js → chunk-3SHLMXBV.js} +4 -4
- package/dist/{chunk-2CASO3ZO.js.map → chunk-3SHLMXBV.js.map} +1 -1
- package/dist/{chunk-6N6ZYZYD.js → chunk-3WMLFUAR.js} +3 -3
- package/dist/{chunk-TPP2UGQP.js → chunk-563RLKFC.js} +21 -7
- package/dist/chunk-563RLKFC.js.map +1 -0
- package/dist/chunk-5FUTL2UF.js +22 -0
- package/dist/{chunk-YV75OQTE.js → chunk-5QRN3JNB.js} +10 -34
- package/dist/chunk-5QRN3JNB.js.map +1 -0
- package/dist/{chunk-IUG2FHNN.js → chunk-BHNJEBQJ.js} +2 -2
- package/dist/{chunk-6Y5JB4JC.js → chunk-DCIUCDWJ.js} +15 -7
- package/dist/{chunk-6Y5JB4JC.js.map → chunk-DCIUCDWJ.js.map} +1 -1
- package/dist/{chunk-4VGOBA2J.js → chunk-GJ573YH3.js} +3 -3
- package/dist/{chunk-3IQIT6MC.js → chunk-GM5VR33N.js} +3 -3
- package/dist/{chunk-QZNGKOCZ.js → chunk-IXNSTNS7.js} +2 -2
- package/dist/{chunk-ZO4PPFCZ.js → chunk-JNOZPU44.js} +2 -2
- package/dist/{chunk-5QIWYEHJ.js → chunk-PKPJWARB.js} +2 -2
- package/dist/{chunk-ILJ3J5IA.js → chunk-PNIQNTXR.js} +3 -3
- package/dist/{chunk-FN4EP3WY.js → chunk-T6677HCA.js} +8 -8
- package/dist/{chunk-374N3GIA.js → chunk-TTBXKDCT.js} +3 -3
- package/dist/client.cjs +53 -46
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +14 -14
- package/dist/{finish-kXAcUJyB.d.ts → finish-pPJfB0uO.d.ts} +2 -2
- package/dist/git/client.js +1 -1
- package/dist/git/config.js +1 -1
- package/dist/git/index.js +1 -1
- package/dist/index.cjs +53 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -15
- package/dist/lib-GEPX5Y3T.js +14 -0
- package/dist/lib-GEPX5Y3T.js.map +1 -0
- package/dist/modelrouter/core.js +1 -1
- package/dist/modelrouter/index.js +1 -1
- package/dist/tools/browser/anthropic.js +1 -1
- package/dist/tools/browser/core.js +1 -1
- package/dist/tools/browser/index.js +1 -1
- package/dist/tools/browser/live.js +1 -1
- package/dist/tools/browser/openai.js +1 -1
- package/dist/tools/browser/prompts.js +1 -1
- package/dist/tools/browser/vercel.js +1 -1
- package/dist/tools/codebase_search/anthropic.js +1 -1
- package/dist/tools/codebase_search/core.js +1 -1
- package/dist/tools/codebase_search/index.js +1 -1
- package/dist/tools/codebase_search/openai.js +1 -1
- package/dist/tools/codebase_search/prompts.js +1 -1
- package/dist/tools/codebase_search/vercel.js +1 -1
- package/dist/tools/fastapply/anthropic.js +2 -2
- package/dist/tools/fastapply/core.js +1 -1
- package/dist/tools/fastapply/index.js +4 -4
- package/dist/tools/fastapply/openai.js +2 -2
- package/dist/tools/fastapply/prompts.js +1 -1
- package/dist/tools/fastapply/vercel.js +2 -2
- package/dist/tools/index.js +4 -4
- package/dist/tools/utils/resilience.js +1 -1
- package/dist/tools/warp_grep/agent/config.js +1 -1
- package/dist/tools/warp_grep/agent/formatter.js +1 -1
- package/dist/tools/warp_grep/agent/parser.cjs +9 -33
- package/dist/tools/warp_grep/agent/parser.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/parser.js +2 -2
- package/dist/tools/warp_grep/agent/prompt.js +1 -1
- package/dist/tools/warp_grep/agent/runner.cjs +21 -40
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +4 -4
- package/dist/tools/warp_grep/agent/types.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/types.d.ts +2 -2
- package/dist/tools/warp_grep/anthropic.cjs +53 -46
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +8 -8
- package/dist/tools/warp_grep/client.cjs +53 -46
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +7 -7
- package/dist/tools/warp_grep/gemini.cjs +53 -46
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +8 -8
- package/dist/tools/warp_grep/harness.cjs +55 -45
- package/dist/tools/warp_grep/harness.cjs.map +1 -1
- package/dist/tools/warp_grep/harness.d.ts +1 -1
- package/dist/tools/warp_grep/harness.js +5 -5
- package/dist/tools/warp_grep/harness.js.map +1 -1
- package/dist/tools/warp_grep/index.cjs +56 -46
- 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 +53 -46
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +8 -8
- package/dist/tools/warp_grep/providers/local.cjs +32 -6
- package/dist/tools/warp_grep/providers/local.cjs.map +1 -1
- package/dist/tools/warp_grep/providers/local.js +3 -3
- package/dist/tools/warp_grep/providers/remote.js +1 -1
- package/dist/tools/warp_grep/utils/files.js +1 -1
- package/dist/tools/warp_grep/utils/paths.js +1 -1
- package/dist/tools/warp_grep/utils/ripgrep.cjs +42 -6
- package/dist/tools/warp_grep/utils/ripgrep.cjs.map +1 -1
- package/dist/tools/warp_grep/utils/ripgrep.js +2 -2
- package/dist/tools/warp_grep/vercel.cjs +53 -46
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +8 -8
- package/package.json +5 -3
- package/dist/chunk-PZ5AY32C.js +0 -10
- package/dist/chunk-TPP2UGQP.js.map +0 -1
- package/dist/chunk-YV75OQTE.js.map +0 -1
- /package/dist/{chunk-6N6ZYZYD.js.map → chunk-3WMLFUAR.js.map} +0 -0
- /package/dist/{chunk-PZ5AY32C.js.map → chunk-5FUTL2UF.js.map} +0 -0
- /package/dist/{chunk-IUG2FHNN.js.map → chunk-BHNJEBQJ.js.map} +0 -0
- /package/dist/{chunk-4VGOBA2J.js.map → chunk-GJ573YH3.js.map} +0 -0
- /package/dist/{chunk-3IQIT6MC.js.map → chunk-GM5VR33N.js.map} +0 -0
- /package/dist/{chunk-QZNGKOCZ.js.map → chunk-IXNSTNS7.js.map} +0 -0
- /package/dist/{chunk-ZO4PPFCZ.js.map → chunk-JNOZPU44.js.map} +0 -0
- /package/dist/{chunk-5QIWYEHJ.js.map → chunk-PKPJWARB.js.map} +0 -0
- /package/dist/{chunk-ILJ3J5IA.js.map → chunk-PNIQNTXR.js.map} +0 -0
- /package/dist/{chunk-FN4EP3WY.js.map → chunk-T6677HCA.js.map} +0 -0
- /package/dist/{chunk-374N3GIA.js.map → chunk-TTBXKDCT.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../tools/warp_grep/harness.ts"],"sourcesContent":["/**\n * Warp Grep Harness Primitives\n *\n * Building blocks for custom agent harnesses.\n * Use these when you want to control the agent loop yourself.\n *\n * @example\n * ```typescript\n * import {\n * parseToolCalls,\n * SYSTEM_PROMPT,\n * formatToolResult,\n * formatTurnMessage,\n * formatListDirectoryTree,\n * calculateContextBudget,\n * buildInitialState,\n * toolGrep,\n * toolRead,\n * toolListDirectory,\n * resolveFinishFiles,\n * AGENT_CONFIG,\n * LocalRipgrepProvider,\n * type ToolCall,\n * type WarpGrepProvider,\n * } from '@morphllm/morphsdk/tools/warp-grep/harness';\n *\n * const provider = new LocalRipgrepProvider(repoRoot);\n * const messages = [\n * { role: 'system', content: SYSTEM_PROMPT },\n * { role: 'user', content: await buildInitialState(repoRoot, query, provider) },\n * ];\n *\n * for (let turn = 1; turn <= AGENT_CONFIG.MAX_TURNS; turn++) {\n * const response = await myModel(messages);\n * messages.push({ role: 'assistant', content: response });\n *\n * const toolCalls = parseToolCalls(response);\n * const results: string[] = [];\n *\n * for (const call of toolCalls) {\n * if (call.name === 'finish') {\n * return await resolveFinishFiles(provider, call.arguments.files);\n * }\n *\n * let output: string;\n * if (call.name === 'grep') {\n * const r = await toolGrep(provider, call.arguments);\n * output = r.output;\n * } else if (call.name === 'read') {\n * output = await toolRead(provider, call.arguments);\n * } else if (call.name === 'list_directory') {\n * output = await toolListDirectory(provider, call.arguments);\n * }\n *\n * results.push(formatToolResult(call.name, call.arguments, output));\n * }\n *\n * const turnMsg = formatTurnMessage(turn, AGENT_CONFIG.MAX_TURNS);\n * const budget = calculateContextBudget(messages);\n * messages.push({ role: 'user', content: results.join('\\n') + turnMsg + '\\n' + budget });\n * }\n * ```\n */\n\nimport { LLMResponseParser } from './agent/parser.js';\nimport type { ToolCall, ToolName, FinishFileSpec, ChatMessage } from './agent/types.js';\nimport type { WarpGrepProvider, GrepResult, ReadResult, ListDirectoryEntry } from './providers/types.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PARSING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LLMResponseParser };\n\nconst parser = new LLMResponseParser();\n\nexport function parseToolCalls(text: string): ToolCall[] {\n return parser.parse(text);\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// SYSTEM PROMPT\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { SYSTEM_PROMPT, getSystemPrompt } from './agent/prompt.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FORMATTING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { formatAgentToolOutput as formatToolResult } from './agent/formatter.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// HELPERS - same functions runner.ts uses\n// ════════════════════════════════════════════════════════════════════════════\n\nexport {\n formatTurnMessage,\n calculateContextBudget,\n buildInitialState,\n formatListDirectoryTree,\n} from './agent/helpers.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// TOOL EXECUTORS\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { toolGrep } from './agent/tools/grep.js';\nexport { toolRead } from './agent/tools/read.js';\nexport { toolListDirectory } from './agent/tools/list_directory.js';\nexport { readFinishFiles, normalizeFinishFiles } from './agent/tools/finish.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FINISH RESOLUTION (convenience wrapper)\n// ════════════════════════════════════════════════════════════════════════════\n\nimport { readFinishFiles } from './agent/tools/finish.js';\n\nexport type ResolvedFile = { path: string; content: string };\n\nexport async function resolveFinishFiles(\n provider: WarpGrepProvider,\n files: FinishFileSpec[]\n): Promise<ResolvedFile[]> {\n return readFinishFiles('', files, async (p, s
|
|
1
|
+
{"version":3,"sources":["../../../tools/warp_grep/harness.ts"],"sourcesContent":["/**\n * Warp Grep Harness Primitives\n *\n * Building blocks for custom agent harnesses.\n * Use these when you want to control the agent loop yourself.\n *\n * @example\n * ```typescript\n * import {\n * parseToolCalls,\n * SYSTEM_PROMPT,\n * formatToolResult,\n * formatTurnMessage,\n * formatListDirectoryTree,\n * calculateContextBudget,\n * buildInitialState,\n * toolGrep,\n * toolRead,\n * toolListDirectory,\n * resolveFinishFiles,\n * AGENT_CONFIG,\n * LocalRipgrepProvider,\n * type ToolCall,\n * type WarpGrepProvider,\n * } from '@morphllm/morphsdk/tools/warp-grep/harness';\n *\n * const provider = new LocalRipgrepProvider(repoRoot);\n * const messages = [\n * { role: 'system', content: SYSTEM_PROMPT },\n * { role: 'user', content: await buildInitialState(repoRoot, query, provider) },\n * ];\n *\n * for (let turn = 1; turn <= AGENT_CONFIG.MAX_TURNS; turn++) {\n * const response = await myModel(messages);\n * messages.push({ role: 'assistant', content: response });\n *\n * const toolCalls = parseToolCalls(response);\n * const results: string[] = [];\n *\n * for (const call of toolCalls) {\n * if (call.name === 'finish') {\n * return await resolveFinishFiles(provider, call.arguments.files);\n * }\n *\n * let output: string;\n * if (call.name === 'grep') {\n * const r = await toolGrep(provider, call.arguments);\n * output = r.output;\n * } else if (call.name === 'read') {\n * output = await toolRead(provider, call.arguments);\n * } else if (call.name === 'list_directory') {\n * output = await toolListDirectory(provider, call.arguments);\n * }\n *\n * results.push(formatToolResult(call.name, call.arguments, output));\n * }\n *\n * const turnMsg = formatTurnMessage(turn, AGENT_CONFIG.MAX_TURNS);\n * const budget = calculateContextBudget(messages);\n * messages.push({ role: 'user', content: results.join('\\n') + turnMsg + '\\n' + budget });\n * }\n * ```\n */\n\nimport { LLMResponseParser } from './agent/parser.js';\nimport type { ToolCall, ToolName, FinishFileSpec, ChatMessage } from './agent/types.js';\nimport type { WarpGrepProvider, GrepResult, ReadResult, ListDirectoryEntry } from './providers/types.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PARSING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LLMResponseParser };\n\nconst parser = new LLMResponseParser();\n\nexport function parseToolCalls(text: string): ToolCall[] {\n return parser.parse(text);\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// SYSTEM PROMPT\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { SYSTEM_PROMPT, getSystemPrompt } from './agent/prompt.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FORMATTING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { formatAgentToolOutput as formatToolResult } from './agent/formatter.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// HELPERS - same functions runner.ts uses\n// ════════════════════════════════════════════════════════════════════════════\n\nexport {\n formatTurnMessage,\n calculateContextBudget,\n buildInitialState,\n formatListDirectoryTree,\n} from './agent/helpers.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// TOOL EXECUTORS\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { toolGrep } from './agent/tools/grep.js';\nexport { toolRead } from './agent/tools/read.js';\nexport { toolListDirectory } from './agent/tools/list_directory.js';\nexport { readFinishFiles, normalizeFinishFiles } from './agent/tools/finish.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FINISH RESOLUTION (convenience wrapper)\n// ════════════════════════════════════════════════════════════════════════════\n\nimport { readFinishFiles } from './agent/tools/finish.js';\n\nexport type ResolvedFile = { path: string; content: string };\n\nexport async function resolveFinishFiles(\n provider: WarpGrepProvider,\n files: FinishFileSpec[]\n): Promise<ResolvedFile[]> {\n return readFinishFiles('', files, async (p, s?, e?) => {\n const r = await provider.read({ path: p, start: s, end: e });\n return r.lines.map((l) => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// CONFIG + CONSTANTS\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { AGENT_CONFIG, DEFAULT_EXCLUDES } from './agent/config.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PROVIDER + TYPES\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LocalRipgrepProvider } from './providers/local.js';\n\nexport type {\n ToolCall,\n ToolName,\n FinishFileSpec,\n ChatMessage,\n WarpGrepProvider,\n GrepResult,\n ReadResult,\n ListDirectoryEntry,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA,IAAM,SAAS,IAAI,kBAAkB;AAE9B,SAAS,eAAe,MAA0B;AACvD,SAAO,OAAO,MAAM,IAAI;AAC1B;AA0CA,eAAsB,mBACpB,UACA,OACyB;AACzB,SAAO,gBAAgB,IAAI,OAAO,OAAO,GAAG,GAAI,MAAO;AACrD,UAAM,IAAI,MAAM,SAAS,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC;AAC3D,WAAO,EAAE,MAAM,IAAI,CAAC,MAAM;AACxB,YAAM,MAAM,EAAE,QAAQ,GAAG;AACzB,aAAO,OAAO,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI;AAAA,IACvC,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
|
|
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
+
};
|
|
8
11
|
var __export = (target, all) => {
|
|
9
12
|
for (var name in all)
|
|
10
13
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -27,6 +30,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
30
|
));
|
|
28
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
32
|
|
|
33
|
+
// node_modules/@vscode/ripgrep/lib/index.js
|
|
34
|
+
var require_lib = __commonJS({
|
|
35
|
+
"node_modules/@vscode/ripgrep/lib/index.js"(exports2, module2) {
|
|
36
|
+
"use strict";
|
|
37
|
+
var path5 = require("path");
|
|
38
|
+
module2.exports.rgPath = path5.join(__dirname, `../bin/rg${process.platform === "win32" ? ".exe" : ""}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
30
42
|
// tools/warp_grep/index.ts
|
|
31
43
|
var warp_grep_exports = {};
|
|
32
44
|
__export(warp_grep_exports, {
|
|
@@ -419,19 +431,19 @@ function parseNestedXmlTools(text) {
|
|
|
419
431
|
const filePath = getXmlElementText(fileContent, "path");
|
|
420
432
|
const linesStr = getXmlElementText(fileContent, "lines");
|
|
421
433
|
if (filePath && linesStr) {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
434
|
+
if (linesStr.trim() === "*") {
|
|
435
|
+
files.push({ path: filePath, lines: "*" });
|
|
436
|
+
} else {
|
|
437
|
+
const ranges = [];
|
|
438
|
+
for (const rangeStr of linesStr.split(",")) {
|
|
427
439
|
const [s, e] = rangeStr.split("-").map((v) => parseInt(v.trim(), 10));
|
|
428
440
|
if (Number.isFinite(s) && Number.isFinite(e)) {
|
|
429
441
|
ranges.push([s, e]);
|
|
430
442
|
}
|
|
431
443
|
}
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
444
|
+
if (ranges.length > 0) {
|
|
445
|
+
files.push({ path: filePath, lines: ranges });
|
|
446
|
+
}
|
|
435
447
|
}
|
|
436
448
|
}
|
|
437
449
|
}
|
|
@@ -443,33 +455,9 @@ function parseNestedXmlTools(text) {
|
|
|
443
455
|
return tools;
|
|
444
456
|
}
|
|
445
457
|
function preprocessText(text) {
|
|
446
|
-
|
|
458
|
+
const processed = text.replace(/<think>[\s\S]*?<\/think>/gi, "").replace(/<\/?tool_call>/gi, "");
|
|
447
459
|
const nestedTools = parseNestedXmlTools(processed);
|
|
448
|
-
const openingTagRegex = /<tool_call>|<tool>/gi;
|
|
449
|
-
const closingTagRegex = /<\/tool_call>|<\/tool>/gi;
|
|
450
|
-
const openingMatches = processed.match(openingTagRegex) || [];
|
|
451
|
-
const closingMatches = processed.match(closingTagRegex) || [];
|
|
452
|
-
if (openingMatches.length > closingMatches.length) {
|
|
453
|
-
const lastClosingMatch = /<\/tool_call>|<\/tool>/gi;
|
|
454
|
-
let lastClosingIndex = -1;
|
|
455
|
-
let match;
|
|
456
|
-
while ((match = lastClosingMatch.exec(processed)) !== null) {
|
|
457
|
-
lastClosingIndex = match.index + match[0].length;
|
|
458
|
-
}
|
|
459
|
-
if (lastClosingIndex > 0) {
|
|
460
|
-
processed = processed.slice(0, lastClosingIndex);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
460
|
const toolCallLines = [];
|
|
464
|
-
const toolTagRegex = /<tool_call>([\s\S]*?)<\/tool_call>|<tool>([\s\S]*?)<\/tool>/gi;
|
|
465
|
-
let tagMatch;
|
|
466
|
-
while ((tagMatch = toolTagRegex.exec(processed)) !== null) {
|
|
467
|
-
const content = (tagMatch[1] || tagMatch[2] || "").trim();
|
|
468
|
-
if (content) {
|
|
469
|
-
const lines = content.split(/\r?\n/).map((l) => l.trim()).filter((l) => l);
|
|
470
|
-
toolCallLines.push(...lines);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
461
|
const allLines = processed.split(/\r?\n/).map((l) => l.trim());
|
|
474
462
|
for (const line of allLines) {
|
|
475
463
|
if (!line) continue;
|
|
@@ -685,6 +673,9 @@ async function toolListDirectory(provider, args) {
|
|
|
685
673
|
// tools/warp_grep/agent/tools/finish.ts
|
|
686
674
|
function normalizeFinishFiles(files) {
|
|
687
675
|
return files.map((f) => {
|
|
676
|
+
if (f.lines === "*") {
|
|
677
|
+
return { path: f.path, lines: "*" };
|
|
678
|
+
}
|
|
688
679
|
const merged = mergeRanges(f.lines);
|
|
689
680
|
return { path: f.path, lines: merged };
|
|
690
681
|
});
|
|
@@ -692,13 +683,18 @@ function normalizeFinishFiles(files) {
|
|
|
692
683
|
async function readFinishFiles(repoRoot, files, reader) {
|
|
693
684
|
const out = [];
|
|
694
685
|
for (const f of files) {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
686
|
+
if (f.lines === "*") {
|
|
687
|
+
const lines = await reader(f.path);
|
|
688
|
+
out.push({ path: f.path, ranges: "*", content: lines.join("\n") });
|
|
689
|
+
} else {
|
|
690
|
+
const ranges = mergeRanges(f.lines);
|
|
691
|
+
const chunks = [];
|
|
692
|
+
for (const [s, e] of ranges) {
|
|
693
|
+
const lines = await reader(f.path, s, e);
|
|
694
|
+
chunks.push(lines.join("\n"));
|
|
695
|
+
}
|
|
696
|
+
out.push({ path: f.path, ranges, content: chunks.join("\n") });
|
|
700
697
|
}
|
|
701
|
-
out.push({ path: f.path, ranges, content: chunks.join("\n") });
|
|
702
698
|
}
|
|
703
699
|
return out;
|
|
704
700
|
}
|
|
@@ -1099,7 +1095,7 @@ async function runWarpGrep(config) {
|
|
|
1099
1095
|
}
|
|
1100
1096
|
const parts = ["Relevant context found:"];
|
|
1101
1097
|
for (const f of finishMeta.files) {
|
|
1102
|
-
const ranges = f.lines.map(([s, e]) => `${s}-${e}`).join(", ");
|
|
1098
|
+
const ranges = f.lines === "*" ? "*" : f.lines.map(([s, e]) => `${s}-${e}`).join(", ");
|
|
1103
1099
|
parts.push(`- ${f.path}: ${ranges}`);
|
|
1104
1100
|
}
|
|
1105
1101
|
const payload = parts.join("\n");
|
|
@@ -1138,9 +1134,20 @@ var import_path4 = __toESM(require("path"), 1);
|
|
|
1138
1134
|
|
|
1139
1135
|
// tools/warp_grep/utils/ripgrep.ts
|
|
1140
1136
|
var import_child_process = require("child_process");
|
|
1141
|
-
var import_ripgrep = require("@vscode/ripgrep");
|
|
1142
1137
|
var resolvedRgPath = null;
|
|
1143
1138
|
var rgPathChecked = false;
|
|
1139
|
+
var bundledRgPath = null;
|
|
1140
|
+
async function getBundledRgPath() {
|
|
1141
|
+
if (bundledRgPath !== null) return bundledRgPath;
|
|
1142
|
+
try {
|
|
1143
|
+
const module2 = await Promise.resolve().then(() => __toESM(require_lib(), 1));
|
|
1144
|
+
bundledRgPath = module2.rgPath;
|
|
1145
|
+
return bundledRgPath;
|
|
1146
|
+
} catch {
|
|
1147
|
+
bundledRgPath = "";
|
|
1148
|
+
return null;
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1144
1151
|
function spawnRg(rgBinary, args, opts) {
|
|
1145
1152
|
return new Promise((resolve) => {
|
|
1146
1153
|
const child = (0, import_child_process.spawn)(rgBinary, args, {
|
|
@@ -1171,11 +1178,14 @@ async function runRipgrep(args, opts) {
|
|
|
1171
1178
|
return spawnRg(resolvedRgPath, args, opts);
|
|
1172
1179
|
}
|
|
1173
1180
|
if (!rgPathChecked) {
|
|
1174
|
-
const
|
|
1175
|
-
if (
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1181
|
+
const bundledPath = await getBundledRgPath();
|
|
1182
|
+
if (bundledPath) {
|
|
1183
|
+
const result = await spawnRg(bundledPath, args, opts);
|
|
1184
|
+
if (!isBinaryFailure(result)) {
|
|
1185
|
+
resolvedRgPath = bundledPath;
|
|
1186
|
+
rgPathChecked = true;
|
|
1187
|
+
return result;
|
|
1188
|
+
}
|
|
1179
1189
|
}
|
|
1180
1190
|
const fallbackResult = await spawnRg("rg", args, opts);
|
|
1181
1191
|
if (!isBinaryFailure(fallbackResult)) {
|