@prestyj/cli 4.3.161 → 4.3.200

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 (299) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.js +112 -27
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/agent-session.d.ts +50 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +175 -20
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/agents.d.ts +6 -1
  9. package/dist/core/agents.d.ts.map +1 -1
  10. package/dist/core/agents.js +112 -3
  11. package/dist/core/agents.js.map +1 -1
  12. package/dist/core/auth-storage.d.ts.map +1 -1
  13. package/dist/core/auth-storage.js +20 -1
  14. package/dist/core/auth-storage.js.map +1 -1
  15. package/dist/core/claude-code-version.d.ts +10 -0
  16. package/dist/core/claude-code-version.d.ts.map +1 -0
  17. package/dist/core/claude-code-version.js +106 -0
  18. package/dist/core/claude-code-version.js.map +1 -0
  19. package/dist/core/compaction/compactor.d.ts +13 -0
  20. package/dist/core/compaction/compactor.d.ts.map +1 -1
  21. package/dist/core/compaction/compactor.js +20 -1
  22. package/dist/core/compaction/compactor.js.map +1 -1
  23. package/dist/core/compaction/compactor.test.js +12 -1
  24. package/dist/core/compaction/compactor.test.js.map +1 -1
  25. package/dist/core/index.d.ts +1 -1
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +1 -1
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/language-detector.d.ts +32 -0
  30. package/dist/core/language-detector.d.ts.map +1 -0
  31. package/dist/core/language-detector.js +191 -0
  32. package/dist/core/language-detector.js.map +1 -0
  33. package/dist/core/language-detector.test.d.ts +2 -0
  34. package/dist/core/language-detector.test.d.ts.map +1 -0
  35. package/dist/core/language-detector.test.js +109 -0
  36. package/dist/core/language-detector.test.js.map +1 -0
  37. package/dist/core/model-registry.d.ts +30 -2
  38. package/dist/core/model-registry.d.ts.map +1 -1
  39. package/dist/core/model-registry.js +41 -26
  40. package/dist/core/model-registry.js.map +1 -1
  41. package/dist/core/model-registry.test.d.ts +2 -0
  42. package/dist/core/model-registry.test.d.ts.map +1 -0
  43. package/dist/core/model-registry.test.js +19 -0
  44. package/dist/core/model-registry.test.js.map +1 -0
  45. package/dist/core/oauth/anthropic.d.ts.map +1 -1
  46. package/dist/core/oauth/anthropic.js +64 -42
  47. package/dist/core/oauth/anthropic.js.map +1 -1
  48. package/dist/core/oauth/openai.js +1 -1
  49. package/dist/core/oauth/openai.js.map +1 -1
  50. package/dist/core/prompt-commands.d.ts.map +1 -1
  51. package/dist/core/prompt-commands.js +569 -96
  52. package/dist/core/prompt-commands.js.map +1 -1
  53. package/dist/core/prompt-commands.test.d.ts +2 -0
  54. package/dist/core/prompt-commands.test.d.ts.map +1 -0
  55. package/dist/core/prompt-commands.test.js +33 -0
  56. package/dist/core/prompt-commands.test.js.map +1 -0
  57. package/dist/core/repomap-context.d.ts +11 -0
  58. package/dist/core/repomap-context.d.ts.map +1 -0
  59. package/dist/core/repomap-context.js +68 -0
  60. package/dist/core/repomap-context.js.map +1 -0
  61. package/dist/core/repomap-context.test.d.ts +2 -0
  62. package/dist/core/repomap-context.test.d.ts.map +1 -0
  63. package/dist/core/repomap-context.test.js +47 -0
  64. package/dist/core/repomap-context.test.js.map +1 -0
  65. package/dist/core/repomap.d.ts +74 -0
  66. package/dist/core/repomap.d.ts.map +1 -0
  67. package/dist/core/repomap.js +897 -0
  68. package/dist/core/repomap.js.map +1 -0
  69. package/dist/core/repomap.test.d.ts +2 -0
  70. package/dist/core/repomap.test.d.ts.map +1 -0
  71. package/dist/core/repomap.test.js +444 -0
  72. package/dist/core/repomap.test.js.map +1 -0
  73. package/dist/core/session-compaction.d.ts +15 -0
  74. package/dist/core/session-compaction.d.ts.map +1 -0
  75. package/dist/core/session-compaction.js +31 -0
  76. package/dist/core/session-compaction.js.map +1 -0
  77. package/dist/core/session-compaction.test.d.ts +2 -0
  78. package/dist/core/session-compaction.test.d.ts.map +1 -0
  79. package/dist/core/session-compaction.test.js +70 -0
  80. package/dist/core/session-compaction.test.js.map +1 -0
  81. package/dist/core/settings-manager.d.ts +3 -5
  82. package/dist/core/settings-manager.d.ts.map +1 -1
  83. package/dist/core/settings-manager.js +6 -5
  84. package/dist/core/settings-manager.js.map +1 -1
  85. package/dist/core/setup-history.d.ts +13 -0
  86. package/dist/core/setup-history.d.ts.map +1 -0
  87. package/dist/core/setup-history.js +71 -0
  88. package/dist/core/setup-history.js.map +1 -0
  89. package/dist/core/setup-history.test.d.ts +2 -0
  90. package/dist/core/setup-history.test.d.ts.map +1 -0
  91. package/dist/core/setup-history.test.js +74 -0
  92. package/dist/core/setup-history.test.js.map +1 -0
  93. package/dist/core/slash-commands.d.ts +2 -0
  94. package/dist/core/slash-commands.d.ts.map +1 -1
  95. package/dist/core/slash-commands.js +15 -14
  96. package/dist/core/slash-commands.js.map +1 -1
  97. package/dist/core/style-packs/index.d.ts +19 -0
  98. package/dist/core/style-packs/index.d.ts.map +1 -0
  99. package/dist/core/style-packs/index.js +69 -0
  100. package/dist/core/style-packs/index.js.map +1 -0
  101. package/dist/core/style-packs/packs.d.ts +18 -0
  102. package/dist/core/style-packs/packs.d.ts.map +1 -0
  103. package/dist/core/style-packs/packs.js +229 -0
  104. package/dist/core/style-packs/packs.js.map +1 -0
  105. package/dist/core/verify-commands.d.ts +35 -0
  106. package/dist/core/verify-commands.d.ts.map +1 -0
  107. package/dist/core/verify-commands.js +209 -0
  108. package/dist/core/verify-commands.js.map +1 -0
  109. package/dist/core/verify-commands.test.d.ts +2 -0
  110. package/dist/core/verify-commands.test.d.ts.map +1 -0
  111. package/dist/core/verify-commands.test.js +85 -0
  112. package/dist/core/verify-commands.test.js.map +1 -0
  113. package/dist/index.d.ts +2 -2
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +1 -1
  116. package/dist/index.js.map +1 -1
  117. package/dist/interactive.d.ts.map +1 -1
  118. package/dist/interactive.js +12 -6
  119. package/dist/interactive.js.map +1 -1
  120. package/dist/modes/json-mode.d.ts +7 -0
  121. package/dist/modes/json-mode.d.ts.map +1 -1
  122. package/dist/modes/json-mode.js +9 -1
  123. package/dist/modes/json-mode.js.map +1 -1
  124. package/dist/system-prompt.d.ts +2 -1
  125. package/dist/system-prompt.d.ts.map +1 -1
  126. package/dist/system-prompt.js +116 -92
  127. package/dist/system-prompt.js.map +1 -1
  128. package/dist/system-prompt.test.d.ts +2 -0
  129. package/dist/system-prompt.test.d.ts.map +1 -0
  130. package/dist/system-prompt.test.js +107 -0
  131. package/dist/system-prompt.test.js.map +1 -0
  132. package/dist/tools/bash.d.ts.map +1 -1
  133. package/dist/tools/bash.js +1 -0
  134. package/dist/tools/bash.js.map +1 -1
  135. package/dist/tools/edit-diff.d.ts +66 -1
  136. package/dist/tools/edit-diff.d.ts.map +1 -1
  137. package/dist/tools/edit-diff.js +208 -10
  138. package/dist/tools/edit-diff.js.map +1 -1
  139. package/dist/tools/edit-diff.test.js +175 -15
  140. package/dist/tools/edit-diff.test.js.map +1 -1
  141. package/dist/tools/edit.d.ts +3 -1
  142. package/dist/tools/edit.d.ts.map +1 -1
  143. package/dist/tools/edit.js +190 -44
  144. package/dist/tools/edit.js.map +1 -1
  145. package/dist/tools/edit.test.js +392 -3
  146. package/dist/tools/edit.test.js.map +1 -1
  147. package/dist/tools/enter-plan.d.ts.map +1 -1
  148. package/dist/tools/enter-plan.js +1 -0
  149. package/dist/tools/enter-plan.js.map +1 -1
  150. package/dist/tools/exit-plan.d.ts.map +1 -1
  151. package/dist/tools/exit-plan.js +1 -0
  152. package/dist/tools/exit-plan.js.map +1 -1
  153. package/dist/tools/index.d.ts +13 -0
  154. package/dist/tools/index.d.ts.map +1 -1
  155. package/dist/tools/index.js +4 -4
  156. package/dist/tools/index.js.map +1 -1
  157. package/dist/tools/prompt-hints.d.ts.map +1 -1
  158. package/dist/tools/prompt-hints.js +6 -4
  159. package/dist/tools/prompt-hints.js.map +1 -1
  160. package/dist/tools/read.d.ts +1 -1
  161. package/dist/tools/read.d.ts.map +1 -1
  162. package/dist/tools/read.js +2 -1
  163. package/dist/tools/read.js.map +1 -1
  164. package/dist/tools/subagent.d.ts +1 -1
  165. package/dist/tools/subagent.d.ts.map +1 -1
  166. package/dist/tools/subagent.js +55 -2
  167. package/dist/tools/subagent.js.map +1 -1
  168. package/dist/tools/tasks.d.ts.map +1 -1
  169. package/dist/tools/tasks.js +1 -0
  170. package/dist/tools/tasks.js.map +1 -1
  171. package/dist/tools/web-fetch.d.ts +1 -0
  172. package/dist/tools/web-fetch.d.ts.map +1 -1
  173. package/dist/tools/web-fetch.js +96 -6
  174. package/dist/tools/web-fetch.js.map +1 -1
  175. package/dist/tools/web-fetch.test.d.ts +2 -0
  176. package/dist/tools/web-fetch.test.d.ts.map +1 -0
  177. package/dist/tools/web-fetch.test.js +90 -0
  178. package/dist/tools/web-fetch.test.js.map +1 -0
  179. package/dist/tools/web-search.d.ts +1 -0
  180. package/dist/tools/web-search.d.ts.map +1 -1
  181. package/dist/tools/web-search.js +167 -27
  182. package/dist/tools/web-search.js.map +1 -1
  183. package/dist/tools/web-search.test.d.ts +2 -0
  184. package/dist/tools/web-search.test.d.ts.map +1 -0
  185. package/dist/tools/web-search.test.js +119 -0
  186. package/dist/tools/web-search.test.js.map +1 -0
  187. package/dist/tools/write.d.ts +1 -1
  188. package/dist/tools/write.d.ts.map +1 -1
  189. package/dist/tools/write.js +3 -1
  190. package/dist/tools/write.js.map +1 -1
  191. package/dist/tools/write.test.js +23 -0
  192. package/dist/tools/write.test.js.map +1 -1
  193. package/dist/ui/App.d.ts +74 -3
  194. package/dist/ui/App.d.ts.map +1 -1
  195. package/dist/ui/App.js +727 -223
  196. package/dist/ui/App.js.map +1 -1
  197. package/dist/ui/activity-phrases.d.ts +2 -1
  198. package/dist/ui/activity-phrases.d.ts.map +1 -1
  199. package/dist/ui/activity-phrases.js +11 -1
  200. package/dist/ui/activity-phrases.js.map +1 -1
  201. package/dist/ui/components/ActivityIndicator.d.ts +15 -1
  202. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  203. package/dist/ui/components/ActivityIndicator.js +143 -44
  204. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  205. package/dist/ui/components/ActivityIndicator.test.d.ts +2 -0
  206. package/dist/ui/components/ActivityIndicator.test.d.ts.map +1 -0
  207. package/dist/ui/components/ActivityIndicator.test.js +40 -0
  208. package/dist/ui/components/ActivityIndicator.test.js.map +1 -0
  209. package/dist/ui/components/AnimationContext.d.ts +8 -2
  210. package/dist/ui/components/AnimationContext.d.ts.map +1 -1
  211. package/dist/ui/components/AnimationContext.js +94 -16
  212. package/dist/ui/components/AnimationContext.js.map +1 -1
  213. package/dist/ui/components/AssistantMessage.js +1 -1
  214. package/dist/ui/components/AssistantMessage.js.map +1 -1
  215. package/dist/ui/components/CompactionNotice.d.ts +5 -1
  216. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  217. package/dist/ui/components/CompactionNotice.js +4 -6
  218. package/dist/ui/components/CompactionNotice.js.map +1 -1
  219. package/dist/ui/components/Footer.d.ts +10 -2
  220. package/dist/ui/components/Footer.d.ts.map +1 -1
  221. package/dist/ui/components/Footer.js +45 -8
  222. package/dist/ui/components/Footer.js.map +1 -1
  223. package/dist/ui/components/InputArea.d.ts.map +1 -1
  224. package/dist/ui/components/InputArea.js +76 -28
  225. package/dist/ui/components/InputArea.js.map +1 -1
  226. package/dist/ui/components/ServerToolExecution.d.ts +1 -0
  227. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
  228. package/dist/ui/components/ServerToolExecution.js +21 -2
  229. package/dist/ui/components/ServerToolExecution.js.map +1 -1
  230. package/dist/ui/components/Spinner.d.ts +3 -1
  231. package/dist/ui/components/Spinner.d.ts.map +1 -1
  232. package/dist/ui/components/Spinner.js +10 -4
  233. package/dist/ui/components/Spinner.js.map +1 -1
  234. package/dist/ui/components/StreamingArea.js +1 -1
  235. package/dist/ui/components/StreamingArea.js.map +1 -1
  236. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  237. package/dist/ui/components/SubAgentPanel.js +3 -4
  238. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  239. package/dist/ui/components/ToolExecution.d.ts +2 -0
  240. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  241. package/dist/ui/components/ToolExecution.js +24 -5
  242. package/dist/ui/components/ToolExecution.js.map +1 -1
  243. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
  244. package/dist/ui/components/ToolGroupExecution.js +23 -2
  245. package/dist/ui/components/ToolGroupExecution.js.map +1 -1
  246. package/dist/ui/components/ToolUseLoader.d.ts +4 -2
  247. package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
  248. package/dist/ui/components/ToolUseLoader.js +3 -3
  249. package/dist/ui/components/ToolUseLoader.js.map +1 -1
  250. package/dist/ui/components/index.d.ts +1 -2
  251. package/dist/ui/components/index.d.ts.map +1 -1
  252. package/dist/ui/components/index.js +1 -2
  253. package/dist/ui/components/index.js.map +1 -1
  254. package/dist/ui/hooks/useAgentLoop.d.ts +4 -1
  255. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  256. package/dist/ui/hooks/useAgentLoop.js +110 -13
  257. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  258. package/dist/ui/hooks/useBlink.d.ts.map +1 -1
  259. package/dist/ui/hooks/useBlink.js +3 -4
  260. package/dist/ui/hooks/useBlink.js.map +1 -1
  261. package/dist/ui/hooks/useTerminalSize.d.ts +12 -3
  262. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
  263. package/dist/ui/hooks/useTerminalSize.js +16 -1
  264. package/dist/ui/hooks/useTerminalSize.js.map +1 -1
  265. package/dist/ui/pixel.js +1 -1
  266. package/dist/ui/pixel.test.js +1 -1
  267. package/dist/ui/pixel.test.js.map +1 -1
  268. package/dist/ui/render.d.ts +48 -1
  269. package/dist/ui/render.d.ts.map +1 -1
  270. package/dist/ui/render.js +56 -6
  271. package/dist/ui/render.js.map +1 -1
  272. package/dist/ui/theme/dark-ansi.json +2 -1
  273. package/dist/ui/theme/dark-daltonized.json +2 -1
  274. package/dist/ui/theme/dark.json +2 -1
  275. package/dist/ui/theme/light-ansi.json +2 -1
  276. package/dist/ui/theme/light-daltonized.json +2 -1
  277. package/dist/ui/theme/light.json +2 -1
  278. package/dist/ui/theme/theme.d.ts +1 -0
  279. package/dist/ui/theme/theme.d.ts.map +1 -1
  280. package/dist/utils/error-handler.d.ts.map +1 -1
  281. package/dist/utils/error-handler.js +2 -0
  282. package/dist/utils/error-handler.js.map +1 -1
  283. package/package.json +9 -6
  284. package/dist/ui/buddy/Buddy.d.ts +0 -15
  285. package/dist/ui/buddy/Buddy.d.ts.map +0 -1
  286. package/dist/ui/buddy/Buddy.js +0 -118
  287. package/dist/ui/buddy/Buddy.js.map +0 -1
  288. package/dist/ui/buddy/gacha.d.ts +0 -8
  289. package/dist/ui/buddy/gacha.d.ts.map +0 -1
  290. package/dist/ui/buddy/gacha.js +0 -94
  291. package/dist/ui/buddy/gacha.js.map +0 -1
  292. package/dist/ui/buddy/species.d.ts +0 -52
  293. package/dist/ui/buddy/species.d.ts.map +0 -1
  294. package/dist/ui/buddy/species.js +0 -257
  295. package/dist/ui/buddy/species.js.map +0 -1
  296. package/dist/ui/components/ThinkingIndicator.d.ts +0 -6
  297. package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
  298. package/dist/ui/components/ThinkingIndicator.js +0 -145
  299. package/dist/ui/components/ThinkingIndicator.js.map +0 -1
