@ordewell/core 0.6.2 → 0.6.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.
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- import { aG as RunnerId, ag as PlanStatus, a6 as LegacyPlanState, I as IApproval, k as ApprovalDecision, p as ApprovalRequest, j as ApprovalAnswer, L as ITerminalRunner, J as IConfig, h as AiProvider, as as ProviderModelLists, m as ApprovalMode, X as IsolationMergeResult, T as IsolationLandedTask, N as IWorktreeIsolation, a2 as IsolationTaskStatus, ad as PlanIsolation, aL as RunnerTransport, az as RepoGroupLayout, M as ITerminalSession, w as DiscoveredModel, aU as Task, f as AgentProcessDeps, c as AgentAdapter, aB as ResearchProgress, aA as ResearchLogEntry, u as ConversationMessage, ba as UsageRecord, b1 as TaskSnapshot, r as AwaitingReason, Q as IsolationHandoff, $ as IsolationRun, a0 as IsolationTaskRecord, aV as TaskIsolation, a3 as IsolationView, Y as IsolationOutcome, ay as RepairEvidence, b8 as TreeSnapshot, bh as Verdict, aJ as RunnerRegistry, ax as QueuedTaskMessage, aw as QueuedMessage, b as ActiveTaskSession, ac as OrchestratorOption, aY as TaskModeAgentAdapter, g as AgentStartOptions, e as AgentEvent, aE as ResearchToolType, ai as PlannerUsage, n as ApprovalPolicy, af as PlanState, aH as RunnerInvocation, A as AbstractRunner, a as AbstractTerminalSession, aQ as StructuredSessionCapability, b2 as TaskStartOptions, aR as StructuredTurnEnd, aP as StructuredEvent, aK as RunnerSpawnOptions, K as IPluginStore, aI as RunnerPluginManifest, aF as ResolveContext, b0 as TaskRunnerFlags } from './Task-ib_U0YP7.js';
2
- export { d as AgentAdapterFactory, i as AllProviderModels, l as ApprovalKind, o as ApprovalPolicyOptions, q as ApprovalSource, B as BlockingPrompt, C as CMD_EXE_MAX_COMMAND_LINE, s as CatalogModel, t as CommandLineTooLongError, D as DENY_ALL, v as DiscoveredMode, x as DiscoveryCommand, E as EmbeddedNewlineError, y as ExecutableNotFoundError, F as FetchAllProviderModelsOptions, H as HeadlessRunner, z as HeadlessRunnerDeps, G as HeadlessSession, O as IntegrationDisposal, P as IsolationAvailability, R as IsolationHandoffRepo, S as IsolationInactiveReason, U as IsolationLanding, V as IsolationMergeBlock, W as IsolationMergeBlockReason, Z as IsolationPruneResult, _ as IsolationRepo, a1 as IsolationTaskRepo, a4 as LaunchDeps, a5 as LaunchPlan, a7 as LineBuffer, a8 as Message, a9 as ModelCatalog, aa as ModelShortcut, ab as ORCHESTRATOR_SHORTCUTS, ae as PlanModificationWarnings, ah as PlannerStartOptions, aj as PluginCloneFn, ak as PluginEntry, al as PluginFeatures, am as PluginMode, an as PluginModelDiscovery, ao as PluginRunnerDef, ap as PreparedLaunch, aq as PreparedTask, ar as ProviderCredentialSource, at as ProviderModelsResult, au as PtySize, av as PtyWrapOptions, aC as ResearchStep, aD as ResearchStepOutcome, aM as StreamEvent, aN as StreamStepEvent, aO as StreamThinkingEvent, aS as SubagentLogEntry, aT as SubagentOutcome, aW as TaskIsolationState, aX as TaskMode, aZ as TaskModeUnsupportedError, a_ as TaskModelAssignment, a$ as TaskOutputSummary, b3 as TaskStatus, b4 as TaskTransport, b5 as TaskType, b6 as TaskWithParent, b7 as ThinkingBlock, b9 as UsageLine, bb as UsageTotals, bc as UserPromptEntry, bd as UserStep, be as ValidationCheck, bf as ValidationContext, bg as ValidationResult, bi as VerificationCheck, bj as WINDOWS_MAX_COMMAND_LINE, bk as addPlannerUsage, bl as addTaskToPlan, bm as addUsage, bn as approvalScopes, bo as buildShellInvocation, bp as collectProviderCredentials, bq as createEmptyPlan, br as createTask, bs as emptyWarnings, bt as enabledRunners, bu as fetchAllProviderModels, bv as flattenTasks, bw as flattenTasksWithParents, bx as isAwaitingReason, by as isExecutableResolved, bz as isGranted, bA as isMeasured, bB as isReservedRunnerName, bC as isRunnerApproval, bD as isRunnerTransport, bE as isStructuredSession, bF as keepExecutionState, bG as knownModelId, bH as migrateLegacyPlan, bI as migratePlanState, bJ as migrateTask, bK as partedPromptUsage, bL as planDirectLaunch, bM as planShellLaunch, bN as plannerContextFill, bO as posixShellQuote, bP as removeTaskFromPlan, bQ as renumberTasks, bR as resolveModelShortcut, bS as resolveProvider, bT as stripAnsi, bU as toApprovalDecision, bV as toOrchestratorOptions, bW as updateTaskInPlan, bX as usageLine, bY as validateModifiedPlan, bZ as warningsText, b_ as windowsCommandLine, b$ as wrapWithPty } from './Task-ib_U0YP7.js';
3
- import { u as TaskOp, M as MergeGateView, m as SessionBroadcaster, A as ApplyTaskOpsResult, n as SessionMessage, o as SessionNotice, s as TaskLogEvent } from './plan-utils-2K_N5ZJe.js';
4
- export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DisplayBlock, E as EMPTY_CONVERSATION, e as EMPTY_HOLD, f as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, g as MessageBlock, h as MessageRole, N as NO_TURN, O as OutputPreview, P as PlanBlock, i as PlanMarkerStatus, j as PromptHold, S as SerializedPlan, k as SerializedTask, l as SerializedTaskStatus, p as SubagentBlock, q as SubagentChild, r as SubagentStatus, T as TakenPrompt, t as TaskLogView, v as TaskRef, w as ThinkingDisplayBlock, x as ToolBlock, y as ToolHeadline, z as ToolStatus, B as TurnGate, U as UsageBlock, F as aheadOfDraft, H as applyTaskOps, I as canMergeTasks, J as canSetDependencies, K as canSplitTask, Q as capConflictFiles, R as classifyOutcome, V as coalesceTaskLog, W as dependencyCandidates, X as dependentsOf, Y as digestTaskLog, Z as drainNext, _ as executionSummary, $ as followTurn, a0 as fromTranscript, a1 as hasHiddenDetail, a2 as holdPrompt, a3 as outputLines, a4 as outputPreview, a5 as parseTaskOpsJson, a6 as reduceConversation, a7 as reduceTaskLog, a8 as replayTaskLog, a9 as runnerToolSubject, aa as serializePlan, ab as serializeTask, ac as serializeTaskStatus, ad as stopTurn, ae as summarizeToolCall, af as taskStartedNotice, ag as textHasTaskOps, ah as toTaskLogEvent, ai as toolHeadline, aj as trimToolOutput, ak as truncateCheckpointSummary, al as unsendAll, am as unsendLatest } from './plan-utils-2K_N5ZJe.js';
5
- import { I as IFileSystem, R as ReadFileOpts, T as ToolOutcome, b as GrepOptions, a as GlobOptions, F as FindSymbolOptions } from './IFileSystem-DuEiG_kA.js';
6
- export { G as GREP_DEFAULT_HEAD_LIMIT, c as GrepOutputMode, S as SEARCH_EXCLUSIONS } from './IFileSystem-DuEiG_kA.js';
7
- import { R as RunnerModeInfo } from './ModeResolver-DXxV4n_V.js';
8
- export { M as ManifestLookup, a as autonomyLevelLabel, b as buildModeGuide, f as filteredBuildModes, p as parseAutonomyLevel, r as resolveDefaultMode, c as resolveTaskMode, d as runnerModesFrom } from './ModeResolver-DXxV4n_V.js';
1
+ import { aG as RunnerId, ag as PlanStatus, a6 as LegacyPlanState, I as IApproval, k as ApprovalDecision, p as ApprovalRequest, j as ApprovalAnswer, L as ITerminalRunner, J as IConfig, h as AiProvider, as as ProviderModelLists, m as ApprovalMode, X as IsolationMergeResult, T as IsolationLandedTask, N as IWorktreeIsolation, a2 as IsolationTaskStatus, ad as PlanIsolation, aL as RunnerTransport, az as RepoGroupLayout, M as ITerminalSession, w as DiscoveredModel, aV as Task, f as AgentProcessDeps, c as AgentAdapter, aB as ResearchProgress, aA as ResearchLogEntry, u as ConversationMessage, bb as UsageRecord, b2 as TaskSnapshot, r as AwaitingReason, Q as IsolationHandoff, $ as IsolationRun, a0 as IsolationTaskRecord, aW as TaskIsolation, a3 as IsolationView, Y as IsolationOutcome, ay as RepairEvidence, b9 as TreeSnapshot, bi as Verdict, aJ as RunnerRegistry, ax as QueuedTaskMessage, aw as QueuedMessage, b as ActiveTaskSession, ac as OrchestratorOption, aZ as TaskModeAgentAdapter, g as AgentStartOptions, e as AgentEvent, aE as ResearchToolType, ai as PlannerUsage, n as ApprovalPolicy, af as PlanState, aH as RunnerInvocation, A as AbstractRunner, a as AbstractTerminalSession, aM as RunnerVersionProbe, aR as StructuredSessionCapability, b3 as TaskStartOptions, aS as StructuredTurnEnd, aQ as StructuredEvent, aK as RunnerSpawnOptions, K as IPluginStore, aI as RunnerPluginManifest, aF as ResolveContext, b1 as TaskRunnerFlags } from './Task-xqdxugt2.js';
2
+ export { d as AgentAdapterFactory, i as AllProviderModels, l as ApprovalKind, o as ApprovalPolicyOptions, q as ApprovalSource, B as BlockingPrompt, C as CMD_EXE_MAX_COMMAND_LINE, s as CatalogModel, t as CommandLineTooLongError, D as DENY_ALL, v as DiscoveredMode, x as DiscoveryCommand, E as EmbeddedNewlineError, y as ExecutableNotFoundError, F as FetchAllProviderModelsOptions, H as HeadlessRunner, z as HeadlessRunnerDeps, G as HeadlessSession, O as IntegrationDisposal, P as IsolationAvailability, R as IsolationHandoffRepo, S as IsolationInactiveReason, U as IsolationLanding, V as IsolationMergeBlock, W as IsolationMergeBlockReason, Z as IsolationPruneResult, _ as IsolationRepo, a1 as IsolationTaskRepo, a4 as LaunchDeps, a5 as LaunchPlan, a7 as LineBuffer, a8 as Message, a9 as ModelCatalog, aa as ModelShortcut, ab as ORCHESTRATOR_SHORTCUTS, ae as PlanModificationWarnings, ah as PlannerStartOptions, aj as PluginCloneFn, ak as PluginEntry, al as PluginFeatures, am as PluginMode, an as PluginModelDiscovery, ao as PluginRunnerDef, ap as PreparedLaunch, aq as PreparedTask, ar as ProviderCredentialSource, at as ProviderModelsResult, au as PtySize, av as PtyWrapOptions, aC as ResearchStep, aD as ResearchStepOutcome, aN as StreamEvent, aO as StreamStepEvent, aP as StreamThinkingEvent, aT as SubagentLogEntry, aU as SubagentOutcome, aX as TaskIsolationState, aY as TaskMode, a_ as TaskModeUnsupportedError, a$ as TaskModelAssignment, b0 as TaskOutputSummary, b4 as TaskStatus, b5 as TaskTransport, b6 as TaskType, b7 as TaskWithParent, b8 as ThinkingBlock, ba as UsageLine, bc as UsageTotals, bd as UserPromptEntry, be as UserStep, bf as ValidationCheck, bg as ValidationContext, bh as ValidationResult, bj as VerificationCheck, bk as WINDOWS_MAX_COMMAND_LINE, bl as addPlannerUsage, bm as addTaskToPlan, bn as addUsage, bo as approvalScopes, bp as buildShellInvocation, bq as collectProviderCredentials, br as createEmptyPlan, bs as createTask, bt as emptyWarnings, bu as enabledRunners, bv as fetchAllProviderModels, bw as flattenTasks, bx as flattenTasksWithParents, by as isAwaitingReason, bz as isExecutableResolved, bA as isGranted, bB as isMeasured, bC as isReservedRunnerName, bD as isRunnerApproval, bE as isRunnerTransport, bF as isStructuredSession, bG as keepExecutionState, bH as knownModelId, bI as migrateLegacyPlan, bJ as migratePlanState, bK as migrateTask, bL as partedPromptUsage, bM as planDirectLaunch, bN as planShellLaunch, bO as plannerContextFill, bP as posixShellQuote, bQ as removeTaskFromPlan, bR as renumberTasks, bS as resolveModelShortcut, bT as resolveProvider, bU as stripAnsi, bV as toApprovalDecision, bW as toOrchestratorOptions, bX as updateTaskInPlan, bY as usageLine, bZ as validateModifiedPlan, b_ as warningsText, b$ as windowsCommandLine, c0 as wrapWithPty } from './Task-xqdxugt2.js';
3
+ import { u as TaskOp, M as MergeGateView, m as SessionBroadcaster, A as ApplyTaskOpsResult, n as SessionMessage, o as SessionNotice, s as TaskLogEvent } from './plan-utils-Br8UAoiu.js';
4
+ export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DisplayBlock, E as EMPTY_CONVERSATION, e as EMPTY_HOLD, f as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, g as MessageBlock, h as MessageRole, N as NO_TURN, O as OutputPreview, P as PlanBlock, i as PlanMarkerStatus, j as PromptHold, S as SerializedPlan, k as SerializedTask, l as SerializedTaskStatus, p as SubagentBlock, q as SubagentChild, r as SubagentStatus, T as TakenPrompt, t as TaskLogView, v as TaskRef, w as ThinkingDisplayBlock, x as ToolBlock, y as ToolHeadline, z as ToolStatus, B as TurnGate, U as UsageBlock, F as aheadOfDraft, H as applyTaskOps, I as canMergeTasks, J as canSetDependencies, K as canSplitTask, Q as capConflictFiles, R as classifyOutcome, V as coalesceTaskLog, W as dependencyCandidates, X as dependentsOf, Y as digestTaskLog, Z as drainNext, _ as executionSummary, $ as followTurn, a0 as fromTranscript, a1 as hasHiddenDetail, a2 as holdPrompt, a3 as outputLines, a4 as outputPreview, a5 as parseTaskOpsJson, a6 as reduceConversation, a7 as reduceTaskLog, a8 as replayTaskLog, a9 as runnerToolSubject, aa as serializePlan, ab as serializeTask, ac as serializeTaskStatus, ad as stopTurn, ae as summarizeToolCall, af as taskStartedNotice, ag as textHasTaskOps, ah as toTaskLogEvent, ai as toolHeadline, aj as trimToolOutput, ak as truncateCheckpointSummary, al as unsendAll, am as unsendLatest } from './plan-utils-Br8UAoiu.js';
5
+ import { I as IFileSystem, R as ReadFileOpts, T as ToolOutcome, b as GrepOptions, a as GlobOptions, F as FindSymbolOptions } from './IFileSystem-DQEKyC6H.js';
6
+ export { G as GREP_DEFAULT_HEAD_LIMIT, c as GrepOutputMode, S as SEARCH_EXCLUSIONS } from './IFileSystem-DQEKyC6H.js';
7
+ import { R as RunnerModeInfo } from './ModeResolver-ByNpC0EP.js';
8
+ export { M as ManifestLookup, a as autonomyLevelLabel, b as buildModeGuide, f as filteredBuildModes, p as parseAutonomyLevel, r as resolveDefaultMode, c as resolveTaskMode, d as runnerModesFrom } from './ModeResolver-ByNpC0EP.js';
9
9
  import { ChildProcess } from 'child_process';
