/** * 续跑腿家族 + 路由 ctx 的装配(S-147 切片:`http/server.ts` 2378–4804 与 1119–1128 逐字搬家,正文一字未改)。 * * 🔴 为什么 `routeCtxBase` 住在这个文件里而不是组合根:`startFreshHostTurn` 把**整只** ctx 交给 * `mintAndDriveDurableRun`,而 `ctx.legs` 装的正是本文件这几条腿 —— 两者是一个结。拆开只有两条路: * ①晚绑 `let routeCtxBase`(编译期钉不住「谁忘了 bind」,静默 undefined);②改写调用点正文(证不了 * 字节不变)。同居是第三条,也是唯一一条既保住静态序又保住 move-only 的。序由 `const` 的 TDZ 亲自执法: * 腿是提升的函数声明、ctx 是文件尾的 `const`,谁也不会在工厂执行期读到对方。 * * ctx 字段 28 只(registry 7 + helpers 14 + deps/runnerFor/prepareSpec/finalizeTaskResult + 三只配额/租约/用量窗 * 判据)—— 这是**如实披露**的耦合读数(设计稿 §9:把它变小是波 3 的事,本刀不承诺)。型一律从既有型派生 * (`RunRegistry` / `RouteHelpers` / `RouteLegs` / `ReturnType`),不手抄签名 ⇒ 不会漂。 */ import type { IncomingMessage } from "node:http"; import { type QuestionAnswer, type CheckpointToken } from "@sema-agent/core"; import type { DecideBinding } from "./wire-types.js"; import type { CheckpointStoreFull } from "../plugins/store-backend.js"; import { type HostDecision } from "../host-decision.js"; import { type PlanApprovePermissionModeAfter } from "../task-settings.js"; import type { RouteCtxBase, DriveResumeArgs } from "./route-ctx.js"; import { type TrustedRunInternals } from "./durable-run-leg.js"; import type { RunRegistry, RouteHelpers, RouteLegs } from "./route-ctx.js"; import type { createRequestGuards } from "./request-guards.js"; import type { FlatServiceDeps } from "./server.js"; export declare function createResumeLegs(ctx: { deps: FlatServiceDeps; runnerFor: NonNullable; } & RunRegistry & RouteHelpers & Pick & Pick, "ownerCostQuotaDenied" | "ownerFleetLeaseDenied" | "usageWindowDenialFor">): { routeCtxBase: RouteCtxBase; resumeCheckpoint: (sessionId: string, decision: "approve" | "deny", reason: string | undefined, hostDecision: HostDecision, req?: IncomingMessage, answer?: QuestionAnswer, binding?: DecideBinding, onResumeCommitted?: (grant: { overrideSessionId?: string; validatedToolName: string | null; }) => Promise, acceptEarly?: boolean, decider?: { principal?: string; explicitOperator: boolean; }) => Promise<{ status: number; body: object; }>; driveResumeIntoRunLog: (args: DriveResumeArgs) => Promise<{ status: number; body: object; }>; driveResumeLeg: (args: DriveResumeArgs, onAccepted?: (receipt: { status: number; body: object; }) => void) => Promise<{ status: number; body: object; }>; mayDiscloseRowError: (cs: CheckpointStoreFull, token: CheckpointToken, decider: { principal?: string; explicitOperator: boolean; } | undefined) => Promise; resumePreempted: (sessionId: string, req: IncomingMessage | undefined, acceptEarly?: boolean, decider?: { principal?: string; explicitOperator: boolean; }) => Promise<{ status: number; body: object; }>; startFreshHostTurn: (sessionId: string, objective: string, principal: string | undefined, req: IncomingMessage, trustedInternals: TrustedRunInternals, runId: string) => Promise<{ status: number; body: object; }>; resumeWake: (sessionId: string, message: string | undefined, caller: string | undefined, req: IncomingMessage | undefined, acceptEarly?: boolean, workflowParkedResume?: DriveResumeArgs["workflowParkedResume"], ownerLeaseAdmittedFor?: string) => Promise<{ status: number; body: object; }>; resumePlanReview: (sessionId: string, decision: "approve" | "edit" | "reject", editedPlan: string | undefined, reason: string | undefined, req: IncomingMessage | undefined, log?: { taskId?: string; principalPresent?: boolean; }, acceptEarly?: boolean, decider?: { principal?: string; explicitOperator: boolean; }, permissionModeAfter?: PlanApprovePermissionModeAfter) => Promise<{ status: number; body: object; }>; }; //# sourceMappingURL=resume-legs.d.ts.map