@ordewell/core 0.12.0 → 0.12.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 (48) hide show
  1. package/dist/{ModeResolver-CHsaoV7M.d.ts → ModeResolver-B64aUZXJ.d.ts} +1 -1
  2. package/dist/{ModeResolver-b_7bPlBS.d.mts → ModeResolver-CA2fUU9h.d.mts} +1 -1
  3. package/dist/{Task-BTEH-ztX.d.mts → Task-CxGgN6I0.d.mts} +503 -16
  4. package/dist/{Task-BTEH-ztX.d.ts → Task-CxGgN6I0.d.ts} +503 -16
  5. package/dist/{chunk-BKTDYGIP.mjs → chunk-2IFKPYPO.mjs} +441 -17
  6. package/dist/chunk-2IFKPYPO.mjs.map +1 -0
  7. package/dist/{chunk-BFLVOYNR.mjs → chunk-FX33UKAD.mjs} +8 -6
  8. package/dist/chunk-FX33UKAD.mjs.map +1 -0
  9. package/dist/{chunk-F6WS3JLQ.mjs → chunk-PKJTN2PD.mjs} +20 -11
  10. package/dist/chunk-PKJTN2PD.mjs.map +1 -0
  11. package/dist/{chunk-HP2LNKST.mjs → chunk-RZ23BMVR.mjs} +345 -134
  12. package/dist/chunk-RZ23BMVR.mjs.map +1 -0
  13. package/dist/chunk-UDUATSCJ.mjs +48 -0
  14. package/dist/chunk-UDUATSCJ.mjs.map +1 -0
  15. package/dist/{IRunner-BwzyUVIL.d.mts → eventStore-CTCSKS9E.d.ts} +916 -129
  16. package/dist/{IRunner-DjJkYwko.d.ts → eventStore-CcB8yELZ.d.mts} +916 -129
  17. package/dist/index.d.mts +677 -97
  18. package/dist/index.d.ts +677 -97
  19. package/dist/index.js +8233 -2450
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +6951 -1772
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/parsing.d.mts +2 -2
  24. package/dist/parsing.d.ts +2 -2
  25. package/dist/parsing.js +277 -21
  26. package/dist/parsing.js.map +1 -1
  27. package/dist/parsing.mjs +3 -3
  28. package/dist/plan-utils.d.mts +8 -5
  29. package/dist/plan-utils.d.ts +8 -5
  30. package/dist/plan-utils.js +129 -16
  31. package/dist/plan-utils.js.map +1 -1
  32. package/dist/plan-utils.mjs +17 -3
  33. package/dist/{runSettingsText-x-YML2ay.d.mts → runSettingsText-DFVpe6aU.d.mts} +1142 -934
  34. package/dist/{runSettingsText-CvZ40IPv.d.ts → runSettingsText-lKLDsyli.d.ts} +1142 -934
  35. package/dist/testing.d.mts +83 -4
  36. package/dist/testing.d.ts +83 -4
  37. package/dist/testing.js +142 -1
  38. package/dist/testing.js.map +1 -1
  39. package/dist/testing.mjs +126 -2
  40. package/dist/testing.mjs.map +1 -1
  41. package/docker/task.Dockerfile +22 -0
  42. package/package.json +2 -1
  43. package/skills/diagnose/SKILL.md +2 -2
  44. package/skills/explore/SKILL.md +1 -1
  45. package/dist/chunk-BFLVOYNR.mjs.map +0 -1
  46. package/dist/chunk-BKTDYGIP.mjs.map +0 -1
  47. package/dist/chunk-F6WS3JLQ.mjs.map +0 -1
  48. package/dist/chunk-HP2LNKST.mjs.map +0 -1
package/dist/parsing.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  parsePlanJson
3
- } from "./chunk-BFLVOYNR.mjs";
3
+ } from "./chunk-FX33UKAD.mjs";
4
4
  import {
5
5
  PlanParseError,
6
6
  extractJsonObject,
7
7
  stripModelNoise
8
- } from "./chunk-BKTDYGIP.mjs";
9
- import "./chunk-F6WS3JLQ.mjs";
8
+ } from "./chunk-2IFKPYPO.mjs";
9
+ import "./chunk-PKJTN2PD.mjs";
10
10
 
11
11
  // src/services/PartialPlanParser.ts
