thatgfsj-code 3.0.11 → 3.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +4 -0
  2. package/dist/app/index.d.ts +20 -0
  3. package/dist/app/index.d.ts.map +1 -1
  4. package/dist/app/index.js +47 -0
  5. package/dist/app/index.js.map +1 -1
  6. package/dist/cmd/index.js +15 -1
  7. package/dist/cmd/index.js.map +1 -1
  8. package/dist/config/types.d.ts +15 -0
  9. package/dist/config/types.d.ts.map +1 -1
  10. package/dist/prompts/index.js +1 -1
  11. package/dist/prompts/index.js.map +1 -1
  12. package/dist/setup/browser-setup.d.ts +13 -0
  13. package/dist/setup/browser-setup.d.ts.map +1 -0
  14. package/dist/setup/browser-setup.js +70 -0
  15. package/dist/setup/browser-setup.js.map +1 -0
  16. package/dist/tools/browser.d.ts +77 -0
  17. package/dist/tools/browser.d.ts.map +1 -0
  18. package/dist/tools/browser.js +264 -0
  19. package/dist/tools/browser.js.map +1 -0
  20. package/dist/tools/index.d.ts +1 -0
  21. package/dist/tools/index.d.ts.map +1 -1
  22. package/dist/tools/index.js +3 -0
  23. package/dist/tools/index.js.map +1 -1
  24. package/dist/tui/app.d.ts.map +1 -1
  25. package/dist/tui/app.js +7 -5
  26. package/dist/tui/app.js.map +1 -1
  27. package/dist/tui/components/ChatList.d.ts +8 -16
  28. package/dist/tui/components/ChatList.d.ts.map +1 -1
  29. package/dist/tui/components/ChatList.js +11 -52
  30. package/dist/tui/components/ChatList.js.map +1 -1
  31. package/dist/tui/components/ChatMessage.d.ts +5 -0
  32. package/dist/tui/components/ChatMessage.d.ts.map +1 -1
  33. package/dist/tui/components/ChatMessage.js +5 -4
  34. package/dist/tui/components/ChatMessage.js.map +1 -1
  35. package/dist/tui/components/ModelSettings.d.ts.map +1 -1
  36. package/dist/tui/components/ModelSettings.js +18 -2
  37. package/dist/tui/components/ModelSettings.js.map +1 -1
  38. package/dist/tui/components/Splash.d.ts.map +1 -1
  39. package/dist/tui/components/Splash.js +13 -14
  40. package/dist/tui/components/Splash.js.map +1 -1
  41. package/dist/tui/components/StatusBar.d.ts +16 -2
  42. package/dist/tui/components/StatusBar.d.ts.map +1 -1
  43. package/dist/tui/components/StatusBar.js +18 -4
  44. package/dist/tui/components/StatusBar.js.map +1 -1
  45. package/dist/tui/hooks/useChat.d.ts.map +1 -1
  46. package/dist/tui/hooks/useChat.js +16 -5
  47. package/dist/tui/hooks/useChat.js.map +1 -1
  48. package/dist/utils/tokens.d.ts +14 -0
  49. package/dist/utils/tokens.d.ts.map +1 -0
  50. package/dist/utils/tokens.js +32 -0
  51. package/dist/utils/tokens.js.map +1 -0
  52. package/package.json +2 -1
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Browser Tool - Local browser automation via Playwright (v3.0.13).
3
+ *
4
+ * Lets the agent search the web and read pages using a REAL browser on the
5
+ * user's machine — no API keys, no third-party search service, traffic goes
6
+ * through the local network stack (works in China; Bing/Baidu are direct).
7
+ *
8
+ * Design notes:
9
+ * - Uses `playwright-core` (≈3MB, no browser downloads) and drives the
10
+ * system Edge/Chrome via the `channel` option — Windows ships Edge, so
11
+ * zero browser installation for virtually every user.
12
+ * - The browser launches lazily on first use and is reused across calls;
13
+ * it is killed on process exit.
14
+ * - `search` : engine search (bing | baidu), returns title/url/snippet
15
+ * - `open` : open a URL, return the page's readable text
16
+ * - `close` : shut the browser down
17
+ *
18
+ * Read-only (`network` permission): never asks for confirmation.
19
+ */
20
+ const GOTO_TIMEOUT_MS = 25000;
21
+ const MAX_PAGE_TEXT = 6000;
22
+ const MAX_RESULTS = 10;
23
+ /** Result extractors per search engine — page-local selectors. */
24
+ const ENGINES = {
25
+ bing: {
26
+ url: (q) => `https://cn.bing.com/search?q=${encodeURIComponent(q)}&mkt=zh-CN`,
27
+ results: () => ({
28
+ item: '#b_results li.b_algo',
29
+ title: 'h2 a',
30
+ snippet: '.b_caption p, p',
31
+ }),
32
+ },
33
+ baidu: {
34
+ url: (q) => `https://www.baidu.com/s?wd=${encodeURIComponent(q)}`,
35
+ results: () => ({
36
+ item: '#content_left .result, #content_left .c-container',
37
+ title: 'h3 a',
38
+ snippet: '.c-abstract, [class*=content-right], p',
39
+ }),
40
+ },
41
+ };
42
+ export class BrowserTool {
43
+ name = 'browser';
44
+ description = 'Drive a local browser (headless Edge/Chrome via Playwright) to search ' +
45
+ 'the web or read pages. Actions: search (query via bing/baidu), open ' +
46
+ '(read a URL as text), close. Use for anything beyond your training ' +
47
+ 'data: current events, docs, prices, error messages.';
48
+ inputSchema = {
49
+ type: 'object',
50
+ properties: {
51
+ action: { type: 'string', description: 'Action: search, open, close' },
52
+ query: { type: 'string', description: 'Search keywords (for action=search)' },
53
+ url: { type: 'string', description: 'URL to open (for action=open)' },
54
+ engine: { type: 'string', description: 'Search engine: bing (default) or baidu' },
55
+ },
56
+ required: ['action'],
57
+ };
58
+ metadata = {
59
+ permissions: ['network'],
60
+ tags: ['browser', 'web', 'network'],
61
+ maxDuration: 60000,
62
+ version: '1.0.0',
63
+ };
64
+ parameters = [
65
+ { name: 'action', type: 'string', description: 'Action: search, open, close', required: true },
66
+ { name: 'query', type: 'string', description: 'Search keywords (for search)', required: false },
67
+ { name: 'url', type: 'string', description: 'URL to open (for open)', required: false },
68
+ { name: 'engine', type: 'string', description: 'Engine: bing (default) or baidu', required: false },
69
+ ];
70
+ /** Lazily-created, shared across calls. */
71
+ static pw = null;
72
+ static browser = null;
73
+ static launchError = null;
74
+ static exitHookInstalled = false;
75
+ async launch() {
76
+ if (BrowserTool.browser)
77
+ return BrowserTool.browser;
78
+ if (BrowserTool.launchError)
79
+ throw new Error(BrowserTool.launchError);
80
+ if (!BrowserTool.pw) {
81
+ try {
82
+ BrowserTool.pw = await import('playwright-core');
83
+ }
84
+ catch (err) {
85
+ BrowserTool.launchError = 'playwright-core is not installed. Run: npm i -g playwright-core';
86
+ throw new Error(BrowserTool.launchError);
87
+ }
88
+ }
89
+ const channels = ['msedge', 'chrome']; // system browsers — no download needed
90
+ let lastErr = null;
91
+ for (const channel of channels) {
92
+ try {
93
+ BrowserTool.browser = await BrowserTool.pw.chromium.launch({ channel, headless: true });
94
+ break;
95
+ }
96
+ catch (err) {
97
+ lastErr = err;
98
+ }
99
+ }
100
+ if (!BrowserTool.browser) {
101
+ // Last resort: playwright's own chromium, if the user installed it.
102
+ try {
103
+ BrowserTool.browser = await BrowserTool.pw.chromium.launch({ headless: true });
104
+ }
105
+ catch {
106
+ BrowserTool.launchError =
107
+ `No usable browser found (tried Edge, Chrome, bundled Chromium). ` +
108
+ `Install one, or run: npx playwright install chromium. (${lastErr?.message ?? 'unknown error'})`;
109
+ throw new Error(BrowserTool.launchError);
110
+ }
111
+ }
112
+ if (!BrowserTool.exitHookInstalled) {
113
+ BrowserTool.exitHookInstalled = true;
114
+ process.on('exit', () => {
115
+ try {
116
+ BrowserTool.browser?.close();
117
+ }
118
+ catch { /* best-effort */ }
119
+ });
120
+ }
121
+ return BrowserTool.browser;
122
+ }
123
+ async execute(params) {
124
+ const action = String(params.action || '').toLowerCase();
125
+ try {
126
+ if (action === 'close') {
127
+ await this.dispose();
128
+ return { success: true, output: 'Browser closed.' };
129
+ }
130
+ if (action === 'search') {
131
+ const query = typeof params.query === 'string' ? params.query.trim() : '';
132
+ if (!query)
133
+ return { success: false, error: 'query is required for action=search' };
134
+ const engine = ENGINES[String(params.engine || 'bing').toLowerCase()] ? String(params.engine || 'bing').toLowerCase() : 'bing';
135
+ const browser = await this.launch();
136
+ const page = await browser.newPage();
137
+ try {
138
+ await page.goto(ENGINES[engine].url(query), { timeout: GOTO_TIMEOUT_MS, waitUntil: 'domcontentloaded' });
139
+ await page.waitForSelector(ENGINES[engine].results().item, { timeout: 8000 }).catch(() => { });
140
+ const results = await page.evaluate(({ item, title, snippet }) => {
141
+ const out = [];
142
+ for (const el of document.querySelectorAll(item)) {
143
+ const a = el.querySelector(title);
144
+ if (!a)
145
+ continue;
146
+ out.push({
147
+ title: (a.textContent || '').trim(),
148
+ url: a.href || '',
149
+ snippet: (el.querySelector(snippet)?.textContent || '').trim(),
150
+ });
151
+ if (out.length >= 10)
152
+ break;
153
+ }
154
+ return out;
155
+ }, ENGINES[engine].results());
156
+ if (results.length === 0) {
157
+ return { success: false, error: `No results parsed from ${engine} (page structure may have changed). Try engine=baidu or action=open with a direct URL.` };
158
+ }
159
+ const blocks = results.map((r, i) => `[${i + 1}] ${r.title}\n ${r.url}\n ${r.snippet.slice(0, 300)}`);
160
+ return { success: true, output: `${engine} search for "${query}" — ${results.length} results:\n\n${blocks.join('\n\n')}` };
161
+ }
162
+ finally {
163
+ await page.close().catch(() => { });
164
+ }
165
+ }
166
+ if (action === 'open') {
167
+ const url = typeof params.url === 'string' ? params.url.trim() : '';
168
+ if (!url)
169
+ return { success: false, error: 'url is required for action=open' };
170
+ let normalized = url;
171
+ if (!/^https?:\/\//i.test(normalized))
172
+ normalized = 'https://' + normalized;
173
+ const browser = await this.launch();
174
+ const page = await browser.newPage();
175
+ try {
176
+ await page.goto(normalized, { timeout: GOTO_TIMEOUT_MS, waitUntil: 'domcontentloaded' });
177
+ await page.waitForTimeout(500);
178
+ const text = await page.evaluate(() => {
179
+ // Strip the obvious noise before reading text.
180
+ for (const sel of ['script', 'style', 'noscript', 'svg', 'iframe']) {
181
+ for (const el of document.querySelectorAll(sel))
182
+ el.remove();
183
+ }
184
+ const root = (document.querySelector('main, article') || document.body);
185
+ return root.innerText;
186
+ });
187
+ const clean = text.replace(/\n{3,}/g, '\n\n').trim();
188
+ if (!clean)
189
+ return { success: false, error: 'Page loaded but no text extracted (may be a JS-only app).' };
190
+ const output = clean.length > MAX_PAGE_TEXT
191
+ ? clean.slice(0, MAX_PAGE_TEXT) + `\n\n... [truncated, ${clean.length - MAX_PAGE_TEXT} more chars — open with a more specific URL if needed]`
192
+ : clean;
193
+ return { success: true, output: `${normalized}\n\n${output}` };
194
+ }
195
+ finally {
196
+ await page.close().catch(() => { });
197
+ }
198
+ }
199
+ return { success: false, error: `Unknown action: ${action}. Use search, open or close.` };
200
+ }
201
+ catch (error) {
202
+ return { success: false, error: `browser ${action} failed: ${error.message}` };
203
+ }
204
+ }
205
+ /** Shut the shared browser down (process exit / action=close). */
206
+ async dispose() {
207
+ const browser = BrowserTool.browser;
208
+ BrowserTool.browser = null;
209
+ if (browser) {
210
+ try {
211
+ await browser.close();
212
+ }
213
+ catch { /* already dead */ }
214
+ }
215
+ }
216
+ /**
217
+ * v3.0.13: probe for a system browser WITHOUT keeping it open.
218
+ * Returns the channel name ('msedge' | 'chrome') or null.
219
+ * Used by the first-run setup to decide whether a Chromium download is
220
+ * needed. Non-fatal on every failure path.
221
+ */
222
+ static async probeSystemBrowser() {
223
+ let pw;
224
+ try {
225
+ pw = await import('playwright-core');
226
+ }
227
+ catch {
228
+ return null;
229
+ }
230
+ for (const channel of ['msedge', 'chrome']) {
231
+ let browser = null;
232
+ try {
233
+ browser = await pw.chromium.launch({ channel, headless: true });
234
+ return channel;
235
+ }
236
+ catch {
237
+ // try next
238
+ }
239
+ finally {
240
+ try {
241
+ browser?.close();
242
+ }
243
+ catch { /* ignore */ }
244
+ }
245
+ }
246
+ return null;
247
+ }
248
+ /** Verify a browser can launch; returns the mode that worked, else null. */
249
+ static async verifyLaunch() {
250
+ const sys = await BrowserTool.probeSystemBrowser();
251
+ if (sys)
252
+ return sys;
253
+ try {
254
+ const pw = await import('playwright-core');
255
+ const browser = await pw.chromium.launch({ headless: true });
256
+ await browser.close().catch(() => { });
257
+ return 'chromium';
258
+ }
259
+ catch {
260
+ return null;
261
+ }
262
+ }
263
+ }
264
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"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"}
@@ -40,4 +40,5 @@ export { ShellTool } from './shell.js';
40
40
  export { GitTool } from './git.js';
