@ordewell/core 0.7.0 → 0.7.1

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 (53) hide show
  1. package/dist/{IFileSystem-DgpX0BU7.d.mts → IFileSystem-BnLh-_SK.d.mts} +1 -1
  2. package/dist/{IFileSystem-D4ADfTrX.d.ts → IFileSystem-DofiRcCo.d.ts} +1 -1
  3. package/dist/{ModeResolver-Cv01ZDd9.d.mts → ModeResolver-DZzJSdIU.d.mts} +1 -1
  4. package/dist/{ModeResolver-BEcRAz1c.d.ts → ModeResolver-DkMYf4uS.d.ts} +1 -1
  5. package/dist/{Task-CoKhvBa1.d.mts → Task-BnLxkVQF.d.mts} +140 -21
  6. package/dist/{Task-CoKhvBa1.d.ts → Task-BnLxkVQF.d.ts} +140 -21
  7. package/dist/{chunk-YU4UKKKI.mjs → chunk-LGQNXPBX.mjs} +10 -2
  8. package/dist/chunk-LGQNXPBX.mjs.map +1 -0
  9. package/dist/{chunk-N66ZHFGN.mjs → chunk-OYUSADFM.mjs} +11 -1
  10. package/dist/chunk-OYUSADFM.mjs.map +1 -0
  11. package/dist/{chunk-HPNUFBIT.mjs → chunk-V3JHS7AX.mjs} +9 -1
  12. package/dist/chunk-V3JHS7AX.mjs.map +1 -0
  13. package/dist/{chunk-LSGY7AIZ.mjs → chunk-Y36NIASW.mjs} +183 -11
  14. package/dist/chunk-Y36NIASW.mjs.map +1 -0
  15. package/dist/{chunk-J3YSTPCE.mjs → chunk-ZV5LDNCO.mjs} +5 -4
  16. package/dist/chunk-ZV5LDNCO.mjs.map +1 -0
  17. package/dist/index.d.mts +287 -223
  18. package/dist/index.d.ts +287 -223
  19. package/dist/index.js +2111 -1086
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +1973 -1117
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/order-labels.d.mts +15 -2
  24. package/dist/order-labels.d.ts +15 -2
  25. package/dist/order-labels.js +12 -2
  26. package/dist/order-labels.js.map +1 -1
  27. package/dist/order-labels.mjs +7 -3
  28. package/dist/{parsing-B4OCHH1_.d.mts → parsing-B6ctfF80.d.mts} +2 -2
  29. package/dist/{parsing-DMdOq-BV.d.ts → parsing-ddZXZFP4.d.ts} +2 -2
  30. package/dist/parsing.d.mts +3 -3
  31. package/dist/parsing.d.ts +3 -3
  32. package/dist/parsing.js +6 -3
  33. package/dist/parsing.js.map +1 -1
  34. package/dist/parsing.mjs +3 -3
  35. package/dist/{plan-utils-BdYPRBno.d.ts → plan-utils--kQRzSE-.d.ts} +226 -7
  36. package/dist/{plan-utils-CD1Xu65s.d.mts → plan-utils-CKgNtDwQ.d.mts} +226 -7
  37. package/dist/plan-utils.d.mts +4 -3
  38. package/dist/plan-utils.d.ts +4 -3
  39. package/dist/plan-utils.js +202 -3
  40. package/dist/plan-utils.js.map +1 -1
  41. package/dist/plan-utils.mjs +40 -3
  42. package/dist/testing.d.mts +17 -5
  43. package/dist/testing.d.ts +17 -5
  44. package/dist/testing.js +45 -2
  45. package/dist/testing.js.map +1 -1
  46. package/dist/testing.mjs +45 -4
  47. package/dist/testing.mjs.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/chunk-HPNUFBIT.mjs.map +0 -1
  50. package/dist/chunk-J3YSTPCE.mjs.map +0 -1
  51. package/dist/chunk-LSGY7AIZ.mjs.map +0 -1
  52. package/dist/chunk-N66ZHFGN.mjs.map +0 -1
  53. package/dist/chunk-YU4UKKKI.mjs.map +0 -1
@@ -1,5 +1,6 @@
1
- import { b7 as StructuredTurnEnd, b9 as SubagentOutcome, bz as UsageRecord, k as ApprovalDecision, b5 as StructuredEvent, aX as RunnerId, y as DiscoveredModel, bc as Task, a9 as LegacyPlanState, aN as QueuedMessage, bA as UsageTotals, bG as Verdict, be as TaskIsolation, bt as TaskTransport, r as AwaitingReason, aO as QueuedTaskMessage, T as IsolationHandoff, _ as IsolationMergeResult, aT as ResearchStep, l as ApprovalKind, q as ApprovalSource, aU as ResearchStepOutcome, w as ConversationMessage, aR as ResearchLogEntry, az as PlannerUsage } from './Task-CoKhvBa1.js';
2
- import { R as RunnerModeInfo } from './ModeResolver-BEcRAz1c.js';
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';
3
+ import './order-labels.js';
3
4
 
