@ordewell/core 0.7.1 → 0.8.0

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 (52) hide show
  1. package/README.md +5 -2
  2. package/dist/{IFileSystem-BnLh-_SK.d.mts → IFileSystem-D96mT-bm.d.ts} +1 -1
  3. package/dist/{IFileSystem-DofiRcCo.d.ts → IFileSystem-DXJCRw5x.d.mts} +1 -1
  4. package/dist/IRunner-CGCihlGQ.d.ts +1165 -0
  5. package/dist/IRunner-XVUddYVX.d.mts +1165 -0
  6. package/dist/{ModeResolver-DkMYf4uS.d.ts → ModeResolver-DE-o2lRF.d.mts} +2 -2
  7. package/dist/{ModeResolver-DZzJSdIU.d.mts → ModeResolver-EWlpmVAy.d.ts} +2 -2
  8. package/dist/Task-1Q19y7sZ.d.mts +1122 -0
  9. package/dist/Task-1Q19y7sZ.d.ts +1122 -0
  10. package/dist/{chunk-ZV5LDNCO.mjs → chunk-2M4X3VB7.mjs} +18 -6
  11. package/dist/chunk-2M4X3VB7.mjs.map +1 -0
  12. package/dist/{chunk-Y36NIASW.mjs → chunk-BLLIBCCS.mjs} +153 -264
  13. package/dist/chunk-BLLIBCCS.mjs.map +1 -0
  14. package/dist/chunk-H5O74L77.mjs +185 -0
  15. package/dist/chunk-H5O74L77.mjs.map +1 -0
  16. package/dist/{chunk-LGQNXPBX.mjs → chunk-UUU46PVQ.mjs} +72 -192
  17. package/dist/chunk-UUU46PVQ.mjs.map +1 -0
  18. package/dist/index.d.mts +1119 -930
  19. package/dist/index.d.ts +1119 -930
  20. package/dist/index.js +8361 -8849
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +8197 -8614
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/order-labels.d.mts +1 -4
  25. package/dist/order-labels.d.ts +1 -4
  26. package/dist/{parsing-ddZXZFP4.d.ts → parsing-CZdp2p_n.d.ts} +5 -3
  27. package/dist/{parsing-B6ctfF80.d.mts → parsing-GgUJoYKs.d.mts} +5 -3
  28. package/dist/parsing.d.mts +3 -6
  29. package/dist/parsing.d.ts +3 -6
  30. package/dist/parsing.js +25 -4
  31. package/dist/parsing.js.map +1 -1
  32. package/dist/parsing.mjs +3 -2
  33. package/dist/{plan-utils-CKgNtDwQ.d.mts → plan-utils-BMayhGBj.d.mts} +89 -14
  34. package/dist/{plan-utils--kQRzSE-.d.ts → plan-utils-Cv48fe7r.d.ts} +89 -14
  35. package/dist/plan-utils.d.mts +4 -4
  36. package/dist/plan-utils.d.ts +4 -4
  37. package/dist/plan-utils.js +128 -65
  38. package/dist/plan-utils.js.map +1 -1
  39. package/dist/plan-utils.mjs +10 -2
  40. package/dist/testing.d.mts +12 -24
  41. package/dist/testing.d.ts +12 -24
  42. package/dist/testing.js +29 -29
  43. package/dist/testing.js.map +1 -1
  44. package/dist/testing.mjs +21 -27
  45. package/dist/testing.mjs.map +1 -1
  46. package/package.json +1 -1
  47. package/skills/tdd/SKILL.md +19 -0
  48. package/dist/Task-BnLxkVQF.d.mts +0 -2594
  49. package/dist/Task-BnLxkVQF.d.ts +0 -2594
  50. package/dist/chunk-LGQNXPBX.mjs.map +0 -1
  51. package/dist/chunk-Y36NIASW.mjs.map +0 -1
  52. package/dist/chunk-ZV5LDNCO.mjs.map +0 -1
@@ -1,5 +1,6 @@
1
- import { bb as StructuredTurnEnd, bd as SubagentOutcome, bE as UsageRecord, k as ApprovalDecision, b9 as StructuredEvent, a$ as RunnerId, y as DiscoveredModel, bh as Task, ab as LegacyPlanState, aQ as QueuedMessage, bF as UsageTotals, bL as Verdict, bj as TaskIsolation, by as TaskTransport, r as AwaitingReason, aR as QueuedTaskMessage, T as IsolationHandoff, _ as IsolationMergeResult, aX as ResearchStep, l as ApprovalKind, q as ApprovalSource, aY as ResearchStepOutcome, w as ConversationMessage, aV as ResearchLogEntry, aB as PlannerUsage, bk as TaskIsolationState } from './Task-BnLxkVQF.mjs';
2
- import { R as RunnerModeInfo } from './ModeResolver-DZzJSdIU.mjs';
1
+ import { ag as TaskSkillSnapshot, af as TaskSkillNotice, a8 as SubagentOutcome, ao as UsageRecord, W as RunnerId, c as DiscoveredModel, a9 as Task, L as LegacyPlanState, C as ConversationMessage, a0 as SkillLoadNotice, Q as QueuedMessage, ap as UsageTotals, av as Verdict, aa as TaskIsolation, a as AwaitingReason, g as IsolationHandoff, n as IsolationMergeResult, T as ResearchStep, z as PlanState, ah as TaskSnapshot, U as ResearchStepOutcome, O as ResearchLogEntry, G as PlannerUsage, ab as TaskIsolationState } from './Task-1Q19y7sZ.mjs';
2
+ import { R as RunnerModeInfo } from './ModeResolver-DE-o2lRF.mjs';
3
+ import { a5 as StructuredTurnEnd, h as ApprovalDecision, a4 as StructuredEvent, Y as QueuedTaskMessage, i as ApprovalKind, n as ApprovalSource } from './IRunner-XVUddYVX.mjs';
3
4
  import './order-labels.mjs';
