@ordewell/core 0.4.10 → 0.4.12

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 (48) hide show
  1. package/dist/ApprovalPolicy-BVhGdECT.d.mts +79 -0
  2. package/dist/ApprovalPolicy-BVhGdECT.d.ts +79 -0
  3. package/dist/{ITerminalRunner-CbE6gKLI.d.ts → ITerminalRunner-D_RBDoHa.d.mts} +10 -81
  4. package/dist/{ITerminalRunner-1NAv8wCC.d.mts → ITerminalRunner-DqAs12sy.d.ts} +10 -81
  5. package/dist/{ModeResolver-F5wnlSz1.d.mts → ModeResolver-CCKYqdZC.d.mts} +1 -1
  6. package/dist/{ModeResolver-Dx5gzNPC.d.ts → ModeResolver-CzZd-i6T.d.ts} +1 -1
  7. package/dist/{Task-1NwmUImI.d.mts → Task-cGrfYRXK.d.mts} +8 -1
  8. package/dist/{Task-1NwmUImI.d.ts → Task-cGrfYRXK.d.ts} +8 -1
  9. package/dist/chunk-HPNUFBIT.mjs +19 -0
  10. package/dist/chunk-HPNUFBIT.mjs.map +1 -0
  11. package/dist/{chunk-IO6PEEN6.mjs → chunk-N6HTBUKG.mjs} +11 -1
  12. package/dist/chunk-N6HTBUKG.mjs.map +1 -0
  13. package/dist/{chunk-TUGJXD4G.mjs → chunk-UEJ3SZQ7.mjs} +2 -2
  14. package/dist/{chunk-YI4ZDZEE.mjs → chunk-YTJ7EOV6.mjs} +62 -3
  15. package/dist/chunk-YTJ7EOV6.mjs.map +1 -0
  16. package/dist/index.d.mts +187 -235
  17. package/dist/index.d.ts +187 -235
  18. package/dist/index.js +643 -439
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +611 -486
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/order-labels.d.mts +17 -0
  23. package/dist/order-labels.d.ts +17 -0
  24. package/dist/order-labels.js +44 -0
  25. package/dist/order-labels.js.map +1 -0
  26. package/dist/order-labels.mjs +9 -0
  27. package/dist/order-labels.mjs.map +1 -0
  28. package/dist/{parsing-BqbJySeo.d.mts → parsing-BT-dvFcu.d.mts} +2 -2
  29. package/dist/{parsing-X0Gvuz-q.d.ts → parsing-D87zKtTe.d.ts} +2 -2
  30. package/dist/parsing.d.mts +3 -3
  31. package/dist/parsing.d.ts +3 -3
  32. package/dist/parsing.js.map +1 -1
  33. package/dist/parsing.mjs +3 -2
  34. package/dist/{plan-utils-DtsfHnn_.d.ts → plan-utils-BbC9KdK4.d.ts} +139 -3
  35. package/dist/{plan-utils-B5rVXNVI.d.mts → plan-utils-DHBIvkiT.d.mts} +139 -3
  36. package/dist/plan-utils.d.mts +4 -3
  37. package/dist/plan-utils.d.ts +4 -3
  38. package/dist/plan-utils.js +14 -2
  39. package/dist/plan-utils.js.map +1 -1
  40. package/dist/plan-utils.mjs +9 -4
  41. package/dist/testing.d.mts +3 -2
  42. package/dist/testing.d.ts +3 -2
  43. package/package.json +12 -2
  44. package/skills/grilling/SKILL.md +31 -0
  45. package/skills/to-spec/SKILL.md +64 -0
  46. package/dist/chunk-IO6PEEN6.mjs.map +0 -1
  47. package/dist/chunk-YI4ZDZEE.mjs.map +0 -1
  48. /package/dist/{chunk-TUGJXD4G.mjs.map → chunk-UEJ3SZQ7.mjs.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,15 +1,18 @@
1
- import { h as RunnerId, c as PlanStatus, L as LegacyPlanState, a as DiscoveredModel, T as Task, d as ResearchProgress, R as ResearchLogEntry, C as ConversationMessage, n as TaskSnapshot, Q as QueuedMessage, A as ActiveTaskSession, g as ResearchToolType, u as Verdict, e as ResearchStep, b as PlanState } from './Task-1NwmUImI.js';
2
- export { D as DiscoveredMode, M as Message, P as PlanModificationWarnings, f as ResearchStepOutcome, S as StreamEvent, i as StreamStepEvent, j as StreamThinkingEvent, k as TaskMode, l as TaskModelAssignment, m as TaskOutputSummary, o as TaskStatus, p as TaskType, q as ThinkingBlock, U as UserPromptEntry, r as UserStep, V as ValidationCheck, s as ValidationContext, t as ValidationResult, v as VerificationCheck, w as addTaskToPlan, x as createEmptyPlan, y as createTask, z as emptyWarnings, B as flattenTasks, E as migrateLegacyPlan, F as migratePlanState, G as migrateTask, H as removeTaskFromPlan, I as renumberTasks, J as updateTaskInPlan, K as validateModifiedPlan, N as warningsText } from './Task-1NwmUImI.js';
3
- import { n as IFileSystem, I as IApproval, R as ReadFileOpts, T as ToolOutcome, k as GrepOptions, j as GlobOptions, i as FindSymbolOptions, f as ApprovalRequest, m as IConfig, A as AiProvider, z as ProviderModelLists, c as ApprovalMode, q as ITerminalSession, p as ITerminalRunner, K as RunnerRegistry, s as OrchestratorOption, b as ApprovalKind, g as ApprovalSource, H as RunnerInvocation, o as IPluginStore, J as RunnerPluginManifest, E as ResolveContext } from './ITerminalRunner-CbE6gKLI.js';
4
- export { a as AllProviderModels, d as ApprovalPolicy, e as ApprovalPolicyOptions, C as CatalogModel, D as DENY_ALL, h as DiscoveryCommand, F as FetchAllProviderModelsOptions, G as GREP_DEFAULT_HEAD_LIMIT, l as GrepOutputMode, M as ModelCatalog, r as ModelShortcut, O as ORCHESTRATOR_SHORTCUTS, P as PluginCloneFn, t as PluginEntry, u as PluginFeatures, v as PluginMode, w as PluginModelDiscovery, x as PluginRunnerDef, y as ProviderCredentialSource, B as ProviderModelsResult, S as SEARCH_EXCLUSIONS, L as collectProviderCredentials, N as enabledRunners, Q as fetchAllProviderModels, U as isReservedRunnerName, V as knownModelId, W as resolveModelShortcut, X as resolveProvider, Y as toOrchestratorOptions } from './ITerminalRunner-CbE6gKLI.js';
5
- import { R as RunnerModeInfo } from './ModeResolver-Dx5gzNPC.js';
6
- export { M as ManifestLookup, b as buildModeGuide, f as filteredBuildModes, r as resolveDefaultMode, a as resolveTaskMode, c as runnerModesFrom } from './ModeResolver-Dx5gzNPC.js';
7
- import { T as TaskOp } from './plan-utils-DtsfHnn_.js';
8
- export { A as ApplyTaskOpsResult, a as TaskRef, b as applyTaskOps, c as canMergeTasks, d as canSetDependencies, e as canSplitTask, f as classifyOutcome, g as dependencyCandidates, h as dependentsOf, p as parseTaskOpsJson, s as summarizeToolCall, t as textHasTaskOps } from './plan-utils-DtsfHnn_.js';
1
+ import { h as RunnerId, c as PlanStatus, L as LegacyPlanState, a as DiscoveredModel, T as Task, d as ResearchProgress, R as ResearchLogEntry, C as ConversationMessage, n as TaskSnapshot, Q as QueuedMessage, A as ActiveTaskSession, g as ResearchToolType, b as PlanState, v as Verdict } from './Task-cGrfYRXK.js';
2
+ export { D as DiscoveredMode, M as Message, P as PlanModificationWarnings, e as ResearchStep, f as ResearchStepOutcome, S as StreamEvent, i as StreamStepEvent, j as StreamThinkingEvent, k as TaskMode, l as TaskModelAssignment, m as TaskOutputSummary, o as TaskStatus, p as TaskType, q as TaskWithParent, r as ThinkingBlock, U as UserPromptEntry, s as UserStep, V as ValidationCheck, t as ValidationContext, u as ValidationResult, w as VerificationCheck, x as addTaskToPlan, y as createEmptyPlan, z as createTask, B as emptyWarnings, E as flattenTasks, F as flattenTasksWithParents, G as migrateLegacyPlan, H as migratePlanState, I as migrateTask, J as removeTaskFromPlan, K as renumberTasks, N as updateTaskInPlan, O as validateModifiedPlan, W as warningsText } from './Task-cGrfYRXK.js';
3
+ import { f as IFileSystem, R as ReadFileOpts, T as ToolOutcome, d as GrepOptions, c as GlobOptions, b as FindSymbolOptions, I as IConfig, A as AiProvider, r as ProviderModelLists, i as ITerminalSession, h as ITerminalRunner, w as RunnerRegistry, k as OrchestratorOption, u as RunnerInvocation, g as IPluginStore, v as RunnerPluginManifest, t as ResolveContext } from './ITerminalRunner-DqAs12sy.js';
4
+ export { a as AllProviderModels, C as CatalogModel, D as DiscoveryCommand, F as FetchAllProviderModelsOptions, G as GREP_DEFAULT_HEAD_LIMIT, e as GrepOutputMode, M as ModelCatalog, j as ModelShortcut, O as ORCHESTRATOR_SHORTCUTS, P as PluginCloneFn, l as PluginEntry, m as PluginFeatures, n as PluginMode, o as PluginModelDiscovery, p as PluginRunnerDef, q as ProviderCredentialSource, s as ProviderModelsResult, S as SEARCH_EXCLUSIONS, x as collectProviderCredentials, y as enabledRunners, z as fetchAllProviderModels, B as isReservedRunnerName, E as knownModelId, H as resolveModelShortcut, J as resolveProvider, K as toOrchestratorOptions } from './ITerminalRunner-DqAs12sy.js';
5
+ import { I as IApproval, d as ApprovalRequest, a as ApprovalMode } from './ApprovalPolicy-BVhGdECT.js';
6
+ export { A as ApprovalKind, b as ApprovalPolicy, c as ApprovalPolicyOptions, e as ApprovalSource, D as DENY_ALL } from './ApprovalPolicy-BVhGdECT.js';
7
+ import { R as RunnerModeInfo } from './ModeResolver-CzZd-i6T.js';
8
+ export { M as ManifestLookup, b as buildModeGuide, f as filteredBuildModes, r as resolveDefaultMode, a as resolveTaskMode, c as runnerModesFrom } from './ModeResolver-CzZd-i6T.js';
9
+ import { T as TaskOp, c as SessionBroadcaster } from './plan-utils-BbC9KdK4.js';
10
+ export { A as ApplyTaskOpsResult, C as CHECKPOINT_TRUNCATE_LENGTH, S as SerializedPlan, a as SerializedTask, b as SerializedTaskStatus, d as SessionMessage, e as TaskRef, f as applyTaskOps, g as canMergeTasks, h as canSetDependencies, i as canSplitTask, j as classifyOutcome, k as dependencyCandidates, l as dependentsOf, m as executionSummary, p as parseTaskOpsJson, s as serializePlan, n as serializeTask, o as serializeTaskStatus, q as summarizeToolCall, t as textHasTaskOps, r as truncateCheckpointSummary } from './plan-utils-BbC9KdK4.js';
9
11
  import { ChildProcess } from 'child_process';
10
12
  import { EventEmitter } from 'events';
11
- import { b as PlanParseError } from './parsing-X0Gvuz-q.js';
12
- 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, p as parsePartialPlan, n as parsePlanJson, s as stripModelNoise, o as stripTrailingCommas, v as validatePlanModification } from './parsing-X0Gvuz-q.js';
13
+ import { b as PlanParseError } from './parsing-D87zKtTe.js';
14
+ 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, p as parsePartialPlan, n as parsePlanJson, s as stripModelNoise, o as stripTrailingCommas, v as validatePlanModification } from './parsing-D87zKtTe.js';
15
+ export { resolveOrderLabel, taskOrderLabel } from './order-labels.js';
13
16
 
