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.

88 lines 4.6 kB
/** * 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