/** * `forge report` — Unified run bundle generator. * * Collects project state from the engine and produces a timestamped run bundle: * * .forgeos/runs// * run.json — machine-readable summary with version stamps * scorecard.md — human-readable markdown report * raw/ — raw API responses (only with --include-raw) * * Subcommands / options: * forge report --project Write bundle to disk, print path * forge report --project --json Print run.json to stdout (no disk write) * forge report --project --format markdown Print scorecard.md to stdout (no disk write) * forge report --project --include-raw Also write raw/ directory * * Version stamping: * CLI version is read from src/shared/version.ts at build time. * Engine version and API schema version are read from GET /health. * * Design invariants: * - Always creates a NEW run directory (never overwrites an existing bundle). * - Timestamp format in directory name: YYYY-MM-DDTHH-MM-SS (colons replaced * with dashes for filesystem compatibility on Windows/macOS). * - Engine errors are surfaced as warnings, not hard failures; partial bundles * are written with the available data so callers can still inspect what did * succeed. */ import { Command } from "commander"; import { ForgeOSClient } from "../../shared/client.js"; interface GateDetail { id: string; name: string; status: string; required_evidence: string[]; last_updated?: string; } interface RiskItem { level: "low" | "medium" | "high" | "critical"; description: string; source?: string; } interface SharedMindStats { observations: number; patterns: number; } interface ChangesetStats { active: number; completed: number; } interface ReviewStats { pending: number; completed: number; } /** * Machine-readable run summary written to run.json. * All fields are stable — treat as a public schema. */ export interface RunBundle { run_id: string; timestamp: string; versions: { cli: string; engine: string; api_schema: string; }; project: { id: string; name: string; platform?: string; }; gates: { passed: number; total: number; details: GateDetail[]; }; changesets: ChangesetStats; reviews: ReviewStats; quality_score: number; risks: RiskItem[]; shared_mind: SharedMindStats; } export declare function generateScorecard(bundle: RunBundle): string; export declare function registerReportCommands(parent: Command, client: ForgeOSClient): void; export {}; //# sourceMappingURL=report.d.ts.map