@ordewell/core 0.11.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/AUTHORS.md +3 -1
  2. package/dist/{IRunner-ihalYfTo.d.mts → IRunner-BwzyUVIL.d.mts} +62 -18
  3. package/dist/{IRunner-DOMtDTVt.d.ts → IRunner-DjJkYwko.d.ts} +62 -18
  4. package/dist/{ModeResolver-DyXeZ9ib.d.ts → ModeResolver-CHsaoV7M.d.ts} +1 -1
  5. package/dist/{ModeResolver-BDAgouuE.d.mts → ModeResolver-b_7bPlBS.d.mts} +1 -1
  6. package/dist/{Task-BL4Idm9r.d.mts → Task-BTEH-ztX.d.mts} +301 -26
  7. package/dist/{Task-BL4Idm9r.d.ts → Task-BTEH-ztX.d.ts} +301 -26
  8. package/dist/{chunk-MYXMIVWA.mjs → chunk-BFLVOYNR.mjs} +3 -3
  9. package/dist/{chunk-YAFNYNFX.mjs → chunk-BKTDYGIP.mjs} +14 -2
  10. package/dist/chunk-BKTDYGIP.mjs.map +1 -0
  11. package/dist/{chunk-QTZ5XTBY.mjs → chunk-F6WS3JLQ.mjs} +446 -10
  12. package/dist/chunk-F6WS3JLQ.mjs.map +1 -0
  13. package/dist/{chunk-7WNLN63J.mjs → chunk-HP2LNKST.mjs} +315 -51
  14. package/dist/chunk-HP2LNKST.mjs.map +1 -0
  15. package/dist/index.d.mts +242 -78
  16. package/dist/index.d.ts +242 -78
  17. package/dist/index.js +5598 -2005
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +4701 -1782
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/parsing.d.mts +2 -2
  22. package/dist/parsing.d.ts +2 -2
  23. package/dist/parsing.js.map +1 -1
  24. package/dist/parsing.mjs +3 -3
  25. package/dist/plan-utils.d.mts +4 -4
  26. package/dist/plan-utils.d.ts +4 -4
  27. package/dist/plan-utils.js +135 -19
  28. package/dist/plan-utils.js.map +1 -1
  29. package/dist/plan-utils.mjs +25 -3
  30. package/dist/{runSettingsText-CYMhTWfw.d.ts → runSettingsText-CvZ40IPv.d.ts} +1086 -190
  31. package/dist/{runSettingsText-tnmvdSfS.d.mts → runSettingsText-x-YML2ay.d.mts} +1086 -190
  32. package/dist/testing.d.mts +18 -2
  33. package/dist/testing.d.ts +18 -2
  34. package/dist/testing.js +71 -7
  35. package/dist/testing.js.map +1 -1
  36. package/dist/testing.mjs +68 -7
  37. package/dist/testing.mjs.map +1 -1
  38. package/package.json +2 -1
  39. package/dist/chunk-7WNLN63J.mjs.map +0 -1
  40. package/dist/chunk-QTZ5XTBY.mjs.map +0 -1
  41. package/dist/chunk-YAFNYNFX.mjs.map +0 -1
  42. /package/dist/{chunk-MYXMIVWA.mjs.map → chunk-BFLVOYNR.mjs.map} +0 -0
package/dist/parsing.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  parsePlanJson
3
- } from "./chunk-MYXMIVWA.mjs";
3
+ } from "./chunk-BFLVOYNR.mjs";
4
4
  import {
5
5
  PlanParseError,
6
6
  extractJsonObject,
7
7
  stripModelNoise
8
- } from "./chunk-YAFNYNFX.mjs";
9
- import "./chunk-QTZ5XTBY.mjs";
8
+ } from "./chunk-BKTDYGIP.mjs";
9
+ import "./chunk-F6WS3JLQ.mjs";
10
10
 
11
11
  // src/services/PartialPlanParser.ts
