diff --git a/apps/web/app/api/workspace/suggest-files/route.ts b/apps/web/app/api/workspace/suggest-files/route.ts index 8a39e029299..793a29d8eb9 100644 --- a/apps/web/app/api/workspace/suggest-files/route.ts +++ b/apps/web/app/api/workspace/suggest-files/route.ts @@ -37,7 +37,6 @@ const SKIP_DIRS = new Set([ function listDir( absDir: string, filter?: string, - workspaceRoot?: string, ): SuggestItem[] { let entries: Dirent[]; try { @@ -47,13 +46,8 @@ function listDir( } const lowerFilter = filter?.toLowerCase(); - const hideRootIdentity = - typeof workspaceRoot === "string" && - resolve(absDir) === resolve(workspaceRoot); - const sorted = entries .filter((e) => !e.name.startsWith(".")) - .filter((e) => !(hideRootIdentity && e.name === "IDENTITY.md")) .filter((e) => !(e.isDirectory() && SKIP_DIRS.has(e.name))) .filter((e) => !lowerFilter || e.name.toLowerCase().includes(lowerFilter)) .toSorted((a, b) => { @@ -90,7 +84,6 @@ function searchFiles( query: string, results: SuggestItem[], maxResults: number, - workspaceRoot: string, depth = 0, ): void { if (depth > 6 || results.length >= maxResults) {return;} @@ -103,12 +96,9 @@ function searchFiles( } const lowerQuery = query.toLowerCase(); - const hideRootIdentity = resolve(absDir) === resolve(workspaceRoot); - for (const entry of entries) { if (results.length >= maxResults) {return;} if (entry.name.startsWith(".")) {continue;} - if (hideRootIdentity && entry.name === "IDENTITY.md") {continue;} if (entry.isDirectory() && SKIP_DIRS.has(entry.name)) {continue;} const absPath = join(absDir, entry.name); @@ -131,7 +121,7 @@ function searchFiles( } if (entry.isDirectory()) { - searchFiles(absPath, query, results, maxResults, workspaceRoot, depth + 1); + searchFiles(absPath, query, results, maxResults, depth + 1); } } } @@ -404,7 +394,7 @@ export async function GET(req: Request) { if (searchQuery) { // File search: workspace only (skip expensive home dir traversal) const fileResults: SuggestItem[] = []; - searchFiles(workspaceRoot, searchQuery, fileResults, 15, workspaceRoot); + searchFiles(workspaceRoot, searchQuery, fileResults, 15); // DuckDB search: objects and entries (sequential to avoid lock contention) const objectResults = await searchObjects(searchQuery, workspaceRoot, 10); @@ -426,15 +416,15 @@ export async function GET(req: Request) { const resolved = resolvePath(pathQuery, workspaceRoot); if (!resolved) { const results: SuggestItem[] = []; - searchFiles(workspaceRoot, pathQuery, results, 20, workspaceRoot); + searchFiles(workspaceRoot, pathQuery, results, 20); return Response.json({ items: results }); } - const items = listDir(resolved.dir, resolved.filter, workspaceRoot); + const items = listDir(resolved.dir, resolved.filter); return Response.json({ items }); } // Default: list workspace root + all objects - const fileItems = listDir(workspaceRoot, undefined, workspaceRoot); + const fileItems = listDir(workspaceRoot); const objectItems = await searchObjects("", workspaceRoot, 20); // Deduplicate: if an object also appears as a folder, keep the object version const objectNames = new Set(objectItems.map((o) => o.name)); diff --git a/apps/web/app/api/workspace/tree/route.ts b/apps/web/app/api/workspace/tree/route.ts index 3f0d640e984..414247ccb61 100644 --- a/apps/web/app/api/workspace/tree/route.ts +++ b/apps/web/app/api/workspace/tree/route.ts @@ -115,9 +115,6 @@ function buildTree( for (const entry of sorted) { // .object.yaml is consumed for metadata; only show it as a visible node when revealing hidden files if (entry.name === ".object.yaml" && !showHidden) {continue;} - // Keep the root identity system file out of the workspace sidebar tree. - if (!relativeBase && entry.name === "IDENTITY.md") {continue;} - const absPath = join(absDir, entry.name); const relPath = relativeBase ? `${relativeBase}/${entry.name}` @@ -203,7 +200,7 @@ function buildSkillsVirtualFolder(): TreeNode | null { const entries = readdirSync(dir, { withFileTypes: true }); for (const entry of entries) { if (!entry.isDirectory() || seen.has(entry.name)) {continue;} - if (entry.name === "dench") {continue;} + if (entry.name === "crm" || entry.name === "browser") {continue;} const skillMdPath = join(dir, entry.name, "SKILL.md"); if (!existsSync(skillMdPath)) {continue;} diff --git a/apps/web/app/components/workspace/create-workspace-dialog.tsx b/apps/web/app/components/workspace/create-workspace-dialog.tsx index e8f61ae32e5..ac19aa1a75a 100644 --- a/apps/web/app/components/workspace/create-workspace-dialog.tsx +++ b/apps/web/app/components/workspace/create-workspace-dialog.tsx @@ -204,7 +204,7 @@ export function CreateWorkspaceDialog({ isOpen, onClose, onCreated }: CreateWork {/* Bootstrap toggle */} -