UNPKG

@blundergoat/goat-flow

Version:

AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.

172 lines 6.14 kB
/** * Manifest schema for goat-flow's single source of truth (M06a). * * `workflow/manifest.json` is the on-disk form. `loadManifest()` returns a * resolved `Manifest` where every `facts` field has been computed against * canonical code sources (SETUP_CHECKS, AGENT_CHECKS, HARNESS_CHECKS, * SKILL_NAMES, preset catalog JSON) or validated against observed on-disk * state (dashboard views). * * Derived values are never written into the JSON - they are computed at load * time so `facts` cannot drift from code. Static values are written into the * JSON and validated against observed reality on load; a mismatch raises a * `ManifestValidationError`. */ /** Manifest hook event names for one runtime. */ interface ManifestHookEvents { pre_tool: string; post_turn: string | null; } /** Prompt invocation syntax an agent expects for goat-flow skills. */ type ManifestPromptInvocationStyle = "slash" | "dollar"; /** Skill mirror/source classification used by quality inventory. */ type ManifestSkillSource = "installed" | "agent-mirror" | "github-mirror"; /** Stable capability metadata consumed outside setup/audit internals. */ interface ManifestAgentCapabilities { terminal_binary: string; setup_surfaces: string[]; prompt_invocation_style: ManifestPromptInvocationStyle; skill_source: ManifestSkillSource; } /** Manifest deny-mechanism metadata for one runtime. */ export type ManifestDenyMechanism = { type: "settings-deny"; path: string; } | { type: "deny-script"; path: string; } | { type: "both"; settings_path: string; script_path: string; }; /** The manifest-backed framework-support record for one agent runtime. * * `deny_mechanism` and `hook_events` are optional to model agents whose * upstream runtime has no documented project-local hook wiring for a given * capability; enforcement/audit code must guard for the null case. */ export interface AgentProfile { name: string; instruction_file: string; skills_dir: string; capabilities: ManifestAgentCapabilities; hooks_dir?: string; settings?: string; hook_config_file?: string; deny_hook?: string; deny_mechanism?: ManifestDenyMechanism; local_pattern: string; hook_events?: ManifestHookEvents; hooks?: string[]; } /** The existing `skills:` block. */ interface SkillsStructure { canonical: string[]; stale_names: string[]; references?: Record<string, string[]>; } /** Instruction-file contract declared by the manifest. `required_sections` is * the canonical list of hot-path headings each agent instruction file must * carry; harness checks build their regex patterns from these labels so the * harness cannot drift from the manifest. */ interface ManifestInstructionFile { line_target: number; line_limit: number; required_sections: string[]; version_header_pattern: string; } /** On-disk shape of `workflow/manifest.json` after M06a extends it. * * `facts` is optional so the loader can detect older manifests (missing key) * and produce a clean validation error instead of a cryptic type coercion. */ export interface ManifestJson { description: string; version: string; required_files: string[]; required_dirs: string[]; directory_purposes: Record<string, string>; optional_files: Record<string, string>; never_create: string[]; skills: SkillsStructure; agents: Record<string, AgentProfile>; instruction_file: ManifestInstructionFile; /** Added by M06a. Only holds values that cannot be derived from code. */ facts?: ManifestJsonFacts; } /** The `facts:` block as it appears on disk. Only static values. */ interface ManifestJsonFacts { dashboard_views: string[]; } /** Resolved skill facts derived from `src/cli/constants.ts` `SKILL_NAMES`. */ export interface SkillFacts { total: number; names: readonly string[]; dispatcher: string; functional_count: number; stale_names: readonly string[]; } /** Resolved check counts derived from the audit check arrays. */ export interface CheckFacts { setup: number; agent: number; harness: number; total: number; } /** Resolved dashboard-view facts. Static list validated against disk. */ interface DashboardViewFacts { count: number; names: readonly string[]; } /** Resolved preset facts derived from the preset catalog JSON length. */ interface PresetFacts { count: number; } /** Fully-populated facts returned by `loadManifest()`. */ export interface ResolvedFacts { version: string; skills: SkillFacts; checks: CheckFacts; dashboard_views: DashboardViewFacts; presets: PresetFacts; } /** Resolved manifest - on-disk JSON plus computed `facts`. */ export interface Manifest { version: string; /** Files the project must contain; validated against disk by audit checks. */ required_files: string[]; /** Directories the project must contain; validated against disk by audit checks. */ required_dirs: string[]; skills: SkillsStructure; agents: Record<string, AgentProfile>; instruction_file: ManifestInstructionFile; facts: ResolvedFacts; } /** Inputs to `validateManifest` and `composeManifest`. Derived from running * code state; `loadManifest` builds these from disk and test helpers * construct them directly. */ export interface ObservedFacts { views: string[]; presetsCount: number; skills: readonly string[]; setupChecks: number; agentChecks: number; harnessChecks: number; version: string; } /** Raised when the on-disk manifest's static facts disagree with observed reality. */ declare class ManifestValidationError extends Error { readonly findings: string[]; constructor(message: string, findings: string[]); } export { ManifestValidationError }; /** One consistency finding produced by `checkManifest()`. */ interface ManifestCheckFinding { rule: string; message: string; } /** Report returned by `checkManifest()`. */ export interface ManifestCheckReport { status: "pass" | "fail"; findings: ManifestCheckFinding[]; } //# sourceMappingURL=types.d.ts.map