@@ -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)
@@ -47,46 +73,90 @@ function formatTokenCount(n) {
47
73
  }
48
74
  return String(n);
49
75
  }
50
- function buildMetaSuffix(elapsedMs, thinkingMs, isThinking, tokenEstimate) {
51
- const parts = [];
52
- parts.push(formatElapsed(elapsedMs));
53
- if (tokenEstimate > 0)
54
- parts.push(`↓ ${formatTokenCount(tokenEstimate)} tokens`);
55
- if (isThinking) {
56
- // Live label always show while thinking, add duration once >= 1s
57
- parts.push(thinkingMs >= 1000 ? `thinking for ${formatElapsed(thinkingMs)}` : "thinking");
58
- }
59
- else if (thinkingMs >= 1000) {
60
- // Frozen — past tense with duration
61
- parts.push(`thought for ${formatElapsed(thinkingMs)}`);
62
- }
63
- return parts.join(" · ");
76
+ export function buildMetaParts(elapsedMs, thinkingMs, isThinking, tokenEstimate) {
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` : "";
83
+ const thinking = isThinking
84
+ ? thinkingMs >= 1000
85
+ ? `thinking for ${formatElapsed(thinkingMs)}`
86
+ : "thinking"
87
+ : thinkingMs >= 1000
88
+ ? `thought for ${formatElapsed(thinkingMs)}`
89
+ : "";
90
+ return {
91
+ duration: formatElapsed(elapsedMs),
92
+ tokens,
93
+ thinking,
94
+ };
64
95
  }
65
96
  // ── Shimmer effect ────────────────────────────────────────
66
97
  const SHIMMER_WIDTH = 3;
67
98
  const SHIMMER_INTERVAL = 100;
99
+ export function getThinkingShimmerColor(themeName) {
100
+ if (themeName.includes("ansi"))
101
+ return "#55ff55";
102
+ if (themeName.startsWith("light"))
103
+ return "#15803d";
104
+ return "#22c55e";
105
+ }
68
106
  const ShimmerText = ({ text, color, shimmerPos, }) => (_jsx(Text, { children: text.split("").map((char, i) => {
69
107
  const isBright = Math.abs(i - shimmerPos) <= SHIMMER_WIDTH;
70
108
  return (_jsx(Text, { bold: isBright, color: color, dimColor: !isBright, children: char }, i));
71
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
+ }
72
135
  const RETRY_REASON_LABELS = {
73
136
  overloaded: "Provider overloaded",
74
137
  rate_limit: "Rate limited",
138
+ provider_error: "Provider server error",
75
139
  empty_response: "Empty response",
76
140
  stream_stall: "Provider stream stalled",
77
141
  overflow_compact: "Context overflow — compacting",
78
142
  };
79
- export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef, thinkingMs, isThinking, 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, }) {
80
144
  const theme = useTheme();
81
145
  const reducedMotion = useReducedMotion();
82
- // Smooth elapsed time: compute from runStartRef on each animation tick
83
- // instead of using the 1000ms state update (which looks jerky).
84
- const elapsedMs = runStartRef?.current && phase !== "idle" ? Date.now() - runStartRef.current : elapsedMsProp;
85
- // Use the global animation tick instead of a local timer.
86
- // This eliminates a duplicate 100ms setInterval that was causing
87
- // independent re-renders on top of the global AnimationProvider tick.
88
- useAnimationActive();
89
- const tick = useAnimationTick();
146
+ const thinkingShimmerColor = getThinkingShimmerColor(theme.name);
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;
90
160
  // ── Smooth token counter animation ─────────────────────
91
161
  // Smooths the TOTAL token estimate (real + estimated) so it never
92
162
  // jumps — whether tokens arrive from streaming deltas or from
@@ -99,7 +169,7 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
99
169
  const currentChars = charCountRefProp?.current ?? 0;
100
170
  const realTokens = realTokensAccumRefProp?.current ?? 0;
101
171
  const targetTokens = charCountRefProp ? realTokens + Math.ceil(currentChars / 4) : tokenEstimate;
102
- if (reducedMotion || !charCountRefProp) {
172
+ if (!fullAnimationActive || !charCountRefProp) {
103
173
  displayedTokensRef.current = targetTokens;
104
174
  }
105
175
  else {
@@ -128,32 +198,61 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
128
198
  }
129
199
  }
130
200
  const smoothTokenEstimate = displayedTokensRef.current;
131
- // Derive all animation frames from the single tick counter
132
- const spinnerFrame = reducedMotion
133
- ? 0
134
- : deriveFrame(tick, SPINNER_INTERVAL, SPINNER_FRAMES.length);
135
- const pulseColors = planMode ? PLAN_PULSE_COLORS : (pulseColorsOverride ?? PULSE_COLORS);
136
- const colorFrame = deriveFrame(tick, PULSE_INTERVAL, pulseColors.length);
137
- 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;
138
222
  // Phrase rotation — pick phrases based on phase + user message + active tools, shuffle, rotate
139
- const toolNamesKey = activeToolNames.sort().join(",");
223
+ const sortedActiveToolNames = [...activeToolNames].sort();
224
+ const toolNamesKey = sortedActiveToolNames.join(",");
140
225
  const overridePhrases = phrasesByPhase?.[phase];
141
226
  const phrases = useMemo(() => shuffleArray(overridePhrases && overridePhrases.length > 0
142
227
  ? overridePhrases
143
228
  : planMode && phase === "waiting"
144
229
  ? PLANNING_PHRASES
145
- : selectPhrases(phase, userMessage, activeToolNames)), [phase, userMessage, toolNamesKey, planMode, overridePhrases]);
146
- const phraseInterval = phase === "waiting" ? WAITING_PHRASE_INTERVAL : OTHER_PHRASE_INTERVAL;
147
- const phraseIndex = Math.floor((tick * SHIMMER_INTERVAL) / phraseInterval) % phrases.length;
148
- const spinnerColor = pulseColors[colorFrame];
230
+ : selectPhrases(phase, userMessage, activeToolNames, thinkingEnabled)), [phase, userMessage, toolNamesKey, planMode, overridePhrases, thinkingEnabled]);
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];
149
243
  const phrase = phrases[phraseIndex] ?? phrases[0];
150
244
  const ellipsis = ELLIPSIS_FRAMES[ellipsisFrame];
151
245
  // Shimmer — derive position from tick, wrapping across phrase length
152
246
  const shimmerCycle = phrase.length + SHIMMER_WIDTH * 2;
153
- const shimmerPos = (tick % shimmerCycle) - SHIMMER_WIDTH;
247
+ const shimmerPos = fullAnimationActive ? (tick % shimmerCycle) - SHIMMER_WIDTH : -SHIMMER_WIDTH;
154
248
  // Pad ellipsis to prevent text from shifting
155
- const paddedEllipsis = ellipsis + " ".repeat(3 - ellipsis.length);
156
- const meta = buildMetaSuffix(elapsedMs, thinkingMs, isThinking, smoothTokenEstimate);
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;
157
256
  // ── Plan progress bar ──────────────────────────────────
158
257
  const planBar = useMemo(() => {
159
258
  if (planTotal <= 0)
@@ -167,8 +266,8 @@ export function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef
167
266
  const retryLabel = RETRY_REASON_LABELS[retryInfo.reason];
168
267
  const retryColor = "#f59e0b"; // amber
169
268
  const delaySec = retryInfo.delayMs > 0 ? ` waiting ${Math.round(retryInfo.delayMs / 1000)}s` : "";
170
- 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 })] }));
171
270
  }
172
- 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 && (_jsxs(Text, { color: theme.textDim, children: [" (", meta, ")"] })), 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] })] }))] }));
173
272
  }
174
273
  //# sourceMappingURL=ActivityIndicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ActivityIndicator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityIndicator.test.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildMetaParts, getThinkingShimmerColor } from "./ActivityIndicator.js";
3
+ describe("buildMetaParts", () => {
4
+ it("shows live thinking without a duration before one second", () => {
5
+ expect(buildMetaParts(400, 400, true, 0)).toEqual({
6
+ prefix: "0s",
7
+ thinking: "thinking",
8
+ });
9
+ });
10
+ it("shows live thinking duration after one second", () => {
11
+ expect(buildMetaParts(12_400, 5_400, true, 425)).toEqual({
12
+ prefix: "12s · ↓ 425 tokens",
13
+ thinking: "thinking for 5s",
14
+ });
15
+ });
16
+ it("shows completed thought duration only after one second", () => {
17
+ expect(buildMetaParts(61_000, 1_000, false, 1_250)).toEqual({
18
+ prefix: "1m 1s · ↓ 1.3k tokens",
19
+ thinking: "thought for 1s",
20
+ });
21
+ });
22
+ it("omits completed thought duration below one second", () => {
23
+ expect(buildMetaParts(2_000, 999, false, 0)).toEqual({
24
+ prefix: "2s",
25
+ thinking: "",
26
+ });
27
+ });
28
+ });
29
+ describe("getThinkingShimmerColor", () => {
30
+ it("uses high-contrast green on dark themes", () => {
31
+ expect(getThinkingShimmerColor("dark")).toBe("#22c55e");
32
+ });
33
+ it("uses a darker green on light themes", () => {
34
+ expect(getThinkingShimmerColor("light")).toBe("#15803d");
35
+ });
36
+ it("uses ANSI green on ANSI themes", () => {
37
+ expect(getThinkingShimmerColor("light-ansi")).toBe("#55ff55");
38
+ });
39
+ });
40
+ //# sourceMappingURL=ActivityIndicator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityIndicator.test.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YACvD,MAAM,EAAE,oBAAoB;YAC5B,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,gBAAgB;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACnD,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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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"}
@@ -8,7 +8,7 @@ import { useTerminalSize } from "../hooks/useTerminalSize.js";
8
8
  import { BLACK_CIRCLE } from "../constants/figures.js";
9
9
  // BLACK_CIRCLE + " " = 2 chars
10
10
  const PREFIX_WIDTH = 2;
11
- export const AssistantMessage = React.memo(function AssistantMessage({ text, thinking, thinkingMs, showThinking = true, planMode, }) {
11
+ export const AssistantMessage = React.memo(function AssistantMessage({ text, thinking, thinkingMs, showThinking = false, planMode, }) {
12
12
  const theme = useTheme();
13
13
  const { columns } = useTerminalSize();
14
14
  const contentWidth = Math.max(10, columns - PREFIX_WIDTH);
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantMessage.js","sourceRoot":"","sources":["../../../src/ui/components/AssistantMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAUvD,+BAA+B;AAC/B,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,EACnE,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,YAAY,GAAG,IAAI,EACnB,QAAQ,GACc;IACtB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC;IAE1D,wEAAwE;IACxE,sEAAsE;IACtE,oEAAoE;IACpE,mCAAmC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACrC,WAAW,IAAI,KAAC,aAAa,IAAC,IAAI,EAAE,QAAS,EAAE,UAAU,EAAE,UAAU,GAAI,EACzE,WAAW,IAAI,CACd,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACtB,KAAC,GAAG,IAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,YACrC,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,YAAG,YAAY,GAAG,GAAG,GAAQ,GAClF,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,YAC1D,KAAC,QAAQ,cAAE,WAAW,GAAY,GAC9B,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"AssistantMessage.js","sourceRoot":"","sources":["../../../src/ui/components/AssistantMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAUvD,+BAA+B;AAC/B,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,EACnE,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,YAAY,GAAG,KAAK,EACpB,QAAQ,GACc;IACtB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC;IAE1D,wEAAwE;IACxE,sEAAsE;IACtE,oEAAoE;IACpE,mCAAmC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACrC,WAAW,IAAI,KAAC,aAAa,IAAC,IAAI,EAAE,QAAS,EAAE,UAAU,EAAE,UAAU,GAAI,EACzE,WAAW,IAAI,CACd,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,aACtB,KAAC,GAAG,IAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,YACrC,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,YAAG,YAAY,GAAG,GAAG,GAAQ,GAClF,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,YAC1D,KAAC,QAAQ,cAAE,WAAW,GAAY,GAC9B,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -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"}