12
12
  function parsePartialPlan(partial) {
@@ -1,7 +1,7 @@
1
- export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, k as ApprovalBlock, m as ApprovalStatus, r as AssignmentIssue, s as AssignmentScope, B as BlockingSubject, v as CHECKPOINT_TRUNCATE_LENGTH, D as CommandBlock, H as CommandStatus, J as CompactionBlock, K as CompactionStatus, S as ConversationInput, W as ConversationView, _ as DiffRow, $ as DiffRowKind, a0 as DiffStat, a1 as DisplayBlock, a2 as EMPTY_CONVERSATION, a3 as EMPTY_HOLD, a4 as EMPTY_RUN, a5 as EMPTY_TASK_LOG, a6 as EMPTY_TASK_LOG_FOLLOW, ae as GatedConversation, ai as HandoffBlock, aj as HandoffForkRepo, ak as HandoffPeekSubject, am as IDLE_ACTIVITY, ar as IsolationPreviewNotice, aC as LocalEntry, aD as LoopCheckFacts, aE as LoopCheckState, aH as MarkdownToken, aL as MessageBlock, aM as MessageRole, aO as NOT_STARTED, aP as NO_TURN, aQ as NewTaskFields, aY as OutputPreview, aZ as OverrideDirection, a_ as PLANNED_WITH_LABEL, b2 as PlanBlock, b3 as PlanBlocks, b5 as PlanMarkerStatus, bs as PromptHold, bt as REPORT_PREVIEW_LINES, bw as RefTask, bP as RunnerLoadedBlock, bT as SUPERVISOR_LEVEL_LABEL, ce as SkillLoadBlock, cf as SkillToken, cj as SubagentBlock, ck as SubagentChild, cl as SubagentStatus, cw as TakenPrompt, cx as TaskAction, cA as TaskLogBatch, cC as TaskLogFollow, cD as TaskLogFollowInput, cE as TaskLogHeaderKind, cF as TaskLogHeaderTask, cG as TaskLogHeaderUsage, cH as TaskLogHeaderView, cJ as TaskLogView, cQ as TaskPlacement, cU as TaskRef, cV as TaskRowAction, cW as TaskRowContext, cX as TaskRowHandoff, cY as TaskRowIsolation, cZ as TaskRowKind, c_ as TaskRowLoop, c$ as TaskRowPlacement, d0 as TaskRowSubject, d1 as TaskRowUsage, d2 as TaskRowView, d3 as TaskRunFacts, d4 as TaskStatusKind, d5 as ThinkingDisplayBlock, d6 as ToolBlock, d7 as ToolHeadline, d8 as ToolStatus, d9 as TreeTask, db as TurnGate, dc as UsageBlock, de as WAITS_FOR_APPROVAL_LABEL, df as WakeUpItem, dn as accountLimitPercentText, dp as accountLimitWindowLabel, dq as accountLimitsOf, dr as accountLimitsText, ds as accountLimitsTitle, dt as aheadOfDraft, dv as approvalKindText, dw as approvalLabel, dx as approvalStatusText, dy as assignedRunnerOf, dz as assignmentIssue, dA as assignmentIssueText, dB as attachingLabel, dE as awaitingLabel, dF as blockNotice, dG as blockNotices, dH as blockedByLabel, dI as blockingFailures, dJ as canMergeTasks, dK as canSetDependencies, dL as canSplitTask, dM as capConflictFiles, dN as cardEditNeedsUnstarted, dO as cardEditable, dS as compactionText, dT as confirmedOverride, dV as dependencyCandidates, dW as dependentsNotice, dX as dependentsOf, d_ as describeIsolationPreview, d$ as describeMergeResult, e1 as diffRows, e2 as diffStat, e3 as diffSummary, e5 as drainNext, e6 as editableWhileRunning, e8 as followTaskLog, e9 as followTurn, ea as fromTranscript, ec as handoffBaseLine, ed as handoffBranchName, ee as handoffFindingsText, ef as handoffPeekParts, eg as hasAccountLimits, eh as hasHiddenDetail, ei as hasLongReport, ej as holdLabel, ek as holdPrompt, el as isFileEditTool, em as isRepoGroup, en as isTaskRunning, ep as loadedSkillTokens, eq as logContinues, er as logResumes, es as loopBodyLabel, et as loopBodyRound, eu as loopCheckLabel, ev as loopCheckState, ew as loopLeaveNotice, ex as loopRowParts, ey as manualOverrideConfirmation, ez as manualOverrideStopFirst, eB as markAction, eC as markdownHtml, eD as markdownTokens, eE as mergeOutcome, eG as namedRepos, eH as newTaskFields, eI as noExecutorRefusal, eL as opsEditable, eM as outputLines, eN as outputPreview, eO as overrideNeedsConfirmation, eP as parseCount, eT as pastGateConfirmation, eU as planBlocks, eV as planMarkerParts, f1 as receiptLabel, f2 as reconcileApprovals, f5 as reduceConversation, f7 as reduceTaskLog, f9 as repairedLanded, fa as repairedNotice, fb as repeatingChecks, fc as replayTaskLog, fd as repoBaseLine, fe as repoResultLines, fi as resolveTaskRef, fj as resolveUserTaskRef, fk as resumeLabel, fl as resumeTime, fm as runHoldsEditors, fo as runnerToolSubject, fv as skillTokens, fw as skippedLabel, fx as stopTurn, fy as subtreeIds, fz as summarizeToolCall, fD as takeAt, fE as taskActionCommand, fF as taskChatAvailable, fG as taskLogCommands, fI as taskLogHeaderView, fJ as taskOrderLabel, fK as taskPlacement, fM as taskRef, fN as taskRefOf, fO as taskRowActions, fP as taskRowView, fQ as taskStartedNotice, fR as taskStatusKind, fU as titledRefs, fV as titledTaskRef, fW as titledTaskRefOf, fY as toolHeadline, f$ as truncateCheckpointSummary, g0 as unsendAll, g1 as unsendLatest, g2 as wakeUpItems, g3 as walkPlan } from './runSettingsText-tnmvdSfS.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, a4 as ModelUsage, a6 as PatchView, ab as PlanUsage, ag as PlannerUsage, as as ReportedWindow, aA as RunnerSessionCost, aB as SEVERITY_LABEL, aE as SessionBilling, aP as StoredHandoff, aX as TaskLoop, b3 as TaskUsageSummary, b5 as UsageLine, b6 as UsageRecord, b7 as UsageTotals, ba as addAttemptUsage, bb as addModelUsage, bc as addPlannerUsage, bd as addUsage, be as addUsageTotals, bg as betweenRounds, bk as checkOf, bl as contextMeterText, bm as contextMeterTitle, bn as costText, bo as countedSessionCost, bs as endAttemptUsage, bw as formatCost, bx as formatTokenCount, bB as handoffReferenceText, bF as isMeasured, bI as loopRemovalRefusal, bJ as loopRoundOf, bL as modelCostTitle, bO as outOfRounds, bP as partedPromptUsage, bV as patchView, bW as pausedOnLimit, bX as planUsage, bY as plannerContextFill, b$ as resumedSessionWindow, c1 as savedPatchView, c2 as savedPatchViews, c3 as severityLabel, c4 as startAttemptUsage, c6 as subagentCostTitle, c7 as taskUsageSummary, c8 as tasksTotalText, c9 as usageLine, ca as usageText, cd as worstSeverity } from './Task-BL4Idm9r.mjs';
3
- export { bU as scriptTaskText } from './IRunner-ihalYfTo.mjs';
4
- import './ModeResolver-BDAgouuE.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, 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';
5
5
  import 'child_process';
6
6
  import 'zod/v4';
7
7
 
