Skip to content

Exploring projects and files#3104

Draft
rafavalls wants to merge 23 commits intomainfrom
rafavalls/filesystem-ux
Draft

Exploring projects and files#3104
rafavalls wants to merge 23 commits intomainfrom
rafavalls/filesystem-ux

Conversation

@rafavalls
Copy link
Copy Markdown
Collaborator

@rafavalls rafavalls commented Apr 10, 2026

Exploration of projects, folders, file system and agents


Summary by cubic

Introduces a project-centric, file‑first UX: projects contain agents, open to a Files view with a new content toolbar, and the tasks panel now shows all tasks across projects. The home screen adds quick actions (e.g., New Project, New Slides) that create scoped projects and route users into the right UI.

  • New Features

    • Projects: new entity type with a Files home, simplified settings (name, icon, description, agents), and a Layout section to pick a default tool UI.
    • Content Toolbar: shows Files plus tool UIs from project agents; projects default to Files; panels reordered to [Tasks | Chat | Content].
    • Tasks panel: unified list across all projects with project badges; filter/group by project or status; clicking a task navigates to its project and restores the saved view; per-task layout persisted locally.
    • Quick Actions: home replaces agent list with actions like New Project, New Diagnostic, New Site, and one‑click New Slides (creates connection, agent, project, and default view).
    • Agent scoping: chat agent selector is limited to the current project’s agents; sidebar hover exposes a settings icon for projects.
    • Tool input: thread toolInput from project metadata into app rendering to open a specific resource (e.g., a slide deck).
    • Seed script: apps/mesh/scripts/seed-slide-project.ts creates a slides project locally for demos.
  • Refactors

    • Sidebar shows only top‑level projects; agents live inside project settings.
    • useTasks supports an empty virtualMcpId to fetch all tasks unfiltered.
    • Default panel state: projects open main+chat; org home opens tasks by default.
    • New components and utilities for the file browser and layout persistence (ArtifactCard, FolderCard, FileBrowserHome, FolderView, ContentToolbar, task-layout-store, mock artifacts).

Written for commit 90dc4fc. Summary will update on new commits.

rafavalls and others added 23 commits April 8, 2026 02:06
Replace the agent-centric org home with a file-browser home that shows
folders and recent artifacts. Users think in files and folders, not agents.

- Add mock artifact data (slides, reports, sites) and folder definitions
- Add ArtifactCard, FolderCard, FileBrowserHome, FolderView components
- Change decopilot home to show file browser in main panel + chat sidebar
- Conditionally render home chat variant only when main panel is closed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Wire quick actions to create chat tasks with relevant prompts
- Add "All Files" view with search and type filtering
- Add "See all" link from recent section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Keep the home layout the same (chat-first, full width) but reframe
agent icons as action items (New Site, New Diagnostic) and add folders
+ recent files below. Reverts the file-browser-in-main-panel approach
in favor of keeping everything in the chat home view.

- Revert decopilot defaults back to chat-only (no main panel)
- Create QuickActions component with action items + folders + recent files
- Replace AgentsList with QuickActions in HomeEmptyState
- Make home scrollable to accommodate the new sections below

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Sidebar: relabel agents as projects throughout (popover, tooltips, labels)
- Tasks panel: on org home, show ALL tasks across projects with project
  name label under each task row
- useTasks: support empty virtualMcpId to fetch all tasks unfiltered
- Home: remove Folders section, keep action items only
- Layout: open tasks panel by default on org home so users see all tasks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Tasks panel is always the same: shows ALL tasks with project labels,
  regardless of whether you're on org home or inside a project
- Remove SpaceIdentityHeader, ProjectViewsSection, PinnedViewIcon from
  tasks panel (no longer needed with unified view)
- Sidebar hover: replace X/unpin icon with Settings icon that navigates
  to project settings
