@pentoshi/clai 4.8.4 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/README.md +69 -3
  2. package/dist/agent/finalize-gate.js +0 -9
  3. package/dist/agent/finalize-gate.js.map +1 -1
  4. package/dist/agent/plan-mode-reminders.js +5 -5
  5. package/dist/agent/plan-mode-reminders.js.map +1 -1
  6. package/dist/agent/plan-tool.d.ts +1 -0
  7. package/dist/agent/plan-tool.js +50 -21
  8. package/dist/agent/plan-tool.js.map +1 -1
  9. package/dist/agent/reliability-policy.d.ts +9 -0
  10. package/dist/agent/reliability-policy.js +36 -1
  11. package/dist/agent/reliability-policy.js.map +1 -1
  12. package/dist/agent/runner.d.ts +4 -0
  13. package/dist/agent/runner.js +193 -116
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/agent/task-analyzer.d.ts +8 -18
  16. package/dist/agent/task-analyzer.js +75 -182
  17. package/dist/agent/task-analyzer.js.map +1 -1
  18. package/dist/agent/task-evidence.js +10 -0
  19. package/dist/agent/task-evidence.js.map +1 -1
  20. package/dist/agent/tool-call-parser.js +14 -13
  21. package/dist/agent/tool-call-parser.js.map +1 -1
  22. package/dist/app/adapters/current-agent-adapter.d.ts +5 -1
  23. package/dist/app/adapters/current-agent-adapter.js +2 -1
  24. package/dist/app/adapters/current-agent-adapter.js.map +1 -1
  25. package/dist/app/commands/catalog.js +5 -0
  26. package/dist/app/commands/catalog.js.map +1 -1
  27. package/dist/app/controllers/session-compact-helper.js +3 -6
  28. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  29. package/dist/app/ports/transcript-item.d.ts +4 -0
  30. package/dist/classic/app/ClassicApp.js +1 -1
  31. package/dist/classic/app/ClassicApp.js.map +1 -1
  32. package/dist/classic/app/action-handlers.js +4 -0
  33. package/dist/classic/app/action-handlers.js.map +1 -1
  34. package/dist/classic/app/app-wiring.js +1 -0
  35. package/dist/classic/app/app-wiring.js.map +1 -1
  36. package/dist/classic/app/wiring-lifecycle.js +1 -0
  37. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  38. package/dist/classic/blocks/compacted-lines.js +3 -0
  39. package/dist/classic/blocks/compacted-lines.js.map +1 -1
  40. package/dist/classic/blocks/thinking-lines.js +11 -2
  41. package/dist/classic/blocks/thinking-lines.js.map +1 -1
  42. package/dist/classic/bootstrap/start-classic.js +3 -0
  43. package/dist/classic/bootstrap/start-classic.js.map +1 -1
  44. package/dist/classic/chrome/Composer.d.ts +6 -0
  45. package/dist/classic/chrome/Composer.js +2 -3
  46. package/dist/classic/chrome/Composer.js.map +1 -1
  47. package/dist/classic/chrome/composer-controller.d.ts +6 -1
  48. package/dist/classic/chrome/composer-controller.js +18 -8
  49. package/dist/classic/chrome/composer-controller.js.map +1 -1
  50. package/dist/classic/chrome/editor-view.d.ts +2 -1
  51. package/dist/classic/chrome/editor-view.js +1 -1
  52. package/dist/classic/chrome/editor-view.js.map +1 -1
  53. package/dist/classic/chrome/status-rows.js +3 -2
  54. package/dist/classic/chrome/status-rows.js.map +1 -1
  55. package/dist/classic/panels/TextEditorPanel.d.ts +3 -0
  56. package/dist/classic/panels/TextEditorPanel.js +7 -0
  57. package/dist/classic/panels/TextEditorPanel.js.map +1 -0
  58. package/dist/classic/panels/panel-controller.js +28 -1
  59. package/dist/classic/panels/panel-controller.js.map +1 -1
  60. package/dist/classic/panels/panel-effect.d.ts +3 -0
  61. package/dist/classic/panels/panel-effect.js.map +1 -1
  62. package/dist/classic/panels/panel-effects.js +3 -0
  63. package/dist/classic/panels/panel-effects.js.map +1 -1
  64. package/dist/classic/panels/panel-host.js +3 -0
  65. package/dist/classic/panels/panel-host.js.map +1 -1
  66. package/dist/classic/panels/panel-types.d.ts +2 -0
  67. package/dist/classic/panels/secret-panel.d.ts +1 -1
  68. package/dist/classic/panels/secret-panel.js +4 -2
  69. package/dist/classic/panels/secret-panel.js.map +1 -1
  70. package/dist/classic/panels/text-editor-panel.d.ts +33 -0
  71. package/dist/classic/panels/text-editor-panel.js +101 -0
  72. package/dist/classic/panels/text-editor-panel.js.map +1 -0
  73. package/dist/llm/adapters/anthropic-tools.d.ts +2 -1
  74. package/dist/llm/adapters/anthropic-tools.js +55 -4
  75. package/dist/llm/adapters/anthropic-tools.js.map +1 -1
  76. package/dist/llm/anthropic.js +1 -1
  77. package/dist/llm/anthropic.js.map +1 -1
  78. package/dist/llm/aws-mantle.js +2 -0
  79. package/dist/llm/aws-mantle.js.map +1 -1
  80. package/dist/llm/meta.js +62 -68
  81. package/dist/llm/meta.js.map +1 -1
  82. package/dist/llm/provider.js +7 -7
  83. package/dist/llm/request-plan.js +7 -2
  84. package/dist/llm/request-plan.js.map +1 -1
  85. package/dist/llm/tool-protocol.d.ts +1 -0
  86. package/dist/llm/tool-protocol.js +7 -0
  87. package/dist/llm/tool-protocol.js.map +1 -1
  88. package/dist/mcp/client.d.ts +27 -0
  89. package/dist/mcp/client.js +119 -0
  90. package/dist/mcp/client.js.map +1 -0
  91. package/dist/mcp/config-file.d.ts +35 -0
  92. package/dist/mcp/config-file.js +217 -0
  93. package/dist/mcp/config-file.js.map +1 -0
  94. package/dist/mcp/discovery.d.ts +4 -0
  95. package/dist/mcp/discovery.js +409 -0
  96. package/dist/mcp/discovery.js.map +1 -0
  97. package/dist/mcp/format.d.ts +17 -0
  98. package/dist/mcp/format.js +122 -0
  99. package/dist/mcp/format.js.map +1 -0
  100. package/dist/mcp/index.d.ts +15 -0
  101. package/dist/mcp/index.js +16 -0
  102. package/dist/mcp/index.js.map +1 -0
  103. package/dist/mcp/jsonrpc.d.ts +40 -0
  104. package/dist/mcp/jsonrpc.js +175 -0
  105. package/dist/mcp/jsonrpc.js.map +1 -0
  106. package/dist/mcp/manager.d.ts +36 -0
  107. package/dist/mcp/manager.js +300 -0
  108. package/dist/mcp/manager.js.map +1 -0
  109. package/dist/mcp/mentions.d.ts +9 -0
  110. package/dist/mcp/mentions.js +44 -0
  111. package/dist/mcp/mentions.js.map +1 -0
  112. package/dist/mcp/names.d.ts +15 -0
  113. package/dist/mcp/names.js +59 -0
  114. package/dist/mcp/names.js.map +1 -0
  115. package/dist/mcp/results.d.ts +6 -0
  116. package/dist/mcp/results.js +182 -0
  117. package/dist/mcp/results.js.map +1 -0
  118. package/dist/mcp/runtime.d.ts +107 -0
  119. package/dist/mcp/runtime.js +505 -0
  120. package/dist/mcp/runtime.js.map +1 -0
  121. package/dist/mcp/substitution.d.ts +13 -0
  122. package/dist/mcp/substitution.js +74 -0
  123. package/dist/mcp/substitution.js.map +1 -0
  124. package/dist/mcp/transport-http.d.ts +53 -0
  125. package/dist/mcp/transport-http.js +433 -0
  126. package/dist/mcp/transport-http.js.map +1 -0
  127. package/dist/mcp/transport-stdio.d.ts +39 -0
  128. package/dist/mcp/transport-stdio.js +268 -0
  129. package/dist/mcp/transport-stdio.js.map +1 -0
  130. package/dist/mcp/transport.d.ts +20 -0
  131. package/dist/mcp/transport.js +44 -0
  132. package/dist/mcp/transport.js.map +1 -0
  133. package/dist/mcp/types.d.ts +179 -0
  134. package/dist/mcp/types.js +30 -0
  135. package/dist/mcp/types.js.map +1 -0
  136. package/dist/mcp/validation.d.ts +16 -0
  137. package/dist/mcp/validation.js +222 -0
  138. package/dist/mcp/validation.js.map +1 -0
  139. package/dist/modes/agent.d.ts +2 -0
  140. package/dist/modes/agent.js.map +1 -1
  141. package/dist/noninteractive/start-noninteractive.js +4 -0
  142. package/dist/noninteractive/start-noninteractive.js.map +1 -1
  143. package/dist/prompts/embedded.js +2 -2
  144. package/dist/prompts/embedded.js.map +1 -1
  145. package/dist/prompts/index.d.ts +3 -0
  146. package/dist/prompts/index.js +70 -55
  147. package/dist/prompts/index.js.map +1 -1
  148. package/dist/prompts/system.agent.md +34 -10
  149. package/dist/prompts/system.ask.md +8 -0
  150. package/dist/safety/classifier.js +4 -0
  151. package/dist/safety/classifier.js.map +1 -1
  152. package/dist/store/logs.js +17 -6
  153. package/dist/store/logs.js.map +1 -1
  154. package/dist/store/plan.d.ts +2 -0
  155. package/dist/store/plan.js.map +1 -1
  156. package/dist/store/session-workspace.js +2 -1
  157. package/dist/store/session-workspace.js.map +1 -1
  158. package/dist/tools/definitions.js +18 -0
  159. package/dist/tools/definitions.js.map +1 -1
  160. package/dist/tools/external-tools.d.ts +30 -0
  161. package/dist/tools/external-tools.js +52 -0
  162. package/dist/tools/external-tools.js.map +1 -0
  163. package/dist/tools/registry.js +36 -5
  164. package/dist/tools/registry.js.map +1 -1
  165. package/dist/tui-v2/bootstrap/start-tui-v2.js +3 -0
  166. package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
  167. package/dist/tui-v2/components/completion/completion-menu.d.ts +4 -6
  168. package/dist/tui-v2/components/completion/completion-menu.js +34 -16
  169. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
  170. package/dist/tui-v2/components/composer/composer-input-box.js +3 -1
  171. package/dist/tui-v2/components/composer/composer-input-box.js.map +1 -1
  172. package/dist/tui-v2/components/modal/secret-modal.js +6 -4
  173. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  174. package/dist/tui-v2/components/modal/text-editor-modal.d.ts +19 -0
  175. package/dist/tui-v2/components/modal/text-editor-modal.js +85 -0
  176. package/dist/tui-v2/components/modal/text-editor-modal.js.map +1 -0
  177. package/dist/tui-v2/components/overlay/overlay-host.js +2 -1
  178. package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
  179. package/dist/tui-v2/components/transcript/compacted-row.js +12 -3
  180. package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
  181. package/dist/tui-v2/components/transcript/thinking-block.d.ts +9 -1
  182. package/dist/tui-v2/components/transcript/thinking-block.js +253 -49
  183. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  184. package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +46 -0
  185. package/dist/tui-v2/components/transcript/thinking-presentation.js +84 -0
  186. package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -0
  187. package/dist/tui-v2/components/transcript/transcript-row.d.ts +2 -0
  188. package/dist/tui-v2/components/transcript/transcript-row.js +7 -2
  189. package/dist/tui-v2/components/transcript/transcript-row.js.map +1 -1
  190. package/dist/tui-v2/components/transcript/transcript-view.js +195 -83
  191. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  192. package/dist/tui-v2/composer/composer-editor.js +54 -39
  193. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  194. package/dist/tui-v2/composer/composer-highlight.d.ts +20 -0
  195. package/dist/tui-v2/composer/composer-highlight.js +97 -0
  196. package/dist/tui-v2/composer/composer-highlight.js.map +1 -0
  197. package/dist/tui-v2/composer/textarea-keybindings.d.ts +5 -0
  198. package/dist/tui-v2/composer/textarea-keybindings.js +12 -0
  199. package/dist/tui-v2/composer/textarea-keybindings.js.map +1 -1
  200. package/dist/ui/mentions.js +4 -1
  201. package/dist/ui/mentions.js.map +1 -1
  202. package/dist/ui-core/actions/action-id.d.ts +1 -1
  203. package/dist/ui-core/actions/action-id.js +1 -0
  204. package/dist/ui-core/actions/action-id.js.map +1 -1
  205. package/dist/ui-core/actions/format-shortcuts.js +5 -0
  206. package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
  207. package/dist/ui-core/actions/keymap.js +3 -0
  208. package/dist/ui-core/actions/keymap.js.map +1 -1
  209. package/dist/ui-core/bootstrap/composition-root.d.ts +3 -0
  210. package/dist/ui-core/bootstrap/composition-root.js +5 -1
  211. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  212. package/dist/ui-core/commands/command-handlers.js +2 -0
  213. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  214. package/dist/ui-core/commands/mcp-commands.d.ts +3 -0
  215. package/dist/ui-core/commands/mcp-commands.js +310 -0
  216. package/dist/ui-core/commands/mcp-commands.js.map +1 -0
  217. package/dist/ui-core/commands/picker-commands.d.ts +1 -1
  218. package/dist/ui-core/commands/picker-commands.js +2 -2
  219. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  220. package/dist/ui-core/commands/session-commands.js +1 -0
  221. package/dist/ui-core/commands/session-commands.js.map +1 -1
  222. package/dist/ui-core/composer/completion-viewport.d.ts +40 -0
  223. package/dist/ui-core/composer/completion-viewport.js +105 -0
  224. package/dist/ui-core/composer/completion-viewport.js.map +1 -0
  225. package/dist/ui-core/controllers/overlay-controller.d.ts +24 -3
  226. package/dist/ui-core/controllers/overlay-controller.js +35 -4
  227. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  228. package/dist/ui-core/rendering/artifact-pager-source.d.ts +1 -0
  229. package/dist/ui-core/rendering/artifact-pager-source.js +67 -1
  230. package/dist/ui-core/rendering/artifact-pager-source.js.map +1 -1
  231. package/dist/ui-core/rendering/duration.d.ts +3 -1
  232. package/dist/ui-core/rendering/duration.js +14 -0
  233. package/dist/ui-core/rendering/duration.js.map +1 -1
  234. package/dist/ui-core/rendering/exit-summary.js +4 -4
  235. package/dist/ui-core/rendering/format-help.js +4 -0
  236. package/dist/ui-core/rendering/format-help.js.map +1 -1
  237. package/dist/ui-core/rendering/intro-header.js +4 -4
  238. package/dist/ui-core/rendering/open-tool-output.js +90 -32
  239. package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
  240. package/dist/ui-core/rendering/theme.d.ts +5 -3
  241. package/dist/ui-core/rendering/theme.js +8 -4
  242. package/dist/ui-core/rendering/theme.js.map +1 -1
  243. package/dist/ui-core/rendering/wordmark.d.ts +2 -2
  244. package/dist/ui-core/rendering/wordmark.js +62 -62
  245. package/dist/ui-core/rendering/wordmark.js.map +1 -1
  246. package/dist/ui-core/state/thinking-copy.d.ts +13 -0
  247. package/dist/ui-core/state/thinking-copy.js +33 -0
  248. package/dist/ui-core/state/thinking-copy.js.map +1 -0
  249. package/dist/ui-core/state/transcript-hydrate.js +20 -0
  250. package/dist/ui-core/state/transcript-hydrate.js.map +1 -1
  251. package/dist/ui-core/state/transcript-reducer.js +140 -62
  252. package/dist/ui-core/state/transcript-reducer.js.map +1 -1
  253. package/dist/ui-core/state/transcript-store.d.ts +10 -0
  254. package/dist/ui-core/state/transcript-store.js +235 -31
  255. package/dist/ui-core/state/transcript-store.js.map +1 -1
  256. package/dist/ui-core/state/transcript-types.d.ts +10 -0
  257. package/dist/ui-core/state/transcript-types.js +1 -0
  258. package/dist/ui-core/state/transcript-types.js.map +1 -1
  259. package/dist/ui-core/state/transcript-window.d.ts +32 -0
  260. package/dist/ui-core/state/transcript-window.js +63 -0
  261. package/dist/ui-core/state/transcript-window.js.map +1 -0
  262. package/dist/version.generated.d.ts +2 -2
  263. package/dist/version.generated.js +2 -2
  264. package/package.json +1 -1
  265. package/dist/tui-v2/composer/skill-highlight.d.ts +0 -3
  266. package/dist/tui-v2/composer/skill-highlight.js +0 -63
  267. package/dist/tui-v2/composer/skill-highlight.js.map +0 -1
