Commitef3fd93unknown_key
Build multi-agent pipeline UI at /:owner/:repo/agents
Build multi-agent pipeline UI at /:owner/:repo/agents Adds a full server-rendered pipeline builder and live monitor for AI agent coordination on a repository, using the existing agent_sessions and agent_leases tables from agent-multiplayer.ts. Routes added (src/routes/agent-pipelines.tsx): - GET /:owner/:repo/agents — list all pipelines for the repo - GET /:owner/:repo/agents/new — visual pipeline builder form - POST /:owner/:repo/agents — create + start pipeline session - GET /:owner/:repo/agents/:sessionId — live status view (5s meta-refresh) - POST /:owner/:repo/agents/:sessionId/cancel — cancel & expire all leases Pipeline execution is triggered by the POST handler calling createAgentSession() from agent-multiplayer.ts, which mints an agt_ Bearer token, writes the session row, and then records each stage as an agentLeases row with targetType="pipeline_stage". The live view polls the leases table every 5 seconds via <meta http-equiv="refresh">. Also adds "Agents" tab to the RepoNav component and registers the routes in app.tsx before the webRoutes catch-all. https://claude.ai/code/session_01DzJMTFASjMHt2f5ze4cNLR
3 files changed+1132−0ef3fd93755bb3d9b5001ade9eb4d2fcaea26b315
3 changed files+1132−0
Modifiedsrc/app.tsx+6−0View fileUnifiedSplit
@@ -27,6 +27,7 @@ import settingsAgentsRoutes from "./routes/settings-agents";
2727import settingsIntegrationsRoutes from "./routes/settings-integrations";
2828import integrationsChatRoutes from "./routes/integrations-chat";
2929import agentsRoutes from "./routes/agents";
30import agentPipelinesRoutes from "./routes/agent-pipelines";
3031import issueRoutes from "./routes/issues";
3132import commentModerationRoutes from "./routes/comment-moderation";
3233import repoSettings from "./routes/repo-settings";
@@ -378,6 +379,11 @@ app.route("/", apiV2Routes);
378379// Mounted alongside apiV2Routes (its own basePath, no path conflict).
379380app.route("/", agentsRoutes);
380381
382// Multi-agent pipeline UI — /:owner/:repo/agents (list, new, live view).
383// Must be before webRoutes (the catch-all) so the /agents sub-paths are
384// resolved before the generic tree/blob route takes over.
385app.route("/", agentPipelinesRoutes);
386
381387// Inbound API hooks (GateTest callback + backup PAT-authed /api/v1/gate-runs)
382388app.route("/", hookRoutes);
383389app.route("/api/events", eventsRoutes);
Addedsrc/routes/agent-pipelines.tsx+1119−0View fileUnifiedSplit
Large file (1,119 lines). Load full file
Modifiedsrc/views/components.tsx+7−0View fileUnifiedSplit
@@ -147,6 +147,7 @@ export const RepoNav: FC<{
147147 | "semantic"
148148 | "wiki"
149149 | "projects"
150 | "agents"
150151 | "settings";
151152}> = ({ owner, repo, active }) => (
152153 <div class="repo-nav">
@@ -207,6 +208,12 @@ export const RepoNav: FC<{
207208 >
208209 Insights
209210 </a>
211 <a
212 href={`/${owner}/${repo}/agents`}
213 class={active === "agents" ? "active" : ""}
214 >
215 Agents
216 </a>
210217 <a
211218 href={`/${owner}/${repo}/explain`}
212219 class={`repo-nav-ai${active === "explain" ? " active" : ""}`}
213220