mixdog 0.9.37 → 0.9.39

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 (127) hide show
  1. package/package.json +9 -4
  2. package/scripts/abort-recovery-test.mjs +43 -2
  3. package/scripts/agent-tag-reuse-smoke.mjs +146 -6
  4. package/scripts/agent-terminal-reap-test.mjs +127 -0
  5. package/scripts/agent-trace-io-test.mjs +69 -0
  6. package/scripts/code-graph-disk-hit-test.mjs +224 -0
  7. package/scripts/dispatch-persist-recovery-test.mjs +141 -0
  8. package/scripts/execution-completion-dedup-test.mjs +157 -0
  9. package/scripts/execution-pending-resume-kick-test.mjs +57 -2
  10. package/scripts/execution-resume-esc-integration-test.mjs +174 -0
  11. package/scripts/explore-bench.mjs +101 -8
  12. package/scripts/explore-prompt-policy-test.mjs +156 -11
  13. package/scripts/find-fuzzy-hidden-test.mjs +122 -0
  14. package/scripts/internal-comms-bench-test.mjs +226 -0
  15. package/scripts/internal-comms-bench.mjs +185 -58
  16. package/scripts/internal-comms-smoke.mjs +171 -23
  17. package/scripts/live-worker-smoke.mjs +38 -2
  18. package/scripts/memory-cycle-routing-test.mjs +111 -0
  19. package/scripts/memory-rule-contract-test.mjs +93 -0
  20. package/scripts/notify-completion-mirror-test.mjs +73 -0
  21. package/scripts/output-style-smoke.mjs +2 -2
  22. package/scripts/rg-runner-test.mjs +240 -0
  23. package/scripts/routing-corpus-test.mjs +349 -0
  24. package/scripts/routing-corpus.mjs +211 -32
  25. package/scripts/session-orphan-sweep-test.mjs +83 -0
  26. package/scripts/session-sweep.mjs +266 -0
  27. package/scripts/steering-drain-buckets-test.mjs +179 -0
  28. package/scripts/tool-smoke.mjs +21 -13
  29. package/scripts/tool-tui-presentation-test.mjs +202 -0
  30. package/src/agents/heavy-worker/AGENT.md +10 -7
  31. package/src/agents/reviewer/AGENT.md +6 -4
  32. package/src/agents/worker/AGENT.md +7 -5
  33. package/src/rules/agent/00-common.md +4 -4
  34. package/src/rules/agent/00-core.md +11 -14
  35. package/src/rules/agent/20-skip-protocol.md +3 -3
  36. package/src/rules/agent/30-explorer.md +56 -48
  37. package/src/rules/agent/40-cycle1-agent.md +15 -24
  38. package/src/rules/agent/41-cycle2-agent.md +33 -57
  39. package/src/rules/agent/42-cycle3-agent.md +28 -42
  40. package/src/rules/lead/01-general.md +7 -10
  41. package/src/rules/lead/lead-brief.md +11 -14
  42. package/src/rules/lead/lead-tool.md +6 -5
  43. package/src/rules/shared/01-tool.md +44 -41
  44. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +37 -1
  45. package/src/runtime/agent/orchestrator/agent-trace-io.mjs +20 -5
  46. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +31 -8
  47. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +13 -7
  48. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +21 -1
  49. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +6 -6
  50. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +17 -38
  51. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +5 -4
  52. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +119 -3
  53. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +17 -8
  54. package/src/runtime/agent/orchestrator/session/context-utils.mjs +270 -78
  55. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +2 -1
  56. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +18 -52
  57. package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +123 -0
  58. package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +15 -2
  59. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +41 -2
  60. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +1 -1
  61. package/src/runtime/agent/orchestrator/session/store.mjs +339 -63
  62. package/src/runtime/agent/orchestrator/stall-policy.mjs +37 -0
  63. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +12 -1
  64. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +25 -20
  65. package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +6 -2
  66. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +118 -53
  67. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +106 -29
  68. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +8 -1
  69. package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +4 -2
  70. package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +3 -1
  71. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +4 -1
  72. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +33 -2
  73. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +151 -64
  74. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +37 -13
  75. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +84 -49
  76. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +172 -23
  77. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +3 -0
  78. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +68 -5
  79. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +17 -3
  80. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +24 -10
  81. package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +6 -3
  82. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +4 -7
  83. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +1 -0
  84. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +1 -1
  85. package/src/runtime/memory/lib/memory-cycle2-gate.mjs +4 -4
  86. package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +4 -3
  87. package/src/runtime/memory/lib/memory-cycle3.mjs +12 -2
  88. package/src/runtime/shared/tool-primitives.mjs +4 -1
  89. package/src/runtime/shared/tool-status.mjs +27 -0
  90. package/src/runtime/shared/tool-surface.mjs +6 -3
  91. package/src/session-runtime/config-helpers.mjs +14 -0
  92. package/src/session-runtime/context-status.mjs +1 -0
  93. package/src/session-runtime/effort.mjs +6 -2
  94. package/src/session-runtime/model-recency.mjs +5 -2
  95. package/src/session-runtime/provider-models.mjs +3 -3
  96. package/src/session-runtime/runtime-core.mjs +78 -10
  97. package/src/session-runtime/tool-catalog.mjs +34 -0
  98. package/src/session-runtime/warmup-schedulers.mjs +7 -1
  99. package/src/standalone/agent-tool/notify.mjs +13 -0
  100. package/src/standalone/agent-tool.mjs +45 -69
  101. package/src/standalone/explore-tool.mjs +6 -7
  102. package/src/tui/App.jsx +31 -0
  103. package/src/tui/app/model-options.mjs +5 -3
  104. package/src/tui/app/model-picker.mjs +12 -24
  105. package/src/tui/app/transcript-window.mjs +1 -0
  106. package/src/tui/components/ToolExecution.jsx +11 -6
  107. package/src/tui/components/TranscriptItem.jsx +1 -1
  108. package/src/tui/components/tool-execution/surface-detail.mjs +24 -10
  109. package/src/tui/components/tool-execution/text-format.mjs +10 -19
  110. package/src/tui/dist/index.mjs +533 -143
  111. package/src/tui/engine/agent-job-feed.mjs +153 -16
  112. package/src/tui/engine/agent-response-tail.mjs +68 -0
  113. package/src/tui/engine/notification-plan.mjs +16 -0
  114. package/src/tui/engine/queue-helpers.mjs +8 -0
  115. package/src/tui/engine/session-api.mjs +8 -2
  116. package/src/tui/engine/session-flow.mjs +34 -2
  117. package/src/tui/engine/tool-card-results.mjs +54 -32
  118. package/src/tui/engine/tool-result-status.mjs +75 -21
  119. package/src/tui/engine/turn.mjs +83 -43
  120. package/src/tui/engine.mjs +63 -2
  121. package/src/workflows/bench/WORKFLOW.md +25 -35
  122. package/src/workflows/default/WORKFLOW.md +38 -32
  123. package/src/workflows/solo/WORKFLOW.md +19 -22
  124. package/scripts/_jitter-fuzz.mjs +0 -44410
  125. package/scripts/_jitter-fuzz2.mjs +0 -44400
  126. package/scripts/_jitter-probe.mjs +0 -44397
  127. package/scripts/_jp2.mjs +0 -45614
