Modify shortenPath and add param validation (#663)
This commit is contained in:
parent
e9d43b9388
commit
fffa06f0b1
|
@ -364,16 +364,21 @@ Expectation for required parameters:
|
||||||
}
|
}
|
||||||
|
|
||||||
getDescription(params: EditToolParams): string {
|
getDescription(params: EditToolParams): string {
|
||||||
|
if (!params.file_path || !params.old_string || !params.new_string) {
|
||||||
|
return `Model did not provide valid parameters for edit tool`;
|
||||||
|
}
|
||||||
const relativePath = makeRelative(params.file_path, this.rootDirectory);
|
const relativePath = makeRelative(params.file_path, this.rootDirectory);
|
||||||
if (params.old_string === '') {
|
if (params.old_string === '') {
|
||||||
return `Create ${shortenPath(relativePath)}`;
|
return `Create ${shortenPath(relativePath)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const oldStringSnippet =
|
const oldStringSnippet =
|
||||||
params.old_string.split('\n')[0].substring(0, 30) +
|
params.old_string.split('\n')[0].substring(0, 30) +
|
||||||
(params.old_string.length > 30 ? '...' : '');
|
(params.old_string.length > 30 ? '...' : '');
|
||||||
const newStringSnippet =
|
const newStringSnippet =
|
||||||
params.new_string.split('\n')[0].substring(0, 30) +
|
params.new_string.split('\n')[0].substring(0, 30) +
|
||||||
(params.new_string.length > 30 ? '...' : '');
|
(params.new_string.length > 30 ? '...' : '');
|
||||||
|
|
||||||
return `${shortenPath(relativePath)}: ${oldStringSnippet} => ${newStringSnippet}`;
|
return `${shortenPath(relativePath)}: ${oldStringSnippet} => ${newStringSnippet}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,14 +51,15 @@ export function shortenPath(filePath: string, maxLen: number = 35): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
const firstDir = segments[0];
|
const firstDir = segments[0];
|
||||||
|
const lastSegment = segments[segments.length - 1];
|
||||||
const startComponent = root + firstDir;
|
const startComponent = root + firstDir;
|
||||||
|
|
||||||
const endPartSegments: string[] = [];
|
const endPartSegments: string[] = [];
|
||||||
// Base length: startComponent + separator + "..."
|
// Base length: separator + "..." + lastDir
|
||||||
let currentLength = startComponent.length + separator.length + 3;
|
let currentLength = separator.length + lastSegment.length;
|
||||||
|
|
||||||
// Iterate backwards through segments (excluding the first one)
|
// Iterate backwards through segments (excluding the first one)
|
||||||
for (let i = segments.length - 1; i >= 1; i--) {
|
for (let i = segments.length - 2; i >= 0; i--) {
|
||||||
const segment = segments[i];
|
const segment = segments[i];
|
||||||
// Length needed if we add this segment: current + separator + segment
|
// Length needed if we add this segment: current + separator + segment
|
||||||
const lengthWithSegment = currentLength + separator.length + segment.length;
|
const lengthWithSegment = currentLength + separator.length + segment.length;
|
||||||
|
@ -67,27 +68,23 @@ export function shortenPath(filePath: string, maxLen: number = 35): string {
|
||||||
endPartSegments.unshift(segment); // Add to the beginning of the end part
|
endPartSegments.unshift(segment); // Add to the beginning of the end part
|
||||||
currentLength = lengthWithSegment;
|
currentLength = lengthWithSegment;
|
||||||
} else {
|
} else {
|
||||||
// Adding this segment would exceed maxLen
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct the final path
|
let result = endPartSegments.join(separator) + separator + lastSegment;
|
||||||
let result = startComponent + separator + '...';
|
|
||||||
if (endPartSegments.length > 0) {
|
if (currentLength > maxLen) {
|
||||||
result += separator + endPartSegments.join(separator);
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// As a final check, if the result is somehow still too long (e.g., startComponent + ... is too long)
|
// Construct the final path
|
||||||
// fallback to simple truncation of the original path
|
result = startComponent + separator + result;
|
||||||
|
|
||||||
|
// As a final check, if the result is somehow still too long
|
||||||
|
// truncate the result string from the beginning, prefixing with "...".
|
||||||
if (result.length > maxLen) {
|
if (result.length > maxLen) {
|
||||||
const keepLen = Math.floor((maxLen - 3) / 2);
|
return '...' + result.substring(result.length - maxLen - 3);
|
||||||
if (keepLen <= 0) {
|
|
||||||
return filePath.substring(0, maxLen - 3) + '...';
|
|
||||||
}
|
|
||||||
const start = filePath.substring(0, keepLen);
|
|
||||||
const end = filePath.substring(filePath.length - keepLen);
|
|
||||||
return `${start}...${end}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in New Issue