12
12
  function parsePartialPlan(partial) {
@@ -1,9 +1,12 @@
1
- export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, l as ApprovalBlock, n as ApprovalStatus, s as AssignmentIssue, t as AssignmentScope, B as BlockingSubject, w as CHECKPOINT_TRUNCATE_LENGTH, E as CommandBlock, I as CommandStatus, K as CompactionBlock, L as CompactionStatus, T as ConversationInput, X as ConversationView, Z as DELEGATION_OFFERED, a1 as DiffRow, a2 as DiffRowKind, a3 as DiffStat, a4 as DisplayBlock, a5 as EMPTY_CONVERSATION, a6 as EMPTY_HOLD, a7 as EMPTY_RUN, a8 as EMPTY_TASK_LOG, a9 as EMPTY_TASK_LOG_FOLLOW, ar as GatedConversation, aw as HandoffBlock, ax as HandoffForkRepo, ay as HandoffPeekSubject, aA as IDLE_ACTIVITY, aF as IsolationPreviewNotice, aQ as LocalEntry, aR as LoopCheckFacts, aS as LoopCheckState, a_ as MarkdownToken, b2 as MessageBlock, b3 as MessageRole, b5 as NOT_STARTED, b6 as NO_TURN, b8 as NewTaskFields, bh as OutputPreview, bi as OverrideDirection, bj as PLANNED_WITH_LABEL, bn as PlanBlock, bo as PlanBlocks, bq as PlanMarkerStatus, bN as PromptHold, bO as REPORT_PREVIEW_LINES, bR as RefTask, cd as RunnerLoadedBlock, cg as STALLED_LABEL, ci as SUPERVISOR_LEVEL_LABEL, cF as SkillLoadBlock, cG as SkillToken, cK as SubagentBlock, cL as SubagentChild, cM as SubagentStatus, cW as TakenPrompt, cX as TaskAction, cY as TaskActivity, c$ as TaskLogBatch, d1 as TaskLogFollow, d2 as TaskLogFollowInput, d3 as TaskLogHeaderKind, d4 as TaskLogHeaderTask, d5 as TaskLogHeaderUsage, d6 as TaskLogHeaderView, d8 as TaskLogView, df as TaskPlacement, dj as TaskRef, dm as TaskRowAction, dn as TaskRowContext, dp as TaskRowHandoff, dq as TaskRowIsolation, dr as TaskRowKind, ds as TaskRowLoop, dt as TaskRowPlacement, du as TaskRowSubject, dv as TaskRowUsage, dw as TaskRowView, dx as TaskRunFacts, dy as TaskStatusKind, dz as ThinkingDisplayBlock, dA as ToolBlock, dB as ToolHeadline, dC as ToolStatus, dD as TreeTask, dF as TurnGate, dG as UsageBlock, dI as WAITS_FOR_APPROVAL_LABEL, dJ as WakeUpItem, dR as accountLimitPercentText, dS as accountLimitWindowLabel, dT as accountLimitsOf, dU as accountLimitsText, dV as accountLimitsTitle, dW as activityLabel, dX as aheadOfDraft, dZ as approvalKindText, d_ as approvalLabel, d$ as approvalStatusText, e0 as assignedRunnerOf, e1 as assignmentIssue, e2 as assignmentIssueText, e3 as attachingLabel, e6 as awaitingLabel, e7 as blockNotice, e8 as blockNotices, e9 as blockedByLabel, ea as blockingFailures, eb as canMergeTasks, ec as canSetDependencies, ed as canSplitTask, ee as capConflictFiles, ef as cardEditNeedsUnstarted, eg as cardEditable, ej as closeTurn, el as compactionText, em as confirmedOverride, ep as dependencyCandidates, eq as dependentsNotice, er as dependentsOf, eu as describeIsolationPreview, ev as describeMergeResult, ex as diffRows, ey as diffStat, ez as diffSummary, eB as drainNext, eC as editableWhileRunning, eE as elapsedSince, eH as followTaskLog, eI as followTurn, eJ as formatElapsed, eK as fromTranscript, eM as handoffBaseLine, eN as handoffBranchName, eO as handoffFindingsText, eP as handoffPeekParts, eQ as hasAccountLimits, eR as hasHiddenDetail, eS as hasLongReport, eU as holdLabel, eV as holdPrompt, eW as isFileEditTool, eX as isRepoGroup, eY as isTaskRunning, e_ as loadedSkillTokens, e$ as logContinues, f0 as logResumes, f1 as loopBodyLabel, f2 as loopBodyRound, f3 as loopCheckLabel, f4 as loopCheckState, f5 as loopLeaveNotice, f6 as loopRowParts, f8 as manualOverrideConfirmation, f9 as manualOverrideStopFirst, fb as markAction, fc as markdownHtml, fd as markdownTokens, fe as mergeOutcome, fg as namedRepos, fi as newTaskFields, fj as noExecutorRefusal, fm as opsEditable, fn as outputLines, fo as outputPreview, fp as overrideNeedsConfirmation, fq as parseCount, fw as pastGateConfirmation, fx as planBlocks, fy as planMarkerParts, fG as receiptLabel, fH as reconcileApprovals, fK as reduceConversation, fM as reduceTaskLog, fO as repairWaitLabel, fP as repairedLanded, fQ as repairedNotice, fR as repeatingChecks, fS as replayTaskLog, fT as repoBaseLine, fU as repoResultLines, fY as resolveTaskRef, fZ as resolveUserTaskRef, f_ as resumeLabel, f$ as resumeTime, g0 as revertEffect, g1 as revertListLine, g2 as revertTaskRef, g5 as runHoldsEditors, g7 as runnerToolSubject, ge as skillTokens, gf as skippedLabel, gg as stopTurn, gh as subtreeIds, gi as summarizeToolCall, gm as takeAt, gn as taskActionCommand, go as taskActivity, gp as taskChatAvailable, gq as taskLogCommands, gs as taskLogHeaderView, gt as taskOrderLabel, gu as taskPlacement, gw as taskRef, gx as taskRefOf, gy as taskRowActions, gz as taskRowView, gA as taskStartedNotice, gB as taskStatusKind, gE as titledRefs, gF as titledTaskRef, gG as titledTaskRefOf, gI as toolHeadline, gL as truncateCheckpointSummary, gM as unsendAll, gN as unsendLatest, gO as wakeUpItems, gP as walkPlan } from './runSettingsText-x-YML2ay.mjs';
2
- export { a as AttemptUsage, c as ContextFill, e as CostProvenance, f as DEFAULT_RUNNERS, F as FindingSeverity, o as HandoffArtifact, r as HandoffDigest, s as HandoffEvidence, t as HandoffFinding, ab as ModelUsage, ad as PatchView, ai as PlanUsage, an as PlannerUsage, aB as ReportedWindow, aL as RunnerSessionCost, aM as SEVERITY_LABEL, aP as SessionBilling, a_ as StoredHandoff, b6 as TaskLoop, be as TaskUsageSummary, bg as UsageLine, bh as UsageRecord, bi as UsageTotals, bn as addAttemptUsage, bo as addModelUsage, bp as addPlannerUsage, bq as addUsage, br as addUsageTotals, bt as betweenRounds, bx as checkOf, by as contextMeterText, bz as contextMeterTitle, bA as costText, bB as countedSessionCost, bF as endAttemptUsage, bK as formatCost, bL as formatTokenCount, bP as handoffReferenceText, bT as isMeasured, bW as loopRemovalRefusal, bX as loopRoundOf, bZ as modelCostTitle, c0 as outOfRounds, c2 as partedPromptUsage, c8 as patchView, c9 as pausedOnLimit, ca as planUsage, cb as plannerContextFill, cg as resumedSessionWindow, ci as savedPatchView, cj as savedPatchViews, ck as severityLabel, cl as startAttemptUsage, cn as subagentCostTitle, co as taskUsageSummary, cp as tasksTotalText, cq as usageLine, cr as usageText, cv as worstSeverity } from './Task-BTEH-ztX.mjs';
3
- export { bV as scriptTaskText } from './IRunner-BwzyUVIL.mjs';
4
- import './ModeResolver-b_7bPlBS.mjs';
1
+ export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, l as ApprovalBlock, n as ApprovalStatus, s as AssignmentIssue, t as AssignmentScope, B as BlockingSubject, w as CHECKPOINT_TRUNCATE_LENGTH, F as CommandBlock, J as CommandStatus, L as CompactionBlock, M as CompactionStatus, U as ConversationInput, Y as ConversationView, _ as DELEGATION_OFFERED, a2 as DiffRow, a3 as DiffRowKind, a4 as DiffStat, a5 as DisplayBlock, a6 as EMPTY_CONVERSATION, a7 as EMPTY_HOLD, a8 as EMPTY_RUN, a9 as EMPTY_TASK_LOG, aa as EMPTY_TASK_LOG_FOLLOW, ap as GatedConversation, at as HandoffBlock, au as HandoffForkRepo, av as HandoffPeekSubject, ax as IDLE_ACTIVITY, aB as IsolationPreviewNotice, aL as LocalEntry, aM as LoopCheckFacts, aN as LoopCheckState, aQ as MarkdownToken, aU as MessageBlock, aV as MessageRole, aX as NOT_STARTED, aY as NO_TURN, aZ as NewTaskFields, b6 as OutputPreview, b7 as OverrideDirection, b8 as PLANNED_WITH_LABEL, bc as PlanBlock, bd as PlanBlocks, bf as PlanMarkerStatus, bB as PromptHold, bC as REPORT_PREVIEW_LINES, bF as RefTask, c0 as RunnerLoadedBlock, c2 as STALLED_LABEL, c4 as STOPPING_LABEL, c5 as SUPERVISOR_LEVEL_LABEL, cq as SkillLoadBlock, cr as SkillToken, cw as SubagentBlock, cx as SubagentChild, cy as SubagentStatus, cB as SubtreeItemView, cC as SubtreeView, cM as TakenPrompt, cN as TaskAction, cO as TaskActivity, cR as TaskLogBatch, cT as TaskLogFollow, cU as TaskLogFollowInput, cV as TaskLogHeaderKind, cW as TaskLogHeaderTask, cX as TaskLogHeaderUsage, cY as TaskLogHeaderView, c_ as TaskLogView, d5 as TaskPlacement, d9 as TaskRef, dc as TaskRowAction, dd as TaskRowContext, de as TaskRowDelegated, df as TaskRowHandoff, dg as TaskRowIsolation, dh as TaskRowKind, di as TaskRowLoop, dj as TaskRowPlacement, dk as TaskRowSubject, dl as TaskRowUsage, dm as TaskRowView, dn as TaskRunFacts, dp as TaskStatusKind, dq as ThinkingDisplayBlock, dr as ToolBlock, ds as ToolHeadline, dt as ToolStatus, dv as TreeTask, dx as TurnGate, dy as UsageBlock, dA as WAITS_FOR_APPROVAL_LABEL, dB as WakeUpItem, dJ as accountLimitPercentText, dK as accountLimitWindowLabel, dL as accountLimitsOf, dM as accountLimitsText, dN as accountLimitsTitle, dO as activityLabel, dP as aheadOfDraft, dR as approvalKindText, dS as approvalLabel, dT as approvalStatusText, dU as assignedRunnerOf, dV as assignmentIssue, dW as assignmentIssueText, dX as attachingLabel, d_ as awaitingLabel, d$ as blockNotice, e0 as blockNotices, e1 as blockedByLabel, e2 as blockingFailures, e3 as canMergeTasks, e4 as canSetDependencies, e5 as canSplitTask, e6 as capConflictFiles, e7 as cardEditNeedsUnstarted, e8 as cardEditable, eb as closeTurn, ed as compactionText, ee as confirmedOverride, eg as delegatedRowView, ei as dependencyCandidates, ej as dependentsNotice, ek as dependentsOf, en as describeIsolationPreview, eo as describeMergeResult, eq as diffRows, er as diffStat, es as diffSummary, eu as drainNext, ev as editableWhileRunning, ew as elapsedSince, ez as followTaskLog, eA as followTurn, eB as formatElapsed, eC as fromTranscript, eE as handoffBaseLine, eF as handoffBranchName, eG as handoffFindingsText, eH as handoffPeekParts, eI as hasAccountLimits, eJ as hasHiddenDetail, eK as hasLongReport, eL as holdLabel, eM as holdPrompt, eN as isFileEditTool, eO as isRepoGroup, eP as isTaskRunning, eR as loadedSkillTokens, eS as logContinues, eT as logResumes, eU as loopBodyLabel, eV as loopBodyRound, eW as loopCheckLabel, eX as loopCheckState, eY as loopLeaveNotice, eZ as loopRowParts, e_ as manualOverrideConfirmation, e$ as manualOverrideStopFirst, f1 as markAction, f2 as markdownHtml, f3 as markdownTokens, f4 as mergeOutcome, f5 as mergePastChecksConfirmation, f7 as namedRepos, f8 as newTaskFields, f9 as noExecutorRefusal, fc as opsEditable, fd as outputLines, fe as outputPreview, ff as overrideNeedsConfirmation, fg as parseCount, fl as pastGateConfirmation, fm as planBlocks, fn as planMarkerParts, fv as receiptLabel, fw as reconcileApprovals, fz as reduceConversation, fB as reduceTaskLog, fD as repairWaitLabel, fE as repairedLanded, fF as repairedNotice, fG as repeatingChecks, fH as replayTaskLog, fI as repoBaseLine, fJ as repoResultLines, fN as resolveTaskRef, fO as resolveUserTaskRef, fP as resumeLabel, fQ as resumeTime, fR as revertEffect, fS as revertListLine, fT as revertTaskRef, fU as runHoldsEditors, fW as runnerToolSubject, g1 as skillTokens, g2 as skippedLabel, g3 as stopTurn, g4 as subtreeIds, g5 as subtreeView, g6 as summarizeToolCall, ga as takeAt, gb as taskActionCommand, gc as taskActivity, gd as taskChatAvailable, ge as taskLogCommands, gg as taskLogHeaderView, gh as taskOrderLabel, gi as taskPlacement, gk as taskRef, gl as taskRefOf, gm as taskRowActions, gn as taskRowView, go as taskStartedNotice, gp as taskStatusKind, gs as titledRefs, gt as titledTaskRef, gu as titledTaskRefOf, gw as toolHeadline, gz as truncateCheckpointSummary, gA as unsendAll, gB as unsendLatest, gC as wakeUpItems, gD as walkPlan } from './runSettingsText-DFVpe6aU.mjs';
2
+ export { a as AttemptUsage, g as ContextFill, i as CostProvenance, k as DEFAULT_RUNNERS, t as FindingSeverity, z as HandoffArtifact, K as HandoffDigest, L as HandoffEvidence, M as HandoffFinding, ar as ModelUsage, av as PatchView, aA as PlanUsage, aG as PlannerUsage, aV as ReportedWindow, b4 as RunnerSessionCost, b5 as SEVERITY_LABEL, ba as SessionBilling, bl as StoredHandoff, bv as TaskLoop, bD as TaskUsageSummary, bF as UsageLine, bG as UsageRecord, bH as UsageTotals, bM as addAttemptUsage, bN as addModelUsage, bO as addPlannerUsage, bP as addUsage, bQ as addUsageTotals, bS as betweenRounds, bW as checkOf, bZ as contextMeterText, b_ as contextMeterTitle, b$ as costText, c0 as countedSessionCost, c5 as endAttemptUsage, ca as formatCost, cb as formatTokenCount, cf as handoffReferenceText, cj as heldWords, cm as isMeasured, cp as loopRemovalRefusal, cq as loopRoundOf, ct as modelCostTitle, cy as outOfRounds, cD as partedPromptUsage, cJ as patchView, cK as pausedOnLimit, cM as planUsage, cN as plannerContextFill, cS as resumedSessionWindow, cW as savedPatchView, cX as savedPatchViews, c$ as scriptTaskText, d0 as severityLabel, d1 as spentTokens, d2 as startAttemptUsage, d4 as subagentCostTitle, d5 as taskUsageSummary, d6 as tasksTotalText, d9 as usageLine, da as usageText, de as worstSeverity } from './Task-CxGgN6I0.mjs';
3
+ import './eventStore-CcB8yELZ.mjs';
5
4
  import 'child_process';
