@ordewell/core 0.10.2 → 0.10.4

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 (45) hide show
  1. package/dist/{IFileSystem-CyTIoiSn.d.ts → IFileSystem-_effm8-b.d.ts} +1 -1
  2. package/dist/{IFileSystem-j0naIoAQ.d.mts → IFileSystem-vyqMdL-x.d.mts} +1 -1
  3. package/dist/{IRunner---PfQVdc.d.mts → IRunner-D_UkkMbJ.d.ts} +202 -196
  4. package/dist/{IRunner-WwL-Bjqq.d.ts → IRunner-NtTHQgLR.d.mts} +202 -196
  5. package/dist/{ModeResolver-DrMU-5lw.d.ts → ModeResolver-Dy3Ef6p-.d.ts} +1 -1
  6. package/dist/{ModeResolver-CjQ7zqTN.d.mts → ModeResolver-wnTFsDnF.d.mts} +1 -1
  7. package/dist/{Task-AfA1m4qW.d.mts → Task-DZs9eKgg.d.mts} +25 -6
  8. package/dist/{Task-AfA1m4qW.d.ts → Task-DZs9eKgg.d.ts} +25 -6
  9. package/dist/{chunk-4FEARWTS.mjs → chunk-645FALZX.mjs} +5 -5
  10. package/dist/chunk-645FALZX.mjs.map +1 -0
  11. package/dist/{chunk-3LNZDBCX.mjs → chunk-A57ITQE7.mjs} +35 -16
  12. package/dist/chunk-A57ITQE7.mjs.map +1 -0
  13. package/dist/{chunk-UQGR3UCA.mjs → chunk-FH6M5QZG.mjs} +136 -122
  14. package/dist/chunk-FH6M5QZG.mjs.map +1 -0
  15. package/dist/{chunk-CIL3BQIF.mjs → chunk-SM6BV6XS.mjs} +17 -3
  16. package/dist/chunk-SM6BV6XS.mjs.map +1 -0
  17. package/dist/index.d.mts +427 -40
  18. package/dist/index.d.ts +427 -40
  19. package/dist/index.js +2589 -1498
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +10799 -9764
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/parsing.d.mts +2 -2
  24. package/dist/parsing.d.ts +2 -2
  25. package/dist/parsing.js +12 -12
  26. package/dist/parsing.js.map +1 -1
  27. package/dist/parsing.mjs +3 -3
  28. package/dist/{plan-utils-DL7yOuJs.d.mts → plan-utils-CtKceSsQ.d.mts} +1292 -1147
  29. package/dist/{plan-utils-gpeqV-Lp.d.ts → plan-utils-POIz5d8z.d.ts} +1292 -1147
  30. package/dist/plan-utils.d.mts +4 -4
  31. package/dist/plan-utils.d.ts +4 -4
  32. package/dist/plan-utils.js +16 -0
  33. package/dist/plan-utils.js.map +1 -1
  34. package/dist/plan-utils.mjs +7 -3
  35. package/dist/testing.d.mts +3 -3
  36. package/dist/testing.d.ts +3 -3
  37. package/dist/testing.js +3 -1
  38. package/dist/testing.js.map +1 -1
  39. package/dist/testing.mjs +4 -2
  40. package/dist/testing.mjs.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/chunk-3LNZDBCX.mjs.map +0 -1
  43. package/dist/chunk-4FEARWTS.mjs.map +0 -1
  44. package/dist/chunk-CIL3BQIF.mjs.map +0 -1
  45. package/dist/chunk-UQGR3UCA.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,13 +1,13 @@