4
5
 
5
6
  /**
@@ -12,8 +13,17 @@ import './order-labels.mjs';
12
13
  * without a format version.
13
14
  */
14
15
  type TaskLogEvent =
15
- /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
16
+ /**
17
+ * The task skills this attempt's prompt carried, as read at its spawn
18
+ * (ADR-0024): first in its log. The file keeps their bodies; a surface is
19
+ * sent notices ({@link taskLogForSurface}).
20
+ */
16
21
  {
22
+ type: 'task_skills';
23
+ skills: TaskSkillSnapshot[] | TaskSkillNotice[];
24
+ }
25
+ /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
26
+ | {
17
27
  type: 'turn_start';
18
28
  message: string;
19
29
  messageId?: string;
@@ -142,6 +152,8 @@ declare function trimToolOutput(output: string): {
142
152
  * keep: background-agent launches, which the subagent's own events already show.
143
153
  */
144
154
  declare function toTaskLogEvent(event: StructuredEvent): TaskLogEvent | null;
155
+ /** A log as a surface is sent it, live or read back: everything but the skills' bodies. */
156
+ declare function taskLogForSurface(events: readonly TaskLogEvent[]): TaskLogEvent[];
145
157
  /**
146
158
  * Merge runs of deltas into one event each. Deltas arrive a few characters at
147
159
  * a time; merged, a batch is one message on the wire and one line on disk,
@@ -285,8 +297,6 @@ type SerializedTaskStatus = {
285
297
  idleSince?: string | null;
286
298
  /** Absent unless the plan has an isolation run, so a shared-root plan's updates are unchanged. */
287
299
  isolation?: TaskIsolation;
288
- /** Absent unless the task's plan asked for the structured transport (ADR-0018): what it ran on, or why it fell back. */
289
- transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
290
300
  /** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
291
301
  awaitingReason?: AwaitingReason;
292
302
  /** The whole question of the checkpoint the task waits at; absent when it waits at none. */
@@ -339,14 +349,49 @@ type SerializedTask = {
339
349
  userStoriesCovered: Task['userStoriesCovered'];
340
350
  /** Set only on an ops task (ADR-0020). */
341
351
  ops?: true;
352
+ /** Task skills attached by name; absent when none. */
353
+ skills?: string[];
354
+ };
355
+ /** Skill loads go out as notices: their bodies are for the planner, and stay in the session. */
356
+ type SerializedConversationMessage = Omit<ConversationMessage, 'skill'> & {
357
+ skill?: SkillLoadNotice;
358
+ };
359
+ type SerializedQueuedMessage = Omit<QueuedMessage, 'skills'> & {
360
+ skills?: SkillLoadNotice[];
361
+ };
362
+ /**
363
+ * A task as a surface is sent it: its attempt's skills are notices, whole in
364
+ * the session only, and its runner session id stays there too — no surface shows it,
365
+ * and only a continue reads the runner's own session id.
366
+ */
367
+ type SurfaceTask<T extends Task = Task> = Omit<T, 'attemptSkills' | 'subtasks' | 'runnerSessionId'> & {
368
+ attemptSkills?: TaskSkillNotice[];
369
+ subtasks: SurfaceTask[];
370
+ };
371
+ /** A plan as the daemon and the VS Code webview are sent it: the session's own state, minus every skill body. */
372
+ type SurfacePlan = Omit<LegacyPlanState, 'tasks' | 'conversationHistory' | 'queuedMessages'> & {
373
+ tasks: SurfaceTask[];
374
+ conversationHistory?: SerializedConversationMessage[];
375
+ queuedMessages?: SerializedQueuedMessage[];
342
376
  };
377
+ /** The phase-tagged shape of {@link SurfacePlan}. */
378
+ type SurfacePlanState = (Omit<Extract<PlanState, {
379
+ phase: 'planning';
380
+ }>, 'pendingTasks'> & {
381
+ pendingTasks: SurfaceTask[];
382
+ }) | (Omit<Extract<PlanState, {
383
+ phase: 'executing';
384
+ }>, 'pendingTasks' | 'executionLog'> & {
385
+ pendingTasks: SurfaceTask[];
386
+ executionLog: SurfaceTask<TaskSnapshot>[];
387
+ });
343
388
  type SerializedPlan = {
344
389
  tasks: SerializedTask[];
345
390
  runners: RunnerId[];
346
391
  generatedAt: string;
347
- conversationHistory?: LegacyPlanState['conversationHistory'];
392
+ conversationHistory?: SerializedConversationMessage[];
348
393
  prdMarkdown?: string;
349
- queuedMessages?: QueuedMessage[];
394
+ queuedMessages?: SerializedQueuedMessage[];
350
395
  };
351
396
  /** How a planner turn ended: the reply kind it settled on, a user stop, or a failure. */
352
397
  type PlannerTurnOutcome = 'message' | 'plan' | 'task_ops' | 'stopped' | 'error';
@@ -392,12 +437,18 @@ type SessionMessage =
392
437
  /**
393
438
  * A planner turn began. Emitted once per turn by whoever runs the turn,
394
439
  * before any other message carrying its `turnId`. `prompt` is the user's
395
- * message when the turn answers one.
440
+ * message, as typed, when the turn answers one; `skills` are what its
441
+ * `/name` tokens loaded, absent when none did.
396
442
  */
397
443
  | {
398
444
  type: 'planner_turn_started';
399
445
  turnId: string;
400
446
  prompt?: string;
447
+ skills?: SkillLoadNotice[];
448
+ } | {
449
+ type: 'planner_skill_loaded';
450
+ turnId: string;
451
+ skill: SkillLoadNotice;
401
452
  }
402
453
  /**
403
454
  * A planner turn is over; nothing more carries its `turnId`. Emitted exactly
@@ -511,8 +562,6 @@ type SessionMessage =
511
562
  };
512
563
  } | {
513
564
  type: 'execution_stopped';
514
- } | {
515
- type: 'queue_ready';
516
565
  } | {
517
566
  type: 'task_updated';
518
567
  taskId: string;
@@ -533,7 +582,7 @@ type SessionMessage =
533
582
  * A structured task's log as it happens (ADR-0018, P1): the next events of
534
583
  * the task's attempt `attempt`, in order — the same ones appended to that
535
584
  * attempt's file, so a surface folding these and one replaying the file
536
- * draw the same blocks. Terminal-transport tasks send none.
585
+ * draw the same blocks.
537
586
  */
538
587
  | {
539
588
  type: 'task_log';
@@ -607,6 +656,9 @@ type SessionNotice = {
607
656
  type SessionBroadcaster = (msg: SessionMessage) => void;
608
657
  declare function serializeTask(t: Task): SerializedTask;
609
658
  declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
659
+ /** The one place a plan's skill bodies come off before it leaves the session: every wire path that carries plan state goes through here. */
660
+ declare function surfacePlan(plan: LegacyPlanState): SurfacePlan;
661
+ declare function surfacePlanState(state: PlanState): SurfacePlanState;
610
662
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
611
663
  declare function executionSummary(tasks: readonly Task[]): {
612
664
  total: number;
@@ -641,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
641
693
  * the block exists, so a surface can key its own UI state on it — whether a
642
694
  * block is expanded is that UI state, and deliberately not part of a block.
643
695
  */
644
- type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
696
+ type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
645
697
  /** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
646
698
  type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
647
699
  interface MessageBlock {
@@ -658,6 +710,8 @@ interface MessageBlock {
658
710
  * it is the final segment, and never saved to the transcript.
659
711
  */
660
712
  segmentId?: string;
713
+ /** A user's message: the skills its `/name` tokens loaded, for a surface to mark those tokens (see `loadedSkillTokens`). */
714
+ skills?: readonly string[];
661
715
  }
662
716
  interface ThinkingDisplayBlock {
663
717
  type: 'thinking';
@@ -758,6 +812,12 @@ interface PlanBlock {
758
812
  /** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
759
813
  segmentId?: string;
760
814
  }
815
+ /** A skill loaded into the conversation: one line naming it and the SKILL.md that won. Its body is never shown. */
816
+ interface SkillLoadBlock extends SkillLoadNotice {
817
+ type: 'skill_load';
818
+ id: string;
819
+ turnId?: string;
820
+ }
761
821
  /** The token line. There is at most one, and it is always the last block. */
762
822
  interface UsageBlock {
763
823
  type: 'usage';
@@ -813,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
813
873
  * The research log interleaves with the transcript by time. Entries older than
814
874
  * a compaction's first kept message went with the turns it condensed.
815
875
  */
816
- declare function fromTranscript(conversationHistory: readonly ConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
876
+ declare function fromTranscript(conversationHistory: readonly SerializedConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
817
877
 
818
878
  /**
819
879
  * What a surface draws for one attempt of a structured task (ADR-0018, O1b):
@@ -953,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
953
1013
  /** The conversation line for a task starting, worded the same on every surface. */
954
1014
  declare function taskStartedNotice(title: string, runner?: string): string;
955
1015
 
1016
+ /** Where a skill name is invoked: `start` is its `/`, `end` is just past the name, before any punctuation. */
1017
+ interface SkillToken {
1018
+ name: string;
1019
+ start: number;
1020
+ end: number;
1021
+ }
1022
+ /**
1023
+ * The first `/name` token for each name in `text`, names lower-cased. Only
1024
+ * the first counts because a skill loads once per message however often it is
1025
+ * named, so a later repeat is plain text.
1026
+ */
1027
+ declare function skillTokens(text: string): SkillToken[];
1028
+ /** The tokens in a sent message that loaded one of `loaded` — what a surface highlights in the user's bubble. */
1029
+ declare function loadedSkillTokens(text: string, loaded: readonly string[]): SkillToken[];
1030
+
956
1031
  /**
957
1032
  * What a row's status means to a reader, before any surface picks a word,
958
1033
  * icon or colour for it. `quiet` is a running task whose runner has printed
@@ -1144,4 +1219,4 @@ interface NewTaskFields {
1144
1219
  */
1145
1220
  declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1146
1221
 
1147
- export { aheadOfDraft as $, type ApplyTaskOpsResult as A, type TaskRef as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type TaskRowAction as F, type GatedConversation as G, type TaskRowContext as H, type TaskRowIsolation as I, type TaskRowKind as J, type TaskRowPlacement as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskRowSubject as Q, type TaskRowView as R, type SerializedPlan as S, type TakenPrompt as T, type TaskStatusKind as U, type ThinkingDisplayBlock as V, type ToolBlock as W, type ToolHeadline as X, type ToolStatus as Y, type TurnGate as Z, type UsageBlock as _, type ApprovalBlock as a, applyTaskOps as a0, approvalLabel as a1, awaitingLabel as a2, canMergeTasks as a3, canSetDependencies as a4, canSplitTask as a5, capConflictFiles as a6, classifyOutcome as a7, coalesceTaskLog as a8, dependencyCandidates as a9, serializePlan as aA, serializeTask as aB, serializeTaskStatus as aC, stopTurn as aD, summarizeToolCall as aE, taskRowActions as aF, taskRowView as aG, taskStartedNotice as aH, taskStatusKind as aI, textHasTaskOps as aJ, titledRefs as aK, toTaskLogEvent as aL, toolHeadline as aM, trimToolOutput as aN, truncateCheckpointSummary as aO, unsendAll as aP, unsendLatest as aQ, dependentsNotice as aa, dependentsOf as ab, diffRows as ac, diffStat as ad, diffSummary as ae, digestTaskLog as af, drainNext as ag, executionSummary as ah, followTurn as ai, fromTranscript as aj, hasHiddenDetail as ak, holdPrompt as al, isTaskRunning as am, markAction as an, markRequestFor as ao, namedRepos as ap, newTaskFields as aq, opsEditable as ar, outputLines as as, outputPreview as at, parseTaskOpsJson as au, pastGateConfirmation as av, reduceConversation as aw, reduceTaskLog as ax, replayTaskLog as ay, runnerToolSubject as az, type ApprovalStatus as b, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type MessageBlock as j, type MessageRole as k, NO_TURN as l, type NewTaskFields as m, type PlanMarkerStatus as n, type PromptHold as o, type SerializedTask as p, type SerializedTaskStatus as q, type SessionBroadcaster as r, type SessionMessage as s, type SessionNotice as t, type SubagentBlock as u, type SubagentChild as v, type SubagentStatus as w, type TaskLogEvent as x, type TaskLogView as y, type TaskOp as z };
1222
+ export { type TaskRowView as $, type ApplyTaskOpsResult as A, type SubagentChild as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type SubagentStatus as F, type GatedConversation as G, type SurfacePlan as H, type SurfacePlanState as I, type SurfaceTask as J, type TaskLogEvent as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskLogView as Q, type TaskOp as R, type SerializedConversationMessage as S, type TakenPrompt as T, type TaskRef as U, type TaskRowAction as V, type TaskRowContext as W, type TaskRowIsolation as X, type TaskRowKind as Y, type TaskRowPlacement as Z, type TaskRowSubject as _, type ApprovalBlock as a, truncateCheckpointSummary as a$, type TaskStatusKind as a0, type ThinkingDisplayBlock as a1, type ToolBlock as a2, type ToolHeadline as a3, type ToolStatus as a4, type TurnGate as a5, type UsageBlock as a6, aheadOfDraft as a7, applyTaskOps as a8, approvalLabel as a9, opsEditable as aA, outputLines as aB, outputPreview as aC, parseTaskOpsJson as aD, pastGateConfirmation as aE, reduceConversation as aF, reduceTaskLog as aG, replayTaskLog as aH, runnerToolSubject as aI, serializePlan as aJ, serializeTask as aK, serializeTaskStatus as aL, skillTokens as aM, stopTurn as aN, summarizeToolCall as aO, surfacePlan as aP, surfacePlanState as aQ, taskLogForSurface as aR, taskRowActions as aS, taskRowView as aT, taskStartedNotice as aU, taskStatusKind as aV, textHasTaskOps as aW, titledRefs as aX, toTaskLogEvent as aY, toolHeadline as aZ, trimToolOutput as a_, awaitingLabel as aa, canMergeTasks as ab, canSetDependencies as ac, canSplitTask as ad, capConflictFiles as ae, classifyOutcome as af, coalesceTaskLog as ag, dependencyCandidates as ah, dependentsNotice as ai, dependentsOf as aj, diffRows as ak, diffStat as al, diffSummary as am, digestTaskLog as an, drainNext as ao, executionSummary as ap, followTurn as aq, fromTranscript as ar, hasHiddenDetail as as, holdPrompt as at, isTaskRunning as au, loadedSkillTokens as av, markAction as aw, markRequestFor as ax, namedRepos as ay, newTaskFields as az, type ApprovalStatus as b, unsendAll as b0, unsendLatest as b1, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type EditCatalog as j, type MessageBlock as k, type MessageRole as l, NO_TURN as m, type NewTaskFields as n, type PlanMarkerStatus as o, type PromptHold as p, type SerializedPlan as q, type SerializedQueuedMessage as r, type SerializedTask as s, type SerializedTaskStatus as t, type SessionBroadcaster as u, type SessionMessage as v, type SessionNotice as w, type SkillLoadBlock as x, type SkillToken as y, type SubagentBlock as z };
@@ -1,5 +1,6 @@
1
- import { bb as StructuredTurnEnd, bd as SubagentOutcome, bE as UsageRecord, k as ApprovalDecision, b9 as StructuredEvent, a$ as RunnerId, y as DiscoveredModel, bh as Task, ab as LegacyPlanState, aQ as QueuedMessage, bF as UsageTotals, bL as Verdict, bj as TaskIsolation, by as TaskTransport, r as AwaitingReason, aR as QueuedTaskMessage, T as IsolationHandoff, _ as IsolationMergeResult, aX as ResearchStep, l as ApprovalKind, q as ApprovalSource, aY as ResearchStepOutcome, w as ConversationMessage, aV as ResearchLogEntry, aB as PlannerUsage, bk as TaskIsolationState } from './Task-BnLxkVQF.js';
2
- import { R as RunnerModeInfo } from './ModeResolver-DkMYf4uS.js';
1
+ import { ag as TaskSkillSnapshot, af as TaskSkillNotice, a8 as SubagentOutcome, ao as UsageRecord, W as RunnerId, c as DiscoveredModel, a9 as Task, L as LegacyPlanState, C as ConversationMessage, a0 as SkillLoadNotice, Q as QueuedMessage, ap as UsageTotals, av as Verdict, aa as TaskIsolation, a as AwaitingReason, g as IsolationHandoff, n as IsolationMergeResult, T as ResearchStep, z as PlanState, ah as TaskSnapshot, U as ResearchStepOutcome, O as ResearchLogEntry, G as PlannerUsage, ab as TaskIsolationState } from './Task-1Q19y7sZ.js';
2
+ import { R as RunnerModeInfo } from './ModeResolver-EWlpmVAy.js';
3
+ import { a5 as StructuredTurnEnd, h as ApprovalDecision, a4 as StructuredEvent, Y as QueuedTaskMessage, i as ApprovalKind, n as ApprovalSource } from './IRunner-CGCihlGQ.js';
3
4
  import './order-labels.js';
4
5
 
5
6
  /**
@@ -12,8 +13,17 @@ import './order-labels.js';
12
13
  * without a format version.
13
14
  */
14
15
  type TaskLogEvent =
15
- /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
16
+ /**
17
+ * The task skills this attempt's prompt carried, as read at its spawn
18
+ * (ADR-0024): first in its log. The file keeps their bodies; a surface is
19
+ * sent notices ({@link taskLogForSurface}).
20
+ */
16
21
  {
22
+ type: 'task_skills';
23
+ skills: TaskSkillSnapshot[] | TaskSkillNotice[];
24
+ }
25
+ /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
26
+ | {
17
27
  type: 'turn_start';
18
28
  message: string;
19
29
  messageId?: string;
@@ -142,6 +152,8 @@ declare function trimToolOutput(output: string): {
142
152
  * keep: background-agent launches, which the subagent's own events already show.
143
153
  */
144
154
  declare function toTaskLogEvent(event: StructuredEvent): TaskLogEvent | null;
155
+ /** A log as a surface is sent it, live or read back: everything but the skills' bodies. */
156
+ declare function taskLogForSurface(events: readonly TaskLogEvent[]): TaskLogEvent[];
145
157
  /**
146
158
  * Merge runs of deltas into one event each. Deltas arrive a few characters at
147
159
  * a time; merged, a batch is one message on the wire and one line on disk,
@@ -285,8 +297,6 @@ type SerializedTaskStatus = {
285
297
  idleSince?: string | null;
286
298
  /** Absent unless the plan has an isolation run, so a shared-root plan's updates are unchanged. */
287
299
  isolation?: TaskIsolation;
288
- /** Absent unless the task's plan asked for the structured transport (ADR-0018): what it ran on, or why it fell back. */
289
- transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
290
300
  /** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
291
301
  awaitingReason?: AwaitingReason;
292
302
  /** The whole question of the checkpoint the task waits at; absent when it waits at none. */
@@ -339,14 +349,49 @@ type SerializedTask = {
339
349
  userStoriesCovered: Task['userStoriesCovered'];
340
350
  /** Set only on an ops task (ADR-0020). */
341
351
  ops?: true;
352
+ /** Task skills attached by name; absent when none. */
353
+ skills?: string[];
354
+ };
355
+ /** Skill loads go out as notices: their bodies are for the planner, and stay in the session. */
356
+ type SerializedConversationMessage = Omit<ConversationMessage, 'skill'> & {
357
+ skill?: SkillLoadNotice;
358
+ };
359
+ type SerializedQueuedMessage = Omit<QueuedMessage, 'skills'> & {
360
+ skills?: SkillLoadNotice[];
361
+ };
362
+ /**
363
+ * A task as a surface is sent it: its attempt's skills are notices, whole in
364
+ * the session only, and its runner session id stays there too — no surface shows it,
365
+ * and only a continue reads the runner's own session id.
366
+ */
367
+ type SurfaceTask<T extends Task = Task> = Omit<T, 'attemptSkills' | 'subtasks' | 'runnerSessionId'> & {
368
+ attemptSkills?: TaskSkillNotice[];
369
+ subtasks: SurfaceTask[];
370
+ };
371
+ /** A plan as the daemon and the VS Code webview are sent it: the session's own state, minus every skill body. */
372
+ type SurfacePlan = Omit<LegacyPlanState, 'tasks' | 'conversationHistory' | 'queuedMessages'> & {
373
+ tasks: SurfaceTask[];
374
+ conversationHistory?: SerializedConversationMessage[];
375
+ queuedMessages?: SerializedQueuedMessage[];
342
376
  };
377
+ /** The phase-tagged shape of {@link SurfacePlan}. */
378
+ type SurfacePlanState = (Omit<Extract<PlanState, {
379
+ phase: 'planning';
380
+ }>, 'pendingTasks'> & {
381
+ pendingTasks: SurfaceTask[];
382
+ }) | (Omit<Extract<PlanState, {
383
+ phase: 'executing';
384
+ }>, 'pendingTasks' | 'executionLog'> & {
385
+ pendingTasks: SurfaceTask[];
386
+ executionLog: SurfaceTask<TaskSnapshot>[];
387
+ });
343
388
  type SerializedPlan = {
344
389
  tasks: SerializedTask[];
345
390
  runners: RunnerId[];
346
391
  generatedAt: string;
347
- conversationHistory?: LegacyPlanState['conversationHistory'];
392
+ conversationHistory?: SerializedConversationMessage[];
348
393
  prdMarkdown?: string;
349
- queuedMessages?: QueuedMessage[];
394
+ queuedMessages?: SerializedQueuedMessage[];
350
395
  };
351
396
  /** How a planner turn ended: the reply kind it settled on, a user stop, or a failure. */
352
397
  type PlannerTurnOutcome = 'message' | 'plan' | 'task_ops' | 'stopped' | 'error';
@@ -392,12 +437,18 @@ type SessionMessage =
392
437
  /**
393
438
  * A planner turn began. Emitted once per turn by whoever runs the turn,
394
439
  * before any other message carrying its `turnId`. `prompt` is the user's
395
- * message when the turn answers one.
440
+ * message, as typed, when the turn answers one; `skills` are what its
441
+ * `/name` tokens loaded, absent when none did.
396
442
  */
397
443
  | {
398
444
  type: 'planner_turn_started';
399
445
  turnId: string;
400
446
  prompt?: string;
447
+ skills?: SkillLoadNotice[];
448
+ } | {
449
+ type: 'planner_skill_loaded';
450
+ turnId: string;
451
+ skill: SkillLoadNotice;
401
452
  }
402
453
  /**
403
454
  * A planner turn is over; nothing more carries its `turnId`. Emitted exactly
@@ -511,8 +562,6 @@ type SessionMessage =
511
562
  };
512
563
  } | {
513
564
  type: 'execution_stopped';
514
- } | {
515
- type: 'queue_ready';
516
565
  } | {
517
566
  type: 'task_updated';
518
567
  taskId: string;
@@ -533,7 +582,7 @@ type SessionMessage =
533
582
  * A structured task's log as it happens (ADR-0018, P1): the next events of
534
583
  * the task's attempt `attempt`, in order — the same ones appended to that
535
584
  * attempt's file, so a surface folding these and one replaying the file
536
- * draw the same blocks. Terminal-transport tasks send none.
585
+ * draw the same blocks.
537
586
  */
538
587
  | {
539
588
  type: 'task_log';
@@ -607,6 +656,9 @@ type SessionNotice = {
607
656
  type SessionBroadcaster = (msg: SessionMessage) => void;
608
657
  declare function serializeTask(t: Task): SerializedTask;
609
658
  declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
659
+ /** The one place a plan's skill bodies come off before it leaves the session: every wire path that carries plan state goes through here. */
660
+ declare function surfacePlan(plan: LegacyPlanState): SurfacePlan;
661
+ declare function surfacePlanState(state: PlanState): SurfacePlanState;
610
662
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
611
663
  declare function executionSummary(tasks: readonly Task[]): {
612
664
  total: number;
@@ -641,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
641
693
  * the block exists, so a surface can key its own UI state on it — whether a
642
694
  * block is expanded is that UI state, and deliberately not part of a block.
643
695
  */
644
- type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
696
+ type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
645
697
  /** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
646
698
  type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
647
699
  interface MessageBlock {
@@ -658,6 +710,8 @@ interface MessageBlock {
658
710
  * it is the final segment, and never saved to the transcript.
659
711
  */
660
712
  segmentId?: string;
713
+ /** A user's message: the skills its `/name` tokens loaded, for a surface to mark those tokens (see `loadedSkillTokens`). */
714
+ skills?: readonly string[];
661
715
  }
662
716
  interface ThinkingDisplayBlock {
663
717
  type: 'thinking';
@@ -758,6 +812,12 @@ interface PlanBlock {
758
812
  /** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
759
813
  segmentId?: string;
760
814
  }
815
+ /** A skill loaded into the conversation: one line naming it and the SKILL.md that won. Its body is never shown. */
816
+ interface SkillLoadBlock extends SkillLoadNotice {
817
+ type: 'skill_load';
818
+ id: string;
819
+ turnId?: string;
820
+ }
761
821
  /** The token line. There is at most one, and it is always the last block. */
762
822
  interface UsageBlock {
763
823
  type: 'usage';
@@ -813,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
813
873
  * The research log interleaves with the transcript by time. Entries older than
814
874
  * a compaction's first kept message went with the turns it condensed.
815
875
  */
816
- declare function fromTranscript(conversationHistory: readonly ConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
876
+ declare function fromTranscript(conversationHistory: readonly SerializedConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
817
877
 
818
878
  /**
819
879
  * What a surface draws for one attempt of a structured task (ADR-0018, O1b):
@@ -953,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
953
1013
  /** The conversation line for a task starting, worded the same on every surface. */
954
1014
  declare function taskStartedNotice(title: string, runner?: string): string;
955
1015
 
1016
+ /** Where a skill name is invoked: `start` is its `/`, `end` is just past the name, before any punctuation. */
1017
+ interface SkillToken {
1018
+ name: string;
1019
+ start: number;
1020
+ end: number;
1021
+ }
1022
+ /**
1023
+ * The first `/name` token for each name in `text`, names lower-cased. Only
1024
+ * the first counts because a skill loads once per message however often it is
1025
+ * named, so a later repeat is plain text.
1026
+ */
1027
+ declare function skillTokens(text: string): SkillToken[];
1028
+ /** The tokens in a sent message that loaded one of `loaded` — what a surface highlights in the user's bubble. */
1029
+ declare function loadedSkillTokens(text: string, loaded: readonly string[]): SkillToken[];
1030
+
956
1031
  /**
957
1032
  * What a row's status means to a reader, before any surface picks a word,
958
1033
  * icon or colour for it. `quiet` is a running task whose runner has printed
@@ -1144,4 +1219,4 @@ interface NewTaskFields {
1144
1219
  */
1145
1220
  declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1146
1221
 
1147
- export { aheadOfDraft as $, type ApplyTaskOpsResult as A, type TaskRef as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type TaskRowAction as F, type GatedConversation as G, type TaskRowContext as H, type TaskRowIsolation as I, type TaskRowKind as J, type TaskRowPlacement as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskRowSubject as Q, type TaskRowView as R, type SerializedPlan as S, type TakenPrompt as T, type TaskStatusKind as U, type ThinkingDisplayBlock as V, type ToolBlock as W, type ToolHeadline as X, type ToolStatus as Y, type TurnGate as Z, type UsageBlock as _, type ApprovalBlock as a, applyTaskOps as a0, approvalLabel as a1, awaitingLabel as a2, canMergeTasks as a3, canSetDependencies as a4, canSplitTask as a5, capConflictFiles as a6, classifyOutcome as a7, coalesceTaskLog as a8, dependencyCandidates as a9, serializePlan as aA, serializeTask as aB, serializeTaskStatus as aC, stopTurn as aD, summarizeToolCall as aE, taskRowActions as aF, taskRowView as aG, taskStartedNotice as aH, taskStatusKind as aI, textHasTaskOps as aJ, titledRefs as aK, toTaskLogEvent as aL, toolHeadline as aM, trimToolOutput as aN, truncateCheckpointSummary as aO, unsendAll as aP, unsendLatest as aQ, dependentsNotice as aa, dependentsOf as ab, diffRows as ac, diffStat as ad, diffSummary as ae, digestTaskLog as af, drainNext as ag, executionSummary as ah, followTurn as ai, fromTranscript as aj, hasHiddenDetail as ak, holdPrompt as al, isTaskRunning as am, markAction as an, markRequestFor as ao, namedRepos as ap, newTaskFields as aq, opsEditable as ar, outputLines as as, outputPreview as at, parseTaskOpsJson as au, pastGateConfirmation as av, reduceConversation as aw, reduceTaskLog as ax, replayTaskLog as ay, runnerToolSubject as az, type ApprovalStatus as b, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type MessageBlock as j, type MessageRole as k, NO_TURN as l, type NewTaskFields as m, type PlanMarkerStatus as n, type PromptHold as o, type SerializedTask as p, type SerializedTaskStatus as q, type SessionBroadcaster as r, type SessionMessage as s, type SessionNotice as t, type SubagentBlock as u, type SubagentChild as v, type SubagentStatus as w, type TaskLogEvent as x, type TaskLogView as y, type TaskOp as z };
1222
+ export { type TaskRowView as $, type ApplyTaskOpsResult as A, type SubagentChild as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type SubagentStatus as F, type GatedConversation as G, type SurfacePlan as H, type SurfacePlanState as I, type SurfaceTask as J, type TaskLogEvent as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskLogView as Q, type TaskOp as R, type SerializedConversationMessage as S, type TakenPrompt as T, type TaskRef as U, type TaskRowAction as V, type TaskRowContext as W, type TaskRowIsolation as X, type TaskRowKind as Y, type TaskRowPlacement as Z, type TaskRowSubject as _, type ApprovalBlock as a, truncateCheckpointSummary as a$, type TaskStatusKind as a0, type ThinkingDisplayBlock as a1, type ToolBlock as a2, type ToolHeadline as a3, type ToolStatus as a4, type TurnGate as a5, type UsageBlock as a6, aheadOfDraft as a7, applyTaskOps as a8, approvalLabel as a9, opsEditable as aA, outputLines as aB, outputPreview as aC, parseTaskOpsJson as aD, pastGateConfirmation as aE, reduceConversation as aF, reduceTaskLog as aG, replayTaskLog as aH, runnerToolSubject as aI, serializePlan as aJ, serializeTask as aK, serializeTaskStatus as aL, skillTokens as aM, stopTurn as aN, summarizeToolCall as aO, surfacePlan as aP, surfacePlanState as aQ, taskLogForSurface as aR, taskRowActions as aS, taskRowView as aT, taskStartedNotice as aU, taskStatusKind as aV, textHasTaskOps as aW, titledRefs as aX, toTaskLogEvent as aY, toolHeadline as aZ, trimToolOutput as a_, awaitingLabel as aa, canMergeTasks as ab, canSetDependencies as ac, canSplitTask as ad, capConflictFiles as ae, classifyOutcome as af, coalesceTaskLog as ag, dependencyCandidates as ah, dependentsNotice as ai, dependentsOf as aj, diffRows as ak, diffStat as al, diffSummary as am, digestTaskLog as an, drainNext as ao, executionSummary as ap, followTurn as aq, fromTranscript as ar, hasHiddenDetail as as, holdPrompt as at, isTaskRunning as au, loadedSkillTokens as av, markAction as aw, markRequestFor as ax, namedRepos as ay, newTaskFields as az, type ApprovalStatus as b, unsendAll as b0, unsendLatest as b1, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type EditCatalog as j, type MessageBlock as k, type MessageRole as l, NO_TURN as m, type NewTaskFields as n, type PlanMarkerStatus as o, type PromptHold as p, type SerializedPlan as q, type SerializedQueuedMessage as r, type SerializedTask as s, type SerializedTaskStatus as t, type SessionBroadcaster as u, type SessionMessage as v, type SessionNotice as w, type SkillLoadBlock as x, type SkillToken as y, type SubagentBlock as z };
@@ -1,7 +1,7 @@
1
- export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, j as MessageBlock, k as MessageRole, N as NOT_STARTED, l as NO_TURN, m as NewTaskFields, O as OutputPreview, P as PlanBlock, n as PlanMarkerStatus, o as PromptHold, u as SubagentBlock, v as SubagentChild, w as SubagentStatus, T as TakenPrompt, y as TaskLogView, B as TaskRef, F as TaskRowAction, H as TaskRowContext, I as TaskRowIsolation, J as TaskRowKind, K as TaskRowPlacement, Q as TaskRowSubject, R as TaskRowView, U as TaskStatusKind, V as ThinkingDisplayBlock, W as ToolBlock, X as ToolHeadline, Y as ToolStatus, Z as TurnGate, _ as UsageBlock, $ as aheadOfDraft, a1 as approvalLabel, a2 as awaitingLabel, a3 as canMergeTasks, a4 as canSetDependencies, a5 as canSplitTask, a6 as capConflictFiles, a9 as dependencyCandidates, aa as dependentsNotice, ab as dependentsOf, ac as diffRows, ad as diffStat, ae as diffSummary, ag as drainNext, ai as followTurn, aj as fromTranscript, ak as hasHiddenDetail, al as holdPrompt, am as isTaskRunning, an as markAction, ao as markRequestFor, ap as namedRepos, aq as newTaskFields, ar as opsEditable, as as outputLines, at as outputPreview, av as pastGateConfirmation, aw as reduceConversation, ax as reduceTaskLog, ay as replayTaskLog, az as runnerToolSubject, aD as stopTurn, aE as summarizeToolCall, aF as taskRowActions, aG as taskRowView, aH as taskStartedNotice, aI as taskStatusKind, aK as titledRefs, aM as toolHeadline, aO as truncateCheckpointSummary, aP as unsendAll, aQ as unsendLatest } from './plan-utils-CKgNtDwQ.mjs';
1
+ export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold, x as SkillLoadBlock, y as SkillToken, z as SubagentBlock, B as SubagentChild, F as SubagentStatus, T as TakenPrompt, Q as TaskLogView, U as TaskRef, V as TaskRowAction, W as TaskRowContext, X as TaskRowIsolation, Y as TaskRowKind, Z as TaskRowPlacement, _ as TaskRowSubject, $ as TaskRowView, a0 as TaskStatusKind, a1 as ThinkingDisplayBlock, a2 as ToolBlock, a3 as ToolHeadline, a4 as ToolStatus, a5 as TurnGate, a6 as UsageBlock, a7 as aheadOfDraft, a9 as approvalLabel, aa as awaitingLabel, ab as canMergeTasks, ac as canSetDependencies, ad as canSplitTask, ae as capConflictFiles, ah as dependencyCandidates, ai as dependentsNotice, aj as dependentsOf, ak as diffRows, al as diffStat, am as diffSummary, ao as drainNext, aq as followTurn, ar as fromTranscript, as as hasHiddenDetail, at as holdPrompt, au as isTaskRunning, av as loadedSkillTokens, aw as markAction, ax as markRequestFor, ay as namedRepos, az as newTaskFields, aA as opsEditable, aB as outputLines, aC as outputPreview, aE as pastGateConfirmation, aF as reduceConversation, aG as reduceTaskLog, aH as replayTaskLog, aI as runnerToolSubject, aM as skillTokens, aN as stopTurn, aO as summarizeToolCall, aS as taskRowActions, aT as taskRowView, aU as taskStartedNotice, aV as taskStatusKind, aX as titledRefs, aZ as toolHeadline, a$ as truncateCheckpointSummary, b0 as unsendAll, b1 as unsendLatest } from './plan-utils-BMayhGBj.mjs';
2
2
  export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.mjs';
3
- import './Task-BnLxkVQF.mjs';
3
+ export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.mjs';
4
+ import './ModeResolver-DE-o2lRF.mjs';
5
+ import './IRunner-XVUddYVX.mjs';
4
6
  import 'child_process';
5
- import 'events';
6
7
  import 'zod/v4';
7
- import './ModeResolver-DZzJSdIU.mjs';
@@ -1,7 +1,7 @@
1
- export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, j as MessageBlock, k as MessageRole, N as NOT_STARTED, l as NO_TURN, m as NewTaskFields, O as OutputPreview, P as PlanBlock, n as PlanMarkerStatus, o as PromptHold, u as SubagentBlock, v as SubagentChild, w as SubagentStatus, T as TakenPrompt, y as TaskLogView, B as TaskRef, F as TaskRowAction, H as TaskRowContext, I as TaskRowIsolation, J as TaskRowKind, K as TaskRowPlacement, Q as TaskRowSubject, R as TaskRowView, U as TaskStatusKind, V as ThinkingDisplayBlock, W as ToolBlock, X as ToolHeadline, Y as ToolStatus, Z as TurnGate, _ as UsageBlock, $ as aheadOfDraft, a1 as approvalLabel, a2 as awaitingLabel, a3 as canMergeTasks, a4 as canSetDependencies, a5 as canSplitTask, a6 as capConflictFiles, a9 as dependencyCandidates, aa as dependentsNotice, ab as dependentsOf, ac as diffRows, ad as diffStat, ae as diffSummary, ag as drainNext, ai as followTurn, aj as fromTranscript, ak as hasHiddenDetail, al as holdPrompt, am as isTaskRunning, an as markAction, ao as markRequestFor, ap as namedRepos, aq as newTaskFields, ar as opsEditable, as as outputLines, at as outputPreview, av as pastGateConfirmation, aw as reduceConversation, ax as reduceTaskLog, ay as replayTaskLog, az as runnerToolSubject, aD as stopTurn, aE as summarizeToolCall, aF as taskRowActions, aG as taskRowView, aH as taskStartedNotice, aI as taskStatusKind, aK as titledRefs, aM as toolHeadline, aO as truncateCheckpointSummary, aP as unsendAll, aQ as unsendLatest } from './plan-utils--kQRzSE-.js';
1
+ export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold, x as SkillLoadBlock, y as SkillToken, z as SubagentBlock, B as SubagentChild, F as SubagentStatus, T as TakenPrompt, Q as TaskLogView, U as TaskRef, V as TaskRowAction, W as TaskRowContext, X as TaskRowIsolation, Y as TaskRowKind, Z as TaskRowPlacement, _ as TaskRowSubject, $ as TaskRowView, a0 as TaskStatusKind, a1 as ThinkingDisplayBlock, a2 as ToolBlock, a3 as ToolHeadline, a4 as ToolStatus, a5 as TurnGate, a6 as UsageBlock, a7 as aheadOfDraft, a9 as approvalLabel, aa as awaitingLabel, ab as canMergeTasks, ac as canSetDependencies, ad as canSplitTask, ae as capConflictFiles, ah as dependencyCandidates, ai as dependentsNotice, aj as dependentsOf, ak as diffRows, al as diffStat, am as diffSummary, ao as drainNext, aq as followTurn, ar as fromTranscript, as as hasHiddenDetail, at as holdPrompt, au as isTaskRunning, av as loadedSkillTokens, aw as markAction, ax as markRequestFor, ay as namedRepos, az as newTaskFields, aA as opsEditable, aB as outputLines, aC as outputPreview, aE as pastGateConfirmation, aF as reduceConversation, aG as reduceTaskLog, aH as replayTaskLog, aI as runnerToolSubject, aM as skillTokens, aN as stopTurn, aO as summarizeToolCall, aS as taskRowActions, aT as taskRowView, aU as taskStartedNotice, aV as taskStatusKind, aX as titledRefs, aZ as toolHeadline, a$ as truncateCheckpointSummary, b0 as unsendAll, b1 as unsendLatest } from './plan-utils-Cv48fe7r.js';
2
2
  export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.js';
3
- import './Task-BnLxkVQF.js';
3
+ export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.js';
4
+ import './ModeResolver-EWlpmVAy.js';
5
+ import './IRunner-CGCihlGQ.js';
4
6
  import 'child_process';
5
- import 'events';
6
7
  import 'zod/v4';
7
- import './ModeResolver-DkMYf4uS.js';