import type { LLMClient } from "../providers/types.js"; import type { SeoWorkflow, SeoFinding, DataOutcome, DataProvenance } from "./types.js"; import type { SearchAnalyticsRow, UrlInspectionRow, SerpRow, KeywordRow, BacklinkRow, AiVisibilityRow, LinkGraphRow } from "./data-source.js"; import type { SeoRetrieveResult } from "./retriever.js"; import type { BoberConfig } from "../config/schema.js"; /** * Per-capability optional `DataOutcome` — a source may abstain/ * disable per capability. `aiVisibility`/`linkGraph` were added additively * (spec-20260717-seo-improver-builder, Sprint 9; ADR-7) — an arm left * `undefined` (a capability `WORKFLOW_CAPABILITIES` omits for the running * workflow) renders as "not requested" (`describeDataOutcome` below), never * as an error. */ export type SeoDataBundle = { searchAnalytics?: DataOutcome; urlInspection?: DataOutcome; serp?: DataOutcome; keywords?: DataOutcome; backlinks?: DataOutcome; aiVisibility?: DataOutcome; linkGraph?: DataOutcome; }; export type SeoAnalyzeInput = { workflow: SeoWorkflow; target: string; /** The existing retriever output (retriever.ts:22-25) — the arch calls this `SeoPlaybookContext`. */ context: SeoRetrieveResult; data: SeoDataBundle; /** * Accepted for interface parity with the architecture's `SeoAnalyzeInput` * (arch:250-256) and the Sprint 11 runner contract. Not consumed by this * sprint's `analyze` body — `llm`/`model` are constructor-injected, and no * analyzer behaviour this sprint reads `config`. */ config: BoberConfig; /** Injected wall-clock snapshot (ISO-8601) — the analyzer never reads the clock itself. */ now: string; }; export type SeoAnalysis = { workflow: SeoWorkflow; target: string; findings: SeoFinding[]; /** false when the LLM output could not be parsed (fail-closed, sc-10-2). */ parsed: boolean; dataProvenance: DataProvenance[]; }; export declare class SeoAnalyzer { private readonly llm; private readonly model; constructor(llm: LLMClient, model: string); /** * Never throws on a PARSE failure (returns `parsed: false` with empty * findings). Does NOT catch a transport error from `llm.chat` — that * rejects the returned promise, distinct from a parse failure. */ analyze(input: SeoAnalyzeInput): Promise; } //# sourceMappingURL=analyzer.d.ts.map