Skip to content

Commit 2a001f3

Browse files
fix: File Inspector filters to workspace-existing files only
- Validates extracted files against workspace API - Filters out slmcode source files (pkg/, cmd/, AGENTS.md) from false positives - Only shows files that actually exist in the project
1 parent f856797 commit 2a001f3

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

‎cmd/slmcode/ui/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
99
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
1010
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='6' fill='%237c3aed'/><text x='16' y='22' font-family='system-ui' font-weight='700' font-size='18' fill='white' text-anchor='middle'>SL</text></svg>" />
11-
<script type="module" crossorigin src="/assets/index-nobijzql.js"></script>
11+
<script type="module" crossorigin src="/assets/index-Del_mAJI.js"></script>
1212
<link rel="stylesheet" crossorigin href="/assets/index-DLElLyRL.css">
1313
</head>
1414
<body class="antialiased">

‎web/src/components/Files/FileInspector.tsx‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,26 @@ export default function FileInspector({ events, running }: Props) {
379379
const draftInputRef = useRef<HTMLTextAreaElement>(null);
380380

381381
const [fetchedContent, setFetchedContent] = useState<string | null>(null);
382+
const [validFiles, setValidFiles] = useState<Set<string>>(new Set());
383+
384+
// Validate extracted files against workspace (only show files that exist)
385+
useEffect(() => {
386+
const extracted = extractFiles(events);
387+
const filesToCheck = extracted.map(f => f.path);
388+
if (filesToCheck.length === 0) return;
389+
let cancelled = false;
390+
// Check first 20 files (batch)
391+
const check = filesToCheck.slice(0, 20);
392+
Promise.allSettled(check.map(p => getWorkspaceFile(p))).then(results => {
393+
if (cancelled) return;
394+
const valid = new Set<string>();
395+
results.forEach((r, i) => {
396+
if (r.status === 'fulfilled') valid.add(check[i]);
397+
});
398+
setValidFiles(valid);
399+
});
400+
return () => { cancelled = true; };
401+
}, [events]);
382402

383403
// Fetch actual file content from workspace when a file is selected
384404
useEffect(() => {
@@ -393,7 +413,13 @@ export default function FileInspector({ events, running }: Props) {
393413
}, [selectedFile]);
394414

395415
// ── Derived data ──
396-
const files = useMemo(() => extractFiles(events), [events]);
416+
const allFiles = useMemo(() => extractFiles(events), [events]);
417+
// Only show files that exist in workspace, or all files if none validated yet
418+
const files = useMemo(() => {
419+
if (validFiles.size > 0) return allFiles.filter(f => validFiles.has(f.path));
420+
// Also filter out common false positives (files mentioned in agent instructions)
421+
return allFiles.filter(f => !f.path.startsWith('pkg/') && !f.path.startsWith('cmd/') && f.path !== 'AGENTS.md');
422+
}, [allFiles, validFiles]);
397423

398424
const selectedFileInfo = useMemo(
399425
() => files.find((f) => f.path === selectedFile) ?? null,

0 commit comments

Comments
 (0)