/** * report-compose — the cross-tool report composition root. * * Audit 2026-05-29 (L2): the CLI, not any single tool, composes the HTML * report. It walks every registered tool's `collectReportData(scope)` * contribution and merges the results into one HTML report input, then * renders the self-contained HTML via `@opensip-cli/dashboard` and * writes it to the project's reports directory. * * This is what decouples fitness from graph: fitness contributes only * its own catalogs (`checkCatalog` / `recipeCatalog` / `editorProtocol`) * and graph contributes only `graphCatalog`. Neither reaches into the * other; the CLI owns the merge because composition needs the tool * REGISTRY (`RunScope.tools`), which the tool-facing `ToolScope` * deliberately excludes. * * Why read `currentScope()` here and nowhere in the tool packages: the * `Tool` contract must not depend on `RunScope` (that would reintroduce * a kernel⟷tool cycle). The CLI is the only layer allowed to read the * concrete `RunScope` (which has `.tools`) — tools receive the narrower * `ToolScope` view as the `collectReportData` parameter. */ import { type ReportViewSelection } from '@opensip-cli/dashboard'; export { pruneOrphanRunAddressedReports, runAddressedReportFilename, } from './report-artifact-store.js'; import type { ReportResult } from '@opensip-cli/contracts'; interface ComposeReportOptions { readonly open: boolean; readonly selection?: ReportViewSelection; /** * Byte budget for the inlined graph catalog. Omitted ⇒ the dashboard's * shareable default. Raised by `opensip report --max-catalog-mb` when the * reader wants the full catalog for LOCAL exploration rather than a report * small enough to send someone. */ readonly maxGraphCatalogBytes?: number; } /** * Compose the cross-tool report and write it under the active runtime * reports directory. An explicit matched Run selection writes a * run-addressed artifact under `reports/runs/` (returned/launched path) * and may also refresh `latest.html` as a convenience alias. * * Returns a `ReportResult` describing the written path and whether a * browser was launched. Browser-launch failures never propagate — they * fall through to `opened: false` so the user can open the file manually. */ export declare function composeAndWriteReport(opts: ComposeReportOptions): Promise; //# sourceMappingURL=report-compose.d.ts.map