@kenkaiiii/ggcoder 4.3.200 → 4.3.201

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 (86) hide show
  1. package/dist/core/compaction/compactor.d.ts +11 -0
  2. package/dist/core/compaction/compactor.d.ts.map +1 -1
  3. package/dist/core/compaction/compactor.js +14 -0
  4. package/dist/core/compaction/compactor.js.map +1 -1
  5. package/dist/core/compaction/compactor.test.js +12 -1
  6. package/dist/core/compaction/compactor.test.js.map +1 -1
  7. package/dist/tools/bash.d.ts.map +1 -1
  8. package/dist/tools/bash.js +1 -0
  9. package/dist/tools/bash.js.map +1 -1
  10. package/dist/tools/edit.d.ts.map +1 -1
  11. package/dist/tools/edit.js +1 -0
  12. package/dist/tools/edit.js.map +1 -1
  13. package/dist/tools/edit.test.js +4 -0
  14. package/dist/tools/edit.test.js.map +1 -1
  15. package/dist/tools/enter-plan.d.ts.map +1 -1
  16. package/dist/tools/enter-plan.js +1 -0
  17. package/dist/tools/enter-plan.js.map +1 -1
  18. package/dist/tools/exit-plan.d.ts.map +1 -1
  19. package/dist/tools/exit-plan.js +1 -0
  20. package/dist/tools/exit-plan.js.map +1 -1
  21. package/dist/tools/subagent.d.ts.map +1 -1
  22. package/dist/tools/subagent.js +2 -1
  23. package/dist/tools/subagent.js.map +1 -1
  24. package/dist/tools/tasks.d.ts.map +1 -1
  25. package/dist/tools/tasks.js +1 -0
  26. package/dist/tools/tasks.js.map +1 -1
  27. package/dist/tools/write.d.ts.map +1 -1
  28. package/dist/tools/write.js +1 -0
  29. package/dist/tools/write.js.map +1 -1
  30. package/dist/tools/write.test.js +4 -0
  31. package/dist/tools/write.test.js.map +1 -1
  32. package/dist/ui/App.d.ts +4 -0
  33. package/dist/ui/App.d.ts.map +1 -1
  34. package/dist/ui/App.js +22 -38
  35. package/dist/ui/App.js.map +1 -1
  36. package/dist/ui/components/ActivityIndicator.d.ts +9 -1
  37. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  38. package/dist/ui/components/ActivityIndicator.js +123 -35
  39. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  40. package/dist/ui/components/AnimationContext.d.ts +8 -2
  41. package/dist/ui/components/AnimationContext.d.ts.map +1 -1
  42. package/dist/ui/components/AnimationContext.js +94 -16
  43. package/dist/ui/components/AnimationContext.js.map +1 -1
  44. package/dist/ui/components/CompactionNotice.d.ts +5 -1
  45. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  46. package/dist/ui/components/CompactionNotice.js +4 -6
  47. package/dist/ui/components/CompactionNotice.js.map +1 -1
  48. package/dist/ui/components/Footer.d.ts.map +1 -1
  49. package/dist/ui/components/Footer.js +5 -6
  50. package/dist/ui/components/Footer.js.map +1 -1
  51. package/dist/ui/components/InputArea.d.ts.map +1 -1
  52. package/dist/ui/components/InputArea.js +29 -12
  53. package/dist/ui/components/InputArea.js.map +1 -1
  54. package/dist/ui/components/ServerToolExecution.d.ts +1 -0
  55. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
  56. package/dist/ui/components/ServerToolExecution.js +21 -2
  57. package/dist/ui/components/ServerToolExecution.js.map +1 -1
  58. package/dist/ui/components/Spinner.d.ts +3 -1
  59. package/dist/ui/components/Spinner.d.ts.map +1 -1
  60. package/dist/ui/components/Spinner.js +10 -4
  61. package/dist/ui/components/Spinner.js.map +1 -1
  62. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  63. package/dist/ui/components/SubAgentPanel.js +3 -4
  64. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  65. package/dist/ui/components/ToolExecution.d.ts +2 -0
  66. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  67. package/dist/ui/components/ToolExecution.js +24 -5
  68. package/dist/ui/components/ToolExecution.js.map +1 -1
  69. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
  70. package/dist/ui/components/ToolGroupExecution.js +23 -2
  71. package/dist/ui/components/ToolGroupExecution.js.map +1 -1
  72. package/dist/ui/components/ToolUseLoader.d.ts +4 -2
  73. package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
  74. package/dist/ui/components/ToolUseLoader.js +3 -3
  75. package/dist/ui/components/ToolUseLoader.js.map +1 -1
  76. package/dist/ui/components/index.d.ts +1 -1
  77. package/dist/ui/components/index.d.ts.map +1 -1
  78. package/dist/ui/components/index.js +1 -1
  79. package/dist/ui/components/index.js.map +1 -1
  80. package/dist/ui/hooks/useBlink.d.ts.map +1 -1
  81. package/dist/ui/hooks/useBlink.js +3 -4
  82. package/dist/ui/hooks/useBlink.js.map +1 -1
  83. package/dist/ui/render.d.ts.map +1 -1
  84. package/dist/ui/render.js +3 -2
  85. package/dist/ui/render.js.map +1 -1
  86. package/package.json +4 -4
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useMemo, useRef } from "react";
2
+ import React, { useEffect, useMemo, useRef, useState } from "react";
3
3
  import { Text, Box } from "ink";
4
4
  import { useTheme } from "../theme/theme.js";
5
5
  import { SPINNER_FRAMES, SPINNER_INTERVAL, REDUCED_MOTION_DOT } from "../spinner-frames.js";
6
6
  import { PLANNING_PHRASES, selectPhrases, shuffleArray } from "../activity-phrases.js";