1
- import { ae as Task, E as ExecutionActor, q as IsolationMergeResult, e as ExecutionRecord, f as GuardTrip, ad as SupervisorLevel, d as ExecutionCommandName, G as GuardTarget, a1 as RunnerId, c as DiscoveredModel, Y as ResearchProgress, X as ResearchLogEntry, C as ConversationMessage, a6 as SkillInfo, a7 as SkillLoad, ab as SkillsService, L as LegacyPlanState, K as PlanStatus, m as IsolationLandedTask, I as IWorktreeIsolation, z as IsolationTaskStatus, H as PlanIsolation, aq as UsageRecord, $ as ResearchToolType, O as PlannerUsage, am as TaskSnapshot, J as PlanState, F as IsolationView, as as Verdict, al as TaskSkillSnapshot } from './Task-AfA1m4qW.mjs';
2
- export { A as AttemptUsage, a as AwaitingReason, B as BUILTIN_SKILL_NAMES, D as DEFAULT_RUNNERS, b as DEFAULT_SUPERVISOR_RETRY_LIMIT, g as IntegrationDisposal, h as InvalidSkill, i as IsolationAvailability, j as IsolationHandoff, k as IsolationHandoffRepo, l as IsolationInactiveReason, n as IsolationLanding, o as IsolationMergeBlock, p as IsolationMergeBlockReason, r as IsolationOutcome, s as IsolationPruneResult, t as IsolationRemoval, u as IsolationRepo, v as IsolationRun, w as IsolationTaskRecord, x as IsolationTaskRef, y as IsolationTaskRepo, M as ModelUsage, N as PlanUsage, Q as PrepareIntent, R as PreparedTask, S as PreservedWork, T as PreviousWork, U as RefusedRemoval, V as RepairEvidence, W as RepoGroupLayout, Z as ResearchStep, _ as ResearchStepOutcome, a0 as RunSettings, a2 as SetupFailure, a3 as ShadowedSkill, a4 as SkillAppliesTo, a5 as SkillCatalog, a8 as SkillLoadNotice, a9 as SkillMetadata, aa as SkillSource, ah as TaskIsolation, ai as TaskIsolationState, aj as TaskModelAssignment, an as TaskStatus, ao as TreeSnapshot, ap as UsageLine, ar as UsageTotals, at as VerificationCheck, au as addAttemptUsage, av as addModelUsage, aw as addPlannerUsage, ax as addUsage, ay as addUsageTotals, az as createEmptyPlan, aA as createSkillsService, aB as createTask, aC as endAttemptUsage, aD as flattenTasks, aE as flattenTasksWithParents, aF as isAwaitingReason, aG as isMeasured, aH as isSupervisorLevel, aI as isUserMessage, aJ as migratePlanState, aK as partedPromptUsage, aL as pausedOnLimit, aM as planUsage, aN as plannerContextFill, aO as rejoinPlanTree, aP as startAttemptUsage, aQ as usageLine } from './Task-AfA1m4qW.mjs';
3
- import { v as LiveTailOptions, L as LiveTail, S as PlannerModes, ap as TaskOp, t as IsolatedExecution, a7 as SessionBroadcaster, b as ApplyTaskOpsResult, ac as SkillLookup, a9 as SessionNotice, q as EditCatalog, a8 as SessionMessage, R as PlanStore, aq as TaskOrchestrator, u as IsolationRunController, O as OrchestratorObserver, an as TaskLogEvent, I as INotification, s as GlobalRunSettings, $ as RunView, X as RunMergeView, at as TaskOutputSource, aK as UserSettings, ah as SurfacePlan, ai as SurfacePlanState } from './plan-utils-DL7yOuJs.mjs';
4
- export { A as ACT_RISK, a as AUTORUN_RISK, c as ApprovalBlock, d as ApprovalStatus, e as AutoMergeTrigger, B as BlockingSubject, C as CHECKPOINT_TRUNCATE_LENGTH, f as CommandBlock, g as CommandStatus, h as CompactionBlock, i as ConversationInput, j as ConversationView, D as DiffRow, k as DiffRowKind, l as DiffStat, m as DisplayBlock, E as EMPTY_CONVERSATION, n as EMPTY_HOLD, o as EMPTY_RUN, p as EMPTY_TASK_LOG, r as ExecutionSummary, G as GatedConversation, w as LocalEntry, M as MarkdownToken, x as MessageBlock, y as MessageRole, N as NOT_STARTED, z as NO_TURN, F as NewTaskFields, H as NotificationAction, J as OutputPreview, P as PlanBlock, K as PlanMarkerStatus, Q as PlanSnapshot, T as PromptHold, U as RUN_SETTINGS_DEFAULTS, W as RunInput, Y as RunSettingsError, Z as RunTask, _ as RunTaskStatus, a0 as RunnerLoadedBlock, a1 as SUPERVISOR_LEVEL_LABEL, a2 as SerializedConversationMessage, a3 as SerializedPendingTurn, a4 as SerializedPlan, a5 as SerializedTask, a6 as SerializedTaskStatus, aa as SettingsService, ab as SkillLoadBlock, ad as SkillToken, ae as SubagentBlock, af as SubagentChild, ag as SubagentStatus, aj as SurfaceTask, ak as TakenPrompt, al as TaskAttemptSnapshot, am as TaskControlError, ao as TaskLogView, ar as TaskOrchestratorDeps, as as TaskOrchestratorOptions, au as TaskRef, av as TaskRowAction, aw as TaskRowContext, ax as TaskRowIsolation, ay as TaskRowKind, az as TaskRowPlacement, aA as TaskRowSubject, aB as TaskRowUsage, aC as TaskRowView, aD as TaskStatusKind, aE as ThinkingDisplayBlock, aF as ToolBlock, aG as ToolHeadline, aH as ToolStatus, aI as TurnGate, aJ as UsageBlock, aL as aheadOfDraft, aM as applyTaskOps, aN as approvalLabel, aO as automergeSummary, aP as autorunSummary, aQ as awaitingLabel, aR as blockedByLabel, aS as blockingFailures, aT as canMergeTasks, aU as canSetDependencies, aV as canSplitTask, aW as capConflictFiles, aX as classifyOutcome, aY as coalesceTaskLog, aZ as dependencyCandidates, a_ as dependentsNotice, a$ as dependentsOf, b0 as diffRows, b1 as diffStat, b2 as diffSummary, b3 as digestTaskLog, b4 as drainNext, b5 as executionSummary, b6 as followTurn, b7 as fromTranscript, b8 as getSettingsPath, b9 as hasHiddenDetail, ba as holdPrompt, bb as isTaskRunning, bc as loadedSkillTokens, bd as markAction, be as markRequestFor, bf as markdownHtml, bg as markdownTokens, bh as namedRepos, bi as newTaskFields, bj as opsEditable, bk as outputLines, bl as outputPreview, bm as parseCount, bn as parseSwitch, bo as parseTaskOpsJson, bp as pastGateConfirmation, bq as reduceConversation, br as reduceRun, bs as reduceTaskLog, bt as replayTaskLog, bu as resolveTaskRef, bv as resumeLabel, bw as resumeTime, bx as runSettingsOf, by as runnerToolSubject, bz as serializePlan, bA as serializeTask, bB as serializeTaskStatus, bC as skillTokens, bD as skippedLabel, bE as stopTurn, bF as summarizeToolCall, bG as supervisorSummary, bH as surfacePlan, bI as surfacePlanState, bJ as takeAt, bK as taskLogForSurface, bL as taskOrderLabel, bM as taskRef, bN as taskRefOf, bO as taskRowActions, bP as taskRowView, bQ as taskStartedNotice, bR as taskStatusKind, bS as textHasTaskOps, bT as titledRefs, bU as titledTaskRef, bV as titledTaskRefOf, bW as toTaskLogEvent, bX as toolHeadline, bY as trimToolOutput, bZ as truncateCheckpointSummary, b_ as unsendAll, b$ as unsendLatest } from './plan-utils-DL7yOuJs.mjs';
5
- import { I as IApproval, y as IConfig, d as AgentProcessDeps, a as AgentAdapter, _ as OrdewellMcpServer, a6 as PlannerToolHandler, ad as ResearchShell, p as ApprovalRequest, j as ApprovalDecision, i as ApprovalAnswer, z as IRunner, a3 as PlannerBackendId, a9 as ProviderModelLists, f as AiProvider, m as ApprovalModeSetting, aq as RunnerRegistry, Z as OrchestratorOption, aD as TaskModeAgentAdapter, e as AgentStartOptions, c as AgentEvent, ai as RunnerCommand, a7 as ProjectMcpServer, n as ApprovalPolicy, B as IRunnerSession, aA as TaskCompleteArgs, r as CheckpointAnswer, av as StructuredTurnEnd, au as StructuredEvent, aC as TaskMessageFrom, ab as QueuedTaskMessage, aI as TaskStartOptions, aJ as TaskTokenScope, am as RunnerManifest, aH as TaskRunnerFlags } from './IRunner---PfQVdc.mjs';
6
- export { A as AUTO_COMMANDS, b as AgentAdapterFactory, g as AllProviderModels, h as AnswerApprovalArgs, k as ApprovalKind, l as ApprovalMode, o as ApprovalPolicyOptions, q as ApprovalSource, C as CatalogModel, s as CheckpointArgs, t as CommandClassification, u as CommandTier, v as CommandWords, D as DEFAULT_PLANNER_ALLOWLIST, w as DENY_ALL, x as DiscoveryCommand, E as EditPlanArgs, F as FetchAllProviderModelsOptions, G as GIT_READONLY_SUBCOMMANDS, H as InvokedCommand, L as LineBuffer, J as ListModelsArgs, K as ListRunnersArgs, M as LoadSkillArgs, N as McpClientConfig, O as McpCredential, P as McpTool, Q as McpToolContext, R as McpToolReply, S as MessageTaskArgs, T as ModelCatalog, U as ModelShortcut, V as ORCHESTRATOR_SHORTCUTS, W as ORDEWELL_MCP_PATH, X as ORDEWELL_MCP_SERVER_NAME, Y as OneTaskArgs, $ as OwnerOnlyFile, a0 as PLANNER_EXECUTION_TOOLS, a1 as PLANNER_TOOLS, a2 as PlannerAllowlist, a4 as PlannerStartOptions, a5 as PlannerTokenScope, a8 as ProviderCredentialSource, aa as ProviderModelsResult, ac as REFUSED_COMMANDS, ae as ResearchShellDeps, af as RetryTaskArgs, ag as RunCommandArgs, ah as RunPlanArgs, aj as RunnerCommandKind, ak as RunnerEntry, al as RunnerFeatures, an as RunnerMcpServer, ao as RunnerMode, ap as RunnerModelDiscovery, ar as ShellDialect, as as SpawnFn, at as StandingDecision, aw as SubmitPlanArgs, ax as TASK_COMPLETE_TOOL, ay as TASK_COMPLETION_CONTRACT, az as TASK_TOOLS, aB as TaskDiffArgs, aE as TaskModeUnsupportedError, aF as TaskOutputArgs, aG as TaskQueryArgs, aK as TaskToolHandler, aL as approvalScopes, aM as classifyCommand, aN as clearResearchShellCache, aO as collectProviderCredentials, aP as commandAllowedBy, aQ as effectiveApprovalMode, aR as enabledRunners, aS as fetchAllProviderModels, aT as findRunnerCommand, aU as isGranted, aV as isRunnerApproval, aW as knownModelId, aX as mcpClientConfig, aY as ownerOnlyConfigFile, aZ as parseAllowlist, a_ as parseApprovalModeSetting, a$ as researchShellWarning, b0 as researchToolsPath, b1 as resolveModelShortcut, b2 as resolveProvider, b3 as resolveResearchShell, b4 as scopeAllowed, b5 as sharedMcpServer, b6 as toApprovalDecision, b7 as toOrchestratorOptions, b8 as toolAllowed } from './IRunner---PfQVdc.mjs';
7
- import { T as ToolOutcome, I as IFileSystem, R as ReadFileOpts, b as GrepOptions, a as GlobOptions, F as FindSymbolOptions } from './IFileSystem-j0naIoAQ.mjs';
8
- export { G as GREP_DEFAULT_HEAD_LIMIT, c as GrepOutputMode, S as SEARCH_EXCLUSIONS } from './IFileSystem-j0naIoAQ.mjs';
9
- import { R as RunnerModeInfo } from './ModeResolver-CjQ7zqTN.mjs';
10
- export { a as autonomyLevelLabel, p as parseAutonomyLevel, r as runnerModesFrom } from './ModeResolver-CjQ7zqTN.mjs';
1
+ import { af as Task, E as ExecutionActor, r as IsolationMergeResult, f as ExecutionRecord, g as GuardTrip, ae as SupervisorLevel, e as ExecutionCommandName, G as GuardTarget, a2 as RunnerId, d as DiscoveredModel, Z as ResearchProgress, Y as ResearchLogEntry, C as ConversationMessage, a7 as SkillInfo, a8 as SkillLoad, ac as SkillsService, L as LegacyPlanState, N as PlanStatus, n as IsolationLandedTask, I as IWorktreeIsolation, F as IsolationTaskStatus, J as PlanIsolation, ar as UsageRecord, a0 as ResearchToolType, Q as PlannerUsage, an as TaskSnapshot, K as PlanState, H as IsolationView, at as Verdict, am as TaskSkillSnapshot } from './Task-DZs9eKgg.mjs';
2
+ export { A as ApprovalRecord, a as AttemptUsage, b as AwaitingReason, B as BUILTIN_SKILL_NAMES, D as DEFAULT_RUNNERS, c as DEFAULT_SUPERVISOR_RETRY_LIMIT, h as IntegrationDisposal, i as InvalidSkill, j as IsolationAvailability, k as IsolationHandoff, l as IsolationHandoffRepo, m as IsolationInactiveReason, o as IsolationLanding, p as IsolationMergeBlock, q as IsolationMergeBlockReason, s as IsolationOutcome, t as IsolationPruneResult, u as IsolationRemoval, v as IsolationRepo, w as IsolationRun, x as IsolationTaskRecord, y as IsolationTaskRef, z as IsolationTaskRepo, M as ModelUsage, O as PlanUsage, R as PrepareIntent, S as PreparedTask, T as PreservedWork, U as PreviousWork, V as RefusedRemoval, W as RepairEvidence, X as RepoGroupLayout, _ as ResearchStep, $ as ResearchStepOutcome, a1 as RunSettings, a3 as SetupFailure, a4 as ShadowedSkill, a5 as SkillAppliesTo, a6 as SkillCatalog, a9 as SkillLoadNotice, aa as SkillMetadata, ab as SkillSource, ai as TaskIsolation, aj as TaskIsolationState, ak as TaskModelAssignment, ao as TaskStatus, ap as TreeSnapshot, aq as UsageLine, as as UsageTotals, au as VerificationCheck, av as addAttemptUsage, aw as addModelUsage, ax as addPlannerUsage, ay as addUsage, az as addUsageTotals, aA as createEmptyPlan, aB as createSkillsService, aC as createTask, aD as endAttemptUsage, aE as flattenTasks, aF as flattenTasksWithParents, aG as isAwaitingReason, aH as isMeasured, aI as isSupervisorLevel, aJ as isUserMessage, aK as migratePlanState, aL as partedPromptUsage, aM as pausedOnLimit, aN as planUsage, aO as plannerContextFill, aP as rejoinPlanTree, aQ as startAttemptUsage, aR as usageLine, aS as waitsForApproval } from './Task-DZs9eKgg.mjs';
3
+ import { ah as StartAdmission, w as LiveTailOptions, L as LiveTail, U as PlannerModes, at as TaskOp, u as IsolatedExecution, aa as SessionBroadcaster, b as ApplyTaskOpsResult, af as SkillLookup, ac as SessionNotice, q as EditCatalog, ab as SessionMessage, T as PlanStore, au as TaskOrchestrator, v as IsolationRunController, O as OrchestratorObserver, ar as TaskLogEvent, I as INotification, s as GlobalRunSettings, a1 as RunView, Z as RunMergeView, ax as TaskOutputSource, aO as UserSettings, al as SurfacePlan, am as SurfacePlanState } from './plan-utils-CtKceSsQ.mjs';
4
+ export { A as ACT_RISK, a as AUTORUN_RISK, c as ApprovalBlock, d as ApprovalStatus, e as AutoMergeTrigger, B as BlockingSubject, C as CHECKPOINT_TRUNCATE_LENGTH, f as CommandBlock, g as CommandStatus, h as CompactionBlock, i as ConversationInput, j as ConversationView, D as DiffRow, k as DiffRowKind, l as DiffStat, m as DisplayBlock, E as EMPTY_CONVERSATION, n as EMPTY_HOLD, o as EMPTY_RUN, p as EMPTY_TASK_LOG, r as ExecutionSummary, G as GatedConversation, H as HeldEdit, t as HeldEditMark, x as LocalEntry, M as MarkdownToken, y as MessageBlock, z as MessageRole, N as NOT_STARTED, F as NO_TURN, J as NewTaskFields, K as NotificationAction, P as OutputPreview, Q as PlanBlock, R as PlanMarkerStatus, S as PlanSnapshot, V as PromptHold, W as RUN_SETTINGS_DEFAULTS, Y as RunInput, _ as RunSettingsError, $ as RunTask, a0 as RunTaskStatus, a2 as RunnerLoadedBlock, a3 as STOPPED_BEFORE_START, a4 as SUPERVISOR_LEVEL_LABEL, a5 as SerializedConversationMessage, a6 as SerializedPendingTurn, a7 as SerializedPlan, a8 as SerializedTask, a9 as SerializedTaskStatus, ad as SettingsService, ae as SkillLoadBlock, ag as SkillToken, ai as SubagentBlock, aj as SubagentChild, ak as SubagentStatus, an as SurfaceTask, ao as TakenPrompt, ap as TaskAttemptSnapshot, aq as TaskControlError, as as TaskLogView, av as TaskOrchestratorDeps, aw as TaskOrchestratorOptions, ay as TaskRef, az as TaskRowAction, aA as TaskRowContext, aB as TaskRowIsolation, aC as TaskRowKind, aD as TaskRowPlacement, aE as TaskRowSubject, aF as TaskRowUsage, aG as TaskRowView, aH as TaskStatusKind, aI as ThinkingDisplayBlock, aJ as ToolBlock, aK as ToolHeadline, aL as ToolStatus, aM as TurnGate, aN as UsageBlock, aP as WAITS_FOR_APPROVAL_LABEL, aQ as aheadOfDraft, aR as applyTaskOps, aS as approvalLabel, aT as automergeSummary, aU as autorunSummary, aV as awaitingLabel, aW as blockedByLabel, aX as blockingFailures, aY as canMergeTasks, aZ as canSetDependencies, a_ as canSplitTask, a$ as capConflictFiles, b0 as classifyOutcome, b1 as coalesceTaskLog, b2 as dependencyCandidates, b3 as dependentsNotice, b4 as dependentsOf, b5 as diffRows, b6 as diffStat, b7 as diffSummary, b8 as digestTaskLog, b9 as drainNext, ba as executionSummary, bb as followTurn, bc as fromTranscript, bd as getSettingsPath, be as hasHiddenDetail, bf as holdPrompt, bg as isTaskRunning, bh as loadedSkillTokens, bi as markAction, bj as markRequestFor, bk as markdownHtml, bl as markdownTokens, bm as namedRepos, bn as newTaskFields, bo as opsEditable, bp as outputLines, bq as outputPreview, br as parseCount, bs as parseSwitch, bt as parseTaskOpsJson, bu as pastGateConfirmation, bv as reconcileApprovals, bw as reduceConversation, bx as reduceRun, by as reduceTaskLog, bz as replayTaskLog, bA as resolveTaskRef, bB as resumeLabel, bC as resumeTime, bD as runSettingsOf, bE as runnerToolSubject, bF as serializePlan, bG as serializeTask, bH as serializeTaskStatus, bI as skillTokens, bJ as skippedLabel, bK as stopTurn, bL as summarizeToolCall, bM as supervisorSummary, bN as surfacePlan, bO as surfacePlanState, bP as takeAt, bQ as taskLogForSurface, bR as taskOrderLabel, bS as taskRef, bT as taskRefOf, bU as taskRowActions, bV as taskRowView, bW as taskStartedNotice, bX as taskStatusKind, bY as textHasTaskOps, bZ as titledRefs, b_ as titledTaskRef, b$ as titledTaskRefOf, c0 as toTaskLogEvent, c1 as toolHeadline, c2 as trimToolOutput, c3 as truncateCheckpointSummary, c4 as unsendAll, c5 as unsendLatest } from './plan-utils-CtKceSsQ.mjs';
5
+ import { I as IApproval, y as IConfig, d as AgentProcessDeps, a as AgentAdapter, _ as OrdewellMcpServer, a6 as PlannerToolHandler, ad as ResearchShell, p as ApprovalRequest, j as ApprovalDecision, i as ApprovalAnswer, z as IRunner, a3 as PlannerBackendId, a9 as ProviderModelLists, f as AiProvider, m as ApprovalModeSetting, aq as RunnerRegistry, Z as OrchestratorOption, aD as TaskModeAgentAdapter, e as AgentStartOptions, c as AgentEvent, ai as RunnerCommand, a7 as ProjectMcpServer, n as ApprovalPolicy, B as IRunnerSession, aA as TaskCompleteArgs, r as CheckpointAnswer, av as StructuredTurnEnd, au as StructuredEvent, aC as TaskMessageFrom, ab as QueuedTaskMessage, aI as TaskStartOptions, aJ as TaskTokenScope, am as RunnerManifest, aH as TaskRunnerFlags } from './IRunner-NtTHQgLR.mjs';
6
+ export { A as AUTO_COMMANDS, b as AgentAdapterFactory, g as AllProviderModels, h as AnswerApprovalArgs, k as ApprovalKind, l as ApprovalMode, o as ApprovalPolicyOptions, q as ApprovalSource, C as CatalogModel, s as CheckpointArgs, t as CommandClassification, u as CommandTier, v as CommandWords, D as DEFAULT_PLANNER_ALLOWLIST, w as DENY_ALL, x as DiscoveryCommand, E as EditPlanArgs, F as FetchAllProviderModelsOptions, G as GIT_READONLY_SUBCOMMANDS, H as InvokedCommand, L as LineBuffer, J as ListModelsArgs, K as ListRunnersArgs, M as LoadSkillArgs, N as McpClientConfig, O as McpCredential, P as McpTool, Q as McpToolContext, R as McpToolReply, S as MessageTaskArgs, T as ModelCatalog, U as ModelShortcut, V as ORCHESTRATOR_SHORTCUTS, W as ORDEWELL_MCP_PATH, X as ORDEWELL_MCP_SERVER_NAME, Y as OneTaskArgs, $ as OwnerOnlyFile, a0 as PLANNER_EXECUTION_TOOLS, a1 as PLANNER_TOOLS, a2 as PlannerAllowlist, a4 as PlannerStartOptions, a5 as PlannerTokenScope, a8 as ProviderCredentialSource, aa as ProviderModelsResult, ac as REFUSED_COMMANDS, ae as ResearchShellDeps, af as RetryTaskArgs, ag as RunCommandArgs, ah as RunPlanArgs, aj as RunnerCommandKind, ak as RunnerEntry, al as RunnerFeatures, an as RunnerMcpServer, ao as RunnerMode, ap as RunnerModelDiscovery, ar as ShellDialect, as as SpawnFn, at as StandingDecision, aw as SubmitPlanArgs, ax as TASK_COMPLETE_TOOL, ay as TASK_COMPLETION_CONTRACT, az as TASK_TOOLS, aB as TaskDiffArgs, aE as TaskModeUnsupportedError, aF as TaskOutputArgs, aG as TaskQueryArgs, aK as TaskToolHandler, aL as approvalScopes, aM as classifyCommand, aN as clearResearchShellCache, aO as collectProviderCredentials, aP as commandAllowedBy, aQ as effectiveApprovalMode, aR as enabledRunners, aS as fetchAllProviderModels, aT as findRunnerCommand, aU as isGranted, aV as isRunnerApproval, aW as knownModelId, aX as mcpClientConfig, aY as ownerOnlyConfigFile, aZ as parseAllowlist, a_ as parseApprovalModeSetting, a$ as researchShellWarning, b0 as researchToolsPath, b1 as resolveModelShortcut, b2 as resolveProvider, b3 as resolveResearchShell, b4 as scopeAllowed, b5 as sharedMcpServer, b6 as toApprovalDecision, b7 as toOrchestratorOptions, b8 as toolAllowed } from './IRunner-NtTHQgLR.mjs';
7
+ import { T as ToolOutcome, I as IFileSystem, R as ReadFileOpts, b as GrepOptions, a as GlobOptions, F as FindSymbolOptions } from './IFileSystem-vyqMdL-x.mjs';
8
+ export { G as GREP_DEFAULT_HEAD_LIMIT, c as GrepOutputMode, S as SEARCH_EXCLUSIONS } from './IFileSystem-vyqMdL-x.mjs';
9
+ import { R as RunnerModeInfo } from './ModeResolver-wnTFsDnF.mjs';
10
+ export { a as autonomyLevelLabel, p as parseAutonomyLevel, r as runnerModesFrom } from './ModeResolver-wnTFsDnF.mjs';
11
11
  import { ChildProcess } from 'child_process';