6
5
  import 'zod/v4';
6
+ import './ModeResolver-CA2fUU9h.mjs';
7
+
8
+ /** A name or a path on a line of Ordewell's: as it stands, or quoted where it would break that line. */
9
+ declare function onOneLine(text: string): string;
7
10
 
8
11
  /**
9
12
  * The one rule for an effort and a model: the effort a task keeps on a model,
@@ -19,4 +22,4 @@ declare function clampThinkingEffort(effort: string | undefined, variants: {
19
22
  id: string;
20
23
  }[]): string | undefined;
21
24
 
22
- export { clampThinkingEffort };
25
+ export { clampThinkingEffort, onOneLine };
@@ -1,9 +1,12 @@
1
- export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, l as ApprovalBlock, n as ApprovalStatus, s as AssignmentIssue, t as AssignmentScope, B as BlockingSubject, w as CHECKPOINT_TRUNCATE_LENGTH, E as CommandBlock, I as CommandStatus, K as CompactionBlock, L as CompactionStatus, T as ConversationInput, X as ConversationView, Z as DELEGATION_OFFERED, a1 as DiffRow, a2 as DiffRowKind, a3 as DiffStat, a4 as DisplayBlock, a5 as EMPTY_CONVERSATION, a6 as EMPTY_HOLD, a7 as EMPTY_RUN, a8 as EMPTY_TASK_LOG, a9 as EMPTY_TASK_LOG_FOLLOW, ar as GatedConversation, aw as HandoffBlock, ax as HandoffForkRepo, ay as HandoffPeekSubject, aA as IDLE_ACTIVITY, aF as IsolationPreviewNotice, aQ as LocalEntry, aR as LoopCheckFacts, aS as LoopCheckState, a_ as MarkdownToken, b2 as MessageBlock, b3 as MessageRole, b5 as NOT_STARTED, b6 as NO_TURN, b8 as NewTaskFields, bh as OutputPreview, bi as OverrideDirection, bj as PLANNED_WITH_LABEL, bn as PlanBlock, bo as PlanBlocks, bq as PlanMarkerStatus, bN as PromptHold, bO as REPORT_PREVIEW_LINES, bR as RefTask, cd as RunnerLoadedBlock, cg as STALLED_LABEL, ci as SUPERVISOR_LEVEL_LABEL, cF as SkillLoadBlock, cG as SkillToken, cK as SubagentBlock, cL as SubagentChild, cM as SubagentStatus, cW as TakenPrompt, cX as TaskAction, cY as TaskActivity, c$ as TaskLogBatch, d1 as TaskLogFollow, d2 as TaskLogFollowInput, d3 as TaskLogHeaderKind, d4 as TaskLogHeaderTask, d5 as TaskLogHeaderUsage, d6 as TaskLogHeaderView, d8 as TaskLogView, df as TaskPlacement, dj as TaskRef, dm as TaskRowAction, dn as TaskRowContext, dp as TaskRowHandoff, dq as TaskRowIsolation, dr as TaskRowKind, ds as TaskRowLoop, dt as TaskRowPlacement, du as TaskRowSubject, dv as TaskRowUsage, dw as TaskRowView, dx as TaskRunFacts, dy as TaskStatusKind, dz as ThinkingDisplayBlock, dA as ToolBlock, dB as ToolHeadline, dC as ToolStatus, dD as TreeTask, dF as TurnGate, dG as UsageBlock, dI as WAITS_FOR_APPROVAL_LABEL, dJ as WakeUpItem, dR as accountLimitPercentText, dS as accountLimitWindowLabel, dT as accountLimitsOf, dU as accountLimitsText, dV as accountLimitsTitle, dW as activityLabel, dX as aheadOfDraft, dZ as approvalKindText, d_ as approvalLabel, d$ as approvalStatusText, e0 as assignedRunnerOf, e1 as assignmentIssue, e2 as assignmentIssueText, e3 as attachingLabel, e6 as awaitingLabel, e7 as blockNotice, e8 as blockNotices, e9 as blockedByLabel, ea as blockingFailures, eb as canMergeTasks, ec as canSetDependencies, ed as canSplitTask, ee as capConflictFiles, ef as cardEditNeedsUnstarted, eg as cardEditable, ej as closeTurn, el as compactionText, em as confirmedOverride, ep as dependencyCandidates, eq as dependentsNotice, er as dependentsOf, eu as describeIsolationPreview, ev as describeMergeResult, ex as diffRows, ey as diffStat, ez as diffSummary, eB as drainNext, eC as editableWhileRunning, eE as elapsedSince, eH as followTaskLog, eI as followTurn, eJ as formatElapsed, eK as fromTranscript, eM as handoffBaseLine, eN as handoffBranchName, eO as handoffFindingsText, eP as handoffPeekParts, eQ as hasAccountLimits, eR as hasHiddenDetail, eS as hasLongReport, eU as holdLabel, eV as holdPrompt, eW as isFileEditTool, eX as isRepoGroup, eY as isTaskRunning, e_ as loadedSkillTokens, e$ as logContinues, f0 as logResumes, f1 as loopBodyLabel, f2 as loopBodyRound, f3 as loopCheckLabel, f4 as loopCheckState, f5 as loopLeaveNotice, f6 as loopRowParts, f8 as manualOverrideConfirmation, f9 as manualOverrideStopFirst, fb as markAction, fc as markdownHtml, fd as markdownTokens, fe as mergeOutcome, fg as namedRepos, fi as newTaskFields, fj as noExecutorRefusal, fm as opsEditable, fn as outputLines, fo as outputPreview, fp as overrideNeedsConfirmation, fq as parseCount, fw as pastGateConfirmation, fx as planBlocks, fy as planMarkerParts, fG as receiptLabel, fH as reconcileApprovals, fK as reduceConversation, fM as reduceTaskLog, fO as repairWaitLabel, fP as repairedLanded, fQ as repairedNotice, fR as repeatingChecks, fS as replayTaskLog, fT as repoBaseLine, fU as repoResultLines, fY as resolveTaskRef, fZ as resolveUserTaskRef, f_ as resumeLabel, f$ as resumeTime, g0 as revertEffect, g1 as revertListLine, g2 as revertTaskRef, g5 as runHoldsEditors, g7 as runnerToolSubject, ge as skillTokens, gf as skippedLabel, gg as stopTurn, gh as subtreeIds, gi as summarizeToolCall, gm as takeAt, gn as taskActionCommand, go as taskActivity, gp as taskChatAvailable, gq as taskLogCommands, gs as taskLogHeaderView, gt as taskOrderLabel, gu as taskPlacement, gw as taskRef, gx as taskRefOf, gy as taskRowActions, gz as taskRowView, gA as taskStartedNotice, gB as taskStatusKind, gE as titledRefs, gF as titledTaskRef, gG as titledTaskRefOf, gI as toolHeadline, gL as truncateCheckpointSummary, gM as unsendAll, gN as unsendLatest, gO as wakeUpItems, gP as walkPlan } from './runSettingsText-CvZ40IPv.js';
2
- export { a as AttemptUsage, c as ContextFill, e as CostProvenance, f as DEFAULT_RUNNERS, F as FindingSeverity, o as HandoffArtifact, r as HandoffDigest, s as HandoffEvidence, t as HandoffFinding, ab as ModelUsage, ad as PatchView, ai as PlanUsage, an as PlannerUsage, aB as ReportedWindow, aL as RunnerSessionCost, aM as SEVERITY_LABEL, aP as SessionBilling, a_ as StoredHandoff, b6 as TaskLoop, be as TaskUsageSummary, bg as UsageLine, bh as UsageRecord, bi as UsageTotals, bn as addAttemptUsage, bo as addModelUsage, bp as addPlannerUsage, bq as addUsage, br as addUsageTotals, bt as betweenRounds, bx as checkOf, by as contextMeterText, bz as contextMeterTitle, bA as costText, bB as countedSessionCost, bF as endAttemptUsage, bK as formatCost, bL as formatTokenCount, bP as handoffReferenceText, bT as isMeasured, bW as loopRemovalRefusal, bX as loopRoundOf, bZ as modelCostTitle, c0 as outOfRounds, c2 as partedPromptUsage, c8 as patchView, c9 as pausedOnLimit, ca as planUsage, cb as plannerContextFill, cg as resumedSessionWindow, ci as savedPatchView, cj as savedPatchViews, ck as severityLabel, cl as startAttemptUsage, cn as subagentCostTitle, co as taskUsageSummary, cp as tasksTotalText, cq as usageLine, cr as usageText, cv as worstSeverity } from './Task-BTEH-ztX.js';
3
- export { bV as scriptTaskText } from './IRunner-DjJkYwko.js';
4
- import './ModeResolver-CHsaoV7M.js';
1
+ export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, l as ApprovalBlock, n as ApprovalStatus, s as AssignmentIssue, t as AssignmentScope, B as BlockingSubject, w as CHECKPOINT_TRUNCATE_LENGTH, F as CommandBlock, J as CommandStatus, L as CompactionBlock, M as CompactionStatus, U as ConversationInput, Y as ConversationView, _ as DELEGATION_OFFERED, a2 as DiffRow, a3 as DiffRowKind, a4 as DiffStat, a5 as DisplayBlock, a6 as EMPTY_CONVERSATION, a7 as EMPTY_HOLD, a8 as EMPTY_RUN, a9 as EMPTY_TASK_LOG, aa as EMPTY_TASK_LOG_FOLLOW, ap as GatedConversation, at as HandoffBlock, au as HandoffForkRepo, av as HandoffPeekSubject, ax as IDLE_ACTIVITY, aB as IsolationPreviewNotice, aL as LocalEntry, aM as LoopCheckFacts, aN as LoopCheckState, aQ as MarkdownToken, aU as MessageBlock, aV as MessageRole, aX as NOT_STARTED, aY as NO_TURN, aZ as NewTaskFields, b6 as OutputPreview, b7 as OverrideDirection, b8 as PLANNED_WITH_LABEL, bc as PlanBlock, bd as PlanBlocks, bf as PlanMarkerStatus, bB as PromptHold, bC as REPORT_PREVIEW_LINES, bF as RefTask, c0 as RunnerLoadedBlock, c2 as STALLED_LABEL, c4 as STOPPING_LABEL, c5 as SUPERVISOR_LEVEL_LABEL, cq as SkillLoadBlock, cr as SkillToken, cw as SubagentBlock, cx as SubagentChild, cy as SubagentStatus, cB as SubtreeItemView, cC as SubtreeView, cM as TakenPrompt, cN as TaskAction, cO as TaskActivity, cR as TaskLogBatch, cT as TaskLogFollow, cU as TaskLogFollowInput, cV as TaskLogHeaderKind, cW as TaskLogHeaderTask, cX as TaskLogHeaderUsage, cY as TaskLogHeaderView, c_ as TaskLogView, d5 as TaskPlacement, d9 as TaskRef, dc as TaskRowAction, dd as TaskRowContext, de as TaskRowDelegated, df as TaskRowHandoff, dg as TaskRowIsolation, dh as TaskRowKind, di as TaskRowLoop, dj as TaskRowPlacement, dk as TaskRowSubject, dl as TaskRowUsage, dm as TaskRowView, dn as TaskRunFacts, dp as TaskStatusKind, dq as ThinkingDisplayBlock, dr as ToolBlock, ds as ToolHeadline, dt as ToolStatus, dv as TreeTask, dx as TurnGate, dy as UsageBlock, dA as WAITS_FOR_APPROVAL_LABEL, dB as WakeUpItem, dJ as accountLimitPercentText, dK as accountLimitWindowLabel, dL as accountLimitsOf, dM as accountLimitsText, dN as accountLimitsTitle, dO as activityLabel, dP as aheadOfDraft, dR as approvalKindText, dS as approvalLabel, dT as approvalStatusText, dU as assignedRunnerOf, dV as assignmentIssue, dW as assignmentIssueText, dX as attachingLabel, d_ as awaitingLabel, d$ as blockNotice, e0 as blockNotices, e1 as blockedByLabel, e2 as blockingFailures, e3 as canMergeTasks, e4 as canSetDependencies, e5 as canSplitTask, e6 as capConflictFiles, e7 as cardEditNeedsUnstarted, e8 as cardEditable, eb as closeTurn, ed as compactionText, ee as confirmedOverride, eg as delegatedRowView, ei as dependencyCandidates, ej as dependentsNotice, ek as dependentsOf, en as describeIsolationPreview, eo as describeMergeResult, eq as diffRows, er as diffStat, es as diffSummary, eu as drainNext, ev as editableWhileRunning, ew as elapsedSince, ez as followTaskLog, eA as followTurn, eB as formatElapsed, eC as fromTranscript, eE as handoffBaseLine, eF as handoffBranchName, eG as handoffFindingsText, eH as handoffPeekParts, eI as hasAccountLimits, eJ as hasHiddenDetail, eK as hasLongReport, eL as holdLabel, eM as holdPrompt, eN as isFileEditTool, eO as isRepoGroup, eP as isTaskRunning, eR as loadedSkillTokens, eS as logContinues, eT as logResumes, eU as loopBodyLabel, eV as loopBodyRound, eW as loopCheckLabel, eX as loopCheckState, eY as loopLeaveNotice, eZ as loopRowParts, e_ as manualOverrideConfirmation, e$ as manualOverrideStopFirst, f1 as markAction, f2 as markdownHtml, f3 as markdownTokens, f4 as mergeOutcome, f5 as mergePastChecksConfirmation, f7 as namedRepos, f8 as newTaskFields, f9 as noExecutorRefusal, fc as opsEditable, fd as outputLines, fe as outputPreview, ff as overrideNeedsConfirmation, fg as parseCount, fl as pastGateConfirmation, fm as planBlocks, fn as planMarkerParts, fv as receiptLabel, fw as reconcileApprovals, fz as reduceConversation, fB as reduceTaskLog, fD as repairWaitLabel, fE as repairedLanded, fF as repairedNotice, fG as repeatingChecks, fH as replayTaskLog, fI as repoBaseLine, fJ as repoResultLines, fN as resolveTaskRef, fO as resolveUserTaskRef, fP as resumeLabel, fQ as resumeTime, fR as revertEffect, fS as revertListLine, fT as revertTaskRef, fU as runHoldsEditors, fW as runnerToolSubject, g1 as skillTokens, g2 as skippedLabel, g3 as stopTurn, g4 as subtreeIds, g5 as subtreeView, g6 as summarizeToolCall, ga as takeAt, gb as taskActionCommand, gc as taskActivity, gd as taskChatAvailable, ge as taskLogCommands, gg as taskLogHeaderView, gh as taskOrderLabel, gi as taskPlacement, gk as taskRef, gl as taskRefOf, gm as taskRowActions, gn as taskRowView, go as taskStartedNotice, gp as taskStatusKind, gs as titledRefs, gt as titledTaskRef, gu as titledTaskRefOf, gw as toolHeadline, gz as truncateCheckpointSummary, gA as unsendAll, gB as unsendLatest, gC as wakeUpItems, gD as walkPlan } from './runSettingsText-lKLDsyli.js';
2
+ export { a as AttemptUsage, g as ContextFill, i as CostProvenance, k as DEFAULT_RUNNERS, t as FindingSeverity, z as HandoffArtifact, K as HandoffDigest, L as HandoffEvidence, M as HandoffFinding, ar as ModelUsage, av as PatchView, aA as PlanUsage, aG as PlannerUsage, aV as ReportedWindow, b4 as RunnerSessionCost, b5 as SEVERITY_LABEL, ba as SessionBilling, bl as StoredHandoff, bv as TaskLoop, bD as TaskUsageSummary, bF as UsageLine, bG as UsageRecord, bH as UsageTotals, bM as addAttemptUsage, bN as addModelUsage, bO as addPlannerUsage, bP as addUsage, bQ as addUsageTotals, bS as betweenRounds, bW as checkOf, bZ as contextMeterText, b_ as contextMeterTitle, b$ as costText, c0 as countedSessionCost, c5 as endAttemptUsage, ca as formatCost, cb as formatTokenCount, cf as handoffReferenceText, cj as heldWords, cm as isMeasured, cp as loopRemovalRefusal, cq as loopRoundOf, ct as modelCostTitle, cy as outOfRounds, cD as partedPromptUsage, cJ as patchView, cK as pausedOnLimit, cM as planUsage, cN as plannerContextFill, cS as resumedSessionWindow, cW as savedPatchView, cX as savedPatchViews, c$ as scriptTaskText, d0 as severityLabel, d1 as spentTokens, d2 as startAttemptUsage, d4 as subagentCostTitle, d5 as taskUsageSummary, d6 as tasksTotalText, d9 as usageLine, da as usageText, de as worstSeverity } from './Task-CxGgN6I0.js';
3
+ import './eventStore-CTCSKS9E.js';
5
4
  import 'child_process';
6
5
  import 'zod/v4';
6
+ import './ModeResolver-B64aUZXJ.js';
7
+
8
+ /** A name or a path on a line of Ordewell's: as it stands, or quoted where it would break that line. */
9
+ declare function onOneLine(text: string): string;
7
10
 