7
- import { useAnimationTick, useAnimationActive, deriveFrame, useReducedMotion, } from "./AnimationContext.js";
7
+ import { useFocusedAnimation, deriveFrame, useReducedMotion, useTerminalFocus, } from "./AnimationContext.js";
8
8
  // ── Color pulse cycle ─────────────────────────────────────
9
9
  const PULSE_COLORS = [
10
10
  "#60a5fa", // blue
@@ -25,13 +25,39 @@ const PLAN_PULSE_COLORS = [
25
25
  "#d97706", // amber dark
26
26
  ];
27
27
  const PULSE_INTERVAL = 400;
28
+ // ── Low-churn liveness ────────────────────────────────────
29
+ const LOW_CHURN_INTERVAL = 1000;
30
+ const LOW_CHURN_PHRASE_INTERVAL = 10_000;
31
+ const LOW_CHURN_COLOR_INTERVAL = 2000;
32
+ const HEARTBEAT_DOT_COUNT = 3;
33
+ const HEARTBEAT_ACTIVE_INDEXES = [0, 1, 2, 1];
28
34
  // ── Ellipsis animation ────────────────────────────────────
29
35
  const ELLIPSIS_FRAMES = ["", ".", "..", "..."];
30
36
  const ELLIPSIS_INTERVAL = 500;
31
37
  // ── Phrase rotation ───────────────────────────────────────
32
38
  const WAITING_PHRASE_INTERVAL = 3000;
33
39
  const OTHER_PHRASE_INTERVAL = 4000;
34
- // ── Formatting helpers ────────────────────────────────────
40
+ export function getActivityAccentColors(themeName) {
41
+ if (themeName.includes("ansi")) {
42
+ return {
43
+ duration: "#55ffff",
44
+ tokens: "#ff55ff",
45
+ thinking: "#55ff55",
46
+ };
47
+ }
48
+ if (themeName.startsWith("light")) {
49
+ return {
50
+ duration: "#2563eb",
51
+ tokens: "#c026d3",
52
+ thinking: "#16a34a",
53
+ };
54
+ }
55
+ return {
56
+ duration: "#38bdf8",
57
+ tokens: "#f472b6",
58
+ thinking: "#4ade80",
59
+ };
60
+ }
35
61
  function formatElapsed(ms) {
36
62
  const totalSec = Math.round(ms / 1000);
37
63
  if (totalSec < 60)
@@ -48,10 +74,12 @@ function formatTokenCount(n) {
48
74
  return String(n);
49
75
  }
50
76
  export function buildMetaParts(elapsedMs, thinkingMs, isThinking, tokenEstimate) {
51
- const parts = [];
52
- parts.push(formatElapsed(elapsedMs));
53
- if (tokenEstimate > 0)
54
- parts.push(`↓ ${formatTokenCount(tokenEstimate)} tokens`);
77
+ const meta = buildStructuredMetaParts(elapsedMs, thinkingMs, isThinking, tokenEstimate);
78
+ const prefix = [meta.duration, meta.tokens].filter(Boolean).join(" · ");
79
+ return { prefix, thinking: meta.thinking };
80
+ }
81
+ function buildStructuredMetaParts(elapsedMs, thinkingMs, isThinking, tokenEstimate) {
82
+ const tokens = tokenEstimate > 0 ? `↓ ${formatTokenCount(tokenEstimate)} tokens` : "";
55
83
  const thinking = isThinking
56
84
  ? thinkingMs >= 1000
57
85
  ? `thinking for ${formatElapsed(thinkingMs)}`
@@ -59,7 +87,11 @@ export function buildMetaParts(elapsedMs, thinkingMs, isThinking, tokenEstimate)
59
87
  : thinkingMs >= 1000
60
88
  ? `thought for ${formatElapsed(thinkingMs)}`
61
89
  : "";
62
- return { prefix: parts.join(" · "), thinking };
90
+ return {
91
+ duration: formatElapsed(elapsedMs),
92
+ tokens,
93
+ thinking,
94
+ };
63
95
  }
64
96
  // ── Shimmer effect ────────────────────────────────────────
65
97
  const SHIMMER_WIDTH = 3;
@@ -75,6 +107,31 @@ const ShimmerText = ({ text, color, shimmerPos, }) => (_jsx(Text, { children: te
75
107
  const isBright = Math.abs(i - shimmerPos) <= SHIMMER_WIDTH;
76
108
  return (_jsx(Text, { bold: isBright, color: color, dimColor: !isBright, children: char }, i));
77
109
  }) }));