41
41
  export { SearchTool } from './search.js';
42
42
  export { NwtTool } from './nwt.js';
43
+ export { BrowserTool } from './browser.js';
43
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAOjF,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAmB;;IAMlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAI3C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,IAAI,IAAI,IAAI,EAAE;IAId,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IAW5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAY9E;AAGD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAQjF,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAmB;;IAMlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAI3C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,IAAI,IAAI,IAAI,EAAE;IAId,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC;IAW5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAY9E;AAGD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -7,6 +7,7 @@ import { ShellTool } from './shell.js';
7
7
  import { GitTool } from './git.js';
8
8
  import { SearchTool } from './search.js';
9
9
  import { NwtTool } from './nwt.js';
10
+ import { BrowserTool } from './browser.js';
10
11
  export class ToolRegistry {
11
12
  tools = new Map();
12
13
  context = {};
@@ -22,6 +23,7 @@ export class ToolRegistry {
22
23
  this.register(new GitTool());
23
24
  this.register(new SearchTool());
24
25
  this.register(new NwtTool());
26
+ this.register(new BrowserTool());
25
27
  }
26
28
  setContext(ctx) {
27
29
  this.context = { ...this.context, ...ctx };
@@ -92,4 +94,5 @@ export { ShellTool } from './shell.js';
92
94
  export { GitTool } from './git.js';
93
95
  export { SearchTool } from './search.js';
94
96
  export { NwtTool } from './nwt.js';
97
+ export { BrowserTool } from './browser.js';
95
98
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,MAAM,OAAO,YAAY;IACf,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IACrC,OAAO,GAAgB,EAAE,CAAC;IAElC;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,GAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;aAC5D;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAU;QACjC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;oBAClF,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC;gBACF,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAA2D,CAAC;YAC/D,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAA2B;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,OAAO,KAAK,EAAE,GAAG,EAAkB,MAAM,iBAAiB,CAAC;AAS3D,UAAU,KAAK;IACb,GAAG,EAAE,GAAG,CAAC;CACV;AAkBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,qBAyPpC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAmD,MAAM,OAAO,CAAC;AAcxE,OAAO,KAAK,EAAE,GAAG,EAAkB,MAAM,iBAAiB,CAAC;AAS3D,UAAU,KAAK;IACb,GAAG,EAAE,GAAG,CAAC;CACV;AAkBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,qBAwPpC"}
package/dist/tui/app.js CHANGED
@@ -189,10 +189,12 @@ export function TuiApp({ app }) {
189
189
  setViewMode('chat');
190
190
  addMsg(`配置完成: ${provider} / ${model}`);
191
191
  }, onCancel: () => setViewMode('chat') })) : (_jsx(UserInput, { onSubmit: onSubmit, onCancel: cancel, disabled: false, mode: "Build", provider: cfg.provider, model: cfg.model, thinking: thinking, fullWidth: !splashMode, width: splashMode ? Math.min(terminalWidth - 4, 64) : undefined }));
