import { SidekickProtocolError, type ApplyReview, type SessionScope } from "../../internal-providers/sidekick-contracts/index.js"; import type { CoordinatorDelegation } from "../../internal-providers/sidekick-mcp/index.js"; import { Effect } from "effect"; import { CloudSidekickHttp } from "../../adapters/cloud/sidekick.js"; import { CloudSidekickState, type CloudSidekickBinding, type CloudSidekickSessionState } from "../../adapters/cloud/sidekick-state.js"; import { CloudSidekickReview } from "../../adapters/cloud/sidekick-review.js"; export declare const prepareCloudSidekick: (input: { home: string; origin: string; cwd: string; configPath: string; harness: "codex" | "claude_code"; leadModel: string; organizationId?: string; }, http?: Readonly<{ fetch?: typeof fetch; signal?: AbortSignal; }> | undefined) => Effect.Effect; export declare const openCloudSidekick: (input: { home: string; bindingId: string; cwd: string; configPath: string; harness: "codex" | "claude_code"; leadModel?: string; }, http?: Readonly<{ fetch?: typeof fetch; signal?: AbortSignal; }> | undefined) => Effect.Effect; /** Effect workflow owner. Promise/MCP execution belongs at the CLI process boundary. */ export declare class SidekickCloudSession { #private; readonly store: CloudSidekickState; readonly cwd: string; readonly client: CloudSidekickHttp; readonly binding: CloudSidekickBinding; readonly scope: SessionScope; readonly reviewAdapter: CloudSidekickReview; constructor(store: CloudSidekickState, state: CloudSidekickSessionState, cwd: string, client: CloudSidekickHttp); readonly lease: Effect.Effect; readonly delegate: (raw: { protocolVersion: 1; sessionId: string; operationId: string; task: string; mode: "local" | "cloud"; leadHarness: "codex" | "claude_code"; repository: string; baseCommitSha: string; modelPolicy: { mode: "explicit"; leadModel: string; sidekickModel: string; }; capabilities: ("repository.read" | "repository.write.worktree" | "tests.run" | "inference.use")[]; budget: { maxProviderCalls: number; wallTimeMs: number; maxCostMicrousd: number; }; }) => Effect.Effect; readonly get: (id: string) => Effect.Effect; readonly result: (id: string) => Effect.Effect<{ protocolVersion: 1; delegationId: string; attemptId: string; generation: string; baseCommitSha: string; summary: string; patch: { kind: "no_change"; } | { kind: "patch"; sha256: string; bytes: number; }; changedFiles: { path: string; status: "added" | "modified" | "deleted"; beforeSha256: string | null; afterSha256: string | null; }[]; tests: { command: string; outcome: "failed" | "skipped" | "passed" | "not_run"; exitCode: number | null; }[]; warnings: string[]; complete: boolean; digest: string; }, SidekickProtocolError, never>; /** Read-only, content-addressed patch preview for an actual human review. */ readonly preview: (id: string) => Effect.Effect<{ result: { protocolVersion: 1; delegationId: string; attemptId: string; generation: string; baseCommitSha: string; summary: string; patch: { kind: "no_change"; } | { kind: "patch"; sha256: string; bytes: number; }; changedFiles: { path: string; status: "added" | "modified" | "deleted"; beforeSha256: string | null; afterSha256: string | null; }[]; tests: { command: string; outcome: "failed" | "skipped" | "passed" | "not_run"; exitCode: number | null; }[]; warnings: string[]; complete: boolean; digest: string; }; patchText: string; }, SidekickProtocolError, never>; /** Host-only read: exact immutable admission and result fences, never a new operation. */ readonly evidence: (raw: { delegationId: string; attemptId: string; generation: string; resultDigest: string | null; }) => Effect.Effect<{ protocolVersion: 1; scope: { organizationId: string; userId: string; membershipId: string; sessionId: string; operationId: string; }; delegationId: string; attemptId: string; generation: string; attemptNumber: number; resultDigest: string | null; repository: string; repositoryId: string; baseCommitSha: string; model: string; originalBudget: { maxProviderCalls: number; wallTimeMs: number; maxCostMicrousd: number; }; currentBudgetMaximumMicrousd: number | null; budgetStatus: "pending" | "settled" | "reserved" | "released"; state: "cancelled" | "running" | "succeeded" | "failed" | "expired" | "queued" | "timed_out" | "awaiting_review" | "taken_over" | "discarded"; cleanup: "error" | "pending" | "running" | "complete"; execution: { agentRunId: string; sandboxWorkloadId: string; sandboxJobId: string; operationId: string; } | null; createdAt: string; hardDeadlineAt: string; observedAt: string; currentAttempt: { settlement: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; reservationId: string; maximumMicrousd: number; status: "settled" | "released"; quantityMicrousd: number; billingState: "internal_only" | "billable" | "included" | "written_off"; priceBookRevision: string; evidenceRef: string | null; }; ledger: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; requests: number; calls: number; quantityMicrousd: number; }; usage: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; inputTokens: number; outputTokens: number; }; providerAccountingCost: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; quantityMicrousd: number; }; providerCash: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; quantityMicrousd: number; }; physicalCleanup: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; status: "complete"; tasks: number; notRequired: boolean; }; }; lifetime: { settlement: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; quantityMicrousd: number; attempts: { attemptId: string; attemptNumber: number; generation: string; resultDigest: string | null; reservationId: string; status: "settled" | "released"; quantityMicrousd: number; evidenceRef: string | null; }[]; }; ledger: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; requests: number; calls: number; quantityMicrousd: number; }; usage: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; inputTokens: number; outputTokens: number; }; providerAccountingCost: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; quantityMicrousd: number; }; providerCash: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; quantityMicrousd: number; }; physicalCleanup: { kind: "unknown"; reason: "pending" | "missing" | "incomplete" | "mismatch" | "retained_usage_missing" | "unverified_prior_attempt"; } | { kind: "known"; status: "complete"; tasks: number; notRequired: boolean; }; }; }, SidekickProtocolError, never>; readonly followUp: (raw: { delegationId: string; operationId: string; generation: string; resultDigest: string; task: string; }) => Effect.Effect; readonly cancel: (id: string, generation: string) => Effect.Effect; readonly review: (raw: unknown, hostApproved?: any) => Effect.Effect<{ status: "taken_over" | "discarded" | "applied" | "already_applied"; resultDigest: string; } | { status: "conflict"; resultDigest: string; conflictPaths: string[]; }, SidekickProtocolError, never>; /** The public human command supplies --approve outside the model tool surface. */ readonly approveReview: (input: { delegationId: string; generation: string; resultDigest: string; decision: ApplyReview["decision"]; approved: boolean; }) => Effect.Effect<{ status: "taken_over" | "discarded" | "applied" | "already_applied"; resultDigest: string; } | { status: "conflict"; resultDigest: string; conflictPaths: string[]; }, SidekickProtocolError, never>; readonly inspect: () => Effect.Effect<{ bindingId: string; sessionId: string; origin: string; organizationId: string; repository: string; operations: ({ operationId: string; kind: "delegate"; delegationId: string | null; status: string; } | { operationId: string; kind: "follow_up"; delegationId: string; status: "accepted" | "rejected" | "unauthorized" | "not_found" | "unavailable" | "conflict" | "cancelled" | "pending" | "invalid_request" | "timed_out" | "sidekick_limit" | "stale_generation" | "terminal_replay" | "expired_result" | "result_not_ready" | "review_required" | "follow_up_limit" | "incomplete_result" | "stale_base" | "working_tree_conflict" | "digest_mismatch" | "policy_denied" | "budget_exceeded" | "repository_unavailable" | "worker_lost" | "caller_identity_forbidden" | "model_auto_disallowed" | "event_conflict"; })[]; }, SidekickProtocolError, never>; readonly recover: (operationId: string, approved: boolean) => Effect.Effect; }