110
+ function useLowChurnFrame(enabled) {
111
+ const [frame, setFrame] = useState(0);
112
+ useEffect(() => {
113
+ if (!enabled)
114
+ return undefined;
115
+ const timer = setInterval(() => {
116
+ setFrame((current) => current + 1);
117
+ }, LOW_CHURN_INTERVAL);
118
+ return () => clearInterval(timer);
119
+ }, [enabled]);
120
+ return enabled ? frame : 0;
121
+ }
122
+ function HeartbeatGlyph({ activeIndex, color }) {
123
+ return (_jsxs(Text, { children: [Array.from({ length: HEARTBEAT_DOT_COUNT }, (_, index) => {
124
+ const active = index === activeIndex;
125
+ return (_jsx(Text, { bold: active, color: color, dimColor: !active, children: active ? "●" : "·" }, index));
126
+ }), " "] }));
127
+ }
128
+ function ActivityMetaText({ colors, isThinking, meta, mutedColor, }) {
129
+ if (!meta.duration && !meta.tokens && !meta.thinking)
130
+ return null;
131
+ const hasTokenSeparator = !!meta.duration && !!meta.tokens;
132
+ const hasThinkingSeparator = !!meta.thinking && (!!meta.duration || !!meta.tokens);
133
+ return (_jsxs(Text, { children: [_jsx(Text, { color: mutedColor, children: " (" }), meta.duration && (_jsx(Text, { color: colors.duration, bold: true, children: meta.duration })), hasTokenSeparator && _jsx(Text, { color: mutedColor, children: " · " }), meta.tokens && (_jsx(Text, { color: colors.tokens, bold: true, children: meta.tokens })), hasThinkingSeparator && _jsx(Text, { color: mutedColor, children: " · " }), meta.thinking && (_jsx(Text, { color: isThinking ? colors.thinking : mutedColor, bold: isThinking, children: meta.thinking })), _jsx(Text, { color: mutedColor, children: ")" })] }));
134
+ }
78
135
  const RETRY_REASON_LABELS = {
79
136
  overloaded: "Provider overloaded",
80
137
  rate_limit: "Rate limited",
@@ -83,18 +140,23 @@ const RETRY_REASON_LABELS = {
83
140
  stream_stall: "Provider stream stalled",
84
141
  overflow_compact: "Context overflow — compacting",
85
142
  };
86
- export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef, thinkingMs, isThinking, thinkingEnabled = false, tokenEstimate, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, userMessage = "", activeToolNames = [], planMode, retryInfo, planDone = 0, planTotal = 0, phrases: phrasesByPhase, pulseColors: pulseColorsOverride, }) {
143
+ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef, thinkingMs, isThinking, thinkingEnabled = false, tokenEstimate, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, userMessage = "", activeToolNames = [], planMode, retryInfo, planDone = 0, planTotal = 0, phrases: phrasesByPhase, pulseColors: pulseColorsOverride, staticDisplay = false, }) {
87
144
  const theme = useTheme();
88
145
  const reducedMotion = useReducedMotion();
89
146
  const thinkingShimmerColor = getThinkingShimmerColor(theme.name);
90
- // Smooth elapsed time: compute from runStartRef on each animation tick
91
- // instead of using the 1000ms state update (which looks jerky).
92
- const elapsedMs = runStartRef?.current && phase !== "idle" ? Date.now() - runStartRef.current : elapsedMsProp;
93
- // Use the global animation tick instead of a local timer.
94
- // This eliminates a duplicate 100ms setInterval that was causing
95
- // independent re-renders on top of the global AnimationProvider tick.
96
- useAnimationActive();
97
- const tick = useAnimationTick();
147
+ const accentColors = getActivityAccentColors(theme.name);
148
+ // Full animation uses the shared 100ms clock. Static display deliberately
149
+ // avoids that clock and uses a tiny 1s heartbeat instead.
150
+ const canAnimate = phase !== "idle" && !reducedMotion;
151
+ const { active: fullAnimationActive, tick } = useFocusedAnimation(canAnimate && !staticDisplay);
152
+ const focused = useTerminalFocus(canAnimate && staticDisplay);
153
+ const lowChurnActive = canAnimate && staticDisplay && focused;
154
+ const lowChurnFrame = useLowChurnFrame(lowChurnActive);
155
+ // Smooth elapsed time only in full-animation mode. Low-churn mode uses the
156
+ // existing 1s timer from useAgentLoop so the status line repaints slowly.
157
+ const elapsedMs = runStartRef?.current && phase !== "idle" && fullAnimationActive
158
+ ? Date.now() - runStartRef.current
159
+ : elapsedMsProp;
98
160
  // ── Smooth token counter animation ─────────────────────
99
161
  // Smooths the TOTAL token estimate (real + estimated) so it never
100
162
  // jumps — whether tokens arrive from streaming deltas or from
@@ -107,7 +169,7 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
107
169
  const currentChars = charCountRefProp?.current ?? 0;
108
170
  const realTokens = realTokensAccumRefProp?.current ?? 0;
109
171
  const targetTokens = charCountRefProp ? realTokens + Math.ceil(currentChars / 4) : tokenEstimate;
110
- if (reducedMotion || !charCountRefProp) {
172
+ if (!fullAnimationActive || !charCountRefProp) {
111
173
  displayedTokensRef.current = targetTokens;
112
174
  }
113
175
  else {
@@ -136,13 +198,27 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
136
198
  }
137
199
  }
138
200
  const smoothTokenEstimate = displayedTokensRef.current;
139
- // Derive all animation frames from the single tick counter
140
- const spinnerFrame = reducedMotion
141
- ? 0
142
- : deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length);
143
- const pulseColors = planMode ? PLAN_PULSE_COLORS : (pulseColorsOverride ?? PULSE_COLORS);
144
- const colorFrame = deriveFrame(tick, PULSE_INTERVAL, pulseColors.length);
145
- const ellipsisFrame = deriveFrame(tick, ELLIPSIS_INTERVAL, ELLIPSIS_FRAMES.length);
201
+ // Derive all animation frames from the single tick counter.
202
+ const spinnerFrame = fullAnimationActive
203
+ ? deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length)
204
+ : 0;
205
+ const pulseColors = planMode || !pulseColorsOverride || pulseColorsOverride.length === 0
206
+ ? planMode
207
+ ? PLAN_PULSE_COLORS
208
+ : PULSE_COLORS
209
+ : pulseColorsOverride;
210
+ const colorFrame = fullAnimationActive
211
+ ? deriveFrame(tick, PULSE_INTERVAL, pulseColors.length)
212
+ : lowChurnActive
213
+ ? Math.floor((lowChurnFrame * LOW_CHURN_INTERVAL) / LOW_CHURN_COLOR_INTERVAL) %
214
+ pulseColors.length
215
+ : 0;
216
+ const ellipsisFrame = fullAnimationActive
217
+ ? deriveFrame(tick, ELLIPSIS_INTERVAL, ELLIPSIS_FRAMES.length)
218
+ : lowChurnActive
219
+ ? lowChurnFrame % ELLIPSIS_FRAMES.length
220
+ : 0;
221
+ const heartbeatFrame = lowChurnActive ? lowChurnFrame % HEARTBEAT_ACTIVE_INDEXES.length : 0;
146
222
  // Phrase rotation — pick phrases based on phase + user message + active tools, shuffle, rotate