4
5
  /**
5
6
  * One entry of a structured task's log (ADR-0018, P1): what a runner did,
@@ -11,11 +12,12 @@ import { R as RunnerModeInfo } from './ModeResolver-BEcRAz1c.js';
11
12
  * without a format version.
12
13
  */
13
14
  type TaskLogEvent =
14
- /** A turn began by delivering `message`; `messageId` names it when it had been queued. */
15
+ /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
15
16
  {
16
17
  type: 'turn_start';
17
18
  message: string;
18
19
  messageId?: string;
20
+ forced?: boolean;
19
21
  } | {
20
22
  type: 'turn_end';
21
23
  reason: StructuredTurnEnd;
@@ -65,13 +67,37 @@ type TaskLogEvent =
65
67
  } | {
66
68
  type: 'usage';
67
69
  record: UsageRecord;
68
- } | {
70
+ }
71
+ /**
72
+ * Waiting in Ordewell's queue — again, for a message the runner was handed
73
+ * and let go of (ADR-0023, D4). `forced` moves it ahead of the rest (F2).
74
+ */
75
+ | {
69
76
  type: 'message_queued';
70
77
  messageId: string;
71
78
  text: string;
79
+ forced?: boolean;
72
80
  } | {
73
81
  type: 'message_removed';
74
82
  messageId: string;
83
+ } | {
84
+ type: 'message_undelivered';
85
+ messageId: string;
86
+ text: string;
87
+ }
88
+ /** The runner accepted a queued message into its running turn; it can no longer be taken back. */
89
+ | {
90
+ type: 'message_handed_over';
91
+ messageId: string;
92
+ }
93
+ /**
94
+ * The model read a message inside its running turn (ADR-0023, Q2), logged
95
+ * where it read it. A message that opened a turn is that turn's `turn_start`.
96
+ */
97
+ | {
98
+ type: 'message_delivered';
99
+ messageId: string;
100
+ text: string;
75
101
  }
76
102
  /** The agent's own words for a failed turn. */
