@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
@@ -20,12 +20,20 @@ export declare class TranscriptStore {
20
20
  private notifyPending;
21
21
  private persistBase;
22
22
  private persistHydratedIds;
23
+ private pendingEvents;
23
24
  private static readonly COALESCED_EVENT_TYPES;
25
+ private static readonly MAX_PENDING_EVENTS;
24
26
  constructor(maxItems?: number, coalesceMs?: number);
25
27
  getState(): TranscriptState;
26
28
  dispatch(event: AnyAppEvent): void;
27
29
  /** CHAT-006: Ctrl+T toggles every thinking block's default visibility. */
28
30
  toggleThinkingGlobal(): void;
31
+ /** Click a thinking card: toggle it and focus it only while it is open. */
32
+ toggleThinkingItem(id: string, fallback: boolean): void;
33
+ /** Give one thinking card the pointer wheel (clicking its body). */
34
+ focusThinking(id: string): void;
35
+ /** Release wheel ownership back to the transcript. */
36
+ blurThinking(): void;
29
37
  /** CHAT-005/007: Ctrl+O toggles tool OUTPUT + compacted memory cards. */
30
38
  toggleOutputGlobal(): void;
31
39
  /** Expand/collapse every tool OUTPUT card at once (collapse all / expand
@@ -53,7 +61,9 @@ export declare class TranscriptStore {
53
61
  } | undefined): void;
54
62
  mergePersistSnapshot(items: ClassicTranscriptItem[]): ClassicTranscriptItem[];
55
63
  private setState;
64
+ private flushPendingEvents;
56
65
  private applyState;
57
66
  private scheduleNotify;
58
67
  private flushNotify;
68
+ private clearPendingEvents;
59
69
  }
@@ -7,8 +7,8 @@
7
7
  * `getState`/`subscribe` (a `useSyncExternalStore` source), never by reaching
8
8
  * into reducer internals.
9
9
  */
10
- import { applyAppEvent } from "./transcript-reducer.js";
11
- import { EMPTY_TRANSCRIPT_STATE } from "./transcript-types.js";
10
+ import { applyAppEvent, TranscriptSequenceError, } from "./transcript-reducer.js";
11
+ import { EMPTY_TRANSCRIPT_STATE, isItemExpanded, } from "./transcript-types.js";
12
12
  export class TranscriptStore {
13
13
  maxItems;
14
14
  coalesceMs;
@@ -18,85 +18,154 @@ export class TranscriptStore {
18
18
  notifyPending = false;
19
19
  persistBase = [];
20
20
  persistHydratedIds = new Set();
21
- // Token-rate events fire dozens of times per second; notifying React on each
22
- // one re-reconciles the whole transcript and starves composer input. Batch
23
- // these to one paint frame while structural events still flush immediately.
21
+ pendingEvents = [];
24
22
  static COALESCED_EVENT_TYPES = new Set([
25
23
  "assistant-delta",
26
24
  "thinking-delta",
27
25
  "tool-output",
26
+ "compaction-delta",
28
27
  ]);
28
+ static MAX_PENDING_EVENTS = 512;
29
29
  constructor(maxItems = 2_000, coalesceMs = 16) {
30
30
  this.maxItems = maxItems;
31
31
  this.coalesceMs = coalesceMs;
32
- if (!Number.isInteger(maxItems) || maxItems <= 0)
32
+ if (!Number.isInteger(maxItems) || maxItems <= 0) {
33
33
  throw new RangeError("maxItems must be positive");
34
+ }
34
35
  }
35
36
  getState() {
37
+ this.flushPendingEvents();
36
38
  return this.state;
37
39
  }
38
40
  dispatch(event) {
39
- if (!this.applyState(applyAppEvent(this.state, event)))
40
- return;
41
41
  if (TranscriptStore.COALESCED_EVENT_TYPES.has(event.type)) {
42
+ const lastQueuedSequence = this.pendingEvents.at(-1)?.sequence ?? this.state.lastSequence;
43
+ if (event.sequence <= lastQueuedSequence)
44
+ return;
45
+ if (event.sequence > lastQueuedSequence + 1) {
46
+ throw new TranscriptSequenceError(lastQueuedSequence + 1, event.sequence);
47
+ }
48
+ this.pendingEvents.push(event);
49
+ this.notifyPending = true;
50
+ if (this.pendingEvents.length >= TranscriptStore.MAX_PENDING_EVENTS) {
51
+ this.flushPendingEvents();
52
+ }
42
53
  this.scheduleNotify();
54
+ return;
43
55
  }
44
- else {
56
+ const pendingChanged = this.flushPendingEvents();
57
+ const changed = this.applyState(applyAppEvent(this.state, event));
58
+ if (pendingChanged || changed)
45
59
  this.flushNotify();
46
- }
47
60
  }
48
61
  /** CHAT-006: Ctrl+T toggles every thinking block's default visibility. */
49
62
  toggleThinkingGlobal() {
50
- this.setState({ ...this.state, expandThinkingGlobal: !this.state.expandThinkingGlobal });
63
+ const state = this.getState();
64
+ const thinkingItems = state.order
65
+ .map((id) => state.byId.get(id))
66
+ .filter((item) => item?.kind === "thinking");
67
+ const expandThinkingGlobal = thinkingItems.length > 0
68
+ ? !thinkingItems.every((item) => isItemExpanded(state, item))
69
+ : !state.expandThinkingGlobal;
70
+ const itemOverrides = new Map(state.itemOverrides);
71
+ for (const item of thinkingItems)
72
+ itemOverrides.delete(item.id);
73
+ this.setState({
74
+ ...state,
75
+ expandThinkingGlobal,
76
+ itemOverrides,
77
+ // Ctrl+T is a bulk visibility toggle, never a focus gesture: expanded
78
+ // cards stay unfocused so the wheel keeps scrolling the transcript.
79
+ focusedThinkingId: undefined,
80
+ });
81
+ }
82
+ /** Click a thinking card: toggle it and focus it only while it is open. */
83
+ toggleThinkingItem(id, fallback) {
84
+ const state = this.getState();
85
+ const overrides = new Map(state.itemOverrides);
86
+ const expanded = !(overrides.get(id) ?? fallback);
87
+ overrides.set(id, expanded);
88
+ this.setState({
89
+ ...state,
90
+ itemOverrides: overrides,
91
+ focusedThinkingId: expanded ? id : undefined,
92
+ });
93
+ }
94
+ /** Give one thinking card the pointer wheel (clicking its body). */
95
+ focusThinking(id) {
96
+ const state = this.getState();
97
+ if (state.focusedThinkingId === id)
98
+ return;
99
+ this.setState({ ...state, focusedThinkingId: id });
100
+ }
101
+ /** Release wheel ownership back to the transcript. */
102
+ blurThinking() {
103
+ const state = this.getState();
104
+ if (state.focusedThinkingId === undefined)
105
+ return;
106
+ this.setState({ ...state, focusedThinkingId: undefined });
51
107
  }
52
108
  /** CHAT-005/007: Ctrl+O toggles tool OUTPUT + compacted memory cards. */
53
109
  toggleOutputGlobal() {
54
- this.setState({ ...this.state, expandOutputGlobal: !this.state.expandOutputGlobal });
110
+ const state = this.getState();
111
+ this.setState({
112
+ ...state,
113
+ expandOutputGlobal: !state.expandOutputGlobal,
114
+ });
55
115
  }
56
116
  /** Expand/collapse every tool OUTPUT card at once (collapse all / expand
57
117
  * all chips). Clears only tool/compacted per-item overrides so thinking
58
118
  * overrides survive. */
59
119
  setOutputGlobal(expanded) {
60
- const overrides = new Map(this.state.itemOverrides);
120
+ const state = this.getState();
121
+ const overrides = new Map(state.itemOverrides);
61
122
  for (const id of [...overrides.keys()]) {
62
- const item = this.state.byId.get(id);
123
+ const item = state.byId.get(id);
63
124
  if (item && (item.kind === "tool" || item.kind === "compacted")) {
64
125
  overrides.delete(id);
65
126
  }
66
127
  }
67
- this.setState({ ...this.state, expandOutputGlobal: expanded, itemOverrides: overrides });
128
+ this.setState({
129
+ ...state,
130
+ expandOutputGlobal: expanded,
131
+ itemOverrides: overrides,
132
+ });
68
133
  }
69
134
  /** Expand/collapse every file-diff card in chat (hunks vs title-only). */
70
135
  setFileDiffsGlobal(expanded) {
136
+ const state = this.getState();
71
137
  this.setState({
72
- ...this.state,
138
+ ...state,
73
139
  expandFileDiffsGlobal: expanded,
74
- // Clear per-card overrides so global applies cleanly.
75
140
  fileDiffOverrides: new Map(),
76
141
  });
77
142
  }
78
143
  toggleFileDiffsGlobal() {
79
- this.setFileDiffsGlobal(!this.state.expandFileDiffsGlobal);
144
+ const state = this.getState();
145
+ this.setFileDiffsGlobal(!state.expandFileDiffsGlobal);
80
146
  }
81
147
  /** Expand/collapse one tool's file-diff body. */
82
148
  toggleFileDiffOverride(toolItemId, fallback) {
83
- const overrides = new Map(this.state.fileDiffOverrides);
149
+ const state = this.getState();
150
+ const overrides = new Map(state.fileDiffOverrides);
84
151
  const current = overrides.get(toolItemId) ?? fallback;
85
152
  overrides.set(toolItemId, !current);
86
- this.setState({ ...this.state, fileDiffOverrides: overrides });
153
+ this.setState({ ...state, fileDiffOverrides: overrides });
87
154
  }
88
155
  /** Expand/collapse one item, overriding whichever global toggle applies. */
89
156
  toggleItemOverride(id, fallback) {
90
- const overrides = new Map(this.state.itemOverrides);
157
+ const state = this.getState();
158
+ const overrides = new Map(state.itemOverrides);
91
159
  const current = overrides.get(id) ?? fallback;
92
160
  overrides.set(id, !current);
93
- this.setState({ ...this.state, itemOverrides: overrides });
161
+ this.setState({ ...state, itemOverrides: overrides });
94
162
  }
95
163
  subscribe(listener) {
96
164
  this.listeners.add(listener);
97
165
  return () => this.listeners.delete(listener);
98
166
  }
99
167
  reset() {
168
+ this.clearPendingEvents();
100
169
  this.persistBase = [];
101
170
  this.persistHydratedIds = new Set();
102
171
  this.setState(EMPTY_TRANSCRIPT_STATE);
@@ -108,6 +177,7 @@ export class TranscriptStore {
108
177
  * must never rewind it, or the next sequencer event arrives as a gap).
109
178
  */
110
179
  hydrate(next, options) {
180
+ const current = this.getState();
111
181
  if (options && "persistBase" in options) {
112
182
  this.persistBase = options.persistBase ?? [];
113
183
  this.persistHydratedIds = new Set(next.order);
@@ -117,10 +187,10 @@ export class TranscriptStore {
117
187
  ...next,
118
188
  ...(rebase
119
189
  ? {}
120
- : { lastSequence: Math.max(this.state.lastSequence, next.lastSequence) }),
121
- expandThinkingGlobal: this.state.expandThinkingGlobal,
122
- expandOutputGlobal: this.state.expandOutputGlobal,
123
- expandFileDiffsGlobal: this.state.expandFileDiffsGlobal,
190
+ : { lastSequence: Math.max(current.lastSequence, next.lastSequence) }),
191
+ expandThinkingGlobal: current.expandThinkingGlobal,
192
+ expandOutputGlobal: current.expandOutputGlobal,
193
+ expandFileDiffsGlobal: current.expandFileDiffsGlobal,
124
194
  itemOverrides: new Map(),
125
195
  fileDiffOverrides: new Map(),
126
196
  pendingAssistantId: undefined,
@@ -139,27 +209,150 @@ export class TranscriptStore {
139
209
  if (this.applyState(next))
140
210
  this.flushNotify();
141
211
  }
212
+ flushPendingEvents() {
213
+ if (this.pendingEvents.length === 0)
214
+ return false;
215
+ const pending = this.pendingEvents;
216
+ this.pendingEvents = [];
217
+ const accepted = [];
218
+ let expected = this.state.lastSequence + 1;
219
+ for (const event of pending) {
220
+ if (event.sequence < expected)
221
+ continue;
222
+ if (event.sequence > expected) {
223
+ throw new TranscriptSequenceError(expected, event.sequence);
224
+ }
225
+ accepted.push(event);
226
+ expected += 1;
227
+ }
228
+ if (accepted.length === 0)
229
+ return false;
230
+ let next = this.state;
231
+ for (let index = 0; index < accepted.length; index += 1) {
232
+ const first = accepted[index];
233
+ let lastIndex = index;
234
+ let merged = first;
235
+ if (first.type === "assistant-delta") {
236
+ const text = [first.payload.text];
237
+ const firstIsVisible = first.payload.text.trim().length > 0;
238
+ while (lastIndex + 1 < accepted.length) {
239
+ const candidate = accepted[lastIndex + 1];
240
+ if (candidate.type !== "assistant-delta" ||
241
+ candidate.turnId !== first.turnId ||
242
+ (!firstIsVisible && candidate.payload.text.trim().length > 0)) {
243
+ break;
244
+ }
245
+ lastIndex += 1;
246
+ text.push(candidate.payload.text);
247
+ }
248
+ merged = {
249
+ ...first,
250
+ payload: { text: text.join("") },
251
+ };
252
+ }
253
+ else if (first.type === "thinking-delta") {
254
+ const text = [first.payload.text];
255
+ while (lastIndex + 1 < accepted.length) {
256
+ const candidate = accepted[lastIndex + 1];
257
+ if (candidate.type !== "thinking-delta" ||
258
+ candidate.turnId !== first.turnId ||
259
+ candidate.payload.reasoningId !== first.payload.reasoningId) {
260
+ break;
261
+ }
262
+ lastIndex += 1;
263
+ text.push(candidate.payload.text);
264
+ }
265
+ merged = {
266
+ ...first,
267
+ payload: { ...first.payload, text: text.join("") },
268
+ };
269
+ }
270
+ else if (first.type === "tool-output") {
271
+ while (lastIndex + 1 < accepted.length) {
272
+ const candidate = accepted[lastIndex + 1];
273
+ if (candidate.type !== "tool-output" ||
274
+ candidate.payload.ref.toolCallId !==
275
+ first.payload.ref.toolCallId) {
276
+ break;
277
+ }
278
+ lastIndex += 1;
279
+ }
280
+ const last = accepted[lastIndex];
281
+ merged = { ...first, payload: last.payload };
282
+ }
283
+ else if (first.type === "compaction-delta") {
284
+ let text = first.payload.text;
285
+ let replace = first.payload.replace === true;
286
+ while (lastIndex + 1 < accepted.length) {
287
+ const candidate = accepted[lastIndex + 1];
288
+ if (candidate.type !== "compaction-delta" ||
289
+ candidate.payload.compactionId !==
290
+ first.payload.compactionId) {
291
+ break;
292
+ }
293
+ lastIndex += 1;
294
+ if (candidate.payload.replace) {
295
+ text = candidate.payload.text;
296
+ replace = true;
297
+ }
298
+ else {
299
+ text += candidate.payload.text;
300
+ }
301
+ }
302
+ merged = {
303
+ ...first,
304
+ payload: {
305
+ ...first.payload,
306
+ text,
307
+ ...(replace ? { replace: true } : {}),
308
+ },
309
+ };
310
+ }
311
+ next = applyAppEvent(next, merged);
312
+ const lastSequence = accepted[lastIndex].sequence;
313
+ if (lastSequence !== merged.sequence) {
314
+ next = { ...next, lastSequence };
315
+ }
316
+ index = lastIndex;
317
+ }
318
+ return this.applyState(next);
319
+ }
142
320
  applyState(next) {
143
321
  if (next === this.state)
144
322
  return false;
145
- // Backfill fields for older hydrated states.
146
323
  if (next.expandFileDiffsGlobal === undefined) {
147
324
  next = { ...next, expandFileDiffsGlobal: true };
148
325
  }
149
326
  if (!next.fileDiffOverrides) {
150
327
  next = { ...next, fileDiffOverrides: new Map() };
151
328
  }
329
+ if (!next.assistantStripStreams) {
330
+ next = { ...next, assistantStripStreams: new Map() };
331
+ }
152
332
  if (next.order.length > this.maxItems) {
153
- const keep = new Set(next.order.slice(-this.maxItems));
333
+ const evictionSlack = Math.min(128, Math.max(8, Math.floor(this.maxItems * 0.1)));
334
+ const targetSize = Math.max(1, this.maxItems - evictionSlack);
335
+ const keep = new Set();
154
336
  if (next.pendingAssistantId)
155
337
  keep.add(next.pendingAssistantId);
156
338
  if (next.pendingThinkingId)
157
339
  keep.add(next.pendingThinkingId);
340
+ for (let index = next.order.length - 1; index >= 0 && keep.size < targetSize; index -= 1) {
341
+ keep.add(next.order[index]);
342
+ }
158
343
  const order = next.order.filter((id) => keep.has(id));
159
344
  const byId = new Map([...next.byId].filter(([id]) => keep.has(id)));
160
345
  const itemOverrides = new Map([...next.itemOverrides].filter(([id]) => keep.has(id)));
161
346
  const fileDiffOverrides = new Map([...next.fileDiffOverrides].filter(([id]) => keep.has(id)));
162
- next = { ...next, order, byId, itemOverrides, fileDiffOverrides };
347
+ const assistantStripStreams = new Map([...next.assistantStripStreams].filter(([id]) => keep.has(id)));
348
+ next = {
349
+ ...next,
350
+ order,
351
+ byId,
352
+ itemOverrides,
353
+ fileDiffOverrides,
354
+ assistantStripStreams,
355
+ };
163
356
  }
164
357
  this.state = next;
165
358
  return true;
@@ -170,11 +363,14 @@ export class TranscriptStore {
170
363
  return;
171
364
  this.notifyTimer = setTimeout(() => {
172
365
  this.notifyTimer = undefined;
173
- if (this.notifyPending)
174
- this.flushNotify();
366
+ if (!this.notifyPending)
367
+ return;
368
+ this.flushPendingEvents();
369
+ this.flushNotify();
175
370
  }, this.coalesceMs);
176
371
  }
177
372
  flushNotify() {
373
+ this.flushPendingEvents();
178
374
  if (this.notifyTimer) {
179
375
  clearTimeout(this.notifyTimer);
180
376
  this.notifyTimer = undefined;
@@ -183,5 +379,13 @@ export class TranscriptStore {
183
379
  for (const listener of this.listeners)
184
380
  listener();
185
381
  }
382
+ clearPendingEvents() {
383
+ this.pendingEvents = [];
384
+ this.notifyPending = false;
385
+ if (this.notifyTimer) {
386
+ clearTimeout(this.notifyTimer);
387
+ this.notifyTimer = undefined;
388
+ }
389
+ }
186
390
  }
187
391
  //# sourceMappingURL=transcript-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-store.js","sourceRoot":"","sources":["../../../src/ui-core/state/transcript-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcript-store.js","sourceRoot":"","sources":["../../../src/ui-core/state/transcript-store.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,8 @@ export interface ThinkingItem extends ItemBase {
29
29
  readonly content: string;
30
30
  readonly streaming: boolean;
31
31
  readonly reasoningId?: string;
32
+ readonly startedAt?: number | undefined;
33
+ readonly endedAt?: number | undefined;
32
34
  }
33
35
  export type ToolStatus = "queued" | "running" | "ok" | "failed" | "blocked";
34
36
  export interface ToolItem extends ItemBase {
@@ -62,6 +64,8 @@ export interface CompactedItem extends ItemBase {
62
64
  readonly afterTokens: number;
63
65
  readonly streaming?: boolean | undefined;
64
66
  readonly error?: string | undefined;
67
+ readonly startedAt?: number | undefined;
68
+ readonly endedAt?: number | undefined;
65
69
  }
66
70
  export declare function compactionTokenLabel(item: Pick<CompactedItem, "streaming" | "error" | "beforeTokens" | "afterTokens">): string;
67
71
  export interface TurnSummaryItem extends ItemBase {
@@ -91,6 +95,12 @@ export interface TranscriptState {
91
95
  readonly itemOverrides: ReadonlyMap<string, boolean>;
92
96
  /** Per-tool-card file-diff expand override (key = tool item id). */
93
97
  readonly fileDiffOverrides: ReadonlyMap<string, boolean>;
98
+ /**
99
+ * Thinking card that currently owns the pointer wheel, set by clicking it.
100
+ * A focused card scrolls its own body at both extremes instead of handing
101
+ * the wheel back to the transcript. Ctrl+T never focuses a card.
102
+ */
103
+ readonly focusedThinkingId: string | undefined;
94
104
  /** Incremental strip state for the open assistant stream (bounded tail). */
95
105
  readonly assistantStripStreams: ReadonlyMap<string, StripStream>;
96
106
  }
@@ -34,6 +34,7 @@ export const EMPTY_TRANSCRIPT_STATE = {
34
34
  expandFileDiffsGlobal: true,
35
35
  itemOverrides: new Map(),
36
36
  fileDiffOverrides: new Map(),
37
+ focusedThinkingId: undefined,
37
38
  assistantStripStreams: new Map(),
38
39
  };
39
40
  /** CHAT-005/006/007: a per-item override always wins over the global toggle. */
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-types.js","sourceRoot":"","sources":["../../../src/ui-core/state/transcript-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcript-types.js","sourceRoot":"","sources":["../../../src/ui-core/state/transcript-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export declare const DEFAULT_TRANSCRIPT_MOUNT_ROWS = 320;
2
+ export declare const DEFAULT_TRANSCRIPT_WINDOW_OVERLAP = 64;
3
+ export interface TranscriptMountWindow {
4
+ readonly start: number;
5
+ readonly end: number;
6
+ readonly olderCount: number;
7
+ readonly newerCount: number;
8
+ }
9
+ export declare function resolveTranscriptMountWindow(totalItems: number, requestedStart: number | undefined, size?: number): TranscriptMountWindow;
10
+ export declare function transcriptWindowStartForItem(totalItems: number, itemIndex: number, size?: number): number;
11
+ export declare function shiftTranscriptWindowStart(totalItems: number, currentStart: number, direction: "older" | "newer", size?: number, overlap?: number): number;
12
+ export interface TranscriptScrollIntent {
13
+ readonly nextScrollTop: number;
14
+ readonly leaveTail: boolean;
15
+ readonly reachedOlderEdge: boolean;
16
+ readonly reachedNewerEdge: boolean;
17
+ readonly atBottom: boolean;
18
+ }
19
+ export declare function resolveTranscriptScrollIntent(scrollTop: number, maxScrollTop: number, delta: number): TranscriptScrollIntent;
20
+ /**
21
+ * Whether a queued bottom-pin may run this frame.
22
+ *
23
+ * Automatic pins (content growth) must not yank the viewport while a pointer
24
+ * gesture is in flight, but an explicit End / Ctrl+D is a direct command and
25
+ * outranks it — including when a press was released outside the transcript and
26
+ * left the gesture flag set.
27
+ */
28
+ export declare function shouldPinTranscriptBottom(input: {
29
+ readonly following: boolean;
30
+ readonly pointerGestureActive: boolean;
31
+ readonly forced: boolean;
32
+ }): boolean;
@@ -0,0 +1,63 @@
1
+ export const DEFAULT_TRANSCRIPT_MOUNT_ROWS = 320;
2
+ export const DEFAULT_TRANSCRIPT_WINDOW_OVERLAP = 64;
3
+ export function resolveTranscriptMountWindow(totalItems, requestedStart, size = DEFAULT_TRANSCRIPT_MOUNT_ROWS) {
4
+ const total = Math.max(0, Math.floor(totalItems));
5
+ const windowSize = Math.max(1, Math.floor(size));
6
+ const maxStart = Math.max(0, total - windowSize);
7
+ const start = requestedStart === undefined
8
+ ? maxStart
9
+ : Math.max(0, Math.min(maxStart, Math.floor(requestedStart)));
10
+ const end = Math.min(total, start + windowSize);
11
+ return {
12
+ start,
13
+ end,
14
+ olderCount: start,
15
+ newerCount: Math.max(0, total - end),
16
+ };
17
+ }
18
+ export function transcriptWindowStartForItem(totalItems, itemIndex, size = DEFAULT_TRANSCRIPT_MOUNT_ROWS) {
19
+ const total = Math.max(0, Math.floor(totalItems));
20
+ if (total === 0)
21
+ return 0;
22
+ const windowSize = Math.max(1, Math.floor(size));
23
+ const index = Math.max(0, Math.min(total - 1, Math.floor(itemIndex)));
24
+ return Math.max(0, Math.min(total - windowSize, index - Math.floor(windowSize / 2)));
25
+ }
26
+ export function shiftTranscriptWindowStart(totalItems, currentStart, direction, size = DEFAULT_TRANSCRIPT_MOUNT_ROWS, overlap = DEFAULT_TRANSCRIPT_WINDOW_OVERLAP) {
27
+ const windowSize = Math.max(1, Math.floor(size));
28
+ const retained = Math.max(0, Math.min(windowSize - 1, Math.floor(overlap)));
29
+ const step = Math.max(1, windowSize - retained);
30
+ const delta = direction === "older" ? -step : step;
31
+ return resolveTranscriptMountWindow(totalItems, currentStart + delta, windowSize).start;
32
+ }
33
+ export function resolveTranscriptScrollIntent(scrollTop, maxScrollTop, delta) {
34
+ const max = Number.isFinite(maxScrollTop) ? Math.max(0, maxScrollTop) : 0;
35
+ const current = Number.isFinite(scrollTop)
36
+ ? Math.max(0, Math.min(max, scrollTop))
37
+ : 0;
38
+ const movement = Number.isFinite(delta) ? delta : 0;
39
+ const next = Math.max(0, Math.min(max, current + movement));
40
+ return {
41
+ nextScrollTop: next,
42
+ leaveTail: movement < 0,
43
+ reachedOlderEdge: movement < 0 && next === 0,
44
+ reachedNewerEdge: movement > 0 && next === max,
45
+ atBottom: next === max,
46
+ };
47
+ }
48
+ /**
49
+ * Whether a queued bottom-pin may run this frame.
50
+ *
51
+ * Automatic pins (content growth) must not yank the viewport while a pointer
52
+ * gesture is in flight, but an explicit End / Ctrl+D is a direct command and
53
+ * outranks it — including when a press was released outside the transcript and
54
+ * left the gesture flag set.
55
+ */
56
+ export function shouldPinTranscriptBottom(input) {
57
+ if (!input.following)
58
+ return false;
59
+ if (input.forced)
60
+ return true;
61
+ return !input.pointerGestureActive;
62
+ }
63
+ //# sourceMappingURL=transcript-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-window.js","sourceRoot":"","sources":["../../../src/ui-core/state/transcript-window.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  * AUTO-GENERATED by scripts/sync-version.mjs — do not edit by hand.
3
3
  * Source of truth: package.json "version".
4
4
  */
5
- export declare const VERSION: "4.8.4";
6
- export declare const VERSION_TAG: "v4.8.4";
5
+ export declare const VERSION: "4.9.0";
6
+ export declare const VERSION_TAG: "v4.9.0";
@@ -2,6 +2,6 @@
2
2
  * AUTO-GENERATED by scripts/sync-version.mjs — do not edit by hand.
3
3
  * Source of truth: package.json "version".
4
4
  */
5
- export const VERSION = "4.8.4";
6
- export const VERSION_TAG = "v4.8.4";
5
+ export const VERSION = "4.9.0";
6
+ export const VERSION_TAG = "v4.9.0";
7
7
  //# sourceMappingURL=version.generated.js.map