@@ -86,7 +86,7 @@ function statusCopy(name, label, count, doneCount, pending, isError, args = {})
86
86
  // dropping the pad just normalizes the spacing.
87
87
  return formatToolActionHeader(name, args, { pending, count });
88
88
  }
89
- export function ToolExecution({ name, args, result, rawResult, isError, errorCount, callErrorCount, expanded, columns = 80, attached = false, count = 1, completedCount = 0, startedAt = 0, completedAt = 0, aggregate = false, categories = {}, doneCategories = null, headerFinalized = true, deferredDisplayReady = false }) {
89
+ export function ToolExecution({ name, args, result, rawResult, isError, errorCount, callErrorCount, exitErrorCount, expanded, columns = 80, attached = false, count = 1, completedCount = 0, startedAt = 0, completedAt = 0, aggregate = false, categories = {}, doneCategories = null, headerFinalized = true, deferredDisplayReady = false, agentResponseAggregate = false }) {
90
90
  const rowWidth = Math.max(1, Number(columns || 80));
91
91
  const groupCount = Math.max(1, Number(count || 1));
92
92
  const doneCount = Math.max(0, Math.min(groupCount, Number(completedCount || (result == null ? 0 : groupCount))));
@@ -138,6 +138,9 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
138
138
  // paint the dot red. Fall back to 0 (never `isError`) when the engine did not
139
139
  // supply a call-error count so a result failure can't leak into the dot.
140
140
  const callFailedCount = clampFailureCount(callErrorCount, groupCount, false);
141
+ // Shell command-exits (ran, non-zero exit). Counted separately so the dot
142
+ // paints the neutral warning "Exit" color instead of red or green success.
143
+ const exitFailedCount = clampFailureCount(exitErrorCount, groupCount, false);
141
144
  const displayGroupCount = groupCount;
142
145
  const displayCategories = normalizeCountMap(categories || {});
143
146
  // In the DONE state, count only successful calls: error-terminated calls are
@@ -212,7 +215,7 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
212
215
  const aggregateTerminalStatus = pending
213
216
  ? 'running'
214
217
  : (resultTerminalStatus(rt) || (isError || failedCount > 0 ? 'failed' : 'completed'));
215
- const dotColor = toolStatusColor({ pending, groupCount, callFailedCount, terminalStatus: aggregateTerminalStatus });
218
+ const dotColor = toolStatusColor({ pending, groupCount, callFailedCount, exitFailedCount, terminalStatus: aggregateTerminalStatus });
216
219
  const dotText = pending && !blinkOn ? ' ' : TURN_MARKER;
217
220
  const gutter = 2;
218
221
  const showHeaderExpandHint = hasRawResult;
@@ -310,7 +313,7 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
310
313
  const firstResultLine = hasDisplayResult ? String(lines[0] ?? '') : '';
311
314
  const firstResultLineClipped = hasDisplayBody && stringWidth(firstResultLine) > maxResultChars;
312
315
  const hasHiddenDetail = !pending && hasDisplayBody && (totalLines > 1 || firstResultLineClipped || Boolean(resultSummary));
313
- const shellStatus = isShellSurface ? shellDisplayStatus({ pending, failedCount, isError, result: displayedResultText }) : '';
316
+ const shellStatus = isShellSurface ? shellDisplayStatus({ pending, failedCount, exitFailedCount, isError, result: displayedResultText }) : '';
314
317
  const shellElapsed = isShellSurface ? (shellResultElapsed(displayedResultText) || elapsed) : '';
315
318
  const backgroundElapsed = backgroundMeta
316
319
  ? backgroundTaskElapsed(backgroundMeta, elapsed)
@@ -384,7 +387,9 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
384
387
  const showRawResult = expanded && (hasDisplayBody || hasRawResult)
385
388
  && (!isBackgroundMetadataResult || hasRawResult);
386
389
  const detailLines = showRawResult
387
- ? (hasDisplayBody ? lines : (rawRt ? stripLeadingStatusMarkerLines(rawRt.split('\n')) : []))
390
+ ? (agentResponseAggregate && hasRawResult
391
+ ? stripLeadingStatusMarkerLines(rawRt.split('\n'))
392
+ : (hasDisplayBody ? lines : (rawRt ? stripLeadingStatusMarkerLines(rawRt.split('\n')) : [])))
388
393
  : (collapsedDetail ? [collapsedDetail] : []);
389
394
  const isPendingPlaceholderDetail = !showRawResult && Boolean(pendingDetailPlaceholder);
390
395
  const detailColor = isPendingPlaceholderDetail ? theme.subtle : theme.text;
@@ -426,7 +431,7 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
426
431
  const keepAgentDetail = (isError || agentFailureText) && !(agentHeaderFailure && !agentSurfaceBrief);
427
432
  visibleDetailLines = keepAgentDetail ? [agentDetailLine] : [];
428
433
  }
429
- const finalStatusColor = toolStatusColor({ pending, groupCount, callFailedCount, terminalStatus });
434
+ const finalStatusColor = toolStatusColor({ pending, groupCount, callFailedCount, exitFailedCount, terminalStatus });
430
435
  const dotColor = finalStatusColor;
431
436
  // Agent surface cards use directional markers: `←` for requests going OUT
432
437
  // (spawn/send/etc.) and `→` for the response coming back IN. Background
@@ -446,7 +451,7 @@ export function ToolExecution({ name, args, result, rawResult, isError, errorCou
446
451
  const markerText = isDirectionalMarker ? `${markerGlyph} ` : markerGlyph;
447
452
  const dotText = pending && !blinkOn ? ' ' : markerText;
448
453
  let labelText;
449
- if (isAgentResponse) labelText = agentResponseTitle(parsedArgs);
454
+ if (isAgentResponse) labelText = agentResponseTitle(parsedArgs, displayGroupCount);
450
455
  else if (isBackgroundResponse) labelText = backgroundTaskResultTitle(normalizedName, backgroundMeta || parsedArgs);
451
456
  else if (isBackgroundMetadataResult) labelText = backgroundTaskActionTitle(normalizedName, backgroundMeta);
452
457
  else if (isShellSurface) labelText = shellHeader(shellStatus, displayGroupCount);
@@ -77,7 +77,7 @@ export const Item = React.memo(function Item({ item, prevKind, columns, toolOutp
77
77
  node = <ToolHookDenialCard item={item} columns={columns} />;
78
78
  break;
79
79
  }
80
- node = <ToolExecution name={item.name} args={item.args} result={item.result} rawResult={item.rawResult} isError={item.isError} errorCount={item.errorCount} callErrorCount={item.callErrorCount} expanded={toolOutputExpanded || item.expanded} columns={columns} attached={false} count={item.count} completedCount={item.completedCount} startedAt={item.startedAt} completedAt={item.completedAt} aggregate={item.aggregate} categories={item.categories} doneCategories={item.doneCategories} headerFinalized={item.headerFinalized} deferredDisplayReady={item.deferredDisplayReady} />;
80
+ node = <ToolExecution name={item.name} args={item.args} result={item.result} rawResult={item.rawResult} isError={item.isError} errorCount={item.errorCount} callErrorCount={item.callErrorCount} exitErrorCount={item.exitErrorCount} expanded={toolOutputExpanded || item.expanded} columns={columns} attached={false} count={item.count} completedCount={item.completedCount} startedAt={item.startedAt} completedAt={item.completedAt} aggregate={item.aggregate} categories={item.categories} doneCategories={item.doneCategories} headerFinalized={item.headerFinalized} deferredDisplayReady={item.deferredDisplayReady} agentResponseAggregate={item.agentResponseAggregate} />;
81
81
  break;
82
82
  }
83
83
  case 'notice':
@@ -21,11 +21,18 @@ export function isShellTool(normalizedName, label = '') {
21
21
  return n === 'shell' || n === 'bash' || n === 'bash_session' || n === 'shell_command' || n === 'job_wait' || l === 'run';
22
22
  }
23
23
 
24
- export function shellDisplayStatus({ pending = false, failedCount = 0, isError = false, result = '' } = {}) {
24
+ export function shellDisplayStatus({ pending = false, failedCount = 0, exitFailedCount = 0, isError = false, result = '' } = {}) {
25
25
  const status = shellResultStatus(result);
26
26
  if (pending || /^(running|pending|queued)$/.test(status)) return 'running';
27
27
  if (/^cancel/.test(status)) return 'cancelled';
28
- if (/^(failed|error|killed|timeout)$/.test(status) || isError || failedCount > 0) return 'failed';
28
+ if (/^(failed|error|killed|timeout)$/.test(status)) return 'failed';
29
+ // A command that RAN but exited non-zero is a command-exit, not a real
30
+ // failure: render the neutral "Exit" state unless there is ALSO a real
31
+ // tool-call/result failure in the group.
32
+ const realFailed = Math.max(0, Number(failedCount) - Number(exitFailedCount));
33
+ if (realFailed > 0) return 'failed';
34
+ if (Number(exitFailedCount) > 0) return 'exit';
35
+ if (isError || failedCount > 0) return 'failed';
29
36
  return 'completed';
30
37
  }
31
38
 
@@ -98,7 +105,9 @@ export function joinActionAgent(action, agent) {
98
105
  return agent ? `${action} ${agent}` : action;
99
106
  }
100
107
 
101
- export function agentResponseTitle(args) {
108
+ export function agentResponseTitle(args, count = 1) {
109
+ const total = Math.max(1, Number(count) || 1);
110
+ if (total > 1) return `Responses ${total} agents`;
102
111
  const name = titleizeAgentName(args?.agent || args?.subagent_type || args?.name || '');
103
112
  // The agent + model identify the responder; the response summary itself
104
113
  // is hidden in the collapsed card (ctrl+o expand still shows the full body).
@@ -392,14 +401,19 @@ export function clampFailureCount(errorCount, groupCount, isError) {
392
401
  // cancelled -> theme.warning
393
402
  // The RED/orange failure color is driven ONLY by real tool-call errors
394
403
  // (`callFailedCount` — backend isError / error toolKind), NOT by command/result
395
- // failures like a shell non-zero exit or a `[status: failed]` result. Those
396
- // keep the card's L2 detail showing "Failed" but leave the dot on the success
397
- // color. `terminalStatus` is still consulted so a cancelled card stays warning.
398
- export function toolStatusColor({ pending, groupCount, callFailedCount = 0, terminalStatus = '' }) {
404
+ // failures like a `[status: failed]` result. A shell command-exit
405
+ // (`exitFailedCount`) is its own distinct neutral state: warning color, never
406
+ // red. `terminalStatus` is still consulted so a cancelled card stays warning.
407
+ export function toolStatusColor({ pending, groupCount, callFailedCount = 0, exitFailedCount = 0, terminalStatus = '' }) {
399
408
  if (pending) return theme.text;
400
409
  const status = normalizeTerminalStatus(terminalStatus);
401
410
  if (status === 'cancelled') return theme.warning;
402
- if (callFailedCount <= 0) return theme.success;
403
- if (groupCount > 1 && callFailedCount < groupCount) return theme.mixdogOrange || theme.warning;
404
- return theme.error;
411
+ if (status === 'denied') return theme.warning;
412
+ if (callFailedCount > 0) {
413
+ if (groupCount > 1 && callFailedCount < groupCount) return theme.mixdogOrange || theme.warning;
414
+ return theme.error;
415
+ }
416
+ // Command-exit(s) with no real tool-call failure: distinct warning state.
417
+ if (exitFailedCount > 0) return theme.warning;
418
+ return theme.success;
405
419
  }
@@ -8,6 +8,10 @@ import { displayWidth } from '../../display-width.mjs';
8
8
  import { theme } from '../../theme.mjs';
9
9
  import { formatElapsed } from '../../time-format.mjs';
10
10
  import stripAnsi from 'strip-ansi';
11
+ import {
12
+ normalizeToolTerminalStatus,
13
+ toolResultTerminalStatus,
14
+ } from '../../../runtime/shared/tool-status.mjs';
11
15
 
12
16
  export const MIN_RESULT_LINE_CHARS = 24;
13
17
  // Hard cap for the collapsed result detail row (the second line under the ⎿
@@ -108,37 +112,24 @@ export function shellResultStatus(value) {
108
112
  }
109
113
 
110
114
  export function normalizeTerminalStatus(value) {
111
- const raw = String(value || '').trim().toLowerCase();
112
- if (!raw) return '';
113
- if (/^(running|pending|queued|in_progress|in-progress)$/.test(raw)) return 'running';
114
- if (/^(completed|complete|done|success|succeeded|ok)$/.test(raw)) return 'completed';
115
- if (/^(failed|fail|error|errored|timeout|timed_out|killed)$/.test(raw)) return 'failed';
116
- if (/^(cancelled|canceled|cancel)$/.test(raw)) return 'cancelled';
117
- return '';
115
+ return normalizeToolTerminalStatus(value);
118
116
  }
119
117
 
120
118
  export function displayTerminalStatus(value) {
119
+ // 'exit' is a shell-only pseudo-status (command RAN but exited non-zero); it
120
+ // is intentionally NOT a normalized terminal status so it never colors red.
121
+ if (String(value || '').trim().toLowerCase() === 'exit') return 'Exit';
121
122
  const status = normalizeTerminalStatus(value);
122
123
  if (status === 'running') return 'Running';
123
124
  if (status === 'completed') return 'Finished';
124
125
  if (status === 'failed') return 'Failed';
125
126
  if (status === 'cancelled') return 'Cancelled';
127
+ if (status === 'denied') return 'Denied';
126
128
  return '';
127
129
  }
128
130
 
129
131
  export function resultTerminalStatus(value) {
130
- const text = String(value || '');
131
- const tagged = text.match(/<status[^>]*>([\s\S]*?)<\/status>/i)?.[1]?.trim();
132
- if (tagged) return normalizeTerminalStatus(tagged);
133
- const bracketed = text.match(/^\[status:\s*([^\]]*)\]/mi)?.[1]?.trim();
134
- if (bracketed) return normalizeTerminalStatus(bracketed);
135
- // Loose inline `status: x` / `state: x` matches are a last-resort fallback —
136
- // prefer the engine-controlled `<status>` tag or `[status: …]` marker above.
137
- // A loose match can false-positive on prose that happens to start with
138
- // "status:" (rare, but shellResultStatus below already owns real shell
139
- // output parsing; this fallback stays narrow and unchanged in behavior).
140
- const inline = text.match(/^(?:status|state):\s*([^\s·,;]+)/mi)?.[1]?.trim();
141
- return normalizeTerminalStatus(inline);
132
+ return toolResultTerminalStatus(value);
142
133
  }
143
134
 
144
135
  const LEADING_STATUS_MARKER_LINE_RE = /^\[status:\s*[^\]]*\]\s*$/i;