@ordewell/core 0.11.3 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/AUTHORS.md +3 -1
  2. package/dist/{ModeResolver-DyXeZ9ib.d.ts → ModeResolver-B64aUZXJ.d.ts} +1 -1
  3. package/dist/{ModeResolver-BDAgouuE.d.mts → ModeResolver-CA2fUU9h.d.mts} +1 -1
  4. package/dist/{Task-BL4Idm9r.d.mts → Task-CxGgN6I0.d.mts} +801 -39
  5. package/dist/{Task-BL4Idm9r.d.ts → Task-CxGgN6I0.d.ts} +801 -39
  6. package/dist/{chunk-YAFNYNFX.mjs → chunk-2IFKPYPO.mjs} +453 -17
  7. package/dist/chunk-2IFKPYPO.mjs.map +1 -0
  8. package/dist/{chunk-MYXMIVWA.mjs → chunk-FX33UKAD.mjs} +8 -6
  9. package/dist/chunk-FX33UKAD.mjs.map +1 -0
  10. package/dist/{chunk-QTZ5XTBY.mjs → chunk-PKJTN2PD.mjs} +458 -13
  11. package/dist/chunk-PKJTN2PD.mjs.map +1 -0
  12. package/dist/{chunk-7WNLN63J.mjs → chunk-RZ23BMVR.mjs} +599 -124
  13. package/dist/chunk-RZ23BMVR.mjs.map +1 -0
  14. package/dist/chunk-UDUATSCJ.mjs +48 -0
  15. package/dist/chunk-UDUATSCJ.mjs.map +1 -0
  16. package/dist/{IRunner-DOMtDTVt.d.ts → eventStore-CTCSKS9E.d.ts} +976 -145
  17. package/dist/{IRunner-ihalYfTo.d.mts → eventStore-CcB8yELZ.d.mts} +976 -145
  18. package/dist/index.d.mts +905 -164
  19. package/dist/index.d.ts +905 -164
  20. package/dist/index.js +12496 -3308
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +10830 -2919
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/parsing.d.mts +2 -2
  25. package/dist/parsing.d.ts +2 -2
  26. package/dist/parsing.js +277 -21
  27. package/dist/parsing.js.map +1 -1
  28. package/dist/parsing.mjs +3 -3
  29. package/dist/plan-utils.d.mts +8 -5
  30. package/dist/plan-utils.d.ts +8 -5
  31. package/dist/plan-utils.js +262 -33
  32. package/dist/plan-utils.js.map +1 -1
  33. package/dist/plan-utils.mjs +39 -3
  34. package/dist/{runSettingsText-DVOd7vKC.d.ts → runSettingsText-DFVpe6aU.d.mts} +1996 -895
  35. package/dist/{runSettingsText-BuLVBlXS.d.mts → runSettingsText-lKLDsyli.d.ts} +1996 -895
  36. package/dist/testing.d.mts +99 -4
  37. package/dist/testing.d.ts +99 -4
  38. package/dist/testing.js +213 -8
  39. package/dist/testing.js.map +1 -1
  40. package/dist/testing.mjs +193 -8
  41. package/dist/testing.mjs.map +1 -1
  42. package/docker/task.Dockerfile +22 -0
  43. package/package.json +3 -1
  44. package/skills/diagnose/SKILL.md +2 -2
  45. package/skills/explore/SKILL.md +1 -1
  46. package/dist/chunk-7WNLN63J.mjs.map +0 -1
  47. package/dist/chunk-MYXMIVWA.mjs.map +0 -1
  48. package/dist/chunk-QTZ5XTBY.mjs.map +0 -1
  49. package/dist/chunk-YAFNYNFX.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- import { az as RunnerId, au as ResearchProgress, b6 as UsageRecord, at as ResearchLogEntry, aS as Task, i as DiscoveredModel, I as IIsolationPreview, x as IWorktreeIsolation, $ as IsolationTaskStatus, a0 as IsolationView, a8 as PlanIsolation, a1 as LegacyPlanState, aA as RunnerSessionCost, as as ReportedWindow, ag as PlannerUsage, a$ as TaskSkillSnapshot, aO as SkillsService, E as ExecutionActor, b0 as TaskSnapshot, a9 as PlanState, b8 as Verdict, aP as StoredHandoff, p as HandoffCheck } from './Task-BL4Idm9r.mjs';