@@ -1,7 +1,7 @@
1
- export { b as AccountLimitBucket, c as AccountLimitSnapshot, d as AccountLimitStatus, e as AccountLimitWindow, k as ApprovalBlock, m as ApprovalStatus, r as AssignmentIssue, s as AssignmentScope, B as BlockingSubject, v as CHECKPOINT_TRUNCATE_LENGTH, D as CommandBlock, H as CommandStatus, J as CompactionBlock, K as CompactionStatus, S as ConversationInput, W as ConversationView, _ as DiffRow, $ as DiffRowKind, a0 as DiffStat, a1 as DisplayBlock, a2 as EMPTY_CONVERSATION, a3 as EMPTY_HOLD, a4 as EMPTY_RUN, a5 as EMPTY_TASK_LOG, a6 as EMPTY_TASK_LOG_FOLLOW, ae as GatedConversation, ai as HandoffBlock, aj as HandoffForkRepo, ak as HandoffPeekSubject, am as IDLE_ACTIVITY, ar as IsolationPreviewNotice, aC as LocalEntry, aD as LoopCheckFacts, aE as LoopCheckState, aH as MarkdownToken, aL as MessageBlock, aM as MessageRole, aO as NOT_STARTED, aP as NO_TURN, aQ as NewTaskFields, aY as OutputPreview, aZ as OverrideDirection, a_ as PLANNED_WITH_LABEL, b2 as PlanBlock, b3 as PlanBlocks, b5 as PlanMarkerStatus, bs as PromptHold, bt as REPORT_PREVIEW_LINES, bw as RefTask, bP as RunnerLoadedBlock, bT as SUPERVISOR_LEVEL_LABEL, ce as SkillLoadBlock, cf as SkillToken, cj as SubagentBlock, ck as SubagentChild, cl as SubagentStatus, cw as TakenPrompt, cx as TaskAction, cA as TaskLogBatch, cC as TaskLogFollow, cD as TaskLogFollowInput, cE as TaskLogHeaderKind, cF as TaskLogHeaderTask, cG as TaskLogHeaderUsage, cH as TaskLogHeaderView, cJ as TaskLogView, cQ as TaskPlacement, cU as TaskRef, cV as TaskRowAction, cW as TaskRowContext, cX as TaskRowHandoff, cY as TaskRowIsolation, cZ as TaskRowKind, c_ as TaskRowLoop, c$ as TaskRowPlacement, d0 as TaskRowSubject, d1 as TaskRowUsage, d2 as TaskRowView, d3 as TaskRunFacts, d4 as TaskStatusKind, d5 as ThinkingDisplayBlock, d6 as ToolBlock, d7 as ToolHeadline, d8 as ToolStatus, d9 as TreeTask, db as TurnGate, dc as UsageBlock, de as WAITS_FOR_APPROVAL_LABEL, df as WakeUpItem, dn as accountLimitPercentText, dp as accountLimitWindowLabel, dq as accountLimitsOf, dr as accountLimitsText, ds as accountLimitsTitle, dt as aheadOfDraft, dv as approvalKindText, dw as approvalLabel, dx as approvalStatusText, dy as assignedRunnerOf, dz as assignmentIssue, dA as assignmentIssueText, dB as attachingLabel, dE as awaitingLabel, dF as blockNotice, dG as blockNotices, dH as blockedByLabel, dI as blockingFailures, dJ as canMergeTasks, dK as canSetDependencies, dL as canSplitTask, dM as capConflictFiles, dN as cardEditNeedsUnstarted, dO as cardEditable, dS as compactionText, dT as confirmedOverride, dV as dependencyCandidates, dW as dependentsNotice, dX as dependentsOf, d_ as describeIsolationPreview, d$ as describeMergeResult, e1 as diffRows, e2 as diffStat, e3 as diffSummary, e5 as drainNext, e6 as editableWhileRunning, e8 as followTaskLog, e9 as followTurn, ea as fromTranscript, ec as handoffBaseLine, ed as handoffBranchName, ee as handoffFindingsText, ef as handoffPeekParts, eg as hasAccountLimits, eh as hasHiddenDetail, ei as hasLongReport, ej as holdLabel, ek as holdPrompt, el as isFileEditTool, em as isRepoGroup, en as isTaskRunning, ep as loadedSkillTokens, eq as logContinues, er as logResumes, es as loopBodyLabel, et as loopBodyRound, eu as loopCheckLabel, ev as loopCheckState, ew as loopLeaveNotice, ex as loopRowParts, ey as manualOverrideConfirmation, ez as manualOverrideStopFirst, eB as markAction, eC as markdownHtml, eD as markdownTokens, eE as mergeOutcome, eG as namedRepos, eH as newTaskFields, eI as noExecutorRefusal, eL as opsEditable, eM as outputLines, eN as outputPreview, eO as overrideNeedsConfirmation, eP as parseCount, eT as pastGateConfirmation, eU as planBlocks, eV as planMarkerParts, f1 as receiptLabel, f2 as reconcileApprovals, f5 as reduceConversation, f7 as reduceTaskLog, f9 as repairedLanded, fa as repairedNotice, fb as repeatingChecks, fc as replayTaskLog, fd as repoBaseLine, fe as repoResultLines, fi as resolveTaskRef, fj as resolveUserTaskRef, fk as resumeLabel, fl as resumeTime, fm as runHoldsEditors, fo as runnerToolSubject, fv as skillTokens, fw as skippedLabel, fx as stopTurn, fy as subtreeIds, fz as summarizeToolCall, fD as takeAt, fE as taskActionCommand, fF as taskChatAvailable, fG as taskLogCommands, fI as taskLogHeaderView, fJ as taskOrderLabel, fK as taskPlacement, fM as taskRef, fN as taskRefOf, fO as taskRowActions, fP as taskRowView, fQ as taskStartedNotice, fR as taskStatusKind, fU as titledRefs, fV as titledTaskRef, fW as titledTaskRefOf, fY as toolHeadline, f$ as truncateCheckpointSummary, g0 as unsendAll, g1 as unsendLatest, g2 as wakeUpItems, g3 as walkPlan } from './runSettingsText-CYMhTWfw.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, a4 as ModelUsage, a6 as PatchView, ab as PlanUsage, ag as PlannerUsage, as as ReportedWindow, aA as RunnerSessionCost, aB as SEVERITY_LABEL, aE as SessionBilling, aP as StoredHandoff, aX as TaskLoop, b3 as TaskUsageSummary, b5 as UsageLine, b6 as UsageRecord, b7 as UsageTotals, ba as addAttemptUsage, bb as addModelUsage, bc as addPlannerUsage, bd as addUsage, be as addUsageTotals, bg as betweenRounds, bk as checkOf, bl as contextMeterText, bm as contextMeterTitle, bn as costText, bo as countedSessionCost, bs as endAttemptUsage, bw as formatCost, bx as formatTokenCount, bB as handoffReferenceText, bF as isMeasured, bI as loopRemovalRefusal, bJ as loopRoundOf, bL as modelCostTitle, bO as outOfRounds, bP as partedPromptUsage, bV as patchView, bW as pausedOnLimit, bX as planUsage, bY as plannerContextFill, b$ as resumedSessionWindow, c1 as savedPatchView, c2 as savedPatchViews, c3 as severityLabel, c4 as startAttemptUsage, c6 as subagentCostTitle, c7 as taskUsageSummary, c8 as tasksTotalText, c9 as usageLine, ca as usageText, cd as worstSeverity } from './Task-BL4Idm9r.js';
3
- export { bU as scriptTaskText } from './IRunner-DOMtDTVt.js';
4
- import './ModeResolver-DyXeZ9ib.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, 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';
5
5
  import 'child_process';