147
223
  const sortedActiveToolNames = [...activeToolNames].sort();
148
224
  const toolNamesKey = sortedActiveToolNames.join(",");
@@ -152,19 +228,31 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
152
228
  : planMode && phase === "waiting"
153
229
  ? PLANNING_PHRASES
154
230
  : selectPhrases(phase, userMessage, activeToolNames, thinkingEnabled)), [phase, userMessage, toolNamesKey, planMode, overridePhrases, thinkingEnabled]);
155
- const phraseInterval = phase === "waiting" ? WAITING_PHRASE_INTERVAL : OTHER_PHRASE_INTERVAL;
156
- const phraseIndex = Math.floor((tick * SHIMMER_INTERVAL) / phraseInterval) % phrases.length;
157
- const spinnerColor = pulseColors[colorFrame];
231
+ const phraseInterval = lowChurnActive
232
+ ? LOW_CHURN_PHRASE_INTERVAL
233
+ : phase === "waiting"
234
+ ? WAITING_PHRASE_INTERVAL
235
+ : OTHER_PHRASE_INTERVAL;
236
+ const phraseIndex = fullAnimationActive
237
+ ? Math.floor((tick * SHIMMER_INTERVAL) / phraseInterval) % phrases.length
238
+ : lowChurnActive
239
+ ? Math.floor((lowChurnFrame * LOW_CHURN_INTERVAL) / phraseInterval) % phrases.length
240
+ : 0;
241
+ const spinnerColor = pulseColors[colorFrame] ?? pulseColors[0] ?? theme.spinnerColor;
242
+ const heartbeatIndex = HEARTBEAT_ACTIVE_INDEXES[heartbeatFrame] ?? HEARTBEAT_ACTIVE_INDEXES[0];
158
243
  const phrase = phrases[phraseIndex] ?? phrases[0];
159
244
  const ellipsis = ELLIPSIS_FRAMES[ellipsisFrame];
160
245
  // Shimmer — derive position from tick, wrapping across phrase length
161
246
  const shimmerCycle = phrase.length + SHIMMER_WIDTH * 2;
162
- const shimmerPos = (tick % shimmerCycle) - SHIMMER_WIDTH;
247
+ const shimmerPos = fullAnimationActive ? (tick % shimmerCycle) - SHIMMER_WIDTH : -SHIMMER_WIDTH;
163
248
  // Pad ellipsis to prevent text from shifting
164
- const paddedEllipsis = ellipsis + " ".repeat(3 - ellipsis.length);
165
- const meta = buildMetaParts(elapsedMs, thinkingMs, isThinking, smoothTokenEstimate);
166
- const thinkingShimmerCycle = Math.max(1, meta.thinking.length + SHIMMER_WIDTH * 2);
167
- const thinkingShimmerPos = (tick % thinkingShimmerCycle) - SHIMMER_WIDTH;
249
+ const paddedEllipsis = fullAnimationActive || lowChurnActive ? ellipsis + " ".repeat(3 - ellipsis.length) : "...";
250
+ const structuredMeta = buildStructuredMetaParts(elapsedMs, thinkingMs, isThinking, smoothTokenEstimate);
251
+ const legacyMeta = buildMetaParts(elapsedMs, thinkingMs, isThinking, smoothTokenEstimate);
252
+ const thinkingShimmerCycle = Math.max(1, legacyMeta.thinking.length + SHIMMER_WIDTH * 2);
253
+ const thinkingShimmerPos = fullAnimationActive
254
+ ? (tick % thinkingShimmerCycle) - SHIMMER_WIDTH
255
+ : -SHIMMER_WIDTH;
168
256
  // ── Plan progress bar ──────────────────────────────────
169
257
  const planBar = useMemo(() => {
170
258
  if (planTotal <= 0)
@@ -178,8 +266,8 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
178
266
  const retryLabel = RETRY_REASON_LABELS[retryInfo.reason];
179
267
  const retryColor = "#f59e0b"; // amber
180
268
  const delaySec = retryInfo.delayMs > 0 ? ` waiting ${Math.round(retryInfo.delayMs / 1000)}s` : "";
181
- return (_jsxs(Box, { children: [_jsxs(Text, { color: retryColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] }), _jsxs(Text, { color: retryColor, children: [retryLabel, " \u2014 retrying (", retryInfo.attempt, "/", retryInfo.maxAttempts, ")"] }), _jsxs(Text, { color: theme.textDim, children: [delaySec, " (", formatElapsed(elapsedMs), ")"] })] }));
269
+ return (_jsxs(Box, { children: [lowChurnActive ? (_jsx(HeartbeatGlyph, { activeIndex: heartbeatIndex, color: retryColor })) : (_jsxs(Text, { color: retryColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] })), _jsxs(Text, { color: retryColor, children: [retryLabel, " \u2014 retrying (", retryInfo.attempt, "/", retryInfo.maxAttempts, ")"] }), _jsx(Text, { color: theme.textDim, children: delaySec }), _jsx(ActivityMetaText, { colors: accentColors, isThinking: isThinking, meta: { duration: formatElapsed(elapsedMs), tokens: "", thinking: "" }, mutedColor: theme.textDim })] }));
182
270
  }
