jinzd-ai-cli 0.4.68 → 0.4.69
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-G5AISHJE.js → chunk-3IZATQV5.js} +2 -2
- package/dist/{chunk-3LCVJ4AF.js → chunk-APJHOYCH.js} +1 -1
- package/dist/{chunk-VO5IZN2C.js → chunk-IJIU46TF.js} +1 -1
- package/dist/{chunk-Q5QSCO5D.js → chunk-ZKHLLGUU.js} +196 -78
- package/dist/{hub-4VPTOMBP.js → hub-H3OSDWZW.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/{run-tests-WD53PYVA.js → run-tests-5HDSNAAC.js} +1 -1
- package/dist/{run-tests-OZ3OEOOB.js → run-tests-TGOMJCVB.js} +1 -1
- package/dist/{server-MDBQX5UZ.js → server-L5P63T2I.js} +4 -4
- package/dist/{task-orchestrator-WDRXASIC.js → task-orchestrator-AZPMRFET.js} +2 -2
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
RateLimitError,
|
|
9
9
|
schemaToJsonSchema,
|
|
10
10
|
truncateForPersist
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ZKHLLGUU.js";
|
|
12
12
|
import {
|
|
13
13
|
APP_NAME,
|
|
14
14
|
CONFIG_DIR_NAME,
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
MCP_TOOL_PREFIX,
|
|
22
22
|
PLUGINS_DIR_NAME,
|
|
23
23
|
VERSION
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-APJHOYCH.js";
|
|
25
25
|
|
|
26
26
|
// src/config/config-manager.ts
|
|
27
27
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
SUBAGENT_DEFAULT_MAX_ROUNDS,
|
|
11
11
|
SUBAGENT_MAX_ROUNDS_LIMIT,
|
|
12
12
|
runTestsTool
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-APJHOYCH.js";
|
|
14
14
|
|
|
15
15
|
// src/tools/builtin/bash.ts
|
|
16
16
|
import { execSync } from "child_process";
|
|
@@ -1839,16 +1839,123 @@ function findWhitespaceTolerant(fileLines, searchLines) {
|
|
|
1839
1839
|
}
|
|
1840
1840
|
return { matchStart, matchCount };
|
|
1841
1841
|
}
|
|
1842
|
+
function applyReplace(content, oldStr, newStr, options = {}) {
|
|
1843
|
+
if (oldStr === "") {
|
|
1844
|
+
return { ok: false, error: "old_str cannot be empty" };
|
|
1845
|
+
}
|
|
1846
|
+
if (options.ignoreWhitespace) {
|
|
1847
|
+
const fileLines = content.split("\n");
|
|
1848
|
+
const searchLines = oldStr.split("\n");
|
|
1849
|
+
const { matchStart, matchCount } = findWhitespaceTolerant(fileLines, searchLines);
|
|
1850
|
+
if (matchStart === -1) {
|
|
1851
|
+
const similar = findSimilarLines(content, oldStr);
|
|
1852
|
+
const hint = similar.length > 0 ? `
|
|
1853
|
+
Similar lines found (did you mean?):
|
|
1854
|
+
${similar.join("\n")}` : "";
|
|
1855
|
+
return {
|
|
1856
|
+
ok: false,
|
|
1857
|
+
error: `old_str not found in file (even with whitespace ignored). File has ${fileLines.length} lines.${hint}`
|
|
1858
|
+
};
|
|
1859
|
+
}
|
|
1860
|
+
if (matchCount > 1) {
|
|
1861
|
+
return {
|
|
1862
|
+
ok: false,
|
|
1863
|
+
error: "old_str matches multiple locations with whitespace-tolerant matching. Please include more surrounding context to make it unique."
|
|
1864
|
+
};
|
|
1865
|
+
}
|
|
1866
|
+
const before = fileLines.slice(0, matchStart);
|
|
1867
|
+
const after = fileLines.slice(matchStart + searchLines.length);
|
|
1868
|
+
const updated2 = [...before, newStr, ...after].join("\n");
|
|
1869
|
+
return {
|
|
1870
|
+
ok: true,
|
|
1871
|
+
content: updated2,
|
|
1872
|
+
info: { mode: "ignore_whitespace", replacedCount: 1, lineNumber: matchStart + 1 }
|
|
1873
|
+
};
|
|
1874
|
+
}
|
|
1875
|
+
if (options.replaceAll) {
|
|
1876
|
+
const occurrences = content.split(oldStr).length - 1;
|
|
1877
|
+
if (occurrences === 0) {
|
|
1878
|
+
const similar = findSimilarLines(content, oldStr);
|
|
1879
|
+
const hint = similar.length > 0 ? `
|
|
1880
|
+
Similar lines found (did you mean?):
|
|
1881
|
+
${similar.join("\n")}` : "";
|
|
1882
|
+
return { ok: false, error: `old_str not found in file.${hint}` };
|
|
1883
|
+
}
|
|
1884
|
+
const updated2 = content.split(oldStr).join(newStr);
|
|
1885
|
+
return {
|
|
1886
|
+
ok: true,
|
|
1887
|
+
content: updated2,
|
|
1888
|
+
info: { mode: "replace_all", replacedCount: occurrences }
|
|
1889
|
+
};
|
|
1890
|
+
}
|
|
1891
|
+
const firstIndex = content.indexOf(oldStr);
|
|
1892
|
+
if (firstIndex === -1) {
|
|
1893
|
+
const lines = content.split("\n");
|
|
1894
|
+
const similar = findSimilarLines(content, oldStr);
|
|
1895
|
+
const hint = similar.length > 0 ? `
|
|
1896
|
+
Similar lines found (did you mean?):
|
|
1897
|
+
${similar.join("\n")}` : "";
|
|
1898
|
+
return {
|
|
1899
|
+
ok: false,
|
|
1900
|
+
error: `old_str not found in file. File has ${lines.length} lines.${hint}
|
|
1901
|
+
Tip: try ignore_whitespace: true if indentation differs.`
|
|
1902
|
+
};
|
|
1903
|
+
}
|
|
1904
|
+
const secondIndex = content.indexOf(oldStr, firstIndex + 1);
|
|
1905
|
+
if (secondIndex !== -1) {
|
|
1906
|
+
return {
|
|
1907
|
+
ok: false,
|
|
1908
|
+
error: `old_str appears multiple times in file (at positions ${firstIndex} and ${secondIndex}). Please include more surrounding context to make it unique, or set replace_all: true.`
|
|
1909
|
+
};
|
|
1910
|
+
}
|
|
1911
|
+
const updated = content.slice(0, firstIndex) + newStr + content.slice(firstIndex + oldStr.length);
|
|
1912
|
+
const linesBefore = content.slice(0, firstIndex).split("\n").length;
|
|
1913
|
+
return {
|
|
1914
|
+
ok: true,
|
|
1915
|
+
content: updated,
|
|
1916
|
+
info: { mode: "exact", replacedCount: 1, lineNumber: linesBefore }
|
|
1917
|
+
};
|
|
1918
|
+
}
|
|
1919
|
+
function parseEditsArg(raw) {
|
|
1920
|
+
if (!Array.isArray(raw)) {
|
|
1921
|
+
throw new ToolError("edit_file", "edits must be an array of { old_str, new_str } objects");
|
|
1922
|
+
}
|
|
1923
|
+
if (raw.length === 0) {
|
|
1924
|
+
throw new ToolError("edit_file", "edits array is empty \u2014 provide at least one edit");
|
|
1925
|
+
}
|
|
1926
|
+
if (raw.length > 200) {
|
|
1927
|
+
throw new ToolError("edit_file", `edits array too large (${raw.length}) \u2014 max 200 per call`);
|
|
1928
|
+
}
|
|
1929
|
+
return raw.map((e, i) => {
|
|
1930
|
+
if (e == null || typeof e !== "object") {
|
|
1931
|
+
throw new ToolError("edit_file", `edits[${i}] must be an object`);
|
|
1932
|
+
}
|
|
1933
|
+
const rec = e;
|
|
1934
|
+
if (typeof rec.old_str !== "string") {
|
|
1935
|
+
throw new ToolError("edit_file", `edits[${i}].old_str must be a string`);
|
|
1936
|
+
}
|
|
1937
|
+
if (rec.new_str !== void 0 && typeof rec.new_str !== "string") {
|
|
1938
|
+
throw new ToolError("edit_file", `edits[${i}].new_str must be a string`);
|
|
1939
|
+
}
|
|
1940
|
+
return {
|
|
1941
|
+
old_str: rec.old_str,
|
|
1942
|
+
new_str: String(rec.new_str ?? ""),
|
|
1943
|
+
ignore_whitespace: Boolean(rec.ignore_whitespace),
|
|
1944
|
+
replace_all: Boolean(rec.replace_all)
|
|
1945
|
+
};
|
|
1946
|
+
});
|
|
1947
|
+
}
|
|
1842
1948
|
var editFileTool = {
|
|
1843
1949
|
definition: {
|
|
1844
1950
|
name: "edit_file",
|
|
1845
|
-
description: `Precisely edit file contents.
|
|
1846
|
-
1. String replace (most common): Provide old_str and new_str to replace an exact match. old_str must appear exactly once
|
|
1847
|
-
2. Line insert: Provide insert_after_line (1-based
|
|
1848
|
-
3. Line delete: Provide delete_from_line and delete_to_line (inclusive)
|
|
1849
|
-
|
|
1850
|
-
Optional
|
|
1851
|
-
|
|
1951
|
+
description: `Precisely edit file contents. Four modes:
|
|
1952
|
+
1. String replace (most common): Provide old_str and new_str to replace an exact match. old_str must appear exactly once (unless replace_all is true).
|
|
1953
|
+
2. Line insert: Provide insert_after_line (1-based) and insert_content.
|
|
1954
|
+
3. Line delete: Provide delete_from_line and delete_to_line (inclusive).
|
|
1955
|
+
4. Batch edits: Provide edits=[{old_str, new_str, ignore_whitespace?, replace_all?}, ...] to apply MULTIPLE edits in ONE call \u2014 saves tool rounds/tokens when refactoring a file. Edits are applied sequentially in-memory; by default any failure rolls back ALL edits (set stop_on_error=false to apply successful ones and report failures).
|
|
1956
|
+
Optional ignore_whitespace: true ignores indentation differences during matching.
|
|
1957
|
+
Optional replace_all: true replaces ALL occurrences of old_str.
|
|
1958
|
+
Note: Path can be absolute or relative to cwd.`,
|
|
1852
1959
|
parameters: {
|
|
1853
1960
|
path: {
|
|
1854
1961
|
type: "string",
|
|
@@ -1857,22 +1964,22 @@ Note: Path can be absolute or relative to the current working directory.`,
|
|
|
1857
1964
|
},
|
|
1858
1965
|
old_str: {
|
|
1859
1966
|
type: "string",
|
|
1860
|
-
description: "[
|
|
1967
|
+
description: "[Single-replace mode] Original string to replace, must appear exactly once (include enough context for uniqueness)",
|
|
1861
1968
|
required: false
|
|
1862
1969
|
},
|
|
1863
1970
|
new_str: {
|
|
1864
1971
|
type: "string",
|
|
1865
|
-
description: "[
|
|
1972
|
+
description: "[Single-replace mode] New replacement string, can be empty to delete old_str",
|
|
1866
1973
|
required: false
|
|
1867
1974
|
},
|
|
1868
1975
|
ignore_whitespace: {
|
|
1869
1976
|
type: "boolean",
|
|
1870
|
-
description: "[
|
|
1977
|
+
description: "[Single-replace mode] Whether to ignore leading/trailing whitespace per line when matching, defaults to false",
|
|
1871
1978
|
required: false
|
|
1872
1979
|
},
|
|
1873
1980
|
replace_all: {
|
|
1874
1981
|
type: "boolean",
|
|
1875
|
-
description: "[
|
|
1982
|
+
description: "[Single-replace mode] Replace ALL occurrences of old_str instead of requiring unique match. Useful for renaming variables/functions across the file in one call.",
|
|
1876
1983
|
required: false
|
|
1877
1984
|
},
|
|
1878
1985
|
insert_after_line: {
|
|
@@ -1895,6 +2002,16 @@ Note: Path can be absolute or relative to the current working directory.`,
|
|
|
1895
2002
|
description: "[Delete mode] Delete up to and including this line (1-based)",
|
|
1896
2003
|
required: false
|
|
1897
2004
|
},
|
|
2005
|
+
edits: {
|
|
2006
|
+
type: "array",
|
|
2007
|
+
description: "[Batch mode] Array of {old_str, new_str, ignore_whitespace?, replace_all?} objects. Each applied sequentially to the in-memory content. Max 200 per call.",
|
|
2008
|
+
required: false
|
|
2009
|
+
},
|
|
2010
|
+
stop_on_error: {
|
|
2011
|
+
type: "boolean",
|
|
2012
|
+
description: "[Batch mode] If true (default), any failing edit rolls back the whole batch and writes nothing. If false, successful edits are written and failed ones are reported.",
|
|
2013
|
+
required: false
|
|
2014
|
+
},
|
|
1898
2015
|
encoding: {
|
|
1899
2016
|
type: "string",
|
|
1900
2017
|
description: "File encoding, defaults to utf-8",
|
|
@@ -1910,83 +2027,84 @@ Note: Path can be absolute or relative to the current working directory.`,
|
|
|
1910
2027
|
if (!filePath) throw new ToolError("edit_file", "path is required");
|
|
1911
2028
|
if (!existsSync5(filePath)) throw new ToolError("edit_file", `File not found: ${filePath}`);
|
|
1912
2029
|
const original = readFileSync4(filePath, encoding);
|
|
2030
|
+
if (args["edits"] !== void 0) {
|
|
2031
|
+
const edits = parseEditsArg(args["edits"]);
|
|
2032
|
+
const stopOnError = args["stop_on_error"] !== false;
|
|
2033
|
+
let working = original;
|
|
2034
|
+
const reports = [];
|
|
2035
|
+
let appliedCount = 0;
|
|
2036
|
+
for (let i = 0; i < edits.length; i++) {
|
|
2037
|
+
const edit = edits[i];
|
|
2038
|
+
const res = applyReplace(working, edit.old_str, edit.new_str, {
|
|
2039
|
+
ignoreWhitespace: edit.ignore_whitespace,
|
|
2040
|
+
replaceAll: edit.replace_all
|
|
2041
|
+
});
|
|
2042
|
+
if (res.ok) {
|
|
2043
|
+
working = res.content;
|
|
2044
|
+
appliedCount++;
|
|
2045
|
+
reports.push({
|
|
2046
|
+
index: i,
|
|
2047
|
+
ok: true,
|
|
2048
|
+
summary: `${res.info?.mode} at ${res.info?.lineNumber != null ? `line ${res.info.lineNumber}` : `${res.info?.replacedCount} occurrence(s)`}: ${truncatePreview(edit.old_str)} \u2192 ${truncatePreview(edit.new_str)}`
|
|
2049
|
+
});
|
|
2050
|
+
} else {
|
|
2051
|
+
reports.push({ index: i, ok: false, error: res.error });
|
|
2052
|
+
if (stopOnError) break;
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
const anyFailed = reports.some((r) => !r.ok);
|
|
2056
|
+
const writeChanges = appliedCount > 0 && !(anyFailed && stopOnError);
|
|
2057
|
+
if (writeChanges) {
|
|
2058
|
+
undoStack.push(filePath, `edit_file (batch ${appliedCount}/${edits.length}): ${filePath}`);
|
|
2059
|
+
fileCheckpoints.snapshot(filePath, ToolExecutor.currentMessageIndex);
|
|
2060
|
+
writeFileSync3(filePath, working, encoding);
|
|
2061
|
+
}
|
|
2062
|
+
const lines = [];
|
|
2063
|
+
if (anyFailed && stopOnError) {
|
|
2064
|
+
lines.push(`ERROR: Batch edit aborted \u2014 ${appliedCount}/${edits.length} applied, then edit #${appliedCount} failed. No changes written (stop_on_error=true).`);
|
|
2065
|
+
} else if (anyFailed) {
|
|
2066
|
+
lines.push(`Partial success: ${appliedCount}/${edits.length} edits applied to ${filePath} (stop_on_error=false).`);
|
|
2067
|
+
} else {
|
|
2068
|
+
lines.push(`Successfully applied ${appliedCount}/${edits.length} edit(s) to ${filePath}.`);
|
|
2069
|
+
}
|
|
2070
|
+
lines.push("");
|
|
2071
|
+
for (const r of reports) {
|
|
2072
|
+
if (r.ok) {
|
|
2073
|
+
lines.push(` \u2713 #${r.index + 1}: ${r.summary}`);
|
|
2074
|
+
} else {
|
|
2075
|
+
lines.push(` \u2717 #${r.index + 1}: ${r.error}`);
|
|
2076
|
+
}
|
|
2077
|
+
}
|
|
2078
|
+
return lines.join("\n");
|
|
2079
|
+
}
|
|
1913
2080
|
if (args["old_str"] !== void 0) {
|
|
1914
2081
|
const oldStr = String(args["old_str"]);
|
|
1915
2082
|
const newStr = String(args["new_str"] ?? "");
|
|
1916
2083
|
const ignoreWs = Boolean(args["ignore_whitespace"]);
|
|
1917
2084
|
const replaceAll = Boolean(args["replace_all"]);
|
|
1918
2085
|
if (oldStr === "") throw new ToolError("edit_file", "old_str cannot be empty");
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
const hint = similar.length > 0 ? `
|
|
1926
|
-
Similar lines found (did you mean?):
|
|
1927
|
-
${similar.join("\n")}` : "";
|
|
1928
|
-
return `ERROR: old_str not found in file (even with whitespace ignored).
|
|
1929
|
-
File has ${fileLines.length} lines.${hint}
|
|
2086
|
+
const res = applyReplace(original, oldStr, newStr, {
|
|
2087
|
+
ignoreWhitespace: ignoreWs,
|
|
2088
|
+
replaceAll
|
|
2089
|
+
});
|
|
2090
|
+
if (!res.ok) {
|
|
2091
|
+
return `ERROR: ${res.error}
|
|
1930
2092
|
Please read the file first and use exact text.`;
|
|
1931
|
-
}
|
|
1932
|
-
if (matchCount > 1) {
|
|
1933
|
-
return `ERROR: old_str matches multiple locations with whitespace-tolerant matching. Please include more surrounding context to make it unique.`;
|
|
1934
|
-
}
|
|
1935
|
-
undoStack.push(filePath, `edit_file (ws-replace): ${filePath}`);
|
|
1936
|
-
fileCheckpoints.snapshot(filePath, ToolExecutor.currentMessageIndex);
|
|
1937
|
-
const before = fileLines.slice(0, matchStart);
|
|
1938
|
-
const after = fileLines.slice(matchStart + searchLines.length);
|
|
1939
|
-
const updated2 = [...before, newStr, ...after].join("\n");
|
|
1940
|
-
writeFileSync3(filePath, updated2, encoding);
|
|
1941
|
-
return `Successfully edited ${filePath} (whitespace-tolerant match)
|
|
1942
|
-
Location: around line ${matchStart + 1}
|
|
1943
|
-
Replaced: ${searchLines.length} line(s) \u2192 ${newStr.split("\n").length} line(s)
|
|
1944
|
-
Old: ${truncatePreview(oldStr)}
|
|
1945
|
-
New: ${truncatePreview(newStr)}`;
|
|
1946
2093
|
}
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
${
|
|
1954
|
-
|
|
1955
|
-
Please read the file first and use exact text.`;
|
|
1956
|
-
}
|
|
1957
|
-
undoStack.push(filePath, `edit_file (replace_all): ${filePath}`);
|
|
1958
|
-
fileCheckpoints.snapshot(filePath, ToolExecutor.currentMessageIndex);
|
|
1959
|
-
const updated2 = original.split(oldStr).join(newStr);
|
|
1960
|
-
writeFileSync3(filePath, updated2, encoding);
|
|
1961
|
-
return `Successfully edited ${filePath} (replace_all)
|
|
1962
|
-
Replaced: ${occurrences} occurrence(s) of ${truncatePreview(oldStr)}
|
|
2094
|
+
const modeLabel = res.info?.mode === "ignore_whitespace" ? " (whitespace-tolerant match)" : res.info?.mode === "replace_all" ? " (replace_all)" : "";
|
|
2095
|
+
const label = res.info?.mode === "ignore_whitespace" ? "edit_file (ws-replace)" : res.info?.mode === "replace_all" ? "edit_file (replace_all)" : "edit_file (replace)";
|
|
2096
|
+
undoStack.push(filePath, `${label}: ${filePath}`);
|
|
2097
|
+
fileCheckpoints.snapshot(filePath, ToolExecutor.currentMessageIndex);
|
|
2098
|
+
writeFileSync3(filePath, res.content, encoding);
|
|
2099
|
+
if (res.info?.mode === "replace_all") {
|
|
2100
|
+
return `Successfully edited ${filePath}${modeLabel}
|
|
2101
|
+
Replaced: ${res.info.replacedCount} occurrence(s) of ${truncatePreview(oldStr)}
|
|
1963
2102
|
With: ${truncatePreview(newStr)}`;
|
|
1964
2103
|
}
|
|
1965
|
-
const firstIndex = original.indexOf(oldStr);
|
|
1966
|
-
if (firstIndex === -1) {
|
|
1967
|
-
const lines = original.split("\n");
|
|
1968
|
-
const similar = findSimilarLines(original, oldStr);
|
|
1969
|
-
const hint = similar.length > 0 ? `
|
|
1970
|
-
Similar lines found (did you mean?):
|
|
1971
|
-
${similar.join("\n")}` : "";
|
|
1972
|
-
return `ERROR: old_str not found in file.
|
|
1973
|
-
File has ${lines.length} lines.${hint}
|
|
1974
|
-
Please read the file first and use exact text including whitespace/indentation.
|
|
1975
|
-
Tip: You can also try ignore_whitespace: true to match ignoring indentation differences.`;
|
|
1976
|
-
}
|
|
1977
|
-
const secondIndex = original.indexOf(oldStr, firstIndex + 1);
|
|
1978
|
-
if (secondIndex !== -1) {
|
|
1979
|
-
return `ERROR: old_str appears multiple times in file (at least at positions ${firstIndex} and ${secondIndex}). Please include more surrounding context to make it unique.`;
|
|
1980
|
-
}
|
|
1981
|
-
undoStack.push(filePath, `edit_file (replace): ${filePath}`);
|
|
1982
|
-
fileCheckpoints.snapshot(filePath, ToolExecutor.currentMessageIndex);
|
|
1983
|
-
const updated = original.slice(0, firstIndex) + newStr + original.slice(firstIndex + oldStr.length);
|
|
1984
|
-
writeFileSync3(filePath, updated, encoding);
|
|
1985
2104
|
const oldLines = oldStr.split("\n").length;
|
|
1986
2105
|
const newLines = newStr.split("\n").length;
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
Location: around line ${linesBefore}
|
|
2106
|
+
return `Successfully edited ${filePath}${modeLabel}
|
|
2107
|
+
Location: around line ${res.info?.lineNumber ?? "?"}
|
|
1990
2108
|
Replaced: ${oldLines} line(s) \u2192 ${newLines} line(s)
|
|
1991
2109
|
Old: ${truncatePreview(oldStr)}
|
|
1992
2110
|
New: ${truncatePreview(newStr)}`;
|
|
@@ -2022,7 +2140,7 @@ Tip: You can also try ignore_whitespace: true to match ignoring indentation diff
|
|
|
2022
2140
|
}
|
|
2023
2141
|
throw new ToolError(
|
|
2024
2142
|
"edit_file",
|
|
2025
|
-
"No operation specified. Provide
|
|
2143
|
+
"No operation specified. Provide one of: (old_str + new_str), (insert_after_line + insert_content), (delete_from_line + delete_to_line), or edits=[...]."
|
|
2026
2144
|
);
|
|
2027
2145
|
}
|
|
2028
2146
|
};
|
|
@@ -385,7 +385,7 @@ ${content}`);
|
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
387
|
async function runTaskMode(config, providers, configManager, topic) {
|
|
388
|
-
const { TaskOrchestrator } = await import("./task-orchestrator-
|
|
388
|
+
const { TaskOrchestrator } = await import("./task-orchestrator-AZPMRFET.js");
|
|
389
389
|
const orchestrator = new TaskOrchestrator(config, providers, configManager);
|
|
390
390
|
let interrupted = false;
|
|
391
391
|
const onSigint = () => {
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
saveDevState,
|
|
32
32
|
sessionHasMeaningfulContent,
|
|
33
33
|
setupProxy
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-3IZATQV5.js";
|
|
35
35
|
import {
|
|
36
36
|
ToolExecutor,
|
|
37
37
|
ToolRegistry,
|
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
spawnAgentContext,
|
|
48
48
|
theme,
|
|
49
49
|
undoStack
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-ZKHLLGUU.js";
|
|
51
51
|
import {
|
|
52
52
|
fileCheckpoints
|
|
53
53
|
} from "./chunk-4BKXL7SM.js";
|
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
SKILLS_DIR_NAME,
|
|
73
73
|
VERSION,
|
|
74
74
|
buildUserIdentityPrompt
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-APJHOYCH.js";
|
|
76
76
|
|
|
77
77
|
// src/index.ts
|
|
78
78
|
import { program } from "commander";
|
|
@@ -2267,7 +2267,7 @@ ${hint}` : "")
|
|
|
2267
2267
|
usage: "/test [command|filter]",
|
|
2268
2268
|
async execute(args, ctx) {
|
|
2269
2269
|
try {
|
|
2270
|
-
const { executeTests } = await import("./run-tests-
|
|
2270
|
+
const { executeTests } = await import("./run-tests-5HDSNAAC.js");
|
|
2271
2271
|
const argStr = args.join(" ").trim();
|
|
2272
2272
|
let testArgs = {};
|
|
2273
2273
|
if (argStr) {
|
|
@@ -6108,7 +6108,7 @@ program.command("web").description("Start Web UI server with browser-based chat
|
|
|
6108
6108
|
console.error("Error: Invalid port number. Must be between 1 and 65535.");
|
|
6109
6109
|
process.exit(1);
|
|
6110
6110
|
}
|
|
6111
|
-
const { startWebServer } = await import("./server-
|
|
6111
|
+
const { startWebServer } = await import("./server-L5P63T2I.js");
|
|
6112
6112
|
await startWebServer({ port, host: options.host });
|
|
6113
6113
|
});
|
|
6114
6114
|
program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
|
|
@@ -6341,7 +6341,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
|
|
|
6341
6341
|
}),
|
|
6342
6342
|
config.get("customProviders")
|
|
6343
6343
|
);
|
|
6344
|
-
const { startHub } = await import("./hub-
|
|
6344
|
+
const { startHub } = await import("./hub-H3OSDWZW.js");
|
|
6345
6345
|
await startHub(
|
|
6346
6346
|
{
|
|
6347
6347
|
topic: topic ?? "",
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
persistToolRound,
|
|
22
22
|
rebuildExtraMessages,
|
|
23
23
|
setupProxy
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-3IZATQV5.js";
|
|
25
25
|
import {
|
|
26
26
|
AuthManager
|
|
27
27
|
} from "./chunk-BYNY5JPB.js";
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
spawnAgentContext,
|
|
43
43
|
truncateOutput,
|
|
44
44
|
undoStack
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-ZKHLLGUU.js";
|
|
46
46
|
import "./chunk-4BKXL7SM.js";
|
|
47
47
|
import {
|
|
48
48
|
AGENTIC_BEHAVIOR_GUIDELINE,
|
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
SKILLS_DIR_NAME,
|
|
63
63
|
VERSION,
|
|
64
64
|
buildUserIdentityPrompt
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-APJHOYCH.js";
|
|
66
66
|
|
|
67
67
|
// src/web/server.ts
|
|
68
68
|
import express from "express";
|
|
@@ -1946,7 +1946,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
|
|
|
1946
1946
|
case "test": {
|
|
1947
1947
|
this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
|
|
1948
1948
|
try {
|
|
1949
|
-
const { executeTests } = await import("./run-tests-
|
|
1949
|
+
const { executeTests } = await import("./run-tests-5HDSNAAC.js");
|
|
1950
1950
|
const argStr = args.join(" ").trim();
|
|
1951
1951
|
let testArgs = {};
|
|
1952
1952
|
if (argStr) {
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
getDangerLevel,
|
|
5
5
|
googleSearchContext,
|
|
6
6
|
truncateOutput
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZKHLLGUU.js";
|
|
8
8
|
import "./chunk-4BKXL7SM.js";
|
|
9
9
|
import {
|
|
10
10
|
SUBAGENT_ALLOWED_TOOLS
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-APJHOYCH.js";
|
|
12
12
|
|
|
13
13
|
// src/hub/task-orchestrator.ts
|
|
14
14
|
import { createInterface } from "readline";
|