10
- import { b as PlanParseError } from './parsing-C8Z22twN.js';
11
- export { P as PLAN_ENVELOPE_KEY, a as PartialPlanTask, T as TASK_OPS_ENVELOPE_KEY, c as TASK_QUERY_ENVELOPE_KEY, d as checkDepsResolve, e as checkImmutableLog, f as checkInProgress, g as checkNoCycles, h as checkUniqueIds, i as escapeControlCharsInStrings, j as extractJsonObject, k as extractObjectWithBalance, l as extractObjectsWithKey, m as looksLikePlanAttempt, o as opensWithJsonObject, p as parsePartialPlan, n as parsePlanJson, s as stripModelNoise, q as stripTrailingCommas, v as validatePlanModification } from './parsing-C8Z22twN.js';
10
+ import { b as PlanParseError } from './parsing-COPG8-Ep.js';
11
+ export { P as PLAN_ENVELOPE_KEY, a as PartialPlanTask, T as TASK_OPS_ENVELOPE_KEY, c as TASK_QUERY_ENVELOPE_KEY, d as checkDepsResolve, e as checkImmutableLog, f as checkInProgress, g as checkNoCycles, h as checkUniqueIds, i as escapeControlCharsInStrings, j as extractJsonObject, k as extractObjectWithBalance, l as extractObjectsWithKey, m as looksLikePlanAttempt, o as opensWithJsonObject, p as parsePartialPlan, n as parsePlanJson, s as stripModelNoise, q as stripTrailingCommas, v as validatePlanModification } from './parsing-COPG8-Ep.js';
12
12
  export { resolveOrderLabel, taskOrderLabel } from './order-labels.js';
