@ai-zen/cli 1.0.0-alpha.27 → 1.0.0-alpha.30
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/CHANGELOG.md +158 -0
- package/README.md +9 -6
- package/README.zh.md +9 -6
- package/dist/clipboard.d.ts +68 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +177 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config-editor.d.ts +17 -0
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +31 -0
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +53 -15
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -26
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +23 -20
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +46 -37
- package/dist/conversation-repository.js.map +1 -1
- package/dist/cwd-tracker-plugin.d.ts.map +1 -1
- package/dist/cwd-tracker-plugin.js +17 -6
- package/dist/cwd-tracker-plugin.js.map +1 -1
- package/dist/handoff-service.js.map +1 -1
- package/dist/i18n/en-wizard.d.ts.map +1 -1
- package/dist/i18n/en-wizard.js +9 -6
- package/dist/i18n/en-wizard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +13 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/preferences.d.ts +7 -4
- package/dist/i18n/preferences.d.ts.map +1 -1
- package/dist/i18n/preferences.js +15 -11
- package/dist/i18n/preferences.js.map +1 -1
- package/dist/i18n/zh-wizard.d.ts.map +1 -1
- package/dist/i18n/zh-wizard.js +9 -6
- package/dist/i18n/zh-wizard.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +13 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/sdk-log.d.ts +15 -3
- package/dist/sdk-log.d.ts.map +1 -1
- package/dist/sdk-log.js +29 -9
- package/dist/sdk-log.js.map +1 -1
- package/dist/session-pointer.d.ts.map +1 -1
- package/dist/session-pointer.js +10 -4
- package/dist/session-pointer.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/tui/chat-history.d.ts +29 -0
- package/dist/tui/chat-history.d.ts.map +1 -0
- package/dist/tui/chat-history.js +55 -0
- package/dist/tui/chat-history.js.map +1 -0
- package/dist/tui/chat-session.d.ts +31 -2
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +64 -9
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +65 -5
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +85 -13
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/detail.d.ts +6 -4
- package/dist/tui/config-wizard/detail.d.ts.map +1 -1
- package/dist/tui/config-wizard/detail.js +20 -14
- package/dist/tui/config-wizard/detail.js.map +1 -1
- package/dist/tui/config-wizard/engine.d.ts +1 -1
- package/dist/tui/config-wizard/engine.d.ts.map +1 -1
- package/dist/tui/config-wizard/engine.js +18 -6
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +1 -30
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/frame.js +1 -1
- package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/kv-editor.js +4 -0
- package/dist/tui/config-wizard/kv-editor.js.map +1 -1
- package/dist/tui/config-wizard/list.d.ts +3 -1
- package/dist/tui/config-wizard/list.d.ts.map +1 -1
- package/dist/tui/config-wizard/list.js +3 -4
- package/dist/tui/config-wizard/list.js.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts +8 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.js +7 -4
- package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
- package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-agents.js +25 -13
- package/dist/tui/config-wizard/step-agents.js.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.js +18 -15
- package/dist/tui/config-wizard/step-endpoints.js.map +1 -1
- package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-mcp.js +15 -9
- package/dist/tui/config-wizard/step-mcp.js.map +1 -1
- package/dist/tui/config-wizard/step-models.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-models.js +67 -27
- package/dist/tui/config-wizard/step-models.js.map +1 -1
- package/dist/tui/config-wizard/types.d.ts +12 -0
- package/dist/tui/config-wizard/types.d.ts.map +1 -1
- package/dist/tui/file-index.d.ts +38 -0
- package/dist/tui/file-index.d.ts.map +1 -0
- package/dist/tui/file-index.js +117 -0
- package/dist/tui/file-index.js.map +1 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +1 -1
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/key-debug.js.map +1 -1
- package/dist/tui/mention.d.ts +47 -0
- package/dist/tui/mention.d.ts.map +1 -0
- package/dist/tui/mention.js +152 -0
- package/dist/tui/mention.js.map +1 -0
- package/dist/tui/mouse.js.map +1 -1
- package/dist/tui/phase.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.d.ts +8 -0
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +60 -34
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +37 -0
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +238 -31
- package/dist/tui/screens/chat.js.map +1 -1
- package/dist/tui/screens/common-keys.js.map +1 -1
- package/dist/tui/screens/frame-buffer.d.ts.map +1 -1
- package/dist/tui/screens/frame-buffer.js.map +1 -1
- package/dist/tui/screens/index.d.ts +1 -1
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +1 -1
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input.d.ts +30 -1
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +39 -2
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +14 -0
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +22 -11
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts.map +1 -1
- package/dist/tui/screens/messages-view.js +6 -2
- package/dist/tui/screens/messages-view.js.map +1 -1
- package/dist/tui/screens/notice.d.ts.map +1 -1
- package/dist/tui/screens/notice.js.map +1 -1
- package/dist/tui/screens/overlays.js +1 -1
- package/dist/tui/screens/render.d.ts +1 -1
- package/dist/tui/screens/render.d.ts.map +1 -1
- package/dist/tui/screens/render.js +6 -2
- package/dist/tui/screens/render.js.map +1 -1
- package/dist/tui/screens/use-input-editing.d.ts +29 -4
- package/dist/tui/screens/use-input-editing.d.ts.map +1 -1
- package/dist/tui/screens/use-input-editing.js +42 -14
- package/dist/tui/screens/use-input-editing.js.map +1 -1
- package/dist/tui/screens/use-wizard-host.d.ts +12 -1
- package/dist/tui/screens/use-wizard-host.d.ts.map +1 -1
- package/dist/tui/screens/use-wizard-host.js +26 -7
- package/dist/tui/screens/use-wizard-host.js.map +1 -1
- package/dist/tui/status-segments.js.map +1 -1
- package/dist/tui/text.d.ts +7 -0
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +5 -1
- package/dist/tui/text.js.map +1 -1
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/token-rate.d.ts.map +1 -1
- package/dist/tui/token-rate.js.map +1 -1
- package/dist/user-content.d.ts +41 -0
- package/dist/user-content.d.ts.map +1 -0
- package/dist/user-content.js +37 -0
- package/dist/user-content.js.map +1 -0
- package/dist/version.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目文件索引 —— 给 `@` 补全提供一份「候选路径清单」,带缓存。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么 git 优先、`fs.glob` 兜底
|
|
5
|
+
*
|
|
6
|
+
* `git ls-files -co --exclude-standard` 一次同时拿到**已跟踪 + 未跟踪**,且**尊重 .gitignore**
|
|
7
|
+
* (本仓实测 166 条 / 约 30ms)。`fs.promises.glob` 更快(178 条 / 4ms)且不依赖外部进程,
|
|
8
|
+
* 但它不认 .gitignore、也不返回隐藏文件(实测 `.gitignore`、`.ai-zen/` 全丢),所以只当
|
|
9
|
+
* 「不在 git 仓库里」时的兜底。两者都不需要新增依赖:`fs.glob` 是 Node 22+ 内置的。
|
|
10
|
+
*
|
|
11
|
+
* ## 为什么缓存
|
|
12
|
+
*
|
|
13
|
+
* 索引只跟 cwd 有关:一次 `@` 补全里每敲一个键都要重新过滤一遍,不能每键都扫盘。
|
|
14
|
+
* 缓存 15s 后过期(新建的文件能被看到),`invalidateFileIndex()` 供测试与显式刷新。
|
|
15
|
+
*
|
|
16
|
+
* ## 上限
|
|
17
|
+
*
|
|
18
|
+
* 大仓 / `$HOME` 下扫描可能上万条:`MAX_ENTRIES` 封顶、`SCAN_TIMEOUT_MS` 超时即放弃,
|
|
19
|
+
* 拿到多少算多少 —— 补全失败远好过让输入框卡住。
|
|
20
|
+
*/
|
|
21
|
+
import { execFile } from "node:child_process";
|
|
22
|
+
import * as fsp from "node:fs/promises";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
/** 索引有效期:过期后下一次 `@` 重新扫 */
|
|
25
|
+
export const INDEX_TTL_MS = 15_000;
|
|
26
|
+
/** 扫描超时:到点就用手上已有的部分(git 子进程超时即失败 → 落回 fs.glob) */
|
|
27
|
+
export const SCAN_TIMEOUT_MS = 5_000;
|
|
28
|
+
/** 索引条数上限 */
|
|
29
|
+
export const MAX_ENTRIES = 20_000;
|
|
30
|
+
/**
|
|
31
|
+
* `fs.glob` 兜底时的排除项。
|
|
32
|
+
*
|
|
33
|
+
* `node_modules` / `.git` 不是「代码」;`dist` 是本仓的构建产物(已在 .gitignore 里,
|
|
34
|
+
* 走 git 时天然被排除,兜底路径要自己排除)。
|
|
35
|
+
*/
|
|
36
|
+
export const DEFAULT_EXCLUDES = ["**/node_modules/**", "**/.git/**", "**/dist/**"];
|
|
37
|
+
let cache = null;
|
|
38
|
+
/** 清空缓存(测试 / 用户切目录后想强制重扫时用) */
|
|
39
|
+
export function invalidateFileIndex() {
|
|
40
|
+
cache = null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 把 git 的文件清单补全成「文件 + 祖先目录」条目。
|
|
44
|
+
*
|
|
45
|
+
* git 只列文件,但补全也要能「钻目录」(`@src/tui/` → 继续列其下内容),
|
|
46
|
+
* 所以从每个文件的路径里反推出所有祖先目录。`Set` 去重,顺序上目录在前更好读。
|
|
47
|
+
*/
|
|
48
|
+
export function fromGitList(names) {
|
|
49
|
+
const dirs = new Set();
|
|
50
|
+
const files = [];
|
|
51
|
+
for (const raw of names) {
|
|
52
|
+
// git 在 Windows 上可能给反斜杠(core.autocrlf 场景),统一成 `/`:候选与插入都用 `/`
|
|
53
|
+
const file = raw.trim().replace(/\\/g, "/");
|
|
54
|
+
if (!file)
|
|
55
|
+
continue;
|
|
56
|
+
files.push(file);
|
|
57
|
+
let idx = file.lastIndexOf("/");
|
|
58
|
+
while (idx > 0) {
|
|
59
|
+
dirs.add(file.slice(0, idx));
|
|
60
|
+
idx = file.lastIndexOf("/", idx - 1);
|
|
61
|
+
}
|
|
62
|
+
if (files.length + dirs.size >= MAX_ENTRIES)
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
const entries = [];
|
|
66
|
+
for (const dir of dirs)
|
|
67
|
+
entries.push({ path: dir, dir: true });
|
|
68
|
+
for (const file of files)
|
|
69
|
+
entries.push({ path: file, dir: false });
|
|
70
|
+
return entries.slice(0, MAX_ENTRIES);
|
|
71
|
+
}
|
|
72
|
+
/** `git ls-files -co --exclude-standard`(路径相对 cwd);失败返回 `null` */
|
|
73
|
+
function gitList(cwd) {
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
execFile("git", ["ls-files", "-co", "--exclude-standard"], { cwd, timeout: SCAN_TIMEOUT_MS, maxBuffer: 64 * 1024 * 1024 }, (error, stdout) => resolve(error ? null : stdout.split("\n").filter(Boolean)));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** 非 git 目录的兜底:`fs.glob` 递归 + 排除表 */
|
|
79
|
+
async function globList(cwd) {
|
|
80
|
+
const entries = [];
|
|
81
|
+
for await (const dirent of fsp.glob("**/*", {
|
|
82
|
+
cwd,
|
|
83
|
+
exclude: DEFAULT_EXCLUDES,
|
|
84
|
+
withFileTypes: true,
|
|
85
|
+
})) {
|
|
86
|
+
const rel = path.relative(cwd, path.join(dirent.parentPath, dirent.name)).replace(/\\/g, "/");
|
|
87
|
+
if (!rel)
|
|
88
|
+
continue;
|
|
89
|
+
entries.push({ path: rel, dir: dirent.isDirectory() });
|
|
90
|
+
if (entries.length >= MAX_ENTRIES)
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 取当前项目(cwd)的候选路径,带 15s 缓存。
|
|
97
|
+
*
|
|
98
|
+
* 任何异常都收敛成空数组:补全挂了不该影响用户发消息。
|
|
99
|
+
*/
|
|
100
|
+
export async function listProjectPaths(cwd, deps = {}) {
|
|
101
|
+
const now = deps.now ?? Date.now;
|
|
102
|
+
if (cache && cache.cwd === cwd && now() - cache.at < INDEX_TTL_MS)
|
|
103
|
+
return cache.paths;
|
|
104
|
+
const readGit = deps.gitPaths ?? gitList;
|
|
105
|
+
const readGlob = deps.globPaths ?? globList;
|
|
106
|
+
let paths = [];
|
|
107
|
+
try {
|
|
108
|
+
const tracked = await readGit(cwd);
|
|
109
|
+
paths = tracked ? fromGitList(tracked) : await readGlob(cwd);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
paths = [];
|
|
113
|
+
}
|
|
114
|
+
cache = { cwd, paths, at: now() };
|
|
115
|
+
return paths;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=file-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-index.js","sourceRoot":"","sources":["../../src/tui/file-index.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqDH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqDH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;aACzB,WAAW;aACX,eAAe;aAGf,oBAAoB;aACpB,aAAa;iBAAI,IAAI,EAAE,UAAU;;CACzB,CAAC;AA8MX,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DvE"}
|
package/dist/tui/index.js
CHANGED
|
@@ -153,7 +153,7 @@ async function resumeLastSession() {
|
|
|
153
153
|
const pointer = await readLastSession(process.cwd());
|
|
154
154
|
if (!pointer)
|
|
155
155
|
return null;
|
|
156
|
-
const conversation = await conversationRepository.read(pointer.id);
|
|
156
|
+
const conversation = await conversationRepository().read(pointer.id);
|
|
157
157
|
if (!conversation)
|
|
158
158
|
return null;
|
|
159
159
|
// 模型由 Agent 定义决定(旧存档里的 modelId 一律忽略)
|
package/dist/tui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-debug.js","sourceRoot":"","sources":["../../src/tui/key-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;AAEpE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wBAAwB,CAAC;AAsBpF,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"key-debug.js","sourceRoot":"","sources":["../../src/tui/key-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;AAEpE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wBAAwB,CAAC;AAsBpF,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAClE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,GAAuB;IACrC,MAAM;IACN,MAAM;IACN,OAAO;IACP,SAAS;IACT,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,WAAW;IACX,QAAQ;CACT,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,GAAa,EAAE,GAAY;IACvE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,aAAa,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,KAAK,SAAS,GAAG,EAAE,CAAC;AAChF,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,KAA4B,CAAC;IACnD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,iBAAiB;QAAE,OAAO;IAC/B,IAAI,CAAC;QACH,cAAc,CAAC,cAAc,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,iBAAiB,IAAI,OAAO;QAAE,OAAO;IAC1C,OAAO,GAAG,IAAI,CAAC;IACf,WAAW,CAAC,aAAa,eAAe,EAAE,SAAS,cAAc,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,aAAa;AACb,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,GAAa;IACnD,IAAI,CAAC,iBAAiB;QAAE,OAAO;IAC/B,WAAW,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** 一次 `@` 补全的上下文 */
|
|
2
|
+
export interface Mention {
|
|
3
|
+
/** `@` 之后到**光标**之间的原文(不含 `@`)—— 即用户当前敲的查询串 */
|
|
4
|
+
query: string;
|
|
5
|
+
/** `@` 的字素簇索引 */
|
|
6
|
+
start: number;
|
|
7
|
+
/** token 结束位置(字素簇索引,不含):补全时替换 `[start, end)` */
|
|
8
|
+
end: number;
|
|
9
|
+
}
|
|
10
|
+
/** 索引里的一条候选路径 */
|
|
11
|
+
export interface PathEntry {
|
|
12
|
+
/** 相对 cwd 的路径(`/` 分隔,不带 `./` 前缀) */
|
|
13
|
+
path: string;
|
|
14
|
+
/** 是否目录 —— 决定补全后是否补一个 `/`,让用户可以继续往里钻 */
|
|
15
|
+
dir: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** 候选上限:再多也没人翻;同时给每次按键的内存过滤定个上界(10k 候选实测约 9ms) */
|
|
18
|
+
export declare const MENTION_LIMIT = 50;
|
|
19
|
+
/**
|
|
20
|
+
* 取出光标所在的 `@token`;光标不在 token 里(或不在 mention 语境里)返回 `null`。
|
|
21
|
+
*
|
|
22
|
+
* 纯扫描、无正则回溯:文本长度就是输入框长度,逐字素走一遍即可。
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractMention(text: string, cursor: number): Mention | null;
|
|
25
|
+
/** 补全要插入的文本:`@路径`,目录补一个 `/` 以便继续往下钻 */
|
|
26
|
+
export declare function mentionInsertText(path: string, dir: boolean): string;
|
|
27
|
+
/**
|
|
28
|
+
* 子序列打分(**越小越靠前**);不匹配返回 `null`。
|
|
29
|
+
*
|
|
30
|
+
* 依据实测(10k 条候选、每次按键):贪婪子序列 + 三种加权就够用 ——
|
|
31
|
+
* `tuicha` 能直达 `src/tui/screens/chat.tsx`,不必让用户逐段敲路径。
|
|
32
|
+
*
|
|
33
|
+
* 加权:
|
|
34
|
+
* · 跳跃惩罚:命中间隔越大越差(`t..u..i` 不如 `tui` 连续);
|
|
35
|
+
* · 连续命中奖励:连着的字符是同一段词;
|
|
36
|
+
* · **整体前缀** > **文件名前缀**:`src/tui/` 这种逐段输入要能压过散落命中;
|
|
37
|
+
* · 同分时浅的、短的优先:根目录文件比深埋的图标库更可能被点名。
|
|
38
|
+
*/
|
|
39
|
+
export declare function scorePath(query: string, path: string): number | null;
|
|
40
|
+
/**
|
|
41
|
+
* 过滤 + 排序,取前 `limit` 条。
|
|
42
|
+
*
|
|
43
|
+
* 每次按键都会全量扫一遍(候选只来自内存数组),因此这里不做任何渐进/缓存:
|
|
44
|
+
* 实测 10k 条最长 8.4ms,比一次渲染便宜。
|
|
45
|
+
*/
|
|
46
|
+
export declare function rankPaths(query: string, entries: readonly PathEntry[], limit?: number): PathEntry[];
|
|
47
|
+
//# sourceMappingURL=mention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.d.ts","sourceRoot":"","sources":["../../src/tui/mention.ts"],"names":[],"mappings":"AA6CA,oBAAoB;AACpB,MAAM,WAAW,OAAO;IACtB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,GAAG,EAAE,OAAO,CAAC;CACd;AAED,kDAAkD;AAClD,eAAO,MAAM,aAAa,KAAK,CAAC;AAMhC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA4B3E;AAED,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAEpE;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBpE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,KAAK,SAAgB,GACpB,SAAS,EAAE,CAQb"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@` 文件路径补全 —— 纯逻辑层:识别 token、给候选排序、算出要插入什么。
|
|
3
|
+
*
|
|
4
|
+
* ## 三层分工
|
|
5
|
+
*
|
|
6
|
+
* · `mention.ts`(本文件):无 IO、无 React,全是可单测的纯函数;
|
|
7
|
+
* · `file-index.ts`:扫描项目文件(git 优先 / `fs.glob` 兜底)并缓存;
|
|
8
|
+
* · `screens/chat.tsx`:只做「按键 → 调上面两者 → 落字」的接线。
|
|
9
|
+
*
|
|
10
|
+
* ## 为什么只插路径文本,不附带文件内容
|
|
11
|
+
*
|
|
12
|
+
* `@` 只把**相对路径**写进草稿,消息本身仍是普通文本,模型用 `read` 工具自己去读。
|
|
13
|
+
* 这样消息契约(core 的 `Message`)一点不动、插入可撤销、超大文件也不会把一条消息
|
|
14
|
+
* 撑成巨型 payload —— 代价是多一轮工具调用,这是刻意的取舍。
|
|
15
|
+
*
|
|
16
|
+
* ## 判据落在字符事实上
|
|
17
|
+
*
|
|
18
|
+
* 「光标是否处在一个 `@token` 里」只看**光标之前的原始字符**:从光标往回扫到空白 /
|
|
19
|
+
* 行首,途中遇到 `@` 且其**前一个字符**是行首、空白或分隔符才算 mention。于是:
|
|
20
|
+
*
|
|
21
|
+
* · `a@b.com` 不算(`@` 前是 `a`)—— 邮箱不会突然弹出文件列表;
|
|
22
|
+
* · `@src/tui` 算,query 为 `src/tui`;
|
|
23
|
+
* · 光标停在 token 中间(`@src|/foo.ts`)也算,且 `end` 会**向后吃掉整个 token**:
|
|
24
|
+
* 补全要替换的是整段,只替换到光标会留下半截残字。
|
|
25
|
+
*/
|
|
26
|
+
import { graphemes } from "./text.js";
|
|
27
|
+
/**
|
|
28
|
+
* `@` token 两侧的分隔符 —— 让 `(@src/x)` / `"@src/x"` / `@src/x,` 也能触发,
|
|
29
|
+
* 并且右端在 `)` 之前就收住(否则补全会把右括号一起替换掉)。
|
|
30
|
+
*
|
|
31
|
+
* 反向的代价是有意接受的:路径里出现这些字符(如 `a,b.txt`)时 token 会在那里截断,
|
|
32
|
+
* 属于极少数情况,且补全仍可手动补完。
|
|
33
|
+
*/
|
|
34
|
+
const BOUNDARY = new Set([
|
|
35
|
+
"(", ")", "[", "]", "{", "}", "<", ">",
|
|
36
|
+
'"', "'", "`", "“", "”", "‘", "’",
|
|
37
|
+
",", ",", ":", ":", ";", ";",
|
|
38
|
+
// 中文行文的标点:`@src/x。这里有问题` 里的 `。` 必须收住 token,否则补全会把
|
|
39
|
+
// 后面整句一起替换掉,用户写句子时菜单也会一直弹着不走
|
|
40
|
+
"。", "、", "!", "?", "(", ")", "《", "》",
|
|
41
|
+
"【", "】", "〔", "〕", "「", "」", "『", "』",
|
|
42
|
+
"…", "—", "~",
|
|
43
|
+
]);
|
|
44
|
+
/** 候选上限:再多也没人翻;同时给每次按键的内存过滤定个上界(10k 候选实测约 9ms) */
|
|
45
|
+
export const MENTION_LIMIT = 50;
|
|
46
|
+
function isSpace(ch) {
|
|
47
|
+
return ch !== "" && /\s/.test(ch);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 取出光标所在的 `@token`;光标不在 token 里(或不在 mention 语境里)返回 `null`。
|
|
51
|
+
*
|
|
52
|
+
* 纯扫描、无正则回溯:文本长度就是输入框长度,逐字素走一遍即可。
|
|
53
|
+
*/
|
|
54
|
+
export function extractMention(text, cursor) {
|
|
55
|
+
const chars = graphemes(text);
|
|
56
|
+
const cp = Math.max(0, Math.min(cursor, chars.length));
|
|
57
|
+
// 1) 往回找 `@`:中途遇到空白,说明光标不在任何 token 内
|
|
58
|
+
let i = cp;
|
|
59
|
+
while (i > 0) {
|
|
60
|
+
const ch = chars[i - 1];
|
|
61
|
+
if (ch === "@")
|
|
62
|
+
break;
|
|
63
|
+
if (isSpace(ch) || BOUNDARY.has(ch))
|
|
64
|
+
return null;
|
|
65
|
+
i -= 1;
|
|
66
|
+
}
|
|
67
|
+
if (i === 0)
|
|
68
|
+
return null; // 一路扫到开头也没有 `@`
|
|
69
|
+
const start = i - 1; // `@` 的下标
|
|
70
|
+
// 2) 边界:`@` 前的字符必须是行首 / 空白 / 分隔符,否则当普通字符(邮箱里的 `@`)
|
|
71
|
+
const prev = start > 0 ? chars[start - 1] : "";
|
|
72
|
+
if (prev && !isSpace(prev) && !BOUNDARY.has(prev))
|
|
73
|
+
return null;
|
|
74
|
+
// 3) 右端:向后扫到空白或分隔符。光标停在 token 中间时也要吃掉整段
|
|
75
|
+
let end = cp;
|
|
76
|
+
while (end < chars.length) {
|
|
77
|
+
const ch = chars[end];
|
|
78
|
+
if (isSpace(ch) || BOUNDARY.has(ch))
|
|
79
|
+
break;
|
|
80
|
+
end += 1;
|
|
81
|
+
}
|
|
82
|
+
return { query: chars.slice(start + 1, cp).join(""), start, end };
|
|
83
|
+
}
|
|
84
|
+
/** 补全要插入的文本:`@路径`,目录补一个 `/` 以便继续往下钻 */
|
|
85
|
+
export function mentionInsertText(path, dir) {
|
|
86
|
+
return `@${path}${dir ? "/" : ""}`;
|
|
87
|
+
}
|
|
88
|
+
function basename(path) {
|
|
89
|
+
return path.slice(path.lastIndexOf("/") + 1);
|
|
90
|
+
}
|
|
91
|
+
/** 路径深度(`a.ts` = 0,`src/a.ts` = 1) */
|
|
92
|
+
function depth(path) {
|
|
93
|
+
let n = 0;
|
|
94
|
+
for (const ch of path)
|
|
95
|
+
if (ch === "/")
|
|
96
|
+
n += 1;
|
|
97
|
+
return n;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 子序列打分(**越小越靠前**);不匹配返回 `null`。
|
|
101
|
+
*
|
|
102
|
+
* 依据实测(10k 条候选、每次按键):贪婪子序列 + 三种加权就够用 ——
|
|
103
|
+
* `tuicha` 能直达 `src/tui/screens/chat.tsx`,不必让用户逐段敲路径。
|
|
104
|
+
*
|
|
105
|
+
* 加权:
|
|
106
|
+
* · 跳跃惩罚:命中间隔越大越差(`t..u..i` 不如 `tui` 连续);
|
|
107
|
+
* · 连续命中奖励:连着的字符是同一段词;
|
|
108
|
+
* · **整体前缀** > **文件名前缀**:`src/tui/` 这种逐段输入要能压过散落命中;
|
|
109
|
+
* · 同分时浅的、短的优先:根目录文件比深埋的图标库更可能被点名。
|
|
110
|
+
*/
|
|
111
|
+
export function scorePath(query, path) {
|
|
112
|
+
// 空 query(刚敲下 `@`):按「浅 → 短 → 字典序」铺开
|
|
113
|
+
if (!query)
|
|
114
|
+
return depth(path) * 4 + path.length * 0.05;
|
|
115
|
+
const q = query.toLowerCase();
|
|
116
|
+
const p = path.toLowerCase();
|
|
117
|
+
let pi = 0;
|
|
118
|
+
let score = 0;
|
|
119
|
+
let lastHit = -1;
|
|
120
|
+
for (const ch of q) {
|
|
121
|
+
const hit = p.indexOf(ch, pi);
|
|
122
|
+
if (hit === -1)
|
|
123
|
+
return null;
|
|
124
|
+
score += hit - pi; // 跳跃惩罚
|
|
125
|
+
if (hit === lastHit + 1)
|
|
126
|
+
score -= 1; // 连续命中
|
|
127
|
+
lastHit = hit;
|
|
128
|
+
pi = hit + 1;
|
|
129
|
+
}
|
|
130
|
+
if (p.startsWith(q))
|
|
131
|
+
score -= 200;
|
|
132
|
+
else if (basename(p).startsWith(q))
|
|
133
|
+
score -= 40;
|
|
134
|
+
return score + path.length * 0.05 + depth(path) * 2;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 过滤 + 排序,取前 `limit` 条。
|
|
138
|
+
*
|
|
139
|
+
* 每次按键都会全量扫一遍(候选只来自内存数组),因此这里不做任何渐进/缓存:
|
|
140
|
+
* 实测 10k 条最长 8.4ms,比一次渲染便宜。
|
|
141
|
+
*/
|
|
142
|
+
export function rankPaths(query, entries, limit = MENTION_LIMIT) {
|
|
143
|
+
const scored = [];
|
|
144
|
+
for (const entry of entries) {
|
|
145
|
+
const score = scorePath(query, entry.path);
|
|
146
|
+
if (score !== null)
|
|
147
|
+
scored.push({ entry, score });
|
|
148
|
+
}
|
|
149
|
+
scored.sort((a, b) => a.score - b.score || (a.entry.path < b.entry.path ? -1 : a.entry.path > b.entry.path ? 1 : 0));
|
|
150
|
+
return scored.slice(0, Math.max(0, limit)).map((item) => item.entry);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=mention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.js","sourceRoot":"","sources":["../../src/tui/mention.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/mouse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/tui/mouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAE1D,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,SAAS,GAAG,yCAAyC,CAAC;AAE5D,iEAAiE;AACjE,MAAM,aAAa,GAAG,OAAO,CAAC;AAW9B,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO;QACL,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"mouse.js","sourceRoot":"","sources":["../../src/tui/mouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAE1D,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,SAAS,GAAG,yCAAyC,CAAC;AAE5D,iEAAiE;AACjE,MAAM,aAAa,GAAG,OAAO,CAAC;AAW9B,+BAA+B;AAC/B,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO;QACL,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAM,GAAuB,OAAO,CAAC,MAAM;IAC7E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7B,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,oBAAoB,CAAC,MAAM,GAAuB,OAAO,CAAC,MAAM;IAC9E,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/tui/phase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/tui/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,mBAAmB;AACnB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IAEzC,+BAA+B;IAC/B,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI,CAE5B;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/tui/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,mBAAmB;AACnB,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,QAAQ,GACR,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,CAAC;AAEhB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IAEzC,+BAA+B;IAC/B,IAAI,KAAK,IAAI,SAAS,GAAG,IAAI,CAE5B;IAED,yBAAyB;IACzB,KAAK,IAAI,IAAI,CAEZ;IAED,+CAA+C;IAC/C,UAAU,IAAI,IAAI,CAEjB;IAED;;;;;OAKG;IACH,MAAM,IAAI,IAAI,CAEb;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAmB1B;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAOnC;CACF;AAED,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,CAoB1D"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import type { Dispatch, SetStateAction } from "react";
|
|
2
2
|
import type { HandoffMode } from "@ai-zen/agents-sdk";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
3
4
|
import { SelectItem } from "../components.js";
|
|
4
5
|
import { ChatSession } from "../chat-session.js";
|
|
5
6
|
import { type CommandName } from "../../conversation-commands/registry.js";
|
|
6
7
|
import { WizardStep } from "../config-wizard/index.js";
|
|
7
8
|
export interface ChatCommandHost {
|
|
8
9
|
session: ChatSession;
|
|
10
|
+
/**
|
|
11
|
+
* 起子进程的实现(`/update` 用)。缺省用 `node:child_process` 的 `spawn`。
|
|
12
|
+
*
|
|
13
|
+
* 做成可注入是为了让测试不必 `vi.mock("node:child_process")` —— 模块级 mock 是
|
|
14
|
+
* 全局注册的,进程内共享模块时会波及所有用到子进程的模块。
|
|
15
|
+
*/
|
|
16
|
+
spawn?: typeof spawn;
|
|
9
17
|
/** 通知通道:命令反馈(保存 / 清除 / 迁移结果 …)走独立栏位,不进 messages */
|
|
10
18
|
notice: (text: string, tone?: "info" | "error") => void;
|
|
11
19
|
/** 清屏(保留上下文):把转录显示起点推到最新 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/chat-commands.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/chat-commands.ts"],"names":[],"mappings":"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"}
|