@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.
118 lines • 4.63 kB
TypeScript
/**
* Shared type contracts for the goat-flow config file.
* These interfaces describe the normalized shape used after YAML parsing and validation.
*/
interface GoatFlowToolchain {
test: string[];
lint: string[];
build: string[];
package: string[];
format: string[];
}
/** Optional goat-review skill configuration. */
interface GoatReviewConfig {
/** Local branch/ref to use before remote default-branch discovery in local PR reviews. */
localPrBase: string;
}
/** Skill installation and per-skill configuration. */
interface GoatFlowSkillsConfig {
install: string[] | "all";
"goat-review"?: GoatReviewConfig;
}
/** Durable learning-loop directories that future automatic capture may target. */
export type LearningLoopAutoCaptureTarget = "lessons" | "footguns" | "patterns" | "decisions";
/** Programmatic learning-loop capture policy; disabled until explicitly opted in. */
interface LearningLoopConfig {
autoCapture: {
enabled: boolean;
targets: LearningLoopAutoCaptureTarget[];
};
}
/** One togglable goat-flow hook entry from `.goat-flow/config.yaml`. */
type GoatFlowHookConfig = Record<"enabled", boolean>;
/** Stable boolean keys retained because they mirror `.goat-flow/config.yaml`. */
type GoatFlowConfigBooleanFields = Record<"telemetry", boolean>;
/** Normalized config shape after parsing and validating .goat-flow/config.yaml. */
export interface GoatFlowConfig extends GoatFlowConfigBooleanFields {
version: string;
footguns: {
path: string;
};
lessons: {
path: string;
};
decisions: {
path: string;
};
plans: {
path: string;
};
/** Legacy normalized field retained for old tests/fixtures; new code uses `plans.path`. */
tasks?: {
path: string;
};
logs: {
path: string;
};
/** Legacy field retained for old config shape compatibility; command scoping uses --agent. */
agents: string[] | null;
/** Which skills to install: explicit list or 'all' for the full set */
skills: GoatFlowSkillsConfig;
/** Instruction-file line limits: target for setup, hard limit for CI gate */
lineLimits: {
target: number;
limit: number;
};
/** Project commands grouped by purpose so agents stop guessing tool names */
toolchain: GoatFlowToolchain;
/** User role that controls read-only vs read-write mode */
userRole: "developer" | "investigator" | "tester";
/** Opt-in policy for future automatic lesson/footgun/pattern/decision capture. */
learningLoop: LearningLoopConfig;
/** Declared gaps that persist across sessions (e.g., "zero Python tests"). Readable by skills during Step 0. */
knownGaps: string[];
/** Placeholder for per-project skill customisation. */
skillOverrides: Record<string, unknown>;
/** Terminal settings for the dashboard embedded terminal */
terminal: {
idleTimeoutMinutes: number;
};
/** Harness (AI Harness audit) configuration. */
harness: {
/** Advisory check ids the project has opted out of. Silenced checks render as `acknowledged` and do not affect concern status. */
acknowledge: string[];
};
/** Project-wide toggles for goat-flow-shipped hook scripts. */
hooks: Record<string, GoatFlowHookConfig>;
/**
* Raw skill-quality configuration block (parsed but not normalized here).
* Consumed by `loadQualityConfig` in `src/cli/quality/quality-config.ts`,
* which merges it with the goat-flow defaults.
*/
quality?: Record<string, unknown>;
}
/** A single validation warning or error found during config parsing. */
export interface ValidationIssue {
level: "warning" | "error";
/** Dot-separated config key path where the issue was found */
path: string;
message: string;
}
/** Aggregate validation result with separated warning and error lists. */
export interface ValidationResult extends Record<"valid", boolean> {
warnings: ValidationIssue[];
errors: ValidationIssue[];
}
/** Complete loaded config state including existence, validation, and parsed values. */
export interface LoadedConfig extends Record<"valid", boolean> {
/** Whether .goat-flow/config.yaml was found on disk */
exists: boolean;
/** Parsed and defaulted config values (always populated, even if file is missing) */
config: GoatFlowConfig;
warnings: ValidationIssue[];
errors: ValidationIssue[];
/** Raw YAML parse error message, or null if parsing succeeded */
parseError: string | null;
}
export {};
//# sourceMappingURL=types.d.ts.map