@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
@@ -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,9 +1,17 @@
1
+ import type { ThinkingLevel } from "@prestyj/ai";
2
+ import { type ContextWindowOptions } from "../../core/model-registry.js";
1
3
  interface FooterProps {
2
4
  model: string;
3
5
  tokensIn: number;
6
+ contextWindowOptions?: ContextWindowOptions;
4
7
  cwd: string;
5
8
  gitBranch?: string | null;
6
- thinkingEnabled?: boolean;
9
+ /**
10
+ * Active thinking tier, or `undefined` when thinking is off. The footer
11
+ * renders the tier verbatim (`Thinking xhigh`) and color-codes by power.
12
+ * `xhigh` additionally shimmers to signal it's the top tier.
13
+ */
14
+ thinkingLevel?: ThinkingLevel;
7
15
  planMode?: boolean;
8
16
  exitPending?: boolean;
9
17
  /** Hide the plan-mode toggle entirely (for products that don't have plan mode). */
@@ -24,6 +32,6 @@ interface FooterProps {
24
32
  */
25
33
  statusBelow?: boolean;
26
34
  }
27
- export declare function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, exitPending, hidePlan, statusLabel, statusColor, hideCwd, hideGitBranch, statusBelow, }: FooterProps): import("react/jsx-runtime").JSX.Element;
35
+ export declare function Footer({ model, tokensIn, contextWindowOptions, cwd, gitBranch, thinkingLevel, planMode, exitPending, hidePlan, statusLabel, statusColor, hideCwd, hideGitBranch, statusBelow, }: FooterProps): import("react/jsx-runtime").JSX.Element;
28
36
  export {};
29
37
  //# sourceMappingURL=Footer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,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;AAgCD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,GAAG,EACH,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,OAAO,EACP,aAAa,EACb,WAAW,GACZ,EAAE,WAAW,2CAsNb"}
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,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,6 +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 { useFocusedAnimation, useReducedMotion } from "./AnimationContext.js";
8
9
  // Model ID → short display name