6
6
  import 'zod/v4';
7
7
 
@@ -32,6 +32,7 @@ var plan_utils_exports = {};
32
32
  __export(plan_utils_exports, {
33
33
  CHECKPOINT_TRUNCATE_LENGTH: () => CHECKPOINT_TRUNCATE_LENGTH,
34
34
  DEFAULT_RUNNERS: () => DEFAULT_RUNNERS,
35
+ DELEGATION_OFFERED: () => DELEGATION_OFFERED,
35
36
  EMPTY_CONVERSATION: () => EMPTY_CONVERSATION,
36
37
  EMPTY_HOLD: () => EMPTY_HOLD,
37
38
  EMPTY_RUN: () => EMPTY_RUN,
@@ -43,6 +44,7 @@ __export(plan_utils_exports, {
43
44
  PLANNED_WITH_LABEL: () => PLANNED_WITH_LABEL,
44
45
  REPORT_PREVIEW_LINES: () => REPORT_PREVIEW_LINES,
45
46
  SEVERITY_LABEL: () => SEVERITY_LABEL,
47
+ STALLED_LABEL: () => STALLED_LABEL,
46
48
  SUPERVISOR_LEVEL_LABEL: () => SUPERVISOR_LEVEL_LABEL,
47
49
  WAITS_FOR_APPROVAL_LABEL: () => WAITS_FOR_APPROVAL_LABEL,
48
50
  accountLimitPercentText: () => accountLimitPercentText,
@@ -50,6 +52,7 @@ __export(plan_utils_exports, {
50
52
  accountLimitsOf: () => accountLimitsOf,
51
53
  accountLimitsText: () => accountLimitsText,
52
54
  accountLimitsTitle: () => accountLimitsTitle,
55
+ activityLabel: () => activityLabel,
53
56
  addAttemptUsage: () => addAttemptUsage,
54
57
  addModelUsage: () => addModelUsage,
55
58
  addPlannerUsage: () => addPlannerUsage,
@@ -77,6 +80,7 @@ __export(plan_utils_exports, {
77
80
  cardEditable: () => cardEditable,
78
81
  checkOf: () => checkOf,
79
82
  clampThinkingEffort: () => clampThinkingEffort,
83
+ closeTurn: () => closeTurn,
80
84
  compactionText: () => compactionText,
81
85
  confirmedOverride: () => confirmedOverride,
82
86
  contextMeterText: () => contextMeterText,
@@ -93,10 +97,12 @@ __export(plan_utils_exports, {
93
97
  diffSummary: () => diffSummary,
94
98
  drainNext: () => drainNext,
95
99
  editableWhileRunning: () => editableWhileRunning,
100
+ elapsedSince: () => elapsedSince,
96
101
  endAttemptUsage: () => endAttemptUsage,
97
102
  followTaskLog: () => followTaskLog,
98
103
  followTurn: () => followTurn,
99
104
  formatCost: () => formatCost,
105
+ formatElapsed: () => formatElapsed,
100
106
  formatTokenCount: () => formatTokenCount,
101
107
  fromTranscript: () => fromTranscript,
102
108
  handoffBaseLine: () => handoffBaseLine,
@@ -152,6 +158,7 @@ __export(plan_utils_exports, {
152
158
  reconcileApprovals: () => reconcileApprovals,
153
159
  reduceConversation: () => reduceConversation,
154
160
  reduceTaskLog: () => reduceTaskLog,
161
+ repairWaitLabel: () => repairWaitLabel,
155
162
  repairedLanded: () => repairedLanded,
156
163
  repairedNotice: () => repairedNotice,
157
164
  repeatingChecks: () => repeatingChecks,
@@ -163,6 +170,9 @@ __export(plan_utils_exports, {
163
170
  resumeLabel: () => resumeLabel,
164
171
  resumeTime: () => resumeTime,
165
172
  resumedSessionWindow: () => resumedSessionWindow,
173
+ revertEffect: () => revertEffect,
174
+ revertListLine: () => revertListLine,
175
+ revertTaskRef: () => revertTaskRef,
166
176
  runHoldsEditors: () => runHoldsEditors,
167
177
  runnerToolSubject: () => runnerToolSubject,
168
178
  savedPatchView: () => savedPatchView,
@@ -178,6 +188,7 @@ __export(plan_utils_exports, {
178
188
  summarizeToolCall: () => summarizeToolCall,
179
189
  takeAt: () => takeAt,
180
190
  taskActionCommand: () => taskActionCommand,
191
+ taskActivity: () => taskActivity,
181
192
  taskChatAvailable: () => taskChatAvailable,
182
193
  taskLogCommands: () => taskLogCommands,
183
194
  taskLogHeaderView: () => taskLogHeaderView,
@@ -390,6 +401,7 @@ function taskStatusKind(task) {
390
401
  if (!isTaskRunning(task)) return "todo";
391
402
  return task.status === "in_progress" && task.idleSince ? "quiet" : "running";
392
403
  }
404
+ var STALLED_LABEL = "Stalled";
393
405
  var AWAITING_LABELS = {
394
406
  input: "Waiting for your input",
395
407
  checkpoint: "Checkpoint",
@@ -400,6 +412,14 @@ var AWAITING_LABELS = {
400
412
  function awaitingLabel(task) {
401
413
  return task.status === "awaiting_user" && task.awaitingReason ? AWAITING_LABELS[task.awaitingReason] : null;
402
414
  }
415
+ var REPAIR_WAIT_LABELS = {
416
+ slot: "Repair waits for a free slot",
417
+ planner: "Repair waits for the planner's turn to end",
418
+ "usage-limit": "Repair waits for its runner's usage limit to reset"
419
+ };
420
+ function repairWaitLabel(wait) {
421
+ return REPAIR_WAIT_LABELS[wait];
422
+ }
403
423
  function blockedByLabel(refs) {
404
424
  return `Blocked by ${refs.join(", ")}`;
405
425
  }
@@ -1175,6 +1195,7 @@ function repoResultLines(handoff) {
1175
1195
  // src/services/runSettingsText.ts
1176
1196
  var SUPERVISOR_LEVEL_LABEL = { off: "Off", watch: "Watch", act: "Act" };
1177
1197
  var PLANNED_WITH_LABEL = "Planned-with line in commits Ordewell writes";
1198
+ var DELEGATION_OFFERED = false;
1178
1199
  function parseCount(arg, min) {
1179
1200
  if (arg === void 0 || !/^\d+$/.test(arg)) return null;
1180
1201
  const n = Number(arg);
@@ -2176,17 +2197,17 @@ function answered(block, decision, note) {
2176
2197
  function decideApproval2(view, { approvalId, decision, note }) {
2177
2198
  return settleApproval2(view, approvalId, (block) => answered(block, decision, note));
2178
2199
  }
2179
- function startTurn(view, { message, messageId, from, forced }) {
2200
+ function startTurn(view, { message, messageId, from, forced, startedAt }) {
2180
2201
  const queued = messageId ? view.queued.filter((m) => m.id !== messageId) : view.queued;
2181
- const working = { ...view, queued, working: true, latestText: void 0 };
2202
+ const working = { ...view, queued, working: true, turnStartedAt: startedAt, latestText: void 0 };
2182
2203
  return message ? append(working, (id) => ({ ...sentMessage(id, message, from), ...forced ? { forced: true } : {} })) : working;
2183
2204
  }
2184
2205
  function sentMessage(id, text2, from) {
2185
2206
  return from === "ordewell" ? settledMessage(id, "system", `Ordewell: ${text2}`) : settledMessage(id, "user", text2);
2186
2207
  }
2187
- function startCommand(view, { name, args, messageId }) {
2208
+ function startCommand(view, { name, args, messageId, startedAt }) {
2188
2209
  const queued = messageId ? view.queued.filter((m) => m.id !== messageId) : view.queued;
2189
- return append({ ...view, queued, working: true, latestText: void 0 }, (id) => ({
2210
+ return append({ ...view, queued, working: true, turnStartedAt: startedAt, latestText: void 0 }, (id) => ({
2190
2211
  type: "command",
2191
2212
  id,
2192
2213
  name,
@@ -2221,7 +2242,7 @@ function endTurn2(view, { reason }) {
2221
2242
  const i = runningCommand(view);
2222
2243
  const command = view.blocks[i];
2223
2244
  const settled = command?.type === "command" ? { ...view, blocks: replaceAt(view.blocks, i, { ...command, status: COMMAND_END[reason] }) } : view;
2224
- const closed = closeOpenBlocks({ ...settled, working: false, lastTurnEnd: reason, streams: {}, latestText: void 0 }, CUT[reason]);
2245
+ const closed = closeOpenBlocks({ ...settled, working: false, turnStartedAt: void 0, lastTurnEnd: reason, streams: {}, latestText: void 0 }, CUT[reason]);
2225
2246
  return reason === "interrupted" ? append(closed, (id) => settledMessage(id, "system", "Interrupted.")) : closed;
2226
2247
  }
2227
2248
  function queueMessage(view, { messageId, text: text2, forced, from }) {
@@ -2271,7 +2292,7 @@ function endScriptStep(view, event) {
2271
2292
  const passed = event.code === 0 && !event.signal && event.error === void 0;
2272
2293
  const i = runningScriptStep(view);
2273
2294
  const block = view.blocks[i];
2274
- const ended = { ...view, working: false };
2295
+ const ended = { ...view, working: false, turnStartedAt: void 0 };
2275
2296
  if (block?.type !== "tool") return append(ended, (id) => settledMessage(id, "system", status));
2276
2297
  const output = block.output.trim() ? `${block.output.replace(/\n+$/, "")}
2277
2298
  ${status}` : status;
@@ -2368,7 +2389,7 @@ function reduceTaskLog(view, event) {
2368
2389
  case "handoff":
2369
2390
  return showHandoff(view, event);
2370
2391
  case "runner_ended":
2371
- return closeOpenBlocks({ ...endOpenCalls(view), working: false, streams: {}, latestText: void 0 }, "stopped");
2392
+ return closeOpenBlocks({ ...endOpenCalls(view), working: false, turnStartedAt: void 0, streams: {}, latestText: void 0 }, "stopped");
2372
2393
  default:
2373
2394
  return view;
2374
2395
  }
@@ -2377,6 +2398,61 @@ function replayTaskLog(events, from = EMPTY_TASK_LOG) {
2377
2398
  return events.reduce(reduceTaskLog, from);
2378
2399
  }
2379
2400
 
2401
+ // src/conversation/activity.ts
2402
+ function activityLabel(view) {
2403
+ for (let i = view.blocks.length - 1; i >= 0; i--) {
2404
+ const label = openLabel(view.blocks[i], view);
2405
+ if (label) return label;
2406
+ }
2407
+ return "Working\u2026";
2408
+ }
2409
+ function isAtWork(view) {
2410
+ if (view.working !== false) return true;
2411
+ if (view.blocks.some((b) => b.type === "subagent" && b.status === "running")) return true;
2412
+ return view.lastTurnEnd === void 0 && view.blocks.some((b) => openLabel(b, view) !== null);
2413
+ }
2414
+ function openLabel(block, view) {
2415
+ switch (block.type) {
2416
+ case "thinking":
2417
+ return block.streaming ? "Thinking\u2026" : null;
2418
+ case "message":
2419
+ return block.streaming ? "Writing\u2026" : null;
2420
+ case "tool": {
2421
+ if (block.status !== "pending") return null;
2422
+ const { name, keyArg } = block.headline;
2423
+ return keyArg ? `Running ${name}(${keyArg})\u2026` : `Running ${name}\u2026`;
2424
+ }
2425
+ case "subagent": {
2426
+ if (block.status !== "running") return null;
2427
+ const running = view.blocks.filter((b) => b.type === "subagent" && b.status === "running");
2428
+ return running.length > 1 ? `${running.length} subagents running\u2026` : `Subagent: ${block.brief}\u2026`;
2429
+ }
2430
+ default:
2431
+ return null;
2432
+ }
2433
+ }
2434
+ function taskActivity(view, task) {
2435
+ if (!isTaskRunning(task) || view.archived) return null;
2436
+ if (task.awaitingApproval || view.blocks.some((b) => b.type === "approval" && b.status === "pending")) return null;
2437
+ const since = view.turnStartedAt ? { since: view.turnStartedAt } : {};
2438
+ if (taskStatusKind(task) === "quiet") return { label: STALLED_LABEL, busy: false, ...since };
2439
+ if (!isAtWork(view)) return null;
2440
+ return { label: activityLabel(view), busy: true, ...since };
2441
+ }
2442
+
2443
+ // src/conversation/elapsed.ts
2444
+ function formatElapsed(ms) {
2445
+ if (!Number.isFinite(ms) || ms < 0) return "";
2446
+ const seconds = Math.floor(ms / 1e3);
2447
+ if (seconds < 60) return `${seconds}s`;
2448
+ const minutes = Math.floor(seconds / 60);
2449
+ if (minutes < 60) return `${minutes}m ${String(seconds % 60).padStart(2, "0")}s`;
2450
+ return `${Math.floor(minutes / 60)}h ${String(minutes % 60).padStart(2, "0")}m`;
2451
+ }
2452
+ function elapsedSince(startedAt, now) {
2453
+ return startedAt === void 0 ? "" : formatElapsed(now - Date.parse(startedAt));
2454
+ }
2455
+
2380
2456
  // src/models/Handoff.ts
2381
2457
  var SEVERITY_LABEL = {
2382
2458
  blocker: "Blocker",
@@ -2395,6 +2471,9 @@ function worstSeverity(findings) {
2395
2471
  }
2396
2472
  return worst;
2397
2473
  }
2474
+ function findingRefText(task, ref) {
2475
+ return `${task}${ref.attempt !== void 0 ? `@${ref.attempt}` : ""}${ref.finding ? `/${ref.finding}` : ""}`;
2476
+ }
2398
2477
  function handoffReferenceText(ref, taskName = () => void 0) {
2399
2478
  switch (ref.kind) {
2400
2479
  case "file":
@@ -2402,7 +2481,7 @@ function handoffReferenceText(ref, taskName = () => void 0) {
2402
2481
  case "commit":
2403
2482
  return `commit ${ref.sha}${ref.repo ? ` in ${ref.repo}` : ""}${ref.resolved === true ? "" : " (unresolved)"}`;
2404
2483
  case "task":
2405
- return `task ${taskName(ref.task) ?? ref.task}${ref.finding ? ` ${ref.finding}` : ""}`;
2484
+ return findingRefText(taskName(ref.task) ?? ref.task, ref);
2406
2485
  case "url":
2407
2486
  return ref.url;
2408
2487
  case "patch":
@@ -2579,18 +2658,18 @@ function cutOff(gate, input) {
2579
2658
  return turnId === void 0 || turnId === gate.stopped;
2580
2659
  }
2581
2660
  function withGate(live2, gate) {
2582
- return gate.open === live2.gate.open && gate.stopped === live2.gate.stopped ? live2 : { ...live2, gate };
2661
+ return gate.open === live2.gate.open && gate.stopped === live2.gate.stopped && gate.openedAt === live2.gate.openedAt ? live2 : { ...live2, gate };
2583
2662
  }
2584
2663
  function followTurn(view, gate, input) {
2585
2664
  const live2 = { view, gate };
2586
2665
  if (input.type === "planner_turn_started") {
2587
- return withGate({ view: reduceConversation(view, input), gate }, { open: input.turnId, stopped: null });
2666
+ return withGate({ view: reduceConversation(view, input), gate }, { open: input.turnId, stopped: null, ...input.startedAt ? { openedAt: input.startedAt } : {} });
2588
2667
  }
2589
2668
  if (cutOff(gate, input)) {
2590
2669
  return input.type === "planner_turn_ended" ? withGate(live2, { ...gate, stopped: null }) : live2;
2591
2670
  }
2592
2671
  const next = { view: reduceConversation(view, input), gate };
2593
- return input.type === "planner_turn_ended" && input.turnId === gate.open ? withGate(next, { ...gate, open: null }) : next;
2672
+ return input.type === "planner_turn_ended" && input.turnId === gate.open ? withGate(next, { open: null, stopped: gate.stopped }) : next;
2594
2673
  }
2595
2674
  function stopTurn(view, gate) {
2596
2675
  if (gate.open === null) return { view, gate };
@@ -2599,9 +2678,16 @@ function stopTurn(view, gate) {
2599
2678
  gate: { open: null, stopped: gate.open }
2600
2679
  };
2601
2680
  }
2681
+ function closeTurn(gate) {
2682
+ return gate.open === null ? gate : { open: null, stopped: gate.stopped };
2683
+ }
2602
2684
 
2603
2685
  // src/services/WakePolicy.ts
2604
2686
  var REPORT_LEAD = ", whose result you asked for, has ended.";
2687
+ var RIDE_ALONG_CHARS = 120;
2688
+ var LEFT_OUT_EVENTS = 8;
2689
+ var LEFT_OUT_ROOM = 100 + LEFT_OUT_EVENTS * (RIDE_ALONG_CHARS + 1);
2690
+ var UNKNOWN_CACHE_TTL_MS = 5 * 6e4;
2605
2691
 
2606
2692
  // src/conversation/wakeUp.ts
2607
2693
  var DIGEST_HEAD = "Run update:";
@@ -2755,8 +2841,9 @@ var PAUSED = (t) => t.status === "awaiting_user" && t.awaitingReason === "usage-
2755
2841
  var RESUMES = (t) => PAUSED(t) && !!t.resumeAt;
2756
2842
  var RESUMABLE = (t) => PAUSED(t) && t.continuable === true;
2757
2843
  var HOLDS_UP = (t) => t.status === "failed" || t.status === "blocked" || t.status === "awaiting_user";
2844
+ var STOPPABLE = (t) => t.status === "in_progress" || !!t.repairWaits;
2758
2845
  var TASK_RULES = [
2759
- ["cancel", (t) => t.status === "in_progress"],
2846
+ ["cancel", STOPPABLE],
2760
2847
  ["resume-now", RESUMABLE],
2761
2848
  ["cancel-resume", RESUMES],
2762
2849
  ["skip", HOLDS_UP],
@@ -2767,7 +2854,7 @@ var TASK_RULES = [
2767
2854
  ["uncomplete", (t) => t.status === "completed"]
2768
2855
  ];
2769
2856
  var SUBTASK_RULES = [
2770
- ["cancel", (t) => t.status === "in_progress"],
2857
+ ["cancel", STOPPABLE],
2771
2858
  ["resume-now", RESUMABLE],
2772
2859
  ["cancel-resume", RESUMES],
2773
2860
  ["complete", (t) => t.status === "in_progress" && t.type === "ai"],
@@ -2914,17 +3001,23 @@ function blockedBy(task, reading) {
2914
3001
  if (!reading || !NOT_STARTED.has(task.status)) return [];
2915
3002
  return reading.blocks.blocked.get(task.id) ?? [];
2916
3003
  }
3004
+ function strandedDetail(check, dependencies, reading) {
3005
+ const status = (id) => reading?.tasks.find((t) => t.id === id)?.status;
3006
+ const landed = reading && check.loop.body.every((id) => status(id) === "completed");
3007
+ const finished = dependencies.every((id) => [void 0, "completed", "skipped"].includes(status(id)));
3008
+ return landed && finished ? `Nothing runs it now: start it for round ${loopRoundOf(check) + 1} of ${check.loop.maxRounds}` : "Nothing runs it now: execute the plan and the loop goes on";
3009
+ }
2917
3010
  function loopOf(task, reading) {
2918
3011
  const tasks = reading?.tasks;
2919
3012
  if (task.loop) {
2920
3013
  const check2 = { id: task.id, status: task.status, loop: task.loop, loopRound: task.loopRound, ...task.verdict ? { verdict: task.verdict } : {} };
2921
- const state = loopCheckState(check2, reading ? reading.blocks.repeating.has(task.id) : true);
3014
+ const state = loopCheckState(check2, !task.loopStranded && (reading ? reading.blocks.repeating.has(task.id) : true));
2922
3015
  const body = refsOf(task.loop.body, tasks);
2923
3016
  const halted = reading ? task.loop.body.filter((id) => {
2924
3017
  const status = reading.tasks.find((t) => t.id === id)?.status;
2925
3018
  return status === "failed" || status === "skipped" || reading.blocks.blocked.has(id);
2926
3019
  }) : [];
2927
- const detail = state === "repeating" ? `Found problems: runs again once ${body.join(", ")} ${body.length === 1 ? "has" : "have"} landed` : state === "stopped" ? `${refsOf(halted, tasks).join(", ")} did not pass: retry ${halted.length === 1 ? "it" : "them"} and the loop goes on` : null;
3020
+ const detail = state === "repeating" ? `Found problems: runs again once ${body.join(", ")} ${body.length === 1 ? "has" : "have"} landed` : state === "stopped" ? task.loopStranded ? strandedDetail(check2, task.dependencies, reading) : `${refsOf(halted, tasks).join(", ")} did not pass: retry ${halted.length === 1 ? "it" : "them"} and the loop goes on` : null;
2928
3021
  return { role: "check", state, label: loopCheckLabel(check2, state), detail, body };
2929
3022
  }
2930
3023
  const owner = reading && checkOf(reading.tasks, task.id);
@@ -2977,7 +3070,8 @@ function taskRowView(task, context = {}) {
2977
3070
  ...flagOf(task, context.runnerScope),
2978
3071
  autonomous: task.type === "ai" && context.modes?.find((m) => m.id === task.taskMode)?.autonomous === true,
2979
3072
  repos: namedRepos(isolation?.repos),
2980
- conflict: isolation?.state === "conflict" ? { repo: namedRepo(isolation.conflictRepo), files: filesOf(isolation.conflictFiles) } : null,
3073
+ conflict: isolation?.state === "conflict" && !isolation.repairWaits ? { repo: namedRepo(isolation.conflictRepo), files: filesOf(isolation.conflictFiles), resolver: isolation.resolver ? refsOf([isolation.resolver], context.tasks)[0] : null } : null,
3074
+ repairWaiting: isolation?.state === "conflict" && isolation.repairWaits ? { label: repairWaitLabel(isolation.repairWaits), files: filesOf(isolation.conflictFiles) } : null,
2981
3075
  repairing: isolation?.state === "repairing" ? { files: filesOf(isolation.conflictFiles), attempt: isolation.repair ?? null } : null,
2982
3076
  repaired: isolation?.repairedFiles?.length ? { files: capConflictFiles(isolation.repairedFiles), landed: isolation.state === "integrated" } : null,
2983
3077
  mergeGate: task.mergeGate?.length ? refsOf(task.mergeGate, context.tasks) : null,
@@ -2989,7 +3083,9 @@ function taskRowView(task, context = {}) {
2989
3083
  handoff: handoffOf(task),
2990
3084
  dependencies: refsOf(task.dependencies, context.tasks),
2991
3085
  // A block read off the plan offers what a stored one does: Skip among them.
2992
- actions: taskRowActions(blocked.length > 0 ? { ...task, status: "blocked" } : task, context.placement ?? (parent ? "subtask" : "task")),
3086
+ actions: taskRowActions({ ...task, ...blocked.length > 0 ? { status: "blocked" } : {}, ...isolation?.repairWaits ? { repairWaits: isolation.repairWaits } : {} }, context.placement ?? (parent ? "subtask" : "task")),
3087
+ // Read off the mark itself: a task with merges left and no record has state `none`.
3088
+ revertible: task.isolation?.revertible === true,
2993
3089
  mark: markAction(task),
2994
3090
  opsEditable: opsEditable(task)
2995
3091
  };
@@ -3005,7 +3101,7 @@ var STATE_LABEL = {
3005
3101
  done: "Done",
3006
3102
  failed: "Failed",
3007
3103
  running: "Running",
3008
- quiet: "Stalled",
3104
+ quiet: STALLED_LABEL,
3009
3105
  awaiting: "Waiting for your input",
3010
3106
  blocked: "Blocked",
3011
3107
  skipped: "Skipped",
@@ -3022,6 +3118,7 @@ function stateOf(task, follow, approvals) {
3022
3118
  return { kind: task.awaitingReason === "checkpoint" ? "checkpoint" : "awaiting", label: awaitingLabel(task) ?? STATE_LABEL.awaiting };
3023
3119
  }
3024
3120
  if (task.status === "blocked") return { kind: "blocked", label: STATE_LABEL.blocked };
3121
+ if (task.repairWaits) return { kind: "todo", label: repairWaitLabel(task.repairWaits) };
3025
3122
  if (follow.view.lastTurnEnd === "failed") return { kind: "failed", label: "Turn failed" };
3026
3123
  if (follow.view.lastTurnEnd === "interrupted") return { kind: "todo", label: "Interrupted" };
3027
3124
  const kind = taskStatusKind(task);
@@ -3101,6 +3198,14 @@ function pastGateConfirmation(unmerged, subject = "This task") {
3101
3198
  function manualOverrideConfirmation(direction, label) {
3102
3199
  return direction === "complete" ? `Mark ${label} complete? You vouch for its work although no passing verdict said it was done. Any changes it kept may land in your run, and the tasks that depend on it are released to start on a future run.` : `Mark ${label} not done? This clears its completion and holds it until you retry or start it. The work it did stays where it is, and tasks that already ran on its result are not undone.`;
3103
3200
  }
3201
+ var revertEffect = "Its landed work comes off the integration branch, newest first, and each task listed is held as not started until you retry it. Nothing in your own branch changes.";
3202
+ function revertTaskRef(task) {
3203
+ return task.ref ?? `#${task.order}`;
3204
+ }
3205
+ function revertListLine(task) {
3206
+ const repos = task.repos.length === 1 && task.repos[0] === "." ? "" : ` (${task.repos.join(", ")})`;
3207
+ return `${revertTaskRef(task)} ${task.title}${repos}${task.dependent ? " (goes with it)" : ""}`;
3208
+ }
3104
3209
  function manualOverrideStopFirst(direction, label) {
3105
3210
  return `${label.charAt(0).toUpperCase()}${label.slice(1)} cannot be marked ${direction === "complete" ? "complete" : "not done"} while the plan is starting, running or waiting to resume, because the run could still move it on. Stop the run first, and mark it once everything has stopped.`;
3106
3211
  }
@@ -3114,7 +3219,7 @@ function noExecutorRefusal(type, manual, script) {
3114
3219
  }
3115
3220
 
3116
3221
  // src/services/runView.ts
3117
- var EMPTY_RUN = { tasks: [], runMerge: null, handoff: null, mergeResult: null, activity: IDLE_ACTIVITY };
3222
+ var EMPTY_RUN = { tasks: [], runMerge: null, handoff: null, mergeResult: null, activity: IDLE_ACTIVITY, escalations: [] };
3118
3223
 
3119
3224
  // src/models/AccountLimits.ts
3120
3225
  function hasAccountLimits(snapshot) {
@@ -3169,6 +3274,7 @@ function accountLimitsTitle(snapshot, time) {
3169
3274
  0 && (module.exports = {
3170
3275
  CHECKPOINT_TRUNCATE_LENGTH,
3171
3276
  DEFAULT_RUNNERS,
3277
+ DELEGATION_OFFERED,
3172
3278
  EMPTY_CONVERSATION,
3173
3279
  EMPTY_HOLD,
3174
3280
  EMPTY_RUN,
@@ -3180,6 +3286,7 @@ function accountLimitsTitle(snapshot, time) {
3180
3286
  PLANNED_WITH_LABEL,
3181
3287
  REPORT_PREVIEW_LINES,
3182
3288
  SEVERITY_LABEL,
3289
+ STALLED_LABEL,
3183
3290
  SUPERVISOR_LEVEL_LABEL,
3184
3291
  WAITS_FOR_APPROVAL_LABEL,
3185
3292
  accountLimitPercentText,
@@ -3187,6 +3294,7 @@ function accountLimitsTitle(snapshot, time) {
3187
3294
  accountLimitsOf,
3188
3295
  accountLimitsText,
3189
3296
  accountLimitsTitle,
3297
+ activityLabel,
3190
3298
  addAttemptUsage,
3191
3299
  addModelUsage,
3192
3300
  addPlannerUsage,
@@ -3214,6 +3322,7 @@ function accountLimitsTitle(snapshot, time) {
3214
3322
  cardEditable,
3215
3323
  checkOf,
3216
3324
  clampThinkingEffort,
3325
+ closeTurn,
3217
3326
  compactionText,
3218
3327
  confirmedOverride,
3219
3328
  contextMeterText,
@@ -3230,10 +3339,12 @@ function accountLimitsTitle(snapshot, time) {
3230
3339
  diffSummary,
3231
3340
  drainNext,
3232
3341
  editableWhileRunning,
3342
+ elapsedSince,
3233
3343
  endAttemptUsage,
3234
3344
  followTaskLog,
3235
3345
  followTurn,
3236
3346
  formatCost,
3347
+ formatElapsed,
3237
3348
  formatTokenCount,
3238
3349
  fromTranscript,
3239
3350
  handoffBaseLine,
@@ -3289,6 +3400,7 @@ function accountLimitsTitle(snapshot, time) {
3289
3400
  reconcileApprovals,
3290
3401
  reduceConversation,
3291
3402
  reduceTaskLog,
3403
+ repairWaitLabel,
3292
3404
  repairedLanded,
3293
3405
  repairedNotice,
3294
3406
  repeatingChecks,
@@ -3300,6 +3412,9 @@ function accountLimitsTitle(snapshot, time) {
3300
3412
  resumeLabel,
3301
3413
  resumeTime,
3302
3414
  resumedSessionWindow,
3415
+ revertEffect,
3416
+ revertListLine,
3417
+ revertTaskRef,
3303
3418
  runHoldsEditors,
3304
3419
  runnerToolSubject,
3305
3420
  savedPatchView,
@@ -3315,6 +3430,7 @@ function accountLimitsTitle(snapshot, time) {
3315
3430
  summarizeToolCall,
3316
3431
  takeAt,
3317
3432
  taskActionCommand,
3433
+ taskActivity,
3318
3434
  taskChatAvailable,
3319
3435
  taskLogCommands,
3320
3436
  taskLogHeaderView,