183
- return (_jsxs(Box, { children: [_jsxs(Text, { color: spinnerColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] }), reducedMotion ? (_jsx(Text, { dimColor: true, color: spinnerColor, children: phrase })) : (_jsx(ShimmerText, { text: phrase, color: spinnerColor, shimmerPos: shimmerPos })), _jsx(Text, { color: theme.textDim, children: reducedMotion ? "..." : paddedEllipsis }), (meta.prefix || meta.thinking) && (_jsxs(Text, { color: theme.textDim, children: [" (", meta.prefix, meta.prefix && meta.thinking ? " · " : "", isThinking && !reducedMotion && meta.thinking ? (_jsx(ShimmerText, { text: meta.thinking, color: thinkingShimmerColor, shimmerPos: thinkingShimmerPos })) : (meta.thinking), ")"] })), planBar && (_jsxs(Text, { children: [" ", _jsx(Text, { color: planDone === planTotal ? theme.success : theme.planPrimary, children: planBar }), _jsxs(Text, { color: theme.textDim, children: [" ", planDone, "/", planTotal] })] }))] }));
271
+ return (_jsxs(Box, { children: [lowChurnActive ? (_jsx(HeartbeatGlyph, { activeIndex: heartbeatIndex, color: spinnerColor })) : (_jsxs(Text, { color: spinnerColor, bold: true, children: [reducedMotion ? REDUCED_MOTION_DOT : SPINNER_FRAMES[spinnerFrame], " "] })), fullAnimationActive ? (_jsx(ShimmerText, { text: phrase, color: spinnerColor, shimmerPos: shimmerPos })) : (_jsx(Text, { color: spinnerColor, bold: canAnimate && (fullAnimationActive || lowChurnActive), children: phrase })), _jsx(Text, { color: theme.textDim, children: reducedMotion ? "..." : paddedEllipsis }), fullAnimationActive && isThinking && legacyMeta.thinking ? (_jsxs(Text, { children: [_jsx(Text, { color: theme.textDim, children: " (" }), legacyMeta.prefix && _jsx(Text, { color: theme.textDim, children: legacyMeta.prefix }), legacyMeta.prefix && legacyMeta.thinking ? (_jsx(Text, { color: theme.textDim, children: " · " })) : null, _jsx(ShimmerText, { text: legacyMeta.thinking, color: thinkingShimmerColor, shimmerPos: thinkingShimmerPos }), _jsx(Text, { color: theme.textDim, children: ")" })] })) : (_jsx(ActivityMetaText, { colors: accentColors, isThinking: isThinking, meta: structuredMeta, mutedColor: theme.textDim })), planBar && (_jsxs(Text, { children: [" ", _jsx(Text, { color: planDone === planTotal ? theme.success : theme.planPrimary, children: planBar }), _jsxs(Text, { color: theme.textDim, children: [" ", planDone, "/", planTotal] })] }))] }));
184
272
  }
185
273
  //# sourceMappingURL=ActivityIndicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,6DAA6D;AAE7D,MAAM,YAAY,GAAG;IACnB,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,gBAAgB;IAC3B,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,cAAc;CAC1B,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,aAAa;CACzB,CAAC;AACF,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,6DAA6D;AAE7D,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/C,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,6DAA6D;AAE7D,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,6DAA6D;AAE7D,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,GAAG,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IAC1B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AACjD,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS;IACjC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,UAAkB,EAClB,UAAmB,EACnB,aAAqB;IAErB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAErC,IAAI,aAAa,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAEjF,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,UAAU,IAAI,IAAI;YAClB,CAAC,CAAC,gBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE;YAC7C,CAAC,CAAC,UAAU;QACd,CAAC,CAAC,UAAU,IAAI,IAAI;YAClB,CAAC,CAAC,eAAe,aAAa,CAAC,UAAU,CAAC,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC;AAED,6DAA6D;AAE7D,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,WAAW,GAAkE,CAAC,EAClF,IAAI,EACJ,KAAK,EACL,UAAU,GACX,EAAE,EAAE,CAAC,CACJ,KAAC,IAAI,cACF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,aAAa,CAAC;QAC3D,OAAO,CACL,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,QAAQ,YACpD,IAAI,IADuD,CAAC,CAExD,CACR,CAAC;IACJ,CAAC,CAAC,GACG,CACR,CAAC;AAsCF,MAAM,mBAAmB,GAAwC;IAC/D,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,cAAc;IAC1B,cAAc,EAAE,uBAAuB;IACvC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,yBAAyB;IACvC,gBAAgB,EAAE,+BAA+B;CAClD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,aAAa,EACb,YAAY,EAAE,gBAAgB,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,WAAW,GAAG,EAAE,EAChB,eAAe,GAAG,EAAE,EACpB,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG,CAAC,EACb,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,mBAAmB,GACT;IACvB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjE,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,SAAS,GACb,WAAW,EAAE,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAE9F,0DAA0D;IAC1D,iEAAiE;IACjE,sEAAsE;IACtE,kBAAkB,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAEhC,0DAA0D;IAC1D,kEAAkE;IAClE,8DAA8D;IAC9D,0DAA0D;IAC1D,EAAE;IACF,iEAAiE;IACjE,8DAA8D;IAC9D,2BAA2B;IAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,gBAAgB,EAAE,OAAO,IAAI,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,sBAAsB,EAAE,OAAO,IAAI,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IAEjG,IAAI,aAAa,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,kBAAkB,CAAC,OAAO,GAAG,YAAY,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACtD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,oDAAoD;YACpD,IAAI,SAAiB,CAAC;YACtB,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;gBACb,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;gBACpB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBACrB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,2DAA2D;gBAC3D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC;QAC9F,CAAC;aAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACnB,4CAA4C;YAC5C,kBAAkB,CAAC,OAAO,GAAG,YAAY,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,OAAO,CAAC;IAEvD,2DAA2D;IAC3D,MAAM,YAAY,GAAG,aAAa;QAChC,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,mBAAmB,IAAI,YAAY,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAEnF,+FAA+F;IAC/F,MAAM,qBAAqB,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CACH,YAAY,CACV,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS;YAC/B,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,CAAC,CAC1E,EACH,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,CAAC,CAC/E,CAAC;IACF,MAAM,cAAc,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC,GAAG,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAE5F,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAEhD,qEAAqE;IACrE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,GAAG,aAAa,CAAC;IAEzD,6CAA6C;IAC7C,MAAM,cAAc,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAElE,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACpF,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,kBAAkB,GAAG,CAAC,IAAI,GAAG,oBAAoB,CAAC,GAAG,aAAa,CAAC;IAEzE,0DAA0D;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;IAChF,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1B,0DAA0D;IAC1D,IAAI,KAAK,KAAK,UAAU,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,QAAQ;QACtC,MAAM,QAAQ,GACZ,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,EAAE,IAAI,mBAC1B,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,GAAG,IAClE,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,UAAU,aACpB,UAAU,wBAAe,SAAS,CAAC,OAAO,OAAG,SAAS,CAAC,WAAW,SAC9D,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACvB,QAAQ,EACR,KAAK,EACL,aAAa,CAAC,SAAS,CAAC,EACxB,GAAG,IACC,IACH,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,YAAY,EAAE,IAAI,mBAC5B,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,GAAG,IAClE,EACN,aAAa,CAAC,CAAC,CAAC,CACf,KAAC,IAAI,IAAC,QAAQ,QAAC,KAAK,EAAE,YAAY,YAC/B,MAAM,GACF,CACR,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,GAAI,CAC3E,EACD,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,YAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,GAAQ,EAC1E,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CACjC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACvB,KAAK,EACL,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EACzC,UAAU,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC/C,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,CAAC,QAAQ,EACnB,KAAK,EAAE,oBAAoB,EAC3B,UAAU,EAAE,kBAAkB,GAC9B,CACH,CAAC,CAAC,CAAC,CACF,IAAI,CAAC,QAAQ,CACd,EACA,GAAG,IACC,CACR,EACA,OAAO,IAAI,CACV,MAAC,IAAI,eACF,IAAI,EACL,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,YAAG,OAAO,GAAQ,EACzF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,aACvB,GAAG,EACH,QAAQ,OAAG,SAAS,IAChB,IACF,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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"}