77
103
  | {
@@ -263,6 +289,8 @@ type SerializedTaskStatus = {
263
289
  transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
264
290
  /** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
265
291
  awaitingReason?: AwaitingReason;
292
+ /** The whole question of the checkpoint the task waits at; absent when it waits at none. */
293
+ checkpoint?: string;
266
294
  /** Messages waiting for a structured task's turn to end, oldest first; absent when there are none. */
267
295
  queued?: QueuedTaskMessage[];
268
296
  /** Set when the task can be continued in its saved runner session (ADR-0018, K1); the id itself stays in the daemon. */
@@ -578,7 +606,7 @@ type SessionNotice = {
578
606
  };
579
607
  type SessionBroadcaster = (msg: SessionMessage) => void;
580
608
  declare function serializeTask(t: Task): SerializedTask;
581
- declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[]): SerializedTaskStatus;
609
+ declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
582
610
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
583
611
  declare function executionSummary(tasks: readonly Task[]): {
584
612
  total: number;
@@ -794,7 +822,7 @@ declare function fromTranscript(conversationHistory: readonly ConversationMessag
794
822
  * one at a time.
795
823
  */
796
824
  interface TaskLogView extends BlockList {
797
- /** Messages waiting for the running turn to end, oldest first. */
825
+ /** Messages not yet delivered, oldest first; `handedOver` marks the ones the runner already has. */
798
826
  readonly queued: readonly QueuedTaskMessage[];
799
827
  /** A turn is running. */
800
828
  readonly working: boolean;
@@ -925,4 +953,195 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
925
953
  /** The conversation line for a task starting, worded the same on every surface. */
926
954
  declare function taskStartedNotice(title: string, runner?: string): string;
927
955
 
928
- export { diffRows as $, type ApplyTaskOpsResult as A, type ToolBlock as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type ToolHeadline as F, type GatedConversation as G, type ToolStatus as H, type TurnGate as I, aheadOfDraft as J, applyTaskOps as K, type LocalEntry as L, type MergeGateView as M, NO_TURN as N, type OutputPreview as O, type PlanBlock as P, canMergeTasks as Q, canSetDependencies as R, type SerializedPlan as S, type TakenPrompt as T, type UsageBlock as U, canSplitTask as V, capConflictFiles as W, classifyOutcome as X, coalesceTaskLog as Y, dependencyCandidates as Z, dependentsOf as _, type ApprovalBlock as a, diffStat as a0, diffSummary as a1, digestTaskLog as a2, drainNext as a3, executionSummary as a4, followTurn as a5, fromTranscript as a6, hasHiddenDetail as a7, holdPrompt as a8, outputLines as a9, outputPreview as aa, parseTaskOpsJson as ab, reduceConversation as ac, reduceTaskLog as ad, replayTaskLog as ae, runnerToolSubject as af, serializePlan as ag, serializeTask as ah, serializeTaskStatus as ai, stopTurn as aj, summarizeToolCall as ak, taskStartedNotice as al, textHasTaskOps as am, toTaskLogEvent as an, toolHeadline as ao, trimToolOutput as ap, truncateCheckpointSummary as aq, unsendAll as ar, unsendLatest as as, 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, type PlanMarkerStatus as l, type PromptHold as m, type SerializedTask as n, type SerializedTaskStatus as o, type SessionBroadcaster as p, type SessionMessage as q, type SessionNotice as r, type SubagentBlock as s, type SubagentChild as t, type SubagentStatus as u, type TaskLogEvent as v, type TaskLogView as w, type TaskOp as x, type TaskRef as y, type ThinkingDisplayBlock as z };
956
+ /**
957
+ * What a row's status means to a reader, before any surface picks a word,
958
+ * icon or colour for it. `quiet` is a running task whose runner has printed
959
+ * nothing for a while — the status is still `in_progress`, so only the row,
960
+ * never the store, tells the two apart.
961
+ */
962
+ type TaskStatusKind = 'todo' | 'running' | 'quiet' | 'awaiting' | 'blocked' | 'failed' | 'done';
963
+ /** A task with a runner live behind it. `in_progress` is the store's own status. */
964
+ declare const isTaskRunning: (task: {
965
+ status: string;
966
+ }) => boolean;
967
+ /** Statuses of a task that has not started: what can still be started by hand, or flipped between change and ops (ADR-0020). */
968
+ declare const NOT_STARTED: ReadonlySet<string>;
969
+ declare function taskStatusKind(task: {
970
+ status: string;
971
+ idleSince?: string | null;
972
+ }): TaskStatusKind;
973
+ /** What an awaiting_user task waits on (ADR-0018, W1); null when no reason was saved. */
974
+ declare function awaitingLabel(task: {
975
+ status: string;
976
+ awaitingReason?: AwaitingReason;
977
+ }): string | null;
978
+ /** Runner requests a task waits on (ADR-0018, A1); null when none do. */
979
+ declare function approvalLabel(count: number | undefined): string | null;
980
+
981
+ /** What a user can do to one task from its row. */
982
+ type TaskRowAction = 'cancel' | 'skip' | 'force-start' | 'complete' | 'uncomplete';
983
+ /** A subtask runs with its parent, so its row offers a different set than a top-level task's. */
984
+ type TaskRowPlacement = 'task' | 'subtask';
985
+ interface ActionSubject {
986
+ status: string;
987
+ type: 'ai' | 'user';
988
+ }
989
+ /** The actions a task's row offers while a plan runs, in the order they are laid out. */
990
+ declare function taskRowActions(task: ActionSubject, placement?: TaskRowPlacement): TaskRowAction[];
991
+ /**
992
+ * One toggle in both directions: a done task is taken back, anything else is
993
+ * marked done. A second control for the reverse is one nobody remembers.
994
+ */
995
+ declare function markAction(task: {
996
+ status: string;
997
+ }): 'complete' | 'uncomplete';
998
+ /**
999
+ * The mark an action asks the session for, or null when it is not a mark.
1000
+ * Skip has no request of its own: a skipped task is marked complete, so the
1001
+ * run moves on past it.
1002
+ */
1003
+ declare function markRequestFor(action: string): 'complete' | 'uncomplete' | null;
1004
+ /** Change versus ops can still be flipped (ADR-0020): an AI task that has not started. */
1005
+ declare function opsEditable(task: ActionSubject): boolean;
1006
+
1007
+ /**
1008
+ * A task as both surfaces hold it, with the live state each tracks beside it
1009
+ * (silence, approvals, isolation, the merge gate). Structural, because the TUI
1010
+ * projects tasks into its own shape.
1011
+ */
1012
+ interface TaskRowSubject {
1013
+ id: string;
1014
+ order: number;
1015
+ type: 'ai' | 'user';
1016
+ status: string;
1017
+ dependencies: readonly string[];
1018
+ taskMode?: string;
1019
+ ops?: boolean;
1020
+ idleSince?: string | null;
1021
+ awaitingReason?: AwaitingReason;
1022
+ awaitingApproval?: number;
1023
+ isolation?: TaskRowIsolation | null;
1024
+ mergeGate?: readonly string[];
1025
+ forcedPastGate?: readonly string[];
1026
+ }
1027
+ interface TaskRowIsolation {
1028
+ state: TaskIsolationState;
1029
+ repos?: string[];
1030
+ conflictRepo?: string;
1031
+ conflictFiles?: string[];
1032
+ repair?: {
1033
+ attempt: number;
1034
+ limit: number;
1035
+ };
1036
+ repairedFiles?: string[];
1037
+ }
1038
+ interface TaskRowContext {
1039
+ /** Set for a subtask: it is labelled by its dotted order. */
1040
+ parent?: {
1041
+ order: number;
1042
+ } | null;
1043
+ /** Which action set the row offers; a row with a parent is a subtask's unless told otherwise. */
1044
+ placement?: TaskRowPlacement;
1045
+ /** Order of each task a dependency or gate may name; one missing from it is shown by id. */
1046
+ orderOf?: ReadonlyMap<string, number>;
1047
+ /** The modes the task's runner declares; autonomy is a tag on one of them (ADR-0001). */
1048
+ modes?: readonly {
1049
+ id: string;
1050
+ autonomous?: boolean;
1051
+ }[];
1052
+ }
1053
+ /** Whether the row stands for an AI task, a manual one, or an ops task (ADR-0020). */
1054
+ type TaskRowKind = 'ai' | 'user' | 'ops';
1055
+ interface TaskRowView {
1056
+ /** "2", or "2.1" for a subtask. */
1057
+ orderLabel: string;
1058
+ kind: TaskRowKind;
1059
+ status: TaskStatusKind;
1060
+ /** A runner is live behind it — `quiet` included. */
1061
+ running: boolean;
1062
+ /** What an awaiting task waits on, in sentence case; null when nothing was saved. */
1063
+ awaiting: string | null;
1064
+ /** Runner requests waiting on the user, in sentence case; null when none do. */
1065
+ approvals: string | null;
1066
+ /** The task's mode is tagged autonomous: it runs without permission prompts. */
1067
+ autonomous: boolean;
1068
+ /** The repos its isolated work changed, by path; empty for a group of one. */
1069
+ repos: string[];
1070
+ /** Integration stopped on a conflict: the one isolation state that needs the user. */
1071
+ conflict: {
1072
+ repo: string | null;
1073
+ files: string | null;
1074
+ } | null;
1075
+ /** A conflict repair in flight (ADR-0015) — progress, not a blocker. */
1076
+ repairing: {
1077
+ files: string | null;
1078
+ attempt: {
1079
+ attempt: number;
1080
+ limit: number;
1081
+ } | null;
1082
+ } | null;
1083
+ /** The files a conflict repair was started for; `landed` once the task is integrated. */
1084
+ repaired: {
1085
+ files: string;
1086
+ landed: boolean;
1087
+ } | null;
1088
+ /** The dependencies, by reference, whose work is not merged into the user's branch yet. */
1089
+ mergeGate: string[] | null;
1090
+ /** An ops task changed tracked files in the user's checkout and nothing was committed. */
1091
+ opsChangedFiles: boolean;
1092
+ /** The dependencies, by title, a force start went past the merge gate of. */
1093
+ forcedPastGate: readonly string[] | null;
1094
+ /** The task's dependencies, by reference. */
1095
+ dependencies: string[];
1096
+ /** What the row offers while a plan runs. */
1097
+ actions: TaskRowAction[];
1098
+ /** The one mark its toggle sets. */
1099
+ mark: 'complete' | 'uncomplete';
1100
+ opsEditable: boolean;
1101
+ }
1102
+ /** The repos a task changed, for a row that names them; none for a group of one. */
1103
+ declare const namedRepos: (repos: readonly string[] | undefined) => string[];
1104
+ /**
1105
+ * Everything a plan row says about one task, decided once: each surface picks
1106
+ * its own words, glyphs and casing for these facts, and derives none of them.
1107
+ */
1108
+ declare function taskRowView(task: TaskRowSubject, context?: TaskRowContext): TaskRowView;
1109
+
1110
+ interface Named {
1111
+ id: string;
1112
+ order: number;
1113
+ title: string;
1114
+ subtasks?: readonly Named[];
1115
+ }
1116
+ /** Each id as "#N title", subtasks included; one the plan no longer holds stays a bare id. */
1117
+ declare function titledRefs(ids: readonly string[], tasks: readonly Named[]): string[];
1118
+ /**
1119
+ * What removing a task does to the tasks that depend on it, or null when none
1120
+ * do. Named rather than counted: the removal rewrites their dependency lists,
1121
+ * and a bare "Remove task?" would hide that.
1122
+ */
1123
+ declare function dependentsNotice(dependents: readonly {
1124
+ order: number;
1125
+ title: string;
1126
+ }[]): string | null;
1127
+ /**
1128
+ * What a start past a merge gate is asked with (ADR-0020): the work the task
1129
+ * would act without, named. `subject` is how the asking surface refers to the
1130
+ * task — "It" under a title that already names it.
1131
+ */
1132
+ declare function pastGateConfirmation(unmerged: readonly string[], subject?: string): string;
1133
+ interface NewTaskFields {
1134
+ title: string;
1135
+ description: string;
1136
+ prompt: string;
1137
+ type: 'ai';
1138
+ }
1139
+ /**
1140
+ * What a hand-added task starts as: an AI task whose description is its title
1141
+ * and whose prompt, unless one was typed, is too. Null for a title with nothing
1142
+ * in it, rather than a nameless task. Assignments are left for the session to
1143
+ * derive from the runner's catalog.
1144
+ */
1145
+ declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1146
+
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 };
@@ -1,5 +1,6 @@
1
- import { b7 as StructuredTurnEnd, b9 as SubagentOutcome, bz as UsageRecord, k as ApprovalDecision, b5 as StructuredEvent, aX as RunnerId, y as DiscoveredModel, bc as Task, a9 as LegacyPlanState, aN as QueuedMessage, bA as UsageTotals, bG as Verdict, be as TaskIsolation, bt as TaskTransport, r as AwaitingReason, aO as QueuedTaskMessage, T as IsolationHandoff, _ as IsolationMergeResult, aT as ResearchStep, l as ApprovalKind, q as ApprovalSource, aU as ResearchStepOutcome, w as ConversationMessage, aR as ResearchLogEntry, az as PlannerUsage } from './Task-CoKhvBa1.mjs';
2
- import { R as RunnerModeInfo } from './ModeResolver-Cv01ZDd9.mjs';
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';
3
+ import './order-labels.mjs';
3
4
 
4
5
  /**
5
6
  * One entry of a structured task's log (ADR-0018, P1): what a runner did,
@@ -11,11 +12,12 @@ import { R as RunnerModeInfo } from './ModeResolver-Cv01ZDd9.mjs';
11
12
  * without a format version.
12
13
  */
13
14
  type TaskLogEvent =
14
- /** A turn began by delivering `message`; `messageId` names it when it had been queued. */
15
+ /** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
15
16
  {
16
17
  type: 'turn_start';
17
18
  message: string;
18
19
  messageId?: string;
20
+ forced?: boolean;
19
21
  } | {
20
22
  type: 'turn_end';
21
23
  reason: StructuredTurnEnd;
@@ -65,13 +67,37 @@ type TaskLogEvent =
65
67
  } | {
66
68
  type: 'usage';
67
69
  record: UsageRecord;
68
- } | {
70
+ }
71
+ /**
72
+ * Waiting in Ordewell's queue — again, for a message the runner was handed
73
+ * and let go of (ADR-0023, D4). `forced` moves it ahead of the rest (F2).
74
+ */
75
+ | {
69
76
  type: 'message_queued';
70
77
  messageId: string;
71
78
  text: string;
79
+ forced?: boolean;
72
80
  } | {
73
81
  type: 'message_removed';
74
82
  messageId: string;
83
+ } | {
84
+ type: 'message_undelivered';
85
+ messageId: string;
86
+ text: string;
87
+ }
88
+ /** The runner accepted a queued message into its running turn; it can no longer be taken back. */
89
+ | {
90
+ type: 'message_handed_over';
91
+ messageId: string;
92
+ }
93
+ /**
94
+ * The model read a message inside its running turn (ADR-0023, Q2), logged
95
+ * where it read it. A message that opened a turn is that turn's `turn_start`.
96
+ */
97
+ | {
98
+ type: 'message_delivered';
99
+ messageId: string;
100
+ text: string;
75
101
  }
76
102
  /** The agent's own words for a failed turn. */
77
103
  | {
@@ -263,6 +289,8 @@ type SerializedTaskStatus = {
263
289
  transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
264
290
  /** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
265
291
  awaitingReason?: AwaitingReason;
292
+ /** The whole question of the checkpoint the task waits at; absent when it waits at none. */
293
+ checkpoint?: string;
266
294
  /** Messages waiting for a structured task's turn to end, oldest first; absent when there are none. */
267
295
  queued?: QueuedTaskMessage[];
268
296
  /** Set when the task can be continued in its saved runner session (ADR-0018, K1); the id itself stays in the daemon. */
@@ -578,7 +606,7 @@ type SessionNotice = {
578
606
  };
579
607
  type SessionBroadcaster = (msg: SessionMessage) => void;
580
608
  declare function serializeTask(t: Task): SerializedTask;
581
- declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[]): SerializedTaskStatus;
609
+ declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
582
610
  declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
583
611
  declare function executionSummary(tasks: readonly Task[]): {
584
612
  total: number;
@@ -794,7 +822,7 @@ declare function fromTranscript(conversationHistory: readonly ConversationMessag
794
822
  * one at a time.
795
823
  */
796
824
  interface TaskLogView extends BlockList {
797
- /** Messages waiting for the running turn to end, oldest first. */
825
+ /** Messages not yet delivered, oldest first; `handedOver` marks the ones the runner already has. */
798
826
  readonly queued: readonly QueuedTaskMessage[];
799
827
  /** A turn is running. */
800
828
  readonly working: boolean;
@@ -925,4 +953,195 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
925
953
  /** The conversation line for a task starting, worded the same on every surface. */
926
954
  declare function taskStartedNotice(title: string, runner?: string): string;
927
955
 
928
- export { diffRows as $, type ApplyTaskOpsResult as A, type ToolBlock as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type ToolHeadline as F, type GatedConversation as G, type ToolStatus as H, type TurnGate as I, aheadOfDraft as J, applyTaskOps as K, type LocalEntry as L, type MergeGateView as M, NO_TURN as N, type OutputPreview as O, type PlanBlock as P, canMergeTasks as Q, canSetDependencies as R, type SerializedPlan as S, type TakenPrompt as T, type UsageBlock as U, canSplitTask as V, capConflictFiles as W, classifyOutcome as X, coalesceTaskLog as Y, dependencyCandidates as Z, dependentsOf as _, type ApprovalBlock as a, diffStat as a0, diffSummary as a1, digestTaskLog as a2, drainNext as a3, executionSummary as a4, followTurn as a5, fromTranscript as a6, hasHiddenDetail as a7, holdPrompt as a8, outputLines as a9, outputPreview as aa, parseTaskOpsJson as ab, reduceConversation as ac, reduceTaskLog as ad, replayTaskLog as ae, runnerToolSubject as af, serializePlan as ag, serializeTask as ah, serializeTaskStatus as ai, stopTurn as aj, summarizeToolCall as ak, taskStartedNotice as al, textHasTaskOps as am, toTaskLogEvent as an, toolHeadline as ao, trimToolOutput as ap, truncateCheckpointSummary as aq, unsendAll as ar, unsendLatest as as, 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, type PlanMarkerStatus as l, type PromptHold as m, type SerializedTask as n, type SerializedTaskStatus as o, type SessionBroadcaster as p, type SessionMessage as q, type SessionNotice as r, type SubagentBlock as s, type SubagentChild as t, type SubagentStatus as u, type TaskLogEvent as v, type TaskLogView as w, type TaskOp as x, type TaskRef as y, type ThinkingDisplayBlock as z };
956
+ /**
957
+ * What a row's status means to a reader, before any surface picks a word,
958
+ * icon or colour for it. `quiet` is a running task whose runner has printed
959
+ * nothing for a while — the status is still `in_progress`, so only the row,
960
+ * never the store, tells the two apart.
961
+ */
962
+ type TaskStatusKind = 'todo' | 'running' | 'quiet' | 'awaiting' | 'blocked' | 'failed' | 'done';
963
+ /** A task with a runner live behind it. `in_progress` is the store's own status. */
964
+ declare const isTaskRunning: (task: {
965
+ status: string;
966
+ }) => boolean;
967
+ /** Statuses of a task that has not started: what can still be started by hand, or flipped between change and ops (ADR-0020). */
968
+ declare const NOT_STARTED: ReadonlySet<string>;
969
+ declare function taskStatusKind(task: {
970
+ status: string;
971
+ idleSince?: string | null;
972
+ }): TaskStatusKind;
973
+ /** What an awaiting_user task waits on (ADR-0018, W1); null when no reason was saved. */
974
+ declare function awaitingLabel(task: {
975
+ status: string;
976
+ awaitingReason?: AwaitingReason;
977
+ }): string | null;
978
+ /** Runner requests a task waits on (ADR-0018, A1); null when none do. */
979
+ declare function approvalLabel(count: number | undefined): string | null;
980
+
981
+ /** What a user can do to one task from its row. */
982
+ type TaskRowAction = 'cancel' | 'skip' | 'force-start' | 'complete' | 'uncomplete';
983
+ /** A subtask runs with its parent, so its row offers a different set than a top-level task's. */
984
+ type TaskRowPlacement = 'task' | 'subtask';
985
+ interface ActionSubject {
986
+ status: string;
987
+ type: 'ai' | 'user';
988
+ }
989
+ /** The actions a task's row offers while a plan runs, in the order they are laid out. */
990
+ declare function taskRowActions(task: ActionSubject, placement?: TaskRowPlacement): TaskRowAction[];
991
+ /**
992
+ * One toggle in both directions: a done task is taken back, anything else is
993
+ * marked done. A second control for the reverse is one nobody remembers.
994
+ */
995
+ declare function markAction(task: {
996
+ status: string;
997
+ }): 'complete' | 'uncomplete';
998
+ /**
999
+ * The mark an action asks the session for, or null when it is not a mark.
1000
+ * Skip has no request of its own: a skipped task is marked complete, so the
1001
+ * run moves on past it.
1002
+ */
1003
+ declare function markRequestFor(action: string): 'complete' | 'uncomplete' | null;
1004
+ /** Change versus ops can still be flipped (ADR-0020): an AI task that has not started. */
1005
+ declare function opsEditable(task: ActionSubject): boolean;
1006
+
1007
+ /**
1008
+ * A task as both surfaces hold it, with the live state each tracks beside it
1009
+ * (silence, approvals, isolation, the merge gate). Structural, because the TUI
1010
+ * projects tasks into its own shape.
1011
+ */
1012
+ interface TaskRowSubject {
1013
+ id: string;
1014
+ order: number;
1015
+ type: 'ai' | 'user';
1016
+ status: string;
1017
+ dependencies: readonly string[];
1018
+ taskMode?: string;
1019
+ ops?: boolean;
1020
+ idleSince?: string | null;
1021
+ awaitingReason?: AwaitingReason;
1022
+ awaitingApproval?: number;
1023
+ isolation?: TaskRowIsolation | null;
1024
+ mergeGate?: readonly string[];
1025
+ forcedPastGate?: readonly string[];
1026
+ }
1027
+ interface TaskRowIsolation {
1028
+ state: TaskIsolationState;
1029
+ repos?: string[];
1030
+ conflictRepo?: string;
1031
+ conflictFiles?: string[];
1032
+ repair?: {
1033
+ attempt: number;
1034
+ limit: number;
1035
+ };
1036
+ repairedFiles?: string[];
1037
+ }
1038
+ interface TaskRowContext {
1039
+ /** Set for a subtask: it is labelled by its dotted order. */
1040
+ parent?: {
1041
+ order: number;
1042
+ } | null;
1043
+ /** Which action set the row offers; a row with a parent is a subtask's unless told otherwise. */
1044
+ placement?: TaskRowPlacement;
1045
+ /** Order of each task a dependency or gate may name; one missing from it is shown by id. */
1046
+ orderOf?: ReadonlyMap<string, number>;
1047
+ /** The modes the task's runner declares; autonomy is a tag on one of them (ADR-0001). */
1048
+ modes?: readonly {
1049
+ id: string;
1050
+ autonomous?: boolean;
1051
+ }[];
1052
+ }
1053
+ /** Whether the row stands for an AI task, a manual one, or an ops task (ADR-0020). */
1054
+ type TaskRowKind = 'ai' | 'user' | 'ops';
1055
+ interface TaskRowView {
1056
+ /** "2", or "2.1" for a subtask. */
1057
+ orderLabel: string;
1058
+ kind: TaskRowKind;
1059
+ status: TaskStatusKind;
1060
+ /** A runner is live behind it — `quiet` included. */
1061
+ running: boolean;
1062
+ /** What an awaiting task waits on, in sentence case; null when nothing was saved. */
1063
+ awaiting: string | null;
1064
+ /** Runner requests waiting on the user, in sentence case; null when none do. */
1065
+ approvals: string | null;
1066
+ /** The task's mode is tagged autonomous: it runs without permission prompts. */
1067
+ autonomous: boolean;
1068
+ /** The repos its isolated work changed, by path; empty for a group of one. */
1069
+ repos: string[];
1070
+ /** Integration stopped on a conflict: the one isolation state that needs the user. */
1071
+ conflict: {
1072
+ repo: string | null;
1073
+ files: string | null;
1074
+ } | null;
1075
+ /** A conflict repair in flight (ADR-0015) — progress, not a blocker. */
1076
+ repairing: {
1077
+ files: string | null;
1078
+ attempt: {
1079
+ attempt: number;
1080
+ limit: number;
1081
+ } | null;
1082
+ } | null;
1083
+ /** The files a conflict repair was started for; `landed` once the task is integrated. */
1084
+ repaired: {
1085
+ files: string;
1086
+ landed: boolean;
1087
+ } | null;
1088
+ /** The dependencies, by reference, whose work is not merged into the user's branch yet. */
1089
+ mergeGate: string[] | null;
1090
+ /** An ops task changed tracked files in the user's checkout and nothing was committed. */
1091
+ opsChangedFiles: boolean;
1092
+ /** The dependencies, by title, a force start went past the merge gate of. */
1093
+ forcedPastGate: readonly string[] | null;
1094
+ /** The task's dependencies, by reference. */
1095
+ dependencies: string[];
1096
+ /** What the row offers while a plan runs. */
1097
+ actions: TaskRowAction[];
1098
+ /** The one mark its toggle sets. */
1099
+ mark: 'complete' | 'uncomplete';
1100
+ opsEditable: boolean;
1101
+ }
1102
+ /** The repos a task changed, for a row that names them; none for a group of one. */
1103
+ declare const namedRepos: (repos: readonly string[] | undefined) => string[];
1104
+ /**
1105
+ * Everything a plan row says about one task, decided once: each surface picks
1106
+ * its own words, glyphs and casing for these facts, and derives none of them.
1107
+ */
1108
+ declare function taskRowView(task: TaskRowSubject, context?: TaskRowContext): TaskRowView;
1109
+
1110
+ interface Named {
1111
+ id: string;
1112
+ order: number;
1113
+ title: string;
1114
+ subtasks?: readonly Named[];
1115
+ }
1116
+ /** Each id as "#N title", subtasks included; one the plan no longer holds stays a bare id. */
1117
+ declare function titledRefs(ids: readonly string[], tasks: readonly Named[]): string[];
1118
+ /**
1119
+ * What removing a task does to the tasks that depend on it, or null when none
1120
+ * do. Named rather than counted: the removal rewrites their dependency lists,
1121
+ * and a bare "Remove task?" would hide that.
1122
+ */
1123
+ declare function dependentsNotice(dependents: readonly {
1124
+ order: number;
1125
+ title: string;
1126
+ }[]): string | null;
1127
+ /**
1128
+ * What a start past a merge gate is asked with (ADR-0020): the work the task
1129
+ * would act without, named. `subject` is how the asking surface refers to the
1130
+ * task — "It" under a title that already names it.
1131
+ */
1132
+ declare function pastGateConfirmation(unmerged: readonly string[], subject?: string): string;
1133
+ interface NewTaskFields {
1134
+ title: string;
1135
+ description: string;
1136
+ prompt: string;
1137
+ type: 'ai';
1138
+ }
1139
+ /**
1140
+ * What a hand-added task starts as: an AI task whose description is its title
1141
+ * and whose prompt, unless one was typed, is too. Null for a title with nothing
1142
+ * in it, rather than a nameless task. Assignments are left for the session to
1143
+ * derive from the runner's catalog.
1144
+ */
1145
+ declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
1146
+
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 };
@@ -1,6 +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 NO_TURN, O as OutputPreview, P as PlanBlock, l as PlanMarkerStatus, m as PromptHold, s as SubagentBlock, t as SubagentChild, u as SubagentStatus, T as TakenPrompt, w as TaskLogView, y as TaskRef, z as ThinkingDisplayBlock, B as ToolBlock, F as ToolHeadline, H as ToolStatus, I as TurnGate, U as UsageBlock, J as aheadOfDraft, Q as canMergeTasks, R as canSetDependencies, V as canSplitTask, W as capConflictFiles, Z as dependencyCandidates, _ as dependentsOf, $ as diffRows, a0 as diffStat, a1 as diffSummary, a3 as drainNext, a5 as followTurn, a6 as fromTranscript, a7 as hasHiddenDetail, a8 as holdPrompt, a9 as outputLines, aa as outputPreview, ac as reduceConversation, ad as reduceTaskLog, ae as replayTaskLog, af as runnerToolSubject, aj as stopTurn, ak as summarizeToolCall, al as taskStartedNotice, ao as toolHeadline, aq as truncateCheckpointSummary, ar as unsendAll, as as unsendLatest } from './plan-utils-CD1Xu65s.mjs';
2
- import './Task-CoKhvBa1.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, 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';
2
+ export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.mjs';
3
+ import './Task-BnLxkVQF.mjs';
3
4
  import 'child_process';
4
5
  import 'events';
5
6
  import 'zod/v4';
6
- import './ModeResolver-Cv01ZDd9.mjs';
7
+ import './ModeResolver-DZzJSdIU.mjs';
@@ -1,6 +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 NO_TURN, O as OutputPreview, P as PlanBlock, l as PlanMarkerStatus, m as PromptHold, s as SubagentBlock, t as SubagentChild, u as SubagentStatus, T as TakenPrompt, w as TaskLogView, y as TaskRef, z as ThinkingDisplayBlock, B as ToolBlock, F as ToolHeadline, H as ToolStatus, I as TurnGate, U as UsageBlock, J as aheadOfDraft, Q as canMergeTasks, R as canSetDependencies, V as canSplitTask, W as capConflictFiles, Z as dependencyCandidates, _ as dependentsOf, $ as diffRows, a0 as diffStat, a1 as diffSummary, a3 as drainNext, a5 as followTurn, a6 as fromTranscript, a7 as hasHiddenDetail, a8 as holdPrompt, a9 as outputLines, aa as outputPreview, ac as reduceConversation, ad as reduceTaskLog, ae as replayTaskLog, af as runnerToolSubject, aj as stopTurn, ak as summarizeToolCall, al as taskStartedNotice, ao as toolHeadline, aq as truncateCheckpointSummary, ar as unsendAll, as as unsendLatest } from './plan-utils-BdYPRBno.js';
2
- import './Task-CoKhvBa1.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, 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';
2
+ export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.js';
3
+ import './Task-BnLxkVQF.js';
3
4
  import 'child_process';
4
5
  import 'events';
5
6
  import 'zod/v4';
6
- import './ModeResolver-BEcRAz1c.js';
7
+ import './ModeResolver-DkMYf4uS.js';