import type { GoalMutationGuardInput, GoalMutationReceipt } from "../core/cas.js"; import type { AddGoalTodoNodeItem, GoalTodoNodeMetadataPatch, GoalTodoSummary, TreePolicy } from "../core/tree.js"; import type { GoalTodoNode } from "../core/types.js"; import type { GoalTodoAction, GoalTodoTransitionEffects, GoalTodoTransitionInput } from "../core/transition.js"; import type { GoalTodoCompletionBlocker, GoalTodoCompletionDiagnostics } from "../core/completion.js"; import type { GoalTodoRandomBytes } from "../core/ids.js"; import type { GoalTodoCanonicalReferenceInput } from "../core/types.js"; import type { GoalCompletionProposal } from "../core/proposal.js"; import type { OracleClaimAutoAcceptComposition, OracleDecision, OracleVerdict } from "./oracle.js"; import type { GoalTodoAutoAcceptDecision, GoalTodoClaimSettlementRecord, GoalTodoClaimValidationPolicy, GoalTodoClaimValidationRecord, GoalTodoDelegationAttemptRecord, GoalTodoReturnedClaim } from "../core/claims.js"; import type { LoopHooks } from "./ports.js"; import type { RuntimeGoal, RuntimeGoalGate, RuntimeGoalStatus } from "./goal.js"; import type { GoalClaimsSideTable, RestoreDiagnostic } from "../store/restore.js"; export interface GoalRuntimeEngineOptions { /** Store root (goals/, cas-receipts.jsonl, quarantine/). Required. */ readonly stateDir: string; /** Runtime dir holding the goals.lock. Required (shared/paths default is available to callers). */ readonly runtimeDir: string; /** Injected epoch-ms clock (default: Date.now). */ readonly clock?: () => number; /** Injected randomness source for goal/todo/attempt ids (default: node:crypto). */ readonly randomBytes?: GoalTodoRandomBytes; /** Lock staleness threshold in ms (default: 60s). */ readonly lockStaleAfterMs?: number; /** Continuation-loop hooks (R7); never required for store correctness. */ readonly loopHooks?: LoopHooks; /** TODO tree policy overrides (defaults: zob caps 6/8/80). */ readonly treePolicy?: Partial; /** Stream read byte cap (default: 32 MiB). */ readonly maxStreamBytes?: number; } export interface CreateGoalOptions { readonly maxTurns?: number; readonly gate?: RuntimeGoalGate; } export interface ProposeCompletionInput { readonly completionSummary: string; readonly requirementsChecked: readonly string[]; readonly evidenceRefs: readonly string[]; readonly validationCommands: readonly string[]; readonly knownRisks: readonly string[]; readonly noShip: boolean; } export interface OracleReviewSubmission { readonly verdict: OracleVerdict; readonly noShip: boolean; readonly evidenceSummary: string; readonly evidenceRefs?: readonly string[]; } export interface LinkDelegationInput { readonly attemptId?: string; readonly runId?: string; readonly agent?: string; readonly validationPolicy?: GoalTodoClaimValidationPolicy; /** Parent-owned delegation depth metadata (integer >= 1, default 1, zob parity). */ readonly delegationDepth?: number; } export interface ReturnClaimInput { readonly claimText?: string; readonly claimHash?: string; readonly evidenceRefs?: readonly string[]; readonly validationCommands?: readonly string[]; readonly noShip?: boolean; } export interface ClaimValidationInput { readonly verdict: "PASS" | "WARN" | "FAIL"; readonly runId?: string; readonly recommendedAction: "accept_claim" | "needs_review" | "reject_claim" | "block"; readonly noShip: boolean; readonly confidence: "LOW" | "MEDIUM" | "HIGH"; readonly blockingIssues?: readonly string[]; readonly outputHash: string; readonly evidenceRefs?: readonly string[]; readonly validationCommands?: readonly string[]; readonly agent?: string; } export interface CompleteGoalEchoes { readonly expectedProposalHash?: string; readonly expectedOracleDecisionHash?: string; } export interface GoalRuntimeView { readonly goal: RuntimeGoal; readonly revisions: { readonly goal: number; readonly todos: number; }; readonly nodes: readonly GoalTodoNode[]; readonly claims: GoalClaimsSideTable; readonly summary: GoalTodoSummary; readonly completion: GoalTodoCompletionDiagnostics; } export interface CreateGoalResult { readonly goalId: string; readonly goal?: RuntimeGoal; } export interface AddTodosResult { readonly created: readonly GoalTodoNode[]; readonly todosRevision: number; readonly summary: GoalTodoSummary; } export interface UpdateTodoMetadataResult { readonly node: GoalTodoNode; readonly changed: boolean; readonly todosRevision: number; } export interface ResolveTodoResult { readonly node: GoalTodoNode; readonly effects: GoalTodoTransitionEffects; readonly todosRevision: number; readonly settlement?: GoalTodoClaimSettlementRecord; readonly claimComposition?: OracleClaimAutoAcceptComposition; } export interface LinkDelegationResult { readonly attempt: GoalTodoDelegationAttemptRecord; readonly node: GoalTodoNode; } export interface ReturnClaimResult { readonly claim: GoalTodoReturnedClaim; readonly node?: GoalTodoNode; } export interface RecordClaimValidationResult { readonly validation: GoalTodoClaimValidationRecord; readonly claimRule: GoalTodoAutoAcceptDecision; readonly oracleComposition: OracleClaimAutoAcceptComposition; } export interface ProposeCompletionResult { readonly goal: RuntimeGoal; readonly proposal?: GoalCompletionProposal; } export interface RecordOracleDecisionResult { readonly goal: RuntimeGoal; readonly decision: OracleDecision; } export interface CompleteGoalResult { readonly goal: RuntimeGoal; } export interface PauseGoalResult { readonly goal: RuntimeGoal; readonly previousStatus: RuntimeGoalStatus; } export interface ResumeGoalResult { readonly goal: RuntimeGoal; readonly previousStatus: RuntimeGoalStatus; readonly additionalTurns?: number; } export interface ClearGoalResult { readonly clearedGoalId: string; } export interface GoalRuntimeEngine { createGoal(objective: string, cas?: GoalMutationGuardInput, options?: CreateGoalOptions): GoalEngineOutcome; getGoal(goalId?: string): { goal?: GoalRuntimeView; diagnostics?: readonly RestoreDiagnostic[]; }; addTodos(items: readonly AddGoalTodoNodeItem[], cas?: GoalMutationGuardInput): GoalEngineOutcome; updateTodoMetadata(ref: GoalTodoCanonicalReferenceInput, patch: GoalTodoNodeMetadataPatch, cas?: GoalMutationGuardInput): GoalEngineOutcome; resolveTodo(ref: GoalTodoCanonicalReferenceInput, action: GoalTodoAction, input: GoalTodoTransitionInput, cas?: GoalMutationGuardInput): GoalEngineOutcome; linkDelegation(ref: GoalTodoCanonicalReferenceInput, input: LinkDelegationInput, cas?: GoalMutationGuardInput): GoalEngineOutcome; returnClaim(attemptId: string, input: ReturnClaimInput, cas?: GoalMutationGuardInput): GoalEngineOutcome; recordClaimValidation(attemptId: string, input: ClaimValidationInput, cas?: GoalMutationGuardInput): GoalEngineOutcome; proposeCompletion(input: ProposeCompletionInput, cas?: GoalMutationGuardInput): GoalEngineOutcome; recordOracleDecision(review: OracleReviewSubmission, cas?: GoalMutationGuardInput): GoalEngineOutcome; completeGoal(cas?: GoalMutationGuardInput, echoes?: CompleteGoalEchoes): GoalEngineOutcome; pauseGoal(reason: string, cas?: GoalMutationGuardInput): GoalEngineOutcome; resumeGoal(reason: string, cas?: GoalMutationGuardInput, extraTurns?: number): GoalEngineOutcome; clearGoal(cas?: GoalMutationGuardInput): GoalEngineOutcome; } export type GoalEngineRetryPolicy = "fix_input" | "after_context_change" | "never"; export type GoalEngineErrorCode = "invalid_input" | "cas_invalid" | "cas_stale" | "cas_conflict" | "lock_error" | "restore_blocked" | "store_write_failed" | "goal_missing" | "goal_already_active" | "multiple_active_goals" | "goal_status_invalid" | "reason_required" | "evidence_required" | "completion_not_ready" | "proposal_not_fresh" | "oracle_already_bound" | "oracle_not_fresh" | "tree_error" | "transition_rejected" | "claim_error" | "reference_error" | "node_status_invalid"; export interface GoalEngineError { readonly ok: false; readonly code: GoalEngineErrorCode; readonly message: string; readonly retryPolicy?: GoalEngineRetryPolicy; readonly blockers?: readonly GoalTodoCompletionBlocker[]; readonly staleCodes?: readonly string[]; readonly freshnessCode?: string; readonly transitionCode?: string; readonly treeCode?: string; readonly claimCode?: string; readonly referenceCode?: string; readonly diagnostics?: readonly RestoreDiagnostic[]; } export type GoalEngineOutcome = { readonly ok: true; readonly status: "applied"; readonly result: T; readonly receipt: GoalMutationReceipt; } | { readonly ok: true; readonly status: "replayed"; readonly result: T; readonly receipt: GoalMutationReceipt; } | GoalEngineError; export declare function createRuntimeGoalEngine(options: GoalRuntimeEngineOptions): GoalRuntimeEngine;