13
13
  import 'events';
14
14
 
@@ -27,77 +27,6 @@ interface SessionData {
27
27
  plan: LegacyPlanState;
28
28
  }
29
29
 
30
- /**
31
- * Which interpreter runs the planner's `bash` tool, and in which language.
32
- *
33
- * `AUTO_COMMANDS` — the read-only tier that runs with no prompt — is `ls`, `cat`,
34
- * `wc`, `head`, `tail`, `du`, `df`, `file`, `sort`, `uniq`, `basename`, `find`,
35
- * `grep`. That set is POSIX, and passing it to `shell: true` on Windows means
36
- * cmd.exe, where most of those names do not exist and `find` is an unrelated
37
- * program that returns plausible wrong output instead of an error. The planner's
38
- * whole research surface degraded to guessing, quietly.
39
- *
40
- * Rather than write a Windows dialect of every research command — a second
41
- * behavior to keep in step forever — this finds a POSIX shell to run the
42
- * existing ones in. Git for Windows ships a full one, and git is already a
43
- * prerequisite for everything Ordewell does, so in practice it is there. Failing
44
- * that, cmd.exe is used and the classifier is told so, because the one thing
45
- * that must never happen is classifying a command in one language and running it
46
- * in another: `commandPolicy` reads {@link ResearchShell.dialect} for exactly
47
- * that reason.
48
- *
49
- * POSIX resolves to `{ file: null }`, meaning "use `shell: true`" — byte for
50
- * byte what the adapters did before this module existed.
51
- *
52
- * Windows paths are built with `path.win32` explicitly, not the host-flavoured
53
- * `path`, so the probe is the same on a Windows host as it is under a Linux
54
- * test runner.
55
- */
56
- type ShellDialect = 'posix' | 'cmd';
57
- interface ResearchShell {
58
- /**
59
- * Executable that takes a command string, or null to use the host default
60
- * via `shell: true`.
61
- */
62
- file: string | null;
63
- /** Arguments preceding the command string. */
64
- args: string[];
65
- /** The language the command string will be interpreted in. */
66
- dialect: ShellDialect;
67
- /**
68
- * Directory holding this shell's POSIX utilities, when it brings its own.
69
- * Prepended to PATH for the search subprocesses (`grep`, `tree`) that
70
- * `execFile` starts without a shell, so they resolve too.
71
- */
72
- utilsDir: string | null;
73
- }
74
- interface ResearchShellDeps {
75
- platform?: NodeJS.Platform;
76
- exists?: (candidate: string) => boolean;
77
- env?: NodeJS.ProcessEnv;
78
- }
79
- /**
80
- * The shell the planner's `bash` tool should use on this host. Resolved once per
81
- * process — the answer cannot change while Ordewell runs, and the probe costs a
82
- * handful of `stat` calls.
83
- */
84
- declare function resolveResearchShell(deps?: ResearchShellDeps): ResearchShell;
85
- /** Test seam: drop the per-process cache so the next call re-probes. */
86
- declare function clearResearchShellCache(): void;
87
- /**
88
- * PATH for the search subprocesses the adapters start without a shell, with the
89
- * research shell's own utilities in front. Without this, `grep` — the fallback
90
- * when ripgrep is absent — is unresolvable on a Windows box even when a
91
- * perfectly good `grep.exe` sits in the Git tree beside the shell.
92
- */
93
- declare function researchToolsPath(shell: ResearchShell, basePath: string | undefined): string;
94
- /**
95
- * A message explaining a degraded research surface, or null when there is
96
- * nothing to explain. Surfaced by the adapters on the first refused command so
97
- * the limitation is visible rather than inferred from bad answers.
98
- */
99
- declare function researchShellWarning(shell: ResearchShell): string | null;
100
-
101
30
  /**
102
31
  * Tiered classification for the planner's `bash` tool.
103
32
  *
@@ -211,6 +140,77 @@ interface CommandClassification {
211
140
  */
