@ordewell/core 0.4.10 → 0.4.11

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 (43) hide show
  1. package/dist/{ITerminalRunner-CbE6gKLI.d.ts → ITerminalRunner-BTaKZ659.d.mts} +2 -2
  2. package/dist/{ITerminalRunner-1NAv8wCC.d.mts → ITerminalRunner-DVwORcV9.d.ts} +2 -2
  3. package/dist/{ModeResolver-F5wnlSz1.d.mts → ModeResolver-CCKYqdZC.d.mts} +1 -1
  4. package/dist/{ModeResolver-Dx5gzNPC.d.ts → ModeResolver-CzZd-i6T.d.ts} +1 -1
  5. package/dist/{Task-1NwmUImI.d.mts → Task-cGrfYRXK.d.mts} +8 -1
  6. package/dist/{Task-1NwmUImI.d.ts → Task-cGrfYRXK.d.ts} +8 -1
  7. package/dist/{chunk-YI4ZDZEE.mjs → chunk-DNNZGH3I.mjs} +2 -2
  8. package/dist/chunk-HPNUFBIT.mjs +19 -0
  9. package/dist/chunk-HPNUFBIT.mjs.map +1 -0
  10. package/dist/{chunk-IO6PEEN6.mjs → chunk-N6HTBUKG.mjs} +11 -1
  11. package/dist/chunk-N6HTBUKG.mjs.map +1 -0
  12. package/dist/{chunk-TUGJXD4G.mjs → chunk-UEJ3SZQ7.mjs} +2 -2
  13. package/dist/index.d.mts +124 -73
  14. package/dist/index.d.ts +124 -73
  15. package/dist/index.js +611 -433
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.mjs +590 -442
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/order-labels.d.mts +17 -0
  20. package/dist/order-labels.d.ts +17 -0
  21. package/dist/order-labels.js +44 -0
  22. package/dist/order-labels.js.map +1 -0
  23. package/dist/order-labels.mjs +9 -0
  24. package/dist/order-labels.mjs.map +1 -0
  25. package/dist/{parsing-BqbJySeo.d.mts → parsing-BT-dvFcu.d.mts} +2 -2
  26. package/dist/{parsing-X0Gvuz-q.d.ts → parsing-D87zKtTe.d.ts} +2 -2
  27. package/dist/parsing.d.mts +3 -3
  28. package/dist/parsing.d.ts +3 -3
  29. package/dist/parsing.js.map +1 -1
  30. package/dist/parsing.mjs +3 -2
  31. package/dist/{plan-utils-B5rVXNVI.d.mts → plan-utils-BHLbBym3.d.mts} +2 -2
  32. package/dist/{plan-utils-DtsfHnn_.d.ts → plan-utils-akoB6YCL.d.ts} +2 -2
  33. package/dist/plan-utils.d.mts +3 -3
  34. package/dist/plan-utils.d.ts +3 -3
  35. package/dist/plan-utils.mjs +3 -2
  36. package/dist/testing.d.mts +2 -2
  37. package/dist/testing.d.ts +2 -2
  38. package/package.json +12 -2
  39. package/skills/grilling/SKILL.md +31 -0
  40. package/skills/to-spec/SKILL.md +64 -0
  41. package/dist/chunk-IO6PEEN6.mjs.map +0 -1
  42. /package/dist/{chunk-YI4ZDZEE.mjs.map → chunk-DNNZGH3I.mjs.map} +0 -0
  43. /package/dist/{chunk-TUGJXD4G.mjs.map → chunk-UEJ3SZQ7.mjs.map} +0 -0
package/dist/index.d.mts CHANGED
@@ -1,15 +1,16 @@
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.mjs';
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.mjs';
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-1NAv8wCC.mjs';
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-1NAv8wCC.mjs';
5
- import { R as RunnerModeInfo } from './ModeResolver-F5wnlSz1.mjs';
6
- export { M as ManifestLookup, b as buildModeGuide, f as filteredBuildModes, r as resolveDefaultMode, a as resolveTaskMode, c as runnerModesFrom } from './ModeResolver-F5wnlSz1.mjs';
7
- import { T as TaskOp } from './plan-utils-B5rVXNVI.mjs';
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-B5rVXNVI.mjs';
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, v as Verdict, e as ResearchStep, b as PlanState } from './Task-cGrfYRXK.mjs';
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 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.mjs';
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-BTaKZ659.mjs';
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-BTaKZ659.mjs';
5
+ import { R as RunnerModeInfo } from './ModeResolver-CCKYqdZC.mjs';
6
+ export { M as ManifestLookup, b as buildModeGuide, f as filteredBuildModes, r as resolveDefaultMode, a as resolveTaskMode, c as runnerModesFrom } from './ModeResolver-CCKYqdZC.mjs';
7
+ import { T as TaskOp } from './plan-utils-BHLbBym3.mjs';
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-BHLbBym3.mjs';
9
9
  import { ChildProcess } from 'child_process';