@@ -16,13 +16,19 @@ export declare function AnimationProvider({ children }: {
16
16
  children: React.ReactNode;
17
17
  }): import("react/jsx-runtime").JSX.Element;
18
18
  /** Returns the current global animation tick counter. */
19
- export declare function useAnimationTick(): number;
19
+ export declare function useAnimationTick(enabled?: boolean): number;
20
+ /** Returns whether the terminal currently has focus when focus reporting is supported. */
21
+ export declare function useTerminalFocus(enabled?: boolean): boolean;
20
22
  /**
21
23
  * Register this component as needing animation ticks.
22
24
  * The global timer only runs while at least one component is registered.
23
25
  * Call this in any component that uses animation frames (spinners, shimmer, etc).
24
26
  */
25
- export declare function useAnimationActive(): void;
27
+ export declare function useAnimationActive(enabled?: boolean): void;
28
+ export declare function useFocusedAnimation(enabled?: boolean): {
29
+ active: boolean;
30
+ tick: number;
31
+ };
26
32
  /** Derive a frame index from the global tick for a given interval and frame count. */
27
33
  export declare function deriveFrame(tick: number, intervalMs: number, frameCount: number): number;
28
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAEnG;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,MAAM,CAAC;AAO1B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CA4C5E;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,MAAM,CAAC;AAoB1B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAoG5E;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,OAAO,UAAO,GAAG,MAAM,CAQvD;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,OAAO,UAAO,GAAG,OAAO,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,UAAO,GAAG,IAAI,CAMvD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,UAAO,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMrF;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { createContext, useContext, useState, useEffect, useCallback, useRef } from "react";
2
+ import React, { createContext, useContext, useEffect, useCallback, useMemo, useRef, useSyncExternalStore, } from "react";
3
3
  /**
4
4
  * Global animation tick context.
5
5
  *
@@ -12,20 +12,33 @@ import React, { createContext, useContext, useState, useEffect, useCallback, use
12
12
  * `useAnimationActive()`, avoiding 10 re-renders/sec during idle streaming
13
13
  * when no spinners or animations are visible.
14
14
  */