14
17
  interface SessionMeta {
15
18
  id: string;
@@ -559,24 +562,12 @@ declare class ConsoleLogger implements ILogger {
559
562
  declare const defaultLogger: ILogger;
560
563
 
561
564
  interface UserSettings {
562
- grillMe: {
563
- enabled: boolean;
564
- };
565
565
  tdd: {
566
566
  enabled: boolean;
567
567
  };
568
- prd: {
569
- enabled: boolean;
570
- };
571
- review: {
572
- enabled: boolean;
573
- };
574
568
  verification: {
575
569
  enabled: boolean;
576
570
  };
577
- researchSubagents: {
578
- enabled: boolean;
579
- };
580
571
  modelAllowlist?: Record<string, string[]>;
581
572
  /** Last model (and its thinking effort) the user chose for each planner backend, keyed by AiProvider id. */
582
573
  plannerModels?: Record<string, {
@@ -594,10 +585,10 @@ interface UserSettings {
594
585
  * Ordewell processes on one machine can hold *different* settings at the same
595
586
  * time. Without it the file is a single shared mutable global: the benchmark
596
587
  * harness runs parallel lanes that each pin the mode toggles, and because
597
- * `getAll()` re-reads whenever the mtime moves, a lane needing
598
- * `researchSubagents: true` would silently plan with `false` the moment another
599
- * lane pinned its own — turning an A/B of that toggle into a comparison of one
600
- * condition against itself.
588
+ * `getAll()` re-reads whenever the mtime moves, a lane needing a toggle
589
+ * `true` would silently plan with `false` the moment another lane pinned its
590
+ * own — turning an A/B of that toggle into a comparison of one condition
591
+ * against itself.
601
592
  */
602
593
  declare function getSettingsPath(): string;
603
594
  declare class SettingsService {
@@ -607,18 +598,10 @@ declare class SettingsService {
607
598
  constructor(filePath?: string);
608
599
  getAll(): UserSettings;
609
600
  private fileMtimeMs;
610
- getGrillMe(): boolean;
611
601
  getTdd(): boolean;
612
- getPrd(): boolean;
613
- setGrillMe(enabled: boolean): void;
614
602
  setTdd(enabled: boolean): void;
615
- setPrd(enabled: boolean): void;
616
- getReview(): boolean;
617
- setReview(enabled: boolean): void;
618
603
  getVerification(): boolean;
619
604
  setVerification(enabled: boolean): void;
620
- getResearchSubagents(): boolean;
621
- setResearchSubagents(enabled: boolean): void;
622
605
  getModelAllowlist(runner: string): string[] | undefined;
623
606
  setModelAllowlist(runner: string, ids: string[] | undefined): void;
624
607
  getPlannerModel(provider: string): {
@@ -637,12 +620,8 @@ declare class SettingsService {
637
620
 
638
621
  /** How the same toggle is named once a host has read it off disk. */
639
622
  interface PlannerRuntimeToggles {
640
- grillMeEnabled: boolean;
641
623
  tddEnabled: boolean;
642
- prdEnabled: boolean;
643
- reviewEnabled: boolean;
644
624
  verificationEnabled: boolean;
645
- researchSubagentsEnabled: boolean;
646
625
  }
647
626
  /**
648
627
  * The planner-facing mode set for one operation. Replaces the boolean tail that
@@ -651,11 +630,7 @@ interface PlannerRuntimeToggles {
651
630
  */
652
631
  interface PlannerModes {
653
632
  autonomousDefault: boolean;
654
- grillMe: boolean;
655
- prd: boolean;
656
- review: boolean;
657
633
  verification: boolean;
658
- researchSubagents: boolean;
659
634
  }
660
635
 
661
636
  /**
@@ -750,6 +725,65 @@ declare abstract class AbstractRunner<S extends ITerminalSession> implements ITe
750
725
  }): Promise<ITerminalSession>;
751
726
  }
752
727
 
728
+ declare function stripAnsi(text: string): string;
729
+ declare function posixShellQuote(s: string): string;
730
+ /**
731
+ * Wrap a command for execution inside a POSIX login shell, which is what
732
+ * resolves runner binaries managed by nvm/volta/asdf.
733
+ *
734
+ * Deliberately POSIX-only. This used to take a `platform` and emit
735
+ * `powershell.exe -Command "'claude' '-p' '…'"` for Windows, which PowerShell
736
+ * cannot run at all: a quoted string in leading position is parsed in
737
+ * expression mode, so the invocation died with a parse error before the runner
738
+ * started — a task that failed instantly, every time, on that platform. Windows
739
+ * has no login-shell equivalent to emulate (its PATH comes from the registry
740
+ * and is already inherited), so {@link planShellLaunch} starts the runner
741
+ * directly there instead of routing it through a shell. Platform choice belongs
742
+ * to that function; this one only knows how to phrase the POSIX half.
743
+ */
744
+ declare function buildShellInvocation(command: string, args: string[]): {
745
+ shellPath: string;
746
+ shellArgs: string[];
747
+ };
748
+ /** A terminal size in cells. */
749
+ interface PtySize {
750
+ cols: number;
751
+ rows: number;
752
+ }
753
+ /**
754
+ * Options for {@link wrapWithPty}. `size` sets the PTY's window size before the
755
+ * wrapped command starts. `controlChannel` makes the wrapper listen on its fd 3
756
+ * for `"<cols> <rows>"` lines and resize the PTY live — the caller spawns the
757
+ * child with an extra pipe there and writes resize requests into it.
758
+ */
759
+ interface PtyWrapOptions {
760
+ size?: PtySize;
761
+ controlChannel?: boolean;
762
+ }
763
+ /**
764
+ * Wrap a command in `script` to allocate the PTY some runners require when
765
+ * headless; `-e` propagates the child's exit code so verification still works.
766
+ *
767
+ * POSIX-only by nature — there is no `script` on Windows, which
768
+ * `HeadlessRunner`'s `hasScriptCmd` probe already discovers, so this is never
769
+ * reached there.
770
+ *
771
+ * `script` sizes its PTY off the terminal it is attached to; spawned off a pipe
772
+ * (every transport here) it allocates 0x0, which a runner TUI renders as
773
+ * garbage. `stty` fixes the size on the PTY slave before the command starts, so
774
+ * the TUI reads its true dimensions via ioctl.
775
+ *
776
+ * The control channel can only live on a *separate* fd from the agent's stdin,
777
+ * so the wrapper saves the PTY on fd 4 first: POSIX sends an asynchronous
778
+ * command's stdin to `/dev/null`, so the watcher's own stdin cannot be the PTY.
779
+ * A background job also inherits an fd 0 that is not the terminal; `stty` names
780
+ * fd 4 explicitly for that reason.
781
+ */
782
+ declare function wrapWithPty(command: string, args: string[], opts?: PtyWrapOptions): {
783
+ command: string;
784
+ args: string[];
785
+ };
786
+
753
787
  /**
754
788
  * cmd.exe's command-line buffer. A longer line is truncated rather than
755
789
  * rejected, which would corrupt a planner's system prompt or a task's prompt
@@ -884,7 +918,7 @@ declare function planShellLaunch(command: string, args: string[], deps?: LaunchD
884
918
 
885
919
  type SpawnFn = (command: string, args: string[], options: {
886
920
  env: NodeJS.ProcessEnv;
887
- stdio: ['pipe', 'pipe', 'pipe'];
921
+ stdio: Array<'pipe' | 'ignore'>;
888
922
  cwd: string;
889
923
  /** Set by the Windows batch route, where `args` is already a quoted command line. */
890
924
  windowsVerbatimArguments?: boolean;
@@ -904,12 +938,17 @@ declare class HeadlessSession extends AbstractTerminalSession {
904
938
  private spawnImpl;
905
939
  private process;
906
940
  private outputBuffer;
941
+ private controlStream;
907
942
  constructor(id: string, taskId: string, spawnImpl: SpawnFn);
908
943
  get isStarted(): boolean;
909
- start(launch: LaunchPlan, cwd: string, resolvedPath: string, env?: Record<string, string>): void;
944
+ start(launch: LaunchPlan, cwd: string, resolvedPath: string, env?: Record<string, string>, options?: {
945
+ controlChannel?: boolean;
946
+ }): void;
910
947
  kill(): void;
911
948
  getOutput(): string;
912
949
  write(text: string): void;
950
+ /** PTY resize requests from a surface that owns the terminal rendering the wrapper. */
951
+ writeControl(text: string): void;
913
952
  }
914
953
  type RunnerSpawnOptions = Parameters<ITerminalRunner['spawn']>[0];
915
954
  /** Everything needed to start one runner process, resolved before any child exists. */
@@ -936,7 +975,7 @@ declare class HeadlessRunner extends AbstractRunner<HeadlessSession> {
936
975
  constructor(deps?: HeadlessRunnerDeps);
937
976
  protected createSession(id: string, taskId: string): HeadlessSession;
938
977
  /** Everything up to, but not including, spawning — so a surface that owns its own child reaches the same decisions. */
939
- protected prepareLaunch(opts: RunnerSpawnOptions): Promise<PreparedLaunch>;
978
+ protected prepareLaunch(opts: RunnerSpawnOptions, ptyOptions?: PtyWrapOptions): Promise<PreparedLaunch>;
940
979
  spawn(opts: RunnerSpawnOptions): Promise<ITerminalSession>;
941
980
  }
942
981
 
@@ -1128,8 +1167,8 @@ declare class CliAgentAiService implements IAiService {
1128
1167
  /**
1129
1168
  * Drive one user message to a settled planner turn. Same shape as the API
1130
1169
  * backend's conversation loop minus the tool rounds — those belong to the
1131
- * agent now — and with the same three policies layered on top: the PRD gate,
1132
- * the empty-reply nudge, and a bounded corrective re-emit for botched JSON.
1170
+ * agent now — and with the same two policies layered on top: the
1171
+ * empty-reply nudge, and a bounded corrective re-emit for botched JSON.
1133
1172
  */
1134
1173
  private runConversation;
1135
1174
  /**
@@ -1182,12 +1221,7 @@ interface ConversationRequest {
1182
1221
  fetcher?: IWebFetcher;
1183
1222
  runnerModes?: Record<RunnerId, RunnerModeInfo[]>;
1184
1223
  autonomousDefault?: boolean;
1185
- grillMeEnabled?: boolean;
1186
- prdEnabled?: boolean;
1187
- reviewEnabled?: boolean;
1188
1224
  verificationEnabled?: boolean;
1189
- /** Declare the spawn_research_agent tool to the planner (issue #34, default off). */
1190
- researchSubagentsEnabled?: boolean;
1191
1225
  signal?: AbortSignal;
1192
1226
  /**
1193
1227
  * Persisted dialogue to seed a resumed conversation (session reload). The
@@ -1334,12 +1368,6 @@ interface ConversationTurnContext {
1334
1368
  runnerModes?: Record<RunnerId, RunnerModeInfo[]>;
1335
1369
  autonomousDefault?: boolean;
1336
1370
  fetcher?: IWebFetcher;
1337
- /** PRD toggle: a plan must not commit before a PRD block has appeared. */
1338
- prdEnabled?: boolean;
1339
- /** Set once any turn carries an ORDEWELL_PRD block; gates the missing-PRD nudge. */
1340
- prdCaptured?: boolean;
1341
- /** The missing-PRD corrective nudge is sent at most once per conversation. */
1342
- prdNudgeSent?: boolean;
1343
1371
  }
1344
1372
  declare abstract class BaseAiService {
1345
1373
  protected config: IConfig;
@@ -1348,8 +1376,6 @@ declare abstract class BaseAiService {
1348
1376
  setProgress: (fn: (p: ResearchProgress) => void) => void;
1349
1377
  } | null;
1350
1378
  protected activeAbort: AbortController | null;
1351
- /** researchSubagents toggle (issue #34): set per operation from the live settings snapshot; off means bit-for-bit sequential behavior. */
1352
- protected researchSubagentsEnabled: boolean;
1353
1379
  constructor(config: IConfig);
1354
1380
  abstract reset(): void;
1355
1381
  abstract ensureInit(): void;
@@ -1625,6 +1651,8 @@ declare class TaskOrchestrator {
1625
1651
  private observers;
1626
1652
  private tddEnabled;
1627
1653
  constructor(config: IConfig, notifications: INotification, terminalRunner: ITerminalRunner, store?: PlanStore);
1654
+ /** Advisory silence timestamp for a task's live runner, or null if not idle. */
1655
+ getIdleSince(taskId: string): string | null;
1628
1656
  get storeInstance(): PlanStore;
1629
1657
  setWorkspaceRoot(fn: () => string): void;
1630
1658
  setRegistry(registry: RunnerRegistry): void;
@@ -2264,135 +2292,38 @@ declare function mapAgentTool(name: string): MappedTool;
2264
2292
  */
2265
2293
  declare function normalizeAgentArgs(tool: ResearchToolType, args: Record<string, unknown>): Record<string, unknown>;
2266
2294
 
2267
- type SerializedTaskStatus = {
2268
- id: string;
2269
- status: string;
2270
- verdict: {
2271
- outcome: 'pass' | 'fail';
2272
- reason: string;
2273
- checks: Verdict['checks'];
2274
- } | null;
2275
- };
2276
- type SerializedTask = {
2277
- id: string;
2278
- order: number;
2279
- title: string;
2280
- type: string;
2295
+ declare const BUILTIN_SKILL_NAMES: readonly ["grilling", "to-spec"];
2296
+ interface SkillMetadata {
2297
+ name: string;
2281
2298
  description: string;
2282
- dependencies: string[];
2283
- assignedRunner: RunnerId;
2284
- assignedModel: Task['assignedModel'] | null;
2285
- taskMode: string;
2286
- prompt: string | null;
2287
- subtasks: SerializedTask[];
2288
- userSteps: Task['userSteps'];
2289
- thinkingEffort: Task['thinkingEffort'];
2290
- autonomy: Task['autonomy'];
2291
- sliceType: Task['sliceType'];
2292
- userStoriesCovered: Task['userStoriesCovered'];
2293
- };
2294
- type SerializedPlan = {
2295
- tasks: SerializedTask[];
2296
- runners: RunnerId[];
2297
- generatedAt: string;
2298
- conversationHistory?: LegacyPlanState['conversationHistory'];
2299
- prdMarkdown?: string;
2300
- queuedMessages?: QueuedMessage[];
2301
- };
2302
- type SessionMessage = {
2303
- type: 'plan_generated';
2304
- plan: SerializedPlan;
2305
- goal: string;
2306
- runners: RunnerId[];
2307
- } | {
2308
- type: 'planner_message';
2299
+ disableModelInvocation?: boolean;
2300
+ }
2301
+ interface SkillInfo {
2302
+ name: string;
2303
+ description: string;
2304
+ metadata: SkillMetadata;
2305
+ /** Full content of SKILL.md with frontmatter stripped */
2309
2306
  content: string;
2310
- timestamp: string;
2311
- } | {
2312
- type: 'status_update';
2313
- tasks: SerializedTaskStatus[];
2314
- } | {
2315
- type: 'review_needed';
2316
- tasks: SerializedTask[];
2317
- } | {
2318
- type: 'review_approved';
2319
- } | {
2320
- type: 'checkpoint';
2321
- taskId: string;
2322
- taskTitle: string;
2323
- summary: string;
2324
- } | {
2325
- type: 'execution_complete';
2326
- summary: {
2327
- total: number;
2328
- completed: number;
2329
- failed: number;
2330
- };
2331
- } | {
2332
- type: 'execution_stopped';
2333
- } | {
2334
- type: 'queue_ready';
2335
- } | {
2336
- type: 'task_updated';
2337
- taskId: string;
2338
- changes: Record<string, unknown>;
2339
- } | {
2340
- type: 'task_started';
2341
- taskId: string;
2342
- order: number;
2343
- title: string;
2344
- runner: RunnerId;
2345
- modelId?: string;
2346
- } | {
2347
- type: 'task_output';
2348
- taskId: string;
2349
- text: string;
2350
- } | {
2351
- type: 'plan_thinking';
2352
- text: string;
2353
- } | {
2354
- type: 'research_step';
2355
- tool: string;
2356
- toolLabel?: string;
2357
- args: string;
2358
- subagentId?: string;
2359
- toolCallId?: string;
2360
- } | {
2361
- type: 'plan_token';
2362
- token: string;
2363
- } | {
2364
- type: 'research_step_done';
2365
- step: ResearchStep;
2366
- subagentId?: string;
2367
- } | {
2368
- type: 'approval_request';
2369
- id: string;
2370
- kind: ApprovalKind;
2371
- subject: string;
2372
- scope: string;
2373
- detail?: string;
2374
- } | {
2375
- type: 'approval_settled';
2376
- id: string;
2377
- granted: boolean;
2378
- } | {
2379
- type: 'approval_decided';
2380
- kind: ApprovalKind;
2381
- subject: string;
2382
- scope: string;
2383
- detail?: string;
2384
- granted: boolean;
2385
- source: Exclude<ApprovalSource, 'asked'>;
2386
- };
2387
- type SessionBroadcaster = (msg: SessionMessage) => void;
2388
- declare function serializeTask(t: Task): SerializedTask;
2389
- declare function serializeTaskStatus(t: Task): SerializedTaskStatus;
2390
- declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
2391
- declare function executionSummary(tasks: Task[]): {
2392
- total: number;
2393
- completed: number;
2394
- failed: number;
2395
- };
2307
+ /** Absolute path to the SKILL.md file */
2308
+ path: string;
2309
+ /** Whether this came from global (~/.ordewell/skills/) or local (.ordewell/skills/) */
2310
+ source: 'global' | 'local';
2311
+ }
2312
+ declare class SkillsService {
2313
+ private workspaceRoot?;
2314
+ constructor(workspaceRoot?: string | undefined);
2315
+ private localDir;
2316
+ private globalDir;
2317
+ private seed;
2318
+ seedBuiltinSkill(name: string): boolean;
2319
+ /** Removes a retired built-in's seed from the global dir, but only if it's untouched by the user. */
2320
+ private isUnmodifiedRetiredSeed;
2321
+ private pruneRetired;
2322
+ findSkill(name: string): SkillInfo | undefined;
2323
+ listSkills(): SkillInfo[];
2324
+ getSkillContent(name: string): string | undefined;
2325
+ }
2326
+ declare function createSkillsService(workspaceRoot?: string): SkillsService;
2396
2327
 
2397
2328
  /**
2398
2329
  * A direct (non-planner) plan edit the session refused. Distinct from a plain
@@ -2417,11 +2348,7 @@ type SessionPlanner = Pick<Planner, 'generate' | 'modify' | 'modifyDuringExecuti
2417
2348
  /** Runtime prefs read live — may toggle between operations. */
2418
2349
  interface SessionRuntimeSettings {
2419
2350
  tddEnabled: boolean;
2420
- grillMeEnabled: boolean;
2421
- prdEnabled?: boolean;
2422
- reviewEnabled?: boolean;
2423
2351
  verificationEnabled?: boolean;
2424
- researchSubagentsEnabled?: boolean;
2425
2352
  modelAllowlist?: Record<string, string[]>;
2426
2353
  }
2427
2354
  /**
@@ -2432,11 +2359,19 @@ interface SessionRuntimeSettings {
2432
2359
  * is not a toggle.
2433
2360
  */
2434
2361
  declare function sessionRuntimeSettings(settings: UserSettings): SessionRuntimeSettings;
2362
+ /**
2363
+ * Resolve a `/skill-name` invocation to the skill's markdown content. Pure and
2364
+ * exported so surfaces and verification can drive substitution without a full
2365
+ * Session. Plain text passes through unchanged; an unknown skill becomes a
2366
+ * notice naming what IS available instead of a bare slash token that a runner
2367
+ * would mis-resolve in its own skills directory.
2368
+ */
2369
+ declare function resolveSkillInvocation(text: string, skillsService: Pick<SkillsService, 'findSkill' | 'listSkills'>): string;
2435
2370
  /**
2436
2371
  * Everything a delivery surface constructs to host a session. Structural config
2437
2372
  * (enabledRunners, orchestratorModel, providerModelLists) is snapshotted inside
2438
2373
  * `config` at construction and never re-read from the environment. Runtime
2439
- * settings (tdd, grillMe) are read live via the `settings` callback so a toggle
2374
+ * settings (tdd, verification) are read live via the `settings` callback so a toggle
2440
2375
  * between generate and execute takes effect.
2441
2376
  */
2442
2377
  interface SessionDeps {
@@ -2452,7 +2387,7 @@ interface SessionDeps {
2452
2387
  broadcast: SessionBroadcaster;
2453
2388
  /** Shared across sessions — sole producer of model catalogs and routing lists. */
2454
2389
  modelResolver: ModelResolver;
2455
- /** Live runtime settings (tdd, grillMe). Read at each operation that needs them. */
2390
+ /** Live runtime settings (tdd, verification). Read at each operation that needs them. */
2456
2391
  settings: () => SessionRuntimeSettings;
2457
2392
  /**
2458
2393
  * Host-assigned session id. When set, every persist writes under this id so
@@ -2468,6 +2403,11 @@ interface SessionDeps {
2468
2403
  aiService?: IAiService;
2469
2404
  /** Plan-generation seam. Defaults to a Planner over the session's aiService. */
2470
2405
  planner?: SessionPlanner;
2406
+ /**
2407
+ * Skill lookup for /skill-name interception. Defaults to a SkillsService
2408
+ * over the session's workspace root.
2409
+ */
2410
+ skillsService?: SkillsService;
2471
2411
  }
2472
2412
  /**
2473
2413
  * The per-session execution stack — deepened from a wiring bag into the
@@ -2509,6 +2449,7 @@ declare class Session {
2509
2449
  private unsubObserver;
2510
2450
  private readonly hostSessionId?;
2511
2451
  private currentSessionId;
2452
+ private readonly skillsService;
2512
2453
  constructor(deps: SessionDeps);
2513
2454
  /**
2514
2455
  * The planner transport for the provider configured *right now* (ADR-0009).
@@ -2612,8 +2553,8 @@ declare class Session {
2612
2553
  */
2613
2554
  startPlanning(goal: string, runners: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
2614
2555
  /**
2615
- * Every subsequent user reply in the planning conversation — grill-me
2616
- * answers, PRD accept/adjust, outline confirm. One branch, no phase ladder.
2556
+ * Every subsequent user reply in the planning conversation — clarifying
2557
+ * answers, outline confirm. One branch, no phase ladder.
2617
2558
  */
2618
2559
  continueConversation(userMessage: string, options?: GeneratePlanOptions): Promise<LegacyPlanState>;
2619
2560
  /**
@@ -2648,8 +2589,8 @@ declare class Session {
2648
2589
  * The catalog the planner may actually draw from — model ids and task-mode
2649
2590
  * ids, per selected runner — emitted on EVERY turn, before any plan exists
2650
2591
  * or after. The system prompt shows this once at conversation start; a long
2651
- * grill-me interview or PRD negotiation outlives that single showing and the
2652
- * planner starts misquoting it, so this re-states it per turn instead.
2592
+ * clarifying conversation outlives that single showing and the planner
2593
+ * starts misquoting it, so this re-states it per turn instead.
2653
2594
  *
2654
2595
  * Built from the allowlist-filtered view (`filterModelsForPrompt`), the same
2655
2596
  * one the system prompt used — a restricted allowlist stays a hard bound on
@@ -2682,6 +2623,15 @@ declare class Session {
2682
2623
  private resumeConversation;
2683
2624
  /** Whether the planner conversation is live (started and not yet committed to a plan). */
2684
2625
  get isConversationActive(): boolean;
2626
+ /**
2627
+ * Intercept a skill invocation (/skill-name) and substitute the skill's
2628
+ * markdown content BEFORE the message reaches the planner. Prevents runners
2629
+ * (Claude Code, OpenCode) from trying to resolve the skill in their own
2630
+ * directory instead of .ordewell/skills/. An unknown skill is surfaced to
2631
+ * the planner as a notice naming what IS available, rather than passing a
2632
+ * bare /unknown through to be mis-resolved.
2633
+ */
2634
+ private resolveSkillInvocation;
2685
2635
  /** Append one dialogue entry to the persisted transcript. Callers persist via the mutatePlan ritual. */
2686
2636
  private appendTranscript;
2687
2637
  /** Commit a settled (non-task_ops) turn. Both branches run the mutatePlan ritual. */
@@ -2830,8 +2780,27 @@ declare class Session {
2830
2780
  get aiServiceInstance(): IAiService;
2831
2781
  }
2832
2782
 
2783
+ /**
2784
+ * Where Ordewell keeps machine-global data (settings, daemon tokens, caches,
2785
+ * user plugins). A single home for everything not tied to a project directory,
2786
+ * so per-project state in `.ordewell/` and global state never collide.
2787
+ */
2788
+ declare function globalDataDir(): string;
2789
+ /**
2790
+ * One-time lift of a pre-`.ordewell` install's files into the new location.
2791
+ * Each file/dir is checked independently — old exists, new doesn't — rather
2792
+ * than gating the whole thing on "new dir doesn't exist yet". A machine that
2793
+ * migrated `settings.json` under an earlier release already has `globalDataDir()`
2794
+ * on disk, which would otherwise permanently skip lifting anything added to
2795
+ * this list later (`.env` did exactly that: real API keys stranded in the old
2796
+ * dir because the settings.json move had already made the new dir exist).
2797
+ */
2798
+ declare function migrateOldConfigDir(): void;
2799
+
2833
2800
  type VerdictListener = (taskId: string, verdict: Verdict, output: string) => void;
2834
2801
  type CheckpointListener = (taskId: string, summary: string) => void;
2802
+ /** Fires on every idleSince transition (null→timestamp on silence, timestamp→null on resume/teardown). */
2803
+ type IdleListener = (taskId: string, idleSince: string | null) => void;
2835
2804
  declare class VerdictEngine {
2836
2805
  private markerSeen;
2837
2806
  private buffers;
@@ -2839,6 +2808,7 @@ declare class VerdictEngine {
2839
2808
  private pausedSessions;
2840
2809
  private listeners;
2841
2810
  private checkpointListeners;
2811
+ private idleListeners;
2842
2812
  /**
2843
2813
  * Per-task generation counter. Incremented on every watch() and clear().
2844
2814
  * Stale callbacks (from a prior session whose generation doesn't match
@@ -2846,8 +2816,17 @@ declare class VerdictEngine {
2846
2816
  * wrong session.
2847
2817
  */
2848
2818
  private generations;
2819
+ private idleTimers;
2820
+ private idleSince;
2849
2821
  onVerdict(listener: VerdictListener): void;
2850
2822
  onCheckpoint(listener: CheckpointListener): void;
2823
+ onIdleChange(listener: IdleListener): void;
2824
+ /** Advisory silence timestamp for a task, or null if it isn't idle. */
2825
+ getIdleSince(taskId: string): string | null;
2826
+ /** Restart the silence timer on fresh output; broadcasts the null transition if it was idle. */
2827
+ private touchIdle;
2828
+ /** Tear down idle tracking for a task; broadcasts the null transition if it was idle. */
2829
+ private clearIdle;
2851
2830
  approveCheckpoint(taskId: string): void;
2852
2831
  rejectCheckpoint(taskId: string, reason: string): void;
2853
2832
  /**
@@ -2934,7 +2913,7 @@ declare function runnerAssignment(catalog: RunnerCatalog, current?: Pick<Task, '
2934
2913
  */
2935
2914
  declare function retargetTaskRunner(task: Task, runner: RunnerId, catalog: RunnerCatalog): Partial<Task>;
2936
2915
 
2937
- declare function buildResearchToolsPrompt(subagentsEnabled?: boolean): string;
2916
+ declare function buildResearchToolsPrompt(): string;
2938
2917
  /**
2939
2918
  * System prompt for one read-only research subagent (issue #34). The digest
2940
2919
  * contract matters: the reply goes back to the planner as a tool result, so it
@@ -2942,7 +2921,7 @@ declare function buildResearchToolsPrompt(subagentsEnabled?: boolean): string;
2942
2921
  * never a task plan.
2943
2922
  */
2944
2923
  declare function buildSubagentSystemPrompt(): string;
2945
- declare function buildConversationSystemPrompt(goal: string, context: string, modelsByRunner: Partial<Record<RunnerId, DiscoveredModel[]>>, runners: RunnerId[], runnerModes?: Record<RunnerId, RunnerModeInfo[]>, autonomousDefault?: boolean, grillMeEnabled?: boolean, prdEnabled?: boolean, reviewEnabled?: boolean, verificationEnabled?: boolean,
2924
+ declare function buildConversationSystemPrompt(goal: string, context: string, modelsByRunner: Partial<Record<RunnerId, DiscoveredModel[]>>, runners: RunnerId[], runnerModes?: Record<RunnerId, RunnerModeInfo[]>, autonomousDefault?: boolean, verificationEnabled?: boolean,
2946
2925
  /** Harness planner (ADR-0009): the agent owns its own tools and research budget. */
2947
2926
  harnessMode?: boolean): string;
2948
2927
  declare const CORE_PLANNER_PROMPT: string;
@@ -2980,7 +2959,7 @@ declare function buildSplitPrompt(taskId: string, tasks: Task[]): string;
2980
2959
  * driver (it also runs the tool rounds) but delegates classification here.
2981
2960
  * - The corrective prompt texts live here, once.
2982
2961
  *
2983
- * Policies stay at the call sites (PRD nudge, ops validation, abort guards) —
2962
+ * Policies stay at the call sites (ops validation, abort guards) —
2984
2963
  * they are inputs to the loop, not part of it.
2985
2964
  */
2986
2965
  type RepairVerdict<T> = {
@@ -3110,7 +3089,13 @@ declare function summarizeOutput(reviewReason: string | undefined, output: strin
3110
3089
  declare function collectDirectDependencyOutputs(task: Task, allTasks: Task[]): PriorOutput[];
3111
3090
  declare function renderPriorOutputs(outputs: PriorOutput[]): string;
3112
3091
  declare function augmentPromptWithPriorOutputs(task: Task, allTasks: Task[]): string;
3113
- declare function renderPlanMap(allTasks: Task[], currentTaskId: string, opts?: {
3092
+ /**
3093
+ * Numbered task list for the model's context. `planTasks` is the nested task
3094
+ * tree; subtasks render indented under their parent with the same dotted
3095
+ * `taskOrderLabel` the other surfaces use, so an `N.M` the model echoes back
3096
+ * matches what `resolveTaskId` accepts.
3097
+ */
3098
+ declare function renderPlanMap(planTasks: Task[], currentTaskId: string, opts?: {
3114
3099
  maxEntries?: number;
3115
3100
  }): string;
3116
3101
  interface ComposeOptions {
@@ -3235,39 +3220,6 @@ declare class TmuxRunner extends AbstractRunner<TmuxSession> {
3235
3220
  }): Promise<ITerminalSession>;
3236
3221
  }
3237
3222
 
3238
- declare function stripAnsi(text: string): string;
3239
- declare function posixShellQuote(s: string): string;
3240
- /**
3241
- * Wrap a command for execution inside a POSIX login shell, which is what
3242
- * resolves runner binaries managed by nvm/volta/asdf.
3243
- *
3244
- * Deliberately POSIX-only. This used to take a `platform` and emit
3245
- * `powershell.exe -Command "'claude' '-p' '…'"` for Windows, which PowerShell
3246
- * cannot run at all: a quoted string in leading position is parsed in
3247
- * expression mode, so the invocation died with a parse error before the runner
3248
- * started — a task that failed instantly, every time, on that platform. Windows
3249
- * has no login-shell equivalent to emulate (its PATH comes from the registry
3250
- * and is already inherited), so {@link planShellLaunch} starts the runner
3251
- * directly there instead of routing it through a shell. Platform choice belongs
3252
- * to that function; this one only knows how to phrase the POSIX half.
3253
- */
3254
- declare function buildShellInvocation(command: string, args: string[]): {
3255
- shellPath: string;
3256
- shellArgs: string[];
3257
- };
3258
- /**
3259
- * Wrap a command in `script` to allocate the PTY some runners require when
3260
- * headless; `-e` propagates the child's exit code so verification still works.
3261
- *
3262
- * POSIX-only by nature — there is no `script` on Windows, which
3263
- * `HeadlessRunner`'s `hasScriptCmd` probe already discovers, so this is never
3264
- * reached there.
3265
- */
3266
- declare function wrapWithPty(command: string, args: string[]): {
3267
- command: string;
3268
- args: string[];
3269
- };
3270
-
3271
3223
  /**
3272
3224
  * A workspace path that does not exist, or exists but is not a directory.
3273
3225
  * Checked at every surface that starts a planner or spawns an agent inside
@@ -3645,4 +3597,4 @@ declare class PlannerModelMemory {
3645
3597
  recall(provider: string, catalog: PlannerModelCandidate[]): PlannerModelRecall;
3646
3598
  }
3647
3599
 
3648
- export { ALLOWED_PLUGIN_HOSTS, ALL_PROVIDERS, AUTO_COMMANDS, AbstractRunner, AbstractTerminalSession, ActiveTaskSession, type AgentAdapter, type AgentAdapterFactory, type AgentEvent, type AgentProcessDeps, type AgentStartOptions, AiProvider, ApprovalKind, ApprovalMode, ApprovalRequest, ApprovalSource, BaseAiService, BaseConfig, BaseFileSystem, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CORE_PLANNER_PROMPT, type CappedRows, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, type CommandClassification, CommandLineTooLongError, type CommandTier, type ComposeOptions, ConsoleLogger, ContextCollector, ConversationMessage, type ConversationRequest, type ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DiscoveredModel, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ExecFileFn, type ExecImpl, ExecutableNotFoundError, FindSymbolOptions, FsPluginStore, GIT_READONLY_SUBCOMMANDS, GeminiService, GlobOptions, type GrepInvocation, GrepOptions, type HasBinFn, HeadlessRunner, type HeadlessRunnerDeps, HeadlessSession, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, type INotification, IPluginStore, ITerminalRunner, ITerminalSession, JSON_REPAIR_INSTRUCTION, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, LineBuffer, type MappedTool, ModelResolver, type ModelResolverDeps, type ModifyPlanRequest, type NotificationAction, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OpenAiService, OpenCodeAdapter, type OrchestratorObserver, OrchestratorOption, PLUGIN_NAME_PATTERN, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanParseError, type PlanRequest, PlanState, PlanStatus, PlanStore, Planner, type PlannerModelCandidate, type PlannerModelChoice, PlannerModelMemory, type PlannerModelRecall, type PlannerModelStore, type PlannerReplyClassification, type PlannerRuntimeToggles, type PluginSource, type PrdBlock, type PreparedLaunch, type PriorOutput, type ProbeFn, ProviderModelLists, type ProviderRegistration, QueuedMessage, REFUSED_COMMANDS, ReadFileOpts, type RepairLoopOpts, type RepairVerdict, type ResearchChat, ResearchLogEntry, ResearchProgress, type ResearchShell, type ResearchShellDeps, ResearchStep, ResearchToolType, type ResearchTurn, ResolveContext, type RunnerCatalog, RunnerId, RunnerInstallation, RunnerInvocation, type RunnerMode, RunnerModeInfo, RunnerPluginManifest, RunnerRegistry, type RunnerSpawnOptions, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, type SerializedPlan, type SerializedTask, type SerializedTaskStatus, Session, type SessionBroadcaster, type SessionData, type SessionDeps, type SessionMessage, type SessionMeta, type SessionPlanner, type SessionRuntimeSettings, SettingsService, type ShellDialect, type SpawnSpec, StdioAgentAdapter, TASK_QUERY_ANSWER_OR_OPS, TASK_QUERY_FIELDS, TASK_QUERY_PROTOCOL, TASK_QUERY_REMINDER, TRUNCATED_PLAN_REPAIR_INSTRUCTION, Task, TaskOp, TaskOrchestrator, type TaskQuery, type TaskQueryCatalog, type TaskQueryField, TaskSnapshot, TmuxRunner, type TmuxRunnerDeps, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, type UserSettings, Verdict, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, admitSettingsEnv, applyHeadLimit, assertInstallablePluginUrl, assertPlainPluginName, assertWorkspaceExists, assertWorkspaceIsProject, augmentPromptWithPriorOutputs, augmentedPath, bearerHeaderValue, buildConversationSystemPrompt, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, buildMergePrompt, buildModifyDuringExecutionPrompt, buildModifyPlanPrompt, buildPlanWithResults, buildResearchPrompt, buildResearchToolsPrompt, buildRunnerInvocation, buildShellInvocation, buildSplitPrompt, buildSubagentSystemPrompt, clampThinkingEffort, classifyCommand, classifyPlannerReply, classifyPluginSource, clearAugmentedPathCache, clearDaemonToken, clearResearchShellCache, clearState, clipboardCopyCommand, coerceAssignments, collectDirectDependencyOutputs, composeAugmentedPrompt, configuredProviders, createAiService, daemonTokenPath, defaultLogger, definitionPattern, deleteSession, discoverGeminiModels, effectiveAllowlist, ensureDir, ensureStateDirIgnored, executionLogBlock, executionSummary, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, filterModelsForPrompt, formatSearchOutput, generatePlanWithRepair, getLatestSession, getProviderMeta, getSettingsPath, getStateDir, grantScopeFor, hasTmux, includeGlobFor, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlainPluginName, isValidManifest, killTree, languageForId, listSessions, loadSession, loadSessionPlanState, loadState, mapAgentTool, mintDaemonToken, mintSessionId, modelContextBlock, modifyValidationFeedback, normalizeAgentArgs, normalizeGeminiModel, parseTaskQueryJson, pendingEditRulesBlock, planDirectLaunch, planShellLaunch, posixShellQuote, prefixModelId, providerForRunner, reEmitPlanPrompt, reEmitTaskOpsPrompt, reEmitTaskQueryPrompt, readDaemonToken, referencePattern, renderPlanMap, renderPriorOutputs, renderTaskQueryAnswer, repairLoop, researchShellWarning, researchToolsPath, resolveArgs, resolvePluginInstallDir, resolveProviderFromPrefix, resolveResearchShell, resolveWithin, retargetTaskRunner, runnerAssignment, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, serializePlan, serializeTask, serializeTaskStatus, sessionRuntimeSettings, stateExists, stripAnsi, stripModelPrefix, summarizeOutput, taskOpsRejectedPrompt, taskQuerySignature, textHasTaskQuery, tmuxSessionName, tmuxSocketName, tmuxWindowName, tokenSubprotocols, tokensMatch, truncatedPlanReEmitPrompt, wellKnownBinDirs, windowsCommandLine, withPath, wrapWithPty };
3600
+ export { ALLOWED_PLUGIN_HOSTS, ALL_PROVIDERS, AUTO_COMMANDS, AbstractRunner, AbstractTerminalSession, ActiveTaskSession, type AgentAdapter, type AgentAdapterFactory, type AgentEvent, type AgentProcessDeps, type AgentStartOptions, AiProvider, ApprovalMode, ApprovalRequest, BUILTIN_SKILL_NAMES, BaseAiService, BaseConfig, BaseFileSystem, CLAUDE_CODE_MANIFEST, CLI_PROVIDERS, CMD_EXE_MAX_COMMAND_LINE, CORE_PLANNER_PROMPT, type CappedRows, type CheckpointListener, ClaudeCodeAdapter, CliAgentAiService, type CliAgentAiServiceDeps, CodexAdapter, type CommandClassification, CommandLineTooLongError, type CommandTier, type ComposeOptions, ConsoleLogger, ContextCollector, ConversationMessage, type ConversationRequest, type ConversationTurn, DAEMON_SUBPROTOCOL, DAEMON_TOKEN_SUBPROTOCOL_PREFIX, DiscoveredModel, EmbeddedNewlineError, type EnvAdmission, EnvConfig, type ExecFileFn, type ExecImpl, ExecutableNotFoundError, FindSymbolOptions, FsPluginStore, GIT_READONLY_SUBCOMMANDS, GeminiService, GlobOptions, type GrepInvocation, GrepOptions, type HasBinFn, HeadlessRunner, type HeadlessRunnerDeps, HeadlessSession, type IAiService, IApproval, IConfig, IFileSystem, type ILogger, type INotification, IPluginStore, ITerminalRunner, ITerminalSession, JSON_REPAIR_INSTRUCTION, type KillTreeDeps, type LaunchDeps, type LaunchPlan, LegacyPlanState, LineBuffer, type MappedTool, ModelResolver, type ModelResolverDeps, type ModifyPlanRequest, type NotificationAction, OPENCODE_MANIFEST, ORDEWELL_SETTABLE_ENV, OpenAiService, OpenCodeAdapter, type OrchestratorObserver, OrchestratorOption, PLUGIN_NAME_PATTERN, PROVIDER_CREDENTIAL_ENV, PROVIDER_DETECT_PRIORITY, PROVIDER_LABEL, PROVIDER_PRIORITY, PROVIDER_SHORT_LABEL, type PendingApproval, PendingApprovals, type PendingApprovalsOptions, PlanEditError, PlanParseError, type PlanRequest, PlanState, PlanStatus, PlanStore, Planner, type PlannerModelCandidate, type PlannerModelChoice, PlannerModelMemory, type PlannerModelRecall, type PlannerModelStore, type PlannerReplyClassification, type PlannerRuntimeToggles, type PluginSource, type PrdBlock, type PreparedLaunch, type PriorOutput, type ProbeFn, ProviderModelLists, type ProviderRegistration, type PtySize, type PtyWrapOptions, QueuedMessage, REFUSED_COMMANDS, ReadFileOpts, type RepairLoopOpts, type RepairVerdict, type ResearchChat, ResearchLogEntry, ResearchProgress, type ResearchShell, type ResearchShellDeps, ResearchToolType, type ResearchTurn, ResolveContext, type RunnerCatalog, RunnerId, RunnerInstallation, RunnerInvocation, type RunnerMode, RunnerModeInfo, RunnerPluginManifest, RunnerRegistry, type RunnerSpawnOptions, SETTINGS_ENV_ALLOWLIST, SETTINGS_ENV_REFUSED, STATE_DIR, STOPPED_TOOL_RESULT, SYMBOL_LANGUAGES, Session, SessionBroadcaster, type SessionData, type SessionDeps, type SessionMeta, type SessionPlanner, type SessionRuntimeSettings, SettingsService, type ShellDialect, type SkillInfo, type SkillMetadata, SkillsService, type SpawnSpec, StdioAgentAdapter, TASK_QUERY_ANSWER_OR_OPS, TASK_QUERY_FIELDS, TASK_QUERY_PROTOCOL, TASK_QUERY_REMINDER, TRUNCATED_PLAN_REPAIR_INSTRUCTION, Task, TaskOp, TaskOrchestrator, type TaskQuery, type TaskQueryCatalog, type TaskQueryField, TaskSnapshot, TmuxRunner, type TmuxRunnerDeps, type TokenCarriers, type ToolCall, ToolOutcome, type ToolResult, type UserSettings, Verdict, VerdictEngine, type VerdictListener, WINDOWS_MAX_COMMAND_LINE, type WorkspaceCheckDeps, WorkspaceNotAProjectError, WorkspaceNotFoundError, type WorkspaceProjectCheckDeps, admitSettingsEnv, applyHeadLimit, assertInstallablePluginUrl, assertPlainPluginName, assertWorkspaceExists, assertWorkspaceIsProject, augmentPromptWithPriorOutputs, augmentedPath, bearerHeaderValue, buildConversationSystemPrompt, buildFallbackGrepArgs, buildGlobArgs, buildGrepArgs, buildMergePrompt, buildModifyDuringExecutionPrompt, buildModifyPlanPrompt, buildPlanWithResults, buildResearchPrompt, buildResearchToolsPrompt, buildRunnerInvocation, buildShellInvocation, buildSplitPrompt, buildSubagentSystemPrompt, clampThinkingEffort, classifyCommand, classifyPlannerReply, classifyPluginSource, clearAugmentedPathCache, clearDaemonToken, clearResearchShellCache, clearState, clipboardCopyCommand, coerceAssignments, collectDirectDependencyOutputs, composeAugmentedPrompt, configuredProviders, createAiService, createSkillsService, daemonTokenPath, defaultLogger, definitionPattern, deleteSession, discoverGeminiModels, effectiveAllowlist, ensureDir, ensureStateDirIgnored, executionLogBlock, extractPrdBlock, extractPresentedToken, filterFallbackByAnchoredInclude, filterModelsForPrompt, formatSearchOutput, generatePlanWithRepair, getLatestSession, getProviderMeta, getSettingsPath, getStateDir, globalDataDir, grantScopeFor, hasTmux, includeGlobFor, isCliProvider, isExecutableResolved, isOpenAiProvider, isPlainPluginName, isValidManifest, killTree, languageForId, listSessions, loadSession, loadSessionPlanState, loadState, mapAgentTool, migrateOldConfigDir, mintDaemonToken, mintSessionId, modelContextBlock, modifyValidationFeedback, normalizeAgentArgs, normalizeGeminiModel, parseTaskQueryJson, pendingEditRulesBlock, planDirectLaunch, planShellLaunch, posixShellQuote, prefixModelId, providerForRunner, reEmitPlanPrompt, reEmitTaskOpsPrompt, reEmitTaskQueryPrompt, readDaemonToken, referencePattern, renderPlanMap, renderPriorOutputs, renderTaskQueryAnswer, repairLoop, researchShellWarning, researchToolsPath, resolveArgs, resolvePluginInstallDir, resolveProviderFromPrefix, resolveResearchShell, resolveSkillInvocation, resolveWithin, retargetTaskRunner, runnerAssignment, runnerForProvider, sanitizeSlug, savePrdMarkdown, saveSession, saveState, sessionRuntimeSettings, stateExists, stripAnsi, stripModelPrefix, summarizeOutput, taskOpsRejectedPrompt, taskQuerySignature, textHasTaskQuery, tmuxSessionName, tmuxSocketName, tmuxWindowName, tokenSubprotocols, tokensMatch, truncatedPlanReEmitPrompt, wellKnownBinDirs, windowsCommandLine, withPath, wrapWithPty };