@deepwhale/coding-agent 1.0.1 → 1.0.9
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/bin/deepwhale.js +69 -4
- package/dist/agent/session-adapter.d.ts.map +1 -1
- package/dist/agent/session-adapter.js +28 -3
- package/dist/agent/session-adapter.js.map +1 -1
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +12 -1
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/llm-factory.d.ts +3 -0
- package/dist/llm-factory.d.ts.map +1 -1
- package/dist/llm-factory.js +26 -4
- package/dist/llm-factory.js.map +1 -1
- package/dist/modes/tui.d.ts +58 -0
- package/dist/modes/tui.d.ts.map +1 -1
- package/dist/modes/tui.js +396 -24
- package/dist/modes/tui.js.map +1 -1
- package/dist/policy/index.d.ts +17 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +16 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/repl.d.ts +30 -2
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +65 -19
- package/dist/repl.js.map +1 -1
- package/dist/tui-ink-bundle.js +38584 -0
- package/package.json +2 -2
package/dist/modes/tui.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TUI 模式 — Sprint 1c-revive-4-D-20.3 P0-B (2026-06-05) v1.0 capability completion
|
|
3
3
|
*
|
|
4
|
+
* @deprecated LEGACY — Sprint 1c-revive-2-D-24.3 (2026-06-06) v1.0.9:
|
|
5
|
+
* 1.0.9+ `deepwhale tui` mode 走 Ink 容器 (@deepwhale/tui-ink 1.0.9 bundle).
|
|
6
|
+
* 本文件保留仅作 source-install dev 路径保底, 不再是 default path.
|
|
7
|
+
* - bin/deepwhale.js 'tui' case → runTuiInkMode (D-24.3 dispatch)
|
|
8
|
+
* - 跟 D-24.1 §6 红线 1 一致: legacy 0 删, fallback 兜底
|
|
9
|
+
* - 现有 979 行 tui-smoke.test.ts 0 改动, 行为在 readline 容器仍验过
|
|
10
|
+
*
|
|
11
|
+
* 业务逻辑 0 重写: D-22 / D-23.1 / D-23.2 业务 1:1 搬到 tui-ink/, 跟本文件同形态.
|
|
12
|
+
* 不再维护 (sprint 1.1+): 计划完全删除本文件, 但保留 0 改动作 fallback.
|
|
13
|
+
*
|
|
14
|
+
* ---- 下方为 v1.0.0 - v1.0.8 readline 容器实现 ----
|
|
15
|
+
*
|
|
4
16
|
* Minimal ANSI TUI. **不**装新依赖 (无 Ink), 用 node:readline + ANSI 转义码.
|
|
5
17
|
*
|
|
6
18
|
* 复用红线 (D-20.3 P0-B 拍板):
|
|
@@ -32,6 +44,9 @@
|
|
|
32
44
|
*/
|
|
33
45
|
import { createInterface } from 'node:readline';
|
|
34
46
|
import { stdin, stdout, stderr } from 'node:process';
|
|
47
|
+
import { homedir } from 'node:os';
|
|
48
|
+
import { mkdirSync, readFileSync, appendFileSync } from 'node:fs';
|
|
49
|
+
import { join, dirname } from 'node:path';
|
|
35
50
|
import { SessionReader, SessionWriter } from '@deepwhale/core';
|
|
36
51
|
import { isToolLoopError, loadSession, persistToolLoopSteps, runToolLoop, } from '../agent/index.js';
|
|
37
52
|
import { createDefaultRegistry } from '../tools/registry.js';
|
|
@@ -57,9 +72,310 @@ const ANSI = {
|
|
|
57
72
|
};
|
|
58
73
|
/** 检测 TTY (跟 REPL 一样, 非 TTY 退回无色输出, 让 test 不依赖 ANSI) */
|
|
59
74
|
const isTty = () => Boolean(stdout.isTTY);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
75
|
+
export const THEMES = {
|
|
76
|
+
default: {
|
|
77
|
+
header: ANSI.bold,
|
|
78
|
+
model: ANSI.cyan + ANSI.bold,
|
|
79
|
+
divider: ANSI.dim,
|
|
80
|
+
prompt: ANSI.bold,
|
|
81
|
+
error: ANSI.red,
|
|
82
|
+
success: ANSI.green,
|
|
83
|
+
toolName: ANSI.magenta + ANSI.bold,
|
|
84
|
+
},
|
|
85
|
+
solarized: {
|
|
86
|
+
// 暖冷对比: divider yellow, model blue, prompt bold, error red, success green
|
|
87
|
+
header: ANSI.yellow + ANSI.bold,
|
|
88
|
+
model: ANSI.blue + ANSI.bold,
|
|
89
|
+
divider: ANSI.yellow,
|
|
90
|
+
prompt: ANSI.bold,
|
|
91
|
+
error: ANSI.red,
|
|
92
|
+
success: ANSI.green,
|
|
93
|
+
toolName: ANSI.magenta + ANSI.bold, // solarized 仍 magenta 突出 tool
|
|
94
|
+
},
|
|
95
|
+
monochrome: {
|
|
96
|
+
// 全黑白, 区分靠 dim/bold, 不刺眼
|
|
97
|
+
header: ANSI.bold,
|
|
98
|
+
model: ANSI.bold,
|
|
99
|
+
divider: ANSI.dim,
|
|
100
|
+
prompt: ANSI.bold,
|
|
101
|
+
error: ANSI.dim + ANSI.bold, // monochrome 无红, 仍用 dim+bold 强调错误
|
|
102
|
+
success: ANSI.bold,
|
|
103
|
+
toolName: ANSI.dim + ANSI.bold, // monochrome tool name 用 dim+bold
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const VALID_THEME_NAMES = new Set(['default', 'solarized', 'monochrome']);
|
|
107
|
+
/**
|
|
108
|
+
* 解析 theme 来源 (env > 默认), 找不到或 invalid 时退化到 'default' + stderr warning.
|
|
109
|
+
* 不抛: 启动期不阻塞, 跟 env-gate 风格一致.
|
|
110
|
+
*/
|
|
111
|
+
export function resolveTuiTheme(themeArg) {
|
|
112
|
+
const fromArg = themeArg ?? process.env.DEEPWHALE_TUI_THEME;
|
|
113
|
+
if (fromArg === undefined || fromArg === '')
|
|
114
|
+
return 'default';
|
|
115
|
+
if (VALID_THEME_NAMES.has(fromArg))
|
|
116
|
+
return fromArg;
|
|
117
|
+
// invalid: stderr 提醒, 退化
|
|
118
|
+
stderr.write(`warning: unknown TUI theme '${fromArg}', falling back to 'default' (valid: ${[...VALID_THEME_NAMES].join(', ')})\n`);
|
|
119
|
+
return 'default';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 染色 wrapper (D-23.1 改签名) — 用 role 查当前 theme.
|
|
123
|
+
* 非 TTY 时退化到原文, 让 CI/管道 log 不带 ANSI.
|
|
124
|
+
*/
|
|
125
|
+
function colorize(text, role, theme = THEMES.default) {
|
|
126
|
+
if (!isTty())
|
|
127
|
+
return text;
|
|
128
|
+
return `${theme[role]}${text}${ANSI.reset}`;
|
|
129
|
+
}
|
|
130
|
+
// ---- 视觉元素 (D-21.2 轻量升级, 2026-06-06) ----
|
|
131
|
+
// 复用红线 (D-20.3 P0-B): 不装新依赖 (无 Ink), 仍用 readline + ANSI.
|
|
132
|
+
// 新增仅 2 个 helper, 替换 header 1 处 + status bar 1 处. 不动 prompt / onChunk /
|
|
133
|
+
// confirm / session 路径.
|
|
134
|
+
/**
|
|
135
|
+
* 画一条横线分隔符, 宽度按 `width` 截 (默认终端列宽, fallback 80).
|
|
136
|
+
* 配色 dim + cyan 拼接, 非 TTY 退化到 `─` 重复, 让 CI/管道 log 也可读.
|
|
137
|
+
*/
|
|
138
|
+
function horizontalRule(width, theme = THEMES.default) {
|
|
139
|
+
const cols = width ?? (stdout.columns && stdout.columns > 20 ? stdout.columns : 80);
|
|
140
|
+
const w = Math.max(20, Math.min(cols - 4, 100));
|
|
141
|
+
const line = '─'.repeat(w);
|
|
142
|
+
return colorize(' ' + line, 'divider', theme);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 格式化状态栏 — D-21.2 升级:
|
|
146
|
+
* - 复用 formatUsageStatus 的 4 字段 (model / in / cached / out / cost)
|
|
147
|
+
* - 加分隔线 + 颜色 (key: cyan, value: 黄色 token, 灰色 cost)
|
|
148
|
+
* - 改成 1 行, 终端窄时(< 60 列) 截断不溢出
|
|
149
|
+
* - 非 TTY 退化到纯文本 (跟现状一样, 不破坏 test)
|
|
150
|
+
*
|
|
151
|
+
* @param usage - formatUsageStatus 返回的原始行, 已是 `tokens X · cached Y · out Z · cost $W` 形态
|
|
152
|
+
* @param model - 模型名, 走 formatUsageStatus 已含, 这里再拼前面 banner 用 cyan 加粗
|
|
153
|
+
*/
|
|
154
|
+
function formatTuiStatusBar(usage, model, theme = THEMES.default) {
|
|
155
|
+
if (usage === null) {
|
|
156
|
+
return colorize(` ${model} · (no usage)`, 'divider', theme);
|
|
157
|
+
}
|
|
158
|
+
// formatUsageStatus 输出形如 "tokens 1.2k · cached 80% · out 200 · cost $0.0012"
|
|
159
|
+
// 我们把 model 提到前面 + 加色 + 末尾补分隔线
|
|
160
|
+
const bar = `${model} · ${usage}`;
|
|
161
|
+
// 终端窄时: 简单截断, 不做折行 (readline prompt 单行假设)
|
|
162
|
+
const cols = stdout.columns && stdout.columns > 20 ? stdout.columns : 80;
|
|
163
|
+
const max = Math.max(40, cols - 4);
|
|
164
|
+
const text = bar.length > max ? bar.slice(0, max - 1) + '…' : bar;
|
|
165
|
+
// 颜色: model 走 model role (theme 决定), usage 走 divider (跟 horizontalRule 一致)
|
|
166
|
+
return colorize(' ' + text, 'divider', theme);
|
|
167
|
+
}
|
|
168
|
+
// ---- D-23.2 语法高亮 (2026-06-06) ----
|
|
169
|
+
//
|
|
170
|
+
// 用户拍板 B: onChunk 来的 assistant stream 染色 (不染 readline input, 染 cursor 会乱).
|
|
171
|
+
// 4 类:
|
|
172
|
+
// 1. 工具名 (BashTool / ReadFileTool / WriteFileTool / EditTool / GlobTool / GrepTool) → toolName role
|
|
173
|
+
// 2. 数字 (整数 / 小数 / 百分号 / 倍数 / 货币) → success role
|
|
174
|
+
// 3. 文件路径 (./rel / /abs / node_modules/...) → model role
|
|
175
|
+
// 4. 其它 → 原样 (不染)
|
|
176
|
+
//
|
|
177
|
+
// 算法: 一次正则扫, 用 split-keep-separator 形式拼回原顺序. 非 TTY 退化到原 text (跟 colorize 一致).
|
|
178
|
+
//
|
|
179
|
+
// 风险: chunk content 是一次 fragment (e.g. "Hello, I "), 正则 match 走贪婪, 实际 chunk 长 50 chars 量级 OK.
|
|
180
|
+
// 跟 Fish / Starship prompt 染色同形态. 不动 readline input 路径.
|
|
181
|
+
/** 工具名白名单 (跟 registry.createDefaultRegistry 同步, 加新 tool 必加这里) */
|
|
182
|
+
const TOOL_NAME_RE = /\b(BashTool|ReadFileTool|WriteFileTool|EditTool|GlobTool|GrepTool|ListDirectoryTool|FileReadTool|FileWriteTool)\b/g;
|
|
183
|
+
/** 数字 (整数 / 小数 / 百分号 / 倍数 / 货币 / + 后缀 e.g. 100+) */
|
|
184
|
+
const NUMBER_RE = /(\$?\d+(?:\.\d+)?(?:\+|%|x|ms|s|kb|mb|k|m|gb)?)/g;
|
|
185
|
+
/** 文件路径 (./rel, /abs, 含 /) */
|
|
186
|
+
const PATH_RE = /((?:\.{1,2}\/|\/)[^\s,;:'"`]+)/g;
|
|
187
|
+
/**
|
|
188
|
+
* 语法高亮 chunk content. 非 TTY 退化到原 text (跟 colorize 行为一致, 跟 CI/管道 log 兼容).
|
|
189
|
+
*
|
|
190
|
+
* @param text - 单 chunk 文本 fragment
|
|
191
|
+
* @param theme - 当前 theme (从 runTuiMode 闭包传入)
|
|
192
|
+
* @param forceColor - D-23.2 测试 hook: 强制当 TTY (非默认) 用于 unit test 验证染色字节.
|
|
193
|
+
* 生产路径 (runTuiMode) 不传, 走 isTty() 自动判断.
|
|
194
|
+
* @returns 染色后文本 (含 ANSI escape) 或原 text (非 TTY)
|
|
195
|
+
*/
|
|
196
|
+
export function highlightChunk(text, theme = THEMES.default, forceColor) {
|
|
197
|
+
if (!forceColor && !isTty())
|
|
198
|
+
return text;
|
|
199
|
+
if (text.length === 0)
|
|
200
|
+
return text;
|
|
201
|
+
// 用 1 个 split-keep 数组, 按出现顺序拼
|
|
202
|
+
// 简化: 用单个正则 union, 优先匹配顺序是 TOOL_NAME > PATH > NUMBER (用 capturing group).
|
|
203
|
+
// 但 4 类 union 互相覆盖 (path 含数字, 工具名可能跟 path 相邻), 改用"先标记后还原"算法:
|
|
204
|
+
// 1. 扫一遍, 收集 [start, end, role] 区间 (按优先级 tool > path > number)
|
|
205
|
+
// 2. 按顺序拼 (区间内用 theme 染色, 区间外原文)
|
|
206
|
+
// 这样避免 union 正则优先级错乱.
|
|
207
|
+
const ranges = [];
|
|
208
|
+
// 1) tool name (优先级最高, 因为是 word boundary, 不跟 path 重叠)
|
|
209
|
+
for (const m of text.matchAll(TOOL_NAME_RE)) {
|
|
210
|
+
if (m.index === undefined)
|
|
211
|
+
continue;
|
|
212
|
+
ranges.push({ start: m.index, end: m.index + m[0].length, role: 'toolName' });
|
|
213
|
+
}
|
|
214
|
+
// 2) path (跳过已被 tool 覆盖的区间)
|
|
215
|
+
for (const m of text.matchAll(PATH_RE)) {
|
|
216
|
+
if (m.index === undefined)
|
|
217
|
+
continue;
|
|
218
|
+
const start = m.index;
|
|
219
|
+
const end = m.index + m[0].length;
|
|
220
|
+
if (ranges.some((r) => start >= r.start && end <= r.end))
|
|
221
|
+
continue; // 在 tool 内, 跳过
|
|
222
|
+
ranges.push({ start, end, role: 'model' });
|
|
223
|
+
}
|
|
224
|
+
// 3) number (跳过已被 tool/path 覆盖)
|
|
225
|
+
for (const m of text.matchAll(NUMBER_RE)) {
|
|
226
|
+
if (m.index === undefined)
|
|
227
|
+
continue;
|
|
228
|
+
const start = m.index;
|
|
229
|
+
const end = m.index + m[0].length;
|
|
230
|
+
if (ranges.some((r) => start >= r.start && end <= r.end))
|
|
231
|
+
continue;
|
|
232
|
+
ranges.push({ start, end, role: 'success' });
|
|
233
|
+
}
|
|
234
|
+
if (ranges.length === 0)
|
|
235
|
+
return text;
|
|
236
|
+
// 按 start 排序, 拼回
|
|
237
|
+
ranges.sort((a, b) => a.start - b.start);
|
|
238
|
+
const parts = [];
|
|
239
|
+
let cursor = 0;
|
|
240
|
+
for (const r of ranges) {
|
|
241
|
+
if (r.start > cursor)
|
|
242
|
+
parts.push(text.slice(cursor, r.start));
|
|
243
|
+
parts.push(colorize(text.slice(r.start, r.end), r.role, theme));
|
|
244
|
+
cursor = r.end;
|
|
245
|
+
}
|
|
246
|
+
if (cursor < text.length)
|
|
247
|
+
parts.push(text.slice(cursor));
|
|
248
|
+
return parts.join('');
|
|
249
|
+
}
|
|
250
|
+
// ---- D-22.1 命令历史持久化 (2026-06-06) ----
|
|
251
|
+
//
|
|
252
|
+
// 复用红线 (D-20.3 P0-B): TUI-only feature, 不动 REPL/print mode.
|
|
253
|
+
// 复用红线 (D-19 复用 confirm controller): 历史加载在 runTuiMode 启动期, confirm 期间不动 history.
|
|
254
|
+
//
|
|
255
|
+
// 存储: ~/.deepwhale/tui-history (JSONL, 每行 1 条 raw prompt, 0o600 权限, max 1000 条 LRU).
|
|
256
|
+
// readline history 数组语义: 最新一条在尾部 (所以 load 时反序, append 时 push 后写尾).
|
|
257
|
+
const TUI_HISTORY_MAX = 1000;
|
|
258
|
+
function tuiHistoryPath() {
|
|
259
|
+
return join(homedir(), '.deepwhale', 'tui-history');
|
|
260
|
+
}
|
|
261
|
+
function tuiHistoryLoad() {
|
|
262
|
+
const p = tuiHistoryPath();
|
|
263
|
+
try {
|
|
264
|
+
const text = readFileSync(p, 'utf-8');
|
|
265
|
+
// JSONL: 1 行 = 1 个对象 { ts, line }
|
|
266
|
+
const lines = text.split('\n').filter((l) => l.trim().length > 0);
|
|
267
|
+
const out = [];
|
|
268
|
+
for (const l of lines) {
|
|
269
|
+
try {
|
|
270
|
+
const obj = JSON.parse(l);
|
|
271
|
+
if (typeof obj.line === 'string' && obj.line.length > 0) {
|
|
272
|
+
out.push(obj.line);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// 跳过坏行, 不破坏整个文件
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// 保留最新 1000 条 (LRU 截断)
|
|
280
|
+
if (out.length > TUI_HISTORY_MAX) {
|
|
281
|
+
out.splice(0, out.length - TUI_HISTORY_MAX);
|
|
282
|
+
}
|
|
283
|
+
return out;
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// 文件不存在 / 权限错 → 返空 (不抛, 不阻塞启动)
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
function tuiHistoryAppend(line) {
|
|
291
|
+
// 过滤空行 + 内建命令 (跟其它 shell history 一样, 跟 token 浪费)
|
|
292
|
+
if (line.length === 0)
|
|
293
|
+
return;
|
|
294
|
+
if (line.startsWith('/'))
|
|
295
|
+
return; // /help /verify /exit 不入历史
|
|
296
|
+
if (line === 'q' || line === 'exit' || line === 'quit')
|
|
297
|
+
return;
|
|
298
|
+
const p = tuiHistoryPath();
|
|
299
|
+
try {
|
|
300
|
+
// 0o700 权限父目录 + 0o600 文件 (跟 ~/.bash_history 一样, 仅用户可读)
|
|
301
|
+
mkdirSync(dirname(p), { mode: 0o700, recursive: true });
|
|
302
|
+
const entry = JSON.stringify({ ts: Date.now(), line }) + '\n';
|
|
303
|
+
appendFileSync(p, entry, { mode: 0o600 });
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// best-effort, 不阻塞 turn 完成
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// 暴露 tuiHistoryAppend 供测试用 (D-22.1 verification)
|
|
310
|
+
export { tuiHistoryAppend, tuiHistoryLoad, tuiHistoryPath, TUI_HISTORY_MAX };
|
|
311
|
+
// ---- D-22.2 流式 token spinner (2026-06-06) ----
|
|
312
|
+
//
|
|
313
|
+
// 5 帧: ⠋ ⠙ ⠹ ⠸ ⠼, 80ms / 帧. 走 \r carriage return + \x1b[K clear-to-end-of-line.
|
|
314
|
+
// Windows 兼容: cursorTo(0) + clearLine(1) 兜底 (Win10/11 终端对 \r 也支持).
|
|
315
|
+
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼'];
|
|
316
|
+
const SPINNER_INTERVAL_MS = 80;
|
|
317
|
+
const SPINNER_LABEL = 'thinking…';
|
|
318
|
+
class Spinner {
|
|
319
|
+
timer = null;
|
|
320
|
+
frame = 0;
|
|
321
|
+
active = false;
|
|
322
|
+
start(stream = stdout) {
|
|
323
|
+
if (this.active)
|
|
324
|
+
return;
|
|
325
|
+
if (!isTty())
|
|
326
|
+
return; // 非 TTY 不转 (跟 colorize 一致, 避免管道/重定向被转)
|
|
327
|
+
this.active = true;
|
|
328
|
+
this.frame = 0;
|
|
329
|
+
this.render(stream);
|
|
330
|
+
this.timer = setInterval(() => {
|
|
331
|
+
this.frame = (this.frame + 1) % SPINNER_FRAMES.length;
|
|
332
|
+
this.render(stream);
|
|
333
|
+
}, SPINNER_INTERVAL_MS);
|
|
334
|
+
}
|
|
335
|
+
stop(stream = stdout) {
|
|
336
|
+
if (!this.active)
|
|
337
|
+
return;
|
|
338
|
+
this.active = false;
|
|
339
|
+
if (this.timer) {
|
|
340
|
+
clearInterval(this.timer);
|
|
341
|
+
this.timer = null;
|
|
342
|
+
}
|
|
343
|
+
// 清除当前行 (覆盖 spinner 字符)
|
|
344
|
+
// Windows 兼容: cursorTo(0) + clearLine(1) 是 TTY 行为, stdout 在 isTTY 时有这俩方法.
|
|
345
|
+
// 非 TTY 走空格 + \r 兜底.
|
|
346
|
+
const ttyStream = stream;
|
|
347
|
+
if (typeof ttyStream.cursorTo === 'function' && typeof ttyStream.clearLine === 'function') {
|
|
348
|
+
try {
|
|
349
|
+
ttyStream.cursorTo(0);
|
|
350
|
+
ttyStream.clearLine(1);
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
stream.write('\r' + ' '.repeat(SPINNER_LABEL.length + 4) + '\r');
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
stream.write('\r' + ' '.repeat(SPINNER_LABEL.length + 4) + '\r');
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
render(stream) {
|
|
361
|
+
const text = `${SPINNER_FRAMES[this.frame]} ${SPINNER_LABEL}`;
|
|
362
|
+
// \r 回行首, [K 清到行尾
|
|
363
|
+
stream.write(`\r${text}\x1b[K`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
// 暴露 Spinner 类供测试用 (D-22.2 verification)
|
|
367
|
+
export { Spinner, SPINNER_FRAMES, SPINNER_INTERVAL_MS, SPINNER_LABEL };
|
|
368
|
+
// ---- D-22.3 Multi-line input (2026-06-06) ----
|
|
369
|
+
//
|
|
370
|
+
// Hermes 风格: `\` 续行 + `\\` 转义. readline 维持 terminal: true 拿 ↑↓ history.
|
|
371
|
+
// 续行机制: 维护 `multiLineBuffer` 状态, 收到 `\` 结尾行不喂给 turn, 下次行追加.
|
|
372
|
+
// 全局单例 (TUI 单 stream), 在 runTuiMode 闭包内状态化.
|
|
373
|
+
function isContinuationLine(line) {
|
|
374
|
+
return line.endsWith('\\') && !line.endsWith('\\\\');
|
|
375
|
+
}
|
|
376
|
+
function joinContinuation(lines) {
|
|
377
|
+
// ["line1\\", "line2\\", "line3"] → "line1\nline2\nline3"
|
|
378
|
+
return lines.map((l) => l.replace(/\\$/, '')).join('\n');
|
|
63
379
|
}
|
|
64
380
|
// ---- TUI 主入口 ----
|
|
65
381
|
export async function runTuiMode(options = {}) {
|
|
@@ -67,6 +383,10 @@ export async function runTuiMode(options = {}) {
|
|
|
67
383
|
const err = options.errorOutput ?? stderr;
|
|
68
384
|
const enableToolLoop = options.enableToolLoop ?? true;
|
|
69
385
|
const sessionPath = options.sessionPath;
|
|
386
|
+
// D-23.1 (2026-06-06): 解析 theme. options.theme 优先 > DEEPWHALE_TUI_THEME env > 'default'.
|
|
387
|
+
// 解析里含 invalid → stderr warning + 退化, 不抛 (跟 env-gate 风格一致).
|
|
388
|
+
const themeName = resolveTuiTheme(options.theme);
|
|
389
|
+
const theme = THEMES[themeName];
|
|
70
390
|
// sandbox env 解析 (跟 print mode / REPL 一致)
|
|
71
391
|
const sandboxRunner = resolveSandboxRunnerFromEnv({ sandboxRoot: process.cwd() });
|
|
72
392
|
const policyYes = options.yes ?? false;
|
|
@@ -111,7 +431,7 @@ export async function runTuiMode(options = {}) {
|
|
|
111
431
|
const loaded = await loadSession(reader);
|
|
112
432
|
workingMessages = [...loaded.messages];
|
|
113
433
|
if (workingMessages.length > 0) {
|
|
114
|
-
out.write(colorize(` ${loaded.messages.length} messages resumed from session\n`,
|
|
434
|
+
out.write(colorize(` ${loaded.messages.length} messages resumed from session\n`, 'divider', theme) + '\n');
|
|
115
435
|
}
|
|
116
436
|
}
|
|
117
437
|
catch (e) {
|
|
@@ -126,31 +446,47 @@ export async function runTuiMode(options = {}) {
|
|
|
126
446
|
// 显式 silently no-op (minimal TUI 暂不接 compaction, 避免跟 P0 范围扩大).
|
|
127
447
|
// 注: print mode 抛 warning (D-6 拍板), TUI 不抛 (minimal scope, 留扩展点).
|
|
128
448
|
}
|
|
129
|
-
// 顶部 header
|
|
449
|
+
// 顶部 header — D-21.2 轻量升级: 横线分隔 + banner
|
|
130
450
|
const initialClientState = tryCreateClient();
|
|
131
451
|
const modelName = initialClientState.client?.model ?? 'not-configured';
|
|
132
452
|
out.write('\n');
|
|
133
|
-
out.write(
|
|
134
|
-
out.write(colorize('
|
|
135
|
-
|
|
453
|
+
out.write(horizontalRule(undefined, theme) + '\n');
|
|
454
|
+
out.write(colorize(' deepwhale tui ', 'header', theme) +
|
|
455
|
+
colorize(modelName, 'model', theme) +
|
|
456
|
+
colorize(' · type a prompt, /help, /verify, /exit (or q)\n', 'divider', theme));
|
|
457
|
+
out.write(horizontalRule(undefined, theme) + '\n\n');
|
|
136
458
|
if (initialClientState.error) {
|
|
137
459
|
err.write(`warning: API key not set, chat will fail until DEEPSEEK_API_KEY or ANTHROPIC_AUTH_TOKEN is set.\n`);
|
|
138
460
|
}
|
|
139
|
-
// readline (跟 REPL
|
|
461
|
+
// readline (跟 REPL 同形态)
|
|
462
|
+
// D-22 (2026-06-06) 拍板: terminal: true 拿 ↑↓ history (D-22.1) + cursor (multi-line D-22.3).
|
|
463
|
+
// 复用红线: SIGINT 仍走 process.on('SIGINT', onSigint) (D-19 P2-Ctrl+C), readline 不接管
|
|
464
|
+
// (它 terminal mode 默认会按 Ctrl+C 抛 'SIGINT' 事件, 我们的 onSigint 仍 process 级别接收).
|
|
140
465
|
const rl = createInterface({
|
|
141
466
|
input: options.input ?? stdin,
|
|
142
|
-
terminal:
|
|
467
|
+
terminal: true,
|
|
143
468
|
output: out,
|
|
144
469
|
});
|
|
470
|
+
// D-22.1: 加载历史到 readline (从老到新, 跟 readline 内部 history 数组语义一致)
|
|
471
|
+
// 注: Node 18+ readline 实例有 `.history: string[]` 字段, 但官方 .d.ts 没声明,
|
|
472
|
+
// 用 any cast 兜底.
|
|
473
|
+
const rlAny = rl;
|
|
474
|
+
rlAny.history = tuiHistoryLoad();
|
|
145
475
|
return new Promise((resolve) => {
|
|
146
476
|
let exiting = false;
|
|
147
477
|
let turnInFlight = false;
|
|
148
478
|
let pendingExit = false;
|
|
479
|
+
// D-22.3: multi-line input buffer (Hermes 风格 `\ 续行 + \\ 转义)
|
|
480
|
+
const multiLineBuffer = [];
|
|
481
|
+
// D-22.2: 流式 token spinner (assistant stream 期间)
|
|
482
|
+
const spinner = new Spinner();
|
|
149
483
|
const finish = async (code) => {
|
|
150
484
|
if (exiting)
|
|
151
485
|
return;
|
|
152
486
|
exiting = true;
|
|
153
487
|
process.off('SIGINT', onSigint);
|
|
488
|
+
// D-22.2: 退出前停 spinner (兜底, 避免动画卡住 shell prompt)
|
|
489
|
+
spinner.stop(out);
|
|
154
490
|
rl.close();
|
|
155
491
|
if (writer) {
|
|
156
492
|
try {
|
|
@@ -160,7 +496,7 @@ export async function runTuiMode(options = {}) {
|
|
|
160
496
|
/* best-effort */
|
|
161
497
|
}
|
|
162
498
|
}
|
|
163
|
-
out.write('\n' + colorize(' Goodbye!\n',
|
|
499
|
+
out.write('\n' + colorize(' Goodbye!\n', 'divider', theme));
|
|
164
500
|
resolve(code);
|
|
165
501
|
};
|
|
166
502
|
// turn abort controller (D-19 P2-Ctrl+C 拍板)
|
|
@@ -175,11 +511,27 @@ export async function runTuiMode(options = {}) {
|
|
|
175
511
|
};
|
|
176
512
|
process.on('SIGINT', onSigint);
|
|
177
513
|
const prompt = () => {
|
|
178
|
-
out.write(colorize(' > ',
|
|
514
|
+
out.write(colorize(' > ', 'prompt', theme));
|
|
179
515
|
};
|
|
180
516
|
prompt();
|
|
181
517
|
rl.on('line', async (rawLine) => {
|
|
182
|
-
|
|
518
|
+
// D-22.3 (2026-06-06): Hermes 风格多行输入.
|
|
519
|
+
// - 末尾 `\` 续行 (不喂给 turn, 攒入 multiLineBuffer)
|
|
520
|
+
// - 末尾 `\\` (转义) 不当续行, 当字面 `\` 处理
|
|
521
|
+
// - 空行 + 末尾 `\` → 取消续行, 提交空 prompt
|
|
522
|
+
const isCont = isContinuationLine(rawLine);
|
|
523
|
+
if (isCont) {
|
|
524
|
+
multiLineBuffer.push(rawLine);
|
|
525
|
+
// 续行提示 (跟 shell 类似 `> `)
|
|
526
|
+
out.write(colorize(' … ', 'divider', theme));
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
// 收尾 (非续行), 把 buffer 最后一行 + 当前行合并
|
|
530
|
+
const assembled = multiLineBuffer.length > 0
|
|
531
|
+
? joinContinuation([...multiLineBuffer, rawLine])
|
|
532
|
+
: rawLine;
|
|
533
|
+
multiLineBuffer.length = 0;
|
|
534
|
+
const line = assembled.trim();
|
|
183
535
|
// D-19 拍板: confirm 期间 line 优先喂 confirm
|
|
184
536
|
if (confirmController.hasPending()) {
|
|
185
537
|
if (line === 'exit' || line === 'quit' || line === '/exit' || line === '/quit' || line === 'q') {
|
|
@@ -208,7 +560,7 @@ export async function runTuiMode(options = {}) {
|
|
|
208
560
|
out.write(colorize('\n Commands:\n' +
|
|
209
561
|
' /help show this help\n' +
|
|
210
562
|
' /verify run build/lint/typecheck/test (no LLM needed)\n' +
|
|
211
|
-
' /exit, /quit, q exit TUI\n\n',
|
|
563
|
+
' /exit, /quit, q exit TUI\n\n', 'divider', theme));
|
|
212
564
|
prompt();
|
|
213
565
|
return;
|
|
214
566
|
}
|
|
@@ -240,7 +592,7 @@ export async function runTuiMode(options = {}) {
|
|
|
240
592
|
}
|
|
241
593
|
// 队列守卫 (跟 REPL D-19.5 拍板)
|
|
242
594
|
if (turnInFlight) {
|
|
243
|
-
out.write(colorize(' (turn in flight, please wait)\n',
|
|
595
|
+
out.write(colorize(' (turn in flight, please wait)\n', 'divider', theme));
|
|
244
596
|
prompt();
|
|
245
597
|
return;
|
|
246
598
|
}
|
|
@@ -269,11 +621,16 @@ export async function runTuiMode(options = {}) {
|
|
|
269
621
|
out.write('\n'); // user 跟 assistant 间空行
|
|
270
622
|
let result;
|
|
271
623
|
if (enableToolLoop) {
|
|
624
|
+
// D-22.2 (2026-06-06): turn 启动立刻启 spinner, content 来了就停
|
|
625
|
+
spinner.start(out);
|
|
272
626
|
result = await runToolLoop(liveClient, turnMessages, {
|
|
273
627
|
registry: createDefaultRegistry({ sandboxRunner }),
|
|
274
628
|
onChunk: (chunk) => {
|
|
275
|
-
if (chunk.content)
|
|
276
|
-
|
|
629
|
+
if (chunk.content) {
|
|
630
|
+
spinner.stop(out);
|
|
631
|
+
// D-23.2 (2026-06-06): 语法高亮 assistant stream (tool 名 / 数字 / path 染色)
|
|
632
|
+
out.write(highlightChunk(chunk.content, theme));
|
|
633
|
+
}
|
|
277
634
|
},
|
|
278
635
|
...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),
|
|
279
636
|
policy: tuiPolicy,
|
|
@@ -290,10 +647,15 @@ export async function runTuiMode(options = {}) {
|
|
|
290
647
|
}
|
|
291
648
|
else {
|
|
292
649
|
// --no-tool-loop 直发
|
|
650
|
+
// D-22.2 (2026-06-06): spinner 启, content 来了停
|
|
651
|
+
spinner.start(out);
|
|
293
652
|
const streamResult = await liveClient.stream(turnMessages, {
|
|
294
653
|
onChunk: (chunk) => {
|
|
295
|
-
if (chunk.delta.content)
|
|
296
|
-
|
|
654
|
+
if (chunk.delta.content) {
|
|
655
|
+
spinner.stop(out);
|
|
656
|
+
// D-23.2 (2026-06-06): 语法高亮 --no-tool-loop 直发 stream
|
|
657
|
+
out.write(highlightChunk(chunk.delta.content, theme));
|
|
658
|
+
}
|
|
297
659
|
},
|
|
298
660
|
});
|
|
299
661
|
result = {
|
|
@@ -312,8 +674,8 @@ export async function runTuiMode(options = {}) {
|
|
|
312
674
|
// TUI 格式化: tool call / result (跟 print mode printStepSummary 同形态, 但加 ANSI)
|
|
313
675
|
for (const step of result.steps) {
|
|
314
676
|
if (step.kind === 'tool') {
|
|
315
|
-
const status = step.result.success ? colorize('✓',
|
|
316
|
-
out.write(`\n ${status} ${colorize(step.tool_call.name,
|
|
677
|
+
const status = step.result.success ? colorize('✓', 'success', theme) : colorize('✗', 'error', theme);
|
|
678
|
+
out.write(`\n ${status} ${colorize(step.tool_call.name, 'toolName', theme)} (${step.duration_ms}ms)\n`);
|
|
317
679
|
}
|
|
318
680
|
}
|
|
319
681
|
// 持久化
|
|
@@ -329,16 +691,20 @@ export async function runTuiMode(options = {}) {
|
|
|
329
691
|
workingMessages = [
|
|
330
692
|
...result.messages,
|
|
331
693
|
];
|
|
332
|
-
// 状态栏 (复用 formatUsageStatus, 4 字段)
|
|
694
|
+
// 状态栏 (复用 formatUsageStatus, 4 字段) — D-21.2 轻量升级: 上下加横线分隔
|
|
333
695
|
const usageLine = formatUsageStatus(result.final.usage);
|
|
334
696
|
if (usageLine !== null) {
|
|
335
|
-
out.write('\n' +
|
|
697
|
+
out.write('\n' + horizontalRule() + '\n');
|
|
698
|
+
out.write(formatTuiStatusBar(usageLine, modelName) + '\n');
|
|
699
|
+
out.write(horizontalRule() + '\n');
|
|
336
700
|
}
|
|
337
701
|
else {
|
|
338
|
-
out.write('\n');
|
|
702
|
+
out.write('\n' + horizontalRule() + '\n');
|
|
339
703
|
}
|
|
340
704
|
}
|
|
341
705
|
catch (e) {
|
|
706
|
+
// D-22.2: 异常时停 spinner (兜底)
|
|
707
|
+
spinner.stop(out);
|
|
342
708
|
if (isToolLoopError(e)) {
|
|
343
709
|
err.write(`\nerror: tool loop hit max steps (${e.steps})\n`);
|
|
344
710
|
}
|
|
@@ -347,6 +713,12 @@ export async function runTuiMode(options = {}) {
|
|
|
347
713
|
}
|
|
348
714
|
}
|
|
349
715
|
finally {
|
|
716
|
+
// D-22.2: turn 完 (正常/异常/abort) 停 spinner
|
|
717
|
+
spinner.stop(out);
|
|
718
|
+
// D-22.1: turn 完 (非空, 非内建命令) append 历史
|
|
719
|
+
// 注意: 续行合并后 assembled 才是真 prompt, 但历史里只存 trimmed 单行
|
|
720
|
+
// (跟 bash history 一致, 多行 prompt 存 \n 不易)
|
|
721
|
+
tuiHistoryAppend(assembled);
|
|
350
722
|
turnInFlight = false;
|
|
351
723
|
if (pendingExit) {
|
|
352
724
|
void finish(0);
|
package/dist/modes/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/modes/tui.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/modes/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deepwhale/coding-agent/policy — Tool call policy.
|
|
3
|
+
*
|
|
4
|
+
* Sprint 1c-revive-2-D-24.2 (2026-06-06): 新建 policy/index.ts 让顶层
|
|
5
|
+
* `export * from './policy/index.js'` 能 re-export (供 tui-ink 子包使用).
|
|
6
|
+
*
|
|
7
|
+
* 之前没有 index.ts — D-24.1 之前只有内部消费 (repl/print/rpc), 顶层不 export.
|
|
8
|
+
* D-24.2 tui-ink 走同样的 ToolPolicy 容器迁移, 需要顶层 import.
|
|
9
|
+
*
|
|
10
|
+
* 业务逻辑 0 重写: 单纯 barrel re-export, 跟其他 index.ts 一致.
|
|
11
|
+
*/
|
|
12
|
+
export type { ToolPolicy, PolicyDecision, PolicyToolCall, PolicyContext } from './types.js';
|
|
13
|
+
export { staticToolPolicy } from './static-rules.js';
|
|
14
|
+
export { evaluatePolicy } from './chain.js';
|
|
15
|
+
export { computeArgsDigest } from './args-digest.js';
|
|
16
|
+
export { sanitizeReason } from './sanitize-reason.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|