15
- const TICK_INTERVAL = 100; // ms — fast enough for the spinner (100ms frames)
16
- const AnimationContext = createContext(0);
17
- const AnimationControlContext = createContext({ register: () => () => { } });
15
+ const TICK_INTERVAL = 100; // ms — base clock; consumers can derive slower frames.
16
+ const ENABLE_FOCUS_REPORTING = "\x1b[?1004h";
17
+ const DISABLE_FOCUS_REPORTING = "\x1b[?1004l";
18
+ const noopStore = {
19
+ register: () => () => { },
20
+ subscribe: () => () => { },
21
+ getSnapshot: () => 0,
22
+ isFocused: () => true,
23
+ };
24
+ const AnimationStoreContext = createContext(noopStore);
18
25
  export function AnimationProvider({ children }) {
19
- const [tick, setTick] = useState(0);
26
+ const tickRef = useRef(0);
20
27
  const subscriberCountRef = useRef(0);
28
+ const focusedRef = useRef(true);
21
29
  const timerRef = useRef(null);
30
+ const listenersRef = useRef(new Set());
31
+ const notify = useCallback(() => {
32
+ tickRef.current += 1;
33
+ for (const listener of listenersRef.current) {
34
+ listener();
35
+ }
36
+ }, []);
22
37
  const startTimer = useCallback(() => {
23
38
  if (timerRef.current)
24
39
  return;
25
- timerRef.current = setInterval(() => {
26
- setTick((t) => t + 1);
27
- }, TICK_INTERVAL);
28
- }, []);
40
+ timerRef.current = setInterval(notify, TICK_INTERVAL);
41
+ }, [notify]);
29
42
  const stopTimer = useCallback(() => {
30
43
  if (timerRef.current) {
31
44
  clearInterval(timerRef.current);
@@ -36,6 +49,44 @@ export function AnimationProvider({ children }) {
36
49
  useEffect(() => {
37
50
  return () => stopTimer();
38
51
  }, [stopTimer]);
52
+ useEffect(() => {
53
+ if (!process.stdin.isTTY)
54
+ return undefined;
55
+ const setFocused = (focused) => {
56
+ if (focusedRef.current === focused)
57
+ return;
58
+ focusedRef.current = focused;
59
+ for (const listener of listenersRef.current) {
60
+ listener();
61
+ }
62
+ };
63
+ const onData = (chunk) => {
64
+ const data = chunk.toString("utf8");
65
+ const lastFocusIn = data.lastIndexOf("\x1b[I");
66
+ const lastFocusOut = data.lastIndexOf("\x1b[O");
67
+ if (lastFocusIn > lastFocusOut)
68
+ setFocused(true);
69
+ else if (lastFocusOut > lastFocusIn)
70
+ setFocused(false);
71
+ };
72
+ process.stdin.on("data", onData);
73
+ let enableTimer = null;
74
+ const enableWhenRaw = () => {
75
+ if (process.stdin.isRaw === false) {
76
+ enableTimer = setTimeout(enableWhenRaw, 10);
77
+ return;
78
+ }
79
+ process.stdout.write(ENABLE_FOCUS_REPORTING);
80
+ };
81
+ enableTimer = setTimeout(enableWhenRaw, 0);
82
+ return () => {
83
+ if (enableTimer)
84
+ clearTimeout(enableTimer);
85
+ process.stdin.off("data", onData);
86
+ process.stdout.write(DISABLE_FOCUS_REPORTING);
87
+ focusedRef.current = true;
88
+ };
89
+ }, []);
39
90
  const register = useCallback(() => {
40
91
  subscriberCountRef.current++;
41
92
  if (subscriberCountRef.current === 1)
@@ -48,23 +99,50 @@ export function AnimationProvider({ children }) {
48
99
  }
49
100
  };
50
101
  }, [startTimer, stopTimer]);
51
- const control = React.useMemo(() => ({ register }), [register]);
52
- return (_jsx(AnimationControlContext, { value: control, children: _jsx(AnimationContext, { value: tick, children: children }) }));
102
+ const subscribe = useCallback((listener) => {
103
+ listenersRef.current.add(listener);
104
+ return () => {
105
+ listenersRef.current.delete(listener);
106
+ };
107
+ }, []);
108
+ const getSnapshot = useCallback(() => tickRef.current, []);
109
+ const isFocused = useCallback(() => focusedRef.current, []);
110
+ const store = useMemo(() => ({ register, subscribe, getSnapshot, isFocused }), [getSnapshot, isFocused, register, subscribe]);
111
+ return _jsx(AnimationStoreContext, { value: store, children: children });
53
112
  }
54
113
  /** Returns the current global animation tick counter. */
55
- export function useAnimationTick() {
56
- return useContext(AnimationContext);
114
+ export function useAnimationTick(enabled = true) {
115
+ const store = useContext(AnimationStoreContext);
116
+ const subscribe = useCallback((listener) => (enabled ? store.subscribe(listener) : () => { }), [enabled, store]);
117
+ const getSnapshot = useCallback(() => (enabled ? store.getSnapshot() : 0), [enabled, store]);
118
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
119
+ }
120
+ /** Returns whether the terminal currently has focus when focus reporting is supported. */
121
+ export function useTerminalFocus(enabled = true) {
122
+ const store = useContext(AnimationStoreContext);
123
+ const subscribe = useCallback((listener) => (enabled ? store.subscribe(listener) : () => { }), [enabled, store]);
124
+ const getSnapshot = useCallback(() => !enabled || store.isFocused(), [enabled, store]);
125
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
57
126
  }
58
127
  /**
59
128
  * Register this component as needing animation ticks.
60
129
  * The global timer only runs while at least one component is registered.
61
130
  * Call this in any component that uses animation frames (spinners, shimmer, etc).
62
131
  */
63
- export function useAnimationActive() {
64
- const { register } = useContext(AnimationControlContext);
132
+ export function useAnimationActive(enabled = true) {
133
+ const { register } = useContext(AnimationStoreContext);
65
134
  useEffect(() => {
135
+ if (!enabled)
136
+ return undefined;
66
137
  return register();
67
- }, [register]);
138
+ }, [enabled, register]);
139
+ }
140
+ export function useFocusedAnimation(enabled = true) {
141
+ const focused = useTerminalFocus(enabled);
142
+ const active = enabled && focused;
143
+ useAnimationActive(active);
144
+ const tick = useAnimationTick(active);
145
+ return { active, tick };
68
146
  }
69
147
  /** Derive a frame index from the global tick for a given interval and frame count. */
70
148
  export function deriveFrame(tick, intervalMs, frameCount) {
@@ -1 +1 @@
1
- {"version":3,"file":"AnimationContext.js","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AnimationContext.js","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,8 @@
1
- export declare function CompactionSpinner(): import("react/jsx-runtime").JSX.Element;
1
+ interface CompactionSpinnerProps {
2
+ /** Disable decorative ticks so terminal scrollback remains usable during active runs. */
3
+ staticDisplay?: boolean;
4
+ }
5
+ export declare function CompactionSpinner({ staticDisplay }: CompactionSpinnerProps): import("react/jsx-runtime").JSX.Element;
2
6
  interface CompactionDoneProps {
3
7
  originalCount: number;
4
8
  newCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"CompactionNotice.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CompactionNotice.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,4CAyBhC;AAID,UAAU,mBAAmB;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,WAAW,GACZ,EAAE,mBAAmB,2CA6BrB"}
1
+ {"version":3,"file":"CompactionNotice.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CompactionNotice.tsx"],"names":[],"mappings":"AAkBA,UAAU,sBAAsB;IAC9B,yFAAyF;IACzF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,aAAqB,EAAE,EAAE,sBAAsB,2CAwBlF;AAID,UAAU,mBAAmB;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,WAAW,GACZ,EAAE,mBAAmB,2CA6BrB"}
@@ -3,7 +3,7 @@ import React from "react";
3
3
  import { Text, Box } from "ink";
4
4
  import { useTheme } from "../theme/theme.js";
5
5
  import { SPINNER_FRAMES, SPINNER_INTERVAL } from "../spinner-frames.js";
6
- import { useAnimationTick, useAnimationActive, deriveFrame } from "./AnimationContext.js";
6
+ import { useFocusedAnimation, deriveFrame } from "./AnimationContext.js";
7
7
  const ACCENT_COLOR = "#fbbf24"; // warning/amber
8
8
  function formatTokenCount(n) {
9
9
  if (n >= 1000) {
@@ -12,12 +12,10 @@ function formatTokenCount(n) {
12
12
  }
13
13
  return String(n);
14
14
  }
15
- // ── In-progress (animated spinner) ──────────────────────
16
- export function CompactionSpinner() {
15
+ export function CompactionSpinner({ staticDisplay = false }) {
17
16
  const theme = useTheme();
18
- useAnimationActive();
19
- const tick = useAnimationTick();
20
- const frame = deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length);
17
+ const { active: animationActive, tick } = useFocusedAnimation(!staticDisplay);
18
+ const frame = animationActive ? deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length) : 0;
21
19
  return (_jsx(Box, { marginTop: 1, children: _jsxs(Box, { borderStyle: "single", borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, borderLeftColor: ACCENT_COLOR, paddingLeft: 1, children: [_jsxs(Text, { color: ACCENT_COLOR, children: [SPINNER_FRAMES[frame], " "] }), _jsx(Text, { color: theme.textMuted, italic: true, children: "Compacting conversation" }), _jsx(Text, { color: theme.textDim, children: "..." })] }) }));
22
20
  }
23
21
  export function CompactionDone({ originalCount, newCount, tokensBefore, tokensAfter, }) {
@@ -1 +1 @@
1
- {"version":3,"file":"CompactionNotice.js","sourceRoot":"","sources":["../../../src/ui/components/CompactionNotice.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CompactionNotice.js","sourceRoot":"","sources":["../../../src/ui/components/CompactionNotice.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAI3F,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+ED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE,WAAW,2CAiOb"}
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAI3F,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA8ED,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,GAAG,EACH,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE,WAAW,2CAiOb"}
@@ -5,7 +5,7 @@ import { useTheme } from "../theme/theme.js";
5
5
  import { useTerminalSize } from "../hooks/useTerminalSize.js";
6
6
  import { getContextWindow } from "../../core/model-registry.js";
7
7
  import { PARTIAL_BLOCKS, LIGHT_SHADE } from "../constants/figures.js";
8
- import { useAnimationActive, useAnimationTick, useReducedMotion } from "./AnimationContext.js";
8
+ import { useFocusedAnimation, useReducedMotion } from "./AnimationContext.js";
9
9
  // Model ID → short display name
10
10
  const MODEL_SHORT_NAMES = {
11
11
  "claude-opus-4-7": "Opus",
@@ -57,11 +57,10 @@ function getThinkingColor(level, theme) {
57
57
  * rest stay in the base color. Subscribes to the global animation tick so
58
58
  * the timer only runs while xhigh is visible.
59
59
  */
60
- const XhighShimmer = ({ text }) => {
61
- useAnimationActive();
62
- const tick = useAnimationTick();
60
+ const XhighShimmer = ({ text, active = true }) => {
61
+ const { active: animationActive, tick } = useFocusedAnimation(active);
63
62
  const cycle = text.length + SHIMMER_WIDTH * 2;
64
- const pos = (tick % cycle) - SHIMMER_WIDTH;
63
+ const pos = animationActive ? (tick % cycle) - SHIMMER_WIDTH : -SHIMMER_WIDTH;
65
64
  return (_jsx(Text, { children: text.split("").map((ch, i) => {
66
65
  const isBright = Math.abs(i - pos) <= SHIMMER_WIDTH;
67
66
  return (_jsx(Text, { color: isBright ? XHIGH_SHIMMER_COLOR : XHIGH_COLOR, bold: isBright, children: ch }, i));
@@ -121,7 +120,7 @@ export function Footer({ model, tokensIn, contextWindowOptions, cwd, gitBranch,
121
120
  ? "\u2026" + displayPath.slice(displayPath.length - maxPath + 1)
122
121
  : displayPath;
123
122
  // Shared right-side content
124
- const rightContent = (_jsxs(_Fragment, { children: [_jsx(Text, { children: barChars }), _jsxs(Text, { color: contextColor, children: [" ", contextPct, "%"] }), sep, _jsx(Text, { color: theme.primary, bold: true, children: modelName }), showPlan ? (_jsxs(_Fragment, { children: [sep, _jsx(Text, { color: planMode ? theme.planPrimary : theme.textDim, children: planText })] })) : null, sep, shimmerXhigh ? (_jsx(XhighShimmer, { text: thinkingText })) : (_jsx(Text, { color: thinkingColor, bold: thinkingLevel === "high", children: thinkingText }))] }));
123
+ const rightContent = (_jsxs(_Fragment, { children: [_jsx(Text, { children: barChars }), _jsxs(Text, { color: contextColor, children: [" ", contextPct, "%"] }), sep, _jsx(Text, { color: theme.primary, bold: true, children: modelName }), showPlan ? (_jsxs(_Fragment, { children: [sep, _jsx(Text, { color: planMode ? theme.planPrimary : theme.textDim, children: planText })] })) : null, sep, shimmerXhigh ? (_jsx(XhighShimmer, { text: thinkingText, active: !exitPending })) : (_jsx(Text, { color: thinkingColor, bold: thinkingLevel === "high", children: thinkingText }))] }));
125
124
  if (exitPending) {
126
125
  return (_jsx(Box, { paddingLeft: 1, paddingRight: 1, width: columns, children: _jsx(Text, { color: theme.warning, children: "Press Ctrl+C again to exit" }) }));
127
126
  }