@ordewell/core 0.5.6 → 0.6.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 (47) hide show
  1. package/dist/{IFileSystem-C0l-4MGT.d.ts → IFileSystem-DuEiG_kA.d.ts} +1 -1
  2. package/dist/{IFileSystem-BkPX7mLD.d.mts → IFileSystem-d_SV7jAH.d.mts} +1 -1
  3. package/dist/{ModeResolver-CjpG5Wli.d.ts → ModeResolver-DIReYAOq.d.mts} +6 -2
  4. package/dist/{ModeResolver--16lh7dS.d.mts → ModeResolver-DXxV4n_V.d.ts} +6 -2
  5. package/dist/{Task-Dyxp67s2.d.mts → Task-ib_U0YP7.d.mts} +102 -16
  6. package/dist/{Task-Dyxp67s2.d.ts → Task-ib_U0YP7.d.ts} +102 -16
  7. package/dist/{chunk-ROVYWEBI.mjs → chunk-I6U3PVHL.mjs} +41 -17
  8. package/dist/chunk-I6U3PVHL.mjs.map +1 -0
  9. package/dist/{chunk-EDGUFCIR.mjs → chunk-JRZPSNRO.mjs} +7 -3
  10. package/dist/chunk-JRZPSNRO.mjs.map +1 -0
  11. package/dist/{chunk-JBEFAJ2W.mjs → chunk-M4KXBEFJ.mjs} +23 -3
  12. package/dist/chunk-M4KXBEFJ.mjs.map +1 -0
  13. package/dist/{chunk-C44UWIAD.mjs → chunk-N66ZHFGN.mjs} +2 -2
  14. package/dist/chunk-N66ZHFGN.mjs.map +1 -0
  15. package/dist/index.d.mts +325 -67
  16. package/dist/index.d.ts +325 -67
  17. package/dist/index.js +5741 -4489
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +5368 -4163
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/order-labels.d.mts +1 -1
  22. package/dist/order-labels.d.ts +1 -1
  23. package/dist/{parsing-EcmCsF1y.d.ts → parsing-C8Z22twN.d.ts} +2 -2
  24. package/dist/{parsing-DPEpAszP.d.mts → parsing-DjRJJX-y.d.mts} +2 -2
  25. package/dist/parsing.d.mts +3 -3
  26. package/dist/parsing.d.ts +3 -3
  27. package/dist/parsing.js +5 -2
  28. package/dist/parsing.js.map +1 -1
  29. package/dist/parsing.mjs +2 -2
  30. package/dist/{plan-utils-BAvW3hvl.d.mts → plan-utils-D4ioaM8q.d.mts} +25 -4
  31. package/dist/{plan-utils-BMyEiDKv.d.ts → plan-utils-DvHPzAfV.d.ts} +25 -4
  32. package/dist/plan-utils.d.mts +3 -3
  33. package/dist/plan-utils.d.ts +3 -3
  34. package/dist/plan-utils.js +2 -1
  35. package/dist/plan-utils.js.map +1 -1
  36. package/dist/plan-utils.mjs +2 -2
  37. package/dist/testing.d.mts +14 -5
  38. package/dist/testing.d.ts +14 -5
  39. package/dist/testing.js +30 -3
  40. package/dist/testing.js.map +1 -1
  41. package/dist/testing.mjs +30 -3
  42. package/dist/testing.mjs.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/chunk-C44UWIAD.mjs.map +0 -1
  45. package/dist/chunk-EDGUFCIR.mjs.map +0 -1
  46. package/dist/chunk-JBEFAJ2W.mjs.map +0 -1
  47. package/dist/chunk-ROVYWEBI.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { I as IApproval } from './Task-Dyxp67s2.js';
1
+ import { I as IApproval } from './Task-ib_U0YP7.js';
2
2
 
