@ordewell/core 0.7.2 → 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 (50) hide show
  1. package/README.md +5 -2
  2. package/dist/{IFileSystem-B5asBRDa.d.mts → IFileSystem-D96mT-bm.d.ts} +1 -1
  3. package/dist/{IFileSystem-CbCmUDBn.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-DtfhWeVL.d.ts → ModeResolver-DE-o2lRF.d.mts} +2 -2
  7. package/dist/{ModeResolver-DcqAho4y.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-OUIQWNS3.mjs → chunk-2M4X3VB7.mjs} +15 -5
  11. package/dist/chunk-2M4X3VB7.mjs.map +1 -0
  12. package/dist/{chunk-AJ5KDO6V.mjs → chunk-BLLIBCCS.mjs} +117 -198
  13. package/dist/chunk-BLLIBCCS.mjs.map +1 -0
  14. package/dist/{chunk-MZYZS7B3.mjs → chunk-UUU46PVQ.mjs} +68 -8
  15. package/dist/chunk-UUU46PVQ.mjs.map +1 -0
  16. package/dist/index.d.mts +516 -713
  17. package/dist/index.d.ts +516 -713
  18. package/dist/index.js +5012 -6370
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +3275 -4589
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/order-labels.d.mts +1 -4
  23. package/dist/order-labels.d.ts +1 -4
  24. package/dist/{parsing-COFGUEWx.d.ts → parsing-CZdp2p_n.d.ts} +5 -3
  25. package/dist/{parsing-D0uo-Icd.d.mts → parsing-GgUJoYKs.d.mts} +5 -3
  26. package/dist/parsing.d.mts +3 -6
  27. package/dist/parsing.d.ts +3 -6
  28. package/dist/parsing.js +25 -4
  29. package/dist/parsing.js.map +1 -1
  30. package/dist/parsing.mjs +2 -2
  31. package/dist/{plan-utils-CdW3mxt5.d.mts → plan-utils-BMayhGBj.d.mts} +89 -12
  32. package/dist/{plan-utils-D4Z8UyLL.d.ts → plan-utils-Cv48fe7r.d.ts} +89 -12
  33. package/dist/plan-utils.d.mts +4 -4
  34. package/dist/plan-utils.d.ts +4 -4
  35. package/dist/plan-utils.js +120 -65
  36. package/dist/plan-utils.js.map +1 -1
  37. package/dist/plan-utils.mjs +7 -3
  38. package/dist/testing.d.mts +12 -24
  39. package/dist/testing.d.ts +12 -24
  40. package/dist/testing.js +24 -28
  41. package/dist/testing.js.map +1 -1
  42. package/dist/testing.mjs +17 -27
  43. package/dist/testing.mjs.map +1 -1
  44. package/package.json +1 -1
  45. package/skills/tdd/SKILL.md +19 -0
  46. package/dist/Task-BpzIbunq.d.mts +0 -2599
  47. package/dist/Task-BpzIbunq.d.ts +0 -2599
  48. package/dist/chunk-AJ5KDO6V.mjs.map +0 -1
  49. package/dist/chunk-MZYZS7B3.mjs.map +0 -1
  50. package/dist/chunk-OUIQWNS3.mjs.map +0 -1
@@ -1,5 +1,6 @@
1
- import { bc as StructuredTurnEnd, be as SubagentOutcome, bF as UsageRecord, k as ApprovalDecision, ba as StructuredEvent, b0 as RunnerId, z as DiscoveredModel, bi as Task, ac as LegacyPlanState, aR as QueuedMessage, bG as UsageTotals, bM as Verdict, bk as TaskIsolation, bz as TaskTransport, r as AwaitingReason, aS as QueuedTaskMessage, U as IsolationHandoff, $ as IsolationMergeResult, aY as ResearchStep, l as ApprovalKind, q as ApprovalSource, aZ as ResearchStepOutcome, w as ConversationMessage, aW as ResearchLogEntry, aC as PlannerUsage, bl as TaskIsolationState } from './Task-BpzIbunq.mjs';
2
- import { R as RunnerModeInfo } from './ModeResolver-DcqAho4y.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[];
342
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[];
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
@@ -531,7 +582,7 @@ type SessionMessage =
531
582
  * A structured task's log as it happens (ADR-0018, P1): the next events of
532
583
  * the task's attempt `attempt`, in order — the same ones appended to that
533
584
  * attempt's file, so a surface folding these and one replaying the file
534
- * draw the same blocks. Terminal-transport tasks send none.
585
+ * draw the same blocks.
535
586
  */