- Sidebar click still creates a new task for that project

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Project settings now shows:
- Tab: "Agents" instead of "Connections"
- Empty state: "No agents yet"
- Add dialog: "Add Agent"
- Delete: "Delete Project?"
- Home: "New project" instead of "Create agent"
- Layout tab references updated

Connections still exist under agents — the hierarchy is
Projects > Agents > Connections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Real structural separation, not just label renames:

Sidebar:
- Filter to top-level projects only (Virtual MCPs that are NOT children
  of other Virtual MCPs are shown; nested agents are hidden)
- getChildVirtualMcpIds() computes which VMCPs are agents inside projects

Project settings (Agents tab):
- Partitions children into agents (Virtual MCP children) vs regular
  connections, rendering AgentItem cards for agents
- AgentItem shows avatar, name, connection count, click to navigate
  to agent's own settings
- "Add Agent" button opens AddAgentDialog to browse/create agents
- Regular connections shown under "Direct Connections" sub-section

AddAgentDialog (new file):
- Browse existing Virtual MCPs to add as agents to a project
- "Create new" button creates a fresh agent and adds it
- Excludes current project, already-added agents, and decopilot

Task navigation:
- Clicking a task from a different project navigates to that project's
  route with the task selected (cross-project navigation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Projects are now distinct from agents:
- Projects have metadata.type = "project" and are shown in sidebar
- Agents are regular Virtual MCPs without the flag — only visible
  inside project settings, not in sidebar
- New useCreateProject hook creates VMCPs with the project flag
- Sidebar + popover only show projects, not agents
- Home "New project" uses createProject

This means the sidebar is clean — only user-created projects appear.
Agents (Site Editor, custom agents, etc.) live inside projects.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Projects and agents now have completely different UIs:

Project home (default when entering a project):
- Shows files in a clean visual list (FileCard components)
- Project title and description at top
- Empty state prompts user to start working
- Main panel opens by default (files visible + chat)

Project settings (simple):
- Just name, icon, description + agents list
- Add/remove agents with AgentCard components
- Delete project dialog
- No instructions, no connections, no layout tabs

Agent settings (unchanged):
- Instructions, connections, layout tabs
- Full VirtualMcpDetailView as before

Layout defaults:
- Projects: main panel open (files) + chat open
- usePanelState accepts isProject option
- Shell layout detects project via metadata.type

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- "New Diagnostic" creates a project titled "New Diagnostic" with
  the diagnostics agent pre-assigned (if recruited), then navigates in
- "New Site" opens the site editor onboarding (needs setup first)
- "New project" creates a blank project
- useCreateProject now accepts title and agentIds params

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clicking "New Slides" on the home page creates everything in one shot:
1. HTTP connection to slide-maker.decocms.com
2. "Slide Maker" agent with that connection
3. "My Slides" project with the agent + default UI set to slide_maker tool
4. Navigates to the project

The project's defaultMainView is set to ext-apps/slide_maker so the
slide editor opens automatically as the main panel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Swap chat and main content panels to match Conductor layout:
- Panel 1 (left): Tasks
- Panel 2 (center): Chat
- Panel 3 (right): Main content / Layout

Add ContentToolbar at top of the right panel:
- Shows icons for available UI tools from the project's agents
  (reads from pinnedViews or defaultMainView metadata)
- Settings icon on the right
- Only renders for projects (not agents or decopilot)

Toolbar toggle buttons in the top bar reordered to match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove rounded-[inherit] from content area below ContentToolbar
  so the UI tool renders edge-to-edge under the toolbar
- Add Files icon (first in toolbar) that shows the project file browser
- Files icon is active when no specific tool view is selected

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each project can store tool-specific input in its metadata at
metadata.ui.layout.defaultMainView.toolInput. This is passed through
to the MCPAppRenderer when the tool UI opens.

For slides: a project can store { deckId: "xxx" } so opening the
project opens THAT specific deck, not the full deck browser.

- AppRenderer accepts optional toolInput prop
- AppViewContent threads toolInput to AppRenderer
- agent-home.tsx reads toolInput from project metadata for ext-apps view

This enables the "each slide deck = its own project" pattern without
changing the slide-maker MCP app.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ings

- Content toolbar: swap Settings01 (key-like) for Settings02 (gear),
  File06 for FolderClosed (more recognizable)
- Project settings: add Layout section showing connections from agents
  that may have UIs, click to set as default view for the project
- Layout section traverses project → agents → connections to find
  all real connections and shows them with the agent they belong to

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Files icon now navigates to ?main=files which is handled explicitly
in agent-home.tsx to render ProjectHome (file browser) instead of
falling through to the entity's defaultMainView (which would show
the tool UI again).

