Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
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
Claude committed on June 6, 2026Parent: ee17176
3 files changed+11320ef3fd93755bb3d9b5001ade9eb4d2fcaea26b315
3 changed files+1132−0
Modifiedsrc/app.tsx+6−0View fileUnifiedSplit
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";
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
147147 | "semantic"
148148 | "wiki"
149149 | "projects"
150 | "agents"
150151 | "settings";
151152}> = ({ owner, repo, active }) => (
152153 <div class="repo-nav">
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