@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.
88 lines • 4.6 kB
TypeScript
/**
* Command and option type vocabulary shared between the CLI parser and the command handlers.
* Centralising the subcommand unions, the parsed-option shape, and the removed-command map here
* keeps the parser (which produces these values) and dispatch (which consumes them) agreeing on
* one source of truth, so adding a command means touching the union once rather than hunting
* string literals across files. Pure type/const declarations only; no runtime behaviour lives here.
*/
import type { CLIOptions } from "./types.js";
import type { QualityMode } from "./quality/schema.js";
/** Supported CLI subcommand names. */
export type Command = "setup" | "install" | "audit" | "quality" | "status" | "dashboard" | "info" | "manifest" | "events" | "hooks" | "menu" | "stats" | "index" | "skill";
/**
* The only second positional accepted after `skill`. A single-member union today, kept as a named
* type so a future authoring verb (e.g. "edit") is added in one place the parser and handler share.
*/
export type SkillSubcommand = "new";
/**
* The only second positional accepted after `events`; `tail` reads the local evidence-envelope log.
* Named (rather than inlined) so the read-only event surface can grow without retyping the literal.
*/
export type EventsSubcommand = "tail";
/**
* Second positional accepted after `hooks`: the read-only `list`/`sync` operations and the
* `enable`/`disable` toggles. `enable`/`disable` additionally require a `<hook-id>`; the others do
* not. Kept in sync with HOOK_SUBCOMMANDS, which is the runtime membership check for the same set.
*/
export type HookSubcommand = "list" | "enable" | "disable" | "sync";
export declare const HOOK_SUBCOMMANDS: Set<string>;
/**
* The mutually exclusive modes of the `quality` command. `prompt` (the default when no subcommand
* positional is given) emits an assessment prompt; `history`/`diff` read prior runs; `validate`
* schema-checks a written report; `candidacy` scores a skill/playbook idea. The parser maps the
* first positional to one of these, and dispatch routes on the chosen member.
*/
export type QualitySubcommand = "prompt" | "history" | "diff" | "validate" | "candidacy";
/**
* One resolved input to `quality candidacy`, distinguishing the two ways a caller can supply it.
* `mode: "draft"` means `value` is a resolved filesystem path to an existing draft to score;
* `mode: "description"` means `value` is the free-form text describing the proposed artifact.
* The two are mutually exclusive at the CLI; the parser rejects supplying both.
*/
export interface CandidacyInputArg {
mode: "draft" | "description";
value: string;
}
/** Raw values returned by Node's `parseArgs`; keys intentionally mirror CLI flag names. */
export type ParsedArgValues = Partial<Record<string, string | boolean>>;
export declare const COMMANDS: Command[];
export declare const REMOVED_COMMANDS: Record<string, string>;
export declare const VALID_FORMATS: readonly ["json", "text", "markdown", "sarif"];
/** Fully resolved CLI options including the dispatched command. */
export interface ParsedCLI extends CLIOptions {
command: Command;
includeHarness: boolean;
checkDrift: boolean;
checkContent: boolean;
untrustedTarget: boolean;
auditDetails: boolean;
shouldCheck: boolean;
shouldApply: boolean;
shouldForce: boolean;
updateConfigVersion: boolean;
cleanDeprecated: boolean;
qualitySubcommand: QualitySubcommand;
qualityDiffPair: string | null;
qualityValidatePath: string | null;
qualityMode: QualityMode | null;
candidacyInput: CandidacyInputArg | null;
skillSubcommand: SkillSubcommand | null;
skillDescription: string | null;
skillDraftPath: string | null;
skillName: string | null;
skillInteractive: boolean;
skillSkipConfirm: boolean;
eventsSubcommand: EventsSubcommand | null;
eventsLimit: number;
hookSubcommand: HookSubcommand | null;
hookId: string | null;
includeAll: boolean;
}
/**
* The slice of ParsedCLI that the `skill` command path populates, projected out so the parser can
* build and spread just the skill-authoring fields without restating each one. Every member is
* meaningful only when the command is `skill`; for any other command the parser fills these with
* their null/false defaults, so a non-null value here signals a `skill new` invocation.
*/
export type SkillCLIFields = Pick<ParsedCLI, "skillSubcommand" | "skillDescription" | "skillDraftPath" | "skillName" | "skillInteractive" | "skillSkipConfirm">;
//# sourceMappingURL=cli-types.d.ts.map