192
- return (_jsxs(Box, { flexDirection: "column", height: terminalRows, width: terminalWidth, paddingX: 1, children: [splashMode ? (_jsxs(_Fragment, { children: [_jsx(Splash, {}), _jsx(Box, { justifyContent: "center", children: inputArea }), _jsx(Box, { justifyContent: "center", paddingTop: 1, children: _jsxs(Text, { color: theme.textFaint, children: [_jsx(Text, { color: theme.accent, children: "\u25C6 Tip " }), ' ', "/models \u53EF\u6DFB\u52A0\u6A21\u578B\u3001\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u957F\u5EA6\u548C\u601D\u8003\u5F3A\u5EA6 \u00B7 /help \u67E5\u770B\u5168\u90E8\u547D\u4EE4"] }) }), _jsx(Box, { flexGrow: 1 })] })) : (_jsxs(_Fragment, { children: [_jsx(Header, { cacheHitRate: cacheSnapshot.hitRate > 0 ? cacheSnapshot.hitRate : null, cacheSavingsCNY: cacheSnapshot.estimatedSavingsCNY, cacheTtl: resolvedTtl ?? configTtl ?? null, width: terminalWidth }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [_jsx(ChatList, { messages: allMessages, streaming: streaming, streamingToolCalls: streamingToolCalls, width: terminalWidth - 4,
193
- // v3.0.9: managed viewport — chrome rows (header 2 + input 3 +
194
- // hints 1 + status 1 + bottom 1 + margins ~2) are reserved so
195
- // the message list never overflows the fixed-height frame.
196
- viewportHeight: Math.max(5, terminalRows - 10), mode: "Build", model: cfg.model }), _jsx(Thinking, { active: isThinking }), queuedMessage && (_jsxs(Box, { paddingLeft: 1, children: [_jsx(Text, { color: theme.warning, children: "\uD83D\uDCCE \u5DF2\u6392\u961F: " }), _jsx(Text, { color: theme.textDim, children: queuedMessage })] }))] }), inputArea, _jsx(Box, { flexGrow: 0 })] })), _jsx(StatusBar, { messageCount: allMessages.length, skills: activeSkills, provider: cfg.provider, model: cfg.model }), _jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsx(Text, { color: theme.textFaint, children: "~" }), _jsxs(Text, { color: theme.textFaint, children: ["v", getVersion(), app.permissionMode === 'accept' ? ' · yolo' : ''] })] })] }));
192
+ return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, paddingX: 1, ...(splashMode ? { height: terminalRows } : {}), children: [splashMode ? (_jsxs(_Fragment, { children: [_jsx(Splash, {}), _jsx(Box, { justifyContent: "center", children: inputArea }), _jsx(Box, { justifyContent: "center", paddingTop: 1, children: _jsxs(Text, { color: theme.textFaint, children: [_jsx(Text, { color: theme.accent, children: "\u25C6 Tip " }), ' ', "/models \u53EF\u6DFB\u52A0\u6A21\u578B\u3001\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u957F\u5EA6\u548C\u601D\u8003\u5F3A\u5EA6 \u00B7 /help \u67E5\u770B\u5168\u90E8\u547D\u4EE4"] }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Header, { cacheHitRate: cacheSnapshot.hitRate > 0 ? cacheSnapshot.hitRate : null, cacheSavingsCNY: cacheSnapshot.estimatedSavingsCNY, cacheTtl: resolvedTtl ?? configTtl ?? null, width: terminalWidth }), _jsx(ChatList, { messages: allMessages, streaming: streaming, streamingToolCalls: streamingToolCalls, width: terminalWidth - 4, mode: "Build", model: cfg.model }), _jsx(Thinking, { active: isThinking }), queuedMessage && (_jsxs(Box, { paddingLeft: 1, children: [_jsx(Text, { color: theme.warning, children: "\uD83D\uDCCE \u5DF2\u6392\u961F: " }), _jsx(Text, { color: theme.textDim, children: queuedMessage })] })), inputArea] })), _jsx(StatusBar, { messageCount: allMessages.length, skills: activeSkills, provider: cfg.provider, model: cfg.model, stats: {
193
+ contextTokens: app.sessionStats.promptTokens,
194
+ contextWindow: app.getContextWindow(),
195
+ inTokens: cacheSnapshot.totalInputTokens,
196
+ outTokens: app.sessionStats.completionTokens,
197
+ savingsCNY: cacheSnapshot.estimatedSavingsCNY,
198
+ } }), _jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsx(Text, { color: theme.textFaint, children: "~" }), _jsxs(Text, { color: theme.textFaint, children: ["v", getVersion(), app.permissionMode === 'accept' ? ' · yolo' : ''] })] })] }));
197
199
  }
