import { execFileSync as nodeExecFileSync } from 'node:child_process'; import type { SevoHostAdapter } from '../adapter/host-adapter.js'; import type { PublishAdapter } from '../adapter/publish-adapter.js'; import type { EndgameDeliveryInput, EndgameDeliveryResult, GapScanSummary, LivenessVerificationResult, ReadmeSyncCheckResult, VersionBumpDecision } from './endgame-delivery-types.js'; import type { NotificationAdapter } from '../notification/notification-adapter.js'; export interface EndgameDeliveryStageOptions { hostAdapter: Pick; publishAdapter: PublishAdapter; notificationAdapter?: NotificationAdapter; now?: () => string; sleep?: (ms: number) => Promise; versionBumpOverride?: Partial>; } export declare class EndgameDeliveryStage { private readonly options; private readonly now; private readonly sleep; private readonly validationStage; private readonly versionBumpOverride?; private readonly notificationAdapter?; constructor(options: EndgameDeliveryStageOptions); execute(input: EndgameDeliveryInput): Promise; checkReadmeSync(input: EndgameDeliveryInput): Promise; determineVersionBump(packageJsonPath: string, changeType: 'patch' | 'minor' | 'major'): Promise; executePublish(adapter: PublishAdapter, projectPath: string, version: string): Promise; runLivenessVerification(configPath: string, projectSlug?: string): LivenessVerificationResult; triggerGapScan(specPath: string, projectPath: string, publishSuccess?: boolean): Promise; private emitNotification; private applyVersionIfNeeded; private readSpecDocument; private readPackageJson; private mapSemanticReadmeCoverage; /** * Fallback coverage check when LLM analysis didn't return a result for this FR. * Conservative: only returns true if the FR ID is explicitly mentioned in README. * Keyword overlap matching was removed (violated semantic understanding rules). */ private fallbackReadmeCoverage; private bumpVersionString; private collectGapScanArtifacts; private walkArtifactRoot; /** * Read explicit artifact type from a sidecar .meta.json file. * Expected format: { "type": "publish-result" | "release-artifact" | ... } * Returns null if no sidecar exists or type field is missing. */ private readExplicitType; /** * Infer artifact type from file path using structured directory conventions. * SEVO artifacts are stored in typed directories (deploy/, verify/, review/, publish/). * Falls back to 'implement-evidence' for unrecognized paths. */ private inferArtifactType; private dedupeArtifacts; } export interface OpenClawPublishAdapterOptions { projectSlug: string; publishScript?: string; execFileSync?: typeof nodeExecFileSync; commandCwd?: string; } export declare class OpenClawPublishAdapter implements PublishAdapter { private readonly options; private readonly publishScript; private readonly execFileSync; private readonly commandCwd; constructor(options: OpenClawPublishAdapterOptions); publish(projectPath: string, version: string): Promise; } export interface StandalonePublishAdapterOptions { projectSlug: string; writer?: (line: string) => void; } export declare class StandalonePublishAdapter implements PublishAdapter { private readonly options; private readonly writer; constructor(options: StandalonePublishAdapterOptions); publish(projectPath: string, version: string): Promise; } export declare function dispatchReadmeUpdateTask(hostAdapter: Pick, request: { pipelineId: string; projectSlug: string; missingFrs: string[]; readmePath: string; specPath: string; }): Promise; export declare function previewReadmeCoverage(readmePath: string, specPath: string, changedFRs: string[]): Promise; export declare function runPublishCommandPreview(projectSlug: string, version: string): Promise; //# sourceMappingURL=endgame-delivery-stage.d.ts.map