8
11
  /**
9
12
  * The one rule for an effort and a model: the effort a task keeps on a model,
@@ -19,4 +22,4 @@ declare function clampThinkingEffort(effort: string | undefined, variants: {
19
22
  id: string;
20
23
  }[]): string | undefined;
21
24
 
22
- export { clampThinkingEffort };
25
+ export { clampThinkingEffort, onOneLine };
@@ -45,6 +45,7 @@ __export(plan_utils_exports, {
45
45
  REPORT_PREVIEW_LINES: () => REPORT_PREVIEW_LINES,
46
46
  SEVERITY_LABEL: () => SEVERITY_LABEL,
47
47
  STALLED_LABEL: () => STALLED_LABEL,
48
+ STOPPING_LABEL: () => STOPPING_LABEL,
48
49
  SUPERVISOR_LEVEL_LABEL: () => SUPERVISOR_LEVEL_LABEL,
49
50
  WAITS_FOR_APPROVAL_LABEL: () => WAITS_FOR_APPROVAL_LABEL,
50
51
  accountLimitPercentText: () => accountLimitPercentText,
@@ -87,6 +88,7 @@ __export(plan_utils_exports, {
87
88
  contextMeterTitle: () => contextMeterTitle,
88
89
  costText: () => costText,
89
90
  countedSessionCost: () => countedSessionCost,
91
+ delegatedRowView: () => delegatedRowView,
90
92
  dependencyCandidates: () => dependencyCandidates,
91
93
  dependentsNotice: () => dependentsNotice,
92
94
  dependentsOf: () => dependentsOf,
@@ -113,6 +115,7 @@ __export(plan_utils_exports, {
113
115
  hasAccountLimits: () => hasAccountLimits,
114
116
  hasHiddenDetail: () => hasHiddenDetail,
115
117
  hasLongReport: () => hasLongReport,
118
+ heldWords: () => heldWords,
116
119
  holdLabel: () => holdLabel,
117
120
  holdPrompt: () => holdPrompt,
118
121
  isFileEditTool: () => isFileEditTool,
@@ -136,10 +139,12 @@ __export(plan_utils_exports, {
136
139
  markdownHtml: () => markdownHtml,
137
140
  markdownTokens: () => markdownTokens,
138
141
  mergeOutcome: () => mergeOutcome,
142
+ mergePastChecksConfirmation: () => mergePastChecksConfirmation,
139
143
  modelCostTitle: () => modelCostTitle,
140
144
  namedRepos: () => namedRepos,
141
145
  newTaskFields: () => newTaskFields,
142
146
  noExecutorRefusal: () => noExecutorRefusal,
147
+ onOneLine: () => onOneLine,
143
148
  opsEditable: () => opsEditable,
144
149
  outOfRounds: () => outOfRounds,
145
150
  outputLines: () => outputLines,
@@ -181,10 +186,12 @@ __export(plan_utils_exports, {
181
186
  severityLabel: () => severityLabel,
182
187
  skillTokens: () => skillTokens,
183
188
  skippedLabel: () => skippedLabel,
189
+ spentTokens: () => spentTokens,
184
190
  startAttemptUsage: () => startAttemptUsage,
185
191
  stopTurn: () => stopTurn,
186
192
  subagentCostTitle: () => subagentCostTitle,
187
193
  subtreeIds: () => subtreeIds,
194
+ subtreeView: () => subtreeView,
188
195
  summarizeToolCall: () => summarizeToolCall,
189
196
  takeAt: () => takeAt,
190
197
  taskActionCommand: () => taskActionCommand,
@@ -405,6 +412,7 @@ var STALLED_LABEL = "Stalled";
405
412
  var AWAITING_LABELS = {
406
413
  input: "Waiting for your input",
407
414
  checkpoint: "Checkpoint",
415
+ "question-lost": "Question lost in a restart",
408
416
  conflict: "Merge conflict",
409
417
  "files-changed": "Changed tracked files",
410
418
  "usage-limit": "Paused on a usage limit"
@@ -589,10 +597,25 @@ function loopRemovalRefusal(task) {
589
597
  return task.loop ? `"${task.title}" is a loop's check: remove its body tasks first, or drop its loop ("loop": null), so they do not run on their own` : null;
590
598
  }
591
599
  function loopReshapeRefusal(tasks, target, action) {
600
+ if (target.type === "delegated") return `"${target.title}" is a delegated task and cannot be ${action}: remove it and add what should replace it`;
592
601
  if (target.loop) return `"${target.title}" is a loop's check and cannot be ${action}: drop its loop first ("loop": null)`;
593
602
  return checkOf(tasks, target.id) ? `"${target.title}" is in a loop's body and cannot be ${action}: take it out of the loop first` : null;
594
603
  }
595
604
 
605
+ // src/models/lineBreaks.ts
606
+ var BREAKS = "\\n\\v\\f\\r\\u0085\\u2028\\u2029";
607
+ var LINE_BREAK = new RegExp(`\\r\\n|[${BREAKS}]`);
608
+ var ONE_LINE = new RegExp(`^[^${BREAKS}]*$`);
609
+ function splitLines(text2) {
610
+ return text2.split(LINE_BREAK);
611
+ }
612
+ function quotedLine(text2) {
613
+ return JSON.stringify(text2).replace(/[\u0085\u2028\u2029]/g, (char) => `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`);
614
+ }
615
+ function onOneLine(text2) {
616
+ return ONE_LINE.test(text2) ? text2 : quotedLine(text2);
617
+ }
618
+
596
619
  // src/services/PlannedTask.ts
597
620
  function findCycle(tasks) {
598
621
  return findDependencyCycle(tasks);
@@ -1043,7 +1066,8 @@ function truncateCheckpointSummary(summary) {
1043
1066
 
1044
1067
  // src/services/conflictFiles.ts
1045
1068
  function capConflictFiles(files, max = 5) {
1046
- return files.length <= max ? files.join(", ") : `${files.slice(0, max).join(", ")}, +${files.length - max} more`;
1069
+ const named = files.map(onOneLine);
1070
+ return named.length <= max ? named.join(", ") : `${named.slice(0, max).join(", ")}, +${named.length - max} more`;
1047
1071
  }
1048
1072
 
1049
1073
  // src/services/mergeResultNotice.ts
@@ -1191,11 +1215,33 @@ function handoffBaseLine(handoff, length) {
1191
1215
  function repoResultLines(handoff) {
1192
1216
  return handoff.repos.map(({ path, landed }) => `${path}: ${landed.length === 0 ? "nothing to merge" : `${landed.length} task${landed.length === 1 ? "" : "s"} landed`}`);
1193
1217
  }
1218
+ function mergePastChecksConfirmation(checks) {
1219
+ return `This merges work no check has passed: ${checks.join(", ")} ${checks.length === 1 ? "has" : "have"} not.`;
1220
+ }
1194
1221
 
1195
1222
  // src/services/runSettingsText.ts
1196
1223
  var SUPERVISOR_LEVEL_LABEL = { off: "Off", watch: "Watch", act: "Act" };
1197
1224
  var PLANNED_WITH_LABEL = "Planned-with line in commits Ordewell writes";
1198
- var DELEGATION_OFFERED = false;
1225
+ var DELEGATION_ENV = "ORDEWELL_DELEGATION";
1226
+ function delegationSwitchedOn({ env, moduleDir, exists }) {
1227
+ if (env !== "1" || moduleDir === null) return false;
1228
+ const parts = moduleDir.split(/[\\/]/);
1229
+ if (parts.includes("node_modules")) return false;
1230
+ const packages = parts.lastIndexOf("packages");
1231
+ if (packages < 1) return false;
1232
+ const root = parts.slice(0, packages).join("/");
1233
+ return exists(`${root}/.git`) && exists(`${root}/packages/core/package.json`);
1234
+ }
1235
+ function placeHere(variable) {
1236
+ const fs = typeof process === "undefined" ? void 0 : process.getBuiltinModule?.("fs");
1237
+ if (!fs) return { env: void 0, moduleDir: null, exists: () => false };
1238
+ const file = typeof __filename !== "undefined" ? __filename : new URL(
1239
+ // @ts-expect-error - import.meta is only valid under an ESM module setting; see builtinSkills.ts
1240
+ __filename
1241
+ ).pathname;
1242
+ return { env: process.env[variable], moduleDir: file.replace(/[\\/][^\\/]*$/, ""), exists: (path) => fs.existsSync(path) };
1243
+ }
1244
+ var DELEGATION_OFFERED = delegationSwitchedOn(placeHere(DELEGATION_ENV));
1199
1245
  function parseCount(arg, min) {
1200
1246
  if (arg === void 0 || !/^\d+$/.test(arg)) return null;
1201
1247
  const n = Number(arg);
@@ -1204,18 +1250,21 @@ function parseCount(arg, min) {
1204
1250
 
1205
1251
  // src/models/Usage.ts
1206
1252
  function partedPromptUsage(parts) {
1207
- const reported = [parts.uncached, parts.cacheRead, parts.cacheWrite].filter((n) => n !== void 0);
1253
+ const reported2 = [parts.uncached, parts.cacheRead, parts.cacheWrite].filter((n) => n !== void 0);
1208
1254
  return {
1209
- ...reported.length > 0 ? { inputTokens: reported.reduce((a, b) => a + b, 0) } : {},
1255
+ ...reported2.length > 0 ? { inputTokens: reported2.reduce((a, b) => a + b, 0) } : {},
1210
1256
  ...parts.cacheRead !== void 0 ? { cachedInputTokens: parts.cacheRead } : {}
1211
1257
  };
1212
1258
  }
1213
1259
  var TOKEN_FIELDS = ["inputTokens", "outputTokens", "cachedInputTokens"];
1260
+ function spentTokens({ inputTokens, outputTokens }) {
1261
+ return (inputTokens ?? 0) + (outputTokens ?? 0);
1262
+ }
1214
1263
  function addUsage(totals, record) {
1215
1264
  const next = { ...totals };
1216
1265
  for (const field of TOKEN_FIELDS) {
1217
- const reported = record[field];
1218
- if (reported !== void 0) next[field] = (totals[field] ?? 0) + reported;
1266
+ const reported2 = record[field];
1267
+ if (reported2 !== void 0) next[field] = (totals[field] ?? 0) + reported2;
1219
1268
  }
1220
1269
  if (record.reportedCost) {
1221
1270
  const { amount, currency } = record.reportedCost;
@@ -1359,7 +1408,7 @@ function planUsage(tasks) {
1359
1408
  function taskUsageSummary(task) {
1360
1409
  const attempts = task.attemptUsage ?? [];
1361
1410
  const latest = attempts.at(-1);
1362
- const contextFill = latest ? plannerContextFill(latest) : void 0;
1411
+ const contextFill = latest && task.type !== "delegated" ? plannerContextFill(latest) : void 0;
1363
1412
  return {
1364
1413
  totals: attempts.reduce((sum, attempt) => addUsageTotals(sum, attempt.totals), {}),
1365
1414
  attempts: attempts.length,
@@ -2471,19 +2520,23 @@ function worstSeverity(findings) {
2471
2520
  }
2472
2521
  return worst;
2473
2522
  }
2523
+ var ROOT_NODE = "root";
2524
+ function nodeText(node) {
2525
+ return node.startsWith(`${ROOT_NODE}/`) ? node.slice(ROOT_NODE.length + 1) : node;
2526
+ }
2474
2527
  function findingRefText(task, ref) {
2475
2528
  return `${task}${ref.attempt !== void 0 ? `@${ref.attempt}` : ""}${ref.finding ? `/${ref.finding}` : ""}`;
2476
2529
  }
2477
2530
  function handoffReferenceText(ref, taskName = () => void 0) {
2478
2531
  switch (ref.kind) {
2479
2532
  case "file":
2480
- return `${ref.line !== void 0 ? `${ref.path}:${ref.line}` : ref.path}${ref.resolved === true ? "" : " (unresolved)"}`;
2533
+ return `${onOneLine(ref.line !== void 0 ? `${ref.path}:${ref.line}` : ref.path)}${ref.resolved === true ? "" : " (unresolved)"}`;
2481
2534
  case "commit":
2482
- return `commit ${ref.sha}${ref.repo ? ` in ${ref.repo}` : ""}${ref.resolved === true ? "" : " (unresolved)"}`;
2535
+ return `commit ${ref.sha}${ref.repo ? ` in ${onOneLine(ref.repo)}` : ""}${ref.resolved === true ? "" : " (unresolved)"}`;
2483
2536
  case "task":
2484
- return findingRefText(taskName(ref.task) ?? ref.task, ref);
2537
+ return onOneLine(findingRefText(ref.label !== void 0 ? `${nodeText(ref.node ?? ROOT_NODE)}:${ref.label}` : taskName(ref.task) ?? ref.task, ref));
2485
2538
  case "url":
2486
- return ref.url;
2539
+ return onOneLine(ref.url);
2487
2540
  case "patch":
2488
2541
  return patchText(ref);
2489
2542
  }
@@ -2503,7 +2556,7 @@ function byteSize(bytes) {
2503
2556
  }
2504
2557
  function patchFlagText(flag) {
2505
2558
  const more = flag.count - flag.paths.length;
2506
- return `${FLAG_WORDS[flag.kind]}: ${counted(flag.count, "file")}${flag.paths.length ? ` (${flag.paths.join(", ")}${more > 0 ? `, +${more} more` : ""})` : ""}`;
2559
+ return `${FLAG_WORDS[flag.kind]}: ${counted(flag.count, "file")}${flag.paths.length ? ` (${flag.paths.map(onOneLine).join(", ")}${more > 0 ? `, +${more} more` : ""})` : ""}`;
2507
2560
  }
2508
2561
  function patchChangesText(patch) {
2509
2562
  const binary = patch.binary > 0 ? `, ${patch.binary} binary` : "";
@@ -2534,6 +2587,9 @@ function savedPatchViews(handoff) {
2534
2587
  function savedPatchView(handoff) {
2535
2588
  return savedPatchViews(handoff)[0] ?? null;
2536
2589
  }
2590
+ function heldWords(text2) {
2591
+ return splitLines(text2).map((line) => line ? ` ${line}` : line);
2592
+ }
2537
2593
 
2538
2594
  // src/conversation/labels.ts
2539
2595
  var APPROVAL_KIND_TEXT = {
@@ -2905,11 +2961,11 @@ function opsEditable(task) {
2905
2961
 
2906
2962
  // src/services/AssignmentScope.ts
2907
2963
  function assignedRunnerOf(task) {
2908
- return task.type === "ai" ? task.assignedRunner || void 0 : void 0;
2964
+ return task.type === "ai" || task.type === "delegated" ? task.assignedRunner || void 0 : void 0;
2909
2965
  }
2910
2966
  var OVER = /* @__PURE__ */ new Set(["completed", "skipped"]);