@@ -28,11 +28,13 @@ function isPrintableSequence(seq) {
28
28
  }
29
29
  export function SecretModal(props) {
30
30
  const { services, theme, request, docked } = props;
31
- const bufferRef = useRef(new SecretBuffer());
32
- const [mask, setMask] = useState("");
33
- // Non-secret values (endpoint URLs, hosts) opt out of masking: a bulleted
34
- // 60-character URL is impossible to proofread.
31
+ const bufferRef = useRef((() => {
32
+ const buffer = new SecretBuffer();
33
+ buffer.insert(request.initialValue ?? "", 0);
34
+ return buffer;
35
+ })());
35
36
  const revealed = request.reveal === true;
37
+ const [mask, setMask] = useState(() => revealed ? bufferRef.current.reveal() : bufferRef.current.masked());
36
38
  function refreshMask() {
37
39
  setMask(revealed ? bufferRef.current.reveal() : bufferRef.current.masked());
38
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"secret-modal.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/modal/secret-modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secret-modal.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/modal/secret-modal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** @jsxImportSource @opentui/react */
2
+ /**
3
+ * Multiline text editor overlay (long structured input such as MCP server
4
+ * JSON). Uses the native textarea so the caret, arrow navigation, selection,
5
+ * word/line kills and mid-text edits behave exactly like the composer —
6
+ * Enter inserts a newline here and Ctrl+S saves.
7
+ */
8
+ import { type ReactNode } from "react";
9
+ import type { AppServices } from "../../../ui-core/bootstrap/composition-root.js";
10
+ import type { Theme } from "../../../ui-core/rendering/theme.js";
11
+ import type { TextEditorRequest } from "../../../ui-core/controllers/overlay-controller.js";
12
+ export interface TextEditorModalProps {
13
+ readonly services: AppServices;
14
+ readonly theme: Theme;
15
+ readonly request: TextEditorRequest;
16
+ readonly width: number;
17
+ readonly height: number;
18
+ }
19
+ export declare function TextEditorModal(props: TextEditorModalProps): ReactNode;
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ /** @jsxImportSource @opentui/react */
3
+ /**
4
+ * Multiline text editor overlay (long structured input such as MCP server
5
+ * JSON). Uses the native textarea so the caret, arrow navigation, selection,
6
+ * word/line kills and mid-text edits behave exactly like the composer —
7
+ * Enter inserts a newline here and Ctrl+S saves.
8
+ */
9
+ import { useEffect, useRef, useState } from "react";
10
+ import { TextAttributes, } from "@opentui/core";
11
+ import { chordFromKeyEvent } from "../../input/chord-from-opentui-key.js";
12
+ import { buildTextEditorTextareaOverrides } from "../../composer/textarea-keybindings.js";
13
+ const keyBindings = buildTextEditorTextareaOverrides();
14
+ export function TextEditorModal(props) {
15
+ const { services, theme, request } = props;
16
+ const editorRef = useRef(null);
17
+ const [caret, setCaret] = useState({ line: 1, column: 1, lines: 1 });
18
+ const width = Math.max(24, Math.min(props.width - 4, 120));
19
+ const rows = Math.max(4, Math.min(props.height - 8, 24));
20
+ useEffect(() => {
21
+ const editor = editorRef.current;
22
+ if (!editor)
23
+ return;
24
+ if (request.initialValue) {
25
+ editor.setText(request.initialValue);
26
+ editor.gotoBufferEnd();
27
+ }
28
+ editor.focus();
29
+ }, [request.initialValue]);
30
+ function syncCaret() {
31
+ const editor = editorRef.current;
32
+ if (!editor)
33
+ return;
34
+ const text = editor.plainText;
35
+ const offset = Math.max(0, Math.min(editor.cursorOffset, text.length));
36
+ const before = text.slice(0, offset);
37
+ const line = before.split("\n").length;
38
+ const column = offset - (before.lastIndexOf("\n") + 1) + 1;
39
+ setCaret((current) => current.line === line &&
40
+ current.column === column &&
41
+ current.lines === text.split("\n").length
42
+ ? current
43
+ : { line, column, lines: text.split("\n").length });
44
+ }
45
+ function submit() {
46
+ services.overlay.answerTextEditor(editorRef.current?.plainText ?? "");
47
+ }
48
+ function onKeyDown(key) {
49
+ const chord = chordFromKeyEvent(key);
50
+ if (chord === "ctrl+s") {
51
+ key.preventDefault();
52
+ submit();
53
+ return;
54
+ }
55
+ if (chord === "escape") {
56
+ key.preventDefault();
57
+ services.overlay.answerTextEditor(undefined);
58
+ return;
59
+ }
60
+ }
61
+ return (_jsxs("box", { border: true, borderStyle: "rounded", title: ` ${request.title} `, titleAlignment: "left", titleColor: theme.modalBorder, style: {
62
+ flexDirection: "column",
63
+ width,
64
+ borderColor: theme.modalBorder,
65
+ backgroundColor: theme.statusBackground,
66
+ paddingLeft: 1,
67
+ paddingRight: 1,
68
+ }, children: [_jsx("text", { style: { fg: theme.foreground }, content: request.prompt }), _jsx("box", { border: true, borderStyle: "single", style: {
69
+ flexDirection: "row",
70
+ width: "100%",
71
+ height: rows + 2,
72
+ borderColor: theme.inputBorder,
73
+ backgroundColor: theme.statusBackground,
74
+ paddingLeft: 1,
75
+ paddingRight: 1,
76
+ }, children: _jsx("textarea", { ref: editorRef, focused: true, selectable: true, selectionBg: theme.selection, selectionFg: theme.white, placeholder: request.placeholder ?? "", placeholderColor: theme.muted, textColor: theme.foreground, backgroundColor: theme.statusBackground, cursorColor: theme.inputBorder, keyBindings: keyBindings, wrapMode: "word", onKeyDown: onKeyDown, onContentChange: syncCaret, onCursorChange: syncCaret, style: {
77
+ flexGrow: 1,
78
+ flexShrink: 1,
79
+ minWidth: 0,
80
+ minHeight: 1,
81
+ width: 0,
82
+ height: "100%",
83
+ } }) }), _jsxs("box", { style: { flexDirection: "row", width: "100%" }, children: [_jsx("text", { style: { fg: theme.cyan, attributes: TextAttributes.BOLD }, content: "\u203A " }), _jsx("text", { style: { fg: theme.cyan }, content: `^S ${request.submitLabel ?? "save"} · enter newline · arrows move · esc cancel` }), _jsx("text", { style: { fg: theme.muted, attributes: TextAttributes.DIM }, content: ` ln ${String(caret.line)}/${String(caret.lines)} · col ${String(caret.column)}` })] })] }));
84
+ }
85
+ //# sourceMappingURL=text-editor-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-editor-modal.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/modal/text-editor-modal.tsx"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { PromptActionsModal } from "../modal/prompt-actions-modal.js";
6
6
  import { SecretModal } from "../modal/secret-modal.js";
7
7
  import { ScopeModal } from "../modal/scope-modal.js";
8
8
  import { KeysModal } from "../modal/keys-modal.js";
9
+ import { TextEditorModal } from "../modal/text-editor-modal.js";
9
10
  import { Pager } from "../pager/pager.js";
10
11
  import { JobsPanel } from "../jobs/jobs-panel.js";
11
12
  function isDockedKind(kind) {
@@ -43,6 +44,6 @@ export function OverlayHost(props) {
43
44
  backgroundColor: theme.background,
44
45
  alignItems: "center",
45
46
  justifyContent: "center",
46
- }, children: [state.kind === "picker" ? (_jsx(Picker, { services: services, theme: theme, request: state.request })) : null, state.kind === "prompt-actions" ? (_jsx(PromptActionsModal, { services: services, theme: theme, request: state.request })) : null, state.kind === "pager" ? (_jsx(Pager, { services: services, theme: theme, title: state.title, body: state.body, source: state.source, highlightPath: state.highlightPath, markdown: state.markdown })) : null, state.kind === "jobs" ? _jsx(JobsPanel, { services: services, theme: theme }) : null] }));
47
+ }, children: [state.kind === "picker" ? (_jsx(Picker, { services: services, theme: theme, request: state.request })) : null, state.kind === "prompt-actions" ? (_jsx(PromptActionsModal, { services: services, theme: theme, request: state.request })) : null, state.kind === "pager" ? (_jsx(Pager, { services: services, theme: theme, title: state.title, body: state.body, source: state.source, highlightPath: state.highlightPath, markdown: state.markdown })) : null, state.kind === "jobs" ? _jsx(JobsPanel, { services: services, theme: theme }) : null, state.kind === "text-editor" ? (_jsx(TextEditorModal, { services: services, theme: theme, request: state.request, width: width, height: height })) : null] }));
47
48
  }
