diff --git a/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx b/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
index 0861c60e8e..ba056346cc 100644
--- a/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
+++ b/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
@@ -229,33 +229,35 @@ describe('DenseToolMessage', () => {
it('renders correctly for ls results', () => {
const lsResult = {
- summary: 'Listed 2 files',
+ summary: 'Listed 2 files. (1 ignored)',
files: ['file1.ts', 'dir1'],
};
const { lastFrame } = renderWithProviders(
,
);
const output = lastFrame();
- expect(output).toContain('→ Listed 2 files');
- expect(output).toContain('file1.ts');
- expect(output).toContain('dir1');
+ expect(output).toContain('→ Listed 2 files. (1 ignored)');
+ // Directory listings should not have a payload in dense mode
+ expect(output).not.toContain('file1.ts');
+ expect(output).not.toContain('dir1');
});
it('renders correctly for ReadManyFiles results', () => {
const rmfResult = {
summary: 'Read 3 file(s)',
files: ['file1.ts', 'file2.ts', 'file3.ts'],
+ include: ['**/*.ts'],
skipped: [{ path: 'skipped.bin', reason: 'binary' }],
};
const { lastFrame } = renderWithProviders(
,
);
const output = lastFrame();
- expect(output).toContain('→ Read 3 file(s)');
+ expect(output).toContain('Attempting to read files from **/*.ts');
+ expect(output).toContain('→ Read 3 file(s) (1 ignored)');
expect(output).toContain('file1.ts');
expect(output).toContain('file2.ts');
expect(output).toContain('file3.ts');
- expect(output).toContain('(1 skipped)');
});
it('renders correctly for todo updates', () => {
diff --git a/packages/cli/src/ui/components/messages/DenseToolMessage.tsx b/packages/cli/src/ui/components/messages/DenseToolMessage.tsx
index f9fb3f842c..41634d9cf3 100644
--- a/packages/cli/src/ui/components/messages/DenseToolMessage.tsx
+++ b/packages/cli/src/ui/components/messages/DenseToolMessage.tsx
@@ -144,44 +144,30 @@ function getFileOpData(
return { description, summary, payload };
}
-function getListResultData(
- result: ListDirectoryResult | ReadManyFilesResult,
- toolName: string,
- originalDescription?: string,
-): ViewParts {
- let description = originalDescription;
- const items: string[] = result.files ?? [];
+function getReadManyFilesData(result: ReadManyFilesResult): ViewParts {
+ const items = result.files ?? [];
const maxVisible = 10;
+ const includePatterns = result.include?.join(', ') ?? '';
+ const description = `Attempting to read files from ${includePatterns}`;
- // Enhance with ReadManyFiles specific data if present
- const rmf = result as ReadManyFilesResult;
- if (toolName === 'ReadManyFiles' && rmf.include) {
- const includePatterns = rmf.include.join(', ');
- description = `Attempting to read files from ${includePatterns}`;
- result.summary = `Read ${items.length} file(s)`;
- }
-
- const summary = → {result.summary};
-
- const skippedCount = rmf.skipped?.length ?? 0;
- const skippedText =
- skippedCount > 0 ? `(${skippedCount} skipped)` : undefined;
+ const skippedCount = result.skipped?.length ?? 0;
+ const summaryStr = `Read ${items.length} file(s)${
+ skippedCount > 0 ? ` (${skippedCount} ignored)` : ''
+ }`;
+ const summary = → {summaryStr};
const excludedText =
- rmf.excludes && rmf.excludes.length > 0
- ? `Excluded patterns: ${rmf.excludes.slice(0, 3).join(', ')}${rmf.excludes.length > 3 ? '...' : ''}`
+ result.excludes && result.excludes.length > 0
+ ? `Excluded patterns: ${result.excludes.slice(0, 3).join(', ')}${
+ result.excludes.length > 3 ? '...' : ''
+ }`
: undefined;
const hasItems = items.length > 0;
const payload =
- hasItems || skippedText || excludedText ? (
+ hasItems || excludedText ? (
{hasItems && }
- {skippedText && (
-
- {skippedText}
-
- )}
{excludedText && (
{excludedText}
@@ -193,6 +179,30 @@ function getListResultData(
return { description, summary, payload };
}
+function getListDirectoryData(
+ result: ListDirectoryResult,
+ originalDescription?: string,
+): ViewParts {
+ const summary = → {result.summary};
+ // For directory listings, we want NO payload in dense mode as per request
+ return { description: originalDescription, summary, payload: undefined };
+}
+
+function getListResultData(
+ result: ListDirectoryResult | ReadManyFilesResult,
+ toolName: string,
+ originalDescription?: string,
+): ViewParts {
+ // Use 'include' to determine if this is a ReadManyFilesResult
+ if ('include' in result) {
+ return getReadManyFilesData(result);
+ }
+ return getListDirectoryData(
+ result as ListDirectoryResult,
+ originalDescription,
+ );
+}
+
function getGenericSuccessData(
resultDisplay: unknown,
originalDescription?: string,