2911
2967
  function assignmentIssue(task, scope) {
2912
- if (task.type !== "ai" || OVER.has(task.status)) return null;
2968
+ if (task.type !== "ai" && task.type !== "delegated" || OVER.has(task.status)) return null;
2913
2969
  if (!scope.enabledRunners.includes(task.assignedRunner)) return { kind: "runner-off", runner: task.assignedRunner };
2914
2970
  const model = task.assignedModel;
2915
2971
  const allowed = effectiveAllowlist(scope.allowlist[task.assignedRunner], task.assignedRunner, scope.models);
@@ -2931,6 +2987,54 @@ function assignmentConsequence({ status, awaitingReason, resumeAt }) {
2931
2987
  return "runs as assigned unless moved";
2932
2988
  }
2933
2989
 
2990
+ // src/taskRow/delegated.ts
2991
+ var STOPPING_LABEL = "Stopping: its child plan is still winding down.";
2992
+ function countsText({ completed, running, waiting, pending, failed, skipped }) {
2993
+ const total = completed + running + waiting + pending + failed + skipped;
2994
+ const said = [[running, "running"], [waiting, "waiting"], [failed, "failed"], [skipped, "skipped"]];
2995
+ return [`${completed} of ${total} done`, ...said.filter(([n]) => n > 0).map(([n, word]) => `${n} ${word}`)].join(", ");
2996
+ }
2997
+ function reported(handoff) {
2998
+ const counts = handoff?.subtree?.counts;
2999
+ return counts && { completed: counts.done, running: 0, waiting: 0, pending: counts.blocked, failed: counts.failed, skipped: counts.skipped };
3000
+ }
3001
+ function delegatedRowView(task) {
3002
+ if (task.type !== "delegated") return null;
3003
+ const { delegation } = task;
3004
+ const counts = delegation?.tasks ?? reported(task.handoff);
3005
+ return {
3006
+ goal: task.goal?.trim() || null,
3007
+ tokens: delegation?.tokens ? `${formatTokenCount(delegation.tokens.left)} of ${formatTokenCount(delegation.tokens.budget)} tokens left` : null,
3008
+ counts: counts ? countsText(counts) : null,
3009
+ stopping: delegation?.stopping ? STOPPING_LABEL : null
3010
+ };
3011
+ }
3012
+ var SEVERITIES = ["blocker", "major", "minor", "info"];
3013
+ function itemView({ ref, finding }) {
3014
+ return {
3015
+ reference: ref ? handoffReferenceText(ref) : null,
3016
+ heading: `${finding.id} \xB7 ${severityLabel(finding.severity)} \xB7 ${onOneLine(finding.title)}`,
3017
+ ...finding.detail ? { detail: finding.detail } : {}
3018
+ };
3019
+ }
3020
+ function subtreeView(subtree) {
3021
+ const { counts, findings, outsideScope } = subtree;
3022
+ const ran = [["done", counts.done], ["failed", counts.failed], ["blocked", counts.blocked], ["skipped", counts.skipped]].filter(([, n]) => n > 0).map(([word, n]) => `${n} ${word}`).join(", ");
3023
+ const found = SEVERITIES.filter((severity) => findings[severity] > 0).map((severity) => `${findings[severity]} ${severity}`).join(", ");
3024
+ const summary = [
3025
+ ran || "nothing ran",
3026
+ ...counts.commits > 0 ? [`${counts.commits} commit${counts.commits === 1 ? "" : "s"}`] : [],
3027
+ `${formatTokenCount(counts.tokens)} tokens`,
3028
+ found ? `${found} finding${SEVERITIES.reduce((n, s) => n + findings[s], 0) === 1 ? "" : "s"} below` : "no findings below"
3029
+ ].join(" \xB7 ");
3030
+ return {
3031
+ summary,
3032
+ outsideScope: outsideScope && outsideScope.count > 0 ? `Changed outside its declared scope: ${outsideScope.paths.map(onOneLine).join(", ")}${outsideScope.count > outsideScope.paths.length ? ` (+${outsideScope.count - outsideScope.paths.length} more)` : ""}` : null,
3033
+ open: subtree.open.map(itemView),
3034
+ promoted: subtree.promoted.map(itemView)
3035
+ };
3036
+ }
3037
+
2934
3038
  // src/taskRow/loop.ts
2935
3039
  function loopCheckState(check, goesOn) {
2936
3040
  switch (check.status) {
@@ -3051,9 +3155,10 @@ function taskRowView(task, context = {}) {
3051
3155
  const blocked = blockedBy(task, reading);
3052
3156
  const loop = loopOf(task, reading);
3053
3157
  return {
3158
+ delegated: delegatedRowView(task),
3054
3159
  usage: latestAttempt ? { totals: spend.totals, ...spend.contextFill ? { contextFill: spend.contextFill } : {}, attempt: latestAttempt.attempt } : task.type === "ai" && ["completed", "failed", "in_progress", "awaiting_user"].includes(task.status) ? { totals: {}, attempt: 0 } : null,
3055
3160
  orderLabel: taskOrderLabel(task, parent),
3056
- kind: task.type === "user" ? "user" : task.type === "script" ? "script" : task.ops ? "ops" : "ai",
3161
+ kind: task.type === "user" ? "user" : task.type === "script" ? "script" : task.type === "delegated" ? "delegated" : task.ops ? "ops" : "ai",
3057
3162
  // Between rounds a check waits for its fix as a task waits for its dependencies, and is no failure (ADR-0045 L3).
3058
3163
  status: blocked.length > 0 ? "blocked" : loop?.role === "check" && loop.state === "repeating" ? "todo" : taskStatusKind(task),
3059
3164
  running: isTaskRunning(task),
@@ -3160,7 +3265,8 @@ function taskLogCommands(view) {
3160
3265
  }
3161
3266
  function logContinues(task) {
3162
3267
  const finished = task.status === "completed" || task.status === "failed" || task.status === "skipped";
3163
- return task.continuable === true && (finished || task.status === "awaiting_user" && task.awaitingReason === "usage-limit");
3268
+ const childLeft = task.type === "delegated" && (task.status === "pending" || task.awaitingReason === "question-lost");
3269
+ return task.continuable === true && (finished || childLeft || task.status === "awaiting_user" && task.awaitingReason === "usage-limit");
3164
3270
  }
3165
3271
  function logResumes(task) {
3166
3272
  return task.continuable === true && task.status === "awaiting_user" && task.awaitingReason === "usage-limit";
@@ -3287,6 +3393,7 @@ function accountLimitsTitle(snapshot, time) {
3287
3393
  REPORT_PREVIEW_LINES,
3288
3394
  SEVERITY_LABEL,
3289
3395
  STALLED_LABEL,
3396
+ STOPPING_LABEL,
3290
3397
  SUPERVISOR_LEVEL_LABEL,
3291
3398
  WAITS_FOR_APPROVAL_LABEL,
3292
3399
  accountLimitPercentText,
@@ -3329,6 +3436,7 @@ function accountLimitsTitle(snapshot, time) {
3329
3436
  contextMeterTitle,
3330
3437
  costText,
3331
3438
  countedSessionCost,
3439
+ delegatedRowView,
3332
3440
  dependencyCandidates,
3333
3441
  dependentsNotice,
3334
3442
  dependentsOf,
@@ -3355,6 +3463,7 @@ function accountLimitsTitle(snapshot, time) {
3355
3463
  hasAccountLimits,
3356
3464
  hasHiddenDetail,
3357
3465
  hasLongReport,
3466
+ heldWords,
3358
3467
  holdLabel,
3359
3468
  holdPrompt,
3360
3469
  isFileEditTool,
@@ -3378,10 +3487,12 @@ function accountLimitsTitle(snapshot, time) {
3378
3487
  markdownHtml,
3379
3488
  markdownTokens,
3380
3489
  mergeOutcome,
3490
+ mergePastChecksConfirmation,
3381
3491
  modelCostTitle,
3382
3492
  namedRepos,
3383
3493
  newTaskFields,
3384
3494
  noExecutorRefusal,
3495
+ onOneLine,
3385
3496
  opsEditable,
3386
3497
  outOfRounds,
3387
3498
  outputLines,
@@ -3423,10 +3534,12 @@ function accountLimitsTitle(snapshot, time) {
3423
3534
  severityLabel,
3424
3535
  skillTokens,
3425
3536
  skippedLabel,
3537
+ spentTokens,
3426
3538
  startAttemptUsage,
3427
3539
  stopTurn,
3428
3540
  subagentCostTitle,
3429
3541
  subtreeIds,
3542
+ subtreeView,
3430
3543
  summarizeToolCall,
3431
3544
  takeAt,
3432
3545
  taskActionCommand,