48
49
  //# sourceMappingURL=overlay-host.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-host.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/overlay/overlay-host.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overlay-host.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/overlay/overlay-host.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
2
  /** @jsxImportSource @opentui/react */
3
3
  /**
4
4
  * Compacted-context card — compact summary strip; full memory opens in the
5
5
  * pager modal (same as tool OUTPUT), not an in-chat mega-expand.
6
6
  */
7
- import { Fragment, useMemo, useRef } from "react";
7
+ import { Fragment, useEffect, useMemo, useRef, useState, } from "react";
8
8
  import { TextAttributes } from "@opentui/core";
9
9
  import { useTerminalDimensions } from "@opentui/react";
10
10
  import { compactionTokenLabel } from "../../../ui-core/state/transcript-types.js";
@@ -13,10 +13,19 @@ import { EMPTY_MARKDOWN_STREAM_CACHE, } from "../../../ui-core/rendering/streami
13
13
  import { renderStyledStreamingMarkdown } from "../../rendering/styled-markdown.js";
14
14
  import { liveCompactionHeadTail } from "../../../ui-core/rendering/thinking-tail.js";
15
15
  import { useClickWithoutDrag } from "./use-click-without-drag.js";
16
+ import { compactionElapsedLabel } from "../../../ui-core/rendering/duration.js";
16
17
  const PREVIEW_LINES = 4;
