@chances-ai/tui 11.0.0 → 13.0.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.
@@ -1,3 +1,4 @@
1
+ import { type JSX } from "react";
1
2
  import type { PickerKey } from "./model-picker.js";
2
3
  /**
3
4
  * Pure reducer for the ApiKeyPrompt — Enter on empty input cancels (returns
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-prompt.d.ts","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM7C;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC,GAAG,GAAG,CAAC,OAAO,CAwBd"}
1
+ {"version":3,"file":"api-key-prompt.d.ts","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAM7C;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC,GAAG,GAAG,CAAC,OAAO,CAwBd"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-key-prompt.js","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,IAAY,EACZ,GAAc;IAEd,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC;IACnE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAIT;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAgB,CAAC,CAAC;QACpF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aAC9E,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,6BAAc,QAAQ,0CAAgC,EAC1E,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,0BAAU,EACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAQ,IACjD,EACN,KAAC,IAAI,IAAC,QAAQ,2GAEP,IACH,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"api-key-prompt.js","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAY,MAAM,OAAO,CAAC;AAG3C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,IAAY,EACZ,GAAc;IAEd,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC;IACnE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAIT;IACC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAgB,CAAC,CAAC;QACpF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aAC9E,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,6BAAc,QAAQ,0CAAgC,EAC1E,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,0BAAU,EACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAQ,IACjD,EACN,KAAC,IAAI,IAAC,QAAQ,2GAEP,IACH,CACP,CAAC;AACJ,CAAC"}
package/dist/app.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type JSX } from "react";
1
2
  import type { ChatViewModel } from "./view-model.js";
2
3
  import type { ModalController } from "./modal.js";
3
4
  export interface SlashSuggestion {
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,aAAa,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C;;qEAEiE;IACjE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;uEAGmE;IACnE,sBAAsB,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3C;8EAC0E;IAC1E,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED;2EAC2E;AAC3E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,eAAe,EAAE,GAC3B,eAAe,EAAE,CAOnB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,kBAAkB,EAAE,GAC9B,kBAAkB,EAAE,CAOtB;AAED,wBAAgB,OAAO,CAAC,EACtB,EAAE,EACF,QAAQ,EACR,OAAO,EACP,KAAK,EACL,sBAAsB,EACtB,kBAAkB,GACnB,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CA4I5B"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AACA,OAAO,EAA6C,KAAK,GAAG,EAAkB,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,aAAa,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C;;qEAEiE;IACjE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;uEAGmE;IACnE,sBAAsB,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3C;8EAC0E;IAC1E,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC3C;AAED;2EAC2E;AAC3E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,eAAe,EAAE,GAC3B,eAAe,EAAE,CAOnB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,kBAAkB,EAAE,GAC9B,kBAAkB,EAAE,CAOtB;AAED,wBAAgB,OAAO,CAAC,EACtB,EAAE,EACF,QAAQ,EACR,OAAO,EACP,KAAK,EACL,sBAAsB,EACtB,kBAAkB,GACnB,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAkK5B"}
package/dist/app.js CHANGED
@@ -1,5 +1,5 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text, useApp, useInput } from "ink";
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Static, Text, useApp, useInput } from "ink";
3
3
  import { useEffect, useState, useSyncExternalStore } from "react";
4
4
  /** (5.3) Footer presentation per approval mode: symbol + colour. `default` is
5
5
  * neutral; `yolo` is loud red so the auto-approve-everything state is never
@@ -88,7 +88,11 @@ export function ChatApp({ vm, onSubmit, onSlash, modal, availableSlashCommands,
88
88
  // (5.3) Shift+Tab cycles approval modes (meta+m is the Windows-non-VT
89
89
  // fallback claude-code uses). Only when no prompt/overlay owns input.
90
90
  if ((key.tab && key.shift) || (key.meta && char === "m")) {
91
- if (!vm.pending && !vm.yoloConfirmPending)
91
+ // (5.8) Not while a turn is streaming: cycleApprovalMode pushes a status
92
+ // line, which would commit and visually split the in-progress assistant
93
+ // message. Cycle once the turn finishes (the footer badge still shows the
94
+ // current mode).
95
+ if (!vm.pending && !vm.yoloConfirmPending && !vm.busy)
92
96
  vm.cycleApprovalMode();
93
97
  return;
94
98
  }
@@ -136,11 +140,18 @@ export function ChatApp({ vm, onSubmit, onSlash, modal, availableSlashCommands,
136
140
  }
137
141
  if (key.return) {
138
142
  const prompt = input.trim();
139
- setInput("");
140
143
  if (prompt === "/exit" || prompt === "/quit") {
141
144
  exit();
142
145
  return;
143
146
  }
147
+ // (5.8 codex R2) Block submission while a turn is streaming: pushing a
148
+ // user/slash line mid-stream commits the in-progress assistant line and
149
+ // splits the message. Keep the draft so it can be sent once the turn
150
+ // ends; Ctrl-C still interrupts, and the shared runTurnGuarded keeps its
151
+ // own in-flight guard for the MCP submitPrompt path.
152
+ if (vm.busy)
153
+ return;
154
+ setInput("");
144
155
  if (prompt.startsWith("/")) {
145
156
  vm.pushUser(prompt);
146
157
  if (onSlash)
@@ -162,7 +173,7 @@ export function ChatApp({ vm, onSubmit, onSlash, modal, availableSlashCommands,
162
173
  if (char && !key.ctrl && !key.meta)
163
174
  setInput((s) => s + char);
164
175
  });
165
- return (_jsxs(Box, { flexDirection: "column", children: [vm.lines.map((line, i) => (_jsx(LineView, { line: line }, i))), modalNode ? _jsx(Box, { marginTop: 1, children: modalNode }) : null, !modalNode && vm.yoloConfirmPending ? (_jsxs(Box, { marginTop: 1, borderStyle: "round", borderColor: "red", paddingX: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", children: "\u26A0 Enter YOLO mode?" }), _jsx(Text, { children: "All tool calls will be auto-approved. Only explicit deny-rules still block." }), _jsx(Text, { dimColor: true, children: "[y] enter yolo \u00B7 [n] cancel" })] })) : null, !modalNode && !vm.yoloConfirmPending && vm.pending ? (_jsxs(Box, { marginTop: 1, borderStyle: "round", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [_jsxs(Text, { color: "yellow", children: ["Approve ", vm.pending.req.name, "?"] }), _jsx(Text, { children: vm.pending.req.summary }), feedback !== null ? (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "tell the model what to do instead:" }), _jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u203A " }), _jsx(Text, { children: feedback }), _jsx(Text, { dimColor: true, children: "\u258C" })] }), _jsx(Text, { dimColor: true, children: "[enter] send \u00B7 [esc] back" })] })) : (_jsx(Text, { dimColor: true, children: "[y] yes \u00B7 [a] yes, don't ask \u00B7 [n] no \u00B7 [d] no + tell the model" }))] })) : null, !modalNode && !vm.yoloConfirmPending && !vm.pending ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: vm.busy ? "…thinking " : "› " }), _jsx(Text, { children: input })] }), _jsx(SlashAutocomplete, { input: input, available: availableSlashCommands ?? [] }), _jsx(MentionAutocomplete, { input: input, available: availableResources ?? [] }), _jsx(ModeBadge, { mode: vm.approvalMode })] })) : null] }));
176
+ return (_jsxs(_Fragment, { children: [_jsx(Static, { items: vm.committedLines(), children: (line, i) => _jsx(LineView, { line: line }, i) }, vm.clearGeneration), _jsxs(Box, { flexDirection: "column", children: [vm.liveLines().map((line, i) => (_jsx(LineView, { line: line }, `live-${i}`))), modalNode ? _jsx(Box, { marginTop: 1, children: modalNode }) : null, !modalNode && vm.yoloConfirmPending ? (_jsxs(Box, { marginTop: 1, borderStyle: "round", borderColor: "red", paddingX: 1, flexDirection: "column", children: [_jsx(Text, { color: "red", children: "\u26A0 Enter YOLO mode?" }), _jsx(Text, { children: "All tool calls will be auto-approved. Only explicit deny-rules still block." }), _jsx(Text, { dimColor: true, children: "[y] enter yolo \u00B7 [n] cancel" })] })) : null, !modalNode && !vm.yoloConfirmPending && vm.pending ? (_jsxs(Box, { marginTop: 1, borderStyle: "round", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [_jsxs(Text, { color: "yellow", children: ["Approve ", vm.pending.req.name, "?"] }), _jsx(Text, { children: vm.pending.req.summary }), feedback !== null ? (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "tell the model what to do instead:" }), _jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u203A " }), _jsx(Text, { children: feedback }), _jsx(Text, { dimColor: true, children: "\u258C" })] }), _jsx(Text, { dimColor: true, children: "[enter] send \u00B7 [esc] back" })] })) : (_jsx(Text, { dimColor: true, children: "[y] yes \u00B7 [a] yes, don't ask \u00B7 [n] no \u00B7 [d] no + tell the model" }))] })) : null, !modalNode && !vm.yoloConfirmPending && !vm.pending ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", children: vm.busy ? "…thinking " : "› " }), _jsx(Text, { children: input })] }), _jsx(SlashAutocomplete, { input: input, available: availableSlashCommands ?? [] }), _jsx(MentionAutocomplete, { input: input, available: availableResources ?? [] }), _jsx(ModeBadge, { mode: vm.approvalMode })] })) : null] })] }));
166
177
  }
167
178
  /** (5.3) Footer approval-mode indicator. Always rendered (dim hint in
168
179
  * `default` for discoverability, coloured badge otherwise) so the Shift+Tab
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * (5.8 / v13) Frame-coalescing scheduler.
3
+ *
4
+ * Streaming `assistant:delta` events arrive one-per-token (engine.ts emits a
5
+ * bump per stream chunk). Before v13 each one drove a full React re-render of
6
+ * the whole scrollback. The view-model now routes delta-driven re-renders
7
+ * through `schedule()` so at most ONE render happens per ~16 ms frame, while
8
+ * structural events (a finished message, a tool call/result, turn end) still
9
+ * flush immediately via the view-model's force-flush path (which `cancel()`s
10
+ * any pending frame first).
11
+ *
12
+ * The scheduler is injectable so tests run deterministically with no timers:
13
+ * inject {@link ManualFrameScheduler}, drive events, then `flush()` — the
14
+ * assertion is "N deltas → exactly one notification", which a real
15
+ * `setTimeout` clock can't express without flakiness.
16
+ */
17
+ /** Opaque handle returned by {@link FrameScheduler.schedule}; pass it back to
18
+ * `cancel()`. Callers must not inspect it. */
19
+ export type FrameHandle = unknown;
20
+ export interface FrameScheduler {
21
+ /** Run `cb` on a later frame; returns a handle for {@link cancel}. */
22
+ schedule(cb: () => void): FrameHandle;
23
+ /** Cancel a scheduled `cb` if it has not run yet. Idempotent. */
24
+ cancel(handle: FrameHandle): void;
25
+ }
26
+ /** Default production scheduler: a single `setTimeout` per coalescing window. */
27
+ export declare const defaultFrameScheduler: FrameScheduler;
28
+ /**
29
+ * Deterministic scheduler for tests. `schedule()` enqueues a callback (no
30
+ * timer), `cancel()` removes it, `flush()` runs all queued callbacks in FIFO
31
+ * order and clears the queue. `pending` exposes the queue depth so a test can
32
+ * assert coalescing ("after N deltas, exactly one callback is queued").
33
+ */
34
+ export declare class ManualFrameScheduler implements FrameScheduler {
35
+ private readonly queue;
36
+ private nextId;
37
+ schedule(cb: () => void): FrameHandle;
38
+ cancel(handle: FrameHandle): void;
39
+ /** Number of callbacks queued but not yet run or cancelled. */
40
+ get pending(): number;
41
+ /** Run every queued callback (FIFO) and clear the queue. */
42
+ flush(): void;
43
+ }
44
+ //# sourceMappingURL=frame-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-scheduler.d.ts","sourceRoot":"","sources":["../src/frame-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;+CAC+C;AAC/C,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;IACtC,iEAAiE;IACjE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACnC;AAMD,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,EAAE,cAKnC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,WAAW;IAMrC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIjC,+DAA+D;IAC/D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,4DAA4D;IAC5D,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * (5.8 / v13) Frame-coalescing scheduler.
3
+ *
4
+ * Streaming `assistant:delta` events arrive one-per-token (engine.ts emits a
5
+ * bump per stream chunk). Before v13 each one drove a full React re-render of
6
+ * the whole scrollback. The view-model now routes delta-driven re-renders
7
+ * through `schedule()` so at most ONE render happens per ~16 ms frame, while
8
+ * structural events (a finished message, a tool call/result, turn end) still
9
+ * flush immediately via the view-model's force-flush path (which `cancel()`s
10
+ * any pending frame first).
11
+ *
12
+ * The scheduler is injectable so tests run deterministically with no timers:
13
+ * inject {@link ManualFrameScheduler}, drive events, then `flush()` — the
14
+ * assertion is "N deltas → exactly one notification", which a real
15
+ * `setTimeout` clock can't express without flakiness.
16
+ */
17
+ /** ~1 frame at 60fps. One coalesced render per frame is imperceptible while
18
+ * capping re-renders during a fast token stream. */
19
+ const FRAME_MS = 16;
20
+ /** Default production scheduler: a single `setTimeout` per coalescing window. */
21
+ export const defaultFrameScheduler = {
22
+ schedule: (cb) => setTimeout(cb, FRAME_MS),
23
+ cancel: (handle) => {
24
+ if (handle !== undefined)
25
+ clearTimeout(handle);
26
+ },
27
+ };
28
+ /**
29
+ * Deterministic scheduler for tests. `schedule()` enqueues a callback (no
30
+ * timer), `cancel()` removes it, `flush()` runs all queued callbacks in FIFO
31
+ * order and clears the queue. `pending` exposes the queue depth so a test can
32
+ * assert coalescing ("after N deltas, exactly one callback is queued").
33
+ */
34
+ export class ManualFrameScheduler {
35
+ queue = new Map();
36
+ nextId = 1;
37
+ schedule(cb) {
38
+ const id = this.nextId++;
39
+ this.queue.set(id, cb);
40
+ return id;
41
+ }
42
+ cancel(handle) {
43
+ if (typeof handle === "number")
44
+ this.queue.delete(handle);
45
+ }
46
+ /** Number of callbacks queued but not yet run or cancelled. */
47
+ get pending() {
48
+ return this.queue.size;
49
+ }
50
+ /** Run every queued callback (FIFO) and clear the queue. */
51
+ flush() {
52
+ const callbacks = [...this.queue.values()];
53
+ this.queue.clear();
54
+ for (const cb of callbacks)
55
+ cb();
56
+ }
57
+ }
58
+ //# sourceMappingURL=frame-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-scheduler.js","sourceRoot":"","sources":["../src/frame-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH;qDACqD;AACrD,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC;IAC1C,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,IAAI,MAAM,KAAK,SAAS;YAAE,YAAY,CAAC,MAAuC,CAAC,CAAC;IAClF,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACd,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,MAAM,GAAG,CAAC,CAAC;IAEnB,QAAQ,CAAC,EAAc;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,MAAmB;QACxB,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,SAAS;YAAE,EAAE,EAAE,CAAC;IACnC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,aAAa,CAAC;IAClB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC3C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACzC,KAAK,CAAC,EAAE,eAAe,EACvB,sBAAsB,CAAC,EAAE,OAAO,UAAU,EAAE,eAAe,EAAE,EAC7D,kBAAkB,CAAC,EAAE,OAAO,UAAU,EAAE,kBAAkB,EAAE,GAC3D,UAAU,CAgBZ"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,aAAa,CAAC;IAClB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,aAAa,EACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC3C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACzC,KAAK,CAAC,EAAE,eAAe,EACvB,sBAAsB,CAAC,EAAE,OAAO,UAAU,EAAE,eAAe,EAAE,EAC7D,kBAAkB,CAAC,EAAE,OAAO,UAAU,EAAE,kBAAkB,EAAE,GAC3D,UAAU,CAmBZ"}
package/dist/index.js CHANGED
@@ -20,7 +20,10 @@ export function renderChat(vm, onSubmit, onSlash, modal, availableSlashCommands,
20
20
  const instance = render(_jsx(ChatApp, { vm: vm, onSubmit: onSubmit, onSlash: onSlash, modal: modal, availableSlashCommands: availableSlashCommands, availableResources: availableResources }));
21
21
  return {
22
22
  vm,
23
- waitUntilExit: () => instance.waitUntilExit(),
23
+ // Ink 7 widened `waitUntilExit()` to `Promise<unknown>` (Ink 5 was
24
+ // `Promise<void>`); coerce back so the public `ChatHandle` contract that
25
+ // apps/cli depends on stays `Promise<void>` — behaviour is identical.
26
+ waitUntilExit: () => instance.waitUntilExit().then(() => undefined),
24
27
  unmount: () => instance.unmount(),
25
28
  };
26
29
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,EAAiB,EACjB,QAA2C,EAC3C,OAAyC,EACzC,KAAuB,EACvB,sBAA6D,EAC7D,kBAA4D;IAE5D,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAC,OAAO,IACN,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,GACtC,CACH,CAAC;IACF,OAAO;QACL,EAAE;QACF,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,EAAiB,EACjB,QAA2C,EAC3C,OAAyC,EACzC,KAAuB,EACvB,sBAA6D,EAC7D,kBAA4D;IAE5D,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAC,OAAO,IACN,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,sBAAsB,EAAE,sBAAsB,EAC9C,kBAAkB,EAAE,kBAAkB,GACtC,CACH,CAAC;IACF,OAAO;QACL,EAAE;QACF,mEAAmE;QACnE,yEAAyE;QACzE,sEAAsE;QACtE,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;QACnE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE;KAClC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type JSX } from "react";
1
2
  export interface PickableModel {
2
3
  /** Display id, e.g. "claude-opus-4-7". */
3
4
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;uCAEuC;AACvC,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;iDACiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAIrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,aAAa,EAAE,GACtB;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,CAsB9D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GAAG,GAAG,CAAC,OAAO,CA4Cd"}
1
+ {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;uCAEuC;AACvC,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;iDACiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAIrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,aAAa,EAAE,GACtB;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,CAsB9D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GAAG,GAAG,CAAC,OAAO,CA4Cd"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type JSX } from "react";
1
2
  import type { PickerKey } from "./model-picker.js";
2
3
  export interface PickableSession {
3
4
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB;qEACiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,eAAe,EAAE,GAC1B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD,GAAG,GAAG,CAAC,OAAO,CAuCd"}
1
+ {"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB;qEACiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,eAAe,EAAE,GAC1B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD,GAAG,GAAG,CAAC,OAAO,CAuCd"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { ApprovalMode, ApprovalState, EventBus } from "@chances-ai/runtime";
2
2
  import type { PermissionDecision, PermissionRequest } from "@chances-ai/tools";
3
+ import { type FrameScheduler } from "./frame-scheduler.js";
3
4
  export type LineKind = "user" | "assistant" | "tool" | "tool-result" | "error" | "info";
4
5
  export interface Line {
5
6
  kind: LineKind;
@@ -10,10 +11,22 @@ interface Pending {
10
11
  req: PermissionRequest;
11
12
  resolve: (decision: PermissionDecision) => void;
12
13
  }
14
+ export interface ChatViewModelOptions {
15
+ /** (5.8) Injectable frame coalescer. Production uses the default ~16 ms
16
+ * `setTimeout` batcher; tests inject a manual queue for determinism. */
17
+ scheduler?: FrameScheduler;
18
+ /** (5.8) See `config.tui.toolResultPreviewLines`. Default 12. */
19
+ toolResultPreviewLines?: number;
20
+ }
13
21
  /**
14
22
  * Observable view-model. The Ink tree subscribes via useSyncExternalStore and
15
23
  * never touches domain objects directly — the only inputs are bus events and the
16
24
  * permission resolver. This is the seam that keeps the UI decoupled from core.
25
+ *
26
+ * (5.8) Rendering is split into a committed prefix (frozen scrollback fed to
27
+ * Ink `<Static>`, rendered once) and a small live tail (re-rendered each
28
+ * frame). Streamed `assistant:delta` re-renders are coalesced to one per frame
29
+ * via {@link FrameScheduler}; every structural event force-flushes immediately.
17
30
  */
18
31
  export declare class ChatViewModel {
19
32
  private readonly approval?;
@@ -23,27 +36,98 @@ export declare class ChatViewModel {
23
36
  /** (5.3) True while the Shift+Tab-into-yolo confirmation overlay is up.
24
37
  * app.tsx renders the red confirm box; `resolveYoloConfirm` clears it. */
25
38
  yoloConfirmPending: boolean;
39
+ /**
40
+ * (5.8) Count of leading `lines` that are committed (frozen). Lines
41
+ * `[0, committedCount)` are append-only — an index's content never changes
42
+ * once committed — and feed Ink `<Static>`. Lines `[committedCount, end)`
43
+ * are the live tail. Advanced ONLY forward (monotonic) so `<Static>` never
44
+ * has to un-render anything. The only line that ever mutates in place is an
45
+ * open assistant line (text grows per delta) and it is always live.
46
+ */
47
+ committedCount: number;
48
+ /**
49
+ * (5.8) Bumped by `clearLines()` and used as the Ink `<Static key>`. Ink
50
+ * `<Static>` can't be emptied by replacing its items, so `/clear` remounts
51
+ * it under a fresh key (needs `ink >= 7.0.3`, which fixes the
52
+ * remount-with-different-key drop-new-items bug).
53
+ */
54
+ clearGeneration: number;
26
55
  private version;
27
56
  private readonly listeners;
28
57
  private assistantOpen;
29
58
  private busUnsubscribers;
59
+ private readonly scheduler;
60
+ private readonly toolResultPreviewLines;
61
+ /** Non-null while a coalesced delta frame is queued (see `scheduleBump`). */
62
+ private pendingFrame;
30
63
  /**
31
64
  * (5.3) Optional session approval-mode holder. When wired (interactive
32
65
  * `chat`), the footer reflects `approvalMode` and Shift+Tab / `/approval`
33
66
  * mutate it. Left undefined in tests that don't exercise modes — every
34
67
  * approval method then no-ops and `approvalMode` reads `"default"`.
68
+ *
69
+ * (5.8) `options` injects the frame scheduler + tool-result preview length;
70
+ * both default so existing callers (`new ChatViewModel()`,
71
+ * `new ChatViewModel(approval)`) keep working unchanged.
35
72
  */
36
- constructor(approval?: ApprovalState | undefined);
73
+ constructor(approval?: ApprovalState | undefined, options?: ChatViewModelOptions);
37
74
  subscribe: (fn: () => void) => (() => void);
38
75
  getSnapshot: () => number;
76
+ /**
77
+ * (5.8) The frozen scrollback prefix — fed to Ink `<Static>` and rendered
78
+ * once. Guaranteed append-only: the element at index `i` never changes once
79
+ * it appears here. A fresh array is returned each call, but the prefix
80
+ * content is stable, which is all `<Static>` relies on.
81
+ */
82
+ committedLines(): Line[];
83
+ /** (5.8) The live tail re-rendered each frame: the open assistant line while
84
+ * streaming, or an in-flight tool / tool-result line awaiting its terminal
85
+ * event. Usually 0–1 entries. */
86
+ liveLines(): Line[];
39
87
  private bump;
88
+ /**
89
+ * (5.8) Coalesce a streamed-token re-render onto the next frame. The first
90
+ * delta in a window arms the scheduler; later deltas in the same window are
91
+ * no-ops (the text is already accumulated on the line), so N tokens cause
92
+ * at most one render per frame instead of N.
93
+ */
94
+ private scheduleBump;
95
+ /** (5.8) Drop a queued delta frame if one is pending. */
96
+ private cancelPendingBump;
97
+ /**
98
+ * (5.8) Immediate notify that first drops any pending coalesced delta frame.
99
+ * Used by every structural mutation (finished message, tool call/result,
100
+ * turn boundary, user action) so the UI never renders a structural change
101
+ * behind a stale token-stream frame, and a cancelled frame can't fire into a
102
+ * later epoch.
103
+ */
104
+ private forceFlush;
105
+ /**
106
+ * Push a standalone, immutable line and commit everything (it and any prior
107
+ * live tail are terminal-on-creation).
108
+ *
109
+ * Closing `assistantOpen` here means a standalone line pushed while a stream
110
+ * is open ends that stream: the next `assistant:delta` opens a FRESH line
111
+ * rather than appending to the committed one — so the committed line is
112
+ * genuinely final (append-only holds; see the interleaving regression test).
113
+ * That a mid-stream user submit / mode-cycle visually splits the assistant
114
+ * message is a pre-existing interaction behavior (NOT a v13 regression — the
115
+ * pre-v13 `pushUser` closed the stream the same way); richer mid-turn input
116
+ * handling (queueing) is a v15 interaction-model concern, out of v13 scope.
117
+ */
118
+ private pushCommitted;
40
119
  pushUser(text: string): void;
41
120
  pushInfo(text: string): void;
42
121
  pushError(text: string): void;
43
122
  /** Empties the rendered scrollback — used by `/clear` so the user sees a
44
123
  * fresh view alongside the session.clearTurns() that drops the conversation
45
124
  * history. The view-model and the underlying session are intentionally
46
- * separate operations; the slash command sequences both. */
125
+ * separate operations; the slash command sequences both.
126
+ *
127
+ * (5.8) Because Ink `<Static>` keeps everything ever handed to it, emptying
128
+ * `lines` is not enough — `clearGeneration` is bumped so app.tsx can remount
129
+ * `<Static>` under a fresh key. Any pending delta frame is dropped so it
130
+ * can't fire into the cleared epoch. */
47
131
  clearLines(): void;
48
132
  attach(bus: EventBus): void;
49
133
  /**
@@ -56,6 +140,9 @@ export declare class ChatViewModel {
56
140
  * prompt that will never reach a user. Any *future* call to
57
141
  * `requestPermission` on this detached VM short-circuits the same
58
142
  * way — same reasoning.
143
+ *
144
+ * (5.8) Also drops any pending coalesced frame so a scheduled bump
145
+ * can't fire into a remounted/stale epoch.
59
146
  */
60
147
  detach(): void;
61
148
  private detached;
@@ -1 +1 @@
1
- {"version":3,"file":"view-model.d.ts","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AACxF,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,UAAU,OAAO;IACf,GAAG,EAAE,iBAAiB,CAAC;IACvB,OAAO,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjD;AAED;;;;GAIG;AACH,qBAAa,aAAa;IAmBZ,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAlBtC,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,IAAI,UAAS;IACb,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC/B;+EAC2E;IAC3E,kBAAkB,UAAS;IAE3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;OAKG;gBAC0B,QAAQ,CAAC,EAAE,aAAa,YAAA;IAErD,SAAS,GAAI,IAAI,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAGxC;IAEF,WAAW,QAAO,MAAM,CAAiB;IAEzC,OAAO,CAAC,IAAI;IAKZ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B;;;gEAG4D;IAC5D,UAAU,IAAI,IAAI;IAMlB,MAAM,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IA4C3B;;;;;;;;;;OAUG;IACH,MAAM,IAAI,IAAI;IAUd,OAAO,CAAC,QAAQ,CAAS;IAEzB;4EACwE;IACxE,iBAAiB,GAAI,KAAK,iBAAiB,KAAG,OAAO,CAAC,kBAAkB,CAAC,CAMvE;IAEF;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAmBrD,oEAAoE;IACpE,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED;;;;;OAKG;IACH,iBAAiB,IAAI,IAAI;IAazB,gFAAgF;IAChF,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAS3C"}
1
+ {"version":3,"file":"view-model.d.ts","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
+ import { defaultFrameScheduler, } from "./frame-scheduler.js";
2
+ /** (5.8) Default count of leading tool-result lines shown inline before the
3
+ * rest collapses to a `… +N more lines` note. Overridable via
4
+ * `config.tui.toolResultPreviewLines`. */
5
+ const DEFAULT_TOOL_RESULT_PREVIEW_LINES = 12;
1
6
  /**
2
7
  * Observable view-model. The Ink tree subscribes via useSyncExternalStore and
3
8
  * never touches domain objects directly — the only inputs are bus events and the
4
9
  * permission resolver. This is the seam that keeps the UI decoupled from core.
10
+ *
11
+ * (5.8) Rendering is split into a committed prefix (frozen scrollback fed to
12
+ * Ink `<Static>`, rendered once) and a small live tail (re-rendered each
13
+ * frame). Streamed `assistant:delta` re-renders are coalesced to one per frame
14
+ * via {@link FrameScheduler}; every structural event force-flushes immediately.
5
15
  */
6
16
  export class ChatViewModel {
7
17
  approval;
@@ -11,50 +21,147 @@ export class ChatViewModel {
11
21
  /** (5.3) True while the Shift+Tab-into-yolo confirmation overlay is up.
12
22
  * app.tsx renders the red confirm box; `resolveYoloConfirm` clears it. */
13
23
  yoloConfirmPending = false;
24
+ /**
25
+ * (5.8) Count of leading `lines` that are committed (frozen). Lines
26
+ * `[0, committedCount)` are append-only — an index's content never changes
27
+ * once committed — and feed Ink `<Static>`. Lines `[committedCount, end)`
28
+ * are the live tail. Advanced ONLY forward (monotonic) so `<Static>` never
29
+ * has to un-render anything. The only line that ever mutates in place is an
30
+ * open assistant line (text grows per delta) and it is always live.
31
+ */
32
+ committedCount = 0;
33
+ /**
34
+ * (5.8) Bumped by `clearLines()` and used as the Ink `<Static key>`. Ink
35
+ * `<Static>` can't be emptied by replacing its items, so `/clear` remounts
36
+ * it under a fresh key (needs `ink >= 7.0.3`, which fixes the
37
+ * remount-with-different-key drop-new-items bug).
38
+ */
39
+ clearGeneration = 0;
14
40
  version = 0;
15
41
  listeners = new Set();
16
42
  assistantOpen = false;
17
43
  busUnsubscribers = [];
44
+ scheduler;
45
+ toolResultPreviewLines;
46
+ /** Non-null while a coalesced delta frame is queued (see `scheduleBump`). */
47
+ pendingFrame = null;
18
48
  /**
19
49
  * (5.3) Optional session approval-mode holder. When wired (interactive
20
50
  * `chat`), the footer reflects `approvalMode` and Shift+Tab / `/approval`
21
51
  * mutate it. Left undefined in tests that don't exercise modes — every
22
52
  * approval method then no-ops and `approvalMode` reads `"default"`.
53
+ *
54
+ * (5.8) `options` injects the frame scheduler + tool-result preview length;
55
+ * both default so existing callers (`new ChatViewModel()`,
56
+ * `new ChatViewModel(approval)`) keep working unchanged.
23
57
  */
24
- constructor(approval) {
58
+ constructor(approval, options) {
25
59
  this.approval = approval;
60
+ this.scheduler = options?.scheduler ?? defaultFrameScheduler;
61
+ this.toolResultPreviewLines =
62
+ options?.toolResultPreviewLines ?? DEFAULT_TOOL_RESULT_PREVIEW_LINES;
26
63
  }
27
64
  subscribe = (fn) => {
28
65
  this.listeners.add(fn);
29
66
  return () => this.listeners.delete(fn);
30
67
  };
31
68
  getSnapshot = () => this.version;
69
+ /**
70
+ * (5.8) The frozen scrollback prefix — fed to Ink `<Static>` and rendered
71
+ * once. Guaranteed append-only: the element at index `i` never changes once
72
+ * it appears here. A fresh array is returned each call, but the prefix
73
+ * content is stable, which is all `<Static>` relies on.
74
+ */
75
+ committedLines() {
76
+ return this.lines.slice(0, this.committedCount);
77
+ }
78
+ /** (5.8) The live tail re-rendered each frame: the open assistant line while
79
+ * streaming, or an in-flight tool / tool-result line awaiting its terminal
80
+ * event. Usually 0–1 entries. */
81
+ liveLines() {
82
+ return this.lines.slice(this.committedCount);
83
+ }
32
84
  bump() {
33
85
  this.version++;
34
86
  for (const l of this.listeners)
35
87
  l();
36
88
  }
37
- pushUser(text) {
38
- this.lines.push({ kind: "user", text });
39
- this.assistantOpen = false;
89
+ /**
90
+ * (5.8) Coalesce a streamed-token re-render onto the next frame. The first
91
+ * delta in a window arms the scheduler; later deltas in the same window are
92
+ * no-ops (the text is already accumulated on the line), so N tokens cause
93
+ * at most one render per frame instead of N.
94
+ */
95
+ scheduleBump() {
96
+ if (this.pendingFrame !== null)
97
+ return;
98
+ this.pendingFrame = this.scheduler.schedule(() => {
99
+ this.pendingFrame = null;
100
+ this.bump();
101
+ });
102
+ }
103
+ /** (5.8) Drop a queued delta frame if one is pending. */
104
+ cancelPendingBump() {
105
+ if (this.pendingFrame !== null) {
106
+ this.scheduler.cancel(this.pendingFrame);
107
+ this.pendingFrame = null;
108
+ }
109
+ }
110
+ /**
111
+ * (5.8) Immediate notify that first drops any pending coalesced delta frame.
112
+ * Used by every structural mutation (finished message, tool call/result,
113
+ * turn boundary, user action) so the UI never renders a structural change
114
+ * behind a stale token-stream frame, and a cancelled frame can't fire into a
115
+ * later epoch.
116
+ */
117
+ forceFlush() {
118
+ this.cancelPendingBump();
40
119
  this.bump();
41
120
  }
42
- pushInfo(text) {
43
- this.lines.push({ kind: "info", text });
121
+ /**
122
+ * Push a standalone, immutable line and commit everything (it and any prior
123
+ * live tail are terminal-on-creation).
124
+ *
125
+ * Closing `assistantOpen` here means a standalone line pushed while a stream
126
+ * is open ends that stream: the next `assistant:delta` opens a FRESH line
127
+ * rather than appending to the committed one — so the committed line is
128
+ * genuinely final (append-only holds; see the interleaving regression test).
129
+ * That a mid-stream user submit / mode-cycle visually splits the assistant
130
+ * message is a pre-existing interaction behavior (NOT a v13 regression — the
131
+ * pre-v13 `pushUser` closed the stream the same way); richer mid-turn input
132
+ * handling (queueing) is a v15 interaction-model concern, out of v13 scope.
133
+ */
134
+ pushCommitted(line) {
44
135
  this.assistantOpen = false;
45
- this.bump();
136
+ this.lines.push(line);
137
+ this.committedCount = this.lines.length;
138
+ }
139
+ pushUser(text) {
140
+ this.pushCommitted({ kind: "user", text });
141
+ this.forceFlush();
142
+ }
143
+ pushInfo(text) {
144
+ this.pushCommitted({ kind: "info", text });
145
+ this.forceFlush();
46
146
  }
47
147
  pushError(text) {
48
- this.lines.push({ kind: "error", text });
49
- this.assistantOpen = false;
50
- this.bump();
148
+ this.pushCommitted({ kind: "error", text });
149
+ this.forceFlush();
51
150
  }
52
151
  /** Empties the rendered scrollback — used by `/clear` so the user sees a
53
152
  * fresh view alongside the session.clearTurns() that drops the conversation
54
153
  * history. The view-model and the underlying session are intentionally
55
- * separate operations; the slash command sequences both. */
154
+ * separate operations; the slash command sequences both.
155
+ *
156
+ * (5.8) Because Ink `<Static>` keeps everything ever handed to it, emptying
157
+ * `lines` is not enough — `clearGeneration` is bumped so app.tsx can remount
158
+ * `<Static>` under a fresh key. Any pending delta frame is dropped so it
159
+ * can't fire into the cleared epoch. */
56
160
  clearLines() {
161
+ this.cancelPendingBump();
57
162
  this.lines = [];
163
+ this.committedCount = 0;
164
+ this.clearGeneration++;
58
165
  this.assistantOpen = false;
59
166
  this.bump();
60
167
  }
@@ -69,36 +176,56 @@ export class ChatViewModel {
69
176
  this.busUnsubscribers = [
70
177
  bus.on("turn:start", () => {
71
178
  this.busy = true;
72
- this.bump();
179
+ this.forceFlush();
73
180
  }),
74
181
  bus.on("turn:end", () => {
75
182
  this.busy = false;
76
- this.bump();
183
+ // Flush the whole live region: the turn is over, nothing more will
184
+ // change any trailing line.
185
+ this.committedCount = this.lines.length;
186
+ this.forceFlush();
77
187
  }),
78
188
  bus.on("assistant:delta", (e) => {
79
189
  if (!this.assistantOpen) {
190
+ // Commit any prior live tail (e.g. a tool-result line) before the
191
+ // new narration line opens, then leave the new line live.
192
+ this.committedCount = this.lines.length;
80
193
  this.lines.push({ kind: "assistant", text: "" });
81
194
  this.assistantOpen = true;
82
195
  }
83
196
  this.lines[this.lines.length - 1].text += e.text;
84
- this.bump();
197
+ // Coalesce: at most one render per frame for a fast token stream.
198
+ this.scheduleBump();
85
199
  }),
86
200
  bus.on("assistant:message", () => {
201
+ // The streamed line is final — commit it.
87
202
  this.assistantOpen = false;
88
- this.bump();
203
+ this.committedCount = this.lines.length;
204
+ this.forceFlush();
89
205
  }),
90
206
  bus.on("tool:call", (e) => {
91
- this.lines.push({ kind: "tool", text: `${e.name} ${JSON.stringify(e.args)}` });
207
+ // A tool-using turn emits NO `assistant:message`, so closing the open
208
+ // assistant line here is what commits the narration (codex R1 MF-2).
209
+ // The tool line becomes the live tail until its result / turn end.
92
210
  this.assistantOpen = false;
93
- this.bump();
211
+ this.lines.push({ kind: "tool", text: `${e.name} ${JSON.stringify(e.args)}` });
212
+ this.committedCount = this.lines.length - 1;
213
+ this.forceFlush();
94
214
  }),
95
215
  bus.on("tool:result", (e) => {
96
- this.lines.push({ kind: "tool-result", ok: e.ok, text: clip(e.output) });
97
- this.bump();
216
+ // Commit the tool line; the result line is the live tail until the
217
+ // next structural event (another tool call, narration, or turn end).
218
+ this.lines.push({
219
+ kind: "tool-result",
220
+ ok: e.ok,
221
+ text: previewToolResult(e.output, this.toolResultPreviewLines),
222
+ });
223
+ this.committedCount = this.lines.length - 1;
224
+ this.forceFlush();
98
225
  }),
99
226
  bus.on("error", (e) => {
100
- this.lines.push({ kind: "error", text: `${e.code}: ${e.message}` });
101
- this.bump();
227
+ this.pushCommitted({ kind: "error", text: `${e.code}: ${e.message}` });
228
+ this.forceFlush();
102
229
  }),
103
230
  ];
104
231
  }
@@ -112,11 +239,15 @@ export class ChatViewModel {
112
239
  * prompt that will never reach a user. Any *future* call to
113
240
  * `requestPermission` on this detached VM short-circuits the same
114
241
  * way — same reasoning.
242
+ *
243
+ * (5.8) Also drops any pending coalesced frame so a scheduled bump
244
+ * can't fire into a remounted/stale epoch.
115
245
  */
116
246
  detach() {
117
247
  for (const unsubscribe of this.busUnsubscribers.splice(0))
118
248
  unsubscribe();
119
249
  this.detached = true;
250
+ this.cancelPendingBump();
120
251
  if (this.pending) {
121
252
  const p = this.pending;
122
253
  this.pending = null;
@@ -131,7 +262,7 @@ export class ChatViewModel {
131
262
  return Promise.resolve({ allow: false });
132
263
  return new Promise((resolve) => {
133
264
  this.pending = { req, resolve };
134
- this.bump();
265
+ this.forceFlush();
135
266
  });
136
267
  };
137
268
  /**
@@ -153,10 +284,10 @@ export class ChatViewModel {
153
284
  : decision.feedback
154
285
  ? "denied with feedback"
155
286
  : "denied";
156
- this.lines.push({ kind: "info", text: `${verb}: ${p.req.summary}` });
287
+ this.pushCommitted({ kind: "info", text: `${verb}: ${p.req.summary}` });
157
288
  p.resolve(decision);
158
289
  }
159
- this.bump();
290
+ this.forceFlush();
160
291
  }
161
292
  // -- approval mode (5.3) ----------------------------------------------------
162
293
  /** The current session approval mode (`"default"` when unwired). */
@@ -175,12 +306,12 @@ export class ChatViewModel {
175
306
  const next = this.approval.next();
176
307
  if (next === "yolo" && !this.approval.isYoloConfirmed()) {
177
308
  this.yoloConfirmPending = true;
178
- this.bump();
309
+ this.forceFlush();
179
310
  return;
180
311
  }
181
312
  this.approval.set(next);
182
- this.lines.push({ kind: "info", text: `approval mode → ${next}` });
183
- this.bump();
313
+ this.pushCommitted({ kind: "info", text: `approval mode → ${next}` });
314
+ this.forceFlush();
184
315
  }
185
316
  /** Resolve the yolo confirm overlay. `confirm` latches yolo for the session. */
186
317
  resolveYoloConfirm(confirm) {
@@ -188,12 +319,49 @@ export class ChatViewModel {
188
319
  if (confirm && this.approval) {
189
320
  this.approval.confirmYolo();
190
321
  this.approval.set("yolo");
191
- this.lines.push({ kind: "info", text: "approval mode → yolo (all tool calls auto-approved)" });
322
+ this.pushCommitted({
323
+ kind: "info",
324
+ text: "approval mode → yolo (all tool calls auto-approved)",
325
+ });
192
326
  }
193
- this.bump();
327
+ this.forceFlush();
194
328
  }
195
329
  }
196
- function clip(s, n = 400) {
197
- return s.length > n ? s.slice(0, n) + "…" : s;
330
+ /** Secondary guard for {@link previewToolResult}: a generous total-character
331
+ * ceiling so a single very long line (e.g. minified JSON with no newlines)
332
+ * can't blow up the live render even though it passes the line-count check.
333
+ * Far larger than the old hard 400-char clip — it only bites pathological
334
+ * single lines, never normal multi-line diffs / command output. The full
335
+ * output is already on disk when it overflowed (the result banner). */
336
+ const MAX_PREVIEW_CHARS = 8000;
337
+ /**
338
+ * (5.8) Line-aware tool-result preview: show the first `maxLines` content
339
+ * lines, then collapse the rest to a `… +N more lines` note. Replaces the old
340
+ * hard 400-char clip, which truncated multi-line diffs / command output
341
+ * mid-line. When a tool's full output overflowed it was already persisted to
342
+ * disk and the path is part of `output` (the banner), so nothing is lost.
343
+ *
344
+ * A single trailing newline is not counted as a hidden line (codex R2
345
+ * SHOULD-FIX): `"a\nb\n"` is two content lines, not three. After the
346
+ * line-aware pass, {@link MAX_PREVIEW_CHARS} caps a pathological single huge
347
+ * line (codex R2 NICE).
348
+ */
349
+ function previewToolResult(output, maxLines) {
350
+ const lines = output.split("\n");
351
+ // A terminal "\n" yields a final empty segment that isn't a content line.
352
+ const contentLineCount = lines.length > 0 && lines[lines.length - 1] === "" ? lines.length - 1 : lines.length;
353
+ let preview;
354
+ if (contentLineCount <= maxLines) {
355
+ preview = output;
356
+ }
357
+ else {
358
+ const hidden = contentLineCount - maxLines;
359
+ preview = `${lines.slice(0, maxLines).join("\n")}\n… +${hidden} more line${hidden === 1 ? "" : "s"}`;
360
+ }
361
+ if (preview.length > MAX_PREVIEW_CHARS) {
362
+ const hiddenChars = preview.length - MAX_PREVIEW_CHARS;
363
+ preview = `${preview.slice(0, MAX_PREVIEW_CHARS)}… +${hiddenChars} more characters`;
364
+ }
365
+ return preview;
198
366
  }
199
367
  //# sourceMappingURL=view-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-model.js","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-model.js","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chances-ai/tui",
3
- "version": "11.0.0",
3
+ "version": "13.0.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,13 +14,13 @@
14
14
  "dist"
15
15
  ],
16
16
  "dependencies": {
17
- "@chances-ai/plugin-api": "11.0.0",
18
- "@chances-ai/runtime": "11.0.0",
19
- "@chances-ai/tools": "11.0.0"
17
+ "@chances-ai/plugin-api": "13.0.0",
18
+ "@chances-ai/runtime": "13.0.0",
19
+ "@chances-ai/tools": "13.0.0"
20
20
  },
21
21
  "peerDependencies": {
22
- "ink": "^5.0.1",
23
- "react": "^18.3.1"
22
+ "ink": "^7.0.3",
23
+ "react": "^19.2"
24
24
  },
25
25
  "scripts": {
26
26
  "build": "tsc -b",