AkurAI Build
Menu

popagent

public

Latest change 59f3c89df7ac29e072aafa31e6ad04dc601a750d - Add bounded repository brief service by AkurAI Build

import { createTool } from "@mastra/core/tools";
import { z } from "zod";
import { AGENT_CONTEXT_KEYS, agentContextValue } from "../agent-context";
import { repositoryBrief } from "../repo-brief";

const symbolSchema = z.object({
  name: z.string(),
  kind: z.enum(["class", "const", "function", "interface", "type"]),
  line: z.number().int().positive(),
});

export const repoBrief = createTool({
  id: "repo-brief",
  description: "Build a deterministic, bounded repository brief from request terms: matching source files, exported symbols, adjacent tests, and repository change state. It never calls a model or the network.",
  inputSchema: z.object({ query: z.string().trim().min(1).max(2_000) }),
  outputSchema: z.object({
    repository: z.object({ clean: z.boolean(), changedFiles: z.array(z.string()) }),
    candidates: z.array(z.object({ path: z.string(), score: z.number(), symbols: z.array(symbolSchema) })),
    tests: z.array(z.string()),
    readyForImplementation: z.boolean(),
    gaps: z.array(z.string()),
  }),
  execute: async ({ query }, context) => {
    const workspaceId = agentContextValue(context.requestContext, AGENT_CONTEXT_KEYS.workspaceId);
    if (!workspaceId) throw new Error("Workspace context is required for a repository brief");
    return repositoryBrief.build(workspaceId, query);
  },
});