198
200
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
@@ -7,28 +7,20 @@ interface Props {
7
7
  streaming?: string;
8
8
  streamingToolCalls?: ToolCallData[];
9
9
  width?: number;
10
- /**
11
- * v3.0.9: viewport height (in terminal rows). When provided, the list
12
- * renders the most recent messages that fit — WITHOUT Ink <Static>.
13
- *
14
- * Why: Static prints items once above the re-rendered frame, and a
15
- * full-terminal-height frame erases them on the next repaint (messages
16
- * "flash and disappear" in fullscreen mode). In viewport mode messages
17
- * are ordinary tree children of the fixed-height frame, exactly like
18
- * opencode's managed viewport.
19
- *
20
- * When omitted (headless/legacy), falls back to Static.
21
- */
22
- viewportHeight?: number;
23
10
  /** v3.0.9: assistant label info (opencode session view). */
24
11
  mode?: string;
25
12
  model?: string;
26
13
  }
27
14
  /**
28
- * v3.0.9: slice the newest messages that fit the viewport budget.
29
- * Returns [hiddenCount, visibleMessages].
15
+ * v3.0.13: completed messages render through Ink <Static> printed ONCE
16
+ * into the terminal's scroll buffer and never touched again. History stays
17
+ * visible indefinitely (scroll back freely); nothing is ever folded or
18
+ * erased. Only the streaming tail + input live in the re-rendered frame.
19
+ *
20
+ * (3.0.9 tried a sliced viewport inside a fixed-height fullscreen frame;
21
+ * the user rejected it — history must stay visible, not fold after ~10
22
+ * messages.)
30
23
  */
