@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.
- package/dist/api-key-prompt.d.ts +1 -0
- package/dist/api-key-prompt.d.ts.map +1 -1
- package/dist/api-key-prompt.js.map +1 -1
- package/dist/app.d.ts +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +16 -5
- package/dist/app.js.map +1 -1
- package/dist/frame-scheduler.d.ts +44 -0
- package/dist/frame-scheduler.d.ts.map +1 -0
- package/dist/frame-scheduler.js +58 -0
- package/dist/frame-scheduler.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/model-picker.d.ts +1 -0
- package/dist/model-picker.d.ts.map +1 -1
- package/dist/model-picker.js.map +1 -1
- package/dist/session-picker.d.ts +1 -0
- package/dist/session-picker.d.ts.map +1 -1
- package/dist/session-picker.js.map +1 -1
- package/dist/view-model.d.ts +89 -2
- package/dist/view-model.d.ts.map +1 -1
- package/dist/view-model.js +199 -31
- package/dist/view-model.js.map +1 -1
- package/package.json +6 -6
package/dist/api-key-prompt.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-prompt.d.ts","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":"
|
|
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,
|
|
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
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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.
|
|
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":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;
|
|
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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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;
|
|
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"}
|
package/dist/model-picker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"
|
|
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"}
|
package/dist/model-picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../src/model-picker.tsx"],"names":[],"mappings":"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"}
|
package/dist/session-picker.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"
|
|
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":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../src/session-picker.tsx"],"names":[],"mappings":"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"}
|
package/dist/view-model.d.ts
CHANGED
|
@@ -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;
|
package/dist/view-model.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"view-model.d.ts","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"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"}
|
package/dist/view-model.js
CHANGED
|
@@ -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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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.
|
|
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.
|
|
49
|
-
this.
|
|
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.
|
|
179
|
+
this.forceFlush();
|
|
73
180
|
}),
|
|
74
181
|
bus.on("turn:end", () => {
|
|
75
182
|
this.busy = false;
|
|
76
|
-
|
|
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
|
-
|
|
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.
|
|
203
|
+
this.committedCount = this.lines.length;
|
|
204
|
+
this.forceFlush();
|
|
89
205
|
}),
|
|
90
206
|
bus.on("tool:call", (e) => {
|
|
91
|
-
|
|
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.
|
|
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
|
-
|
|
97
|
-
|
|
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.
|
|
101
|
-
this.
|
|
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.
|
|
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.
|
|
287
|
+
this.pushCommitted({ kind: "info", text: `${verb}: ${p.req.summary}` });
|
|
157
288
|
p.resolve(decision);
|
|
158
289
|
}
|
|
159
|
-
this.
|
|
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.
|
|
309
|
+
this.forceFlush();
|
|
179
310
|
return;
|
|
180
311
|
}
|
|
181
312
|
this.approval.set(next);
|
|
182
|
-
this.
|
|
183
|
-
this.
|
|
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.
|
|
322
|
+
this.pushCommitted({
|
|
323
|
+
kind: "info",
|
|
324
|
+
text: "approval mode → yolo (all tool calls auto-approved)",
|
|
325
|
+
});
|
|
192
326
|
}
|
|
193
|
-
this.
|
|
327
|
+
this.forceFlush();
|
|
194
328
|
}
|
|
195
329
|
}
|
|
196
|
-
|
|
197
|
-
|
|
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
|
package/dist/view-model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-model.js","sourceRoot":"","sources":["../src/view-model.ts"],"names":[],"mappings":"
|
|
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": "
|
|
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": "
|
|
18
|
-
"@chances-ai/runtime": "
|
|
19
|
-
"@chances-ai/tools": "
|
|
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": "^
|
|
23
|
-
"react": "^
|
|
22
|
+
"ink": "^7.0.3",
|
|
23
|
+
"react": "^19.2"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsc -b",
|