/** * owner-resolution-service.ts — PRI-629 Owner 裁决的应用层(Console/CLI 共用)。 * * 职责: 校验 reviewKey(stale 防护)→ CAS 写入 OwnerResolutionRecord → * 按动作分派: * - accept_current / reject_current (verdict override): 写 pending resolution * 并把任务原子翻回 pending(保留 runnerDecision/completionIntent — 与 * owner-retry 的 authority reset 相反);实际效果由 runner 的入口恢复门 * 在 LLM 之前应用(SPEC §10: pending Owner Resolution 优先于 pending * Completion Intent 优先于 normal LLM invocation)。 * - revise_once: 解析修订目标 → 以 resolution-scoped causeId reopen * (幂等)→ 标 applied。不开自动预算,repairIteration 不变(SPEC §11)。 * * 并发语义(SPEC §7): same reviewKey + same action → idempotent success; * same reviewKey + different action → already_resolved;全部经 * updateTaskIfDiagnosticJsonUnchanged 单 SQL conditional mutation。 */ import type { RuntimeStateManager } from '../store/runtime-state-manager.js'; import { type OwnerResolutionAction, type RunnerDecision } from './pitask-metadata.js'; import { type OwnerDecisionFactStore } from './owner-review.js'; import { type OwnerDecisionReviewStore } from './owner-decision-review.js'; import { reopenTaskForRevision } from './revision-reopen.js'; export interface OwnerResolutionRequest { readonly action: OwnerResolutionAction; readonly reviewKey: string; readonly expectedRevisionEpoch: number; readonly expectedSourceRunId: string; readonly expectedSourceArtifactId: string; readonly expectedSourceArtifactHash: string; /** Required by the Console v1.2 route; optional only for pre-v1.2 internal callers. */ readonly expectedEvidenceDigest?: string; readonly acknowledgement?: { readonly kind: 'partial_evidence'; readonly acknowledged: true; readonly note?: string; }; readonly ownerInstruction?: string | null; } export interface OwnerIdentityContext { readonly ownerId: string; readonly credentialId?: string; } export type OwnerResolutionOutcome = { status: 'resolved'; resolutionId: string; reviewKey: string; action: OwnerResolutionAction; applied: boolean; effectiveDecision?: RunnerDecision; targetTaskId?: string; /** verdict override 动作: 任务已翻回 pending,由 runner 入口恢复门应用 */ runnerWillApply: boolean; } | { status: 'not_found'; } | { status: 'metadata_invalid'; } | { status: 'not_decision_capable'; blockers: readonly string[]; } | { status: 'stale_owner_decision'; } | { status: 'evidence_acknowledgement_required'; } | { status: 'already_resolved'; existingAction: OwnerResolutionAction; } | { status: 'cas_conflict'; } | { status: 'revise_target_unresolved'; } | { status: 'revise_reopen_failed'; reason: string; }; export interface OwnerResolutionApplyDeps { readonly stateManager: RuntimeStateManager; readonly now?: () => string; /** 注入以便测试替换;生产为 revision-reopen.ts 的核心实现 */ readonly reopenTaskForRevision?: typeof reopenTaskForRevision; } /** RuntimeStateManager → OwnerDecisionFactStore 的窄适配(pi artifacts 经专用 store)。 */ export declare function factStoreFromStateManager(stateManager: RuntimeStateManager): OwnerDecisionFactStore; export declare function reviewStoreFromStateManager(stateManager: RuntimeStateManager): OwnerDecisionReviewStore; /** revise_once 可选短指导的有界消毒(SPEC §13)— 仅作 revision feedback,非命令。 */ export declare function sanitizeOwnerInstruction(raw: unknown): string | undefined; /** * 应用一次 Owner 裁决。全程幂等、crash-safe: * - verdict override: authority 记录(pending)与 status 翻转在同一次 CAS * mutation 中落库;crash 后重放 = idempotent success;实际效果由 runner * 恢复门执行(不重新调用 LLM,SPEC §30)。 * - revise_once: pending 记录 → reopen(causeId 幂等)→ applied;任一步 * crash 后重放收敛到同一结果。 */ export interface ApplyOwnerResolutionArgs { readonly taskId: string; readonly request: OwnerResolutionRequest; readonly identity: OwnerIdentityContext; } export declare function applyOwnerResolution(deps: OwnerResolutionApplyDeps, args: ApplyOwnerResolutionArgs): Promise; //# sourceMappingURL=owner-resolution-service.d.ts.map