212
141
  declare function classifyCommand(command: string, opts?: CommandPolicyOptions): CommandClassification;
213
142
 
143
+ /**
144
+ * Which interpreter runs the planner's `bash` tool, and in which language.
145
+ *
146
+ * `AUTO_COMMANDS` — the read-only tier that runs with no prompt — is `ls`, `cat`,
147
+ * `wc`, `head`, `tail`, `du`, `df`, `file`, `sort`, `uniq`, `basename`, `find`,
148
+ * `grep`. That set is POSIX, and passing it to `shell: true` on Windows means
149
+ * cmd.exe, where most of those names do not exist and `find` is an unrelated
150
+ * program that returns plausible wrong output instead of an error. The planner's
151
+ * whole research surface degraded to guessing, quietly.
152
+ *
153
+ * Rather than write a Windows dialect of every research command — a second
154
+ * behavior to keep in step forever — this finds a POSIX shell to run the
155
+ * existing ones in. Git for Windows ships a full one, and git is already a
156
+ * prerequisite for everything Ordewell does, so in practice it is there. Failing
157
+ * that, cmd.exe is used and the classifier is told so, because the one thing
158
+ * that must never happen is classifying a command in one language and running it
159
+ * in another: `commandPolicy` reads {@link ResearchShell.dialect} for exactly
160
+ * that reason.
161
+ *
162
+ * POSIX resolves to `{ file: null }`, meaning "use `shell: true`" — byte for
163
+ * byte what the adapters did before this module existed.
164
+ *
165
+ * Windows paths are built with `path.win32` explicitly, not the host-flavoured
166
+ * `path`, so the probe is the same on a Windows host as it is under a Linux
167
+ * test runner.
168
+ */
169
+ type ShellDialect = 'posix' | 'cmd';
170
+ interface ResearchShell {
171
+ /**
172
+ * Executable that takes a command string, or null to use the host default
173
+ * via `shell: true`.
174
+ */
175
+ file: string | null;
176
+ /** Arguments preceding the command string. */
177
+ args: string[];
178
+ /** The language the command string will be interpreted in. */
179
+ dialect: ShellDialect;
180
+ /**
181
+ * Directory holding this shell's POSIX utilities, when it brings its own.
182
+ * Prepended to PATH for the search subprocesses (`grep`, `tree`) that
183
+ * `execFile` starts without a shell, so they resolve too.
184
+ */
185
+ utilsDir: string | null;
186
+ }
187
+ interface ResearchShellDeps {
188
+ platform?: NodeJS.Platform;
189
+ exists?: (candidate: string) => boolean;
190
+ env?: NodeJS.ProcessEnv;
191
+ }
192
+ /**
193
+ * The shell the planner's `bash` tool should use on this host. Resolved once per
194
+ * process — the answer cannot change while Ordewell runs, and the probe costs a
195
+ * handful of `stat` calls.
196
+ */
197
+ declare function resolveResearchShell(deps?: ResearchShellDeps): ResearchShell;
198
+ /** Test seam: drop the per-process cache so the next call re-probes. */
199
+ declare function clearResearchShellCache(): void;
200
+ /**
201
+ * PATH for the search subprocesses the adapters start without a shell, with the
202
+ * research shell's own utilities in front. Without this, `grep` — the fallback
203
+ * when ripgrep is absent — is unresolvable on a Windows box even when a
204
+ * perfectly good `grep.exe` sits in the Git tree beside the shell.
205
+ */
206
+ declare function researchToolsPath(shell: ResearchShell, basePath: string | undefined): string;
207
+ /**
208
+ * A message explaining a degraded research surface, or null when there is
209
+ * nothing to explain. Surfaced by the adapters on the first refused command so
210
+ * the limitation is visible rather than inferred from bad answers.
211
+ */
212
+ declare function researchShellWarning(shell: ResearchShell): string | null;
213
+
214
214
  /**
215
215
  * The policy half of the planner's filesystem: path confinement, the tiered
216
216
  * `bash` gate, and the definition-first symbol lookup. Adapters supply only the
@@ -4665,6 +4665,8 @@ declare function buildRunnerInvocation(opts: {
4665
4665
  headless?: boolean;
4666
4666
  interactive?: boolean;
4667
4667
  cwd?: string;
4668
+ /** The installed runner's `--version`, for a manifest whose command line differs by major version. */
4669
+ runnerVersion?: string;
4668
4670
  registry: RunnerRegistry;
4669
4671
  }): RunnerInvocation;
4670
4672
 
@@ -4721,6 +4723,8 @@ interface TmuxRunnerDeps {
4721
4723
  pollIntervalMs?: number;
4722
4724
  logDir?: string;
4723
4725
  clipboardCommand?: () => string | null;
4726
+ /** Reads the runner's version, for a manifest whose command line differs by major version. */
4727
+ runnerVersion?: RunnerVersionProbe;
4724
4728
  }
4725
4729
  declare class TmuxSession extends AbstractTerminalSession {
4726
4730
  private tmuxSession;
@@ -4790,6 +4794,7 @@ declare class TmuxRunner extends AbstractRunner<TmuxSession> {
4790
4794
  private pollIntervalMs;
4791
4795
  private logDir;
4792
4796
  private clipboardCommand;
4797
+ private runnerVersion;
4793
4798
  /** Retries get a freshly named window so a failed attempt's output stays inspectable. */
4794
4799
  private attempts;
4795
4800
  private ready;