31
- export declare function sliceForViewport(messages: MessageData[], height: number, width: number): [number, MessageData[]];
32
24
  export declare const ChatList: React.NamedExoticComponent<Props>;
33
25
  export {};
34
26
  //# sourceMappingURL=ChatList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatList.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAe,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,UAAU,KAAK;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAUhH;AAED,eAAO,MAAM,QAAQ,mCAwDnB,CAAC"}
1
+ {"version":3,"file":"ChatList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatList.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAe,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,UAAU,KAAK;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,mCA0BnB,CAAC"}
@@ -1,61 +1,20 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /** @jsxImportSource react */
3
3
  import { memo } from 'react';
4
- import { Box, Static, Text } from 'ink';
4
+ import { Box, Static } from 'ink';
5
5
  import { ChatMessage } from './ChatMessage.js';
6
- import { theme } from '../theme.js';
7
- /** Rough line estimate for a rendered message (wrapping + chrome). */
8
- function estimateLines(m, width) {
9
- const w = Math.max(20, width - 4);
10
- let lines = 0;
11
- if (m.role === 'user') {
12
- lines += 1 + Math.max(1, Math.ceil(m.content.length / w));
13
- }
14
- else {
15
- for (const tc of m.toolCalls ?? []) {
16
- lines += 1 + (tc.result !== undefined ? 1 : 0);
17
- }
18
- if (m.content) {
19
- const srcLines = m.content.split('\n').length;
20
- lines += 2 + srcLines + Math.ceil(m.content.length / w); // +1 label line
21
- }
22
- }
23
- return lines + 1; // marginBottom spacing
24
- }
25
6
  /**
26
- * v3.0.9: slice the newest messages that fit the viewport budget.
27
- * Returns [hiddenCount, visibleMessages].
7
+ * v3.0.13: completed messages render through Ink <Static> printed ONCE
8
+ * into the terminal's scroll buffer and never touched again. History stays
9
+ * visible indefinitely (scroll back freely); nothing is ever folded or
10
+ * erased. Only the streaming tail + input live in the re-rendered frame.
11
+ *
12
+ * (3.0.9 tried a sliced viewport inside a fixed-height fullscreen frame;
13
+ * the user rejected it — history must stay visible, not fold after ~10
14
+ * messages.)
28
15
  */