536
587
  | {
537
588
  type: 'task_log';
@@ -605,6 +656,9 @@ type SessionNotice = {
605
656
  type SessionBroadcaster = (msg: SessionMessage) => void;
606
657
  declare function serializeTask(t: Task): SerializedTask;
607
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;
608
662
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
609
663
  declare function executionSummary(tasks: readonly Task[]): {
610
664
  total: number;
@@ -639,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
639
693
  * the block exists, so a surface can key its own UI state on it — whether a
640
694
  * block is expanded is that UI state, and deliberately not part of a block.
641
695
  */
642
- type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
696
+ type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
643
697
  /** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
644
698
  type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
645
699
  interface MessageBlock {
@@ -656,6 +710,8 @@ interface MessageBlock {
656
710
  * it is the final segment, and never saved to the transcript.
657
711
  */
658
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[];
659
715
  }
660
716
  interface ThinkingDisplayBlock {
661
717
  type: 'thinking';
@@ -756,6 +812,12 @@ interface PlanBlock {
756
812
  /** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
757
813
  segmentId?: string;
758
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
+ }
759
821
  /** The token line. There is at most one, and it is always the last block. */
760
822
  interface UsageBlock {
761
823
  type: 'usage';
@@ -811,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
811
873
  * The research log interleaves with the transcript by time. Entries older than
812
874
  * a compaction's first kept message went with the turns it condensed.
813
875
  */
814
- 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;
815
877
 
816
878
  /**
817
879
  * What a surface draws for one attempt of a structured task (ADR-0018, O1b):
@@ -951,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
951
1013
  /** The conversation line for a task starting, worded the same on every surface. */
952
1014
  declare function taskStartedNotice(title: string, runner?: string): string;
953
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
+
954
1031
  /**
955
1032
  * What a row's status means to a reader, before any surface picks a word,
956
1033
  * icon or colour for it. `quiet` is a running task whose runner has printed
@@ -1142,4 +1219,4 @@ interface NewTaskFields {
1142
1219
  */
1143
1220
  declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1144
1221
 
1145
- export { type UsageBlock as $, type ApplyTaskOpsResult as A, type TaskOp as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type TaskRef as F, type GatedConversation as G, type TaskRowAction as H, type TaskRowContext as I, type TaskRowIsolation as J, type TaskRowKind as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskRowPlacement as Q, type TaskRowSubject as R, type SerializedPlan as S, type TakenPrompt as T, type TaskRowView as U, type TaskStatusKind as V, type ThinkingDisplayBlock as W, type ToolBlock as X, type ToolHeadline as Y, type ToolStatus as Z, type TurnGate as _, type ApprovalBlock as a, aheadOfDraft as a0, applyTaskOps as a1, approvalLabel as a2, awaitingLabel as a3, canMergeTasks as a4, canSetDependencies as a5, canSplitTask as a6, capConflictFiles as a7, classifyOutcome as a8, coalesceTaskLog as a9, runnerToolSubject as aA, serializePlan as aB, serializeTask as aC, serializeTaskStatus as aD, stopTurn as aE, summarizeToolCall as aF, taskRowActions as aG, taskRowView as aH, taskStartedNotice as aI, taskStatusKind as aJ, textHasTaskOps as aK, titledRefs as aL, toTaskLogEvent as aM, toolHeadline as aN, trimToolOutput as aO, truncateCheckpointSummary as aP, unsendAll as aQ, unsendLatest as aR, dependencyCandidates as aa, dependentsNotice as ab, dependentsOf as ac, diffRows as ad, diffStat as ae, diffSummary as af, digestTaskLog as ag, drainNext as ah, executionSummary as ai, followTurn as aj, fromTranscript as ak, hasHiddenDetail as al, holdPrompt as am, isTaskRunning as an, markAction as ao, markRequestFor as ap, namedRepos as aq, newTaskFields as ar, opsEditable as as, outputLines as at, outputPreview as au, parseTaskOpsJson as av, pastGateConfirmation as aw, reduceConversation as ax, reduceTaskLog as ay, replayTaskLog 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 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 SerializedTask as q, type SerializedTaskStatus as r, type SessionBroadcaster as s, type SessionMessage as t, type SessionNotice as u, type SubagentBlock as v, type SubagentChild as w, type SubagentStatus as x, type TaskLogEvent as y, type TaskLogView 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 { bc as StructuredTurnEnd, be as SubagentOutcome, bF as UsageRecord, k as ApprovalDecision, ba as StructuredEvent, b0 as RunnerId, z as DiscoveredModel, bi as Task, ac as LegacyPlanState, aR as QueuedMessage, bG as UsageTotals, bM as Verdict, bk as TaskIsolation, bz as TaskTransport, r as AwaitingReason, aS as QueuedTaskMessage, U as IsolationHandoff, $ as IsolationMergeResult, aY as ResearchStep, l as ApprovalKind, q as ApprovalSource, aZ as ResearchStepOutcome, w as ConversationMessage, aW as ResearchLogEntry, aC as PlannerUsage, bl as TaskIsolationState } from './Task-BpzIbunq.js';
2
- import { R as RunnerModeInfo } from './ModeResolver-DtfhWeVL.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[];
342
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[];
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
@@ -531,7 +582,7 @@ type SessionMessage =
531
582
  * A structured task's log as it happens (ADR-0018, P1): the next events of
532
583
  * the task's attempt `attempt`, in order — the same ones appended to that
533
584
  * attempt's file, so a surface folding these and one replaying the file
534
- * draw the same blocks. Terminal-transport tasks send none.
585
+ * draw the same blocks.
535
586
  */
536
587
  | {
537
588
  type: 'task_log';
@@ -605,6 +656,9 @@ type SessionNotice = {
605
656
  type SessionBroadcaster = (msg: SessionMessage) => void;
606
657
  declare function serializeTask(t: Task): SerializedTask;
607
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;
608
662
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
609
663
  declare function executionSummary(tasks: readonly Task[]): {
610
664
  total: number;
@@ -639,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
639
693
  * the block exists, so a surface can key its own UI state on it — whether a
640
694
  * block is expanded is that UI state, and deliberately not part of a block.
641
695
  */
642
- type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
696
+ type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
643
697
  /** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
644
698
  type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
645
699
  interface MessageBlock {
@@ -656,6 +710,8 @@ interface MessageBlock {
656
710
  * it is the final segment, and never saved to the transcript.
657
711
  */
658
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[];
659
715
  }
660
716
  interface ThinkingDisplayBlock {
661
717
  type: 'thinking';
@@ -756,6 +812,12 @@ interface PlanBlock {
756
812
  /** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
757
813
  segmentId?: string;
758
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
+ }
759
821
  /** The token line. There is at most one, and it is always the last block. */
760
822
  interface UsageBlock {
761
823
  type: 'usage';
@@ -811,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
811
873
  * The research log interleaves with the transcript by time. Entries older than
812
874
  * a compaction's first kept message went with the turns it condensed.
813
875
  */
814
- 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;
815
877
 
816
878
  /**
817
879
  * What a surface draws for one attempt of a structured task (ADR-0018, O1b):
@@ -951,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
951
1013
  /** The conversation line for a task starting, worded the same on every surface. */
952
1014
  declare function taskStartedNotice(title: string, runner?: string): string;
953
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
+
954
1031
  /**
955
1032
  * What a row's status means to a reader, before any surface picks a word,
956
1033
  * icon or colour for it. `quiet` is a running task whose runner has printed
@@ -1142,4 +1219,4 @@ interface NewTaskFields {
1142
1219
  */
1143
1220
  declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1144
1221
 
1145
- export { type UsageBlock as $, type ApplyTaskOpsResult as A, type TaskOp as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type TaskRef as F, type GatedConversation as G, type TaskRowAction as H, type TaskRowContext as I, type TaskRowIsolation as J, type TaskRowKind as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskRowPlacement as Q, type TaskRowSubject as R, type SerializedPlan as S, type TakenPrompt as T, type TaskRowView as U, type TaskStatusKind as V, type ThinkingDisplayBlock as W, type ToolBlock as X, type ToolHeadline as Y, type ToolStatus as Z, type TurnGate as _, type ApprovalBlock as a, aheadOfDraft as a0, applyTaskOps as a1, approvalLabel as a2, awaitingLabel as a3, canMergeTasks as a4, canSetDependencies as a5, canSplitTask as a6, capConflictFiles as a7, classifyOutcome as a8, coalesceTaskLog as a9, runnerToolSubject as aA, serializePlan as aB, serializeTask as aC, serializeTaskStatus as aD, stopTurn as aE, summarizeToolCall as aF, taskRowActions as aG, taskRowView as aH, taskStartedNotice as aI, taskStatusKind as aJ, textHasTaskOps as aK, titledRefs as aL, toTaskLogEvent as aM, toolHeadline as aN, trimToolOutput as aO, truncateCheckpointSummary as aP, unsendAll as aQ, unsendLatest as aR, dependencyCandidates as aa, dependentsNotice as ab, dependentsOf as ac, diffRows as ad, diffStat as ae, diffSummary as af, digestTaskLog as ag, drainNext as ah, executionSummary as ai, followTurn as aj, fromTranscript as ak, hasHiddenDetail as al, holdPrompt as am, isTaskRunning as an, markAction as ao, markRequestFor as ap, namedRepos as aq, newTaskFields as ar, opsEditable as as, outputLines as at, outputPreview as au, parseTaskOpsJson as av, pastGateConfirmation as aw, reduceConversation as ax, reduceTaskLog as ay, replayTaskLog 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 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 SerializedTask as q, type SerializedTaskStatus as r, type SessionBroadcaster as s, type SessionMessage as t, type SessionNotice as u, type SubagentBlock as v, type SubagentChild as w, type SubagentStatus as x, type TaskLogEvent as y, type TaskLogView 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, 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, v as SubagentBlock, w as SubagentChild, x as SubagentStatus, T as TakenPrompt, z as TaskLogView, F as TaskRef, H as TaskRowAction, I as TaskRowContext, J as TaskRowIsolation, K as TaskRowKind, Q as TaskRowPlacement, R as TaskRowSubject, U as TaskRowView, V as TaskStatusKind, W as ThinkingDisplayBlock, X as ToolBlock, Y as ToolHeadline, Z as ToolStatus, _ as TurnGate, $ as UsageBlock, a0 as aheadOfDraft, a2 as approvalLabel, a3 as awaitingLabel, a4 as canMergeTasks, a5 as canSetDependencies, a6 as canSplitTask, a7 as capConflictFiles, aa as dependencyCandidates, ab as dependentsNotice, ac as dependentsOf, ad as diffRows, ae as diffStat, af as diffSummary, ah as drainNext, aj as followTurn, ak as fromTranscript, al as hasHiddenDetail, am as holdPrompt, an as isTaskRunning, ao as markAction, ap as markRequestFor, aq as namedRepos, ar as newTaskFields, as as opsEditable, at as outputLines, au as outputPreview, aw as pastGateConfirmation, ax as reduceConversation, ay as reduceTaskLog, az as replayTaskLog, aA as runnerToolSubject, aE as stopTurn, aF as summarizeToolCall, aG as taskRowActions, aH as taskRowView, aI as taskStartedNotice, aJ as taskStatusKind, aL as titledRefs, aN as toolHeadline, aP as truncateCheckpointSummary, aQ as unsendAll, aR as unsendLatest } from './plan-utils-CdW3mxt5.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
- export { D as DEFAULT_RUNNERS } from './Task-BpzIbunq.mjs';
4
- import './ModeResolver-DcqAho4y.mjs';
3
+ export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.mjs';
4
+ import './ModeResolver-DE-o2lRF.mjs';
5
+ import './IRunner-XVUddYVX.mjs';
5
6
  import 'child_process';
6
- import 'events';
7
7
  import 'zod/v4';
@@ -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, 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, v as SubagentBlock, w as SubagentChild, x as SubagentStatus, T as TakenPrompt, z as TaskLogView, F as TaskRef, H as TaskRowAction, I as TaskRowContext, J as TaskRowIsolation, K as TaskRowKind, Q as TaskRowPlacement, R as TaskRowSubject, U as TaskRowView, V as TaskStatusKind, W as ThinkingDisplayBlock, X as ToolBlock, Y as ToolHeadline, Z as ToolStatus, _ as TurnGate, $ as UsageBlock, a0 as aheadOfDraft, a2 as approvalLabel, a3 as awaitingLabel, a4 as canMergeTasks, a5 as canSetDependencies, a6 as canSplitTask, a7 as capConflictFiles, aa as dependencyCandidates, ab as dependentsNotice, ac as dependentsOf, ad as diffRows, ae as diffStat, af as diffSummary, ah as drainNext, aj as followTurn, ak as fromTranscript, al as hasHiddenDetail, am as holdPrompt, an as isTaskRunning, ao as markAction, ap as markRequestFor, aq as namedRepos, ar as newTaskFields, as as opsEditable, at as outputLines, au as outputPreview, aw as pastGateConfirmation, ax as reduceConversation, ay as reduceTaskLog, az as replayTaskLog, aA as runnerToolSubject, aE as stopTurn, aF as summarizeToolCall, aG as taskRowActions, aH as taskRowView, aI as taskStartedNotice, aJ as taskStatusKind, aL as titledRefs, aN as toolHeadline, aP as truncateCheckpointSummary, aQ as unsendAll, aR as unsendLatest } from './plan-utils-D4Z8UyLL.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
- export { D as DEFAULT_RUNNERS } from './Task-BpzIbunq.js';
4
- import './ModeResolver-DtfhWeVL.js';
3
+ export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.js';
4
+ import './ModeResolver-EWlpmVAy.js';
5
+ import './IRunner-CGCihlGQ.js';
5
6
  import 'child_process';
6
- import 'events';
7
7
  import 'zod/v4';