2
- export { A as ApprovalRecord, a as AttemptUsage, b as AwaitingReason, B as BUILTIN_SKILL_NAMES, C as ContextCheckpoint, c as ContextFill, d as ConversationMessage, e as CostProvenance, D as DEFAULT_LOOP_ROUNDS, f as DEFAULT_RUNNERS, g as DEFAULT_SUPERVISOR_RETRY_LIMIT, h as DIGEST_FINDINGS, j as ExecutionCommandName, k as ExecutionRecord, F as FindingSeverity, G as GuardTarget, l as GuardTrip, H as HANDOFF_LIMITS, m as HANDOFF_PUSH_CHARS, n as Handoff, o as HandoffArtifact, q as HandoffCommit, r as HandoffDigest, s as HandoffEvidence, t as HandoffFinding, u as HandoffPatch, v as HandoffPreviewOptions, w as HandoffTaskName, y as IntegrationDisposal, z as InvalidSkill, J as IsolationAvailability, K as IsolationHandoff, L as IsolationHandoffRepo, M as IsolationInactiveReason, N as IsolationLandedTask, O as IsolationLanding, P as IsolationMergeBlock, Q as IsolationMergeBlockReason, R as IsolationMergeResult, S as IsolationOutcome, T as IsolationPreview, U as IsolationPruneResult, V as IsolationRemoval, W as IsolationRepo, X as IsolationRun, Y as IsolationTaskRecord, Z as IsolationTaskRef, _ as IsolationTaskRepo, a2 as LoopSubject, a3 as MAX_LOOP_ROUNDS, a4 as ModelUsage, a5 as PatchFlag, a6 as PatchView, aa as PlanStatus, ab as PlanUsage, ac as PlannerCompaction, ad as PlannerCompactionOutcome, ae as PlannerContextPause, af as PlannerResendState, ah as PrepareIntent, ai as PreparedTask, aj as PreservedWork, ak as PreviewRepo, al as PreviousWork, am as REPORT_MAX_CHARS, an as RefusedRemoval, ao as RepairEvidence, ap as ReplyRun, aq as RepoGroupLayout, ar as RepoHead, av as ResearchStep, aw as ResearchStepOutcome, ay as RunSettings, aB as SEVERITY_LABEL, aC as ScriptConsent, aD as ScriptResult, aE as SessionBilling, aF as SetupFailure, aG as ShadowedSkill, aH as SkillAppliesTo, aI as SkillCatalog, aJ as SkillInfo, aK as SkillLoad, aL as SkillLoadNotice, aM as SkillMetadata, aN as SkillSource, aR as SupervisorLevel, aV as TaskIsolation, aW as TaskIsolationState, aX as TaskLoop, aY as TaskModelAssignment, b1 as TaskStatus, b2 as TaskType, b3 as TaskUsageSummary, b4 as TreeSnapshot, b5 as UsageLine, b7 as UsageTotals, b9 as VerificationCheck, ba as addAttemptUsage, bb as addModelUsage, bc as addPlannerUsage, bd as addUsage, be as addUsageTotals, bf as artifactLines, bg as betweenRounds, bh as boundedHandoffLines, bi as byteSize, bj as checkHandoff, bk as checkOf, bl as contextMeterText, bm as contextMeterTitle, bn as costText, bo as countedSessionCost, bp as createEmptyPlan, bq as createSkillsService, br as createTask, bs as endAttemptUsage, bt as findingLines, bu as flattenTasks, bv as flattenTasksWithParents, bw as formatCost, bx as formatTokenCount, by as handoffDigest, bz as handoffLines, bA as handoffPreviewLines, bB as handoffReferenceText, bC as handoffWakeLines, bD as inLoop, bE as isAwaitingReason, bF as isMeasured, bG as isSupervisorLevel, bH as isUserMessage, bI as loopRemovalRefusal, bJ as loopRoundOf, bK as migratePlanState, bL as modelCostTitle, bM as namedHandoff, bN as openingLines, bO as outOfRounds, bP as partedPromptUsage, bQ as patchChangesText, bR as patchFlagText, bS as patchLines, bT as patchLinesText, bU as patchText, bV as patchView, bW as pausedOnLimit, bX as planUsage, bY as plannerContextFill, bZ as readableTaskIds, b_ as rejoinPlanTree, b$ as resumedSessionWindow, c0 as savedPatchOf, c1 as savedPatchView, c2 as savedPatchViews, c3 as severityLabel, c4 as startAttemptUsage, c5 as storedHandoff, c6 as subagentCostTitle, c7 as taskUsageSummary, c8 as tasksTotalText, c9 as usageLine, ca as usageText, cb as waitsForApproval, cc as withPatch, cd as worstSeverity } from './Task-BL4Idm9r.mjs';
3
- import { da as TurnBudgets, b4 as PlanIntake, ao as IWebFetcher, V as ConversationTurn, bj as PlannerModes, by as ResolveAll, dj as WebReadPolicy, dg as WebRead, dh as WebReadDecision, di as WebReadOptions, b0 as PendingApprovals, al as IAiService, ba as PlannerContextDeps, bb as PlannerContextStatus, M as ContextCondenseRequest, T as ConversationRequest, be as PlannerModelCandidate, bL as RunnerAuthExec, bK as RunnerAuth, b as AccountLimitBucket, c as AccountLimitSnapshot, t as AssignmentWriter, s as AssignmentScope, cS as TaskQueryCatalog, q as AssignmentCatalog, bO as RunnerCatalog, c6 as SessionMessage, b_ as SessionBroadcaster, c8 as SessionNotice, b8 as PlanStore, cM as TaskOrchestrator, at as IsolationRunController, aX as OrchestratorObserver, cB as TaskLogEvent, bx as ResearchTasks, an as INotification, ag as GlobalRunSettings, c1 as SessionHeld, c3 as SessionLease, bd as PlannerConversationHost, bc as PlannerConversation, aa as ExecutionCommand, F as CommandOutcome, a$ as PendingApproval, P as ConversationCompaction, bA as RewindTarget, bJ as RunView, bE as RunMergeView, bC as RunActivity, cP as TaskOutputSource, aw as LeaseHost, dd as UserSettings, aB as LiveTailOptions, aA as LiveTail, c7 as SessionMeta, bi as PlannerModelStore, bh as PlannerModelRecall } from './runSettingsText-BuLVBlXS.mjs';
4
- export { A as ACT_RISK, a as AUTORUN_RISK, d as AccountLimitStatus, e as AccountLimitWindow, f as AccountLimitsFrame, g as AccountLimitsMessage, h as AdoptSessionResponse, i as ApplyTaskOpsResult, j as ApprovalAnswerResponse, k as ApprovalBlock, l as ApprovalRequestMessage, m as ApprovalStatus, n as ApprovalsResponse, o as ApproveReviewResponse, p as AskOptions, r as AssignmentIssue, u as AutoMergeTrigger, B as BlockingSubject, C as CHAT_COMMANDS, v as CHECKPOINT_TRUNCATE_LENGTH, w as CancelPlanningResponse, x as CancelResumeResponse, y as CliAgentAiService, z as CliAgentAiServiceDeps, D as CommandBlock, E as CommandDescriptor, G as CommandPayload, H as CommandStatus, I as CommandsResponse, J as CompactionBlock, K as CompactionStatus, L as Consent, N as ConversationBusyError, O as ConversationCompactResponse, Q as ConversationEditError, R as ConversationForkResponse, S as ConversationInput, U as ConversationRewindResponse, W as ConversationView, X as DEFAULT_WEB_READ_BUDGET, Y as DaemonErrorCode, Z as DecideOptions, _ as DiffRow, $ as DiffRowKind, a0 as DiffStat, a1 as DisplayBlock, a2 as EMPTY_CONVERSATION, a3 as EMPTY_HOLD, a4 as EMPTY_RUN, a5 as EMPTY_TASK_LOG, a6 as EMPTY_TASK_LOG_FOLLOW, a7 as ErrorBody, a8 as ExecuteCommandResponse, a9 as ExecuteResponse, ab as ExecutionCommands, ac as ExecutionHost, ad as ExecutionSummary, ae as GatedConversation, af as GeneratePlanResponse, ah as HEADLESS_CLI_COMMANDS, ai as HandoffBlock, aj as HandoffForkRepo, ak as HandoffPeekSubject, am as IDLE_ACTIVITY, ap as IsolationDiffResponse, aq as IsolationMergeResponse, ar as IsolationPreviewNotice, as as IsolationPreviewResponse, au as LEASE_HEARTBEAT_MS, av as LEASE_STALE_MS, ax as LeaseHostKind, ay as LeaseHostOptions, az as LiveOutputLookup, aC as LocalEntry, aD as LoopCheckFacts, aE as LoopCheckState, aF as LoopGuard, aG as MappedTool, aH as MarkdownToken, aI as MergeGateEntry, aJ as MergeGateResponse, aK as MergeWordingHandoff, aL as MessageBlock, aM as MessageRole, aN as ModelsResponse, aO as NOT_STARTED, aP as NO_TURN, aQ as NewTaskFields, aR as NotificationAction, aS as OUTPUT_LINES_DEFAULT, aT as OUTPUT_LINES_MAX, aU as OkResponse, aV as OpRef, aW as OpRefusal, aY as OutputPreview, aZ as OverrideDirection, a_ as PLANNED_WITH_LABEL, b1 as PendingApprovalsOptions, b2 as PlanBlock, b3 as PlanBlocks, b5 as PlanMarkerStatus, b6 as PlanResponse, b7 as PlanSnapshot, b9 as PlannerCommandSyntax, bf as PlannerModelChoice, bg as PlannerModelMemory, bk as PlannerNotReady, bl as PlannerNotReadyError, bm as PlannerReadinessConfig, bn as PlannerSubmission, bo as PlannerTurnDiscardedError, bp as PlannerTurnStoppedError, bq as PlannerUsageLimitError, br as PrdResponse, bs as PromptHold, bt as REPORT_PREVIEW_LINES, bu as RUN_SETTINGS_DEFAULTS, bv as ReadRunnerAuthOptions, bz as ResolveConflictResponse, bB as RewindTargetsResponse, bD as RunInput, bF as RunSettingsError, bG as RunSnapshotFrame, bH as RunTask, bI as RunTaskStatus, bM as RunnerAuthExecOptions, bN as RunnerAuthExecResult, bP as RunnerLoadedBlock, bQ as RunnersResponse, bR as STOPPED_BEFORE_START, bS as SUPERVISOR_LEVELS, bT as SUPERVISOR_LEVEL_LABEL, bU as SerializedConversationMessage, bV as SerializedPendingTurn, bW as SerializedPlan, bX as SerializedTask, bY as SerializedTaskStatus, bZ as ServerInfoResponse, b$ as SessionData, c0 as SessionFrame, c2 as SessionHeldError, c4 as SessionLeaseRecord, c5 as SessionListResponse, c9 as SessionResponse, ca as SettingsResponse, cb as SettingsService, cc as SettingsUpdateResponse, cd as SkillInvocation, ce as SkillLoadBlock, cf as SkillToken, cg as StartAdmission, ch as StopResponse, ci as StreamStamp, cj as SubagentBlock, ck as SubagentChild, cl as SubagentStatus, cm as SupervisorPolicy, cn as SurfacePlan, co as SurfacePlanState, cp as SurfaceTask, cq as TASK_QUERY_ANSWER_MAX_CHARS, cr as TASK_QUERY_ANSWER_OR_OPS, cs as TASK_QUERY_FIELDS, ct as TASK_QUERY_PROTOCOL, cu as TASK_QUERY_REMINDER, cv as TERMINAL_UI_COMMANDS, cw as TakenPrompt, cx as TaskAction, cy as TaskAttemptSnapshot, cz as TaskLogAttemptsResponse, cA as TaskLogBatch, cC as TaskLogFollow, cD as TaskLogFollowInput, cE as TaskLogHeaderKind, cF as TaskLogHeaderTask, cG as TaskLogHeaderUsage, cH as TaskLogHeaderView, cI as TaskLogResponse, cJ as TaskLogView, cK as TaskMessageResponse, cL as TaskOp, cN as TaskOrchestratorDeps, cO as TaskOrchestratorOptions, cQ as TaskPlacement, cR as TaskQuery, cT as TaskQueryField, cU as TaskRef, cV as TaskRowAction, cW as TaskRowContext, cX as TaskRowHandoff, cY as TaskRowIsolation, cZ as TaskRowKind, c_ as TaskRowLoop, c$ as TaskRowPlacement, d0 as TaskRowSubject, d1 as TaskRowUsage, d2 as TaskRowView, d3 as TaskRunFacts, d4 as TaskStatusKind, d5 as ThinkingDisplayBlock, d6 as ToolBlock, d7 as ToolHeadline, d8 as ToolStatus, d9 as TreeTask, db as TurnGate, dc as UsageBlock, de as WAITS_FOR_APPROVAL_LABEL, df as WakeUpItem, dk as Worded, dl as WorkspacesResponse, dm as abbreviateHome, dn as accountLimitPercentText, dp as accountLimitWindowLabel, dq as accountLimitsOf, dr as accountLimitsText, ds as accountLimitsTitle, dt as aheadOfDraft, du as applyTaskOps, dv as approvalKindText, dw as approvalLabel, dx as approvalStatusText, dy as assignedRunnerOf, dz as assignmentIssue, dA as assignmentIssueText, dB as attachingLabel, dC as automergeSummary, dD as autorunSummary, dE as awaitingLabel, dF as blockNotice, dG as blockNotices, dH as blockedByLabel, dI as blockingFailures, dJ as canMergeTasks, dK as canSetDependencies, dL as canSplitTask, dM as capConflictFiles, dN as cardEditNeedsUnstarted, dO as cardEditable, dP as checkoutRule, dQ as classifyOutcome, dR as coalesceTaskLog, dS as compactionText, dT as confirmedOverride, dU as createAiService, dV as dependencyCandidates, dW as dependentsNotice, dX as dependentsOf, dY as describeHeld, dZ as describeHolder, d_ as describeIsolationPreview, d$ as describeMergeResult, e0 as describePlannerNotReady, e1 as diffRows, e2 as diffStat, e3 as diffSummary, e4 as digestTaskLog, e5 as drainNext, e6 as editableWhileRunning, e7 as executionSummary, e8 as followTaskLog, e9 as followTurn, ea as fromTranscript, eb as getSettingsPath, ec as handoffBaseLine, ed as handoffBranchName, ee as handoffFindingsText, ef as handoffPeekParts, eg as hasAccountLimits, eh as hasHiddenDetail, ei as hasLongReport, ej as holdLabel, ek as holdPrompt, em as isRepoGroup, en as isTaskRunning, eo as lastServedModel, ep as loadedSkillTokens, eq as logContinues, er as logResumes, es as loopBodyLabel, et as loopBodyRound, eu as loopCheckLabel, ev as loopCheckState, ew as loopLeaveNotice, ex as loopRowParts, ey as manualOverrideConfirmation, ez as manualOverrideStopFirst, eA as mapAgentTool, eB as markAction, eC as markdownHtml, eD as markdownTokens, eE as mergeOutcome, eF as mergeTarget, eG as namedRepos, eH as newTaskFields, eI as noExecutorRefusal, eJ as normalizeAgentArgs, eK as opRefusalText, eL as opsEditable, eM as outputLines, eN as outputPreview, eO as overrideNeedsConfirmation, eP as parseCount, eQ as parseSwitch, eR as parseTaskOpsJson, eS as parseTaskQueryJson, eT as pastGateConfirmation, eU as planBlocks, eV as planMarkerParts, eW as plannerMessage, eX as plannerNotReady, eY as plannerNotReadyFor, eZ as plannerTranscript, e_ as processLeaseHost, e$ as ranSealed, f0 as readRunnerAuth, f1 as receiptLabel, f2 as reconcileApprovals, f3 as recordRunnerAuth, f4 as recordedRunnerAuth, f5 as reduceConversation, f6 as reduceRun, f7 as reduceTaskLog, f8 as renderTaskQueryAnswer, f9 as repairedLanded, fa as repairedNotice, fb as repeatingChecks, fc as replayTaskLog, fd as repoBaseLine, fe as repoResultLines, ff as reposWithWork, fg as resetRunnerAuth, fh as resolveSkillInvocation, fi as resolveTaskRef, fj as resolveUserTaskRef, fk as resumeLabel, fl as resumeTime, fm as runHoldsEditors, fn as runSettingsOf, fo as runnerToolSubject, fp as scriptExitText, fq as scriptRunText, fr as secondsText, fs as serializePlan, ft as serializeTask, fu as serializeTaskStatus, fv as skillTokens, fw as skippedLabel, fx as stopTurn, fy as subtreeIds, fz as summarizeToolCall, fA as supervisorSummary, fB as surfacePlan, fC as surfacePlanState, fD as takeAt, fE as taskActionCommand, fF as taskChatAvailable, fG as taskLogCommands, fH as taskLogForSurface, fI as taskLogHeaderView, fJ as taskOrderLabel, fK as taskPlacement, fL as taskQuerySignature, fM as taskRef, fN as taskRefOf, fO as taskRowActions, fP as taskRowView, fQ as taskStartedNotice, fR as taskStatusKind, fS as textHasTaskOps, fT as textHasTaskQuery, fU as titledRefs, fV as titledTaskRef, fW as titledTaskRefOf, fX as toTaskLogEvent, fY as toolHeadline, fZ as trailerSummary, f_ as trimToolOutput, f$ as truncateCheckpointSummary, g0 as unsendAll, g1 as unsendLatest, g2 as wakeUpItems, g3 as walkPlan, g4 as withoutSealedMark, g5 as workspaceEnvOf } from './runSettingsText-BuLVBlXS.mjs';
5
- import { O as IConfig, P as IFileSystem, am as PlannerToolHandler, aj as PlannerShellSandbox, aw as ResearchShell, N as IApproval, au as ReadFileOpts, br as ToolOutcome, L as GrepOptions, b2 as ShellLaunch, K as GlobOptions, H as FindSymbolOptions, B as BashOptions, bm as TaskShellSite, bl as TaskShell, az as RuleWord, af as PlannerAllowlist, aW as ScriptBody, Q as IRunner, ag as PlannerBackendId, ap as ProviderModelLists, f as AiProvider, n as ApprovalModeSetting, aO as RunnerRegistry, aH as RunnerEnv, a8 as OrchestratorOption, d as AgentProcessDeps, bf as TaskModeAgentAdapter, e as AgentStartOptions, a as AgentAdapter, c as AgentEvent, aE as RunnerCommand$1, s as AttachState, k as ApprovalDecision, an as ProjectMcpServer, R as IRunnerSession, o as ApprovalPolicy, j as ApprovalAnswer, a9 as OrdewellMcpServer, bc as TaskCompleteArgs, aX as ScriptExit, t as CheckpointAnswer, b6 as StructuredTurnEnd, b5 as StructuredEvent, be as TaskMessageFrom, ar as QueuedTaskMessage, bn as TaskStartOptions, bo as TaskTokenScope, a0 as McpToolReply, bq as TaskWebReads, av as ReadTaskArgs, i as ApplyPatchArgs, aJ as RunnerManifest, bk as TaskRunnerFlags } from './IRunner-ihalYfTo.mjs';
6
- export { A as AUTO_COMMANDS, b as AgentAdapterFactory, g as AllProviderModels, h as AnswerApprovalArgs, l as ApprovalKind, m as ApprovalMode, p as ApprovalPolicyOptions, q as ApprovalRequest, r as ApprovalSource, C as CatalogModel, u as CheckpointArgs, v as CommandClassification, w as CommandTier, x as CommandWords, D as DEFAULT_PLANNER_ALLOWLIST, y as DEFAULT_SCRIPT_TIMEOUT_MS, z as DENY_ALL, E as DiscoveryCommand, F as EditPlanArgs, G as FetchAllProviderModelsOptions, I as GIT_READONLY_SUBCOMMANDS, J as GREP_DEFAULT_HEAD_LIMIT, M as GrepOutputMode, S as InvokedCommand, T as LineBuffer, U as ListModelsArgs, V as ListRunnersArgs, W as LoadSkillArgs, X as McpClientConfig, Y as McpCredential, Z as McpRefusal, _ as McpTool, $ as McpToolContext, a1 as MessageTaskArgs, a2 as ModelCatalog, a3 as ModelShortcut, a4 as ORCHESTRATOR_SHORTCUTS, a5 as ORDEWELL_MCP_PATH, a6 as ORDEWELL_MCP_SERVER_NAME, a7 as OneTaskArgs, aa as OwnSealedRuns, ab as OwnerOnlyFile, ac as PLANNER_EXECUTION_TOOLS, ad as PLANNER_SANDBOX_DOCS, ae as PLANNER_TOOLS, ah as PlannerSandboxAvailability, ai as PlannerSandboxDeps, ak as PlannerStartOptions, al as PlannerTokenScope, ao as ProviderCredentialSource, aq as ProviderModelsResult, as as READ_ONLY_TASK_TOOLS, at as REFUSED_COMMANDS, ax as ResearchShellDeps, ay as RetryTaskArgs, aA as RunCommandArgs, aB as RunPlanArgs, aC as RunnerAuthSpec, aD as RunnerAuthStatus, aF as RunnerCommandKind, aG as RunnerEntry, aI as RunnerFeatures, aK as RunnerMcpServer, aL as RunnerMode, aM as RunnerModelDiscovery, aN as RunnerModelRef, aP as SEALED_LIMITS, aQ as SEARCH_EXCLUSIONS, aR as SandboxBackend, aS as SandboxInvocation, aT as SandboxLaunch, aU as SandboxLimits, aV as SandboxProfile, aY as ScriptFullOutput, aZ as ScriptRun, a_ as ScriptStatus, a$ as SealedAvailability, b0 as SealedRunOptions, b1 as ShellDialect, b3 as SpawnFn, b4 as StandingDecision, b7 as SubmitPlanArgs, b8 as TASK_COMPLETE_TOOL, b9 as TASK_COMPLETION_CONTRACT, ba as TASK_SEALED_LIMITS, bb as TASK_TOOLS, bd as TaskDiffArgs, bg as TaskModeUnsupportedError, bh as TaskOutputArgs, bi as TaskQueryArgs, bj as TaskRunCommandArgs, bp as TaskToolHandler, bt as approvalScopes, bu as classifyCommand, bv as clearPlannerSandboxCache, bw as clearResearchShellCache, bx as collectProviderCredentials, by as commandAllowedBy, bz as commandLine, bA as effectiveApprovalMode, bB as enabledRunners, bC as fetchAllProviderModels, bD as findRunnerCommand, bE as isGranted, bF as isRunnerApproval, bG as knownModelId, bH as mcpClientConfig, bI as ownerOnlyConfigFile, bJ as parseAllowlist, bK as parseApprovalModeSetting, bL as researchShellWarning, bM as researchToolsPath, bN as resolveModelShortcut, bO as resolvePlannerSandbox, bP as resolveProvider, bQ as resolveResearchShell, bR as scopeAllowed, bS as scriptBodyOf, bT as scriptBodyText, bU as scriptTaskText, bV as sharedMcpServer, bW as taskCompletionContract, bX as timeLimitText, bY as toApprovalDecision, bZ as toOrchestratorOptions, b_ as toolAllowed } from './IRunner-ihalYfTo.mjs';
7
- import { R as RunnerModeInfo } from './ModeResolver-BDAgouuE.mjs';
8
- export { a as autonomyLevelLabel, p as parseAutonomyFlag, b as parseAutonomyLevel, r as runnerModesFrom } from './ModeResolver-BDAgouuE.mjs';
1
+ import { b3 as RunnerId, aX as ResearchProgress, bG as UsageRecord, aW as ResearchLogEntry, bp as Task, p as DiscoveredModel, S as IIsolationPreview, T as IWorktreeIsolation, a6 as IsolationRemoval, af as IsolationTaskStatus, ag as IsolationView, ax as PlanIsolation, aj as LegacyPlanState, b4 as RunnerSessionCost, I as HandoffCheck, bn as SubtreeReport, d as ChildTaskCounts, bJ as VerificationCheck, aV as ReportedWindow, aG as PlannerUsage, o as DelegatedRow, bz as TaskSkillSnapshot, bk as SkillsService, at as NodeAuthority, q as ExecutionActor, am as Mandate, aq as MandateRequest, bA as TaskSnapshot, ay as PlanState, bI as Verdict, bl as StoredHandoff, b7 as ScriptBody } from './Task-CxGgN6I0.mjs';
2
+ export { A as ApprovalRecord, a as AttemptUsage, b as AwaitingReason, B as BUILTIN_SKILL_NAMES, c as BelowPlan, e as CommandWords, f as ContextCheckpoint, g as ContextFill, h as ConversationMessage, i as CostProvenance, D as DEFAULT_LOOP_ROUNDS, j as DEFAULT_PLANNER_ALLOWLIST, k as DEFAULT_RUNNERS, l as DEFAULT_SCRIPT_TIMEOUT_MS, m as DEFAULT_SUPERVISOR_RETRY_LIMIT, n as DIGEST_FINDINGS, E as EffectRules, r as ExecutionCommandName, s as ExecutionRecord, F as FLOOR_GRANTS, t as FindingSeverity, G as GRANTS, u as Grant, v as GuardTarget, w as GuardTrip, H as HANDOFF_LIMITS, x as HANDOFF_PUSH_CHARS, y as Handoff, z as HandoffArtifact, J as HandoffCommit, K as HandoffDigest, L as HandoffEvidence, M as HandoffFinding, N as HandoffLogs, O as HandoffPatch, P as HandoffPins, Q as HandoffPreviewOptions, R as HandoffTaskName, U as IntegrationDisposal, V as InvalidSkill, W as IsolationAvailability, X as IsolationHandoff, Y as IsolationHandoffRepo, Z as IsolationInactiveReason, _ as IsolationLandedTask, $ as IsolationLanding, a0 as IsolationMergeBlock, a1 as IsolationMergeBlockReason, a2 as IsolationMergeResult, a3 as IsolationOutcome, a4 as IsolationPreview, a5 as IsolationPruneResult, a7 as IsolationRepo, a8 as IsolationRepoRevert, a9 as IsolationRevertResult, aa as IsolationRevertTask, ab as IsolationRun, ac as IsolationTaskRecord, ad as IsolationTaskRef, ae as IsolationTaskRepo, ah as LandedTask, ai as LandedWork, ak as LoopSubject, al as MAX_LOOP_ROUNDS, an as MandateExclusions, ao as MandateLimits, ap as MandateRefusal, ar as ModelUsage, as as Narrowed, au as PatchFlag, av as PatchView, az as PlanStatus, aA as PlanUsage, aB as PlannerAllowlist, aC as PlannerCompaction, aD as PlannerCompactionOutcome, aE as PlannerContextPause, aF as PlannerResendState, aH as PrepareIntent, aI as PreparedTask, aJ as PreservedWork, aK as PreviewRepo, aL as PreviousWork, aM as REPORT_MAX_CHARS, aN as ROOT_NODE, aO as RefusedRemoval, aP as RepairEvidence, aQ as RepairWait, aR as ReplyRun, aS as RepoGroupLayout, aT as RepoHead, aU as ReportItem, aY as ResearchStep, aZ as ResearchStepOutcome, a$ as RevertCommand, b0 as RevertWatch, b1 as RootSettings, b2 as RunSettings, b5 as SEVERITY_LABEL, b6 as SHAPE_LIMITS, b8 as ScriptConsent, b9 as ScriptResult, ba as SessionBilling, bb as SetupFailure, bc as ShadowedSkill, bd as SkillAppliesTo, be as SkillCatalog, bf as SkillInfo, bg as SkillLoad, bh as SkillLoadNotice, bi as SkillMetadata, bj as SkillSource, bo as SupervisorLevel, bs as TaskEvidence, bt as TaskIsolation, bu as TaskIsolationState, bv as TaskLoop, bw as TaskModelAssignment, bB as TaskStatus, bC as TaskType, bD as TaskUsageSummary, bE as TreeSnapshot, bF as UsageLine, bH as UsageTotals, bK as WrittenTaskRef, bL as actorAuthority, bM as addAttemptUsage, bN as addModelUsage, bO as addPlannerUsage, bP as addUsage, bQ as addUsageTotals, bR as artifactLines, bS as betweenRounds, bT as boundedHandoffLines, bU as byteSize, bV as checkHandoff, bW as checkOf, bX as commandAllowedBy, bY as commandLine, bZ as contextMeterText, b_ as contextMeterTitle, b$ as costText, c0 as countedSessionCost, c1 as createEmptyPlan, c2 as createSkillsService, c3 as createTask, c4 as effectRuleFor, c5 as endAttemptUsage, c6 as findingLines, c7 as findingRefText, c8 as flattenTasks, c9 as flattenTasksWithParents, ca as formatCost, cb as formatTokenCount, cc as handoffDigest, cd as handoffLines, ce as handoffPreviewLines, cf as handoffReferenceText, cg as handoffWakeLines, ch as heldHandoff, ci as heldMandate, cj as heldWords, ck as inLoop, cl as isAwaitingReason, cm as isMeasured, cn as isSupervisorLevel, co as isUserMessage, cp as loopRemovalRefusal, cq as loopRoundOf, cr as mandateRefusalText, cs as migratePlanState, ct as modelCostTitle, cu as namedHandoff, cv as narrow, cw as nodeText, cx as openingLines, cy as outOfRounds, cz as parseAllowlist, cA as parseEffectAllowlist, cB as parseFindingRef, cC as parsePlanPath, cD as partedPromptUsage, cE as patchChangesText, cF as patchFlagText, cG as patchLines, cH as patchLinesText, cI as patchText, cJ as patchView, cK as pausedOnLimit, cL as pinReference, cM as planUsage, cN as plannerContextFill, cO as readableTaskIds, cP as rejoinPlanTree, cQ as removedAttempt, cR as resolveWrittenRef, cS as resumedSessionWindow, cT as rootAuthority, cU as rootMandate, cV as savedPatchOf, cW as savedPatchView, cX as savedPatchViews, cY as scopeAllowed, cZ as scriptBodyOf, c_ as scriptBodyText, c$ as scriptTaskText, d0 as severityLabel, d1 as spentTokens, d2 as startAttemptUsage, d3 as storedHandoff, d4 as subagentCostTitle, d5 as taskUsageSummary, d6 as tasksTotalText, d7 as timeLimitText, d8 as toolAllowed, d9 as usageLine, da as usageText, db as waitsForApproval, dc as withPatch, dd as wordsFrom, de as worstSeverity } from './Task-CxGgN6I0.mjs';
3
+ import { V as IConfig, W as IFileSystem, aE as PlannerToolHandler, ay as PlannerModes, aB as PlannerShellSandbox, aP as ResearchShell, U as IApproval, aN as ReadFileOpts, bO as ToolOutcome, Q as GrepOptions, bn as ShellLaunch, P as GlobOptions, M as FindSymbolOptions, B as BashOptions, bJ as TaskShellSite, bI as TaskShell, Z as IRunner, ax as PlannerBackendId, aI as ProviderModelLists, f as AiProvider, n as ApprovalModeSetting, b6 as RunnerRegistry, a_ as RunnerEnv, aq as OrchestratorOption, d as AgentProcessDeps, bB as TaskModeAgentAdapter, e as AgentStartOptions, a as AgentAdapter, c as AgentEvent, aX as RunnerCommand$1, s as AttachState, k as ApprovalDecision, aG as ProjectMcpServer, _ as IRunnerSession, bs as StructuredTurnEnd, br as StructuredEvent, bA as TaskMessageFrom, aK as QueuedTaskMessage, by as TaskCompleteArgs, x as CheckpointAnswer, be as ScriptExit, af as McpToolReply, X as ILogger, Y as INotification, bG as TaskRunnerConfig, a1 as IsolationRunController, o as ApprovalPolicy, J as EventStore, j as ApprovalAnswer, ap as OpenLease, aF as PostArgs, aO as ReadTaskArgs, ar as OrdewellMcpServer, bK as TaskStartOptions, bL as TaskTokenScope, bN as TaskWebReads, i as ApplyPatchArgs, b5 as RunnerPlacement, b0 as RunnerManifest, bH as TaskRunnerFlags } from './eventStore-CcB8yELZ.mjs';
4
+ export { A as AUTO_COMMANDS, b as AgentAdapterFactory, g as AllProviderModels, h as AnswerApprovalArgs, l as ApprovalKind, m as ApprovalMode, p as ApprovalPolicyOptions, q as ApprovalRequest, r as ApprovalSource, C as CatalogModel, y as CheckpointArgs, z as ChildSessionPlace, D as CommandClassification, E as CommandTier, F as ConsoleLogger, G as DENY_ALL, H as DiscoveryCommand, I as EditPlanArgs, L as FetchAllProviderModelsOptions, N as GIT_READONLY_SUBCOMMANDS, O as GREP_DEFAULT_HEAD_LIMIT, R as GrepOutputMode, $ as InvokedCommand, a6 as LineBuffer, a7 as ListModelsArgs, a8 as ListRunnersArgs, a9 as LoadSkillArgs, aa as McpClientConfig, ab as McpCredential, ac as McpRefusal, ad as McpTool, ae as McpToolContext, ag as MessageTaskArgs, ah as ModelCatalog, ai as ModelShortcut, ak as NotificationAction, al as ORCHESTRATOR_SHORTCUTS, am as ORDEWELL_MCP_PATH, an as ORDEWELL_MCP_SERVER_NAME, ao as OneTaskArgs, as as OwnSealedRuns, at as OwnerOnlyFile, au as PLANNER_EXECUTION_TOOLS, av as PLANNER_SANDBOX_DOCS, aw as PLANNER_TOOLS, az as PlannerSandboxAvailability, aA as PlannerSandboxDeps, aC as PlannerStartOptions, aD as PlannerTokenScope, aH as ProviderCredentialSource, aJ as ProviderModelsResult, aL as READ_ONLY_TASK_TOOLS, aM as REFUSED_COMMANDS, aQ as ResearchShellDeps, aS as RetryTaskArgs, aT as RunCommandArgs, aU as RunPlanArgs, aV as RunnerAuthSpec, aW as RunnerAuthStatus, aY as RunnerCommandKind, aZ as RunnerEntry, a$ as RunnerFeatures, b1 as RunnerMcpServer, b2 as RunnerMode, b3 as RunnerModelDiscovery, b4 as RunnerModelRef, b7 as SEALED_LIMITS, b8 as SEARCH_EXCLUSIONS, b9 as SandboxBackend, ba as SandboxInvocation, bb as SandboxLaunch, bc as SandboxLimits, bd as SandboxProfile, bf as ScriptFullOutput, bg as ScriptRun, bh as ScriptStatus, bi as SealedAvailability, bj as SealedRunOptions, bk as SessionData, bl as SessionMeta, bm as ShellDialect, bp as SpawnFn, bq as StandingDecision, bt as SubmitPlanArgs, bu as TASK_COMPLETE_TOOL, bv as TASK_COMPLETION_CONTRACT, bw as TASK_SEALED_LIMITS, bx as TASK_TOOLS, bz as TaskDiffArgs, bC as TaskModeUnsupportedError, bD as TaskOutputArgs, bE as TaskQueryArgs, bF as TaskRunCommandArgs, bM as TaskToolHandler, bS as approvalScopes, bT as classifyCommand, bU as clearPlannerSandboxCache, bV as clearResearchShellCache, bW as collectProviderCredentials, bX as defaultLogger, bY as deleteSession, bZ as effectiveApprovalMode, b_ as enabledRunners, b$ as fetchAllProviderModels, c0 as findRunnerCommand, c1 as getLatestSession, c2 as idSegment, c3 as isGranted, c4 as isRunnerApproval, c5 as knownModelId, c6 as listChildSessions, c7 as listSessions, c8 as loadChildSession, c9 as loadSession, ca as loadSessionPlanState, cb as mcpClientConfig, cc as ownerOnlyConfigFile, cd as parseApprovalModeSetting, ce as plannerToolSet, cf as researchShellWarning, cg as researchToolsPath, ch as resolveModelShortcut, ci as resolvePlannerSandbox, cj as resolveProvider, ck as resolveResearchShell, cl as saveChildSession, cm as saveSession, cn as sessionDataDir, co as sharedMcpServer, cp as taskCompletionContract, cq as taskToolSet, cr as toApprovalDecision, cs as toOrchestratorOptions, ct as toolListing } from './eventStore-CcB8yELZ.mjs';
5
+ import { dw as TurnBudgets, be as PlanIntake, ay as IWebFetcher, X as ConversationTurn, bH as ResolveAll, dF as WebReadPolicy, dC as WebRead, dD as WebReadDecision, dE as WebReadOptions, ba as PendingApprovals, aw as IAiService, bk as PlannerContextDeps, bl as PlannerContextStatus, O as ContextCondenseRequest, V as ConversationRequest, bo as PlannerModelCandidate, bY as RunnerAuthExec, bX as RunnerAuth, b as AccountLimitBucket, c as AccountLimitSnapshot, u as AssignmentWriter, t as AssignmentScope, d7 as TaskQueryCatalog, r as AssignmentCatalog, b$ as RunnerCatalog, cj as SessionMessage, cc as SessionBroadcaster, ck as SessionNotice, bi as PlanStore, d1 as TaskOrchestrator, ac as Escalation, b5 as OrchestratorObserver, cS as TaskLogEvent, ce as SessionHeld, cs as SlotPool, a$ as NodeBudget, bG as ResearchTasks, ar as GlobalRunSettings, cg as SessionLease, bn as PlannerConversationHost, bm as PlannerConversation, cz as SubplannerBrief, al as ExecutionCommand, H as CommandOutcome, b9 as PendingApproval, du as TreeLedger, z as Carved, a_ as NodeBoard, cA as Subtree, R as ConversationCompaction, bN as RewindTarget, bW as RunView, da as TaskRevertPreview, bR as RunMergeView, bP as RunActivity, d4 as TaskOutputSource, aF as LeaseHost, d3 as TaskOrchestratorOptions, dz as UserSettings, aK as LiveTailOptions, aJ as LiveTail, bs as PlannerModelStore, br as PlannerModelRecall } from './runSettingsText-DFVpe6aU.mjs';
6
+ export { A as ACT_RISK, a as AUTORUN_RISK, d as AccountLimitStatus, e as AccountLimitWindow, f as AccountLimitsFrame, g as AccountLimitsMessage, h as AdoptSessionResponse, i as AnswerEscalationRequest, j as ApplyTaskOpsResult, k as ApprovalAnswerResponse, l as ApprovalBlock, m as ApprovalRequestMessage, n as ApprovalStatus, o as ApprovalsResponse, p as ApproveReviewResponse, q as AskOptions, s as AssignmentIssue, v as AutoMergeTrigger, B as BlockingSubject, C as CHAT_COMMANDS, w as CHECKPOINT_TRUNCATE_LENGTH, x as CancelPlanningResponse, y as CancelResumeResponse, D as CliAgentAiService, E as CliAgentAiServiceDeps, F as CommandBlock, G as CommandDescriptor, I as CommandPayload, J as CommandStatus, K as CommandsResponse, L as CompactionBlock, M as CompactionStatus, N as Consent, P as ConversationBusyError, Q as ConversationCompactResponse, S as ConversationEditError, T as ConversationForkResponse, U as ConversationInput, W as ConversationRewindResponse, Y as ConversationView, Z as DEFAULT_WEB_READ_BUDGET, _ as DELEGATION_OFFERED, $ as DELEGATION_RISK, a0 as DaemonErrorCode, a1 as DecideOptions, a2 as DiffRow, a3 as DiffRowKind, a4 as DiffStat, a5 as DisplayBlock, a6 as EMPTY_CONVERSATION, a7 as EMPTY_HOLD, a8 as EMPTY_RUN, a9 as EMPTY_TASK_LOG, aa as EMPTY_TASK_LOG_FOLLOW, ab as ErrorBody, ad as EscalationInput, ae as EscalationKind, af as EscalationOption, ag as EscalationOptionId, ah as EscalationRun, ai as EscalationsResponse, aj as ExecuteCommandResponse, ak as ExecuteResponse, am as ExecutionCommands, an as ExecutionHost, ao as ExecutionSummary, ap as GatedConversation, aq as GeneratePlanResponse, as as HEADLESS_CLI_COMMANDS, at as HandoffBlock, au as HandoffForkRepo, av as HandoffPeekSubject, ax as IDLE_ACTIVITY, az as IsolationDiffResponse, aA as IsolationMergeResponse, aB as IsolationPreviewNotice, aC as IsolationPreviewResponse, aD as LEASE_HEARTBEAT_MS, aE as LEASE_STALE_MS, aG as LeaseHostKind, aH as LeaseHostOptions, aI as LiveOutputLookup, aL as LocalEntry, aM as LoopCheckFacts, aN as LoopCheckState, aO as LoopGuard, aP as MappedTool, aQ as MarkdownToken, aR as MergeGateEntry, aS as MergeGateResponse, aT as MergeWordingHandoff, aU as MessageBlock, aV as MessageRole, aW as ModelsResponse, aX as NOT_STARTED, aY as NO_TURN, aZ as NewTaskFields, b0 as OUTPUT_LINES_DEFAULT, b1 as OUTPUT_LINES_MAX, b2 as OkResponse, b3 as OpRef, b4 as OpRefusal, b6 as OutputPreview, b7 as OverrideDirection, b8 as PLANNED_WITH_LABEL, bb as PendingApprovalsOptions, bc as PlanBlock, bd as PlanBlocks, bf as PlanMarkerStatus, bg as PlanResponse, bh as PlanSnapshot, bj as PlannerCommandSyntax, bp as PlannerModelChoice, bq as PlannerModelMemory, bt as PlannerNotReady, bu as PlannerNotReadyError, bv as PlannerReadinessConfig, bw as PlannerSubmission, bx as PlannerTurnDiscardedError, by as PlannerTurnStoppedError, bz as PlannerUsageLimitError, bA as PrdResponse, bB as PromptHold, bC as REPORT_PREVIEW_LINES, bD as RUN_SETTINGS_DEFAULTS, bE as ReadRunnerAuthOptions, bI as ResolveConflictResponse, bJ as RevertPreviewTask, bK as RevertRefusal, bL as RevertRefusalReason, bM as RevertScope, bO as RewindTargetsResponse, bQ as RunInput, bS as RunSettingsError, bT as RunSnapshotFrame, bU as RunTask, bV as RunTaskStatus, bZ as RunnerAuthExecOptions, b_ as RunnerAuthExecResult, c0 as RunnerLoadedBlock, c1 as RunnersResponse, c2 as STALLED_LABEL, c3 as STOPPED_BEFORE_START, c4 as STOPPING_LABEL, c5 as SUPERVISOR_LEVEL_LABEL, c6 as SerializedConversationMessage, c7 as SerializedPendingTurn, c8 as SerializedPlan, c9 as SerializedTask, ca as SerializedTaskStatus, cb as ServerInfoResponse, cd as SessionFrame, cf as SessionHeldError, ch as SessionLeaseRecord, ci as SessionListResponse, cl as SessionResponse, cm as SettingsResponse, cn as SettingsService, co as SettingsUpdateResponse, cp as SkillInvocation, cq as SkillLoadBlock, cr as SkillToken, ct as StartAdmission, cu as StopResponse, cv as StreamStamp, cw as SubagentBlock, cx as SubagentChild, cy as SubagentStatus, cB as SubtreeItemView, cC as SubtreeView, cD as SurfacePlan, cE as SurfacePlanState, cF as SurfaceTask, cG as TASK_QUERY_ANSWER_MAX_CHARS, cH as TASK_QUERY_ANSWER_OR_OPS, cI as TASK_QUERY_FIELDS, cJ as TASK_QUERY_PROTOCOL, cK as TASK_QUERY_REMINDER, cL as TERMINAL_UI_COMMANDS, cM as TakenPrompt, cN as TaskAction, cO as TaskActivity, cP as TaskAttemptSnapshot, cQ as TaskLogAttemptsResponse, cR as TaskLogBatch, cT as TaskLogFollow, cU as TaskLogFollowInput, cV as TaskLogHeaderKind, cW as TaskLogHeaderTask, cX as TaskLogHeaderUsage, cY as TaskLogHeaderView, cZ as TaskLogResponse, c_ as TaskLogView, c$ as TaskMessageResponse, d0 as TaskOp, d2 as TaskOrchestratorDeps, d5 as TaskPlacement, d6 as TaskQuery, d8 as TaskQueryField, d9 as TaskRef, db as TaskRevertPreviewResponse, dc as TaskRowAction, dd as TaskRowContext, de as TaskRowDelegated, df as TaskRowHandoff, dg as TaskRowIsolation, dh as TaskRowKind, di as TaskRowLoop, dj as TaskRowPlacement, dk as TaskRowSubject, dl as TaskRowUsage, dm as TaskRowView, dn as TaskRunFacts, dp as TaskStatusKind, dq as ThinkingDisplayBlock, dr as ToolBlock, ds as ToolHeadline, dt as ToolStatus, dv as TreeTask, dx as TurnGate, dy as UsageBlock, dA as WAITS_FOR_APPROVAL_LABEL, dB as WakeUpItem, dG as Worded, dH as WorkspacesResponse, dI as abbreviateHome, dJ as accountLimitPercentText, dK as accountLimitWindowLabel, dL as accountLimitsOf, dM as accountLimitsText, dN as accountLimitsTitle, dO as activityLabel, dP as aheadOfDraft, dQ as applyTaskOps, dR as approvalKindText, dS as approvalLabel, dT as approvalStatusText, dU as assignedRunnerOf, dV as assignmentIssue, dW as assignmentIssueText, dX as attachingLabel, dY as automergeSummary, dZ as autorunSummary, d_ as awaitingLabel, d$ as blockNotice, e0 as blockNotices, e1 as blockedByLabel, e2 as blockingFailures, e3 as canMergeTasks, e4 as canSetDependencies, e5 as canSplitTask, e6 as capConflictFiles, e7 as cardEditNeedsUnstarted, e8 as cardEditable, e9 as checkoutRule, ea as classifyOutcome, eb as closeTurn, ec as coalesceTaskLog, ed as compactionText, ee as confirmedOverride, ef as createAiService, eg as delegatedRowView, eh as delegationSummary, ei as dependencyCandidates, ej as dependentsNotice, ek as dependentsOf, el as describeHeld, em as describeHolder, en as describeIsolationPreview, eo as describeMergeResult, ep as describePlannerNotReady, eq as diffRows, er as diffStat, es as diffSummary, et as digestTaskLog, eu as drainNext, ev as editableWhileRunning, ew as elapsedSince, ex as escalations, ey as executionSummary, ez as followTaskLog, eA as followTurn, eB as formatElapsed, eC as fromTranscript, eD as getSettingsPath, eE as handoffBaseLine, eF as handoffBranchName, eG as handoffFindingsText, eH as handoffPeekParts, eI as hasAccountLimits, eJ as hasHiddenDetail, eK as hasLongReport, eL as holdLabel, eM as holdPrompt, eO as isRepoGroup, eP as isTaskRunning, eQ as lastServedModel, eR as loadedSkillTokens, eS as logContinues, eT as logResumes, eU as loopBodyLabel, eV as loopBodyRound, eW as loopCheckLabel, eX as loopCheckState, eY as loopLeaveNotice, eZ as loopRowParts, e_ as manualOverrideConfirmation, e$ as manualOverrideStopFirst, f0 as mapAgentTool, f1 as markAction, f2 as markdownHtml, f3 as markdownTokens, f4 as mergeOutcome, f5 as mergePastChecksConfirmation, f6 as mergeTarget, f7 as namedRepos, f8 as newTaskFields, f9 as noExecutorRefusal, fa as normalizeAgentArgs, fb as opRefusalText, fc as opsEditable, fd as outputLines, fe as outputPreview, ff as overrideNeedsConfirmation, fg as parseCount, fh as parseDelegation, fi as parseSwitch, fj as parseTaskOpsJson, fk as parseTaskQueryJson, fl as pastGateConfirmation, fm as planBlocks, fn as planMarkerParts, fo as plannerMessage, fp as plannerNotReady, fq as plannerNotReadyFor, fr as plannerTranscript, fs as processLeaseHost, ft as ranSealed, fu as readRunnerAuth, fv as receiptLabel, fw as reconcileApprovals, fx as recordRunnerAuth, fy as recordedRunnerAuth, fz as reduceConversation, fA as reduceRun, fB as reduceTaskLog, fC as renderTaskQueryAnswer, fD as repairWaitLabel, fE as repairedLanded, fF as repairedNotice, fG as repeatingChecks, fH as replayTaskLog, fI as repoBaseLine, fJ as repoResultLines, fK as reposWithWork, fL as resetRunnerAuth, fM as resolveSkillInvocation, fN as resolveTaskRef, fO as resolveUserTaskRef, fP as resumeLabel, fQ as resumeTime, fR as revertEffect, fS as revertListLine, fT as revertTaskRef, fU as runHoldsEditors, fV as runSettingsOf, fW as runnerToolSubject, fX as scriptExitText, fY as scriptRunText, fZ as secondsText, f_ as serializePlan, f$ as serializeTask, g0 as serializeTaskStatus, g1 as skillTokens, g2 as skippedLabel, g3 as stopTurn, g4 as subtreeIds, g5 as subtreeView, g6 as summarizeToolCall, g7 as supervisorSummary, g8 as surfacePlan, g9 as surfacePlanState, ga as takeAt, gb as taskActionCommand, gc as taskActivity, gd as taskChatAvailable, ge as taskLogCommands, gf as taskLogForSurface, gg as taskLogHeaderView, gh as taskOrderLabel, gi as taskPlacement, gj as taskQuerySignature, gk as taskRef, gl as taskRefOf, gm as taskRowActions, gn as taskRowView, go as taskStartedNotice, gp as taskStatusKind, gq as textHasTaskOps, gr as textHasTaskQuery, gs as titledRefs, gt as titledTaskRef, gu as titledTaskRefOf, gv as toTaskLogEvent, gw as toolHeadline, gx as trailerSummary, gy as trimToolOutput, gz as truncateCheckpointSummary, gA as unsendAll, gB as unsendLatest, gC as wakeUpItems, gD as walkPlan, gE as withoutSealedMark, gF as workspaceEnvOf } from './runSettingsText-DFVpe6aU.mjs';
7
+ import { R as RunnerModeInfo } from './ModeResolver-CA2fUU9h.mjs';
8
+ export { a as autonomyLevelLabel, p as parseAutonomyFlag, b as parseAutonomyLevel, r as runnerModesFrom } from './ModeResolver-CA2fUU9h.mjs';
9
9
  import { WorkerOptions, Worker } from 'worker_threads';
