organize managed and local connections - #76
Conversation
| <LocalMcpSection | ||
| searchTerm={searchTerm} | ||
| workspacePaths={workspacePaths} | ||
| onAddConnection={ | ||
| onAskAgentToAddMcp ? askAgentToAddConnection : undefined | ||
| } | ||
| /> |
There was a problem hiding this comment.
The removed isCompanyManagedExtension filter existed specifically so a local extension that matches an OAuth catalog provider wasn't presented twice (old comment: “extensions already represented by an OAuth catalog card”). Nothing replaces it here: a Goose config.yaml entry keyed slack, linear, etc. now renders as an OAuth row under Company managed and as a passive row under Local, describing the same service with contradictory affordances (Connect/Disconnect above, read-only below). managedExtensions.ts is now unused by production code — either re-apply the match against OAUTH_PROVIDERS when filtering local groups, or make the duplication an explicit product decision.
Generated by AI
There was a problem hiding this comment.
🤖 This duplication is intentional in the new model. Company managed describes the organization-provided OAuth connection and its lifecycle; Local truthfully reports MCP configuration found in Goose, Claude Code, or Codex. A Slack/Linear entry can exist through both paths with different availability, auth, and session behavior. Reapplying the old fuzzy catalog-name filter would hide real local configuration and undermine the purpose of the Local inventory. I’m leaving this thread open for Morgan’s product judgment.
Category: improvement
User Impact: Connections now shows company-managed services separately from MCPs configured for Goose, Claude Code, and Codex on this device.
Problem: Connections previously mixed company services and Goose extensions into Installed and Available sections, while ignoring MCP configuration owned by Claude Code and Codex. That structure also made local configuration look more like an installer or health surface than a passive inventory.
Solution: Organize the page into Company managed and Local sections under one shared search. Preserve the existing managed catalog and actions, add read-only cross-harness discovery for local MCP configuration, and direct setup through an editable agent-chat draft rather than a technical form.
Product and trust boundaries
File changes
src-tauri/Cargo.lock
Records the TOML parser dependency used for passive Codex configuration discovery.
src-tauri/Cargo.toml
Adds TOML parsing support for Codex MCP configuration.
src-tauri/src/commands/local_mcp_inventory.rs
Adds bounded, read-only discovery adapters for Goose, Claude Code, and Codex. Returns only redacted structural metadata, isolates source failures, recognizes active-project scopes, and generates opaque identity fingerprints without exposing targets or secrets.
src-tauri/src/commands/mod.rs
Registers the local MCP inventory command module.
src-tauri/src/lib.rs
Exposes the inventory command through Tauri's command handler.
src/app/AppShell.navigation.test.tsx
Protects the Add connection handoff: it preserves the selected harness and creates an editable unsent draft.
src/app/AppShell.tsx
Adds the neutral connection-setup chat handoff without coupling it to provider troubleshooting.
src/app/ui/AppShellContent.tsx
Threads the neutral setup-chat callback into Settings.
src/features/chat/lib/setupChatRequest.ts
Defines the small shared contract for opening a setup conversation as a draft.
src/features/connections/api/localMcpInventory.ts
Defines the minimal renderer-safe inventory contract and Tauri API wrapper.
src/features/connections/lib/tests/localMcpInventory.test.ts
Covers conservative cross-harness identity, collision handling, filtering, and partial-source reporting.
src/features/connections/lib/localMcpInventory.ts
Groups only entries with matching key, name, transport, and opaque target fingerprint, and provides shared filtering/error derivation.
src/features/connections/ui/ConnectionCards.test.tsx
Protects the existing managed-row behavior and spacing between Disconnect and Reconnect actions.
src/features/connections/ui/ConnectionCards.tsx
Adds the missing standard gap around paired managed connection actions; all other managed behavior remains unchanged.
src/features/connections/ui/ConnectionsSettings.pane.test.tsx
Covers section ownership, shared search, empty/error/partial states, retry, active-project changes, and agent setup requests.
src/features/connections/ui/ConnectionsSettings.tsx
Reorganizes the page into Company managed and Local sections, preserves the full managed catalog/actions and ordering, shares one search, and adds the agent-led Add connection entry point.
src/features/connections/ui/LocalMcpConnectionCard.tsx
Renders passive local inventory through the existing ConnectionCard row pattern with a simple Works with label.
src/features/connections/ui/LocalMcpSection.tsx
Owns local inventory loading, successful empty, partial, failure, retry, and search-result states without adding mutation controls.
src/features/settings/ui/SettingsView.tsx
Connects the Connections page to the neutral setup-chat handoff.
src/shared/i18n/locales/en/settings.json
Adds English copy for the new sections, passive inventory, recovery states, and Add connection flow.
src/shared/i18n/locales/es/settings.json
Adds matching Spanish translations.
Verification
just checkjust tauri-checkjust clippy