9
10
  const MODEL_SHORT_NAMES = {
10
11
  "claude-opus-4-7": "Opus",
@@ -12,17 +13,15 @@ const MODEL_SHORT_NAMES = {
12
13
  "claude-haiku-4-5": "Haiku",
13
14
  "claude-haiku-4-5-20251001": "Haiku",
14
15
  "gpt-5.5": "GPT-5.5",
15
- "gpt-5.5-pro": "GPT-5.5 Pro",
16
16
  "gpt-5.4": "GPT-5.4",
17
17
  "gpt-5.4-mini": "GPT-5.4 Mini",
18
18
  "gpt-5.3-codex": "GPT-5.3 Codex",
19
- "codex-mini-latest": "Codex Mini",
20
19
  };
21
20
  function getShortModelName(model) {
22
21
  return MODEL_SHORT_NAMES[model] ?? model;
23
22
  }
24
- function getContextPercent(model, tokensIn) {
25
- const limit = getContextWindow(model);
23
+ function getContextPercent(model, tokensIn, options) {
24
+ const limit = getContextWindow(model, options);
26
25
  if (!limit || tokensIn === 0)
27
26
  return 0;
28
27
  return Math.round((tokensIn / limit) * 100);
@@ -34,13 +33,46 @@ function getContextColor(pct, theme) {
34
33
  return theme.warning;
35
34
  return theme.success;
36
35
  }
37
- export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, exitPending, hidePlan, statusLabel, statusColor, hideCwd, hideGitBranch, statusBelow, }) {
36
+ // ── Thinking-level visual treatment ─────────────────────────
37
+ //
38
+ // Higher tier = warmer / more saturated color. `xhigh` adds a moving shimmer
39
+ // so the top tier reads as visibly "on full power" at a glance.
40
+ const XHIGH_COLOR = "#db2777"; // hot pink — the visible "max power" tone
41
+ const XHIGH_SHIMMER_COLOR = "#f472b6"; // brighter pink that rides the shimmer
42
+ const SHIMMER_WIDTH = 2;
43
+ function getThinkingColor(level, theme) {
44
+ if (!level)
45
+ return theme.textDim;
46
+ if (level === "low")
47
+ return theme.textMuted;
48
+ if (level === "medium")
49
+ return theme.accent;
50
+ if (level === "high")
51
+ return theme.warning;
52
+ return XHIGH_COLOR; // xhigh
53
+ }
54
+ /**
55
+ * Per-char shimmer for the xhigh thinking label. A bright spot rides across
56
+ * the text; chars within `SHIMMER_WIDTH` of the spot render bright/bold, the
57
+ * rest stay in the base color. Subscribes to the global animation tick so
58
+ * the timer only runs while xhigh is visible.
59
+ */
60
+ const XhighShimmer = ({ text, active = true }) => {
61
+ const { active: animationActive, tick } = useFocusedAnimation(active);
62
+ const cycle = text.length + SHIMMER_WIDTH * 2;
63
+ const pos = animationActive ? (tick % cycle) - SHIMMER_WIDTH : -SHIMMER_WIDTH;
64
+ return (_jsx(Text, { children: text.split("").map((ch, i) => {
65
+ const isBright = Math.abs(i - pos) <= SHIMMER_WIDTH;
66
+ return (_jsx(Text, { color: isBright ? XHIGH_SHIMMER_COLOR : XHIGH_COLOR, bold: isBright, children: ch }, i));
67
+ }) }));
68
+ };
69
+ export function Footer({ model, tokensIn, contextWindowOptions, cwd, gitBranch, thinkingLevel, planMode, exitPending, hidePlan, statusLabel, statusColor, hideCwd, hideGitBranch, statusBelow, }) {
38
70
  const theme = useTheme();
39
71
  const { columns } = useTerminalSize();
40
72
  // Show only the current directory name
41
73
  const parts = cwd.split("/").filter(Boolean);
42
74
  const displayPath = parts.length > 0 ? parts[parts.length - 1] : cwd;
43
- const contextPct = getContextPercent(model, tokensIn);
75
+ const contextPct = getContextPercent(model, tokensIn, contextWindowOptions);
44
76
  const contextColor = getContextColor(contextPct, theme);
45
77
  const sep = _jsx(Text, { color: theme.border, children: " \u2502 " });
46
78
  const modelName = getShortModelName(model);
@@ -63,7 +95,12 @@ export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planM
63
95
  }
64
96
  // Plan/Thinking labels
65
97
  const planText = planMode ? "Plan on" : "Plan off";
66
- const thinkingText = thinkingEnabled ? "Thinking on" : "Thinking off";
98
+ // Show the actual tier when on (`Thinking xhigh`) so users see what they're
99
+ // paying for. Off is the only state that stays generic.
100
+ const thinkingText = thinkingLevel ? `Thinking ${thinkingLevel}` : "Thinking off";
101
+ const thinkingColor = getThinkingColor(thinkingLevel, theme);
102
+ const reducedMotion = useReducedMotion();
103
+ const shimmerXhigh = thinkingLevel === "xhigh" && !reducedMotion;
67
104
  const showPlan = !hidePlan;
68
105
  // Calculate whether everything fits on one line
69
106
  const leftLen = displayPath.length + 2 + (gitBranch ? gitBranch.length + 5 : 0);
@@ -83,7 +120,7 @@ export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planM
83
120
  ? "\u2026" + displayPath.slice(displayPath.length - maxPath + 1)
84
121
  : displayPath;
85
122
  // Shared right-side content
86
- 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, _jsx(Text, { color: thinkingEnabled ? theme.accent : theme.textDim, 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 }))] }));
87
124
  if (exitPending) {
88
125
  return (_jsx(Box, { paddingLeft: 1, paddingRight: 1, width: columns, children: _jsx(Text, { color: theme.warning, children: "Press Ctrl+C again to exit" }) }));
89
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmLhG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;qEACiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAkDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAa,EACb,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,KAAK,GACN,EAAE,cAAc,2CA0xChB"}
1
+ {"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAuLhG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;qEACiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAkDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAa,EACb,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,KAAK,GACN,EAAE,cAAc,2CA+0ChB"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import React, { useState, useRef, useEffect, useMemo } from "react";
3
3
  import { Text, Box, useInput, useStdin } from "ink";
4
4
  import { useTheme } from "../theme/theme.js";
5
- import { useAnimationTick, useAnimationActive, deriveFrame } from "./AnimationContext.js";
5
+ import { useFocusedAnimation, deriveFrame } from "./AnimationContext.js";
6
6
  import { useTerminalSize } from "../hooks/useTerminalSize.js";
7
7
  import { extractImagePaths, readImageFile, getClipboardImage } from "../../utils/image.js";
8
8
  import { SlashCommandMenu, filterCommands } from "./SlashCommandMenu.js";
@@ -27,6 +27,9 @@ const DISABLE_MOUSE = "\x1b[?1006l\x1b[?1000l";
27
27
  function isMouseEscapeSequence(input) {
28
28
  return input.includes("[<") && /\[<\d+;\d+;\d+[Mm]/.test(input);
29
29
  }
30
+ function stripTerminalFocusSequences(input) {
31
+ return input.replaceAll("\x1b[I", "").replaceAll("\x1b[O", "");
32
+ }
30
33
  // Option+Arrow escape sequences — terminals send these as raw input strings
31
34
  // rather than setting key.meta + key.leftArrow reliably.
32
35
  const OPTION_LEFT_SEQUENCES = new Set([
@@ -270,12 +273,15 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
270
273
  }, [slashFilter]);
271
274
  // Border color pulse (when idle/waiting for input)
272
275
  const borderPulseColors = useMemo(() => [theme.primary, theme.accent, theme.secondary, theme.accent], [theme.primary, theme.accent, theme.secondary]);
273
- // Derive border pulse and cursor blink from global animation tick
274
- useAnimationActive();
275
- const tick = useAnimationTick();
276
- const borderFrame = disabled ? 0 : deriveFrame(tick, 800, borderPulseColors.length);
276
+ // Derive border pulse and cursor blink from global animation tick.
277
+ // Disable it while the agent owns the terminal; otherwise the idle input's
278
+ // cursor/border animation keeps repainting the live area during long runs,
279
+ // which makes terminal scrollback snap back to the bottom.
280
+ const inputAnimationEnabled = !disabled && isActive;
281
+ const { active: inputAnimationActive, tick } = useFocusedAnimation(inputAnimationEnabled);
282
+ const borderFrame = inputAnimationActive ? deriveFrame(tick, 800, borderPulseColors.length) : 0;
277
283
  // Cursor blink: ~530ms period → visible for ~500ms, hidden for ~500ms
278
- const cursorVisible = !isActive || deriveFrame(tick, 530, 2) === 0;
284
+ const cursorVisible = !inputAnimationActive || deriveFrame(tick, 530, 2) === 0;
279
285
  // Auto-detect image paths as they're pasted/typed — debounce so full paste arrives
280
286
  const extractingRef = useRef(false);
281
287
  useEffect(() => {
@@ -308,34 +314,71 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
308
314
  }, 300);
309
315
  return () => clearTimeout(timer);
310
316
  }, [value, cwd, disabled]);
311
- // Normalize numpad Enter (kpenter) to regular Enter. With the kitty
312
- // keyboard protocol enabled, numpad Enter sends codepoint 57414 which Ink
313
- // parses as "kpenter" instead of "return", so key.return is never set.
314
- // We listen on Ink's internal event emitter and re-emit the sequence as
315
- // a plain carriage return (\r) that Ink recognises as key.return.
317
+ // Normalize Enter/Tab sequences from terminals that don't speak kitty
318
+ // keyboard protocol cleanly. Two cases handled:
319
+ //
320
+ // 1. Numpad Enter (kitty form: ESC[57414u or ESC[57414;Nu) Ink parses
321
+ // this as "kpenter" rather than "return", so key.return is never set.
322
+ // 2. xterm modifyOtherKeys=2 form: ESC[27;<mod>;<keycode>~ — Terminal.app,
323
+ // older xterms, and some iTerm2 configs send Shift+Enter as
324
+ // ESC[27;2;13~ when the kitty enable request is ignored. Ink can't
325
+ // parse this form and the raw bytes leak into the text input.
326
+ //
327
+ // We wrap the internal event emitter so we can both translate the
328
+ // sequence into something Ink recognises AND swallow the original
329
+ // bytes before Ink's parser sees them.
316
330
  const { internal_eventEmitter } = useStdin();
317
331
  useEffect(() => {
318
332
  if (!isActive || !internal_eventEmitter)
319
333
  return;
320
- // Matches ESC[57414u or ESC[57414;Nu (N = modifier) — numpad Enter
321
- // in the kitty keyboard protocol.
322
334
  // eslint-disable-next-line no-control-regex
323
335
  const kpEnterRe = /^\x1b\[57414(;\d+)?u$/;
324
- const onInput = (data) => {
325
- if (kpEnterRe.test(data)) {
326
- // Determine modifier flags from the sequence
327
- const modMatch = /;(\d+)u$/.exec(data);
328
- const mod = modMatch ? Math.max(0, parseInt(modMatch[1], 10) - 1) : 0;
329
- const hasShift = !!(mod & 1);
330
- const hasMeta = !!(mod & 10);
331
- // Re-emit as regular Enter, preserving shift/meta for newline insertion
332
- const synth = hasShift ? "\x1b[13;2u" : hasMeta ? "\x1b\r" : "\r";
333
- internal_eventEmitter.emit("input", synth);
336
+ // eslint-disable-next-line no-control-regex
337
+ const xtermModifyRe = /^\x1b\[27;(\d+);(\d+)~$/;
338
+ const synthForEnter = (mod) => {
339
+ const hasShift = !!(mod & 1);
340
+ const hasMeta = !!(mod & 10);
341
+ return hasShift ? "\x1b[13;2u" : hasMeta ? "\x1b\r" : "\r";
342
+ };
343
+ const originalEmit = internal_eventEmitter.emit.bind(internal_eventEmitter);
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ const wrappedEmit = (event, ...args) => {
346
+ if (event === "input" && typeof args[0] === "string") {
347
+ const data = args[0];
348
+ const withoutFocusReports = stripTerminalFocusSequences(data);
349
+ if (!withoutFocusReports)
350
+ return true;
351
+ if (kpEnterRe.test(withoutFocusReports)) {
352
+ const modMatch = /;(\d+)u$/.exec(withoutFocusReports);
353
+ const mod = modMatch ? Math.max(0, parseInt(modMatch[1], 10) - 1) : 0;
354
+ return originalEmit("input", synthForEnter(mod));
355
+ }
356
+ const xtermMatch = xtermModifyRe.exec(withoutFocusReports);
357
+ if (xtermMatch) {
358
+ const mod = Math.max(0, parseInt(xtermMatch[1], 10) - 1);
359
+ const keycode = parseInt(xtermMatch[2], 10);
360
+ if (keycode === 13) {
361
+ return originalEmit("input", synthForEnter(mod));
362
+ }
363
+ if (keycode === 9) {
364
+ const hasShift = !!(mod & 1);
365
+ return originalEmit("input", hasShift ? "\x1b[Z" : "\t");
366
+ }
367
+ // Unknown keycode in this form — swallow so the raw bytes
368
+ // don't end up in the text field.
369
+ return true;
370
+ }
371
+ if (withoutFocusReports !== data) {
372
+ return originalEmit("input", withoutFocusReports);
373
+ }
334
374
  }
375
+ return originalEmit(event, ...args);
335
376
  };
336
- internal_eventEmitter.on("input", onInput);
377
+ internal_eventEmitter.emit = wrappedEmit;
337
378
  return () => {
338
- internal_eventEmitter.removeListener("input", onInput);
379
+ if (internal_eventEmitter.emit === wrappedEmit) {
380
+ internal_eventEmitter.emit = originalEmit;
381
+ }
339
382
  };
340
383
  }, [isActive, internal_eventEmitter]);
341
384
  // --- Mouse click-to-position-cursor ---
@@ -412,8 +455,9 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
412
455
  internal_eventEmitter.emit = (event, ...args) => {
413
456
  if (event === "input" && typeof args[0] === "string") {
414
457
  const data = args[0];
415
- // Strip all SGR mouse sequences from the data
416
- const stripped = data.replace(SGR_MOUSE_RE_G, "");
458
+ // Strip all terminal focus reports and SGR mouse sequences from the data
459
+ const dataWithoutFocusReports = stripTerminalFocusSequences(data);
460
+ const stripped = dataWithoutFocusReports.replace(SGR_MOUSE_RE_G, "");
417
461
  // Process each mouse sequence for click handling
418
462
  let match;
419
463
  SGR_MOUSE_RE_G.lastIndex = 0;
@@ -582,9 +626,13 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
582
626
  };
583
627
  useInput((input, key) => {
584
628
  // Filter out stray mouse escape sequences so they don't get inserted as text
585
- if (isMouseEscapeSequence(input))
629
+ const inputWithoutFocusReports = stripTerminalFocusSequences(input);
630
+ if (!inputWithoutFocusReports && input)
631
+ return;
632
+ if (isMouseEscapeSequence(inputWithoutFocusReports))
586
633
  return;
587
634
  // Reset kill ring accumulation for non-kill keys
635
+ input = inputWithoutFocusReports;
588
636
  const isKillKey = key.ctrl && (input === "k" || input === "u" || input === "w");
589
637
  if (!isKillKey)
590
638
  lastActionWasKill = false;