- ContentToolbar: Files button uses openMainView("files")
- agent-home.tsx: check search.main === "files" before resolving
  default view, render ProjectHome
- isFilesActive reads raw search param

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When inside a project, the agent selector popover now only shows
agents that belong to that project — not all org agents.

- Add ProjectScopeProvider context with agentIds Set
- Shell layout wraps Chat.Provider in ProjectScopeProvider when
  entity is a project, passing its connection IDs as agent IDs
- VirtualMCPPopoverContentInner auto-reads useProjectScope() and
  filters the agent list to only scoped IDs
- Default chat (no agent selected) works as decopilot routing
  within the project's tool context

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tyle

Files view:
- Projects default to file browser when no ?main= param is set
- ?main=files explicitly shows file browser
- Entity defaultMainView only applies when ?main=ext-apps is in URL

Toolbar styling:
- Icons now use same size-7 ghost button style as top bar layout toggles
- 16px icon size, sidebar-accent active state, sidebar-foreground colors
- Toolbar height matches top bar (h-10)
- Tool icons use AgentAvatar at xs size
- Settings uses Settings02 (gear)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Task panel improvements:
- Each task row shows the project icon + name (AgentAvatar)
- Filter icon in header opens dropdown with:
  - No grouping (default, flat list)
  - Group by project (accordion sections)
  - Group by status (accordion sections)
  - Filter by specific project (shows only that project's tasks)
- Active filter state shown with highlighted filter icon
- ProjectInfo type carries both name and icon
- Grouped view shows section headers with task count

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove onTaskSelect override so TaskListContent's cross-project
  navigation runs (navigates to /$org/$projectId/?taskId=...)
- Filter projectNames to only include entities with metadata.type="project"
  so task labels show project names, not agent names

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When clicking a task from the task panel, the navigation now includes
the project's defaultMainView (ext-apps/slide_maker etc.) in the URL
search params. This means clicking a task from a slides project opens
the slide editor, not just the files view.

- ProjectInfo now carries defaultView from entity metadata
- handleSelect builds search params with main/id/toolName from defaultView
- side-panel-tasks reads layout.defaultMainView from each project

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each task now remembers its own layout state:
- Chat panel open/closed
- Content panel open/closed
- Which main view was active (files, ext-apps, settings)

Tasks panel state is global (not per-task).

Implementation:
- task-layout-store.ts: localStorage-based store keyed by taskId
- usePanelState saves layout whenever URL params change with a taskId
- Task click handler reads saved state, falls back to project default
- Max 200 entries with automatic pruning

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Benchmark

Should we run the Virtual MCP strategy benchmark for this PR?

React with 👍 to run the benchmark.

Reaction Action
👍 Run quick benchmark (10 & 128 tools)

Benchmark will run on the next push after you react.

@github-actions
Copy link
Copy Markdown
Contributor

Release Options

Suggested: Patch (2.258.1) — default (no conventional commit prefix detected)

React with an emoji to override the release type:

Reaction Type Next Version
👍 Prerelease 2.258.1-alpha.1
🎉 Patch 2.258.1
❤️ Minor 2.259.0
🚀 Major 3.0.0

Current version: 2.258.0

Note: If multiple reactions exist, the smallest bump wins. If no reactions, the suggested bump is used (default: patch).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant