import type { DiscoveredAgent } from "./discovery.js"; export declare const SENAI_ROLES: readonly ["scout-1", "scout-2", "scout-3", "scout-4", "discussion", "planner", "plan-overview", "reviewer-correctness", "reviewer-security", "reviewer-tests", "reviewer-architecture", "test-skeleton", "implementer", "linter", "code-review", "full-test", "readme-writer", "changelog-writer", "api-docs-writer", "other-docs-writer", "security-gate", "archive", "community-researcher"]; export type SenaiRole = (typeof SENAI_ROLES)[number]; /** Roles whose job is reading project documents. Only these appear in the * agents-files picker and in doctor's assignment suggestions. The remaining * roles consume stage artifacts (plan, scout reports, code) and normally * need no document assignments. The config format still accepts every role * for advanced hand-editing. */ export declare const DOCUMENT_ROLES: SenaiRole[]; export declare const DEFAULT_AGENTS: Record; export declare const WEB_TOOLS: ReadonlySet; export declare const WEB_TOOL_ALLOWED_ROLES: ReadonlySet; export declare const ROLE_LABELS: Record; /** Guidance tag shown per role in the agents-files picker (user-approved * wording and colors): scout-1 is fixed by the architecture factory, * scout-3 is optional, everything else should be configured. */ export type RoleGuidance = "design-defined" | "recommended" | "optional"; export declare const ROLE_GUIDANCE: Partial>; /** Sequence-orchestrated roles hidden from the agents-files picker (user * decision): their primary input is stage artifacts and Senai runs them * automatically. They stay in DOCUMENT_ROLES — assignments remain valid in * JSON and doctor keeps suggesting documents for them. */ export declare const SEQUENCE_ROLES: SenaiRole[]; /** Roles actually shown in the agents-files picker: document roles minus the * hidden sequence roles. */ export declare const PICKER_ROLES: SenaiRole[]; /** Roles that may be dispatched from /senai-brainstorm. Each one has a * read-only mandate and never writes to the active run state. Roles NOT in * this list (implementer, all doc-writers, security-gate, code-review, * archive, linter, full-test) belong to later stages and must not be * invoked mid-discussion. * * The list is the single source of truth — used by: * - brainstorm/registry.ts (filter eligible agents) * - commands/brainstorm.ts (inject registry block into the stage prompt) * - tests/brainstorm/registry.test.ts (verify eligibility) * - doctor/checks-brainstorm-audit.ts (Phase 6: flag ineligible dispatches) */ export declare const BRAINSTORM_ELIGIBLE_ROLES: readonly SenaiRole[]; /** Default agent name + keyword set for each brainstorm-eligible role. * Used by registry.ts matchSpecialist to score topics. */ export declare const BRAINSTORM_ROLE_KEYWORDS: Record; /** True when a role is in BRAINSTORM_ELIGIBLE_ROLES. The registry layer uses * this to filter agents before they can be dispatched. */ export declare function isBrainstormEligible(role: SenaiRole): boolean; /** ────────────────────────────────────────────────────────────────────── * Read-only tool enforcement (Phase 4 dispatcher) * ────────────────────────────────────────────────────────────────────── */ /** Tool names that mutate persistent state. Stripped from every brainstorm * dispatch payload so even a misconfigured agent cannot write code or * config during a discussion. */ export declare const FORBIDDEN_TOOLS: readonly string[]; /** Tool names that are allowed in a brainstorm dispatch. Everything else * (custom user tools, MCP tools, etc.) is also rejected so the agent stays * strictly within the read-only contract. */ export declare const READ_ONLY_ALLOWED_TOOLS: readonly string[]; /** Strip forbidden tools from an agent's tool list. Returns the cleaned * list. Used by the dispatcher to harden a subagent's tool allowlist * before the parent LLM spawns it. * * Examples: * enforceReadOnlyTools(["Read", "Write", "Grep"]) → ["Read", "Grep"] * enforceReadOnlyTools(["Write", "Edit"]) → [] * enforceReadOnlyTools([]) → [] * enforceReadOnlyTools(["Read", "MCP/foo"]) → ["Read"] (unknown tools rejected) */ export declare function enforceReadOnlyTools(tools: readonly string[]): string[]; export declare function suggestAgentForRole(role: SenaiRole, agents: DiscoveredAgent[]): string | undefined; export declare function buildSuggestionMap(agents: DiscoveredAgent[]): Partial>;