12
12
  import { EventEmitter } from 'events';
13
13
  import 'zod/v4';
@@ -59,7 +59,7 @@ type ExecutionCommand = {
59
59
  | {
60
60
  command: 'merge_all';
61
61
  }
62
- /** End a task as skipped: nothing it did lands, and its dependents go ahead without it. `reason` is required of anyone but the user. */
62
+ /** End a task as skipped: nothing it did lands, and its dependents go ahead without it once the work it waited on is done. `reason` is required of anyone but the user. */
63
63
  | {
64
64
  command: 'skip_task';
65
65
  task: string;
@@ -125,7 +125,7 @@ interface ExecutionHost {
125
125
  planApproved(): boolean;
126
126
  /** The user approved this task: it was in the plan they executed, or they started it themselves. */
127
127
  taskApproved(taskId: string): boolean;
128
- /** A command of the user's own approves what it starts. */
128
+ /** A start the user consented to approves these tasks, before it acts. */
129
129
  approve(taskIds: readonly string[]): void;
130
130
  /** Full autonomy: starts follow plan approval without a question. */
131
131
  autonomous(): boolean;
@@ -137,14 +137,18 @@ interface ExecutionHost {
137
137
  startsHeld(): boolean;
138
138
  /** Work is running right now. */
139
139
  hasLiveWork(): boolean;
140
+ /** Something will start without being asked again: a start admitted and not yet claimed, or a scheduled resume. */
141
+ startsPending(): boolean;
142
+ /** Admit a start that waits before it claims; see {@link StartAdmission}. */
143
+ admitStart(): StartAdmission;
140
144
  /** The task's attempt is live: starting, running or landing. */
141
145
  running(taskId: string): boolean;
142
146
  maxParallel(): number;
143
147
  /** The run waits on the user to stash or skip isolation before anything starts. */
144
148
  runBlocked(): boolean;
145
- /** A dependency is met once its work is where the dependent will run. */
146
- dependencyMet(depId: string): boolean;
147
- /** The dependencies a task waits on at its merge gate (ADR-0020). */
149
+ /** The tasks a task's dependencies still hold it back for: unmet dependencies, or the unfinished work behind a skipped one. */
150
+ unmetDependencies(task: Readonly<Task>): string[];
151
+ /** The ancestors a task would wait on at its merge gate if it started now, whatever its status (ADR-0020). */
148
152
  mergeGate(taskId: string): string[];
149
153
  /** The failed tasks a task not started waits on through its dependencies (ADR-0034). */
150
154
  blockedBy(taskId: string): string[];
@@ -174,10 +178,16 @@ interface ExecutionHost {
174
178
  * named — that lands only when its reply ends.
175
179
  */
176
180
  heldEdit(taskId?: string): boolean;
177
- /** The task as the open turn's held edit leaves it; undefined when that edit removes it. */
178
- asEdited(taskId: string): Task | undefined;
179
- /** Run the command again, as the same actor, once the open turn's reply has landed its edit; `intent` names it if it never does. */
180
- deferUntilLanded(command: ExecutionCommand, actor: ExecutionActor, intent: string): void;
181
+ /** The plan's task tree as the open turn's held edit leaves it: as it is, when it holds none or one that would not apply. */
182
+ editedTasks(): readonly Task[];
183
+ /** The id of the task the open turn's held edit makes under this batch handle; undefined when it names none. */
184
+ heldHandle(name: string): string | undefined;
185
+ /**
186
+ * Run the command again, as the same actor, once the open turn's reply has
187
+ * landed its edit; `intent` names it if it never does. `admission` is
188
+ * released once it has run or been dropped.
189
+ */
190
+ deferUntilLanded(command: ExecutionCommand, actor: ExecutionActor, intent: string, admission: StartAdmission): void;
181
191
  /** A command deferred behind an edit did not run once the edit landed: the user is told, and so is the planner's next turn. */
182
192
  queuedNotRun(text: string): void;
183
193
  }
@@ -204,34 +214,62 @@ declare class ExecutionCommands {
204
214
  private readonly guards;
205
215
  private readonly now;
206
216
  constructor(deps: ExecutionCommandsDeps);
207
- run(asked: ExecutionCommand, actor: ExecutionActor): Promise<CommandOutcome>;
217
+ /**
218
+ * `admitted`: a deferred start's admission, taken as it was queued, which
219
+ * its owner releases; a start asked for now takes its own.
220
+ */
221
+ run(asked: ExecutionCommand, actor: ExecutionActor, admitted?: StartAdmission): Promise<CommandOutcome>;
222
+ /** A valid, consented call, from the user's answer where one is needed to the act and its record. */
223
+ private carryOut;
208
224
  /**
209
225
  * A command deferred behind the turn's edit, run now that the edit landed.
210
226
  * Nobody reads its answer, so one that does not run is kept as refused and
211
227
  * said, to the user and to the planner's next turn.
212
228
  */
213
- replay(command: ExecutionCommand, actor: ExecutionActor): Promise<void>;
229
+ replay(command: ExecutionCommand, actor: ExecutionActor, admission: StartAdmission): Promise<void>;
214
230
  /**
215
- * A start that waits for the turn's edit is judged now, against its task as
231
+ * A start that waits for the turn's edit is judged now, against the plan as
216
232
  * that edit leaves it — the edit counts as the change a retry needs — so one
217
- * that could never run is refused while the caller still reads the answer.
233
+ * that could never run is refused while the caller still reads the answer,
234
+ * and one the user will be asked about says so. `located` is the task as the
235
+ * plan has it now, absent for a task the edit adds.
218
236
  */
219
237
  private judgeAsEdited;
220
238
  private tripped;
239
+ /** `approves` is null for a start that runs without asking, else what the user's yes would approve. */
221
240
  private defer;
241
+ /**
242
+ * The tasks a start approves, read from the plan as it stands at the
243
+ * command's last check. Autorun starts a plan as the user's standing
244
+ * instruction, so its start approves what it runs as the user's does; so
245
+ * does a start under its exception for added tasks. A yes on the card
246
+ * approves the tasks the card named, and no others.
247
+ */
248
+ private consented;
222
249
  /**
223
250
  * With autorun on and Full, a planner turn may start a task added after the
224
251
  * user approved the plan (ADR-0030). Read at each start, so switching either
225
252
  * off stops it at once; never on a plan the user has not approved.
226
253
  */
227
254
  private addedMayStart;
255
+ /**
256
+ * Guarded means "ask the user first": a planner start in the user's own
257
+ * turn asks, so tasks they have not approved go into the question rather
258
+ * than refusing it. The supervisor's starts stay within what the user
259
+ * approved (ADR-0029).
260
+ */
261
+ private asksToApprove;
228
262
  /**
229
263
  * Who may do what without the mandate (#23): the user's own call needs no
230
264
  * consent; a planner turn may always end or steer work, and starts it only
231
265
  * as the autonomy level says; the supervisor's level decides for it.
232
266
  */
233
267
  private consent;
234
- /** Whether the command can run now, and how. Read afresh after a question, since answering takes time. */
268
+ /**
269
+ * Whether the command can run now, and how, judged against `tasks`: the
270
+ * plan, or the plan as the turn's held edit leaves it. Read afresh after a
271
+ * question, since answering takes time.
272
+ */
235
273
  private prepare;
236
274
  private prepareRunPlan;
237
275
  /** A start of one task: `run_task`, or a fresh `retry_task`, which also takes a task that failed or waits on the user. */
@@ -261,9 +299,16 @@ declare class ExecutionCommands {
261
299
  * waiting for input.
262
300
  */
263
301
  private prepareSkip;
264
- /** Why a start is not the user's to have made, or null: the user's own call is its own approval. */
302
+ /**
303
+ * Why a start is not the user's to have made, or the task it asks them to
304
+ * approve, or null: the user's own call is its own approval.
305
+ */
265
306
  private unapproved;
266
- /** The Guarded question, on the card the user answers other planner requests on. */
307
+ /**
308
+ * The Guarded question, on the card the user answers other planner requests
309
+ * on. It names every task a yes approves, since a yes is the user's
310
+ * approval of them as Execute plan would be.
311
+ */
267
312
  private question;
268
313
  /** What was asked, as "start task #4 "Title"". */
269
314
  private intent;
@@ -271,6 +316,8 @@ declare class ExecutionCommands {
271
316
  private keep;
272
317
  private all;
273
318
  private located;
319
+ /** A reference read against the plan as the held edit leaves it, where the handles its batch gives come first. */
320
+ private locateAsEdited;
274
321
  /** A reference as a caller writes one — see {@link resolveTaskRef}. */
275
322
  private locate;
276
323
  }
@@ -1077,6 +1124,14 @@ declare class PlannerConversation {
1077
1124
  * submission replaces an earlier one. False when no user turn is open.
1078
1125
  */
1079
1126
  submit(submission: PlannerSubmission): boolean;
1127
+ /**
1128
+ * Tell surfaces what the turn's edit would leave, from the same applier that
1129
+ * lands it, so an edit that would not apply shows nothing. It stays shown
1130
+ * from the moment it is handed in until it lands, is refused, or the turn
1131
+ * ends: the backend's reply claims it, but it has not landed by then.
1132
+ */
1133
+ private showHeld;
1134
+ private clearHeld;
1080
1135
  /**
1081
1136
  * The edit the open turn already holds, for a further edit in the same reply
1082
1137
  * to join rather than replace. Empty when it holds nothing; null when it holds
@@ -1284,6 +1339,8 @@ declare class PlannerConversation {
1284
1339
  private warnSkills;
1285
1340
  /** Validate + commit a task_ops turn atomically. Returns the errors on rejection (plan untouched). */
1286
1341
  private applyTaskOps;
1342
+ /** The edit was refused as it landed: what it showed is not coming. */
1343
+ private refusedHeld;
1287
1344
  /** Commit a settled (non-task_ops) turn through the host's mutation ritual. */
1288
1345
  private commit;
1289
1346
  /**
@@ -1847,7 +1904,47 @@ declare function formatSearchOutput(capped: CappedRows, root: string, opts: {
1847
1904
  }): string;
1848
1905
 
1849
1906
  declare function normalizeGeminiModel(id: string): string;
1907
+ /** A model and the effort it was chosen with; blank is the planner's own default. */
1908
+ interface PlannerChoice {
1909
+ model: string;
1910
+ effort: string;
1911
+ }
1912
+ /**
1913
+ * Where a resolved model and effort came from. `configured` is a planner the
1914
+ * user named, or a vendor, as configured; for an agent detection found,
1915
+ * `inherited` is a configured model it can run. A planner whose configured
1916
+ * model is not its own gets `remembered`, its last pick, or `none`, its own
1917
+ * default; `request` is one request's model. Only `configured` and
1918
+ * `remembered` are the user's own choice for that planner.
1919
+ */
1920
+ type PlannerModelSource = 'configured' | 'inherited' | 'remembered' | 'request' | 'none';
1921
+ interface ResolvedChoice extends PlannerChoice {
1922
+ source: PlannerModelSource;
1923
+ }
1924
+ /** Who plans, and the model and effort it is spawned with. */
1925
+ interface ResolvedPlanner extends ResolvedChoice {
1926
+ provider: PlannerBackendId;
1927
+ }
1928
+ /**
1929
+ * What a host is configured to plan with. The model and effort are inherited
1930
+ * (the environment or `.env` at startup, an editor setting) unless the planner
1931
+ * was named — `setting` (VS Code's `aiProvider`) or AI_PROVIDER — or the
1932
+ * model was picked in this session.
1933
+ */
1934
+ interface ConfiguredPlanner extends PlannerChoice {
1935
+ setting?: string;
1936
+ /**
1937
+ * The planner a `/model` or `/planner` pick in this session made the model
1938
+ * for. A pick belongs to that planner alone: once routing moves (its key
1939
+ * removed), the model is configuration left for when it comes back, not a
1940
+ * choice the planner now in effect made.
1941
+ */
1942
+ pickedFor?: PlannerBackendId;
1943
+ /** One request's own model: it wins for that request and is never saved. */
1944
+ override?: string;
1945
+ }
1850
1946
  declare abstract class BaseConfig implements IConfig {
1947
+ private _routed;
1851
1948
  abstract aiProvider: PlannerBackendId;
1852
1949
  abstract apiKey: string;
1853
1950
  abstract planningModel: string;
@@ -1864,6 +1961,7 @@ declare abstract class BaseConfig implements IConfig {
1864
1961
  get researchSubagentModel(): string;
1865
1962
  get geminiModel(): string;
1866
1963
  get plannerThinkingEffort(): string | undefined;
1964
+ private environmentPlannerChoice;
1867
1965
  get openaiBaseUrl(): string;
1868
1966
  get openaiApiKey(): string;
1869
1967
  get xaiBaseUrl(): string;
@@ -1928,8 +2026,69 @@ declare abstract class BaseConfig implements IConfig {
1928
2026
  get webReadBudget(): number;
1929
2027
  get approvalDefaults(): boolean;
1930
2028
  get approvalPreApproved(): string[];
1931
- protected static detectProvider(fallback: PlannerBackendId): PlannerBackendId;
2029
+ /**
2030
+ * Who plans when no surface setting names a planner: an explicit
2031
+ * AI_PROVIDER, then a vendor whose key is in the environment,
2032
+ * then an installed coding agent (ADR-0009), and openrouter only when there
2033
+ * is none of those. One answer for every host, so they cannot drift apart.
2034
+ */
2035
+ protected detectProvider(): PlannerBackendId;
2036
+ /**
2037
+ * Who plans when no surface setting names a planner: an explicit
2038
+ * AI_PROVIDER, then the vendor whose catalog lists the model, else
2039
+ * `detectProvider`. The explicit choice comes first because a model id can
2040
+ * sit in another vendor's catalog (`openai/gpt-4o` is on OpenRouter too),
2041
+ * and the user named the planner, not the catalog. A vendor without a
2042
+ * credential yields to an installed coding agent, because the TUI and
2043
+ * `ordewell planner` persist ORCHESTRATOR_MODEL, and a model left over from
2044
+ * a removed key would otherwise route a keyless first run to a planner that
2045
+ * cannot plan. Without an agent the vendor still answers, so the preflight
2046
+ * names it.
2047
+ */
2048
+ protected providerForModel(model: string | undefined, lists: ProviderModelLists | null | undefined): PlannerBackendId;
2049
+ /**
2050
+ * `providerForModel`, memoized against everything it reads rather than a
2051
+ * flag each writer must remember to reset. A host keeps one config for a
2052
+ * whole session or extension lifetime while keys, AI_PROVIDER, the model and
2053
+ * the installed agent all change underneath it, from writers (a secret-store
2054
+ * event, a settings route, the startup probe) that never see this instance;
2055
+ * the memo must answer what a fresh config would. The lists are compared by
2056
+ * identity because a host swaps the whole object on discovery.
2057
+ */
2058
+ protected routedProvider(model: string | undefined, lists: ProviderModelLists | null | undefined): PlannerBackendId;
2059
+ /**
2060
+ * Who plans, with which model and effort: the one rule every host's
2061
+ * provider, model and effort getters read, so what a settings response
2062
+ * shows is what is spawned. Resolved on each read and never saved: a key or
2063
+ * a `/planner` pick added later must find the configured values as they were.
2064
+ */
2065
+ protected resolvePlanner(configured: ConfiguredPlanner, lists: ProviderModelLists | null | undefined): ResolvedPlanner;
2066
+ /**
2067
+ * `resolvePlanner`'s model and effort, for a getter that reads its model
2068
+ * from other settings than the one `provider` was routed on
2069
+ * (`planningModel`): judged against the planner in effect rather than
2070
+ * routed again. A model picked in this session for this planner and a
2071
+ * vendor's configured model are kept; a model picked for another planner
2072
+ * is not this one's. A coding agent the user named keeps what is
2073
+ * configured unless it is plainly a vendor's: naming the agent did not
2074
+ * choose a slug left from an old setup. A request's own model wins.
2075
+ */
2076
+ protected plannerChoiceFor(provider: PlannerBackendId, configured: ConfiguredPlanner): ResolvedChoice;
2077
+ /**
2078
+ * The model ids a coding agent was last discovered serving, empty while
2079
+ * discovery is cold. A host that holds a runner catalog supplies it: it is
2080
+ * the only evidence that tells OpenCode's `provider/model` ids from an
2081
+ * OpenRouter slug.
2082
+ */
2083
+ protected agentCatalog(_provider: PlannerBackendId): readonly string[];
1932
2084
  }
2085
+ /**
2086
+ * Plainly a vendor's model, which coding agent `agent` cannot run: every
2087
+ * vendor catalog id carries Ordewell's prefix (`openai:`) or is an OpenRouter
2088
+ * `org/model` slug, a shape an agent that names its own models that way
2089
+ * cannot rule out.
2090
+ */
2091
+ declare function isVendorModelFor(agent: PlannerBackendId, model: string): boolean;
1933
2092
 
1934
2093
  /**
1935
2094
  * A fully `process.env`-backed IConfig for headless callers (e.g. the CLI's
@@ -2303,9 +2462,17 @@ declare class RunnerInstallation {
2303
2462
  private inflight;
2304
2463
  private registry;
2305
2464
  private execImpl;
2306
- constructor(registry: RunnerRegistry, execImpl?: ExecImpl);
2465
+ private now;
2466
+ constructor(registry: RunnerRegistry, execImpl?: ExecImpl, now?: () => number);
2307
2467
  /** True if the runner's CLI responds to `--version`. Cached per process. */
2308
2468
  isInstalled(runner: string): Promise<boolean>;
2469
+ /**
2470
+ * Forget cached "not installed" verdicts so the next probe re-runs them. A
2471
+ * runner-list refresh calls this, so a CLI installed while the host runs is
2472
+ * offered without a restart. An installed verdict stays: it cannot have
2473
+ * changed without the binary going away, and re-probing one costs a spawn.
2474
+ */
2475
+ refresh(): void;
2309
2476
  /**
2310
2477
  * Whether this runner can serve as a harness planner (ADR-0009, T9), and why
2311
2478
  * not when it cannot. Surfaces call this to grey out an unusable agent in the
@@ -2340,6 +2507,37 @@ declare class RunnerInstallation {
2340
2507
  clear(): void;
2341
2508
  }
2342
2509
 
2510
+ /** The first of {@link findInstalledAgents}; null when none is usable. */
2511
+ declare function findInstalledPlanner(installation: Pick<RunnerInstallation, 'plannerUsability'>): Promise<PlannerBackendId | null>;
2512
+ /**
2513
+ * Find the installed agent and record it, for a host to start at startup. A
2514
+ * goal can be typed before the probe answers, so every planner turn waits on
2515
+ * {@link installedPlannerDetected} rather than planning with openrouter.
2516
+ */
2517
+ declare function detectInstalledPlanner(installation: Pick<RunnerInstallation, 'plannerUsability'>): Promise<PlannerBackendId | null>;
2518
+ /** Settles once the latest probe has recorded its answer; at once when none was started. */
2519
+ declare function installedPlannerDetected(): Promise<void>;
2520
+ /**
2521
+ * Whether the latest probe has recorded its answer, for a check that must run
2522
+ * at once when it can: a planner preflight read while the probe is out would
2523
+ * judge the openrouter fallback the answer may replace.
2524
+ */
2525
+ declare function installedPlannerAnswered(): boolean;
2526
+ declare function recordInstalledPlanner(id: PlannerBackendId | null): void;
2527
+ declare function recordedInstalledPlanner(): PlannerBackendId | null;
2528
+ /**
2529
+ * The runners enabled while the user has never saved a choice: the agents the
2530
+ * latest probe found installed, so a Codex-only or OpenCode-only host can plan
2531
+ * and run on its first start; DEFAULT_RUNNERS while none was found or no probe
2532
+ * has answered. Read on each call and never saved, so an agent installed later
2533
+ * joins on the next probe — a runner-list refresh asks again — and a saved
2534
+ * choice, even an empty one, still wins.
2535
+ * Every host's config reads it here, so the daemon, CLI, TUI and VS Code agree.
2536
+ */
2537
+ declare function defaultEnabledRunners(): RunnerId[];
2538
+ /** For tests: the recorded default is process-wide, so one case's must not decide the next's. */
2539
+ declare function resetInstalledPlanner(): void;
2540
+
2343
2541
  interface ProviderRegistration {
2344
2542
  id: PlannerBackendId;
2345
2543
  label: string;
@@ -3283,7 +3481,7 @@ interface RunnerCatalog {
3283
3481
 
3284
3482
  type ModelsByRunner = Partial<Record<RunnerId, DiscoveredModel[]>>;
3285
3483
  interface SessionCatalogDeps {
3286
- config: Pick<IConfig, 'enabledRunners' | 'autonomousMode'>;
3484
+ config: Pick<IConfig, 'enabledRunners' | 'autonomousMode' | 'aiProvider'>;
3287
3485
  registry: Pick<RunnerRegistry, 'getManifest'>;
3288
3486
  modelResolver: Pick<ModelResolver, 'modelsForRunners' | 'getCachedRunnerModels'>;
3289
3487
  /** Read at each call: a toggle or allowlist edit made since the session was built counts (#69). */
@@ -3413,6 +3611,8 @@ interface SessionEventRelayDeps {
3413
3611
  awaitingApproval?: (taskId: string) => number;
3414
3612
  /** What a task's waiting checkpoint asks, whole. */
3415
3613
  checkpointQuestion?: (taskId: string) => string | undefined;
3614
+ /** The task waits for the user's approval to start (ADR-0035). */
3615
+ waitsForApproval?: (taskId: string) => boolean;
3416
3616
  }
3417
3617
  /**
3418
3618
  * Every orchestrator event the relay announces. `onTaskSettled` is persistence
@@ -3439,6 +3639,7 @@ declare class SessionEventRelay {
3439
3639
  private readonly usage;
3440
3640
  private readonly awaitingApproval;
3441
3641
  private readonly checkpointQuestion;
3642
+ private readonly waitsForApproval;
3442
3643
  /**
3443
3644
  * The in-flight turn's subagent activity, grouped one run per subagent so a
3444
3645
  * replay nests each step under its own brief/result. Folded into the plan's
@@ -3447,6 +3648,8 @@ declare class SessionEventRelay {
3447
3648
  private pendingSubagents;
3448
3649
  private statusHeld;
3449
3650
  private statusOwed;
3651
+ /** The planner's requests announced and not yet settled, as they were announced: a surface joining now is owed them. */
3652
+ private readonly announced;
3450
3653
  constructor(deps: SessionEventRelayDeps);
3451
3654
  /** `plan` is read per event: a Session with no plan (or mid-reset) announces nothing about tasks. */
3452
3655
  observer(plan: () => LegacyPlanState | null): RelayObserver;
@@ -3463,6 +3666,14 @@ declare class SessionEventRelay {
3463
3666
  */
3464
3667
  holdStatus<T>(op: () => T): T;
3465
3668
  releaseStatus(plan: LegacyPlanState | null): void;
3669
+ approvalRequested(request: Extract<SessionMessage, {
3670
+ type: 'approval_request';
3671
+ }>): void;
3672
+ approvalSettled(id: string, granted: boolean): void;
3673
+ /** The planner's approval requests still waiting, in the order they were asked. */
3674
+ announcedApprovals(): Extract<SessionMessage, {
3675
+ type: 'approval_request';
3676
+ }>[];
3466
3677
  executionComplete(plan: LegacyPlanState | null): void;
3467
3678
  /** `turnId`: the planner turn whose commit this is, when one is. */
3468
3679
  planGenerated(plan: LegacyPlanState | null, goal: string, turnId?: string): void;
@@ -3663,6 +3874,8 @@ declare class Session {
3663
3874
  * supervisor has first.
3664
3875
  */
3665
3876
  private sentHandoff;
3877
+ /** The edit the open planner turn holds, as last announced: a surface that joins mid-turn is shown it. */
3878
+ private sentHeld;
3666
3879
  private readonly notifications;
3667
3880
  private readonly onNotice?;
3668
3881
  private readonly modelResolver;
@@ -3680,6 +3893,15 @@ declare class Session {
3680
3893
  private readonly skillsService;
3681
3894
  private readonly conversation;
3682
3895
  private readonly turns;
3896
+ /** Destroyed: a turn that waited for the planner to be found must not open on it. */
3897
+ private closed;
3898
+ /**
3899
+ * Turns PlanTurns does not open, waiting at the planner gate, each ended
3900
+ * with why it must not open: a Stop, a newer goal, or its plan scope ending.
3901
+ */
3902
+ private readonly openingsWaiting;
3903
+ /** The conversation's opening, from admission until its turn settles; see {@link behindOpening}. */
3904
+ private opening;
3683
3905
  private readonly editor;
3684
3906
  private readonly commands;
3685
3907
  private readonly supervision;
@@ -3724,7 +3946,11 @@ declare class Session {
3724
3946
  * one: nothing it would start is approved until the user executes it.
3725
3947
  */
3726
3948
  private heldEdit;
3727
- /** The task as the open turn's held edit leaves it: as it is, when it holds none or one that would not apply. */
3949
+ /** The plan's tasks as the open turn's held edit leaves them: as they are, when it holds none or one that would not apply. */
3950
+ private editedTasks;
3951
+ /** {@link editedTasks}, with the id each of the held batch's handles names in them. */
3952
+ private editedPlan;
3953
+ /** The task as the open turn's held edit leaves it; undefined when that edit removes it. */
3728
3954
  private asEdited;
3729
3955
  /** The open planner turn is the supervisor's, acting at Act: its edits and added tasks are its own (ADR-0029). */
3730
3956
  private supervisorEditing;
@@ -3753,8 +3979,24 @@ declare class Session {
3753
3979
  private userRunSettings;
3754
3980
  /** A call at the seam, in the transcript where it happened and on every surface at once. */
3755
3981
  private recordExecution;
3982
+ /**
3983
+ * Whether the user approved this task to run (ADR-0029, ADR-0035): it was in
3984
+ * the plan they executed, or they started it, added it or let it start since,
3985
+ * and it has been in the plan ever since. The one reading of the approval
3986
+ * record — the seam and the scheduler both ask it.
3987
+ */
3988
+ isApproved(taskId: string): boolean;
3989
+ /** A task the scheduler leaves for the user to approve; see {@link waitsForApproval}. */
3990
+ waitsForApproval(taskId: string): boolean;
3756
3991
  /** What the user approved to run (ADR-0029): a start of their own approves the task and its subtasks. */
3757
3992
  private approve;
3993
+ /**
3994
+ * A task that leaves the plan takes its approval with it, whichever route
3995
+ * removed it: an edit, a merge or split, a whole plan that leaves it out.
3996
+ * Approval is of the task the user saw, and a planner may later write a new
3997
+ * task under the same id (ADR-0029).
3998
+ */
3999
+ private keepApprovals;
3758
4000
  private approveTask;
3759
4001
  /**
3760
4002
  * Answer an outstanding approval. Every surface funnels here — the web
@@ -3764,6 +4006,10 @@ declare class Session {
3764
4006
  resolveApproval(id: string, answer: ApprovalAnswer): boolean;
3765
4007
  /** Requests still waiting for an answer, replayed to a surface that connects mid-prompt. */
3766
4008
  outstandingApprovals(): PendingApproval[];
4009
+ /** The planner's requests still waiting, as their cards were announced — what a surface (re)joining replays. */
4010
+ announcedApprovals(): Extract<SessionMessage, {
4011
+ type: 'approval_request';
4012
+ }>[];
3767
4013
  /** Scopes the user granted this session — surfaced so a UI can show what is already allowed. */
3768
4014
  approvedScopes(): string[];
3769
4015
  /** The stable id this session persists under — matches the host's id when one was provided. */
@@ -3847,20 +4093,64 @@ declare class Session {
3847
4093
  /** See {@link TaskOrchestrator.hasLiveWork} — a spawned runner, not merely an armed scheduler. */
3848
4094
  get isExecuting(): boolean;
3849
4095
  get status(): 'approved' | 'running' | 'completed';
3850
- /** Whether a planner turn — a reply, a compaction, plan generation — holds the conversation. */
4096
+ /**
4097
+ * Throws {@link PlannerNotReadyError} when the planner this session's config
4098
+ * selects cannot plan. Judged on the session's own config, so a model
4099
+ * override sent with the request is the one judged; every planner turn
4100
+ * passes it, and a host may call it first to refuse before it builds on
4101
+ * the session.
4102
+ */
4103
+ assertPlannerReady(): void;
4104
+ /**
4105
+ * The planner gate for a turn {@link PlanTurns} does not open — an opening,
4106
+ * plan generation, a compaction — the same one its turns pass: wait for the
4107
+ * installed-planner probe, then judge the planner in use now. A wait is
4108
+ * ended at once, not when the probe answers, by its caller's abort, a Stop,
4109
+ * a newer goal or its plan scope ending ({@link endWaiting}): a turn that
4110
+ * only learnt of these afterwards would open on a session that moved on.
4111
+ *
4112
+ * Null when the turn may open at once: awaited regardless, the turn would
4113
+ * take the conversation a tick late, and a message sent alongside it would
4114
+ * no longer be refused as one sent during it.
4115
+ */
4116
+ private plannerTurnMayOpen;
4117
+ /** End every turn waiting at the planner gate before it opens; false when none was. */
4118
+ private endWaiting;
4119
+ /**
4120
+ * Whether a planner turn — a reply, a compaction, plan generation — holds
4121
+ * the conversation, or one admitted waits at the planner gate to: a host
4122
+ * that read the wait as idle sent a follow-up as a new goal.
4123
+ */
3851
4124
  get isPlannerBusy(): boolean;
3852
4125
  /**
3853
4126
  * Stop the planner turn in flight. It still settles — a backend hands back
3854
- * what it had — and ends as stopped. False when no turn is in flight.
4127
+ * what it had — and ends as stopped. A turn still waiting at the planner
4128
+ * gate is stopped too, before it opens, and so is every message sent behind
4129
+ * either: the user stopped the planner, not one turn of it. False when
4130
+ * there was neither.
3855
4131
  */
3856
4132
  abortPlannerTurn(): boolean;
3857
- generatePlan(goal: string, runners: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
4133
+ /**
4134
+ * The runners a first turn may plan for. None requested means every enabled
4135
+ * one, read here, after the planner gate: until the installed-agent probe
4136
+ * answers, the enabled default is a stale guess a request must not freeze.
4137
+ */
4138
+ private chosenRunners;
4139
+ generatePlan(goal: string, runners?: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
3858
4140
  /**
3859
4141
  * Kick off the planner conversation (ADR-0002): research + the first planner
3860
4142
  * message. The conversation itself — transcript, live model context, turn
3861
4143
  * settlement — is {@link PlannerConversation}'s; the Session hosts it.
3862
4144
  */
3863
- startPlanning(goal: string, runners: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
4145
+ startPlanning(goal: string, runners?: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
4146
+ /**
4147
+ * A message sent while the conversation's opening is pending answers it, so
4148
+ * it goes after it rather than replacing the goal or being refused: held
4149
+ * while the opening waits at the planner gate — there is no conversation
4150
+ * yet to queue it on — and queued behind it once it holds the conversation.
4151
+ * Null with no opening pending.
4152
+ */
4153
+ private behindOpening;
3864
4154
  /**
3865
4155
  * Every subsequent user reply in the planning conversation — clarifying
3866
4156
  * answers, outline confirm, a message during a run. One branch, no phase
@@ -4036,7 +4326,7 @@ declare class Session {
4036
4326
  * last did is not kept, so it is not here.
4037
4327
  */
4038
4328
  runSnapshot(): RunView;
4039
- /** The dependencies a task waits on at its merge gate (ADR-0020); empty when it waits for no Merge all. */
4329
+ /** The ancestors a task waits on at its merge gate (ADR-0020); empty when it waits for no Merge all. */
4040
4330
  mergeGate(taskId: string): string[];
4041
4331
  /** What Merge all would merge now; null once everything landed is merged. */
4042
4332
  runMergeView(): RunMergeView | null;
@@ -4063,7 +4353,15 @@ declare class Session {
4063
4353
  private requireSettledRun;
4064
4354
  /** Add the task that merges a conflicted task's branch by hand; see {@link PlanEditor.addConflictResolver}. */
4065
4355
  resolveConflictAsTask(taskId: string): Promise<LegacyPlanState | null>;
4356
+ /**
4357
+ * The user's Stop (ADR-0029): the run, and every start admitted before it —
4358
+ * one queued behind a planner turn's edit, one waiting on its card, one
4359
+ * still opening its run. A card still asking is cleared, so its start
4360
+ * answers as stopped rather than waiting on a question that no longer stands.
4361
+ */
4066
4362
  stopExecution(): void;
4363
+ /** Something will start without being asked again; see {@link TaskOrchestrator.startsPending}. */
4364
+ get startsPending(): boolean;
4067
4365
  /**
4068
4366
  * Run a user control and save what it changed before any surface hears of
4069
4367
  * it. Not a status hold, as {@link saved} is: these await spawns and git, so
@@ -4135,6 +4433,66 @@ declare class PlanEditError extends Error {
4135
4433
  constructor(message: string);
4136
4434
  }
4137
4435
 
4436
+ /** What the preflight reads: the planner choice and whatever it needs to be reachable. */
4437
+ type PlannerReadinessConfig = Pick<IConfig, 'aiProvider' | 'planningModel' | 'openaiCompatibleBaseUrl' | 'getProviderApiKey'>;
4438
+ /**
4439
+ * Why the selected planner cannot plan yet, as data. Each surface words it with
4440
+ * its own command spelling (`describePlannerNotReady`), so a daemon, a chat and
4441
+ * a shell script can all say the same thing without sharing a syntax.
4442
+ */
4443
+ type PlannerNotReady = {
4444
+ code: 'no_key';
4445
+ provider: AiProvider;
4446
+ label: string;
4447
+ keyEnvVar: string;
4448
+ } | {
4449
+ code: 'no_base_url';
4450
+ provider: AiProvider;
4451
+ label: string;
4452
+ baseUrlEnvVar: string;
4453
+ } | {
4454
+ code: 'no_model';
4455
+ provider: AiProvider;
4456
+ label: string;
4457
+ };
4458
+ /**
4459
+ * What the selected planner still needs before it can plan, or null when it is
4460
+ * ready. There are two ways in (ADR-0009), and only one of them involves a
4461
+ * credential: a harness planner drives a coding agent already installed on the
4462
+ * machine, authenticated by the user's own subscription, so demanding an API
4463
+ * key of it turns a working setup into a wall. Its model is optional too: an
4464
+ * unset id means "the agent's own default".
4465
+ */
4466
+ declare function plannerNotReady(config: PlannerReadinessConfig): PlannerNotReady | null;
4467
+ /**
4468
+ * `plannerNotReady` judged on a host's own config — the one way every host
4469
+ * builds the preflight's input, so none can hand it a key the selected
4470
+ * planner's transport will not read (a stored OpenRouter key passing for an
4471
+ * OpenAI planner, which then failed inside the transport). Every planner turn
4472
+ * judges through this too, so none can let through what another refuses.
4473
+ */
4474
+ declare function plannerNotReadyFor(config: Pick<IConfig, 'aiProvider' | 'orchestratorModel' | 'planningModel' | 'openaiCompatibleBaseUrl' | 'getProviderApiKey'>): PlannerNotReady | null;
4475
+ /** How one surface spells the commands a not-ready message points at. */
4476
+ interface PlannerCommandSyntax {
4477
+ pickPlanner: string;
4478
+ setKey(provider: AiProvider): string;
4479
+ setModel: string;
4480
+ }
4481
+ declare const TERMINAL_UI_COMMANDS: PlannerCommandSyntax;
4482
+ /** The VS Code chat shares the terminal's slash commands, except that its `/model` needs `set`. */
4483
+ declare const CHAT_COMMANDS: PlannerCommandSyntax;
4484
+ declare const HEADLESS_CLI_COMMANDS: PlannerCommandSyntax;
4485
+ declare function describePlannerNotReady(reason: PlannerNotReady, commands: PlannerCommandSyntax): string;
4486
+ /**
4487
+ * A planner turn refused before it began. Carries the reason as data so a
4488
+ * client that spells commands differently (the headless CLI) can re-word it;
4489
+ * the message is the terminal UI's spelling, which is what most clients show.
4490
+ */
4491
+ declare class PlannerNotReadyError extends Error {
4492
+ readonly reason: PlannerNotReady;
4493
+ constructor(reason: PlannerNotReady);
4494
+ }
4495
+
4138
4496
  /** What the user last picked for one planner backend. */
4139
4497
  interface PlannerModelChoice {
4140
4498
  model: string;
@@ -4210,6 +4568,8 @@ type DaemonErrorCode = 'session_not_found' | 'task_not_found' | 'no_plan' | 'alr
4210
4568
  | 'planner_turn_stopped'
4211
4569
  /** The planner turn settled after its plan was dropped; nothing it produced was kept. */
4212
4570
  | 'planner_turn_discarded'
4571
+ /** The selected planner cannot plan yet (no key, no base URL, no model); `plannerNotReady` says which. */
4572
+ | 'planner_not_ready'
4213
4573
  /** The request asked for something the plan, task or conversation does not allow. */
4214
4574
  | 'refused' | 'checkpoint_not_waiting' | 'approval_not_outstanding';
4215
4575
  /** The body of every non-2xx answer a route gives. */
@@ -4218,6 +4578,8 @@ interface ErrorBody {
4218
4578
  code?: DaemonErrorCode;
4219
4579
  /** Set with `workspace_not_a_project`: the directory the daemon refused, so a client can offer to initialize it. */
4220
4580
  workspace?: string;
4581
+ /** Set with `planner_not_ready`: the reason as data, so a client can word it in its own commands. */
4582
+ plannerNotReady?: PlannerNotReady;
4221
4583
  }
4222
4584
  interface OkResponse {
4223
4585
  ok: boolean;
@@ -4374,15 +4736,36 @@ interface ApprovalAnswerResponse extends OkResponse {
4374
4736
  granted: boolean;
4375
4737
  decision: ApprovalDecision['decision'];
4376
4738
  }
4739
+ /**
4740
+ * Where a frame stands in its session's broadcast stream. A client holding
4741
+ * several sockets on one session gets every broadcast on each, and a frame's
4742
+ * content is no identity: two clears of a held edit are the same JSON. `seq`
4743
+ * rises by one per broadcast of the session for as long as the daemon runs,
4744
+ * whichever Session object holds the id; `stream` names the daemon process,
4745
+ * so a restarted daemon's numbering is never compared with the last one's.
4746
+ */
4747
+ interface StreamStamp {
4748
+ stream: string;
4749
+ seq: number;
4750
+ }
4751
+ /** A broadcast as the session's socket carries it. Unstamped from a daemon older than the stamp. */
4752
+ type SessionFrame = (SessionMessage | SessionNotice) & Partial<StreamStamp>;
4753
+ type ApprovalRequestMessage = Extract<SessionMessage, {
4754
+ type: 'approval_request';
4755
+ }>;
4377
4756
  /**
4378
4757
  * What a session's socket sends right after `connected`: its run as it stands,
4379
- * so a client that joins mid-run has the run view before the next update.
4380
- * Every frame after it is a `SessionMessage` or `SessionNotice`.
4758
+ * so a client that joins mid-run has the run view before the next update —
4759
+ * the held edit's preview included — and the planner's approval requests
4760
+ * still waiting, which no later frame would announce again. `seq` is the last
4761
+ * broadcast it accounts for. Every frame after it is a {@link SessionFrame}.
4381
4762
  */
4382
- interface RunSnapshotFrame {
4763
+ interface RunSnapshotFrame extends Partial<StreamStamp> {
4383
4764
  type: 'run_snapshot';
4384
4765
  sessionId: string;
4385
4766
  view: RunView;
4767
+ /** Absent from a daemon older than the field: nothing is known, not "none waiting". */
4768
+ approvals?: ApprovalRequestMessage[];
4386
4769
  }
4387
4770
 
4388
4771
  /**
@@ -5197,6 +5580,10 @@ interface PlannerSelectionState {
5197
5580
  model: string;
5198
5581
  effort: string;
5199
5582
  }
5583
+ /** The state a change is judged against, and where its model came from; absent means the user's own. */
5584
+ interface PlannerSelectionCurrent extends PlannerSelectionState {
5585
+ source?: PlannerModelSource;
5586
+ }
5200
5587
  /** What one user action asked for; an absent field leaves that part alone. */
5201
5588
  interface PlannerSelectionChange {
5202
5589
  provider?: PlannerBackendId;
@@ -5217,7 +5604,7 @@ type PlannerModelLookup = Pick<PlannerModelStore, 'getPlannerModel'>;
5217
5604
  * effect after the change, and writes back what this returns. It never
5218
5605
  * stores anything itself, so each surface keeps only its storage adapter.
5219
5606
  */
5220
- declare function selectPlanner(current: PlannerSelectionState, change: PlannerSelectionChange, memory: PlannerModelLookup, catalog: PlannerModelCandidate[]): PlannerSelectionResult;
5607
+ declare function selectPlanner(current: PlannerSelectionCurrent, change: PlannerSelectionChange, memory: PlannerModelLookup, catalog: PlannerModelCandidate[]): PlannerSelectionResult;
5221
5608
 
5222
5609
  /** How many AI tasks may run at once: `ORDEWELL_MAX_PARALLEL`, `/parallel`, `ordewell.maxParallelSessions`. */
5223
5610
  declare const DEFAULT_MAX_PARALLEL = 5;
@@ -5229,4 +5616,4 @@ declare const DEFAULT_MAX_PARALLEL = 5;
5229
5616
  */
5230
5617
  declare function parseMaxParallel(value: unknown): number | null;
5231
5618
 
5232
- export { ALL_PROVIDERS, AbstractRunner, AbstractRunnerSession, type AdoptSessionResponse, type Adr0013IsolationRun, type Adr0013PlanIsolation, type Adr0013TaskRecord, AgentAdapter, AgentEvent, AgentProcessDeps, AgentStartOptions, AiProvider, AlreadyExecutingError, ApplyTaskOpsResult, ApprovalAnswer, type ApprovalAnswerResponse, ApprovalDecision, ApprovalModeSetting, ApprovalPolicy, ApprovalRequest, type ApprovalsResponse, type AskOptions, BaseAiService, BaseConfig, BaseFileSystem, BufferedTaskOutputSource, type ByPlannerBackend, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CODEX_SANDBOX_DOCS, CODEX_SANDBOX_OFF_LINE, type CachedPage, type CancelPlanningResponse, type CancelResumeResponse, type CappedRows, CheckpointAnswer, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, CodexSandboxAvailability, type CommandDescriptor, CommandLineTooLongError, type CommandOutcome, type CommandsResponse, type Consent, ConsoleLogger, ContextCollector, type Continuability, ConversationBusyError, type ConversationCompactResponse, type ConversationCompaction, ConversationEditError, type ConversationFork, type ConversationForkResponse, ConversationMessage, type ConversationRequest, type ConversationRewind, type ConversationRewindResponse, type ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DEFAULT_MAX_PARALLEL, DEFAULT_WEB_READ_BUDGET, type DaemonErrorCode, type DecideOptions, type DirEntry, DiscoveredModel, DuckDuckGoSearchProvider, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ErrorBody, type ExecImpl, ExecutableNotFoundError, type ExecuteResponse, ExecutionActor, type ExecutionCommand, ExecutionCommandName, ExecutionCommands, type ExecutionHost, ExecutionRecord, FindSymbolOptions, type ForceSendResponse, GREP_PCRE_PROBE_ARGS, GeminiService, type GeneratePlanResponse, type GitExecFn, GlobOptions, GlobalRunSettings, type GrepInvocation, GrepOptions, type GrepRegex, GuardTarget, GuardTrip, HARNESS_PLANNER_REASON, type HasBinFn, HttpWebFetcher, type HttpWebFetcherOptions, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, INotification, IRunner, IRunnerSession, type ISearchProvider, IWorktreeIsolation, type IsolationDiffResponse, IsolationLandedTask, type IsolationMergeResponse, IsolationMergeResult, IsolationTaskStatus, IsolationView, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, type LiveOutputLookup, LiveTail, LiveTailOptions, type LoopGuard, type MappedTool, type MergeGateEntry, type MergeGateResponse, ModelResolver, type ModelResolverDeps, type ModelsResponse, NoPlanError, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OUTPUT_LINES_DEFAULT, OUTPUT_LINES_MAX, type OkResponse, OpenAiService, OpenCodeAdapter, OrchestratorObserver, OrchestratorOption, OrdewellMcpServer, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanIsolation, type PlanRequest, type PlanResponse, PlanState, PlanStore, Planner, type PlannerBackendEntry, PlannerBackendId, type PlannerModelCandidate, type PlannerModelChoice, type PlannerModelLookup, PlannerModelMemory, type PlannerModelRecall, type PlannerModelStore, type PlannerSelectionChange, type PlannerSelectionResult, type PlannerSelectionState, type PlannerSubmission, PlannerToolHandler, PlannerTurnDiscardedError, PlannerTurnStoppedError, type PlannerUsability, PlannerUsage, type PrdBlock, type PrdResponse, ProviderModelLists, type ProviderRegistration, QueuedTaskMessage, ReadFileOpts, type RemoveMessageResponse, type ResearchChat, ResearchLogEntry, ResearchShell, type ResearchTurn, type ResolveConflictResponse, type RewindTarget, type RewindTargetsResponse, RunMergeView, type RunSnapshotFrame, RunView, RunnerApprovals, RunnerCommand, RunnerId, RunnerInstallation, RunnerManifest, RunnerModeInfo, RunnerRegistry, type RunnerSpawnOptions, type RunnersResponse, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STATE_DIR_IGNORE, STOPPED_TOOL_RESULT, SUPERVISOR_LEVELS, SYMBOL_LANGUAGES, type SaveSession, type SearchHit, type SearchOutcome, type SearchPage, type SearchTransport, Session, SessionBroadcaster, type SessionData, type SessionDeps, type SessionListResponse, SessionMessage, type SessionMeta, SessionNotFoundError, SessionNotice, type SessionPlanner, type SessionResponse, type SessionRuntimeSettings, type SettingsResponse, type SettingsUpdateResponse, SkillInfo, type SkillInvocation, SkillLoad, SkillsService, type SpawnSpec, StdioAgentAdapter, type StopResponse, StructuredEvent, StructuredRunner, type StructuredRunnerDeps, StructuredSession, StructuredTurnEnd, SupervisorLevel, type SupervisorPolicy, SurfacePlan, SurfacePlanState, TASK_QUERY_ANSWER_MAX_CHARS, TASK_QUERY_ANSWER_OR_OPS, TASK_QUERY_FIELDS, TASK_QUERY_PROTOCOL, TASK_QUERY_REMINDER, Task, TaskCompleteArgs, type TaskLogAttemptsResponse, TaskLogEvent, type TaskLogFile, type TaskLogLocation, TaskLogRecorder, type TaskLogRecorderDeps, type TaskLogResponse, TaskMessageFrom, type TaskMessageResponse, TaskModeAgentAdapter, TaskOp, TaskOrchestrator, TaskOutputSource, type TaskQuery, type TaskQueryCatalog, type TaskQueryField, TaskRunnerFlags, TaskStartOptions, TaskTokenScope, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, UsageRecord, UserSettings, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WebRead, type WebReadDecision, type WebResponse, WebResponseCache, type WebResponseCacheOptions, type WebTransport, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, type WorkspacesResponse, type WorktreeIsolationDeps, abbreviateHome, admitSettingsEnv, applyHeadLimit, assertWorkspaceExists, assertWorkspaceIsProject, augmentedPath, bearerHeaderValue, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, canContinue, clearAugmentedPathCache, clearDaemonToken, clearState, clipboardCopyCommand, codexSandboxNotice, configuredProviders, continuability, createAiService, createSession, createTaskAdapter, createWorktreeIsolation, daemonTokenPath, defaultLogger, definitionPattern, deleteSession, describeMergeResult, discoverGeminiModels, ensureDir, ensurePrivateDir, ensureStateDirIgnored, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, formatSearchOutput, getLatestSession, getProviderMeta, getStateDir, globalDataDir, grantScopeFor, grepRegexFromProbe, idSegment, includeGlobFor, isApiProvider, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlannerBackend, killTree, languageForId, listSessions, listTaskLogAttempts, listTree, loadSession, loadSessionPlanState, loadState, looksLikeChallenge, mapAgentTool, migrateOldConfigDir, migratePlanIsolation, mintDaemonToken, mintSessionId, normalizeAgentArgs, normalizeGeminiModel, openTaskLog, parseMaxParallel, parseSearchHits, parseTaskQueryJson, planDirectLaunch, plannerBackendEntries, plannerMessage, plannerTranscript, prefixModelId, providerForRunner, readDaemonToken, readTaskLog, referencePattern, removedPluginNotice, renderTaskQueryAnswer, resolveProviderFromPrefix, resolveSkillInvocation, resolveTaskRunnerFlags, resolveWithin, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, selectPlanner, sessionDataDir, sessionRuntimeSettings, sharedSearchProvider, sharedWebResponseCache, stateExists, stripAnsi, stripModelPrefix, supportsTaskMode, taskQuerySignature, textHasTaskQuery, tokenSubprotocols, tokensMatch, wellKnownBinDirs, windowsCommandLine, withPath, writePrivateFile };
5619
+ export { ALL_PROVIDERS, AbstractRunner, AbstractRunnerSession, type AdoptSessionResponse, type Adr0013IsolationRun, type Adr0013PlanIsolation, type Adr0013TaskRecord, AgentAdapter, AgentEvent, AgentProcessDeps, AgentStartOptions, AiProvider, AlreadyExecutingError, ApplyTaskOpsResult, ApprovalAnswer, type ApprovalAnswerResponse, ApprovalDecision, ApprovalModeSetting, ApprovalPolicy, ApprovalRequest, type ApprovalRequestMessage, type ApprovalsResponse, type AskOptions, BaseAiService, BaseConfig, BaseFileSystem, BufferedTaskOutputSource, type ByPlannerBackend, CHAT_COMMANDS, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CODEX_SANDBOX_DOCS, CODEX_SANDBOX_OFF_LINE, type CachedPage, type CancelPlanningResponse, type CancelResumeResponse, type CappedRows, CheckpointAnswer, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, CodexSandboxAvailability, type CommandDescriptor, CommandLineTooLongError, type CommandOutcome, type CommandsResponse, type ConfiguredPlanner, type Consent, ConsoleLogger, ContextCollector, type Continuability, ConversationBusyError, type ConversationCompactResponse, type ConversationCompaction, ConversationEditError, type ConversationFork, type ConversationForkResponse, ConversationMessage, type ConversationRequest, type ConversationRewind, type ConversationRewindResponse, type ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DEFAULT_MAX_PARALLEL, DEFAULT_WEB_READ_BUDGET, type DaemonErrorCode, type DecideOptions, type DirEntry, DiscoveredModel, DuckDuckGoSearchProvider, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ErrorBody, type ExecImpl, ExecutableNotFoundError, type ExecuteResponse, ExecutionActor, type ExecutionCommand, ExecutionCommandName, ExecutionCommands, type ExecutionHost, ExecutionRecord, FindSymbolOptions, type ForceSendResponse, GREP_PCRE_PROBE_ARGS, GeminiService, type GeneratePlanResponse, type GitExecFn, GlobOptions, GlobalRunSettings, type GrepInvocation, GrepOptions, type GrepRegex, GuardTarget, GuardTrip, HARNESS_PLANNER_REASON, HEADLESS_CLI_COMMANDS, type HasBinFn, HttpWebFetcher, type HttpWebFetcherOptions, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, INotification, IRunner, IRunnerSession, type ISearchProvider, IWorktreeIsolation, type IsolationDiffResponse, IsolationLandedTask, type IsolationMergeResponse, IsolationMergeResult, IsolationTaskStatus, IsolationView, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, type LiveOutputLookup, LiveTail, LiveTailOptions, type LoopGuard, type MappedTool, type MergeGateEntry, type MergeGateResponse, ModelResolver, type ModelResolverDeps, type ModelsResponse, NoPlanError, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OUTPUT_LINES_DEFAULT, OUTPUT_LINES_MAX, type OkResponse, OpenAiService, OpenCodeAdapter, OrchestratorObserver, OrchestratorOption, OrdewellMcpServer, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanIsolation, type PlanRequest, type PlanResponse, PlanState, PlanStatus, PlanStore, Planner, type PlannerBackendEntry, PlannerBackendId, type PlannerChoice, type PlannerCommandSyntax, type PlannerModelCandidate, type PlannerModelChoice, type PlannerModelLookup, PlannerModelMemory, type PlannerModelRecall, type PlannerModelSource, type PlannerModelStore, type PlannerNotReady, PlannerNotReadyError, type PlannerReadinessConfig, type PlannerSelectionChange, type PlannerSelectionCurrent, type PlannerSelectionResult, type PlannerSelectionState, type PlannerSubmission, PlannerToolHandler, PlannerTurnDiscardedError, PlannerTurnStoppedError, type PlannerUsability, PlannerUsage, type PrdBlock, type PrdResponse, ProviderModelLists, type ProviderRegistration, QueuedTaskMessage, ReadFileOpts, type RemoveMessageResponse, type ResearchChat, ResearchLogEntry, ResearchShell, type ResearchTurn, type ResolveConflictResponse, type ResolvedChoice, type ResolvedPlanner, type RewindTarget, type RewindTargetsResponse, RunMergeView, type RunSnapshotFrame, RunView, RunnerApprovals, RunnerCommand, RunnerId, RunnerInstallation, RunnerManifest, RunnerModeInfo, RunnerRegistry, type RunnerSpawnOptions, type RunnersResponse, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STATE_DIR_IGNORE, STOPPED_TOOL_RESULT, SUPERVISOR_LEVELS, SYMBOL_LANGUAGES, type SaveSession, type SearchHit, type SearchOutcome, type SearchPage, type SearchTransport, Session, SessionBroadcaster, type SessionData, type SessionDeps, type SessionFrame, type SessionListResponse, SessionMessage, type SessionMeta, SessionNotFoundError, SessionNotice, type SessionPlanner, type SessionResponse, type SessionRuntimeSettings, type SettingsResponse, type SettingsUpdateResponse, SkillInfo, type SkillInvocation, SkillLoad, SkillsService, type SpawnSpec, StartAdmission, StdioAgentAdapter, type StopResponse, type StreamStamp, StructuredEvent, StructuredRunner, type StructuredRunnerDeps, StructuredSession, StructuredTurnEnd, SupervisorLevel, type SupervisorPolicy, SurfacePlan, SurfacePlanState, TASK_QUERY_ANSWER_MAX_CHARS, TASK_QUERY_ANSWER_OR_OPS, TASK_QUERY_FIELDS, TASK_QUERY_PROTOCOL, TASK_QUERY_REMINDER, TERMINAL_UI_COMMANDS, Task, TaskCompleteArgs, type TaskLogAttemptsResponse, TaskLogEvent, type TaskLogFile, type TaskLogLocation, TaskLogRecorder, type TaskLogRecorderDeps, type TaskLogResponse, TaskMessageFrom, type TaskMessageResponse, TaskModeAgentAdapter, TaskOp, TaskOrchestrator, TaskOutputSource, type TaskQuery, type TaskQueryCatalog, type TaskQueryField, TaskRunnerFlags, TaskStartOptions, TaskTokenScope, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, UsageRecord, UserSettings, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WebRead, type WebReadDecision, type WebResponse, WebResponseCache, type WebResponseCacheOptions, type WebTransport, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, type WorkspacesResponse, type WorktreeIsolationDeps, abbreviateHome, admitSettingsEnv, applyHeadLimit, assertWorkspaceExists, assertWorkspaceIsProject, augmentedPath, bearerHeaderValue, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, canContinue, clearAugmentedPathCache, clearDaemonToken, clearState, clipboardCopyCommand, codexSandboxNotice, configuredProviders, continuability, createAiService, createSession, createTaskAdapter, createWorktreeIsolation, daemonTokenPath, defaultEnabledRunners, defaultLogger, definitionPattern, deleteSession, describeMergeResult, describePlannerNotReady, detectInstalledPlanner, discoverGeminiModels, ensureDir, ensurePrivateDir, ensureStateDirIgnored, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, findInstalledPlanner, formatSearchOutput, getLatestSession, getProviderMeta, getStateDir, globalDataDir, grantScopeFor, grepRegexFromProbe, idSegment, includeGlobFor, installedPlannerAnswered, installedPlannerDetected, isApiProvider, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlannerBackend, isVendorModelFor, killTree, languageForId, listSessions, listTaskLogAttempts, listTree, loadSession, loadSessionPlanState, loadState, looksLikeChallenge, mapAgentTool, migrateOldConfigDir, migratePlanIsolation, mintDaemonToken, mintSessionId, normalizeAgentArgs, normalizeGeminiModel, openTaskLog, parseMaxParallel, parseSearchHits, parseTaskQueryJson, planDirectLaunch, plannerBackendEntries, plannerMessage, plannerNotReady, plannerNotReadyFor, plannerTranscript, prefixModelId, providerForRunner, readDaemonToken, readTaskLog, recordInstalledPlanner, recordedInstalledPlanner, referencePattern, removedPluginNotice, renderTaskQueryAnswer, resetInstalledPlanner, resolveProviderFromPrefix, resolveSkillInvocation, resolveTaskRunnerFlags, resolveWithin, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, selectPlanner, sessionDataDir, sessionRuntimeSettings, sharedSearchProvider, sharedWebResponseCache, stateExists, stripAnsi, stripModelPrefix, supportsTaskMode, taskQuerySignature, textHasTaskQuery, tokenSubprotocols, tokensMatch, wellKnownBinDirs, windowsCommandLine, withPath, writePrivateFile };