29
- export function sliceForViewport(messages, height, width) {
30
- let budget = Math.max(3, height);
31
- let i = messages.length;
32
- while (i > 0) {
33
- const cost = estimateLines(messages[i - 1], width);
34
- if (budget - cost < 0)
35
- break;
36
- budget -= cost;
37
- i--;
38
- }
39
- return [i, messages.slice(i)];
40
- }
41
- export const ChatList = memo(function ChatList({ messages, streaming, streamingToolCalls, width, viewportHeight, mode, model }) {
16
+ export const ChatList = memo(function ChatList({ messages, streaming, streamingToolCalls, width, mode, model }) {
42
17
  const hasStreaming = !!(streaming || (streamingToolCalls && streamingToolCalls.length > 0));
43
- // ── viewport mode (fullscreen TUI) ──
44
- if (viewportHeight !== undefined) {
45
- const w = width || 80;
46
- const streamingMsg = hasStreaming
47
- ? {
48
- role: 'assistant',
49
- content: streaming || '',
50
- toolCalls: streamingToolCalls && streamingToolCalls.length > 0 ? streamingToolCalls : undefined,
51
- }
52
- : null;
53
- // The in-flight streaming block shares the viewport budget.
54
- const budget = Math.max(3, viewportHeight - (streamingMsg ? estimateLines(streamingMsg, w) : 0));
55
- const [hidden, visible] = sliceForViewport(messages, budget, w);
56
- return (_jsxs(Box, { flexDirection: "column", overflow: "hidden", children: [hidden > 0 && (_jsxs(Text, { color: theme.textFaint, children: ["\u2026 \u5DF2\u6298\u53E0\u8F83\u65E9\u7684 ", hidden, " \u6761\u6D88\u606F\uFF08/resume \u6216 /new \u7BA1\u7406\uFF09"] })), visible.map((msg, i) => (_jsx(ChatMessage, { message: msg, width: w, mode: mode, model: model }, `msg-${messages.length - visible.length + i}`))), streamingMsg && (_jsx(ChatMessage, { message: streamingMsg, width: w, mode: mode, model: model }))] }));
57
- }
58
- // ── Static mode (legacy/headless) ──
59
18
  return (_jsxs(Box, { flexDirection: "column", children: [messages.length > 0 && (_jsx(Static, { items: messages, children: (msg, index) => (_jsx(ChatMessage, { message: msg, width: width, mode: mode, model: model }, `msg-${index}`)) })), hasStreaming && (_jsx(ChatMessage, { message: {
60
19
  role: 'assistant',
61
20
  content: streaming || '',
@@ -1 +1 @@
1
- {"version":3,"file":"ChatList.js","sourceRoot":"","sources":["../../../src/tui/components/ChatList.tsx"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAyBpC,sEAAsE;AACtE,SAAS,aAAa,CAAC,CAAc,EAAE,KAAa;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAuB;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAuB,EAAE,MAAc,EAAE,KAAa;IACrF,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC;YAAE,MAAM;QAC7B,MAAM,IAAI,IAAI,CAAC;QACf,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAS;IACnI,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5F,uCAAuC;IACvC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,YAAY,GAAuB,YAAY;YACnD,CAAC,CAAC;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,SAAS,IAAI,EAAE;gBACxB,SAAS,EAAE,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;aAChG;YACH,CAAC,CAAC,IAAI,CAAC;QACT,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,aAC1C,MAAM,GAAG,CAAC,IAAI,CACb,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,6DAAY,MAAM,uEAA+B,CAC9E,EACA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,KAAC,WAAW,IAAqD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAA/F,OAAO,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAsD,CACtH,CAAC,EACD,YAAY,IAAI,CACf,KAAC,WAAW,IAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAC3E,IACG,CACP,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,KAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,YACpB,CAAC,GAAgB,EAAE,KAAa,EAAE,EAAE,CAAC,CACpC,KAAC,WAAW,IAAsB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAApE,OAAO,KAAK,EAAE,CAA0D,CAC3F,GACM,CACV,EACA,YAAY,IAAI,CACf,KAAC,WAAW,IACV,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,SAAS,IAAI,EAAE;oBACxB,SAAS,EAAE,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;iBAChG,EACD,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ChatList.js","sourceRoot":"","sources":["../../../src/tui/components/ChatList.tsx"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AAajE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAS;IACnH,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5F,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,KAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,YACpB,CAAC,GAAgB,EAAE,KAAa,EAAE,EAAE,CAAC,CACpC,KAAC,WAAW,IAAsB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAApE,OAAO,KAAK,EAAE,CAA0D,CAC3F,GACM,CACV,EACA,YAAY,IAAI,CACf,KAAC,WAAW,IACV,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,SAAS,IAAI,EAAE;oBACxB,SAAS,EAAE,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;iBAChG,EACD,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -5,6 +5,11 @@ interface MessageData {
5
5
  role: 'user' | 'assistant' | 'tool';
6
6
  content: string;
7
7
  toolCalls?: ToolCallData[];
8
+ /**
9
+ * v3.0.13: real completion tokens for this assistant turn (summed across
10
+ * agent-loop rounds). User messages show a heuristic estimate instead.
11
+ */
12
+ tokens?: number;
8
13
  }
9
14
  interface Props {
10
15
  message: MessageData;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAG5D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuCD,eAAO,MAAM,WAAW,mCAKtB,CAAC;AAEH,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"ChatMessage.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAI5D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,KAAK;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2CD,eAAO,MAAM,WAAW,mCAKtB,CAAC;AAEH,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -5,6 +5,7 @@ import { Box, Text } from 'ink';
5
5
  import { Markdown } from './Markdown.js';
6
6
  import { ToolCall } from './ToolCall.js';
7
7
  import { theme } from '../theme.js';
8
+ import { estimateTokens, formatTokens } from '../../utils/tokens.js';
8
9
  /**
9
10
  * v3.0.9 (opencode session view): the USER message is the prominent block —
10
11
  * left accent bar + plain text; the ASSISTANT reply is quiet — a dim
@@ -12,15 +13,15 @@ import { theme } from '../theme.js';
12
13
  * `⎿` continuation lines above it.
13
14
  */
14
15
  function UserMessage({ content }) {
15
- return (_jsx(Box, { marginBottom: 1, borderLeft: true, borderLeftColor: theme.accent, borderStyle: "bold", paddingLeft: 1, paddingRight: 1, children: _jsx(Text, { color: theme.text, children: content }) }));
16
+ return (_jsxs(Box, { marginBottom: 1, borderLeft: true, borderLeftColor: theme.accent, borderStyle: "bold", paddingLeft: 1, paddingRight: 1, children: [_jsx(Text, { color: theme.text, children: content }), _jsxs(Text, { color: theme.textFaint, children: [" ~", estimateTokens(content), "t"] })] }));
16
17
  }
17
- function AssistantMessage({ content, toolCalls, mode, model }) {
18
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, paddingLeft: 1, children: [toolCalls && toolCalls.map((tc, i) => (_jsx(ToolCall, { tool: tc }, i))), content && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.textFaint, children: ["\u25AA ", mode ?? 'Build', model ? ` · ${model}` : ''] }), _jsx(Markdown, { content: content })] }))] }));
18
+ function AssistantMessage({ content, toolCalls, mode, model, tokens }) {
19
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, paddingLeft: 1, children: [toolCalls && toolCalls.map((tc, i) => (_jsx(ToolCall, { tool: tc }, i))), content && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.textFaint, children: ["\u25AA ", mode ?? 'Build', model ? ` · ${model}` : '', tokens ? ` · ${formatTokens(tokens)}t` : ''] }), _jsx(Markdown, { content: content })] }))] }));
19
20
  }