3
3
  interface ToolOutcome {
4
4
  success: boolean;
@@ -1,4 +1,4 @@
1
- import { I as IApproval } from './Task-Dyxp67s2.mjs';
1
+ import { I as IApproval } from './Task-ib_U0YP7.mjs';
2
2
 
3
3
  interface ToolOutcome {
4
4
  success: boolean;
@@ -1,4 +1,4 @@
1
- import { aG as RunnerId } from './Task-Dyxp67s2.js';
1
+ import { aG as RunnerId } from './Task-ib_U0YP7.mjs';
2
2
 
3
3
  interface RunnerModeInfo {
4
4
  id: string;
@@ -38,7 +38,11 @@ declare function resolveDefaultMode(modes: RunnerModeInfo[] | undefined, autonom
38
38
  * either toggle.
39
39
  */
40
40
  declare function filteredBuildModes(modes: RunnerModeInfo[], autonomousDefault: boolean): RunnerModeInfo[];
41
+ /** The user-facing name of the `autonomousMode` boolean's two states. */
42
+ declare function autonomyLevelLabel(autonomous: boolean): 'Full auto' | 'Auto';
43
+ /** `full`/`auto` name the levels; `on`/`off` are the toggle's old words for them. Null for anything else. */
44
+ declare function parseAutonomyLevel(arg: string | undefined): boolean | null;
41
45
  declare function buildModeGuide(runnerModes: Record<RunnerId, RunnerModeInfo[]>, autonomousDefault?: boolean): string;
42
46
  declare function resolveTaskMode(emittedMode: string | undefined, runnerId: RunnerId, runnerModes: Record<RunnerId, RunnerModeInfo[]> | undefined, autonomousDefault?: boolean): string;
43
47
 
44
- export { type ManifestLookup as M, type RunnerModeInfo as R, resolveTaskMode as a, buildModeGuide as b, runnerModesFrom as c, filteredBuildModes as f, resolveDefaultMode as r };
48
+ export { type ManifestLookup as M, type RunnerModeInfo as R, autonomyLevelLabel as a, buildModeGuide as b, resolveTaskMode as c, runnerModesFrom as d, filteredBuildModes as f, parseAutonomyLevel as p, resolveDefaultMode as r };
@@ -1,4 +1,4 @@
1
- import { aG as RunnerId } from './Task-Dyxp67s2.mjs';
1
+ import { aG as RunnerId } from './Task-ib_U0YP7.js';
2
2
 
3
3
  interface RunnerModeInfo {
4
4
  id: string;
@@ -38,7 +38,11 @@ declare function resolveDefaultMode(modes: RunnerModeInfo[] | undefined, autonom
38
38
  * either toggle.
39
39
  */
40
40
  declare function filteredBuildModes(modes: RunnerModeInfo[], autonomousDefault: boolean): RunnerModeInfo[];
41
+ /** The user-facing name of the `autonomousMode` boolean's two states. */
42
+ declare function autonomyLevelLabel(autonomous: boolean): 'Full auto' | 'Auto';
43
+ /** `full`/`auto` name the levels; `on`/`off` are the toggle's old words for them. Null for anything else. */
44
+ declare function parseAutonomyLevel(arg: string | undefined): boolean | null;
41
45
  declare function buildModeGuide(runnerModes: Record<RunnerId, RunnerModeInfo[]>, autonomousDefault?: boolean): string;
42
46
  declare function resolveTaskMode(emittedMode: string | undefined, runnerId: RunnerId, runnerModes: Record<RunnerId, RunnerModeInfo[]> | undefined, autonomousDefault?: boolean): string;
43
47
 
44
- export { type ManifestLookup as M, type RunnerModeInfo as R, resolveTaskMode as a, buildModeGuide as b, runnerModesFrom as c, filteredBuildModes as f, resolveDefaultMode as r };
48
+ export { type ManifestLookup as M, type RunnerModeInfo as R, autonomyLevelLabel as a, buildModeGuide as b, resolveTaskMode as c, runnerModesFrom as d, filteredBuildModes as f, parseAutonomyLevel as p, resolveDefaultMode as r };
@@ -7,13 +7,14 @@ import { EventEmitter } from 'events';
7
7
  * "run without isolation", while the others fall back to the shared
8
8
  * workspace root with a one-line notice.
9
9
  */
10
- type IsolationInactiveReason = 'disabled' | 'git-missing' | 'not-git' | 'no-commits' | 'dirty' | 'nested-repos';
10
+ type IsolationInactiveReason = 'disabled' | 'git-missing' | 'not-git' | 'no-commits' | 'dirty';
11
11
  /**
12
12
  * `repos` names, relative to the workspace, the repositories behind the answer:
13
13
  * when active, the ones that will isolate, with `shared` the paths every task
14
- * will share live; otherwise the nested ones `nested-repos` refuses, the dirty
15
- * ones of a `dirty` group, or the commitless ones of a `no-commits` group. A
16
- * group of one names none.
14
+ * will share live — loose entries of the workspace root, or, for a lone
15
+ * repository, the repositories nested inside it; otherwise the dirty ones of a
16
+ * `dirty` group, or the commitless ones of a `no-commits` group. A group of one
17
+ * names none.
17
18
  */
18
19
  type IsolationAvailability = {
19
20
  active: true;
@@ -27,7 +28,8 @@ type IsolationAvailability = {
27
28
  /**
28
29
  * Where a run's tasks work, as the planner is told it: the repos of the group
29
30
  * and the paths shared live between tasks. A lone repository is `['.']` with
30
- * nothing shared.
31
+ * nothing shared, unless it holds nested repositories, which are shared live
32
+ * and named in `shared`.
31
33
  */
32
34
  interface RepoGroupLayout {
33
35
  repos: string[];
@@ -49,13 +51,20 @@ interface IsolationTaskRepo {
49
51
  /** Absolute path of this repo's worktree: the task workspace joined with the repo's path. */
50
52
  worktree: string;
51
53
  /**
52
- * Paths bootstrapped from the real repo (symlinks, junctions, copies).
53
- * Recorded so the commit step can leave them out — a symlink is not matched
54
- * by a `node_modules/` ignore rule and would otherwise be committed.
54
+ * Paths linked from the real workspace and kept out of the task's commit:
55
+ * the artifacts bootstrapped from the real repo, and a lone repository's
56
+ * nested repositories (`run.shared`). Recorded because a symlink is not
57
+ * matched by an ignore rule such as `node_modules/` and would otherwise be
58
+ * committed.
55
59
  */
56
60
  linked: string[];
57
61
  /** Whether the task brought commits to this repo; unknown until it first integrates. */
58
62
  changed?: boolean;
63
+ /**
64
+ * The integration tip right after the task landed here: what the user's
65
+ * HEAD must contain for the task's work to count as merged (ADR-0020).
66
+ */
67
+ landedTip?: string;
59
68
  }
60
69
  interface IsolationTaskRecord {
61
70
  taskId: string;
@@ -99,6 +108,12 @@ interface IsolationTaskRecord {
99
108
  * names it in a group of one, prefixed with its repo's path in a group.
100
109
  */
101
110
  repairedFiles?: string[];
111
+ /**
112
+ * Set once the task's landed work is in the checked-out HEAD of every repo
113
+ * it changed — merged into the user's branch, by Merge all or by hand. What
114
+ * a merge gate waits for (ADR-0020).
115
+ */
116
+ inHead?: true;
102
117
  }
103
118
  /**
104
119
  * A task's landing in flight: each changed repo's integration tip from before
@@ -142,7 +157,9 @@ interface IsolationRun {
142
157
  /**
143
158
  * Workspace paths outside every isolated repo, linked live into each task
144
159
  * workspace: loose entries of the workspace root, the entries beside a deeper
145
- * repo, and `sharedRepos`. Empty for a group of one.
160
+ * repo, and `sharedRepos`. For a lone repository, the repositories nested
161
+ * inside it, which cannot be isolated with it and so are linked live instead.
162
+ * Empty when a group of one holds no nested repositories.
146
163
  */
147
164
  shared: string[];
148
165
  /** Repos of the group that could not be isolated — no commits, or git refused a worktree — and are among `shared`. */
@@ -296,6 +313,12 @@ interface IsolationPruneResult {
296
313
  title: string;
297
314
  }>;
298
315
  }
316
+ /**
317
+ * The tracked changes of a workspace's repos at one moment, against each
318
+ * repo's HEAD: repo path → file path → the content it held then. What an ops
319
+ * task's tree check compares against (ADR-0020).
320
+ */
321
+ type TreeSnapshot = Record<string, Record<string, string>>;
299
322
  interface IWorktreeIsolation {
300
323
  /**
301
324
  * A repo group with at least one repo to isolate, a clean tracked tree in
@@ -379,6 +402,24 @@ interface IWorktreeIsolation {
379
402
  pruneOrphans(run: IsolationRun): Promise<IsolationPruneResult>;
380
403
  /** Unified diff of each repo's integration branch against its base ref. */
381
404
  reviewDiff(run: IsolationRun): Promise<string>;
405
+ /**
406
+ * Mark the landed tasks whose work the checked-out HEAD now contains in
407
+ * every repo they changed (`git merge-base --is-ancestor`), and return their
408
+ * ids. Only adds marks: a task found merged stays merged.
409
+ */
410
+ findInHead(run: IsolationRun): Promise<string[]>;
411
+ /**
412
+ * The tracked changes of each committed repo of the workspace's group,
413
+ * except those in `exclude`; null when there is no repo to snapshot.
414
+ * Untracked and ignored files never count.
415
+ */
416
+ snapshotTree(workspaceRoot: string, exclude: readonly string[]): Promise<TreeSnapshot | null>;
417
+ /**
418
+ * Tracked files whose content differs from what `snapshot` recorded: new
419
+ * changes, and further changes to files already changed then. Paths are
420
+ * from the workspace root. A repo git cannot read now is left out.
421
+ */
422
+ changedSince(workspaceRoot: string, snapshot: TreeSnapshot): Promise<string[]>;
382
423
  /**
383
424
  * "Merge all": merge each repo's integration branch into whatever the user
384
425
  * has checked out there. The one irreversible step, so it only ever happens
@@ -386,7 +427,9 @@ interface IWorktreeIsolation {
386
427
  * merge of the user's in progress, no conflict against their HEAD, no
387
428
  * uncommitted edit to a file the merge changes — and unless all pass,
388
429
  * nothing is merged anywhere. Only a merge Ordewell itself just started is
389
- * ever aborted; nothing of the user's is reset.
430
+ * ever aborted; nothing of the user's is reset. Waits for a landing in
431
+ * flight and holds the next back, so a merge during a run takes the
432
+ * integration branches between two landings, never part of one.
390
433
  */
391
434
  mergeIntoCheckedOut(run: IsolationRun): Promise<IsolationMergeResult>;
392
435
  /**
@@ -817,6 +860,12 @@ interface ApprovalRequest {
817
860
  * second file from an already-approved directory does not prompt again.
818
861
  */
819
862
  scope: string;
863
+ /**
864
+ * Every scope one answer settles, when a command needs more than one — its
865
+ * own and each outside directory it touches — so it prompts once rather than
866
+ * once per scope. `scope` is the first. Absent means `scope` alone.
867
+ */
868
+ scopes?: string[];
820
869
  /** One-line context for the prompt. */
821
870
  detail?: string;
822
871
  /** The task whose runner asked; absent for the planner's own requests. */
@@ -841,6 +890,7 @@ type ApprovalDecision = {
841
890
  type ApprovalAnswer = boolean | ApprovalDecision;
842
891
  declare function toApprovalDecision(answer: ApprovalAnswer): ApprovalDecision;
843
892
  declare function isGranted(decision: ApprovalDecision): boolean;
893
+ declare function approvalScopes(request: ApprovalRequest): string[];
844
894
  declare function isRunnerApproval(request: ApprovalRequest): boolean;
845
895
  interface IApproval {
846
896
  request(req: ApprovalRequest): Promise<boolean>;
@@ -937,6 +987,8 @@ type AgentEvent =
937
987
  *
938
988
  * `input` and `suggestions` are the raw request; `suggestions` are the
939
989
  * agent's own session-scoped grants, what "Allow for this task" answers with.
990
+ * `decided` marks a request the task's mode already answered — the adapter
991
+ * replied as the manifest says that mode does — so it is shown, never asked.
940
992
  */
941
993
  | {
942
994
  type: 'permission_request';
@@ -946,6 +998,7 @@ type AgentEvent =
946
998
  input?: Record<string, unknown>;
947
999
  suggestions?: unknown[];
948
1000
  toolUseId?: string;
1001
+ decided?: ApprovalDecision;
949
1002
  }
950
1003
  /** The agent withdrew an open request — an interrupt cancels the call it was for. It takes no answer now. */
951
1004
  | {
@@ -1005,8 +1058,10 @@ interface PlannerStartOptions extends AgentStartCommon {
1005
1058
  interface TaskRunnerFlags {
1006
1059
  /** The runner's own permission-mode value for the task's mode. */
1007
1060
  permissionMode: string;
1008
- /** Thinking/effort arguments, already split into argv entries. */
1009
- effortArgs: string[];
1061
+ /** The task's raw effort id, present only alongside a model. Each adapter maps it to its own protocol. */
1062
+ effort?: string;
1063
+ /** The manifest's further settings for the task's mode, by setting name — see `PluginFeatures.modeSettings`. */
1064
+ modeSettings: Record<string, string>;
1010
1065
  }
1011
1066
  /** A plan task driven over the runner's programmatic protocol (ADR-0018, C1). */
1012
1067
  interface TaskStartOptions extends AgentStartCommon {
@@ -1059,6 +1114,13 @@ interface TaskModeAgentAdapter extends AgentAdapter {
1059
1114
  * within `timeoutMs`, and the caller must fall back to killing it.
1060
1115
  */
1061
1116
  interrupt(timeoutMs: number): Promise<boolean>;
1117
+ /**
1118
+ * Registers the listener for what the agent does after a turn has ended and
1119
+ * before the next message — a turn it opens itself when background work
1120
+ * finishes, most often. Without one that output is dropped, which is right
1121
+ * for a planner and wrong for a task, whose marker may be said there.
1122
+ */
1123
+ onOutOfTurn?(listener: (event: AgentEvent) => void): void;
1062
1124
  /** Registers a listener for the process ending, for any reason. Fires at most once. */
1063
1125
  onProcessExit(listener: (code: number) => void): void;
1064
1126
  /**
@@ -1158,6 +1220,16 @@ interface PluginFeatures {
1158
1220
  thinkingValueAdaptive?: string;
1159
1221
  /** Maps mode IDs to the CLI --permission-mode value. Used by {{feature:permissionModeVal}}. */
1160
1222
  permissionModeValues?: Record<string, string>;
1223
+ /**
1224
+ * Further per-mode settings for runners whose permission story has more than
1225
+ * one axis (Codex: sandbox, approval policy, approvals reviewer). Keyed by
1226
+ * setting name, then by mode id; a mode a map does not name leaves that
1227
+ * setting to the runner's own default. Codex declares `approvalPolicy`
1228
+ * (`-a` / `approval_policy`) and `approvalsReviewer` (`approvals_reviewer`);
1229
+ * the terminal template reads them too, through `{{feature:approvalPolicyVal}}`
1230
+ * and the `*Config` tokens.
1231
+ */
1232
+ modeSettings?: Record<string, Record<string, string>>;
1161
1233
  }
1162
1234
  type PluginParser = 'claude-help' | 'opencode-models' | 'opencode-models-verbose' | 'anthropic-models' | 'line-by-line' | 'json' | 'json-table';
1163
1235
  interface DiscoveryCommand {
@@ -1761,10 +1833,11 @@ type TaskStatus = 'pending' | 'approved' | 'in_progress' | 'completed' | 'failed
1761
1833
  type TaskMode = string;
1762
1834
  /**
1763
1835
  * Why an `awaiting_user` task waits (ADR-0018, W1): a structured turn that
1764
- * ended without the done marker, a checkpoint question, or work that did not
1765
- * land. Saved, so no surface has to guess it from whether an attempt is live.
1836
+ * ended without the done marker, a checkpoint question, work that did not
1837
+ * land, or an ops task that changed tracked files (ADR-0020). Saved, so no
1838
+ * surface has to guess it from whether an attempt is live.
1766
1839
  */
1767
- type AwaitingReason = 'input' | 'checkpoint' | 'conflict';
1840
+ type AwaitingReason = 'input' | 'checkpoint' | 'conflict' | 'files-changed';
1768
1841
  declare function isAwaitingReason(value: unknown): value is AwaitingReason;
1769
1842
  interface TaskModelAssignment {
1770
1843
  modelId: string;
@@ -1815,6 +1888,19 @@ interface Task {
1815
1888
  transport?: TaskTransport;
1816
1889
  /** Set only while `status` is `awaiting_user`, and not always then — a usage-limit pause has none. */
1817
1890
  awaitingReason?: AwaitingReason;
1891
+ /**
1892
+ * An ops task (ADR-0020): it changes no repository files, runs at the
1893
+ * workspace root rather than in a worktree, and waits for the change tasks
1894
+ * it depends on to be merged into the user's branch. Top-level AI tasks
1895
+ * only; absent means a change task.
1896
+ */
1897
+ ops?: boolean;
1898
+ /**
1899
+ * The dependencies, by title, whose work was not merged into the user's
1900
+ * branch when the user force-started this task past its merge gate
1901
+ * (ADR-0020). Cleared when the task is retried.
1902
+ */
1903
+ forcedPastGate?: string[];
1818
1904
  }
1819
1905
  interface DiscoveredMode {
1820
1906
  id: string;
@@ -2083,4 +2169,4 @@ interface ValidationContext {
2083
2169
  type ValidationCheck = (ctx: ValidationContext) => ValidationResult;
2084
2170
  declare function warningsText(w: PlanModificationWarnings): string | null;
2085
2171
 
2086
- export { type IsolationRun as $, AbstractRunner as A, type BlockingPrompt as B, CMD_EXE_MAX_COMMAND_LINE as C, DENY_ALL as D, EmbeddedNewlineError as E, type FetchAllProviderModelsOptions as F, HeadlessSession as G, HeadlessRunner as H, type IApproval as I, type IConfig as J, type IPluginStore as K, type ITerminalRunner as L, type ITerminalSession as M, type IWorktreeIsolation as N, type IntegrationDisposal as O, type IsolationAvailability as P, type IsolationHandoff as Q, type IsolationHandoffRepo as R, type IsolationInactiveReason as S, type IsolationLandedTask as T, type IsolationLanding as U, type IsolationMergeBlock as V, type IsolationMergeBlockReason as W, type IsolationMergeResult as X, type IsolationOutcome as Y, type IsolationPruneResult as Z, type IsolationRepo as _, AbstractTerminalSession as a, type TaskOutputSummary as a$, type IsolationTaskRecord as a0, type IsolationTaskRepo as a1, type IsolationTaskStatus as a2, type IsolationView as a3, type LaunchDeps as a4, type LaunchPlan as a5, type LegacyPlanState as a6, LineBuffer as a7, type Message as a8, ModelCatalog as a9, type ResearchLogEntry as aA, type ResearchProgress as aB, type ResearchStep as aC, type ResearchStepOutcome as aD, type ResearchToolType as aE, type ResolveContext as aF, type RunnerId as aG, type RunnerInvocation as aH, type RunnerPluginManifest as aI, RunnerRegistry as aJ, type RunnerSpawnOptions as aK, type RunnerTransport as aL, type StreamEvent as aM, type StreamStepEvent as aN, type StreamThinkingEvent as aO, type StructuredEvent as aP, type StructuredSessionCapability as aQ, type StructuredTurnEnd as aR, type SubagentLogEntry as aS, type SubagentOutcome as aT, type Task as aU, type TaskIsolation as aV, type TaskIsolationState as aW, type TaskMode as aX, type TaskModeAgentAdapter as aY, TaskModeUnsupportedError as aZ, type TaskModelAssignment as a_, type ModelShortcut as aa, ORCHESTRATOR_SHORTCUTS as ab, type OrchestratorOption as ac, type PlanIsolation as ad, type PlanModificationWarnings as ae, type PlanState as af, type PlanStatus as ag, type PlannerStartOptions as ah, type PlannerUsage as ai, type PluginCloneFn as aj, type PluginEntry as ak, type PluginFeatures as al, type PluginMode as am, type PluginModelDiscovery as an, type PluginRunnerDef as ao, type PreparedLaunch as ap, type PreparedTask as aq, type ProviderCredentialSource as ar, type ProviderModelLists as as, type ProviderModelsResult as at, type PtySize as au, type PtyWrapOptions as av, type QueuedMessage as aw, type QueuedTaskMessage as ax, type RepairEvidence as ay, type RepoGroupLayout as az, type ActiveTaskSession as b, type TaskRunnerFlags as b0, type TaskSnapshot as b1, type TaskStartOptions as b2, type TaskStatus as b3, type TaskTransport as b4, type TaskType as b5, type TaskWithParent as b6, type ThinkingBlock as b7, type UsageLine as b8, type UsageRecord as b9, isRunnerApproval as bA, isRunnerTransport as bB, isStructuredSession as bC, keepExecutionState as bD, knownModelId as bE, migrateLegacyPlan as bF, migratePlanState as bG, migrateTask as bH, partedPromptUsage as bI, planDirectLaunch as bJ, planShellLaunch as bK, plannerContextFill as bL, posixShellQuote as bM, removeTaskFromPlan as bN, renumberTasks as bO, resolveModelShortcut as bP, resolveProvider as bQ, stripAnsi as bR, toApprovalDecision as bS, toOrchestratorOptions as bT, updateTaskInPlan as bU, usageLine as bV, validateModifiedPlan as bW, warningsText as bX, windowsCommandLine as bY, wrapWithPty as bZ, type UsageTotals as ba, type UserPromptEntry as bb, type UserStep as bc, type ValidationCheck as bd, type ValidationContext as be, type ValidationResult as bf, type Verdict as bg, type VerificationCheck as bh, WINDOWS_MAX_COMMAND_LINE as bi, addPlannerUsage as bj, addTaskToPlan as bk, addUsage as bl, buildShellInvocation as bm, collectProviderCredentials as bn, createEmptyPlan as bo, createTask as bp, emptyWarnings as bq, enabledRunners as br, fetchAllProviderModels as bs, flattenTasks as bt, flattenTasksWithParents as bu, isAwaitingReason as bv, isExecutableResolved as bw, isGranted as bx, isMeasured as by, isReservedRunnerName as bz, type AgentAdapter as c, type AgentAdapterFactory as d, type AgentEvent as e, type AgentProcessDeps as f, type AgentStartOptions as g, type AiProvider as h, type AllProviderModels as i, type ApprovalAnswer as j, type ApprovalDecision as k, type ApprovalKind as l, type ApprovalMode as m, ApprovalPolicy as n, type ApprovalPolicyOptions as o, type ApprovalRequest as p, type ApprovalSource as q, type AwaitingReason as r, type CatalogModel as s, CommandLineTooLongError as t, type ConversationMessage as u, type DiscoveredMode as v, type DiscoveredModel as w, type DiscoveryCommand as x, ExecutableNotFoundError as y, type HeadlessRunnerDeps as z };
2172
+ export { type IsolationRun as $, AbstractRunner as A, type BlockingPrompt as B, CMD_EXE_MAX_COMMAND_LINE as C, DENY_ALL as D, EmbeddedNewlineError as E, type FetchAllProviderModelsOptions as F, HeadlessSession as G, HeadlessRunner as H, type IApproval as I, type IConfig as J, type IPluginStore as K, type ITerminalRunner as L, type ITerminalSession as M, type IWorktreeIsolation as N, type IntegrationDisposal as O, type IsolationAvailability as P, type IsolationHandoff as Q, type IsolationHandoffRepo as R, type IsolationInactiveReason as S, type IsolationLandedTask as T, type IsolationLanding as U, type IsolationMergeBlock as V, type IsolationMergeBlockReason as W, type IsolationMergeResult as X, type IsolationOutcome as Y, type IsolationPruneResult as Z, type IsolationRepo as _, AbstractTerminalSession as a, type TaskOutputSummary as a$, type IsolationTaskRecord as a0, type IsolationTaskRepo as a1, type IsolationTaskStatus as a2, type IsolationView as a3, type LaunchDeps as a4, type LaunchPlan as a5, type LegacyPlanState as a6, LineBuffer as a7, type Message as a8, ModelCatalog as a9, type ResearchLogEntry as aA, type ResearchProgress as aB, type ResearchStep as aC, type ResearchStepOutcome as aD, type ResearchToolType as aE, type ResolveContext as aF, type RunnerId as aG, type RunnerInvocation as aH, type RunnerPluginManifest as aI, RunnerRegistry as aJ, type RunnerSpawnOptions as aK, type RunnerTransport as aL, type StreamEvent as aM, type StreamStepEvent as aN, type StreamThinkingEvent as aO, type StructuredEvent as aP, type StructuredSessionCapability as aQ, type StructuredTurnEnd as aR, type SubagentLogEntry as aS, type SubagentOutcome as aT, type Task as aU, type TaskIsolation as aV, type TaskIsolationState as aW, type TaskMode as aX, type TaskModeAgentAdapter as aY, TaskModeUnsupportedError as aZ, type TaskModelAssignment as a_, type ModelShortcut as aa, ORCHESTRATOR_SHORTCUTS as ab, type OrchestratorOption as ac, type PlanIsolation as ad, type PlanModificationWarnings as ae, type PlanState as af, type PlanStatus as ag, type PlannerStartOptions as ah, type PlannerUsage as ai, type PluginCloneFn as aj, type PluginEntry as ak, type PluginFeatures as al, type PluginMode as am, type PluginModelDiscovery as an, type PluginRunnerDef as ao, type PreparedLaunch as ap, type PreparedTask as aq, type ProviderCredentialSource as ar, type ProviderModelLists as as, type ProviderModelsResult as at, type PtySize as au, type PtyWrapOptions as av, type QueuedMessage as aw, type QueuedTaskMessage as ax, type RepairEvidence as ay, type RepoGroupLayout as az, type ActiveTaskSession as b, wrapWithPty as b$, type TaskRunnerFlags as b0, type TaskSnapshot as b1, type TaskStartOptions as b2, type TaskStatus as b3, type TaskTransport as b4, type TaskType as b5, type TaskWithParent as b6, type ThinkingBlock as b7, type TreeSnapshot as b8, type UsageLine as b9, isMeasured as bA, isReservedRunnerName as bB, isRunnerApproval as bC, isRunnerTransport as bD, isStructuredSession as bE, keepExecutionState as bF, knownModelId as bG, migrateLegacyPlan as bH, migratePlanState as bI, migrateTask as bJ, partedPromptUsage as bK, planDirectLaunch as bL, planShellLaunch as bM, plannerContextFill as bN, posixShellQuote as bO, removeTaskFromPlan as bP, renumberTasks as bQ, resolveModelShortcut as bR, resolveProvider as bS, stripAnsi as bT, toApprovalDecision as bU, toOrchestratorOptions as bV, updateTaskInPlan as bW, usageLine as bX, validateModifiedPlan as bY, warningsText as bZ, windowsCommandLine as b_, type UsageRecord as ba, type UsageTotals as bb, type UserPromptEntry as bc, type UserStep as bd, type ValidationCheck as be, type ValidationContext as bf, type ValidationResult as bg, type Verdict as bh, type VerificationCheck as bi, WINDOWS_MAX_COMMAND_LINE as bj, addPlannerUsage as bk, addTaskToPlan as bl, addUsage as bm, approvalScopes as bn, buildShellInvocation as bo, collectProviderCredentials as bp, createEmptyPlan as bq, createTask as br, emptyWarnings as bs, enabledRunners as bt, fetchAllProviderModels as bu, flattenTasks as bv, flattenTasksWithParents as bw, isAwaitingReason as bx, isExecutableResolved as by, isGranted as bz, type AgentAdapter as c, type AgentAdapterFactory as d, type AgentEvent as e, type AgentProcessDeps as f, type AgentStartOptions as g, type AiProvider as h, type AllProviderModels as i, type ApprovalAnswer as j, type ApprovalDecision as k, type ApprovalKind as l, type ApprovalMode as m, ApprovalPolicy as n, type ApprovalPolicyOptions as o, type ApprovalRequest as p, type ApprovalSource as q, type AwaitingReason as r, type CatalogModel as s, CommandLineTooLongError as t, type ConversationMessage as u, type DiscoveredMode as v, type DiscoveredModel as w, type DiscoveryCommand as x, ExecutableNotFoundError as y, type HeadlessRunnerDeps as z };
@@ -7,13 +7,14 @@ import { EventEmitter } from 'events';
7
7
  * "run without isolation", while the others fall back to the shared
8
8
  * workspace root with a one-line notice.
9
9
  */
10
- type IsolationInactiveReason = 'disabled' | 'git-missing' | 'not-git' | 'no-commits' | 'dirty' | 'nested-repos';
10
+ type IsolationInactiveReason = 'disabled' | 'git-missing' | 'not-git' | 'no-commits' | 'dirty';
11
11
  /**
12
12
  * `repos` names, relative to the workspace, the repositories behind the answer:
13
13
  * when active, the ones that will isolate, with `shared` the paths every task
14
- * will share live; otherwise the nested ones `nested-repos` refuses, the dirty
15
- * ones of a `dirty` group, or the commitless ones of a `no-commits` group. A
16
- * group of one names none.
14
+ * will share live — loose entries of the workspace root, or, for a lone
15
+ * repository, the repositories nested inside it; otherwise the dirty ones of a
16
+ * `dirty` group, or the commitless ones of a `no-commits` group. A group of one
17
+ * names none.
17
18
  */
18
19
  type IsolationAvailability = {
19
20
  active: true;
@@ -27,7 +28,8 @@ type IsolationAvailability = {
27
28
  /**
28
29
  * Where a run's tasks work, as the planner is told it: the repos of the group
29
30
  * and the paths shared live between tasks. A lone repository is `['.']` with
30
- * nothing shared.
31
+ * nothing shared, unless it holds nested repositories, which are shared live
32
+ * and named in `shared`.
31
33
  */
32
34
  interface RepoGroupLayout {
33
35
  repos: string[];
@@ -49,13 +51,20 @@ interface IsolationTaskRepo {
49
51
  /** Absolute path of this repo's worktree: the task workspace joined with the repo's path. */
50
52
  worktree: string;
51
53
  /**
52
- * Paths bootstrapped from the real repo (symlinks, junctions, copies).
53
- * Recorded so the commit step can leave them out — a symlink is not matched
54
- * by a `node_modules/` ignore rule and would otherwise be committed.
54
+ * Paths linked from the real workspace and kept out of the task's commit:
55
+ * the artifacts bootstrapped from the real repo, and a lone repository's
56
+ * nested repositories (`run.shared`). Recorded because a symlink is not
57
+ * matched by an ignore rule such as `node_modules/` and would otherwise be
58
+ * committed.
55
59
  */
56
60
  linked: string[];
57
61
  /** Whether the task brought commits to this repo; unknown until it first integrates. */
58
62
  changed?: boolean;
63
+ /**
64
+ * The integration tip right after the task landed here: what the user's
65
+ * HEAD must contain for the task's work to count as merged (ADR-0020).
66
+ */
67
+ landedTip?: string;
59
68
  }
60
69
  interface IsolationTaskRecord {
61
70
  taskId: string;
@@ -99,6 +108,12 @@ interface IsolationTaskRecord {
99
108
  * names it in a group of one, prefixed with its repo's path in a group.
100
109
  */
101
110
  repairedFiles?: string[];
111
+ /**
112
+ * Set once the task's landed work is in the checked-out HEAD of every repo
113
+ * it changed — merged into the user's branch, by Merge all or by hand. What
114
+ * a merge gate waits for (ADR-0020).
115
+ */
116
+ inHead?: true;
102
117
  }
103
118
  /**
104
119
  * A task's landing in flight: each changed repo's integration tip from before
@@ -142,7 +157,9 @@ interface IsolationRun {
142
157
  /**
143
158
  * Workspace paths outside every isolated repo, linked live into each task
144
159
  * workspace: loose entries of the workspace root, the entries beside a deeper
145
- * repo, and `sharedRepos`. Empty for a group of one.
160
+ * repo, and `sharedRepos`. For a lone repository, the repositories nested
161
+ * inside it, which cannot be isolated with it and so are linked live instead.
162
+ * Empty when a group of one holds no nested repositories.
146
163
  */
147
164
  shared: string[];
148
165
  /** Repos of the group that could not be isolated — no commits, or git refused a worktree — and are among `shared`. */
@@ -296,6 +313,12 @@ interface IsolationPruneResult {
296
313
  title: string;
297
314
  }>;
298
315
  }
316
+ /**
317
+ * The tracked changes of a workspace's repos at one moment, against each
318
+ * repo's HEAD: repo path → file path → the content it held then. What an ops
319
+ * task's tree check compares against (ADR-0020).
320
+ */
321
+ type TreeSnapshot = Record<string, Record<string, string>>;
299
322
  interface IWorktreeIsolation {
300
323
  /**
301
324
  * A repo group with at least one repo to isolate, a clean tracked tree in
@@ -379,6 +402,24 @@ interface IWorktreeIsolation {
379
402
  pruneOrphans(run: IsolationRun): Promise<IsolationPruneResult>;
380
403
  /** Unified diff of each repo's integration branch against its base ref. */
381
404
  reviewDiff(run: IsolationRun): Promise<string>;
405
+ /**
406
+ * Mark the landed tasks whose work the checked-out HEAD now contains in
407
+ * every repo they changed (`git merge-base --is-ancestor`), and return their
408
+ * ids. Only adds marks: a task found merged stays merged.
409
+ */
410
+ findInHead(run: IsolationRun): Promise<string[]>;
411
+ /**
412
+ * The tracked changes of each committed repo of the workspace's group,
413
+ * except those in `exclude`; null when there is no repo to snapshot.
414
+ * Untracked and ignored files never count.
415
+ */
416
+ snapshotTree(workspaceRoot: string, exclude: readonly string[]): Promise<TreeSnapshot | null>;
417
+ /**
418
+ * Tracked files whose content differs from what `snapshot` recorded: new
419
+ * changes, and further changes to files already changed then. Paths are
420
+ * from the workspace root. A repo git cannot read now is left out.
421
+ */
422
+ changedSince(workspaceRoot: string, snapshot: TreeSnapshot): Promise<string[]>;
382
423
  /**
383
424
  * "Merge all": merge each repo's integration branch into whatever the user
384
425
  * has checked out there. The one irreversible step, so it only ever happens
@@ -386,7 +427,9 @@ interface IWorktreeIsolation {
386
427
  * merge of the user's in progress, no conflict against their HEAD, no
387
428
  * uncommitted edit to a file the merge changes — and unless all pass,
388
429
  * nothing is merged anywhere. Only a merge Ordewell itself just started is
389
- * ever aborted; nothing of the user's is reset.
430
+ * ever aborted; nothing of the user's is reset. Waits for a landing in
431
+ * flight and holds the next back, so a merge during a run takes the
432
+ * integration branches between two landings, never part of one.
390
433
  */
391
434
  mergeIntoCheckedOut(run: IsolationRun): Promise<IsolationMergeResult>;
392
435
  /**
@@ -817,6 +860,12 @@ interface ApprovalRequest {
817
860
  * second file from an already-approved directory does not prompt again.
818
861
  */
819
862
  scope: string;
863
+ /**
864
+ * Every scope one answer settles, when a command needs more than one — its
865
+ * own and each outside directory it touches — so it prompts once rather than
866
+ * once per scope. `scope` is the first. Absent means `scope` alone.
867
+ */
868
+ scopes?: string[];
820
869
  /** One-line context for the prompt. */
821
870
  detail?: string;
822
871
  /** The task whose runner asked; absent for the planner's own requests. */
@@ -841,6 +890,7 @@ type ApprovalDecision = {
841
890
  type ApprovalAnswer = boolean | ApprovalDecision;
842
891
  declare function toApprovalDecision(answer: ApprovalAnswer): ApprovalDecision;
843
892
  declare function isGranted(decision: ApprovalDecision): boolean;
893
+ declare function approvalScopes(request: ApprovalRequest): string[];
844
894
  declare function isRunnerApproval(request: ApprovalRequest): boolean;
845
895
  interface IApproval {
846
896
  request(req: ApprovalRequest): Promise<boolean>;
@@ -937,6 +987,8 @@ type AgentEvent =
937
987
  *
938
988
  * `input` and `suggestions` are the raw request; `suggestions` are the
939
989
  * agent's own session-scoped grants, what "Allow for this task" answers with.
990
+ * `decided` marks a request the task's mode already answered — the adapter
991
+ * replied as the manifest says that mode does — so it is shown, never asked.
940
992
  */
941
993
  | {
942
994
  type: 'permission_request';
@@ -946,6 +998,7 @@ type AgentEvent =
946
998
  input?: Record<string, unknown>;
947
999
  suggestions?: unknown[];
948
1000
  toolUseId?: string;
1001
+ decided?: ApprovalDecision;
949
1002
  }
950
1003
  /** The agent withdrew an open request — an interrupt cancels the call it was for. It takes no answer now. */
951
1004
  | {
@@ -1005,8 +1058,10 @@ interface PlannerStartOptions extends AgentStartCommon {
1005
1058
  interface TaskRunnerFlags {
1006
1059
  /** The runner's own permission-mode value for the task's mode. */
1007
1060
  permissionMode: string;
1008
- /** Thinking/effort arguments, already split into argv entries. */
1009
- effortArgs: string[];
1061
+ /** The task's raw effort id, present only alongside a model. Each adapter maps it to its own protocol. */
1062
+ effort?: string;
1063
+ /** The manifest's further settings for the task's mode, by setting name — see `PluginFeatures.modeSettings`. */
1064
+ modeSettings: Record<string, string>;
1010
1065
  }
1011
1066
  /** A plan task driven over the runner's programmatic protocol (ADR-0018, C1). */
1012
1067
  interface TaskStartOptions extends AgentStartCommon {
@@ -1059,6 +1114,13 @@ interface TaskModeAgentAdapter extends AgentAdapter {
1059
1114
  * within `timeoutMs`, and the caller must fall back to killing it.
1060
1115
  */
1061
1116
  interrupt(timeoutMs: number): Promise<boolean>;
1117
+ /**
1118
+ * Registers the listener for what the agent does after a turn has ended and
1119
+ * before the next message — a turn it opens itself when background work
1120
+ * finishes, most often. Without one that output is dropped, which is right
1121
+ * for a planner and wrong for a task, whose marker may be said there.
1122
+ */
1123
+ onOutOfTurn?(listener: (event: AgentEvent) => void): void;
1062
1124
  /** Registers a listener for the process ending, for any reason. Fires at most once. */
1063
1125
  onProcessExit(listener: (code: number) => void): void;
1064
1126
  /**
@@ -1158,6 +1220,16 @@ interface PluginFeatures {
1158
1220
  thinkingValueAdaptive?: string;
1159
1221
  /** Maps mode IDs to the CLI --permission-mode value. Used by {{feature:permissionModeVal}}. */
1160
1222
  permissionModeValues?: Record<string, string>;
1223
+ /**
1224
+ * Further per-mode settings for runners whose permission story has more than
1225
+ * one axis (Codex: sandbox, approval policy, approvals reviewer). Keyed by
1226
+ * setting name, then by mode id; a mode a map does not name leaves that
1227
+ * setting to the runner's own default. Codex declares `approvalPolicy`
1228
+ * (`-a` / `approval_policy`) and `approvalsReviewer` (`approvals_reviewer`);
1229
+ * the terminal template reads them too, through `{{feature:approvalPolicyVal}}`
1230
+ * and the `*Config` tokens.
1231
+ */
1232
+ modeSettings?: Record<string, Record<string, string>>;
1161
1233
  }
1162
1234
  type PluginParser = 'claude-help' | 'opencode-models' | 'opencode-models-verbose' | 'anthropic-models' | 'line-by-line' | 'json' | 'json-table';
1163
1235
  interface DiscoveryCommand {
@@ -1761,10 +1833,11 @@ type TaskStatus = 'pending' | 'approved' | 'in_progress' | 'completed' | 'failed
1761
1833
  type TaskMode = string;
1762
1834
  /**
1763
1835
  * Why an `awaiting_user` task waits (ADR-0018, W1): a structured turn that
1764
- * ended without the done marker, a checkpoint question, or work that did not
1765
- * land. Saved, so no surface has to guess it from whether an attempt is live.
1836
+ * ended without the done marker, a checkpoint question, work that did not
1837
+ * land, or an ops task that changed tracked files (ADR-0020). Saved, so no
1838
+ * surface has to guess it from whether an attempt is live.
1766
1839
  */
1767
- type AwaitingReason = 'input' | 'checkpoint' | 'conflict';
1840
+ type AwaitingReason = 'input' | 'checkpoint' | 'conflict' | 'files-changed';
1768
1841
  declare function isAwaitingReason(value: unknown): value is AwaitingReason;
1769
1842
  interface TaskModelAssignment {
1770
1843
  modelId: string;
@@ -1815,6 +1888,19 @@ interface Task {
1815
1888
  transport?: TaskTransport;
1816
1889
  /** Set only while `status` is `awaiting_user`, and not always then — a usage-limit pause has none. */
1817
1890
  awaitingReason?: AwaitingReason;
1891
+ /**
1892
+ * An ops task (ADR-0020): it changes no repository files, runs at the
1893
+ * workspace root rather than in a worktree, and waits for the change tasks
1894
+ * it depends on to be merged into the user's branch. Top-level AI tasks
1895
+ * only; absent means a change task.
1896
+ */
1897
+ ops?: boolean;
1898
+ /**
1899
+ * The dependencies, by title, whose work was not merged into the user's
1900
+ * branch when the user force-started this task past its merge gate
1901
+ * (ADR-0020). Cleared when the task is retried.
1902
+ */
1903
+ forcedPastGate?: string[];
1818
1904
  }
1819
1905
  interface DiscoveredMode {
1820
1906
  id: string;
@@ -2083,4 +2169,4 @@ interface ValidationContext {
2083
2169
  type ValidationCheck = (ctx: ValidationContext) => ValidationResult;
2084
2170
  declare function warningsText(w: PlanModificationWarnings): string | null;
2085
2171
 
2086
- export { type IsolationRun as $, AbstractRunner as A, type BlockingPrompt as B, CMD_EXE_MAX_COMMAND_LINE as C, DENY_ALL as D, EmbeddedNewlineError as E, type FetchAllProviderModelsOptions as F, HeadlessSession as G, HeadlessRunner as H, type IApproval as I, type IConfig as J, type IPluginStore as K, type ITerminalRunner as L, type ITerminalSession as M, type IWorktreeIsolation as N, type IntegrationDisposal as O, type IsolationAvailability as P, type IsolationHandoff as Q, type IsolationHandoffRepo as R, type IsolationInactiveReason as S, type IsolationLandedTask as T, type IsolationLanding as U, type IsolationMergeBlock as V, type IsolationMergeBlockReason as W, type IsolationMergeResult as X, type IsolationOutcome as Y, type IsolationPruneResult as Z, type IsolationRepo as _, AbstractTerminalSession as a, type TaskOutputSummary as a$, type IsolationTaskRecord as a0, type IsolationTaskRepo as a1, type IsolationTaskStatus as a2, type IsolationView as a3, type LaunchDeps as a4, type LaunchPlan as a5, type LegacyPlanState as a6, LineBuffer as a7, type Message as a8, ModelCatalog as a9, type ResearchLogEntry as aA, type ResearchProgress as aB, type ResearchStep as aC, type ResearchStepOutcome as aD, type ResearchToolType as aE, type ResolveContext as aF, type RunnerId as aG, type RunnerInvocation as aH, type RunnerPluginManifest as aI, RunnerRegistry as aJ, type RunnerSpawnOptions as aK, type RunnerTransport as aL, type StreamEvent as aM, type StreamStepEvent as aN, type StreamThinkingEvent as aO, type StructuredEvent as aP, type StructuredSessionCapability as aQ, type StructuredTurnEnd as aR, type SubagentLogEntry as aS, type SubagentOutcome as aT, type Task as aU, type TaskIsolation as aV, type TaskIsolationState as aW, type TaskMode as aX, type TaskModeAgentAdapter as aY, TaskModeUnsupportedError as aZ, type TaskModelAssignment as a_, type ModelShortcut as aa, ORCHESTRATOR_SHORTCUTS as ab, type OrchestratorOption as ac, type PlanIsolation as ad, type PlanModificationWarnings as ae, type PlanState as af, type PlanStatus as ag, type PlannerStartOptions as ah, type PlannerUsage as ai, type PluginCloneFn as aj, type PluginEntry as ak, type PluginFeatures as al, type PluginMode as am, type PluginModelDiscovery as an, type PluginRunnerDef as ao, type PreparedLaunch as ap, type PreparedTask as aq, type ProviderCredentialSource as ar, type ProviderModelLists as as, type ProviderModelsResult as at, type PtySize as au, type PtyWrapOptions as av, type QueuedMessage as aw, type QueuedTaskMessage as ax, type RepairEvidence as ay, type RepoGroupLayout as az, type ActiveTaskSession as b, type TaskRunnerFlags as b0, type TaskSnapshot as b1, type TaskStartOptions as b2, type TaskStatus as b3, type TaskTransport as b4, type TaskType as b5, type TaskWithParent as b6, type ThinkingBlock as b7, type UsageLine as b8, type UsageRecord as b9, isRunnerApproval as bA, isRunnerTransport as bB, isStructuredSession as bC, keepExecutionState as bD, knownModelId as bE, migrateLegacyPlan as bF, migratePlanState as bG, migrateTask as bH, partedPromptUsage as bI, planDirectLaunch as bJ, planShellLaunch as bK, plannerContextFill as bL, posixShellQuote as bM, removeTaskFromPlan as bN, renumberTasks as bO, resolveModelShortcut as bP, resolveProvider as bQ, stripAnsi as bR, toApprovalDecision as bS, toOrchestratorOptions as bT, updateTaskInPlan as bU, usageLine as bV, validateModifiedPlan as bW, warningsText as bX, windowsCommandLine as bY, wrapWithPty as bZ, type UsageTotals as ba, type UserPromptEntry as bb, type UserStep as bc, type ValidationCheck as bd, type ValidationContext as be, type ValidationResult as bf, type Verdict as bg, type VerificationCheck as bh, WINDOWS_MAX_COMMAND_LINE as bi, addPlannerUsage as bj, addTaskToPlan as bk, addUsage as bl, buildShellInvocation as bm, collectProviderCredentials as bn, createEmptyPlan as bo, createTask as bp, emptyWarnings as bq, enabledRunners as br, fetchAllProviderModels as bs, flattenTasks as bt, flattenTasksWithParents as bu, isAwaitingReason as bv, isExecutableResolved as bw, isGranted as bx, isMeasured as by, isReservedRunnerName as bz, type AgentAdapter as c, type AgentAdapterFactory as d, type AgentEvent as e, type AgentProcessDeps as f, type AgentStartOptions as g, type AiProvider as h, type AllProviderModels as i, type ApprovalAnswer as j, type ApprovalDecision as k, type ApprovalKind as l, type ApprovalMode as m, ApprovalPolicy as n, type ApprovalPolicyOptions as o, type ApprovalRequest as p, type ApprovalSource as q, type AwaitingReason as r, type CatalogModel as s, CommandLineTooLongError as t, type ConversationMessage as u, type DiscoveredMode as v, type DiscoveredModel as w, type DiscoveryCommand as x, ExecutableNotFoundError as y, type HeadlessRunnerDeps as z };
2172
+ export { type IsolationRun as $, AbstractRunner as A, type BlockingPrompt as B, CMD_EXE_MAX_COMMAND_LINE as C, DENY_ALL as D, EmbeddedNewlineError as E, type FetchAllProviderModelsOptions as F, HeadlessSession as G, HeadlessRunner as H, type IApproval as I, type IConfig as J, type IPluginStore as K, type ITerminalRunner as L, type ITerminalSession as M, type IWorktreeIsolation as N, type IntegrationDisposal as O, type IsolationAvailability as P, type IsolationHandoff as Q, type IsolationHandoffRepo as R, type IsolationInactiveReason as S, type IsolationLandedTask as T, type IsolationLanding as U, type IsolationMergeBlock as V, type IsolationMergeBlockReason as W, type IsolationMergeResult as X, type IsolationOutcome as Y, type IsolationPruneResult as Z, type IsolationRepo as _, AbstractTerminalSession as a, type TaskOutputSummary as a$, type IsolationTaskRecord as a0, type IsolationTaskRepo as a1, type IsolationTaskStatus as a2, type IsolationView as a3, type LaunchDeps as a4, type LaunchPlan as a5, type LegacyPlanState as a6, LineBuffer as a7, type Message as a8, ModelCatalog as a9, type ResearchLogEntry as aA, type ResearchProgress as aB, type ResearchStep as aC, type ResearchStepOutcome as aD, type ResearchToolType as aE, type ResolveContext as aF, type RunnerId as aG, type RunnerInvocation as aH, type RunnerPluginManifest as aI, RunnerRegistry as aJ, type RunnerSpawnOptions as aK, type RunnerTransport as aL, type StreamEvent as aM, type StreamStepEvent as aN, type StreamThinkingEvent as aO, type StructuredEvent as aP, type StructuredSessionCapability as aQ, type StructuredTurnEnd as aR, type SubagentLogEntry as aS, type SubagentOutcome as aT, type Task as aU, type TaskIsolation as aV, type TaskIsolationState as aW, type TaskMode as aX, type TaskModeAgentAdapter as aY, TaskModeUnsupportedError as aZ, type TaskModelAssignment as a_, type ModelShortcut as aa, ORCHESTRATOR_SHORTCUTS as ab, type OrchestratorOption as ac, type PlanIsolation as ad, type PlanModificationWarnings as ae, type PlanState as af, type PlanStatus as ag, type PlannerStartOptions as ah, type PlannerUsage as ai, type PluginCloneFn as aj, type PluginEntry as ak, type PluginFeatures as al, type PluginMode as am, type PluginModelDiscovery as an, type PluginRunnerDef as ao, type PreparedLaunch as ap, type PreparedTask as aq, type ProviderCredentialSource as ar, type ProviderModelLists as as, type ProviderModelsResult as at, type PtySize as au, type PtyWrapOptions as av, type QueuedMessage as aw, type QueuedTaskMessage as ax, type RepairEvidence as ay, type RepoGroupLayout as az, type ActiveTaskSession as b, wrapWithPty as b$, type TaskRunnerFlags as b0, type TaskSnapshot as b1, type TaskStartOptions as b2, type TaskStatus as b3, type TaskTransport as b4, type TaskType as b5, type TaskWithParent as b6, type ThinkingBlock as b7, type TreeSnapshot as b8, type UsageLine as b9, isMeasured as bA, isReservedRunnerName as bB, isRunnerApproval as bC, isRunnerTransport as bD, isStructuredSession as bE, keepExecutionState as bF, knownModelId as bG, migrateLegacyPlan as bH, migratePlanState as bI, migrateTask as bJ, partedPromptUsage as bK, planDirectLaunch as bL, planShellLaunch as bM, plannerContextFill as bN, posixShellQuote as bO, removeTaskFromPlan as bP, renumberTasks as bQ, resolveModelShortcut as bR, resolveProvider as bS, stripAnsi as bT, toApprovalDecision as bU, toOrchestratorOptions as bV, updateTaskInPlan as bW, usageLine as bX, validateModifiedPlan as bY, warningsText as bZ, windowsCommandLine as b_, type UsageRecord as ba, type UsageTotals as bb, type UserPromptEntry as bc, type UserStep as bd, type ValidationCheck as be, type ValidationContext as bf, type ValidationResult as bg, type Verdict as bh, type VerificationCheck as bi, WINDOWS_MAX_COMMAND_LINE as bj, addPlannerUsage as bk, addTaskToPlan as bl, addUsage as bm, approvalScopes as bn, buildShellInvocation as bo, collectProviderCredentials as bp, createEmptyPlan as bq, createTask as br, emptyWarnings as bs, enabledRunners as bt, fetchAllProviderModels as bu, flattenTasks as bv, flattenTasksWithParents as bw, isAwaitingReason as bx, isExecutableResolved as by, isGranted as bz, type AgentAdapter as c, type AgentAdapterFactory as d, type AgentEvent as e, type AgentProcessDeps as f, type AgentStartOptions as g, type AiProvider as h, type AllProviderModels as i, type ApprovalAnswer as j, type ApprovalDecision as k, type ApprovalKind as l, type ApprovalMode as m, ApprovalPolicy as n, type ApprovalPolicyOptions as o, type ApprovalRequest as p, type ApprovalSource as q, type AwaitingReason as r, type CatalogModel as s, CommandLineTooLongError as t, type ConversationMessage as u, type DiscoveredMode as v, type DiscoveredModel as w, type DiscoveryCommand as x, ExecutableNotFoundError as y, type HeadlessRunnerDeps as z };