Overhaul Orbit dashboard with agent-first design

Summary

  • Redesign Orbit dashboard with agent-first layout, schema visualization with entity type icons, and improved navigation
  • Fix eslint, prettier, and i18n issues across the Orbit frontend
  • Wire Orbit MCP server into the Duo Agent Platform as a first-class trusted citizen
  • Add foundational "Orbit" agent to the agent picker, gated behind knowledge_graph FF

Orbit + DAP Integration

Enables agentic chat to query the Knowledge Graph via Orbit's MCP tools (query_graph, get_graph_schema).

Rails

  • McpConfigService: adds orbit MCP server config alongside gitlab, gated behind knowledge_graph FF. Both tools pre-approved (read-only)
  • ee/lib/api/orbit/data.rb, mcp.rb, internal/orbit.rb: accept ai_workflows OAuth scope so DWS tokens can call Orbit API and the internal redaction endpoint
  • FoundationalChatAgentsDefinitions: adds Orbit agent (id=7) with position attribute for display ordering
  • FoundationalChatAgentsResolver: sorts by position, filters Orbit when knowledge_graph FF is disabled

Workhorse

  • mcp.go: adds orbit as special-cased MCP server name (like gitlab), routing to /api/v4/orbit/mcp via the internal Rails transport
  • mcp.go roundTripper: intercepts Gitlab-Workhorse-Send-Data responses with orbit-query: prefix and invokes the SendQuery injector inline. This is needed because the MCP client's HTTP calls bypass Workhorse's normal senddata middleware, but query_graph uses the SendData pattern for streaming gRPC queries with auth/redaction

How it works

McpConfigService (Rails) -> Workhorse connects to /api/v4/orbit/mcp
  -> tools/list returns query_graph + get_graph_schema
  -> tools prefixed as orbit_query_graph, orbit_get_graph_schema
  -> passed to DWS as McpTool protobufs (pre-approved, no UNTRUSTED warning)
  -> agent calls orbit_query_graph
  -> DWS sends RunMCPTool action to Workhorse
  -> Workhorse proxies to Orbit MCP -> Rails returns SendData header
  -> roundTripper intercepts SendData, invokes SendQuery.Inject
  -> SendQuery opens gRPC stream to GKG, handles redaction via Rails
  -> GOON-formatted result returned to agent

Test plan

  • Verify Orbit dashboard loads at /orbit route
  • Verify schema data tab renders entity icons and search works
  • Select Orbit agent in Duo Chat agent picker
  • Ask "What groups exist in the knowledge graph?" -- verify orbit_get_graph_schema is called
  • Ask "List all merge requests" -- verify orbit_query_graph executes and returns data
  • Disable knowledge_graph FF -- verify Orbit agent disappears from picker
  • Verify lint checks pass in CI
Edited by Michael Angelo Rivera

Merge request reports

Loading