20
21
  export const ChatMessage = React.memo(function ChatMessage({ message, mode, model }) {
21
22
  if (message.role === 'user') {
22
23
  return _jsx(UserMessage, { content: message.content });
23
24
  }
24
- return _jsx(AssistantMessage, { content: message.content, toolCalls: message.toolCalls, mode: mode, model: model });
25
+ return _jsx(AssistantMessage, { content: message.content, toolCalls: message.toolCalls, mode: mode, model: model, tokens: message.tokens });
25
26
  });
26
27
  //# sourceMappingURL=ChatMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.js","sourceRoot":"","sources":["../../../src/tui/components/ChatMessage.tsx"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAgBpC;;;;;GAKG;AACH,SAAS,WAAW,CAAC,EAAE,OAAO,EAAuB;IACnD,OAAO,CACL,KAAC,GAAG,IACF,YAAY,EAAE,CAAC,EACf,UAAU,QACV,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,WAAW,EAAC,MAAM,EAClB,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,YAEf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,YAAG,OAAO,GAAQ,GACrC,CACP,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAkF;IAC3I,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aACxD,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACrC,KAAC,QAAQ,IAAS,IAAI,EAAE,EAAE,IAAX,CAAC,CAAc,CAC/B,CAAC,EACD,OAAO,IAAI,CACV,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,wBAAK,IAAI,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAQ,EACpF,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,GAAI,IAC1B,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAS;IACxF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAAC;IACnD,CAAC;IACD,OAAO,KAAC,gBAAgB,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAChH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ChatMessage.js","sourceRoot":"","sources":["../../../src/tui/components/ChatMessage.tsx"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAqB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAqBrE;;;;;GAKG;AACH,SAAS,WAAW,CAAC,EAAE,OAAO,EAAuB;IACnD,OAAO,CACL,MAAC,GAAG,IACF,YAAY,EAAE,CAAC,EACf,UAAU,QACV,eAAe,EAAE,KAAK,CAAC,MAAM,EAC7B,WAAW,EAAC,MAAM,EAClB,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,aAEf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,YAAG,OAAO,GAAQ,EACzC,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,oBAAM,cAAc,CAAC,OAAO,CAAC,SAAS,IAC9D,CACP,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAmG;IACpK,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aACxD,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACrC,KAAC,QAAQ,IAAS,IAAI,EAAE,EAAE,IAAX,CAAC,CAAc,CAC/B,CAAC,EACD,OAAO,IAAI,CACV,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,wBACvB,IAAI,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAC7C,MAAM,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IACvC,EACP,KAAC,QAAQ,IAAC,OAAO,EAAE,OAAO,GAAI,IAC1B,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAS;IACxF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAI,CAAC;IACnD,CAAC;IACD,OAAO,KAAC,gBAAgB,IAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAI,CAAC;AACxI,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModelSettings.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelSettings.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAK9C,UAAU,KAAK;IACb,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,qBAiL3D"}
1
+ {"version":3,"file":"ModelSettings.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelSettings.tsx"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAK9C,UAAU,KAAK;IACb,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,qBAmM3D"}