10
10
  import { EventEmitter } from 'events';
11
- import { b as PlanParseError } from './parsing-BqbJySeo.mjs';
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-BqbJySeo.mjs';
11
+ import { b as PlanParseError } from './parsing-BT-dvFcu.mjs';
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-BT-dvFcu.mjs';
13
+ export { resolveOrderLabel, taskOrderLabel } from './order-labels.mjs';
13
14
 
14
15
  interface SessionMeta {
15
16
  id: string;
@@ -559,24 +560,12 @@ declare class ConsoleLogger implements ILogger {
559
560
  declare const defaultLogger: ILogger;
560
561
 
561
562
  interface UserSettings {
562
- grillMe: {
563
- enabled: boolean;
564
- };
565
563
  tdd: {
566
564
  enabled: boolean;
567
565
  };
568
- prd: {
569
- enabled: boolean;
570
- };
571
- review: {
572
- enabled: boolean;
573
- };
574
566
  verification: {
575
567
  enabled: boolean;
576
568
  };
577
- researchSubagents: {
578
- enabled: boolean;
579
- };
580
569
  modelAllowlist?: Record<string, string[]>;
581
570
  /** Last model (and its thinking effort) the user chose for each planner backend, keyed by AiProvider id. */
582
571
  plannerModels?: Record<string, {
@@ -594,10 +583,10 @@ interface UserSettings {
594
583
  * Ordewell processes on one machine can hold *different* settings at the same
595
584
  * time. Without it the file is a single shared mutable global: the benchmark
596
585
  * 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.
586
+ * `getAll()` re-reads whenever the mtime moves, a lane needing a toggle
587
+ * `true` would silently plan with `false` the moment another lane pinned its
588
+ * own — turning an A/B of that toggle into a comparison of one condition
589
+ * against itself.
601
590
  */
602
591
  declare function getSettingsPath(): string;
603
592
  declare class SettingsService {
@@ -607,18 +596,10 @@ declare class SettingsService {
607
596
  constructor(filePath?: string);
608
597
  getAll(): UserSettings;
609
598
  private fileMtimeMs;
610
- getGrillMe(): boolean;
611
599
  getTdd(): boolean;
612
- getPrd(): boolean;
613
- setGrillMe(enabled: boolean): void;
614
600
  setTdd(enabled: boolean): void;
615
- setPrd(enabled: boolean): void;
616
- getReview(): boolean;
617
- setReview(enabled: boolean): void;
618
601
  getVerification(): boolean;
619
602
  setVerification(enabled: boolean): void;
620
- getResearchSubagents(): boolean;
621
- setResearchSubagents(enabled: boolean): void;
622
603
  getModelAllowlist(runner: string): string[] | undefined;
623
604
  setModelAllowlist(runner: string, ids: string[] | undefined): void;
624
605
  getPlannerModel(provider: string): {
@@ -637,12 +618,8 @@ declare class SettingsService {
637
618
 
638
619
  /** How the same toggle is named once a host has read it off disk. */
639
620
  interface PlannerRuntimeToggles {
640
- grillMeEnabled: boolean;
641
621
  tddEnabled: boolean;
642
- prdEnabled: boolean;
643
- reviewEnabled: boolean;
644
622
  verificationEnabled: boolean;
645
- researchSubagentsEnabled: boolean;
646
623
  }
647
624
  /**
648
625
  * The planner-facing mode set for one operation. Replaces the boolean tail that
@@ -651,11 +628,7 @@ interface PlannerRuntimeToggles {
651
628
  */
652
629
  interface PlannerModes {
653
630
  autonomousDefault: boolean;
654
- grillMe: boolean;
655
- prd: boolean;
656
- review: boolean;
657
631
  verification: boolean;
658
- researchSubagents: boolean;
659
632
  }
660
633
 
661
634
  /**
@@ -1128,8 +1101,8 @@ declare class CliAgentAiService implements IAiService {
1128
1101
  /**
1129
1102
  * Drive one user message to a settled planner turn. Same shape as the API
1130
1103
  * 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.
1104
+ * agent now — and with the same two policies layered on top: the
1105
+ * empty-reply nudge, and a bounded corrective re-emit for botched JSON.
1133
1106
  */
1134
1107
  private runConversation;
1135
1108
  /**
@@ -1182,12 +1155,7 @@ interface ConversationRequest {
1182
1155
  fetcher?: IWebFetcher;
1183
1156
  runnerModes?: Record<RunnerId, RunnerModeInfo[]>;
1184
1157
  autonomousDefault?: boolean;
1185
- grillMeEnabled?: boolean;
1186
- prdEnabled?: boolean;
1187
- reviewEnabled?: boolean;
1188
1158
  verificationEnabled?: boolean;
1189
- /** Declare the spawn_research_agent tool to the planner (issue #34, default off). */
1190
- researchSubagentsEnabled?: boolean;
1191
1159
  signal?: AbortSignal;
1192
1160
  /**
1193
1161
  * Persisted dialogue to seed a resumed conversation (session reload). The
@@ -1334,12 +1302,6 @@ interface ConversationTurnContext {
1334
1302
  runnerModes?: Record<RunnerId, RunnerModeInfo[]>;
1335
1303
  autonomousDefault?: boolean;
1336
1304
  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
1305
  }
1344
1306
  declare abstract class BaseAiService {
1345
1307
  protected config: IConfig;
@@ -1348,8 +1310,6 @@ declare abstract class BaseAiService {
1348
1310
  setProgress: (fn: (p: ResearchProgress) => void) => void;
1349
1311
  } | null;
1350
1312
  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
1313
  constructor(config: IConfig);
1354
1314
  abstract reset(): void;
1355
1315
  abstract ensureInit(): void;
@@ -1625,6 +1585,8 @@ declare class TaskOrchestrator {
1625
1585
  private observers;
1626
1586
  private tddEnabled;
1627
1587
  constructor(config: IConfig, notifications: INotification, terminalRunner: ITerminalRunner, store?: PlanStore);
1588
+ /** Advisory silence timestamp for a task's live runner, or null if not idle. */
1589
+ getIdleSince(taskId: string): string | null;
1628
1590
  get storeInstance(): PlanStore;
1629
1591
  setWorkspaceRoot(fn: () => string): void;
1630
1592
  setRegistry(registry: RunnerRegistry): void;
@@ -2264,6 +2226,39 @@ declare function mapAgentTool(name: string): MappedTool;
2264
2226
  */
2265
2227
  declare function normalizeAgentArgs(tool: ResearchToolType, args: Record<string, unknown>): Record<string, unknown>;
2266
2228
 
2229
+ declare const BUILTIN_SKILL_NAMES: readonly ["grilling", "to-spec"];
2230
+ interface SkillMetadata {
2231
+ name: string;
2232
+ description: string;
2233
+ disableModelInvocation?: boolean;
2234
+ }
2235
+ interface SkillInfo {
2236
+ name: string;
2237
+ description: string;
2238
+ metadata: SkillMetadata;
2239
+ /** Full content of SKILL.md with frontmatter stripped */
2240
+ content: string;
2241
+ /** Absolute path to the SKILL.md file */
2242
+ path: string;
2243
+ /** Whether this came from global (~/.ordewell/skills/) or local (.ordewell/skills/) */
2244
+ source: 'global' | 'local';
2245
+ }
2246
+ declare class SkillsService {
2247
+ private workspaceRoot?;
2248
+ constructor(workspaceRoot?: string | undefined);
2249
+ private localDir;
2250
+ private globalDir;
2251
+ private seed;
2252
+ seedBuiltinSkill(name: string): boolean;
2253
+ /** Removes a retired built-in's seed from the global dir, but only if it's untouched by the user. */
2254
+ private isUnmodifiedRetiredSeed;
2255
+ private pruneRetired;
2256
+ findSkill(name: string): SkillInfo | undefined;
2257
+ listSkills(): SkillInfo[];
2258
+ getSkillContent(name: string): string | undefined;
2259
+ }
2260
+ declare function createSkillsService(workspaceRoot?: string): SkillsService;
2261
+
2267
2262
  type SerializedTaskStatus = {
2268
2263
  id: string;
2269
2264
  status: string;
@@ -2272,6 +2267,8 @@ type SerializedTaskStatus = {
2272
2267
  reason: string;
2273
2268
  checks: Verdict['checks'];
2274
2269
  } | null;
2270
+ /** Advisory silence timestamp from VerdictEngine — not part of task status semantics. */
2271
+ idleSince?: string | null;
2275
2272
  };
2276
2273
  type SerializedTask = {
2277
2274
  id: string;
@@ -2386,7 +2383,7 @@ type SessionMessage = {
2386
2383
  };
2387
2384
  type SessionBroadcaster = (msg: SessionMessage) => void;
2388
2385
  declare function serializeTask(t: Task): SerializedTask;
2389
- declare function serializeTaskStatus(t: Task): SerializedTaskStatus;
2386
+ declare function serializeTaskStatus(t: Task, idleSince?: string | null): SerializedTaskStatus;
2390
2387
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
2391
2388
  declare function executionSummary(tasks: Task[]): {
2392
2389
  total: number;
@@ -2417,11 +2414,7 @@ type SessionPlanner = Pick<Planner, 'generate' | 'modify' | 'modifyDuringExecuti
2417
2414
  /** Runtime prefs read live — may toggle between operations. */
2418
2415
  interface SessionRuntimeSettings {
2419
2416
  tddEnabled: boolean;
2420
- grillMeEnabled: boolean;
2421
- prdEnabled?: boolean;
2422
- reviewEnabled?: boolean;
2423
2417
  verificationEnabled?: boolean;
2424
- researchSubagentsEnabled?: boolean;
2425
2418
  modelAllowlist?: Record<string, string[]>;
2426
2419
  }
2427
2420
  /**
@@ -2432,11 +2425,19 @@ interface SessionRuntimeSettings {
2432
2425
  * is not a toggle.
2433
2426
  */
2434
2427
  declare function sessionRuntimeSettings(settings: UserSettings): SessionRuntimeSettings;
2428
+ /**
2429
+ * Resolve a `/skill-name` invocation to the skill's markdown content. Pure and
2430
+ * exported so surfaces and verification can drive substitution without a full
2431
+ * Session. Plain text passes through unchanged; an unknown skill becomes a
2432
+ * notice naming what IS available instead of a bare slash token that a runner
2433
+ * would mis-resolve in its own skills directory.
2434
+ */
2435
+ declare function resolveSkillInvocation(text: string, skillsService: Pick<SkillsService, 'findSkill' | 'listSkills'>): string;
2435
2436
  /**
2436
2437
  * Everything a delivery surface constructs to host a session. Structural config
2437
2438
  * (enabledRunners, orchestratorModel, providerModelLists) is snapshotted inside
2438
2439
  * `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
2440
+ * settings (tdd, verification) are read live via the `settings` callback so a toggle
2440
2441
  * between generate and execute takes effect.
2441
2442
  */
2442
2443
  interface SessionDeps {
@@ -2452,7 +2453,7 @@ interface SessionDeps {
2452
2453
  broadcast: SessionBroadcaster;
2453
2454
  /** Shared across sessions — sole producer of model catalogs and routing lists. */
2454
2455
  modelResolver: ModelResolver;
2455
- /** Live runtime settings (tdd, grillMe). Read at each operation that needs them. */
2456
+ /** Live runtime settings (tdd, verification). Read at each operation that needs them. */
2456
2457
  settings: () => SessionRuntimeSettings;
2457
2458
  /**
2458
2459
  * Host-assigned session id. When set, every persist writes under this id so
@@ -2468,6 +2469,11 @@ interface SessionDeps {
2468
2469
  aiService?: IAiService;
2469
2470
  /** Plan-generation seam. Defaults to a Planner over the session's aiService. */
2470
2471
  planner?: SessionPlanner;
2472
+ /**
2473
+ * Skill lookup for /skill-name interception. Defaults to a SkillsService
2474
+ * over the session's workspace root.
2475
+ */
2476
+ skillsService?: SkillsService;
2471
2477
  }
2472
2478
  /**
2473
2479
  * The per-session execution stack — deepened from a wiring bag into the
@@ -2509,6 +2515,7 @@ declare class Session {
2509
2515
  private unsubObserver;
2510
2516
  private readonly hostSessionId?;
2511
2517
  private currentSessionId;
2518
+ private readonly skillsService;
2512
2519
  constructor(deps: SessionDeps);
2513
2520
  /**
2514
2521
  * The planner transport for the provider configured *right now* (ADR-0009).
@@ -2612,8 +2619,8 @@ declare class Session {
2612
2619
  */
2613
2620
  startPlanning(goal: string, runners: RunnerId[], options?: GeneratePlanOptions): Promise<LegacyPlanState>;
2614
2621
  /**
2615
- * Every subsequent user reply in the planning conversation — grill-me
2616
- * answers, PRD accept/adjust, outline confirm. One branch, no phase ladder.
2622
+ * Every subsequent user reply in the planning conversation — clarifying
2623
+ * answers, outline confirm. One branch, no phase ladder.
2617
2624
  */
2618
2625
  continueConversation(userMessage: string, options?: GeneratePlanOptions): Promise<LegacyPlanState>;
2619
2626
  /**
@@ -2648,8 +2655,8 @@ declare class Session {
2648
2655
  * The catalog the planner may actually draw from — model ids and task-mode
2649
2656
  * ids, per selected runner — emitted on EVERY turn, before any plan exists
2650
2657
  * 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.
2658
+ * clarifying conversation outlives that single showing and the planner
2659
+ * starts misquoting it, so this re-states it per turn instead.
2653
2660
  *
2654
2661
  * Built from the allowlist-filtered view (`filterModelsForPrompt`), the same
2655
2662
  * one the system prompt used — a restricted allowlist stays a hard bound on
@@ -2682,6 +2689,15 @@ declare class Session {
2682
2689
  private resumeConversation;
2683
2690
  /** Whether the planner conversation is live (started and not yet committed to a plan). */
2684
2691
  get isConversationActive(): boolean;
2692
+ /**
2693
+ * Intercept a skill invocation (/skill-name) and substitute the skill's
2694
+ * markdown content BEFORE the message reaches the planner. Prevents runners
2695
+ * (Claude Code, OpenCode) from trying to resolve the skill in their own
2696
+ * directory instead of .ordewell/skills/. An unknown skill is surfaced to
2697
+ * the planner as a notice naming what IS available, rather than passing a
2698
+ * bare /unknown through to be mis-resolved.
2699
+ */
2700
+ private resolveSkillInvocation;
2685
2701
  /** Append one dialogue entry to the persisted transcript. Callers persist via the mutatePlan ritual. */
2686
2702
  private appendTranscript;
2687
2703
  /** Commit a settled (non-task_ops) turn. Both branches run the mutatePlan ritual. */
@@ -2830,8 +2846,27 @@ declare class Session {
2830
2846
  get aiServiceInstance(): IAiService;
2831
2847
  }
2832
2848
 
2849
+ /**
2850
+ * Where Ordewell keeps machine-global data (settings, daemon tokens, caches,
2851
+ * user plugins). A single home for everything not tied to a project directory,
2852
+ * so per-project state in `.ordewell/` and global state never collide.
2853
+ */
2854
+ declare function globalDataDir(): string;
2855
+ /**
2856
+ * One-time lift of a pre-`.ordewell` install's files into the new location.
2857
+ * Each file/dir is checked independently — old exists, new doesn't — rather
2858
+ * than gating the whole thing on "new dir doesn't exist yet". A machine that
2859
+ * migrated `settings.json` under an earlier release already has `globalDataDir()`
2860
+ * on disk, which would otherwise permanently skip lifting anything added to
2861
+ * this list later (`.env` did exactly that: real API keys stranded in the old
2862
+ * dir because the settings.json move had already made the new dir exist).
2863
+ */
2864
+ declare function migrateOldConfigDir(): void;
2865
+
2833
2866
  type VerdictListener = (taskId: string, verdict: Verdict, output: string) => void;
2834
2867
  type CheckpointListener = (taskId: string, summary: string) => void;
2868
+ /** Fires on every idleSince transition (null→timestamp on silence, timestamp→null on resume/teardown). */
2869
+ type IdleListener = (taskId: string, idleSince: string | null) => void;
2835
2870
  declare class VerdictEngine {
2836
2871
  private markerSeen;
2837
2872
  private buffers;
@@ -2839,6 +2874,7 @@ declare class VerdictEngine {
2839
2874
  private pausedSessions;
2840
2875
  private listeners;
2841
2876
  private checkpointListeners;
2877
+ private idleListeners;
2842
2878
  /**
2843
2879
  * Per-task generation counter. Incremented on every watch() and clear().
2844
2880
  * Stale callbacks (from a prior session whose generation doesn't match
@@ -2846,8 +2882,17 @@ declare class VerdictEngine {
2846
2882
  * wrong session.
2847
2883
  */
2848
2884
  private generations;
2885
+ private idleTimers;
2886
+ private idleSince;
2849
2887
  onVerdict(listener: VerdictListener): void;
2850
2888
  onCheckpoint(listener: CheckpointListener): void;
2889
+ onIdleChange(listener: IdleListener): void;
2890
+ /** Advisory silence timestamp for a task, or null if it isn't idle. */
2891
+ getIdleSince(taskId: string): string | null;
2892
+ /** Restart the silence timer on fresh output; broadcasts the null transition if it was idle. */
2893
+ private touchIdle;
2894
+ /** Tear down idle tracking for a task; broadcasts the null transition if it was idle. */
2895
+ private clearIdle;
2851
2896
  approveCheckpoint(taskId: string): void;
2852
2897
  rejectCheckpoint(taskId: string, reason: string): void;
2853
2898
  /**
@@ -2934,7 +2979,7 @@ declare function runnerAssignment(catalog: RunnerCatalog, current?: Pick<Task, '
2934
2979
  */
2935
2980
  declare function retargetTaskRunner(task: Task, runner: RunnerId, catalog: RunnerCatalog): Partial<Task>;
2936
2981
 
2937
- declare function buildResearchToolsPrompt(subagentsEnabled?: boolean): string;
2982
+ declare function buildResearchToolsPrompt(): string;
2938
2983
  /**
2939
2984
  * System prompt for one read-only research subagent (issue #34). The digest
2940
2985
  * contract matters: the reply goes back to the planner as a tool result, so it
@@ -2942,7 +2987,7 @@ declare function buildResearchToolsPrompt(subagentsEnabled?: boolean): string;
2942
2987
  * never a task plan.
2943
2988
  */
2944
2989
  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,
2990
+ declare function buildConversationSystemPrompt(goal: string, context: string, modelsByRunner: Partial<Record<RunnerId, DiscoveredModel[]>>, runners: RunnerId[], runnerModes?: Record<RunnerId, RunnerModeInfo[]>, autonomousDefault?: boolean, verificationEnabled?: boolean,
2946
2991
  /** Harness planner (ADR-0009): the agent owns its own tools and research budget. */
2947
2992
  harnessMode?: boolean): string;
2948
2993
  declare const CORE_PLANNER_PROMPT: string;
@@ -2980,7 +3025,7 @@ declare function buildSplitPrompt(taskId: string, tasks: Task[]): string;
2980
3025
  * driver (it also runs the tool rounds) but delegates classification here.
2981
3026
  * - The corrective prompt texts live here, once.
2982
3027
  *
2983
- * Policies stay at the call sites (PRD nudge, ops validation, abort guards) —
3028
+ * Policies stay at the call sites (ops validation, abort guards) —
2984
3029
  * they are inputs to the loop, not part of it.
2985
3030
  */
2986
3031
  type RepairVerdict<T> = {
@@ -3110,7 +3155,13 @@ declare function summarizeOutput(reviewReason: string | undefined, output: strin
3110
3155
  declare function collectDirectDependencyOutputs(task: Task, allTasks: Task[]): PriorOutput[];
3111
3156
  declare function renderPriorOutputs(outputs: PriorOutput[]): string;
3112
3157
  declare function augmentPromptWithPriorOutputs(task: Task, allTasks: Task[]): string;
3113
- declare function renderPlanMap(allTasks: Task[], currentTaskId: string, opts?: {
3158
+ /**
3159
+ * Numbered task list for the model's context. `planTasks` is the nested task
3160
+ * tree; subtasks render indented under their parent with the same dotted
3161
+ * `taskOrderLabel` the other surfaces use, so an `N.M` the model echoes back
3162
+ * matches what `resolveTaskId` accepts.
3163
+ */
3164
+ declare function renderPlanMap(planTasks: Task[], currentTaskId: string, opts?: {
3114
3165
  maxEntries?: number;
3115
3166
  }): string;
3116
3167
  interface ComposeOptions {
@@ -3645,4 +3696,4 @@ declare class PlannerModelMemory {
3645
3696
  recall(provider: string, catalog: PlannerModelCandidate[]): PlannerModelRecall;
3646
3697
  }
3647
3698
 
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 };
3699
+ 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, 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, 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 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, executionSummary, 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, serializePlan, serializeTask, serializeTaskStatus, sessionRuntimeSettings, stateExists, stripAnsi, stripModelPrefix, summarizeOutput, taskOpsRejectedPrompt, taskQuerySignature, textHasTaskQuery, tmuxSessionName, tmuxSocketName, tmuxWindowName, tokenSubprotocols, tokensMatch, truncatedPlanReEmitPrompt, wellKnownBinDirs, windowsCommandLine, withPath, wrapWithPty };