17
18
  export function CompactedRow(props) {
18
19
  const { item, theme, services, contentWidth } = props;
19
20
  const { width: termWidth } = useTerminalDimensions();
21
+ const [now, setNow] = useState(() => Date.now());
22
+ useEffect(() => {
23
+ if (!item.streaming)
24
+ return;
25
+ const clock = setInterval(() => setNow(Date.now()), 1_000);
26
+ return () => clearInterval(clock);
27
+ }, [item.streaming]);
28
+ const elapsedLabel = compactionElapsedLabel(item, now);
20
29
  const wrapWidth = Math.max(20, contentWidth != null
21
30
  ? Math.max(20, contentWidth - 4)
22
31
  : Math.max(40, termWidth - 10));
@@ -76,7 +85,7 @@ export function CompactedRow(props) {
76
85
  width: "100%",
77
86
  paddingTop: 0,
78
87
  paddingBottom: 0,
79
- }, children: [_jsxs("text", { selectable: true, style: { fg: borderFg, attributes: TextAttributes.BOLD }, children: ["\u2726 Compacted context", item.streaming ? " …" : ""] }), _jsx("text", { content: " ", selectable: true }), _jsx("text", { selectable: true, style: {
88
+ }, children: [_jsx("text", { content: `✦ Compacted context${item.streaming ? " …" : ""}${elapsedLabel ? ` · ${elapsedLabel}` : ""}`, selectable: true, style: { fg: borderFg, attributes: TextAttributes.BOLD } }), _jsx("text", { content: " ", selectable: true }), _jsx("text", { selectable: true, style: {
80
89
  fg: borderFg,
81
90
  bg: theme.chip,
82
91
  attributes: TextAttributes.BOLD,
@@ -1 +1 @@
1
- {"version":3,"file":"compacted-row.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/transcript/compacted-row.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compacted-row.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/transcript/compacted-row.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,11 @@
7
7
  * thinking toggle (Ctrl+T). After the block is finalized, the body follows the
8
8
  * global Ctrl+T toggle (or a per-block override from clicking the header).
9
9
  *
10
+ * The body is a fixed-height window of pre-wrapped rows, paged by an internal
11
+ * offset. A nested ScrollBox is deliberately avoided: inside the transcript
12
+ * ScrollBox its children escaped the parent's scissor rect and overdrew the
13
+ * following response rows.
14
+ *
10
15
  * Placement: thinking rows always precede the ◆ Response / tool cards for
11
16
  * the same model step (agent emits thinking-block before assistant-message
12
17
  * and tool-call). Violet accent distinguishes reasoning from green replies.
@@ -18,7 +23,10 @@ export declare function ThinkingBlock(props: {
18
23
  item: ThinkingItem;
19
24
  theme: Theme;
20
25
  expanded: boolean;
21
- /** Chat-pane columns (plan split/overlay already subtracted). */
22
26
  contentWidth?: number | undefined;
23
27
  onToggle: () => void;
28
+ /** This card owns the pointer wheel (clicked, not Ctrl+T). */
29
+ focused?: boolean | undefined;
30
+ onFocus?: (() => void) | undefined;
31
+ onBlur?: (() => void) | undefined;
24
32
  }): ReactNode;
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
1
+ import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
2
  /** @jsxImportSource @opentui/react */
3
3
  /**
4
4
  * Renders a `ThinkingItem` (CHAT-006, V2-053).
@@ -8,62 +8,266 @@ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
8
8
  * thinking toggle (Ctrl+T). After the block is finalized, the body follows the
9
9
  * global Ctrl+T toggle (or a per-block override from clicking the header).
10
10
  *
11
+ * The body is a fixed-height window of pre-wrapped rows, paged by an internal
12
+ * offset. A nested ScrollBox is deliberately avoided: inside the transcript
13
+ * ScrollBox its children escaped the parent's scissor rect and overdrew the
14
+ * following response rows.
15
+ *
11
16
  * Placement: thinking rows always precede the ◆ Response / tool cards for
12
17
  * the same model step (agent emits thinking-block before assistant-message
13
18
  * and tool-call). Violet accent distinguishes reasoning from green replies.
14
19
  */
15
- import { useMemo } from "react";
16
- import { TextAttributes } from "@opentui/core";
20
+ import { useEffect, useMemo, useRef, useState, } from "react";
21
+ import { TextAttributes, } from "@opentui/core";
17
22
  import { useTerminalDimensions } from "@opentui/react";
18
23
  import { renderColumns } from "../../../ui-core/rendering/text-width.js";
19
- import { selectableRowStyle } from "./selectable-line.js";
20
- import { liveThinkingDisplay } from "../../../ui-core/rendering/thinking-tail.js";
21
- import { wrapPagerLine } from "../../../ui-core/rendering/pager-chrome.js";
22
- /** Body indent inside the block (paddingLeft below). */
23
- const BODY_INDENT = 2;
24
+ import { sanitizeDisplayText } from "../../../ui-core/rendering/sanitize-display.js";
25
+ import { thinkingElapsedLabel } from "../../../ui-core/rendering/duration.js";
26
+ import { resolveThinkingFooter, resolveThinkingHeadingStyle, resolveThinkingPresentation, resolveThinkingViewport, THINKING_BODY_MAX_ROWS, wrapThinkingBody, } from "./thinking-presentation.js";
27
+ import { useClickWithoutDrag } from "./use-click-without-drag.js";
28
+ const WHEEL_ROWS = 3;
29
+ /** Rows per tick while drag-selecting at a body edge. */
30
+ const DRAG_SCROLL_ROWS = 2;
31
+ /** Autoscroll cadence while the pointer is held at a body edge. */
32
+ const DRAG_SCROLL_MS = 45;
24
33
  export function ThinkingBlock(props) {
25
- const { item, theme, expanded, contentWidth, onToggle } = props;
34
+ const { item, theme, expanded, contentWidth, onToggle, focused = false, onFocus, onBlur, } = props;
26
35
  const { width: termWidth } = useTerminalDimensions();
27
- const showBody = expanded || item.streaming;
28
- const onMouseUp = (event) => {
29
- event.preventDefault();
30
- onToggle();
36
+ const cardRef = useRef(null);
37
+ const followTail = useRef(true);
38
+ const offsetRef = useRef(0);
39
+ const dragActive = useRef(false);
40
+ const dragTimer = useRef(undefined);
41
+ const lineCountRef = useRef(0);
42
+ const [now, setNow] = useState(() => Date.now());
43
+ const [requestedOffset, setRequestedOffset] = useState(0);
44
+ const [headingHovered, setHeadingHovered] = useState(false);
45
+ const bodyWidth = Math.max(18, (contentWidth != null ? contentWidth : Math.max(40, termWidth - 8)) - 4);
46
+ const content = useMemo(() => sanitizeDisplayText(item.content).replace(/\r\n/g, "\n"), [item.content]);
47
+ const lines = useMemo(() => wrapThinkingBody(content, bodyWidth, item.streaming), [content, bodyWidth, item.streaming]);
48
+ const viewport = resolveThinkingViewport({
49
+ lineCount: lines.length,
50
+ offset: item.streaming && followTail.current
51
+ ? Number.POSITIVE_INFINITY
52
+ : requestedOffset,
53
+ maxRows: THINKING_BODY_MAX_ROWS,
54
+ });
55
+ const visibleRows = useMemo(() => lines
56
+ .slice(viewport.offset, viewport.offset + viewport.rows)
57
+ .map((row) => row + " ".repeat(Math.max(0, bodyWidth - renderColumns(row)))), [lines, viewport.offset, viewport.rows, bodyWidth]);
58
+ offsetRef.current = viewport.offset;
59
+ lineCountRef.current = lines.length;
60
+ useEffect(() => {
61
+ if (!item.streaming)
62
+ return;
63
+ const clock = setInterval(() => setNow(Date.now()), 1_000);
64
+ return () => clearInterval(clock);
65
+ }, [item.streaming]);
66
+ useEffect(() => {
67
+ if (item.streaming)
68
+ return;
69
+ followTail.current = true;
70
+ offsetRef.current = 0;
71
+ setRequestedOffset(0);
72
+ }, [item.streaming]);
73
+ const stopDragScroll = () => {
74
+ if (dragTimer.current === undefined)
75
+ return;
76
+ clearInterval(dragTimer.current);
77
+ dragTimer.current = undefined;
78
+ };
79
+ useEffect(() => stopDragScroll, []);
80
+ const maxOffsetNow = () => {
81
+ const rows = Math.max(1, Math.min(THINKING_BODY_MAX_ROWS, lineCountRef.current));
82
+ return Math.max(0, lineCountRef.current - rows);
83
+ };
84
+ /** Step the body window by `rows`; returns false at the matching end. */
85
+ const stepBody = (rows) => {
86
+ const maxOffset = maxOffsetNow();
87
+ const next = Math.max(0, Math.min(maxOffset, offsetRef.current + rows));
88
+ if (next === offsetRef.current)
89
+ return false;
90
+ offsetRef.current = next;
91
+ followTail.current = item.streaming && next >= maxOffset;
92
+ setRequestedOffset(next);
93
+ return true;
94
+ };
95
+ const startDragScroll = (rows) => {
96
+ stopDragScroll();
97
+ dragTimer.current = setInterval(() => {
98
+ if (!dragActive.current || !stepBody(rows))
99
+ stopDragScroll();
100
+ }, DRAG_SCROLL_MS);
101
+ };
102
+ const presentation = resolveThinkingPresentation({
103
+ streaming: item.streaming,
104
+ expanded,
105
+ elapsed: thinkingElapsedLabel(item, now),
106
+ content,
107
+ });
108
+ const click = useClickWithoutDrag(onToggle);
109
+ const headingStyle = resolveThinkingHeadingStyle({
110
+ hovered: headingHovered,
111
+ accent: theme.thinking,
112
+ hover: theme.white,
113
+ });
114
+ const headingAttributes = headingStyle.underline
115
+ ? TextAttributes.BOLD | TextAttributes.UNDERLINE
116
+ : TextAttributes.BOLD;
117
+ const onBodyScroll = (event) => {
118
+ if (!event.scroll)
119
+ return;
120
+ const rows = Math.max(1, Math.min(THINKING_BODY_MAX_ROWS, lines.length));
121
+ const maxOffset = Math.max(0, lines.length - rows);
122
+ // Only a focused card with hidden rows owns the wheel; then it keeps it at
123
+ // both extremes. Unfocused or fully visible cards let the transcript
124
+ // scroll, so the wheel never feels trapped.
125
+ if (!focused || maxOffset === 0)
126
+ return;
127
+ event.stopPropagation();
128
+ const base = item.streaming && followTail.current ? maxOffset : offsetRef.current;
129
+ const delta = event.scroll.direction === "up" ? -WHEEL_ROWS : WHEEL_ROWS;
130
+ const next = Math.max(0, Math.min(maxOffset, base + delta));
131
+ if (next === base)
132
+ return;
133
+ offsetRef.current = next;
134
+ followTail.current = item.streaming && next >= maxOffset;
135
+ setRequestedOffset(next);
136
+ };
137
+ const isCardTitleEvent = (event) => {
138
+ const card = cardRef.current;
139
+ const title = presentation.borderTitle;
140
+ if (!card || !title || event.y !== card.screenY)
141
+ return false;
142
+ const start = card.screenX + 1;
143
+ const end = Math.min(card.screenX + card.width - 1, start + renderColumns(title));
144
+ return event.x >= start && event.x < end;
145
+ };
146
+ const onCardTitleMouseDown = (event) => {
147
+ if (isCardTitleEvent(event)) {
148
+ click.onMouseDown(event);
149
+ return;
150
+ }
151
+ // Body press: take focus and let OpenTUI's native text selection own the
152
+ // drag. preventDefault keeps the transcript's semantic selection from
153
+ // hijacking a gesture that starts inside this card.
154
+ if (event.button === 0) {
155
+ if (!focused)
156
+ onFocus?.();
157
+ dragActive.current = true;
158
+ event.preventDefault();
159
+ }
160
+ };
161
+ const onCardTitleMouseUp = (event) => {
162
+ endBodyDrag();
163
+ if (isCardTitleEvent(event))
164
+ click.onMouseUp(event);
165
+ };
166
+ const onCardTitleMouseMove = (event) => {
167
+ // Plain movement means no button is held, so any earlier drag is over even
168
+ // if its release landed outside this card and never reached us.
169
+ if (dragActive.current) {
170
+ dragActive.current = false;
171
+ stopDragScroll();
172
+ }
173
+ const hovered = isCardTitleEvent(event);
174
+ if (hovered !== headingHovered)
175
+ setHeadingHovered(hovered);
176
+ };
177
+ const isInsideCard = (event) => {
178
+ const card = cardRef.current;
179
+ if (!card)
180
+ return false;
181
+ return (event.x >= card.screenX &&
182
+ event.x < card.screenX + card.width &&
183
+ event.y >= card.screenY &&
184
+ event.y < card.screenY + card.height);
185
+ };
186
+ // Leaving the card releases the wheel, so the pointer never stays trapped.
187
+ // Geometry-checked because OpenTUI also emits `out` when the pointer crosses
188
+ // between the card's own child rows.
189
+ const onCardMouseOut = (event) => {
190
+ setHeadingHovered(false);
191
+ if (dragActive.current)
192
+ return;
193
+ if (focused && !isInsideCard(event))
194
+ onBlur?.();
195
+ };
196
+ const endBodyDrag = () => {
197
+ dragActive.current = false;
198
+ stopDragScroll();
199
+ };
200
+ /**
201
+ * Drag-select at a body edge pages the window so the selection keeps
202
+ * travelling through hidden reasoning. Once the window hits that end the
203
+ * gesture is released, so the drag continues into the transcript.
204
+ */
205
+ const onBodyDrag = (event) => {
206
+ if (!dragActive.current)
207
+ return;
208
+ const card = cardRef.current;
209
+ if (!card)
210
+ return;
211
+ const firstBodyRow = card.screenY + 1;
212
+ const lastBodyRow = card.screenY + card.height - 2;
213
+ const maxOffset = maxOffsetNow();
214
+ const up = event.y <= firstBodyRow;
215
+ const down = event.y >= lastBodyRow;
216
+ const canScrollUp = up && offsetRef.current > 0;
217
+ const canScrollDown = down && offsetRef.current < maxOffset;
218
+ if (!canScrollUp && !canScrollDown) {
219
+ stopDragScroll();
220
+ // At an end (or mid-body): let the transcript own the gesture so the
221
+ // selection can leave this card.
222
+ if (up || down)
223
+ endBodyDrag();
224
+ return;
225
+ }
226
+ event.stopPropagation();
227
+ const rows = canScrollUp ? -DRAG_SCROLL_ROWS : DRAG_SCROLL_ROWS;
228
+ stepBody(rows);
229
+ startDragScroll(rows);
31
230
  };
32
- const header = item.streaming
33
- ? " thinking…"
34
- : showBody
35
- ? "▾ thinking"
36
- : "▸ thinking · ctrl+t or click to view";
37
- const wrapWidth = Math.max(20, (contentWidth != null ? contentWidth : Math.max(40, termWidth - 8)) -
38
- BODY_INDENT);
39
- const bodyLines = useMemo(() => {
40
- if (!showBody || !item.content)
41
- return [];
42
- const source = item.streaming
43
- ? liveThinkingDisplay(item.content)
44
- : item.content;
45
- return source
46
- .replace(/\r\n/g, "\n")
47
- .split("\n")
48
- .flatMap((line) => wrapPagerLine(line, wrapWidth))
49
- .map((line) => line + " ".repeat(Math.max(0, wrapWidth - renderColumns(line))));
50
- }, [showBody, item.content, item.streaming, wrapWidth]);
51
- return (_jsxs("box", { id: item.id, style: { flexDirection: "column", marginBottom: 1, width: "100%" }, children: [_jsx("box", { onMouseUp: onMouseUp, style: { flexDirection: "row" }, children: _jsx("text", { selectable: true, style: {
52
- fg: theme.thinking,
53
- attributes: TextAttributes.ITALIC,
54
- }, children: header }) }), showBody && bodyLines.length > 0 ? (_jsx("box", { style: {
55
- flexDirection: "column",
56
- paddingLeft: BODY_INDENT,
57
- width: wrapWidth + BODY_INDENT,
58
- overflow: "hidden",
59
- // Paints the indent strip too, so nothing shows through the gap
60
- // between the pane edge and the first glyph.
61
- backgroundColor: theme.background,
62
- }, children: bodyLines.map((content, index) => (_jsx("text", { content: content, selectable: true, wrapMode: "none", style: {
63
- ...selectableRowStyle(theme.background),
64
- width: wrapWidth,
65
- fg: theme.thinking,
66
- attributes: TextAttributes.ITALIC,
67
- } }, index))) })) : null] }));
231
+ if (presentation.layout === "line") {
232
+ return (_jsx("box", { id: item.id, style: {
233
+ flexDirection: "row",
234
+ width: "100%",
235
+ height: 1,
236
+ marginBottom: 1,
237
+ }, onMouseDown: click.onMouseDown, onMouseUp: click.onMouseUp, onMouseOver: () => setHeadingHovered(true), onMouseOut: () => setHeadingHovered(false), children: _jsx("text", { content: presentation.heading, selectable: true, wrapMode: "none", style: {
238
+ width: "100%",
239
+ height: 1,
240
+ fg: headingStyle.fg,
241
+ attributes: headingAttributes,
242
+ } }) }));
243
+ }
244
+ const bodyRows = visibleRows.length > 0 ? visibleRows : ["Waiting for reasoning…"];
245
+ const scrollHint = resolveThinkingFooter({
246
+ focused,
247
+ hiddenAbove: viewport.hiddenAbove,
248
+ hiddenBelow: viewport.hiddenBelow,
249
+ });
250
+ return (_jsx("box", { ref: cardRef, id: item.id, border: true, borderStyle: "rounded", title: presentation.borderTitle, titleAlignment: "left", titleColor: focused ? headingStyle.fg : theme.muted, ...(scrollHint
251
+ ? { bottomTitle: scrollHint, bottomTitleAlignment: "right" }
252
+ : {}), onMouseDown: onCardTitleMouseDown, onMouseUp: onCardTitleMouseUp, onMouseMove: onCardTitleMouseMove, onMouseDrag: onBodyDrag, onMouseDragEnd: endBodyDrag, onMouseOut: onCardMouseOut, onMouseScroll: onBodyScroll, style: {
253
+ flexDirection: "column",
254
+ width: "100%",
255
+ height: bodyRows.length + 2,
256
+ marginBottom: 1,
257
+ borderColor: focused ? theme.thinking : theme.muted,
258
+ backgroundColor: theme.thinkingBg,
259
+ paddingLeft: 1,
260
+ paddingRight: 1,
261
+ paddingTop: 0,
262
+ paddingBottom: 0,
263
+ overflow: "hidden",
264
+ }, children: bodyRows.map((row, index) => (_jsx("text", { content: row, selectable: true, wrapMode: "none", style: {
265
+ width: bodyWidth,
266
+ height: 1,
267
+ flexShrink: 0,
268
+ fg: focused ? theme.thinking : theme.thinkingDim,
269
+ bg: theme.thinkingBg,
270
+ attributes: TextAttributes.ITALIC,
271
+ } }, index))) }));
68
272
  }
69
273
  //# sourceMappingURL=thinking-block.js.map