diff options
Diffstat (limited to 'packages/cli')
| -rw-r--r-- | packages/cli/src/ui/utils/markdownUtilities.test.ts | 87 | ||||
| -rw-r--r-- | packages/cli/src/ui/utils/markdownUtilities.ts | 95 | ||||
| -rw-r--r-- | packages/cli/src/utils/sandbox.ts | 5 |
3 files changed, 1 insertions, 186 deletions
diff --git a/packages/cli/src/ui/utils/markdownUtilities.test.ts b/packages/cli/src/ui/utils/markdownUtilities.test.ts index 2d7a84f3..02bd2ea7 100644 --- a/packages/cli/src/ui/utils/markdownUtilities.test.ts +++ b/packages/cli/src/ui/utils/markdownUtilities.test.ts @@ -5,94 +5,9 @@ */ import { describe, it, expect } from 'vitest'; -import { - findSafeSplitPoint, - findLastSafeSplitPoint, -} from './markdownUtilities.js'; +import { findLastSafeSplitPoint } from './markdownUtilities.js'; describe('markdownUtilities', () => { - describe('findSafeSplitPoint', () => { - it('should return content.length if content is shorter than idealMaxLength', () => { - const content = 'short content'; - expect(findSafeSplitPoint(content, 100)).toBe(content.length); - }); - - it('should split before a code block if idealMaxLength is inside it', () => { - const content = 'text before ```code``` text after'; - expect(findSafeSplitPoint(content, 15)).toBe(12); - }); - - it('should return 0 if idealMaxLength is inside a code block that starts at 0', () => { - const content = '```code``` text after'; - expect(findSafeSplitPoint(content, 5)).toBe(0); - }); - - it('should split at a double newline if possible', () => { - const content = 'paragraph1\n\nparagraph2'; - expect(findSafeSplitPoint(content, 12)).toBe(22); // Updated expectation - }); - - it('should split at a single newline if double newline is not available', () => { - const content = 'line1\nline2'; - expect(findSafeSplitPoint(content, 7)).toBe(11); // Updated expectation - }); - - it('should return content.length if no safe split point is found', () => { - const content = 'longstringwithoutanysafesplitpoint'; - expect(findSafeSplitPoint(content, 10)).toBe(content.length); - }); - - it('should handle content with multiple code blocks', () => { - const content = 'text ```code1``` text ```code2``` text'; - expect(findSafeSplitPoint(content, 20)).toBe(38); // Updated expectation - }); - - it('should prioritize splitting before a code block over a newline', () => { - const content = 'text\nnewline ```code``` text'; - expect(findSafeSplitPoint(content, 15)).toBe(5); // Updated expectation - }); - - // Known failure: Code has a bug - it.fails( - 'should split after \n\n when idealMaxLength is not in a code block and a suitable \n\n exists after it', - () => { - const content = 'This is some text.\n\nThis is more text.'; - // idealMaxLength is 10, which is before the \n\n - // The function should find the \n\n at index 20 and split after it (index 22) - expect(findSafeSplitPoint(content, 10)).toBe(22); - }, - ); - - it('should return content.length when idealMaxLength is not in a code block and no \n\n exists after it', () => { - const content = - 'This is some text. This is more text and no double newline.'; - // idealMaxLength is 10 - // No \n\n after index 10 - expect(findSafeSplitPoint(content, 10)).toBe(content.length); - }); - - it('should correctly split before a code block that idealMaxLength is inside, even if \n\n exists before it', () => { - const content = - 'Paragraph before.\n\n```\nCode block content\n```\nParagraph after.'; - // idealMaxLength is 25, which is inside the code block - // The split should be at index 19 (start of the code block) - expect(findSafeSplitPoint(content, 25)).toBe(19); - }); - - it('should split at the last \n before a code block if idealMaxLength is in the code block and no \n\n is found before it', () => { - const content = 'Line before.\n```\nCode block\n```'; - // idealMaxLength is 15 (inside code block) - // Split should be at 13 (after \n and before ```) - expect(findSafeSplitPoint(content, 15)).toBe(13); - }); - - it('should return 0 if idealMaxLength is in a code block starting at 0 and no prior newline exists', () => { - const content = - '```\nVery long code block that exceeds idealMaxLength\n```'; - expect(findSafeSplitPoint(content, 10)).toBe(0); - }); - }); - describe('findLastSafeSplitPoint', () => { it('should split at the last double newline if not in a code block', () => { const content = 'paragraph1\n\nparagraph2\n\nparagraph3'; diff --git a/packages/cli/src/ui/utils/markdownUtilities.ts b/packages/cli/src/ui/utils/markdownUtilities.ts index 4ddb2285..c328c12a 100644 --- a/packages/cli/src/ui/utils/markdownUtilities.ts +++ b/packages/cli/src/ui/utils/markdownUtilities.ts @@ -90,101 +90,6 @@ const findEnclosingCodeBlockStart = ( return -1; }; -export const findSafeSplitPoint = ( - content: string, - idealMaxLength: number = 500, -): number => { - if (content.length <= idealMaxLength) { - return content.length; - } - - const enclosingBlockStartForIdealMax = findEnclosingCodeBlockStart( - content, - idealMaxLength, - ); - - if (enclosingBlockStartForIdealMax !== -1) { - // idealMaxLength is inside a code block. Try to split *before* this block. - const textToSearchForNewline = content.substring( - 0, - enclosingBlockStartForIdealMax, - ); - - // Iteratively search for the last safe \n\n before enclosingBlockStartForIdealMax - let currentSearchFromIndex = textToSearchForNewline.length; - while (currentSearchFromIndex > 0) { - // searchEndIndex refers to character count to search within - const dnlIndex = textToSearchForNewline.lastIndexOf( - '\n\n', - currentSearchFromIndex - 1, - ); // fromIndex for lastIndexOf is 0-based - if (dnlIndex === -1) break; - - const potentialSplit = dnlIndex + 2; - // The split must be strictly before the block idealMaxLength was in. - // This is implicitly true if dnlIndex is found within textToSearchForNewline. - if (!isIndexInsideCodeBlock(content, potentialSplit)) { - // Condition: (potentialSplit > 0) OR (it's 0 AND the problematic block also started at 0) - if ( - potentialSplit > 0 || - (enclosingBlockStartForIdealMax === 0 && potentialSplit === 0) - ) { - return potentialSplit; - } - } - currentSearchFromIndex = dnlIndex; // Continue search before the start of this found \n\n - // (dnlIndex is start of \n\n, so next search is before it) - } - - // Iteratively search for the last safe \n - currentSearchFromIndex = textToSearchForNewline.length; - while (currentSearchFromIndex >= 0) { - // Can be 0 if textToSearchForNewline has length 1 and it's \n - const snlIndex = textToSearchForNewline.lastIndexOf( - '\n', - currentSearchFromIndex - 1, - ); - if (snlIndex === -1) break; - - const potentialSplit = snlIndex + 1; - if (!isIndexInsideCodeBlock(content, potentialSplit)) { - if ( - potentialSplit > 0 || - (enclosingBlockStartForIdealMax === 0 && potentialSplit === 0) - ) { - return potentialSplit; - } - } - currentSearchFromIndex = snlIndex; - } - - // Fallback: split right before this code block - return enclosingBlockStartForIdealMax; - } - - // idealMaxLength is NOT inside a code block. - // Search forwards from idealMaxLength for the next double newline (\n\n) not in a code block. - let searchStartIndex = idealMaxLength; - while (searchStartIndex < content.length) { - const dnlIndex = content.indexOf('\n\n', searchStartIndex); - if (dnlIndex === -1) { - // No more double newlines found after idealMaxLength - break; - } - - const potentialSplitPoint = dnlIndex + 2; - if (!isIndexInsideCodeBlock(content, potentialSplitPoint)) { - return potentialSplitPoint; - } - - searchStartIndex = potentialSplitPoint; // Continue search after the found \n\n - } - - // If no safe double newline found after idealMaxLength, return content.length - // to keep the entire content as one piece. - return content.length; -}; - export const findLastSafeSplitPoint = (content: string) => { const enclosingBlockStart = findEnclosingCodeBlockStart( content, diff --git a/packages/cli/src/utils/sandbox.ts b/packages/cli/src/utils/sandbox.ts index 3e766755..cbd0a6c6 100644 --- a/packages/cli/src/utils/sandbox.ts +++ b/packages/cli/src/utils/sandbox.ts @@ -332,11 +332,6 @@ export async function start_sandbox(sandbox: string) { args.push('--env', `GEMINI_CODE_MODEL=${process.env.GEMINI_CODE_MODEL}`); } - // copy TERMINAL_TOOL to optionally enable shell tool - if (process.env.TERMINAL_TOOL) { - args.push('--env', `TERMINAL_TOOL=${process.env.TERMINAL_TOOL}`); - } - // copy TERM and COLORTERM to try to maintain terminal setup if (process.env.TERM) { args.push('--env', `TERM=${process.env.TERM}`); |