10
10
  import { ChildProcess } from 'child_process';
11
11
  import { EventEmitter } from 'events';
@@ -14,6 +14,7 @@ import 'zod/v4';
14
14
  type GitExecFn = (file: string, args: string[], opts: {
15
15
  cwd?: string;
16
16
  env: NodeJS.ProcessEnv;
17
+ input?: string;
17
18
  }) => Promise<{
18
19
  stdout: string;
19
20
  stderr: string;
@@ -635,61 +636,6 @@ interface VersionCheck {
635
636
  */
636
637
  declare function startVersionCheck(options: VersionCheckOptions): VersionCheck;
637
638
 
638
- /**
639
- * The effect allowlist (ADR-0035): the user's standing approval for named
640
- * effects, beside the planner allowlist, which names reads. It pre-approves a
641
- * script task whose `commands` are all covered; it never covers a `script`
642
- * body, whose shell text no rule can be matched against.
643
- *
644
- * A rule is matched against the whole command, every word in order and flags
645
- * included, because an effect's flags change what it does: `git push origin
646
- * feature/*` covers `git push origin feature/login`, never the same push with
647
- * `--force`. `*` stands for one word, or inside a word for any run of
648
- * characters, as in the planner allowlist, except that it never stands for
649
- * what changes the effect: a flag (`--force`, and `/force` on Windows), a
650
- * refspec's force or delete (`+main`, `:main`), or a `:` outside a URL
651
- * (`feature/x:main`, which pushes to `main`). The rule writes any of those
652
- * itself. A rule spells out its operation before any `*`, so
653
- * `az webapp config * set` is no rule at all.
654
- *
655
- * Exclusions are the planner allowlist's `!` entries, with any `!` entry
656
- * written here; an exclusion wins. A command exclusion is matched as the
657
- * planner allowlist matches it; a path or URL exclusion holds for an argument
658
- * that names an absolute path or URL it covers, whole or after a `=`, `@`,
659
- * `:` or `,` or a short flag (`--url=…`, `-d @…`). A relative path is not
660
- * resolved, since the body does not say where it runs. A program named by its
661
- * path is a file the repository ships (ADR-0026), so it is never covered.
662
- * There are no built-in rules: a default would pre-approve an effect the user
663
- * never chose.
664
- */
665
- interface EffectRule {
666
- text: string;
667
- binary: string;
668
- words: RuleWord[];
669
- }
670
- interface EffectRules {
671
- rules: EffectRule[];
672
- exclusions: PlannerAllowlist;
673
- platform: NodeJS.Platform;
674
- /** The entries that are no rule, each with the warning that says why it is ignored. */
675
- ignored: {
676
- rule: string;
677
- warning: string;
678
- }[];
679
- }
680
- /**
681
- * `entries` are the effect allowlist's; `plannerEntries` the planner allowlist
682
- * in force, whose `!` entries hold here too; `platform` the one the commands
683
- * run on, which decides how a flag is spelled and how a path resolves.
684
- */
685
- declare function parseEffectAllowlist(entries: readonly string[], plannerEntries?: readonly string[], platform?: NodeJS.Platform): EffectRules;
686
- /**
687
- * The rules, by name, that cover every command of a `commands` body, or null
688
- * when one command is not covered, an exclusion holds for one, or the body is
689
- * a `script`.
690
- */
691
- declare function effectRuleFor(list: EffectRules, body: ScriptBody): string | null;
692
-
693
639
  /**
694
640
  * Carries a structured task's tool requests to the session's one approval
695
641
  * seam (ADR-0018, A1), so a runner's request is answered through
@@ -946,6 +892,7 @@ declare abstract class BaseConfig implements IConfig {
946
892
  get approvalDefaults(): boolean;
947
893
  get approvalPreApproved(): string[];
948
894
  get effectAllowlist(): string[];
895
+ get notifyCommand(): string[];
949
896
  /**
950
897
  * Who plans when no surface setting names a planner: an explicit
951
898
  * AI_PROVIDER, then a vendor whose key is in the environment,
@@ -1029,6 +976,8 @@ interface WorktreeIsolationDeps {
1029
976
  config: Pick<IConfig, 'worktreeIsolation' | 'worktreeSetupCommand' | 'workspaceRepos' | 'worktreeLinks'>;
1030
977
  /** Test seam: every git invocation goes through this. */
1031
978
  execFileImpl?: GitExecFn;
979
+ /** Every git call of this isolation runs with hooks off: what it lands came from a container (ADR-0059 L6). */
980
+ noHooks?: boolean;
1032
981
  resolvePath?: () => Promise<string>;
1033
982
  platform?: NodeJS.Platform;
1034
983
  mintRunId?: () => string;
@@ -1039,6 +988,15 @@ interface WorktreeIsolationDeps {
1039
988
  declare function createIsolationPreview(deps: Pick<WorktreeIsolationDeps, 'config' | 'execFileImpl' | 'resolvePath'>): IIsolationPreview;
1040
989
  declare function createWorktreeIsolation(deps: WorktreeIsolationDeps): IWorktreeIsolation;
1041
990
 
991
+ /**
992
+ * What deleting a root owes its children (ADR-0055 D11): `deleteSession` removes
993
+ * files and no worktree, and a child's run is named only by a file that goes
994
+ * with the root's, so each is discarded first as Session's `discardRun` does.
995
+ * Unlanded work is kept on a branch; what git could not let go is in `refused`,
996
+ * for the caller to stop on while the records still name it.
997
+ */
998
+ declare function discardChildRuns(rootSessionId: string, baseDir: string, isolation: Pick<IWorktreeIsolation, 'discard'>): Promise<IsolationRemoval>;
999
+
1042
1000
  /** A task record as ADR-0013 persisted it, for one repository. */
1043
1001
  interface Adr0013TaskRecord {
1044
1002
  taskId: string;
@@ -1084,14 +1042,6 @@ declare function isolationViewOfPlan(plan: unknown, repairLimit?: number): Isola
1084
1042
  /** Select runner configuration that can run code or redirect a launch from paths relative to the directory the runner starts in. */
1085
1043
  declare function repositoryRunnerConfigPaths(paths: readonly string[]): string[];
1086
1044
 
1087
- interface ILogger {
1088
- warn(scope: string, message: string, err?: unknown): void;
1089
- }
1090
- declare class ConsoleLogger implements ILogger {
1091
- warn(scope: string, message: string, err?: unknown): void;
1092
- }
1093
- declare const defaultLogger: ILogger;
1094
-
1095
1045
  /** What a Gemini planner is built with beyond its config. */
1096
1046
  interface GeminiServiceDeps extends PlannerContextDeps {
1097
1047
  turnBudgets?: TurnBudgets;
@@ -1820,6 +1770,8 @@ declare const ORDEWELL_SETTABLE_ENV: readonly string[];
1820
1770
  * off, so every later command runs unprompted; the web-read budget bounds
1821
1771
  * how much a planner may send out unasked in Full; the effect allowlist
1822
1772
  * pre-approves script tasks that change real systems (ADR-0035).
1773
+ * - The notify command is a program Ordewell starts as the user, with no
1774
+ * approval, on every new escalation (ADR-0053).
1823
1775
  * - The settings-path override is honoured by the settings service, which
1824
1776
  * creates directories recursively when persisting — admitting it turns the
1825
1777
  * same write into an arbitrary-path file write.
@@ -1866,6 +1818,8 @@ interface RunnerCommand {
1866
1818
  * workspace's, for a runner whose value merges into one of them.
1867
1819
  */
1868
1820
  env?: (workspace: Record<string, string>) => Record<string, string>;
1821
+ /** Paths on this host, named in `args`, that the process reads, for a placement to bring along (ADR-0059 L5). */
1822
+ files?: readonly string[];
1869
1823
  /**
1870
1824
  * Names this launch must not inherit from the host or the workspace — the
1871
1825
  * credentials a native-shell planner keeps out of its process (ADR-0036 N2.2).
@@ -1898,6 +1852,8 @@ declare class RunnerProcess {
1898
1852
  private exitReported;
1899
1853
  private stderrTail;
1900
1854
  private spawnEnv;
1855
+ /** What a lease launched in this process's place, where one did (ADR-0059 L5). */
1856
+ private placed;
1901
1857
  /** Stdout readers' end-of-stream flushes, for an end the pipe itself never reports. */
1902
1858
  private readonly stdoutEnds;
1903
1859
  constructor(deps: AgentProcessDeps);
@@ -1949,6 +1905,7 @@ declare class RunnerProcess {
1949
1905
  */
1950
1906
  dispose(): void;
1951
1907
  private end;
1908
+ private placedEnded;
1952
1909
  private appendStderr;
1953
1910
  }
1954
1911
 
@@ -2057,6 +2014,8 @@ interface SpawnSpec {
2057
2014
  env?: Record<string, string>;
2058
2015
  /** Names the launch must not inherit from the host or the workspace (ADR-0036 N2.2). */
2059
2016
  envDrop?: (name: string) => boolean;
2017
+ /** Paths on this host, named in `args`, that the process reads. */
2018
+ files?: readonly string[];
2060
2019
  }
2061
2020
  /**
2062
2021
  * Shared plumbing for the agents that speak newline-delimited JSON over stdio.
@@ -2239,6 +2198,8 @@ declare class ClaudeCodeAdapter extends StdioAgentAdapter implements TaskModeAge
2239
2198
  private mainModel;
2240
2199
  /** What the plan should say the task runs: its spawn's model, then each switch followed. */
2241
2200
  private followedModel;
2201
+ /** The MCP configuration this process reads, on this host. */
2202
+ private configFile;
2242
2203
  /**
2243
2204
  * Model commands sent through the chat whose switch has not been seen yet,
2244
2205
  * oldest first, each with the turns still to end before its own has. Several
@@ -3044,6 +3005,8 @@ declare class PlannerBackend {
3044
3005
  type ModelsByRunner = Partial<Record<RunnerId, DiscoveredModel[]>>;
3045
3006
  interface SessionCatalogDeps {
3046
3007
  config: Pick<IConfig, 'enabledRunners' | 'autonomousMode' | 'aiProvider'>;
3008
+ /** Whether a task's mode defaults to its runner's autonomous one: a child's mandate says, the config's level unless set (ADR-0056 M6). */
3009
+ autonomous?: () => boolean;
3047
3010
  registry: Pick<RunnerRegistry, 'getManifest'>;
3048
3011
  modelResolver: Pick<ModelResolver, 'modelsForRunners' | 'getCachedRunnerModels'>;
3049
3012
  /** Read at each call: a toggle or allowlist edit made since the session was built counts (#69). */
@@ -3070,6 +3033,7 @@ declare class SessionCatalog {
3070
3033
  private readonly deps;
3071
3034
  private discovered;
3072
3035
  constructor(deps: SessionCatalogDeps);
3036
+ private autonomous;
3073
3037
  /** The runners enabled right now. */
3074
3038
  enabledRunners(): RunnerId[];
3075
3039
  /** The runners `writer` may put a task on now ({@link assignableRunners}); undefined means any. */
@@ -3146,6 +3110,291 @@ declare class SessionCatalog {
3146
3110
  }>;
3147
3111
  }
3148
3112
 
3113
+ /** One source for the spawn options, so a runner built on this base cannot drift from the interface. */
3114
+ type RunnerSpawnOptions = Parameters<IRunner['spawn']>[0];
3115
+ declare abstract class AbstractRunnerSession implements IRunnerSession {
3116
+ id: string;
3117
+ taskId: string;
3118
+ protected exited: boolean;
3119
+ protected outputEmitter: EventEmitter<any>;
3120
+ protected exitEmitter: EventEmitter<any>;
3121
+ constructor(id: string, taskId: string);
3122
+ protected baseHandleExit(code: number): void;
3123
+ onOutput(callback: (text: string) => void): void;
3124
+ onExit(callback: (code: number) => void): void;
3125
+ abstract kill(): void;
3126
+ abstract stop(): Promise<void>;
3127
+ abstract getOutput(): string;
3128
+ abstract write(text: string): void;
3129
+ abstract turnState(): 'working' | 'idle';
3130
+ abstract onTurnEnd(listener: (reason: StructuredTurnEnd) => void): void;
3131
+ abstract onEvent(listener: (event: StructuredEvent) => void): void;
3132
+ abstract sendMessage(text: string, from?: TaskMessageFrom): string;
3133
+ abstract forceSend(text: string): string;
3134
+ abstract forceSendQueued(id: string): boolean;
3135
+ abstract removeQueued(id: string): boolean;
3136
+ abstract queued(): QueuedTaskMessage[];
3137
+ abstract interrupt(): Promise<void>;
3138
+ abstract nativeSessionId(): string | null;
3139
+ abstract commands(): RunnerCommand$1[];
3140
+ abstract invokeCommand(name: string, args?: string): string;
3141
+ abstract answerPermission(id: string, decision: ApprovalDecision): boolean | Promise<boolean>;
3142
+ abstract onTaskComplete(listener: (report: TaskCompleteArgs) => void): void;
3143
+ abstract onToolCheckpoint(handler: (question: string, signal: AbortSignal) => Promise<CheckpointAnswer>): void;
3144
+ abstract onScriptExit(listener: (exit: ScriptExit) => void): void;
3145
+ }
3146
+ declare abstract class AbstractRunner<S extends IRunnerSession> implements IRunner {
3147
+ protected sessions: Map<string, S>;
3148
+ get activeCount(): number;
3149
+ /** A session winding down stays registered until it exits, so a second stop gets the same wind-down. */
3150
+ stop(sessionId: string): Promise<void>;
3151
+ stopAll(): void;
3152
+ protected registerSession(id: string, session: S): void;
3153
+ abstract spawn(opts: RunnerSpawnOptions): Promise<IRunnerSession>;
3154
+ }
3155
+
3156
+ /** Why a node may do nothing more, and the status that ends it with (ADR-0056 M5, M8). */
3157
+ interface NodeEnd {
3158
+ why: string;
3159
+ ends: 'blocked' | 'failed';
3160
+ }
3161
+ /** What a parent reads of a child (ADR-0055 D6), all of it read afresh from the child's plan and run. */
3162
+ interface NodeState {
3163
+ /** What keeps a `done` from being taken, in the words of a refusal; empty once the run has settled and landed. */
3164
+ unfinished: readonly string[];
3165
+ /** Tasks that finished with a pass. */
3166
+ completed: number;
3167
+ /** An attempt is live, or a run is opening or merging. */
3168
+ live: boolean;
3169
+ /** A planner turn holds the conversation, or waits for it. */
3170
+ plannerBusy: boolean;
3171
+ /** Something gathered for the subplanner will open a turn by itself. */
3172
+ wakeOwed: boolean;
3173
+ /** Why this node stops now, or null: what ends it with no call of its own. */
3174
+ stoppedFor: NodeEnd | null;
3175
+ /** Why nothing may start here though what is in flight may finish, or null (ADR-0056 M10). */
3176
+ withdrawn: string | null;
3177
+ /** Why what is ready cannot start, with nothing live to free room: its subplanner is told first, and it ends `blocked` if nothing comes of that (ADR-0056 M5). */
3178
+ startRefused: string | null;
3179
+ /** One line per task, as a derived report lists them. */
3180
+ tasks: readonly {
3181
+ label: string;
3182
+ status: Task['status'];
3183
+ }[];
3184
+ }
3185
+ /** A subplanner's report once Ordewell has read what it names (ADR-0057 R2). */
3186
+ type TakenReport = TaskCompleteArgs & {
3187
+ subtree?: SubtreeReport;
3188
+ };
3189
+ /** The child, as its attempt drives it: nothing of the Session it is, or of a surface. */
3190
+ interface ChildNode {
3191
+ readonly sessionId: string;
3192
+ /** Its protected paths, its ancestors' with them (ADR-0056 M4). */
3193
+ readonly protectedPaths: readonly string[];
3194
+ /** The time it has to run in (ADR-0056 M3). */
3195
+ readonly wallClockMs: number | null;
3196
+ /** How much of the time since `since` its tree is held on a usage limit, which is not on its clock (M3). */
3197
+ heldSince(since: number): number;
3198
+ startPlanning(goal: string): Promise<unknown>;
3199
+ continueConversation(text: string): Promise<unknown>;
3200
+ /** Reopened (ADR-0055 D17): acts as Execute there, and its subplanner goes on with `text`; one that never wrote a plan plans `goal`. */
3201
+ goOn(text: string, goal: string): Promise<unknown>;
3202
+ /** A line for the subplanner's next turn, which opens none (ADR-0057 R6): a landing is no reason to wake it. */
3203
+ hear(line: string): void;
3204
+ state(): NodeState;
3205
+ /** A report held to its plan and subtree, its references pinned and what crosses a level read verbatim (ADR-0057 R1, R2). */
3206
+ takeReport(report: TaskCompleteArgs): HandoffCheck<TakenReport>;
3207
+ /** End its subtree (D16). Resolves once nothing of it is left, however long that takes. */
3208
+ halt(): Promise<void>;
3209
+ /** Let its Session go, and what it did not spend return (ADR-0056 M5). */
3210
+ close(): Promise<void>;
3211
+ }
3212
+ /** What a subplanner's token calls and what its Session tells of itself, bound to one attempt (ADR-0055 D5). */
3213
+ interface SubplannerLink {
3214
+ taskComplete(report: TaskCompleteArgs): Promise<McpToolReply>;
3215
+ checkpoint(question: string): McpToolReply;
3216
+ /** Something changed that a verdict or the completion reminder may read. */
3217
+ changed(): void;
3218
+ /** A Stop stands over this node, its own or an ancestor's (ADR-0055 D16). */
3219
+ stopped(): boolean;
3220
+ /** What its planner or a task spent, as it arrives: charged where it was spent, and rolled up to each level for its row (ADR-0055 D20). */
3221
+ usage(record: UsageRecord): void;
3222
+ }
3223
+ /** The parent, as a child's attempt needs it. */
3224
+ interface ChildHost {
3225
+ /**
3226
+ * Carve the child's mandate and budget, and build it in `cwd` (ADR-0056 M4,
3227
+ * M5), or the child `reopening` from its saved file (ADR-0055 D17). Rejects,
3228
+ * naming the level, for what cannot be carved.
3229
+ */
3230
+ openChild(task: Task, cwd: string, link: SubplannerLink, reopening?: string): Promise<ChildNode>;
3231
+ /** What the delegated task's branch changed since its base, relative to the workspace root. */
3232
+ changedPaths(taskId: string): Promise<string[]>;
3233
+ /** A Stop stands over this node: what its children read of their ancestors (D16). */
3234
+ stopped(): boolean;
3235
+ /** Usage on its way up the tree, past this level's row. */
3236
+ passUp(record: UsageRecord): void;
3237
+ /** A child's tasks moved, so the row of its delegated task is stale (ADR-0055 D20). */
3238
+ moved(): void;
3239
+ }
3240
+ interface ChildPlanSetup {
3241
+ task: Task;
3242
+ cwd: string;
3243
+ host: ChildHost;
3244
+ /** A Continue (ADR-0055 D17): the child it reopens, and what its parent says to it. */
3245
+ resume?: {
3246
+ sessionId: string;
3247
+ message: string;
3248
+ };
3249
+ }
3250
+ /**
3251
+ * One attempt of a delegated task (ADR-0055 D3): a child Session in its
3252
+ * worktree, behind the runner seam, so to its parent a subplanner is a runner.
3253
+ * The attempt has one turn, from its start to its verdict, whatever the
3254
+ * subplanner's own turns: `onTurnEnd` fires when the child ends, so ADR-0018's
3255
+ * waiting for input and completion reminder are not read off them. This reads
3256
+ * those turns itself, since nobody below the root waits for input (ADR-0056 M8).
3257
+ *
3258
+ * `task_complete` is the only way to a pass, and a subplanner saying done is
3259
+ * necessary and never sufficient: this holds it to D6 at the call.
3260
+ */
3261
+ declare class ChildPlanSession extends AbstractRunnerSession {
3262
+ private readonly setup;
3263
+ private readonly events;
3264
+ private readonly turnEnds;
3265
+ private readonly completes;
3266
+ private node;
3267
+ private output;
3268
+ /** Turns this opened and has not seen end: until they do, a quiet child is one still opening. */
3269
+ private opening;
3270
+ private reminded;
3271
+ /** The accepted call, until it is published. */
3272
+ private accepted;
3273
+ /** How the attempt raises a question: as a runner's `checkpoint` does, so the parent's task waits as any task at one. */
3274
+ private ask;
3275
+ /** A question went up and has no answer: nothing is stuck, and only the wall clock ends the wait (ADR-0056 M8). */
3276
+ private asking;
3277
+ /** The attempt has its end: nothing after it counts. */
3278
+ private ended;
3279
+ private halting;
3280
+ /** The Stop, recorded before anything is ended (D16): it is this attempt's, so a later attempt starts clear of it. */
3281
+ private tombstone;
3282
+ /** The child opening, which a Stop waits for: it cannot end what it has not got. */
3283
+ private seating;
3284
+ private checkQueued;
3285
+ private graceTimer;
3286
+ private wallClock;
3287
+ private printed;
3288
+ /** Where the child's tasks stood when its row last heard of them. */
3289
+ private counts;
3290
+ private stopping;
3291
+ private markGone;
3292
+ private readonly gone;
3293
+ constructor(id: string, taskId: string, setup: ChildPlanSetup);
3294
+ /** Whoever spawned it attaches its listeners when the spawn resolves, so the child starts a macrotask later. */
3295
+ begin(): void;
3296
+ private run;
3297
+ /** Read again as it runs out, so a hold found meanwhile moves it on (ADR-0056 M3). */
3298
+ private watchClock;
3299
+ /** A turn this opened: its end is one a check reads, and a failure in it ends the attempt, since no person reads it (ADR-0056 M8). */
3300
+ private opened;
3301
+ private turnSettled;
3302
+ private queueCheck;
3303
+ /**
3304
+ * What the child's state owes its attempt. Read after every change, so no
3305
+ * state of a child can sit with nothing to end it (ADR-0056 M8).
3306
+ */
3307
+ private check;
3308
+ /** The node stops as a Stop does, and the attempt ends once it has (ADR-0056 M3, M5). */
3309
+ private haltFor;
3310
+ /** A report nobody wrote, since no one is left to: only what the plan and run show, for the plan above to decide on. */
3311
+ private derived;
3312
+ /** The child's activity, as this attempt's log shows it (ADR-0055 D20): what a task became, not what its runner said. */
3313
+ private say;
3314
+ /** In its output and its log alike: what a person opens the task to read is this. */
3315
+ private print;
3316
+ /**
3317
+ * The subplanner's `task_complete`, on the token bound to this attempt. D6's
3318
+ * first two tests refuse at the call and leave the attempt open; a protected
3319
+ * path fails the verdict instead, since that work cannot be taken back here.
3320
+ * `blocked` and `failed` are taken at any time: that is how a subtree gives up.
3321
+ */
3322
+ private taskComplete;
3323
+ /**
3324
+ * The subplanner's question: it goes up as a checkpoint of this attempt, and
3325
+ * the call answers at once. Its answer opens the next turn, and a question
3326
+ * withdrawn with the attempt opens none.
3327
+ */
3328
+ private checkpoint;
3329
+ /** Why a `done` cannot be taken now, naming what is unfinished (D6: 1, 2). */
3330
+ private doneRefusal;
3331
+ /** The changes on the branch since its base, against every level's paths (D3, ADR-0056 M4): the one check of the work itself. */
3332
+ private protectedPathsTouched;
3333
+ /**
3334
+ * What its branch changed past the scope its parent declared (ADR-0056 M7),
3335
+ * for the parent to decide: scopes are advisory, so this goes in the report
3336
+ * and refuses nothing. A read-only task lands nothing to say this of.
3337
+ */
3338
+ private outsideScope;
3339
+ private publish;
3340
+ /** An end no subplanner reported: its handoff is what the plan and run show, and the verdict comes from there. */
3341
+ private end;
3342
+ private emitEvent;
3343
+ /**
3344
+ * A tombstone first (ADR-0055 D16): every start under it reads this at once,
3345
+ * before anything has stopped. Then the child goes as an attempt's runner
3346
+ * does: its subtree ended, leaves first, then its Session let go, while its
3347
+ * parent can still read the lease it depends on (D13), and what it did not
3348
+ * spend returned (ADR-0056 M5). Resolves when all of that is done, with no
3349
+ * timeout of its own: a runner's grace is the runner's (ADR-0018).
3350
+ */
3351
+ stop(): Promise<void>;
3352
+ private wind;
3353
+ kill(): void;
3354
+ /** Where its child's tasks stand, as last read; absent before the first read and once the child has gone. */
3355
+ progress(): ChildTaskCounts | undefined;
3356
+ getOutput(): string;
3357
+ /** Nothing reads a child's input but a message. */
3358
+ write(): void;
3359
+ /** One turn from its start to its verdict (D3). */
3360
+ turnState(): 'working' | 'idle';
3361
+ onTurnEnd(listener: (reason: StructuredTurnEnd) => void): void;
3362
+ onEvent(listener: (event: StructuredEvent) => void): void;
3363
+ /** A parent's message opens the subplanner's next turn (D3); Ordewell's own line waits for one. */
3364
+ sendMessage(text: string, from?: TaskMessageFrom): string;
3365
+ forceSend(text: string): string;
3366
+ forceSendQueued(): boolean;
3367
+ removeQueued(): boolean;
3368
+ queued(): QueuedTaskMessage[];
3369
+ /** A child has no one turn to interrupt: Stop ends it. */
3370
+ interrupt(): Promise<void>;
3371
+ /** What a restart names (D3): the child session, not a runner's. */
3372
+ nativeSessionId(): string | null;
3373
+ commands(): RunnerCommand$1[];
3374
+ invokeCommand(): string;
3375
+ answerPermission(): boolean;
3376
+ onTaskComplete(listener: (report: TaskCompleteArgs, refuted?: VerificationCheck) => void): void;
3377
+ /** A subplanner asks by its own token, not its attempt's, and this is how that question reaches the attempt. */
3378
+ onToolCheckpoint(handler: (question: string, signal: AbortSignal) => Promise<CheckpointAnswer>): void;
3379
+ onScriptExit(): void;
3380
+ }
3381
+ /**
3382
+ * Starts delegated tasks' attempts (ADR-0055 D3), as a runner starts a coding
3383
+ * agent's and the script runner a body, so the claim, the log, the verdict and
3384
+ * the landing meet one the way they meet any task. A separate process later is
3385
+ * a second `IRunner`, not a redesign.
3386
+ */
3387
+ declare class ChildPlanRunner extends AbstractRunner<ChildPlanSession> {
3388
+ private readonly host;
3389
+ private spawned;
3390
+ constructor(host: ChildHost);
3391
+ /** Every child's stop, for a node that waits on its subtree. */
3392
+ stopEvery(): Promise<void>;
3393
+ /** Where the tasks of the child `taskId` runs stand, or nothing with no child live. */
3394
+ progressOf(taskId: string): ChildTaskCounts | undefined;
3395
+ spawn(opts: RunnerSpawnOptions): Promise<IRunnerSession>;
3396
+ }
3397
+
3149
3398
  /**
3150
3399
  * A model's context window from a catalog Ordewell already holds — a runner's
3151
3400
  * own model listing or a provider's own models endpoint, never a table kept in
@@ -3219,17 +3468,24 @@ interface SessionEventRelayDeps {
3219
3468
  broadcast: SessionBroadcaster;
3220
3469
  /** Where isolation notices go, for a host whose notifications are not seen by the user. */
3221
3470
  onNotice?: (notice: SessionNotice) => void;
3222
- store: Pick<PlanStore, 'allTasks' | 'snapshot'>;
3223
- orchestrator: Pick<TaskOrchestrator, 'getIdleSince' | 'getCompletionReceipt' | 'getToolsAttaching' | 'getQueuedTaskMessages' | 'getMergeGate' | 'holdReason' | 'runMergeView' | 'activity'>;
3224
- runs: Pick<IsolationRunController, 'taskIsolation'>;
3471
+ store: Pick<PlanStore, 'allTasks' | 'planTasks' | 'snapshot' | 'statusMark'>;
3472
+ orchestrator: Pick<TaskOrchestrator, 'judgingOnce' | 'getIdleSince' | 'getCompletionReceipt' | 'getToolsAttaching' | 'getQueuedTaskMessages' | 'getMergeGate' | 'holdReason' | 'loopStranded' | 'runMergeView' | 'activity' | 'taskIsolation'>;
3225
3473
  /** Shared with the Session, which snapshots, restores and clears it. */
3226
3474
  usage: PlannerUsageLedger;
3475
+ /** What a subplanner's budget hears of each planner call (ADR-0056 M5); absent at the root, which is charged nothing. */
3476
+ spent?: (record: UsageRecord) => void;
3227
3477
  /** How many of a task's runner requests wait for an answer (ADR-0018, A1). */
3228
3478
  awaitingApproval?: (taskId: string) => number;
3229
3479
  /** What a task's waiting checkpoint asks, whole. */
3230
3480
  checkpointQuestion?: (taskId: string) => string | undefined;
3481
+ /** A delegated task's row (ADR-0055 D20). */
3482
+ delegation?: (taskId: string) => DelegatedRow | undefined;
3231
3483
  /** The task waits for the user's approval to start (ADR-0035). */
3232
3484
  waitsForApproval?: (taskId: string) => boolean;
3485
+ /** What waits on a person now (ADR-0053). */
3486
+ escalations?: () => Escalation[];
3487
+ /** The list as a status update carried it, for what must see each one with no surface attached. */
3488
+ escalationsSent?: (list: readonly Escalation[]) => void;
3233
3489
  }
3234
3490
  /**
3235
3491
  * Every orchestrator event the relay announces. `onTaskSettled` is persistence
@@ -3255,13 +3511,31 @@ declare class SessionEventRelay {
3255
3511
  private readonly onNotice?;
3256
3512
  private readonly store;
3257
3513
  private readonly orchestrator;
3258
- private readonly runs;
3259
3514
  private readonly usage;
3515
+ private readonly spent;
3260
3516
  private readonly awaitingApproval;
3261
3517
  private readonly checkpointQuestion;
3262
3518
  private readonly waitsForApproval;
3519
+ private readonly delegation;
3520
+ private readonly escalations;
3521
+ private readonly escalationsSent;
3263
3522
  private statusHeld;
3264
3523
  private statusOwed;
3524
+ /** The second a status update opened: until it ends, one that can wait does. */
3525
+ private statusWindow;
3526
+ /** Something changed that the last status update did not carry, and it can wait for {@link statusWindow} to end. */
3527
+ private statusDue;
3528
+ /** The ids of what waits on a person, as the last status update carried it. */
3529
+ private sentWaits;
3530
+ /** {@link statusWindow} has sent a change to what waits on a person: the next change waits for it to end. */
3531
+ private waitsSent;
3532
+ /** The ids of the work a merge is offered on, as the last status update carried it. */
3533
+ private sentLanded;
3534
+ /** {@link statusWindow} has sent a change to that work: the next change waits for it to end. */
3535
+ private landedSent;
3536
+ /** The run as {@link statusChanged} last read it. */
3537
+ private lastMoved;
3538
+ private livePlan;
3265
3539
  /** The planner's requests announced and not yet settled, as they were announced: a surface joining now is owed them. */
3266
3540
  private readonly announced;
3267
3541
  /** The planner compaction started and not yet ended, as it was announced: a surface joining now is owed it too. */
@@ -3269,11 +3543,52 @@ declare class SessionEventRelay {
3269
3543
  constructor(deps: SessionEventRelayDeps);
3270
3544
  /** `plan` is read per event: a Session with no plan (or mid-reset) announces nothing about tasks. */
3271
3545
  observer(plan: () => LegacyPlanState | null): RelayObserver;
3546
+ /** A delegated task's row moved: it can wait for the window, as usage does. */
3547
+ rowsMoved(plan: LegacyPlanState | null): void;
3548
+ /** Send every task's status now, whatever was sent a moment ago: for what a surface must not wait for. */
3272
3549
  status(plan: LegacyPlanState | null): void;
3550
+ /**
3551
+ * Send what is owed before something that assumes it arrived: a surface
3552
+ * treats `execution_complete` as the end of the stream, for one, and a
3553
+ * status update coming after it is one it may never read. Called from
3554
+ * outside any observer too, and a surface that failed fails nothing else.
3555
+ */
3556
+ flushStatus(plan: LegacyPlanState | null): void;
3557
+ /** Nothing goes out for this Session again: what was held back goes now. */
3558
+ closeStatus(plan: LegacyPlanState | null): void;
3559
+ /** A run's progress is at most a second late, so a thousand runners reporting cost a surface one update. */
3560
+ private statusCanWait;
3561
+ /**
3562
+ * The list of what waits on a person (ADR-0053) is a judgement of the plan,
3563
+ * so it is read only when something it reads has moved: a task's status, or
3564
+ * whether the run is moving. An ending that leaves nobody anything to do, or
3565
+ * a start, moves nothing in it, and a fan-out or a wave of verdicts stays
3566
+ * one update a second.
3567
+ */
3568
+ private statusChanged;
3569
+ /**
3570
+ * The first change to what waits on a person goes out at once, and the rest
3571
+ * wait for the second to end: every update carries every wait, so a hundred
3572
+ * tasks failing together must not each send the plan with all those before
3573
+ * them. The notifier reads the list as it goes out, so it is told of them
3574
+ * then, each once.
3575
+ */
3576
+ private waitsMayHaveChanged;
3577
+ /**
3578
+ * A task in a worktree reports its landing twice and its release once, and
3579
+ * every update carries every task, so a wide run must not send the plan per
3580
+ * report. What a person acts on still goes first: new work to merge, like a
3581
+ * new wait, goes at once, and the rest waits for the second to end.
3582
+ */
3583
+ private isolationChanged;
3584
+ private openStatusWindow;
3273
3585
  /** Every task's status as it stands, in the message a status update carries. */
3274
3586
  statusMessage(): Extract<SessionMessage, {
3275
3587
  type: 'status_update';
3276
3588
  }>;
3589
+ private judgedStatus;
3590
+ /** A {@link holdStatus} is running: whoever runs it saves as it ends. */
3591
+ get holdingStatus(): boolean;
3277
3592
  /**
3278
3593
  * Run `op` with status broadcasts held back. Store ops signal the observer
3279
3594
  * as they go, which would put a status_update on the wire before the
@@ -3298,10 +3613,14 @@ declare class SessionEventRelay {
3298
3613
  progress(progress: ResearchProgress): void;
3299
3614
  }
3300
3615
 
3301
- /** Which session's logs, in which workspace. */
3616
+ /**
3617
+ * Which session's logs, under which state root. A child's says which root it
3618
+ * sits under: a session id alone finds a root's (ADR-0055 D11).
3619
+ */
3302
3620
  interface TaskLogLocation {
3303
3621
  baseDir: string;
3304
3622
  sessionId: string;
3623
+ rootSessionId?: string;
3305
3624
  }
3306
3625
  /** One attempt's file, open for appending. */
3307
3626
  interface TaskLogFile {
@@ -3391,6 +3710,52 @@ interface TaskEditOptions {
3391
3710
  requireUnstarted?: boolean;
3392
3711
  }
3393
3712
 
3713
+ /** Runs the command with `env` added to its environment; rejects when it fails. */
3714
+ type NotifyRun = (command: readonly string[], env: Record<string, string>) => Promise<void>;
3715
+ interface EscalationNotifierDeps {
3716
+ /** The user's command, read as each new escalation appears; empty when there is none. */
3717
+ command: () => readonly string[];
3718
+ run: NotifyRun;
3719
+ log: (message: string) => void;
3720
+ }
3721
+ /**
3722
+ * Tells the user's notify command of each new escalation, once (ADR-0053). It
3723
+ * sees the list as it goes out, so nothing here is a second reading of the run,
3724
+ * and it remembers only ids, in memory: what a run waits on stays derived.
3725
+ * Nothing it does reaches the run: the command is started and left, and a
3726
+ * failure ends here. A few run at a time and the rest wait in a bounded queue,
3727
+ * so an id dropped from a full queue still counts as told: it stays on the list.
3728
+ */
3729
+ declare class EscalationNotifier {
3730
+ private readonly deps;
3731
+ /** The ids told of in this plan; null while a plan changes hands. */
3732
+ private told;
3733
+ private failureLogged;
3734
+ private dropLogged;
3735
+ private running;
3736
+ private readonly queue;
3737
+ constructor(deps: EscalationNotifierDeps);
3738
+ /** The list as a status update carries it. */
3739
+ changed(list: readonly Escalation[]): void;
3740
+ /**
3741
+ * A plan is on its way out, and nothing it says now is news: a run stopped
3742
+ * by leaving its session raises waits nobody is there for. Lasts until the
3743
+ * next {@link baseline}, so a plan on its way in says nothing either.
3744
+ */
3745
+ hush(): void;
3746
+ /** What waits as a plan is adopted counts as told, so a restart does not send what was sent before it. */
3747
+ baseline(list: readonly Escalation[]): void;
3748
+ private tell;
3749
+ private send;
3750
+ private failed;
3751
+ private dropped;
3752
+ }
3753
+ /**
3754
+ * A command as the user wrote it: a whole argument vector, or none. A string is
3755
+ * refused, not split, because splitting one is a shell's job and there is none.
3756
+ */
3757
+ declare function notifyCommandOf(value: unknown): string[];
3758
+
3394
3759
  /**
3395
3760
  * Options for plan generation. Progress is not overridable: every planner
3396
3761
  * progress event is translated to a SessionMessage inside the Session and
@@ -3410,6 +3775,10 @@ interface SessionRuntimeSettings {
3410
3775
  run?: GlobalRunSettings;
3411
3776
  /** Whether an API planner compacts its own context before a call that would not fit; absent means on. */
3412
3777
  plannerAutoCompaction?: boolean;
3778
+ /** What a task runner loads of the user's own setup; absent means all of it. */
3779
+ taskRunnerConfig?: TaskRunnerConfig;
3780
+ /** The `containers` setting, as written; absent means local worktrees (ADR-0059 L4). */
3781
+ containers?: unknown;
3413
3782
  }
3414
3783
  declare function sessionRuntimeSettings(settings: UserSettings): SessionRuntimeSettings;
3415
3784
  /** Where a fork landed: the new session's id, and what adopting it needs. */
@@ -3422,8 +3791,29 @@ interface ConversationFork {
3422
3791
  interface ConversationRewind extends ConversationFork {
3423
3792
  rewoundMessage: string;
3424
3793
  }
3425
- /** Writes one plan to the saved-session store: {@link saveSession}'s shape, injected so tests never touch disk. */
3794
+ /** Writes one plan to the saved-session store: {@link saveSession}'s shape, injected so tests never touch disk. `workspace` is the state root. */
3426
3795
  type SaveSession = (plan: LegacyPlanState, goal: string, workspace: string, sessionId: string) => void;
3796
+ /**
3797
+ * Where a child session sits in its tree, handed out by the parent's
3798
+ * {@link Session.hostChild}. Its code root is its `workspaceRoot`, a delegated
3799
+ * task's worktree, which goes with that task; what must outlive that goes here.
3800
+ */
3801
+ interface ChildPlacement {
3802
+ /** The id it saves under, which the parent's run record names. */
3803
+ sessionId: string;
3804
+ /** The root Session's workspace, at every depth (ADR-0055 D11). */
3805
+ stateRoot: string;
3806
+ /** The root Session's id: a child's state sits under that session's. */
3807
+ rootSessionId: string;
3808
+ /** Who holds the tree, as the root's lease says (D13). */
3809
+ held: () => SessionHeld | null;
3810
+ /** Its parent's, so one repository's worktree bookkeeping takes one lock across the tree (D11). */
3811
+ isolation: IWorktreeIsolation;
3812
+ /** The root's, so the tree shares one Parallel limit (D18). */
3813
+ pool: SlotPool;
3814
+ /** Its side of the tree's ledger, once a carve gave it one (ADR-0056 M5). */
3815
+ budget?: NodeBudget;
3816
+ }
3427
3817
  /**
3428
3818
  * Everything a delivery surface constructs to host a session. Structural config
3429
3819
  * (orchestratorModel, providerModelLists) is snapshotted inside `config` at
@@ -3503,6 +3893,33 @@ interface SessionDeps {
3503
3893
  cache?: WebResponseCache;
3504
3894
  searchProvider?: ISearchProvider;
3505
3895
  };
3896
+ /** What runs the user's notify command (ADR-0053); the real process unless a test supplies one. */
3897
+ runNotifyCommand?: NotifyRun;
3898
+ /** Where its sessions run (ADR-0059), given the local worktrees: those, unless a test supplies another. */
3899
+ execution?: TaskOrchestratorOptions['execution'];
3900
+ /** The node this session is, below the root (ADR-0056); absent, it is the root, whose mandate its settings hold. */
3901
+ child?: NodeAuthority;
3902
+ /** Where this session sits below the root (ADR-0055 D11, D13); absent, its workspace is both its code root and its state root. */
3903
+ placement?: ChildPlacement;
3904
+ /** Where a root's tree keeps its log (ADR-0058 S3): a file in that root's directory, unless a test supplies another. */
3905
+ eventLog?: (rootSessionId: string, stateRoot: string) => EventStore;
3906
+ /** How this session answers to its parent's attempt, as a subplanner (ADR-0055 D5); absent at the root. */
3907
+ subplanner?: SubplannerLink;
3908
+ /** What this child was given to do, for its prompt. */
3909
+ brief?: SubplannerBrief;
3910
+ /** Whether a planner may write a delegated task here; the build's own switch (ADR-0055 D21) unless a test sets it. */
3911
+ delegationOffered?: boolean;
3912
+ /** What a test puts in a child's deps, in place of what a real child is built with. */
3913
+ childDeps?: (task: Task) => Partial<SessionDeps>;
3914
+ }
3915
+ /** A session built under a parent's attempt: what {@link Session.openChild} seats and carves, and what the parent hands it. */
3916
+ interface ChildSpec {
3917
+ task: Task;
3918
+ cwd: string;
3919
+ placement: ChildPlacement;
3920
+ authority: NodeAuthority;
3921
+ brief: SubplannerBrief;
3922
+ link: SubplannerLink;
3506
3923
  }
3507
3924
  /**
3508
3925
  * The composition root: builds every collaborator a Session drives and wires
@@ -3529,6 +3946,8 @@ interface SessionParts {
3529
3946
  /** The orchestrator's own: Session reads the run and acts on it there, Merge all aside. */
3530
3947
  runs: IsolationRunController;
3531
3948
  events: SessionEventRelay;
3949
+ /** Told by the Session when a plan changes hands; what it sees comes from the relay. */
3950
+ escalationNotifier: Pick<EscalationNotifier, 'hush' | 'baseline'>;
3532
3951
  usage: PlannerUsageLedger;
3533
3952
  /** The windows every stream of the session reports, saved with the plan. */
3534
3953
  windows: SessionWindows;
@@ -3543,6 +3962,17 @@ interface SessionParts {
3543
3962
  lease: (onLost: (held: SessionHeld) => void) => SessionLease;
3544
3963
  /** The conversation's host is the Session itself, so only the Session can make it. */
3545
3964
  conversation: (host: PlannerConversationHost) => PlannerConversation;
3965
+ /** The node this session is, below the root. */
3966
+ child?: NodeAuthority;
3967
+ /** Where it sits below the root. */
3968
+ placement?: ChildPlacement;
3969
+ eventLog: (rootSessionId: string, stateRoot: string) => EventStore;
3970
+ subplanner?: SubplannerLink;
3971
+ brief?: SubplannerBrief;
3972
+ runnerConfig: () => TaskRunnerConfig | undefined;
3973
+ delegationOffered: boolean;
3974
+ childPlans: Pick<ChildPlanRunner, 'stopEvery' | 'activeCount' | 'progressOf'>;
3975
+ childSession: (spec: ChildSpec) => Session;
3546
3976
  }
3547
3977
  /**
3548
3978
  * The per-session execution stack — the lifecycle owner. Owns plan
@@ -3562,6 +3992,7 @@ declare class Session {
3562
3992
  private readonly usage;
3563
3993
  private readonly windows;
3564
3994
  private readonly events;
3995
+ private readonly escalationNotifier;
3565
3996
  private readonly planner;
3566
3997
  private readonly orchestrator;
3567
3998
  private readonly runs;
@@ -3570,6 +4001,7 @@ declare class Session {
3570
4001
  private readonly catalog;
3571
4002
  private plan;
3572
4003
  private goal;
4004
+ /** The code root: what its planner and runners read and git works in. See {@link stateRoot} for Ordewell's own files. */
3573
4005
  private workspace;
3574
4006
  private readonly broadcast;
3575
4007
  /**
@@ -3608,23 +4040,62 @@ declare class Session {
3608
4040
  private saveRefusedFor;
3609
4041
  /** User controls in flight; see {@link withSave}. */
3610
4042
  private controlsInFlight;
4043
+ /** A save is owed, for the end of {@link SAVE_INTERVAL_MS}; see {@link saveSoon}. */
4044
+ private saveTimer;
4045
+ /** The store's status mark as last saved, or as loaded. */
4046
+ private savedStatuses;
4047
+ /** The user was told the disk is refusing this session's saves, and none has landed since. */
4048
+ private saveFailureSaid;
3611
4049
  /** A whole-plan start opening; a second Execute joins it rather than resetting the run under it. */
3612
4050
  private runOpening;
3613
4051
  private unsubObserver;
4052
+ /** This session's node below the root; undefined at the root, where a person remains. */
4053
+ private readonly child;
4054
+ private readonly placement;
4055
+ private readonly authority;
4056
+ /** Opens the root's log; only a first carve, or a reopen of a tree, asks. */
4057
+ private readonly eventLog;
4058
+ /** How this session answers to its parent's attempt; undefined at the root (ADR-0055 D5). */
4059
+ private readonly subplanner;
4060
+ private readonly brief;
4061
+ private readonly runnerConfig;
4062
+ private readonly delegationOffered;
4063
+ private readonly childPlans;
4064
+ private readonly childSession;
4065
+ /** This node's side of the tree's ledger; undefined at the root, which is charged nothing (ADR-0056 M5). */
4066
+ private readonly budget;
4067
+ /** The tree's ledger, once something asked: a flat run never does, so it has none and writes no log (ADR-0058 S3). */
4068
+ private tree;
4069
+ /** The lines this plan's landings owe its running tasks (ADR-0057 R6). */
4070
+ private readonly scopeLines;
4071
+ /** The subplanner was told a start was refused; a raise makes it news again (ADR-0056 M5). */
4072
+ private toldStartRefused;
4073
+ /** The opening behind {@link tree}, and the session it opened for. */
4074
+ private treeOpening;
4075
+ /** The ledger let go, which the next opening reads after. */
4076
+ private treeClosing;
3614
4077
  private readonly hostSessionId?;
3615
4078
  private currentSessionId;
3616
4079
  private readonly skillsService;
3617
4080
  private readonly conversation;
3618
4081
  private readonly turns;
4082
+ /** The planner turn's execution lease, while one runs. */
4083
+ private turnLease;
4084
+ /** An opening waiting for a slot: it takes one when the pool has it. True when there was one to tell. */
4085
+ private roomWaiter;
3619
4086
  /** Destroyed: a turn that waited for the planner to be found must not open on it. */
3620
4087
  private closed;
3621
4088
  /** Destroyed and let go of its lease for good: whatever settles later neither saves nor holds the session. */
3622
4089
  private leaseReleased;
4090
+ /** Settles once a destroyed Session's lease has gone. */
4091
+ private departed;
3623
4092
  /**
3624
4093
  * Turns PlanTurns does not open, waiting at the planner gate, each ended
3625
4094
  * with why it must not open: a Stop, a newer goal, or its plan scope ending.
3626
4095
  */
3627
4096
  private readonly openingsWaiting;
4097
+ /** The installed-planner probe a turn was parked on and the surfaces were told of; null once it answered. */
4098
+ private detection;
3628
4099
  /** The conversation's opening, from admission until its turn settles; see {@link behindOpening}. */
3629
4100
  private opening;
3630
4101
  private readonly editor;
@@ -3643,13 +4114,38 @@ declare class Session {
3643
4114
  * tools come here; see {@link ExecutionCommands}.
3644
4115
  */
3645
4116
  execute(command: ExecutionCommand, actor: ExecutionActor): Promise<CommandOutcome>;
4117
+ /** What will not move without a person, derived afresh from the plan, the run and the pending approvals (ADR-0053). */
4118
+ escalations(): Escalation[];
4119
+ private judgedEscalations;
4120
+ /** What holds a merge nobody asked for here, as a list or a refusal names it (ADR-0055 D9). */
4121
+ private mergeHold;
4122
+ /** The user's answer to an escalation; see {@link ExecutionCommands.answerEscalation}. `raiseTokens` goes with an Approve of a delegated task (ADR-0056 M5). */
4123
+ answerEscalation(id: string, option: string, note?: string, confirmed?: boolean, raiseTokens?: number): Promise<CommandOutcome>;
3646
4124
  /** Run one planner turn with its own {@link TurnEffects}, which only a turn that lands hands back. */
3647
4125
  private openTurn;
4126
+ /** Each failed task, with the attempt that failed. */
4127
+ private failedTasks;
4128
+ /**
4129
+ * What a run this actor begins leaves failed. The fresh chance is the user's
4130
+ * to ask for (ADR-0053), and a supervisor's `run_plan` is a retry its guards
4131
+ * count (ADR-0029), so only autorun and a planner leave any; autorun only what
4132
+ * failed in the reply it follows (ADR-0030).
4133
+ */
4134
+ private failuresLeftBy;
3648
4135
  /**
3649
4136
  * Autorun (ADR-0030): a plan the planner submitted in the turn that just
3650
4137
  * ended starts as if the user had pressed Execute, through the seam, so the
3651
4138
  * timeline says autorun started it. Read now, not when the turn opened: the
3652
- * switch is the user's to flip at any time.
4139
+ * switch is the user's to flip at any time. Work already live, a task the
4140
+ * planner started with `run_task` in that turn, joins it as one scheduled
4141
+ * run, in Full; the seam keeps it out of live work in Guarded. A scheduled
4142
+ * run has the plan's tasks, waiting on a person or a reset or not, so autorun
4143
+ * skips it, and starts nothing over what a usage limit holds: a restart
4144
+ * would take back that run's pause and failures (ADR-0053).
4145
+ * A plan it could not start says why, and a Stop since the plan was submitted
4146
+ * withdraws the start as it withdraws any (ADR-0029), unless a run opened
4147
+ * after that Stop has the plan already. What failed in that turn stays
4148
+ * failed: the fresh chance is the user's to ask for (ADR-0053).
3653
4149
  */
3654
4150
  private autorunSubmitted;
3655
4151
  /**
@@ -3685,6 +4181,7 @@ declare class Session {
3685
4181
  * oscillation guard.
3686
4182
  */
3687
4183
  private changeScope;
4184
+ private get delegates();
3688
4185
  /** A line from Ordewell itself, kept in the transcript where it happened. */
3689
4186
  private systemNote;
3690
4187
  /** A message to the user in the supervisor's voice, kept in the transcript where it happened. */
@@ -3701,7 +4198,20 @@ declare class Session {
3701
4198
  runSettings(): GlobalRunSettings;
3702
4199
  /** The user's run settings as they stand for this session (ADR-0030). */
3703
4200
  private userRunSettings;
3704
- /** A call at the seam, in the transcript where it happened and on every surface at once. */
4201
+ /** What this node may do without a person, as it stands now (ADR-0056 M1): derived at the root, and never saved. */
4202
+ mandate(): Mandate;
4203
+ /** Why this child's script may not land what it does unsealed, as the rules stand now: an effect withdrawn since it landed goes with them (ADR-0056 M9). */
4204
+ unsealedRefusal(task: Readonly<Task>): string | null;
4205
+ /** Each value where it lives today; the level is the caller's to name (ADR-0056 M1). */
4206
+ private rootSettings;
4207
+ private effectRules;
4208
+ /** Whether this node's tasks default to their runner's autonomous mode. */
4209
+ private autonomous;
4210
+ /**
4211
+ * A call at the seam, in the transcript where it happened and on every
4212
+ * surface at once. The call has happened by now, so a failed save is said
4213
+ * rather than thrown: a Stop that took must not answer as refused.
4214
+ */
3705
4215
  private recordExecution;
3706
4216
  /** Whether the user approved this task to run; see {@link ApprovalRecord.isApproved}. */
3707
4217
  isApproved(taskId: string): boolean;
@@ -3726,6 +4236,10 @@ declare class Session {
3726
4236
  plannerCompaction(): Extract<SessionMessage, {
3727
4237
  type: 'planner_compaction';
3728
4238
  }> | undefined;
4239
+ /** Whether a planner turn waits on the installed-planner probe, for a surface that joins or reconnects meanwhile. */
4240
+ plannerDetection(): Extract<SessionMessage, {
4241
+ type: 'planner_detection';
4242
+ }>;
3729
4243
  /** Scopes the user granted this session — surfaced so a UI can show what is already allowed. */
3730
4244
  approvedScopes(): string[];
3731
4245
  /** The stable id this session persists under — matches the host's id when one was provided. */
@@ -3735,10 +4249,160 @@ declare class Session {
3735
4249
  * can re-probe it before a turn without keeping a second copy.
3736
4250
  */
3737
4251
  get workspaceRoot(): string;
4252
+ /**
4253
+ * Where this session's own files live: its workspace, unless it is a child,
4254
+ * whose code root goes with a worktree (ADR-0055 D11). Git and the planner
4255
+ * read {@link workspaceRoot}; a save, a log and the lease read this.
4256
+ */
4257
+ private get stateRoot();
3738
4258
  /** The planner this session's own gate reads — not whatever the host's config says now. */
3739
4259
  get plannerProvider(): PlannerBackendId;
3740
4260
  /** Where this session's structured task logs are saved (ADR-0018, P1). */
3741
4261
  get taskLogLocation(): TaskLogLocation;
4262
+ /**
4263
+ * Seat a child session in a task's worktree: what `createSession` builds it
4264
+ * with, its code root being that worktree. The task's record names it, so a
4265
+ * reopen does not prune the worktree from under it (ADR-0055 D17), and asking
4266
+ * again finds the same child. Every depth shares the root's state root,
4267
+ * lease and isolation (D11, D13). Throws for a task with no worktree (D12).
4268
+ */
4269
+ hostChild(taskId: string): ChildPlacement;
4270
+ /** The root Session's id, under which a tree's state sits (ADR-0055 D11). */
4271
+ get rootSessionId(): string;
4272
+ /**
4273
+ * Take the planner turn's lease (ADR-0059 L1), kept from its admission to
4274
+ * its end, however many times it takes the conversation. False when the pool
4275
+ * has no slot for a subplanner's turn: it keeps this Session, and calls
4276
+ * {@link turnRoomFreed}.
4277
+ */
4278
+ private turnRoom;
4279
+ private turnRefusal;
4280
+ /** The pool has a slot for the turn it refused: the opening waiting for one, or else the next of the queue. */
4281
+ turnRoomFreed(): void;
4282
+ /** Where a planner's process starts, opened around its adapter (ADR-0059 L1). No lease: nothing has a turn to start it for. */
4283
+ openTurnLease(signal: AbortSignal): Promise<OpenLease> | undefined;
4284
+ /**
4285
+ * The turn is over. A subplanner between turns holds no process: it is a
4286
+ * parked row, its adapter gone and its session id kept, so the next turn
4287
+ * resumes it (ADR-0055 D18). A turn's own corrective retries come before
4288
+ * this, in the one process, and its slot goes only once that process has.
4289
+ */
4290
+ private endTurnLease;
4291
+ /**
4292
+ * A goal or a compaction refused after {@link plannerTurnMayOpen} let it in:
4293
+ * no turn opened, so nothing else would end it, and the slot it took would
4294
+ * stay out of the tree's pool (ADR-0055 D18). A turn holding the lease by
4295
+ * then is its own to end.
4296
+ */
4297
+ private dropUnopenedTurn;
4298
+ /**
4299
+ * The tree's ledger, opened from the log if nothing has yet. A Continue asks
4300
+ * before {@link hostChild}, whose placement names a child's node only once
4301
+ * this has answered. A flat run has no reason to ask.
4302
+ */
4303
+ ledger(): Promise<TreeLedger>;
4304
+ /** The root's ledger is let go with its session; a child's stays its root's. */
4305
+ private closeTree;
4306
+ /**
4307
+ * The tree as it stands, with the root's limit where the user keeps it. Read
4308
+ * as a carve or a raise is asked for, so a raised setting reaches them.
4309
+ */
4310
+ private currentTree;
4311
+ /**
4312
+ * A child's mandate and budget, carved from what this node has left
4313
+ * (ADR-0056 M4, M5). At the root, what can never pass is refused before a
4314
+ * log is opened: the first carve is what makes a run a tree. A child's limit
4315
+ * is the ledger's, which a raise has moved past its saved mandate. The task's
4316
+ * record names the child only once the carve took, so a refused one leaves
4317
+ * no name of a child that never existed.
4318
+ */
4319
+ carveChild(taskId: string, request: Omit<MandateRequest, 'level'>, reopening?: string): Promise<Carved>;
4320
+ /** This node's place in the tree's ledger. */
4321
+ private get nodePath();
4322
+ /** A raise for the child in `taskId`, applied from what this node has left (M5). Null when it took; otherwise why not. */
4323
+ raiseChild(taskId: string, tokens: number): Promise<string | null>;
4324
+ /** A delegated task's row (ADR-0055 D20), read afresh each time a status goes out: nothing of it is kept. */
4325
+ delegatedRow(taskId: string): DelegatedRow | undefined;
4326
+ /** The child in `taskId` confirmed closed: what it did not spend comes back here (M5). */
4327
+ closeChild(taskId: string): Promise<void>;
4328
+ /**
4329
+ * A child plan's start (ADR-0055 D3): its mandate and budget carved from what
4330
+ * its delegated task has left, then a Session built in `cwd`, the task's
4331
+ * worktree, that holds both. A Continue (D17) is the same carve for the child
4332
+ * it names, whose plan loads: nothing of that child's file is read before
4333
+ * this. Its node closed as it ended, or a crash left it open and this closes
4334
+ * it: either way it stays charged what it spent, so no attempt mints budget
4335
+ * (ADR-0056 M10). Rejects with the level that refused.
4336
+ */
4337
+ openChild(task: Task, cwd: string, link: SubplannerLink, reopening?: string): Promise<ChildNode>;
4338
+ /** What is left of what the tree granted a delegated task, its budget and every raise, across every child it has had (ADR-0055 D15, ADR-0056 M5, M10). Throws once nothing is. */
4339
+ private budgetLeft;
4340
+ /** The child `sessionId` is gone: what it did not spend comes back here (ADR-0056 M5). */
4341
+ closeNode(sessionId: string): Promise<void>;
4342
+ /** A delegated task's next attempt is fresh: the child its last one left goes, whatever became of it (ADR-0055 D15). Its state stays under the root; what git could not let go throws, naming it, and the task still names the child. */
4343
+ discardChild({ id, runnerSessionId }: Readonly<Task>): Promise<void>;
4344
+ /** The run's own discard reaches no child: each is named only by what this run forgets (ADR-0055 D11). */
4345
+ private discardChildren;
4346
+ /** This session as its parent's attempt drives it, `pins` what it is told as it starts (ADR-0057 R10). */
4347
+ private asNode;
4348
+ /**
4349
+ * Reopened (ADR-0055 D17): as Execute, so what failed is retried, and then its
4350
+ * subplanner goes on. One whose plan never reached the disk plans its goal, and
4351
+ * one with nothing left to run goes straight to its turn: it may owe only its report.
4352
+ */
4353
+ private goOn;
4354
+ private get taskLogReader();
4355
+ /** The plans below this one on `tree`, each read when asked for (ADR-0055 D17, ADR-0057 R1). */
4356
+ private subtreeOn;
4357
+ /** Whether this node has a board (ADR-0057 R8): a child always, and a root from its first delegated task. A flat plan never does, and never opens a ledger for one. */
4358
+ private get holdsBoard();
4359
+ /** This node's board, read through what its tree's log holds; null where it has none. */
4360
+ board(): Promise<NodeBoard | null>;
4361
+ /** A planner's `post`, in its own workspace. */
4362
+ postOnBoard(args: PostArgs): Promise<McpToolReply>;
4363
+ /**
4364
+ * What a landing owes the plan it landed in (ADR-0057 R6): a delegated task's
4365
+ * contracts rise to this board, then each running task that declared what it
4366
+ * touched gets its line. Undefined with no board, so a flat landing waits on
4367
+ * nothing. A failure here costs a line, and never the landing.
4368
+ */
4369
+ taskLanded(task: Readonly<Task>): Promise<void> | undefined;
4370
+ private raiseAndAddress;
4371
+ /** What is below this plan; null with nothing delegated, so a flat run opens no ledger. */
4372
+ subtree(): Promise<Subtree | null>;
4373
+ /** A subplanner's report, read against its own plan and what is below it; a child's ledger is its root's, so nothing here waits. */
4374
+ private takeReport;
4375
+ /** A planner's `read`: its whole plan, and what is below it (ADR-0057 R11). */
4376
+ readBelow(args: ReadTaskArgs): Promise<McpToolReply>;
4377
+ /** What its parent reads of it, afresh (ADR-0055 D6). */
4378
+ private nodeState;
4379
+ /** Why this node stops now: a child has nobody else to wait for (ADR-0056 M5, M8). */
4380
+ private stoppedFor;
4381
+ /** Why nothing may start here, what is in flight finishing first (ADR-0056 M10). */
4382
+ private withdrawn;
4383
+ /** A Stop stands at this node or above it, or its budget has stopped it (ADR-0055 D16, ADR-0056 M5). */
4384
+ get underStop(): boolean;
4385
+ /** Why no claim and no planner turn may start at this node, read at every start as its own Stop generation is (ADR-0055 D16). */
4386
+ nodeRefusal(): string | null;
4387
+ /**
4388
+ * Everything under this node stops, leaves first, its planner turn and any
4389
+ * turn waiting included, and this resolves once it has all gone: with no
4390
+ * timeout of its own, since a runner's grace is the runner's (ADR-0055 D16).
4391
+ */
4392
+ stopSubtree(): Promise<void>;
4393
+ /**
4394
+ * What is ready cannot start and nothing live will free room for it, so
4395
+ * nothing ticks this again (ADR-0056 M5). A subplanner is woken, once, so it
4396
+ * can ask; {@link ChildPlanSession} ends it if nothing comes of that. A node
4397
+ * with no planner to wake stops.
4398
+ */
4399
+ startRefused(why: string): void;
4400
+ /** A raise only moves numbers: what its room lets start is this run's to start (ADR-0056 M5). */
4401
+ private budgetRaised;
4402
+ /** What a delegated task's branch changed since its base. */
4403
+ changedPaths(taskId: string): Promise<string[]>;
4404
+ /** Why this node stopped for its budget, or null: a parent's reason for ending it `blocked`. */
4405
+ get outOfBudget(): string | null;
3742
4406
  /** The attempts of a task that have a saved log, oldest first. */
3743
4407
  taskLogAttempts(taskId: string): number[];
3744
4408
  /**
@@ -3772,6 +4436,23 @@ declare class Session {
3772
4436
  * write: a turn holds what it writes until the mutation that lands it.
3773
4437
  */
3774
4438
  private persist;
4439
+ /**
4440
+ * What a change to the plan owes the disk. A task's status is what a
4441
+ * decision and a reload read, so a changed one is saved at once, and what
4442
+ * changed beside it goes with it; anything else can wait for the timer.
4443
+ */
4444
+ private saveChange;
4445
+ /** Owe a save, made once however often this is called before it comes. */
4446
+ private saveSoon;
4447
+ /**
4448
+ * A save nothing that follows may depend on: a full disk must not take the
4449
+ * daemon down, nor leave a stop or a close half done, its run live and its
4450
+ * lease held. Said once a failing stretch, since the timer tries again for
4451
+ * as long as the disk refuses.
4452
+ */
4453
+ private tryPersist;
4454
+ /** Make the save owed, before the plan it is owed for goes. */
4455
+ private settleSaves;
3775
4456
  /** A new plan on a long-lived Session gets its own persisted identity (unless the host fixed one). */
3776
4457
  private remintSessionId;
3777
4458
  /**
@@ -3780,6 +4461,8 @@ declare class Session {
3780
4461
  * no live host holds it, as a new session's first save does.
3781
4462
  */
3782
4463
  heldElsewhere(): SessionHeld | null;
4464
+ /** Work on the session this Session has open is refused while another host holds it (ADR-0049 L5). */
4465
+ private refuseHeld;
3783
4466
  /**
3784
4467
  * A new plan under the host's fixed id writes that session's file: refused
3785
4468
  * before any planner turn while another host has it open (ADR-0049). A
@@ -3790,9 +4473,14 @@ declare class Session {
3790
4473
  /**
3791
4474
  * Another host took the session over, judging this one gone (ADR-0049). Its
3792
4475
  * runners must not work on beside that host's, in the worktrees that host
3793
- * now prepares, so the run here stops.
4476
+ * now prepares, so the run here stops. The planner turn is abandoned, not
4477
+ * only stopped: a backend can still answer past a stop, and that reply would
4478
+ * write a PRD into the checkout that host now holds. What waits behind it
4479
+ * stays, for the gate to refuse with the hold's own reason (L5).
3794
4480
  */
3795
4481
  private leaseLost;
4482
+ /** Something of the run would go on if left: work, a resume, a start on its way, or a loop a retry would carry on (ADR-0045 L5). */
4483
+ private get stopOwed();
3796
4484
  /**
3797
4485
  * The plan scope ends: everything that belongs to the plan this Session
3798
4486
  * holds goes, so nothing of it reaches the next one — a new plan, another
@@ -3813,6 +4501,13 @@ declare class Session {
3813
4501
  * them as its draft.
3814
4502
  */
3815
4503
  private beginFreshPlan;
4504
+ /**
4505
+ * The fresh plan of a goal its gate let in. The slot that gate took stays
4506
+ * through the old scope's end: given back, the pool offers it on at once, and
4507
+ * a sibling's kept turn leaves this one none (ADR-0055 D18). That end takes
4508
+ * the process of any turn this one replaces, as {@link endTurnLease} would.
4509
+ */
4510
+ private beginFreshPlanForTurn;
3816
4511
  /**
3817
4512
  * Return the Session to a blank slate — hosts call this on "new session".
3818
4513
  * Everything scoped to the old session goes: the live AI conversation, plan,
@@ -3826,9 +4521,9 @@ declare class Session {
3826
4521
  get planState(): LegacyPlanState | null;
3827
4522
  /**
3828
4523
  * The live plan in the shape a saved session is read back as. The disk
3829
- * boundary rewrites `in_progress` to `pending` — nothing is running when a
3830
- * session comes off a file — so a surface that re-reads the plan mid-run must
3831
- * come here instead, or every task it is watching reads as never started.
4524
+ * boundary fails an `in_progress` task — nothing is running when a session
4525
+ * comes off a file — so a surface that re-reads the plan mid-run must come
4526
+ * here instead, or every task it is watching reads as interrupted.
3832
4527
  * An archived snapshot carries the task as it is now: a retry or continue
3833
4528
  * keeps the archive while the live task runs on and spends more.
3834
4529
  */
@@ -3851,6 +4546,13 @@ declare class Session {
3851
4546
  * the session.
3852
4547
  */
3853
4548
  assertPlannerReady(): void;
4549
+ /**
4550
+ * What a turn on the session this Session has open passes. Not part of
4551
+ * {@link assertPlannerReady}, which a new goal passes too: under a minted id
4552
+ * that goal leaves a held session behind, and {@link claimHostSession} judges
4553
+ * a fixed one.
4554
+ */
4555
+ private assertTurnMayRun;
3854
4556
  /**
3855
4557
  * The planner gate for a turn {@link PlanTurns} does not open — an opening,
3856
4558
  * plan generation, a compaction — the same one its turns pass: wait for the
@@ -3864,6 +4566,15 @@ declare class Session {
3864
4566
  * no longer be refused as one sent during it.
3865
4567
  */
3866
4568
  private plannerTurnMayOpen;
4569
+ /** A subplanner's turn that {@link PlanTurns} does not open waits for a slot like one it does (ADR-0055 D18), ended as the gate's wait is. Null with one in hand. */
4570
+ private slotForTurn;
4571
+ private plannerGate;
4572
+ /**
4573
+ * The installed-planner probe, for a turn at the gate to wait on. No planner
4574
+ * has heard of that turn, so the surfaces are told what it waits for, once
4575
+ * however many wait.
4576
+ */
4577
+ private plannerDetected;
3867
4578
  /** End every turn waiting at the planner gate before it opens; false when none was. */
3868
4579
  private endWaiting;
3869
4580
  /**
@@ -3985,6 +4696,10 @@ declare class Session {
3985
4696
  /** The catalog over workspace `roots`; the workspace root alone is the session's own. */
3986
4697
  private skillsAt;
3987
4698
  private conversationOpening;
4699
+ /** A planner's tools, and for a subplanner the two its parent's attempt answers (ADR-0055 D5). */
4700
+ private offeredTools;
4701
+ /** What the prompt says of this node's limits, as it stands when the planner starts (ADR-0055 D19). */
4702
+ private delegationBrief;
3988
4703
  /**
3989
4704
  * Load planner-produced tasks, as the check they landed through resolved
3990
4705
  * them against the catalog read live: it may have changed since planning
@@ -4021,7 +4736,9 @@ declare class Session {
4021
4736
  * as executing does, and the run takes them in. A run the scheduler was not
4022
4737
  * driving, one task started on its own, becomes the plan's run, as Execute
4023
4738
  * would make it. The planner's run_plan joins with `approved` 0: the
4024
- * scheduler starts only approved tasks, so `left` tasks still wait.
4739
+ * scheduler starts only approved tasks, so `left` tasks still wait. A run a
4740
+ * usage limit holds stays held, and the line says so, since nothing it names
4741
+ * starts before the reset.
4025
4742
  */
4026
4743
  private joinRun;
4027
4744
  private startOneTask;
@@ -4105,6 +4822,8 @@ declare class Session {
4105
4822
  runSnapshot(): RunView;
4106
4823
  /** The ancestors a task waits on at its merge gate (ADR-0020); empty when it waits for no Merge all. */
4107
4824
  mergeGate(taskId: string): string[];
4825
+ /** What reverting the task would do now, for a surface to confirm before `revert_task` (ADR-0054). Reads only. */
4826
+ revertPreview(taskId: string): Promise<TaskRevertPreview>;
4108
4827
  /** What Merge all would merge now; null once everything landed is merged. */
4109
4828
  runMergeView(): RunMergeView | null;
4110
4829
  /** The run's integration branch against its base ref, as a unified diff. */
@@ -4134,6 +4853,11 @@ declare class Session {
4134
4853
  * otherwise (Mark not done), because only they know whether they kept the work.
4135
4854
  */
4136
4855
  discardRun(): Promise<void>;
4856
+ /**
4857
+ * Narrower than {@link stopOwed}: a run that ended on a failure, or whose
4858
+ * loop a body task stopped, is what these are for. Such a loop ends with the
4859
+ * run, once git has let it go, so a refused discard leaves it standing.
4860
+ */
4137
4861
  private requireSettledRun;
4138
4862
  /** Add the task that merges a conflicted task's branch by hand; see {@link PlanEditor.addConflictResolver}. */
4139
4863
  resolveConflictAsTask(taskId: string): Promise<LegacyPlanState | null>;
@@ -4142,8 +4866,11 @@ declare class Session {
4142
4866
  * one queued behind a planner turn's edit, one waiting on its card, one
4143
4867
  * still opening its run. A card still asking is cleared, so its start
4144
4868
  * answers as stopped rather than waiting on a question that no longer stands.
4869
+ * The user's stands the supervisor down too; a supervisor's own, for a change
4870
+ * it means to run, does not.
4145
4871
  */
4146
- stopExecution(): void;
4872
+ stopExecution(actor?: ExecutionActor): void;
4873
+ private stopRun;
4147
4874
  /** Something will start without being asked again; see {@link TaskOrchestrator.startsPending}. */
4148
4875
  get startsPending(): boolean;
4149
4876
  /**
@@ -4159,11 +4886,16 @@ declare class Session {
4159
4886
  * a hold would stall every task's status for as long, and an
4160
4887
  * `execution_complete` the control triggers would overtake the status held
4161
4888
  * back — which a surface treats as the end of the stream. Instead each status
4162
- * announced while one runs is saved first (see {@link observer}).
4889
+ * announced while one runs is saved first (see {@link observer}). The save
4890
+ * that ends it fails as {@link saved}'s does.
4163
4891
  */
4164
4892
  private withSave;
4165
- private saveForControl;
4166
- /** A control that finishes synchronously: its status is held until it is saved. */
4893
+ /**
4894
+ * A control that finishes synchronously: its status is held until it is
4895
+ * saved. Its effect has landed by then, so a failed save is said rather than
4896
+ * thrown: the caller would report a control that took as one that failed,
4897
+ * and a surface would keep showing what it answered.
4898
+ */
4167
4899
  private saved;
4168
4900
  /**
4169
4901
  * The one mutation seam: every structural plan mutation runs the same
@@ -4200,6 +4932,8 @@ declare class Session {
4200
4932
  sessionId?: string;
4201
4933
  persist?: boolean;
4202
4934
  }): void;
4935
+ /** The plan a load adopts goes to disk first; whoever asked hears that nothing here changed if it cannot. */
4936
+ private writeLoaded;
4203
4937
  /**
4204
4938
  * Take the loaded plan's run over, then correct what the surfaces were told
4205
4939
  * by what git found: the saved record cannot know what the user merged
@@ -4213,6 +4947,9 @@ declare class Session {
4213
4947
  */
4214
4948
  private adoptRun;
4215
4949
  destroy(): void;
4950
+ private letLeaseGo;
4951
+ /** Destroyed, with everything under it gone and its lease let go. */
4952
+ get gone(): Promise<void>;
4216
4953
  /**
4217
4954
  * The planner's settings or credentials changed: its backend is let go and
4218
4955
  * built afresh from them, once no planner turn is running on it (see
@@ -4221,6 +4958,46 @@ declare class Session {
4221
4958
  plannerSettingsChanged(): void;
4222
4959
  }
4223
4960
 
4961
+ /** How one `docker` command ended; `code` is -1 for a CLI that could not start. */
4962
+ interface DockerResult {
4963
+ code: number;
4964
+ stdout: string;
4965
+ stderr: string;
4966
+ /** Its stdout passed {@link DockerCall.stdoutTo}'s limit, and it was killed for it. */
4967
+ overflowed?: true;
4968
+ }
4969
+ interface DockerCall {
4970
+ input?: string | Buffer;
4971
+ /** Over this host's, for the CLI: what `-e NAME` hands over, so a secret never sits in an argument (ADR-0022 A5). */
4972
+ env?: Readonly<Record<string, string>>;
4973
+ timeoutMs?: number;
4974
+ /** Stdout to a file rather than to memory, for a bundle of any size up to `maxBytes`. */
4975
+ stdoutTo?: {
4976
+ file: string;
4977
+ maxBytes: number;
4978
+ };
4979
+ }
4980
+ /**
4981
+ * The Docker API through the docker CLI (ADR-0059 L5): one code path for any
4982
+ * engine that speaks it, which keeps whatever context the user chose.
4983
+ */
4984
+ interface DockerCli {
4985
+ call(args: readonly string[], opts?: DockerCall): Promise<DockerResult>;
4986
+ /** A command that runs for as long as a container does, with its stdio left open. */
4987
+ entry(args: readonly string[]): Promise<ChildProcess>;
4988
+ }
4989
+
4990
+ /**
4991
+ * A session delete's half of it, which has no Session or backend to ask. Without
4992
+ * the setting nothing has been put in an engine, and Docker is not asked: a user
4993
+ * of local worktrees may have none (ADR-0059 L4). Under a setting it cannot use
4994
+ * it clears what it can find by label, and the pins wait for one it can.
4995
+ */
4996
+ declare function reclaimContainers(tree: string, raw: unknown, { cli, tell }?: {
4997
+ cli?: DockerCli;
4998
+ tell?: (text: string) => void;
4999
+ }): Promise<void>;
5000
+
4224
5001
  /**
4225
5002
  * A request on the plan the session refused: a direct (non-planner) edit that
4226
5003
  * is not valid, or an isolation action on a plan with no isolated run to act
@@ -4350,7 +5127,7 @@ declare class VerdictEngine {
4350
5127
  private clearIdle;
4351
5128
  /** What a task's waiting checkpoint asks, untruncated; undefined when none waits. */
4352
5129
  getCheckpointQuestion(taskId: string): string | undefined;
4353
- approveCheckpoint(taskId: string): void;
5130
+ approveCheckpoint(taskId: string, note?: string): void;
4354
5131
  rejectCheckpoint(taskId: string, reason: string): void;
4355
5132
  /**
4356
5133
  * An attempt's runner is being started, with no session to watch yet. Its
@@ -4373,7 +5150,7 @@ declare class VerdictEngine {
4373
5150
  * attempt, unless that attempt is no longer the task's current one or an
4374
5151
  * earlier call already settled it.
4375
5152
  */
4376
- signalComplete(taskId: string, generation: number, report: TaskCompleteArgs): void;
5153
+ signalComplete(taskId: string, generation: number, report: TaskCompleteArgs, refuted?: VerificationCheck): void;
4377
5154
  /**
4378
5155
  * A script task's exit status (ADR-0035): its one evidence, as a runner's
4379
5156
  * `task_complete` call is a runner's. It settles the attempt unless that
@@ -4424,49 +5201,6 @@ declare class BufferedTaskOutputSource implements TaskOutputSource {
4424
5201
  private append;
4425
5202
  }
4426
5203
 
4427
- /** One source for the spawn options, so a runner built on this base cannot drift from the interface. */
4428
- type RunnerSpawnOptions = Parameters<IRunner['spawn']>[0];
4429
- declare abstract class AbstractRunnerSession implements IRunnerSession {
4430
- id: string;
4431
- taskId: string;
4432
- protected exited: boolean;
4433
- protected outputEmitter: EventEmitter<any>;
4434
- protected exitEmitter: EventEmitter<any>;
4435
- constructor(id: string, taskId: string);
4436
- protected baseHandleExit(code: number): void;
4437
- onOutput(callback: (text: string) => void): void;
4438
- onExit(callback: (code: number) => void): void;
4439
- abstract kill(): void;
4440
- abstract stop(): Promise<void>;
4441
- abstract getOutput(): string;
4442
- abstract write(text: string): void;
4443
- abstract turnState(): 'working' | 'idle';
4444
- abstract onTurnEnd(listener: (reason: StructuredTurnEnd) => void): void;
4445
- abstract onEvent(listener: (event: StructuredEvent) => void): void;
4446
- abstract sendMessage(text: string, from?: TaskMessageFrom): string;
4447
- abstract forceSend(text: string): string;
4448
- abstract forceSendQueued(id: string): boolean;
4449
- abstract removeQueued(id: string): boolean;
4450
- abstract queued(): QueuedTaskMessage[];
4451
- abstract interrupt(): Promise<void>;
4452
- abstract nativeSessionId(): string | null;
4453
- abstract commands(): RunnerCommand$1[];
4454
- abstract invokeCommand(name: string, args?: string): string;
4455
- abstract answerPermission(id: string, decision: ApprovalDecision): boolean | Promise<boolean>;
4456
- abstract onTaskComplete(listener: (report: TaskCompleteArgs) => void): void;
4457
- abstract onToolCheckpoint(handler: (question: string, signal: AbortSignal) => Promise<CheckpointAnswer>): void;
4458
- abstract onScriptExit(listener: (exit: ScriptExit) => void): void;
4459
- }
4460
- declare abstract class AbstractRunner<S extends IRunnerSession> implements IRunner {
4461
- protected sessions: Map<string, S>;
4462
- get activeCount(): number;
4463
- /** A session winding down stays registered until it exits, so a second stop gets the same wind-down. */
4464
- stop(sessionId: string): Promise<void>;
4465
- stopAll(): void;
4466
- protected registerSession(id: string, session: S): void;
4467
- abstract spawn(opts: RunnerSpawnOptions): Promise<IRunnerSession>;
4468
- }
4469
-
4470
5204
  interface StructuredRunnerDeps {
4471
5205
  /** The OS boundary the adapters spawn through. `workspaceEnv` is always the spawn's own `env`. */
4472
5206
  process?: Partial<Omit<AgentProcessDeps, 'workspaceEnv'>>;
@@ -4490,8 +5224,9 @@ interface SessionLaunch {
4490
5224
  savePatch?: (signal: AbortSignal) => Promise<McpToolReply>;
4491
5225
  webReads?: TaskWebReads;
4492
5226
  };
4493
- checkHandoff: (completion: TaskCompleteArgs) => HandoffCheck<TaskCompleteArgs>;
4494
- readTask?: (args: ReadTaskArgs) => McpToolReply;
5227
+ checkHandoff: (completion: TaskCompleteArgs) => HandoffCheck<TaskCompleteArgs> | Promise<HandoffCheck<TaskCompleteArgs>>;
5228
+ readTask?: (args: ReadTaskArgs) => McpToolReply | Promise<McpToolReply>;
5229
+ post?: (args: PostArgs) => McpToolReply | Promise<McpToolReply>;
4495
5230
  applyPatch?: (args: ApplyPatchArgs) => Promise<McpToolReply>;
4496
5231
  onNotice?: (message: string) => void;
4497
5232
  onAttaching?: (spawn: 1 | 2) => void;
@@ -4874,6 +5609,10 @@ interface ScriptSessionSetup {
4874
5609
  file: string;
4875
5610
  maxChars: number;
4876
5611
  };
5612
+ /** A read-only script runs here, or not at all (ADR-0055 D8). */
5613
+ sealed?: TaskShell;
5614
+ /** The lease's container, which every step runs in (ADR-0059 L5). */
5615
+ placement?: RunnerPlacement;
4877
5616
  }
4878
5617
  /**
4879
5618
  * One attempt of a script task (ADR-0035): its body run at the workspace root
@@ -4889,6 +5628,14 @@ interface ScriptSessionSetup {
4889
5628
  * the group (`setsid`, `setpgrp`) is out of reach of a group signal, and once
4890
5629
  * its parent exits nothing ties it to the step: holding it is the work of a
4891
5630
  * boundary around the task, a container or a lease (#97, #99), not of a signal.
5631
+ *
5632
+ * A read-only script's steps run sealed instead (ADR-0055 D8), in the shell a
5633
+ * read-only task's commands use and in its throwaway worktree: Stop and the time
5634
+ * limit reach them through its signal, and what they print comes as each ends.
5635
+ *
5636
+ * Under a container lease every step runs there, by the lease's placement, in
5637
+ * place of all of that: the group this host signals is a client, and the
5638
+ * container is the boundary, whatever leaves a process group inside it.
4892
5639
  */
4893
5640
  declare class ScriptSession extends AbstractRunnerSession {
4894
5641
  private readonly setup;
@@ -4897,6 +5644,8 @@ declare class ScriptSession extends AbstractRunnerSession {
4897
5644
  private readonly steps;
4898
5645
  private readonly children;
4899
5646
  private child;
5647
+ /** The step under way, where a lease runs it. */
5648
+ private placed;
4900
5649
  private output;
4901
5650
  private running;
4902
5651
  private stopped;
@@ -4906,6 +5655,8 @@ declare class ScriptSession extends AbstractRunnerSession {
4906
5655
  private logTail;
4907
5656
  private omitted;
4908
5657
  private full;
5658
+ /** Aborted to end a sealed step, which has no process of its own here to signal. */
5659
+ private readonly sealedEnd;
4909
5660
  private markGone;
4910
5661
  private readonly gone;
4911
5662
  constructor(id: string, taskId: string, setup: ScriptSessionSetup);
@@ -4913,6 +5664,18 @@ declare class ScriptSession extends AbstractRunnerSession {
4913
5664
  begin(): void;
4914
5665
  private run;
4915
5666
  private runStep;
5667
+ /**
5668
+ * A step through the sealed shell: from the worktree root it was cut at, the
5669
+ * only place a sealed run may start, and on into the task's folder. A refusal
5670
+ * ran nothing, so it says it could not start rather than that it failed.
5671
+ */
5672
+ private sealedStep;
5673
+ /**
5674
+ * What a lease launches for a step. Nothing of this host's goes with it: a
5675
+ * script is the container's own `sh`, whatever shell this host would have
5676
+ * picked, and only what the lease hands over crosses.
5677
+ */
5678
+ private placedLaunch;
4916
5679
  /**
4917
5680
  * An argument vector is never joined into a shell string: on POSIX it is
4918
5681
  * exec'd as written, and on Windows the launch seam finds the program the
@@ -4922,6 +5685,8 @@ declare class ScriptSession extends AbstractRunnerSession {
4922
5685
  private launchOf;
4923
5686
  private spawnStep;
4924
5687
  private expire;
5688
+ /** Ends the step under way, at each place it may be: a client killed here leaves what it started in a container running. */
5689
+ private endStep;
4925
5690
  private print;
4926
5691
  private printError;
4927
5692
  private openFullOutput;
@@ -4987,12 +5752,15 @@ type Continuability = {
4987
5752
  * The rule every surface offers Continue by and the orchestrator enforces: a
4988
5753
  * completed, failed or skipped task, or one paused on a usage limit, whose last
4989
5754
  * attempt left a session id behind. A conflict is resolved by its repair, not a
4990
- * new turn — Retry covers it.
5755
+ * new turn — Retry covers it. A delegated task whose question a restart lost
5756
+ * still has its child, so Continue is what keeps that work (ADR-0055 D17).
4991
5757
  */
4992
5758
  declare function continuability(task: Task): Continuability;
4993
5759
  declare function canContinue(task: Task): boolean;
4994
5760
 
4995
5761
  declare function stripAnsi(text: string): string;
5762
+ /** `text` as one word of a POSIX shell, whatever it holds. */
5763
+ declare function shellQuoted(text: string): string;
4996
5764
 
4997
5765
  /**
4998
5766
  * A workspace path that does not exist, or exists but is not a directory.
@@ -5222,33 +5990,6 @@ declare function loadState(baseDir?: string, logger?: ILogger): SavedState | nul
5222
5990
  declare function clearState(baseDir?: string): void;
5223
5991
  declare function stateExists(baseDir?: string): boolean;
5224
5992
 
5225
- /**
5226
- * A path segment for an id that came from outside — a session id from a URL,
5227
- * a task id a planner wrote. A plain id is used as is; anything that could
5228
- * climb out of its directory, or is not portable as a file name, is hex-encoded.
5229
- */
5230
- declare function idSegment(id: string): string;
5231
- /**
5232
- * The directory beside a session's file for what it keeps outside that file —
5233
- * its task logs (ADR-0018, P1). It goes when the session does.
5234
- */
5235
- declare function sessionDataDir(sessionId: string, baseDir?: string): string;
5236
- declare function saveSession(plan: LegacyPlanState, goal: string, baseDir?: string, id?: string): SessionMeta;
5237
- declare function listSessions(baseDir?: string, logger?: ILogger): SessionMeta[];
5238
- declare function loadSession(sessionId: string, baseDir?: string, logger?: ILogger): {
5239
- meta: SessionMeta;
5240
- plan: LegacyPlanState;
5241
- } | null;
5242
- declare function loadSessionPlanState(sessionId: string, baseDir?: string, logger?: ILogger): {
5243
- meta: SessionMeta;
5244
- plan: PlanState;
5245
- } | null;
5246
- declare function getLatestSession(baseDir?: string, logger?: ILogger): {
5247
- meta: SessionMeta;
5248
- plan: LegacyPlanState;
5249
- } | null;
5250
- declare function deleteSession(sessionId: string, baseDir?: string, logger?: ILogger): boolean;
5251
-
5252
5993
  declare function mintSessionId(): string;
5253
5994
 
5254
5995
  interface PrdBlock {
@@ -5313,4 +6054,4 @@ declare function parseVersion(version: string): number[] | null;
5313
6054
  /** Negative, zero or positive as `a` is older than, the same as, or newer than `b`; an unreadable version sorts oldest. */
5314
6055
  declare function compareVersions(a: string, b: string): number;
5315
6056
 
5316
- export { ALL_PROVIDERS, AbstractRunner, AbstractRunnerSession, AccountLimitBucket, type AccountLimitCollector, type AccountLimitListener, AccountLimitMonitor, type AccountLimitMonitorOptions, type AccountLimitReading, AccountLimitSnapshot, type Adr0013IsolationRun, type Adr0013PlanIsolation, type Adr0013TaskRecord, AgentAdapter, AgentEvent, AgentProcessDeps, AgentStartOptions, AiProvider, AlreadyExecutingError, ApprovalAnswer, ApprovalDecision, ApprovalModeSetting, ApprovalPolicy, AssignmentScope, BaseAiService, BaseConfig, BaseFileSystem, BashOptions, BatchQuoteError, BufferedTaskOutputSource, type ByPlannerBackend, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CODEX_SANDBOX_DOCS, CODEX_SANDBOX_OFF_LINE, type CachedPage, type CappedRows, CheckpointAnswer, type CheckpointListener, type ClaudeAccountLimitOptions, ClaudeCodeAdapter, type CodexAccountLimitOptions, CodexAdapter, CodexSandboxAvailability, CommandLineTooLongError, CommandOutcome, type ConfiguredPlanner, ConsoleLogger, ContextCollector, type Continuability, ConversationCompaction, type ConversationFork, ConversationRequest, type ConversationRewind, ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DEFAULT_MAX_PARALLEL, type DirEntry, DiscoveredModel, DuckDuckGoSearchProvider, type EffectRules, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ExecImpl, ExecutableNotFoundError, ExecutionActor, ExecutionCommand, FindSymbolOptions, GREP_PCRE_PROBE_ARGS, GeminiService, type GitExecFn, GlobOptions, GlobalRunSettings, type GrepInvocation, GrepOptions, type GrepRegex, HARNESS_PLANNER_REASON, HandoffCheck, type HasBinFn, HttpWebFetcher, type HttpWebFetcherOptions, IAiService, IApproval, IConfig, IFileSystem, IIsolationPreview, type ILogger, INotification, IRunner, IRunnerSession, type ISearchProvider, IWorktreeIsolation, IsolationTaskStatus, IsolationView, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LeaseHost, LegacyPlanState, LiveTail, LiveTailOptions, McpToolReply, ModelResolver, type ModelResolverDeps, type NativeShellLauncher, type NativeShellOffer, NoPlanError, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OpenAiService, OpenCodeAdapter, type OpenCodeGoAccountLimitOptions, OrchestratorObserver, OrchestratorOption, OrdewellMcpServer, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type ParsedCommand, PendingApproval, PendingApprovals, type PingFetch, PlanEditError, PlanIsolation, type PlanRequest, PlanState, PlanStore, Planner, PlannerAllowlist, type PlannerBackendEntry, PlannerBackendId, type PlannerChoice, PlannerModelCandidate, type PlannerModelLookup, PlannerModelRecall, type PlannerModelSource, PlannerModelStore, type PlannerSelectionChange, type PlannerSelectionCurrent, type PlannerSelectionResult, type PlannerSelectionState, PlannerShellSandbox, PlannerToolHandler, type PlannerUsability, PlannerUsage, type PrdBlock, ProviderModelLists, type ProviderRegistration, QueuedTaskMessage, ReadFileOpts, ReadTaskArgs, ReportedWindow, type ResearchChat, ResearchLogEntry, ResearchShell, type ResearchTurn, type ResolvedChoice, type ResolvedPlanner, RewindTarget, RunActivity, RunMergeView, RunView, RunnerApprovals, RunnerAuth, RunnerAuthExec, RunnerCommand$1 as RunnerCommand, RunnerId, RunnerInstallation, type RunnerInstallationOptions, RunnerManifest, RunnerModeInfo, RunnerRegistry, RunnerSessionCost, type RunnerSpawnOptions, SCRIPT_RUNNER, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STATE_DIR_IGNORE, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, type SaveSession, type SavedState, ScriptBody, ScriptExit, ScriptRunner, ScriptSession, type SearchHit, type SearchOutcome, type SearchPage, type SearchTransport, Session, SessionBroadcaster, type SessionDeps, SessionHeld, SessionLease, SessionMessage, SessionMeta, SessionNotFoundError, SessionNotice, type SessionPlanner, type SessionRuntimeSettings, ShellLaunch, SkillsService, type SpawnSpec, StdioAgentAdapter, StoredHandoff, StructuredEvent, StructuredRunner, type StructuredRunnerDeps, StructuredSession, StructuredTurnEnd, Task, TaskCompleteArgs, TaskControlError, type TaskEditOptions, TaskLogEvent, type TaskLogFile, type TaskLogLocation, TaskLogRecorder, type TaskLogRecorderDeps, TaskMessageFrom, TaskModeAgentAdapter, TaskOrchestrator, TaskOutputSource, TaskQueryCatalog, TaskRunnerFlags, TaskShell, TaskShellSite, TaskStartOptions, TaskTokenScope, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, UsageRecord, UserSettings, VERSION_CHECK_NOTICE, VERSION_CHECK_URL, VerdictEngine, type VerdictListener, type VersionCheck, type VersionCheckOptions, WINDOWS_MAX_COMMAND_LINE, WebRead, WebReadDecision, type WebResponse, WebResponseCache, type WebResponseCacheOptions, type WebTransport, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, type WorktreeIsolationDeps, admitSettingsEnv, applyHeadLimit, assertWorkspaceExists, assertWorkspaceIsProject, augmentedPath, bearerHeaderValue, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, canContinue, claudeAccountLimitCollector, clearAugmentedPathCache, clearDaemonToken, clearState, clipboardCopyCommand, codexAccountLimitCollector, codexSandboxNotice, compareVersions, configuredProviders, continuability, createIsolationPreview, createNativeShellLauncher, createSession, createTaskAdapter, createWorktreeIsolation, daemonTokenPath, defaultEnabledRunners, defaultLogger, definitionPattern, deleteSession, detectInstalledPlanner, discoverGeminiModels, effectRuleFor, ensureDir, ensurePrivateDir, ensureStateDirIgnored, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, findInstalledPlanner, formatSearchOutput, getLatestSession, getProviderMeta, getStateDir, globalDataDir, grantScopeFor, grepRegexFromProbe, idSegment, includeGlobFor, installedPlannerAnswered, installedPlannerDetected, isApiProvider, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlannerBackend, isVendorModelFor, isolationViewOfPlan, killTree, languageForId, listSessions, listTaskLogAttempts, listTree, loadSession, loadSessionPlanState, loadState, looksLikeChallenge, migrateOldConfigDir, migratePlanIsolation, mintDaemonToken, mintSessionId, nativeShellInvocation, nativeShellOffer, normalizeGeminiModel, openCodeGoAccountLimitCollector, openTaskLog, parseEffectAllowlist, parseExecutionCommand, parseMaxParallel, parseSearchHits, parseVersion, planDirectLaunch, plannerBackendEntries, prefixModelId, prepareTaskOutputFile, providerForRunner, readDaemonToken, readTaskLog, readTaskPatch, recordInstalledPlanner, recordedInstalledPlanner, referencePattern, removedPluginNotice, repositoryRunnerConfigPaths, resetInstalledPlanner, resolveProviderFromPrefix, resolveTaskRunnerFlags, resolveWithin, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, saveTaskPatch, selectPlanner, sessionDataDir, sessionRuntimeSettings, sharedSearchProvider, sharedWebResponseCache, startVersionCheck, stateExists, stripAnsi, stripModelPrefix, supportsTaskMode, taskPatchFile, tokenSubprotocols, tokensMatch, wellKnownBinDirs, windowsCommandLine, withPath, writeFileAtomic, writePrivateFile };
6057
+ export { ALL_PROVIDERS, AbstractRunner, AbstractRunnerSession, AccountLimitBucket, type AccountLimitCollector, type AccountLimitListener, AccountLimitMonitor, type AccountLimitMonitorOptions, type AccountLimitReading, AccountLimitSnapshot, type Adr0013IsolationRun, type Adr0013PlanIsolation, type Adr0013TaskRecord, AgentAdapter, AgentEvent, AgentProcessDeps, AgentStartOptions, AiProvider, AlreadyExecutingError, ApprovalAnswer, ApprovalDecision, ApprovalModeSetting, ApprovalPolicy, AssignmentScope, BaseAiService, BaseConfig, BaseFileSystem, BashOptions, BatchQuoteError, BufferedTaskOutputSource, type ByPlannerBackend, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CODEX_SANDBOX_DOCS, CODEX_SANDBOX_OFF_LINE, type CachedPage, type CappedRows, CheckpointAnswer, type CheckpointListener, type ChildPlacement, type ClaudeAccountLimitOptions, ClaudeCodeAdapter, type CodexAccountLimitOptions, CodexAdapter, CodexSandboxAvailability, CommandLineTooLongError, CommandOutcome, type ConfiguredPlanner, ContextCollector, type Continuability, ConversationCompaction, type ConversationFork, ConversationRequest, type ConversationRewind, ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DEFAULT_MAX_PARALLEL, type DirEntry, DiscoveredModel, DuckDuckGoSearchProvider, EmbeddedNewlineError, type EnvAdmission, EnvConfig, Escalation, type ExecImpl, ExecutableNotFoundError, ExecutionActor, ExecutionCommand, FindSymbolOptions, GREP_PCRE_PROBE_ARGS, GeminiService, type GitExecFn, GlobOptions, GlobalRunSettings, type GrepInvocation, GrepOptions, type GrepRegex, HARNESS_PLANNER_REASON, HandoffCheck, type HasBinFn, HttpWebFetcher, type HttpWebFetcherOptions, IAiService, IApproval, IConfig, IFileSystem, IIsolationPreview, ILogger, INotification, IRunner, IRunnerSession, type ISearchProvider, IWorktreeIsolation, IsolationRemoval, IsolationTaskStatus, IsolationView, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LeaseHost, LegacyPlanState, LiveTail, LiveTailOptions, Mandate, MandateRequest, McpToolReply, ModelResolver, type ModelResolverDeps, type NativeShellLauncher, type NativeShellOffer, NoPlanError, NodeAuthority, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OpenAiService, OpenCodeAdapter, type OpenCodeGoAccountLimitOptions, OrchestratorObserver, OrchestratorOption, OrdewellMcpServer, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type ParsedCommand, PendingApproval, PendingApprovals, type PingFetch, PlanEditError, PlanIsolation, type PlanRequest, PlanState, PlanStore, Planner, type PlannerBackendEntry, PlannerBackendId, type PlannerChoice, PlannerModelCandidate, type PlannerModelLookup, PlannerModelRecall, type PlannerModelSource, PlannerModelStore, type PlannerSelectionChange, type PlannerSelectionCurrent, type PlannerSelectionResult, type PlannerSelectionState, PlannerShellSandbox, PlannerToolHandler, type PlannerUsability, PlannerUsage, PostArgs, type PrdBlock, ProviderModelLists, type ProviderRegistration, QueuedTaskMessage, ReadFileOpts, ReadTaskArgs, ReportedWindow, type ResearchChat, ResearchLogEntry, ResearchShell, type ResearchTurn, type ResolvedChoice, type ResolvedPlanner, RewindTarget, RunActivity, RunMergeView, RunView, RunnerApprovals, RunnerAuth, RunnerAuthExec, RunnerCommand$1 as RunnerCommand, RunnerId, RunnerInstallation, type RunnerInstallationOptions, RunnerManifest, RunnerModeInfo, RunnerRegistry, RunnerSessionCost, type RunnerSpawnOptions, SCRIPT_RUNNER, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STATE_DIR_IGNORE, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, type SaveSession, type SavedState, ScriptBody, ScriptExit, ScriptRunner, ScriptSession, type SearchHit, type SearchOutcome, type SearchPage, type SearchTransport, Session, SessionBroadcaster, type SessionDeps, SessionHeld, SessionLease, SessionMessage, SessionNotFoundError, SessionNotice, type SessionPlanner, type SessionRuntimeSettings, ShellLaunch, SkillsService, type SpawnSpec, StdioAgentAdapter, StoredHandoff, StructuredEvent, StructuredRunner, type StructuredRunnerDeps, StructuredSession, StructuredTurnEnd, SubtreeReport, Task, TaskCompleteArgs, TaskControlError, type TaskEditOptions, TaskLogEvent, type TaskLogFile, type TaskLogLocation, TaskLogRecorder, type TaskLogRecorderDeps, TaskMessageFrom, TaskModeAgentAdapter, TaskOrchestrator, TaskOrchestratorOptions, TaskOutputSource, TaskQueryCatalog, TaskRevertPreview, TaskRunnerConfig, TaskRunnerFlags, TaskShell, TaskShellSite, TaskStartOptions, TaskTokenScope, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, UsageRecord, UserSettings, VERSION_CHECK_NOTICE, VERSION_CHECK_URL, VerdictEngine, type VerdictListener, VerificationCheck, type VersionCheck, type VersionCheckOptions, WINDOWS_MAX_COMMAND_LINE, WebRead, WebReadDecision, type WebResponse, WebResponseCache, type WebResponseCacheOptions, type WebTransport, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, type WorktreeIsolationDeps, admitSettingsEnv, applyHeadLimit, assertWorkspaceExists, assertWorkspaceIsProject, augmentedPath, bearerHeaderValue, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, canContinue, claudeAccountLimitCollector, clearAugmentedPathCache, clearDaemonToken, clearState, clipboardCopyCommand, codexAccountLimitCollector, codexSandboxNotice, compareVersions, configuredProviders, continuability, createIsolationPreview, createNativeShellLauncher, createSession, createTaskAdapter, createWorktreeIsolation, daemonTokenPath, defaultEnabledRunners, definitionPattern, detectInstalledPlanner, discardChildRuns, discoverGeminiModels, ensureDir, ensurePrivateDir, ensureStateDirIgnored, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, findInstalledPlanner, formatSearchOutput, getProviderMeta, getStateDir, globalDataDir, grantScopeFor, grepRegexFromProbe, includeGlobFor, installedPlannerAnswered, installedPlannerDetected, isApiProvider, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlannerBackend, isVendorModelFor, isolationViewOfPlan, killTree, languageForId, listTaskLogAttempts, listTree, loadState, looksLikeChallenge, migrateOldConfigDir, migratePlanIsolation, mintDaemonToken, mintSessionId, nativeShellInvocation, nativeShellOffer, normalizeGeminiModel, notifyCommandOf, openCodeGoAccountLimitCollector, openTaskLog, parseExecutionCommand, parseMaxParallel, parseSearchHits, parseVersion, planDirectLaunch, plannerBackendEntries, prefixModelId, prepareTaskOutputFile, providerForRunner, readDaemonToken, readTaskLog, readTaskPatch, reclaimContainers, recordInstalledPlanner, recordedInstalledPlanner, referencePattern, removedPluginNotice, repositoryRunnerConfigPaths, resetInstalledPlanner, resolveProviderFromPrefix, resolveTaskRunnerFlags, resolveWithin, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveState, saveTaskPatch, selectPlanner, sessionRuntimeSettings, sharedSearchProvider, sharedWebResponseCache, shellQuoted, startVersionCheck, stateExists, stripAnsi, stripModelPrefix, supportsTaskMode, taskPatchFile, tokenSubprotocols, tokensMatch, wellKnownBinDirs, windowsCommandLine, withPath, writeFileAtomic, writePrivateFile };