mocode-ai 1.2.7 → 1.2.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/dist/agent/core.js +126 -43
- package/dist/config/index.js +31 -6
- package/dist/config/presets.js +36 -1
- package/dist/context/budget.js +5 -16
- package/dist/llm/index.js +42 -4
- package/dist/repl/index.js +57 -13
- package/dist/session/compact.js +329 -40
- package/dist/session/notes.js +63 -0
- package/dist/session/scheduler.js +5 -9
- package/dist/tools/constants.js +21 -0
- package/package.json +1 -1
- package/dist/__trace_manual_test__.js +0 -1
- package/dist/agent/core.d.ts +0 -112
- package/dist/agent/index.d.ts +0 -19
- package/dist/agent/mode.d.ts +0 -29
- package/dist/agent/retry-classifier.js +0 -64
- package/dist/agent/spawn.d.ts +0 -36
- package/dist/attachments/image.d.ts +0 -22
- package/dist/commands/config.d.ts +0 -8
- package/dist/commands/skill.js +0 -230
- package/dist/config/file.d.ts +0 -23
- package/dist/config/index.d.ts +0 -114
- package/dist/config/presets.d.ts +0 -57
- package/dist/context/budget.d.ts +0 -79
- package/dist/context/classifier.d.ts +0 -14
- package/dist/context/encoders/_util.d.ts +0 -11
- package/dist/context/encoders/code.d.ts +0 -2
- package/dist/context/encoders/doc.d.ts +0 -14
- package/dist/context/encoders/graph.d.ts +0 -11
- package/dist/context/encoders/graph.js +0 -81
- package/dist/context/encoders/index.d.ts +0 -2
- package/dist/context/encoders/log.d.ts +0 -2
- package/dist/context/encoders/log.js +0 -2
- package/dist/context/encoders/memory.d.ts +0 -2
- package/dist/context/encoders/passthrough.d.ts +0 -11
- package/dist/context/encoders/search.d.ts +0 -2
- package/dist/context/encoders/summary.d.ts +0 -12
- package/dist/context/encoders/table.d.ts +0 -2
- package/dist/context/encoders/tree.d.ts +0 -2
- package/dist/context/index.d.ts +0 -6
- package/dist/context/lifecycle.d.ts +0 -51
- package/dist/context/pipeline.d.ts +0 -9
- package/dist/context/registry.d.ts +0 -9
- package/dist/context/relevance.d.ts +0 -65
- package/dist/context/types.d.ts +0 -36
- package/dist/foo.js +0 -28
- package/dist/foo.test.js +0 -12
- package/dist/index.d.ts +0 -1
- package/dist/llm/capabilities.d.ts +0 -19
- package/dist/llm/index.d.ts +0 -111
- package/dist/memory/discover.d.ts +0 -15
- package/dist/memory/index.d.ts +0 -13
- package/dist/memory/reflect.d.ts +0 -34
- package/dist/memory/store.d.ts +0 -124
- package/dist/pet/bridge.d.ts +0 -73
- package/dist/pet/protocol.d.ts +0 -83
- package/dist/pet/state.d.ts +0 -28
- package/dist/plan/active.d.ts +0 -23
- package/dist/plan/active.js +0 -45
- package/dist/plan/index.d.ts +0 -13
- package/dist/plan/index.js +0 -33
- package/dist/plan/state.d.ts +0 -2
- package/dist/plan/state.js +0 -11
- package/dist/plan/store.d.ts +0 -78
- package/dist/plan/store.js +0 -429
- package/dist/project-skill/index.js +0 -95
- package/dist/project-skill/initializer.js +0 -178
- package/dist/project-snapshot/index.js +0 -85
- package/dist/project-snapshot/llm-snapshot.js +0 -150
- package/dist/project-snapshot/static-files.js +0 -87
- package/dist/repl/index.d.ts +0 -22
- package/dist/rollback/index.d.ts +0 -79
- package/dist/sandbox/command.d.ts +0 -3
- package/dist/sandbox/index.d.ts +0 -4
- package/dist/sandbox/jail.d.ts +0 -17
- package/dist/sandbox/policy.d.ts +0 -21
- package/dist/sandbox/root.d.ts +0 -5
- package/dist/session/compact.d.ts +0 -92
- package/dist/session/index.d.ts +0 -13
- package/dist/session/notes-plan.js +0 -41
- package/dist/session/persist.d.ts +0 -30
- package/dist/session/scheduler.d.ts +0 -53
- package/dist/skills/discover.d.ts +0 -33
- package/dist/skills/index.d.ts +0 -13
- package/dist/skills/skill-eval.js +0 -345
- package/dist/skills/skill-improve.js +0 -221
- package/dist/skills/stats.js +0 -102
- package/dist/tools/builtins/apply-patch.js +0 -174
- package/dist/tools/builtins/ask-human.d.ts +0 -9
- package/dist/tools/builtins/codegraph.d.ts +0 -2
- package/dist/tools/builtins/codegraph.js +0 -128
- package/dist/tools/builtins/edit-file.d.ts +0 -2
- package/dist/tools/builtins/glob.d.ts +0 -2
- package/dist/tools/builtins/grep.d.ts +0 -2
- package/dist/tools/builtins/index.d.ts +0 -2
- package/dist/tools/builtins/memory-forget.d.ts +0 -2
- package/dist/tools/builtins/memory-list.d.ts +0 -2
- package/dist/tools/builtins/memory-save.d.ts +0 -2
- package/dist/tools/builtins/memory-search.d.ts +0 -2
- package/dist/tools/builtins/memory-update.d.ts +0 -2
- package/dist/tools/builtins/project-skill-update.js +0 -102
- package/dist/tools/builtins/read-file.d.ts +0 -2
- package/dist/tools/builtins/run-command.d.ts +0 -2
- package/dist/tools/builtins/switch-mode.d.ts +0 -2
- package/dist/tools/builtins/switch-mode.js +0 -44
- package/dist/tools/builtins/task.d.ts +0 -2
- package/dist/tools/builtins/todolist.d.ts +0 -2
- package/dist/tools/builtins/todolist.js +0 -411
- package/dist/tools/builtins/use-skill.d.ts +0 -2
- package/dist/tools/builtins/web-fetch.d.ts +0 -2
- package/dist/tools/builtins/web-search.d.ts +0 -2
- package/dist/tools/builtins/write-file.d.ts +0 -2
- package/dist/tools/constants.d.ts +0 -52
- package/dist/tools/registry.d.ts +0 -18
- package/dist/tools/retry.js +0 -137
- package/dist/tools/types.d.ts +0 -42
- package/dist/ui/batch.d.ts +0 -67
- package/dist/ui/clipboard.d.ts +0 -9
- package/dist/ui/content.d.ts +0 -55
- package/dist/ui/diff.d.ts +0 -34
- package/dist/ui/intervention.d.ts +0 -46
- package/dist/ui/layout.d.ts +0 -225
- package/dist/ui/markdown.d.ts +0 -46
- package/dist/ui/mouse.d.ts +0 -29
- package/dist/ui/prompt.d.ts +0 -61
- package/dist/ui/render.d.ts +0 -60
- package/dist/ui/spinner.d.ts +0 -26
- package/dist/ui/theme.d.ts +0 -47
- package/dist/ui/thinking.js +0 -80
package/dist/ui/markdown.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/** 内联 token:可见文本 + 开头要套的 SGR(可叠加嵌套前缀;'' = 默认色)。 */
|
|
2
|
-
interface Seg {
|
|
3
|
-
sgr: string;
|
|
4
|
-
text: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* ANSI 感知的硬切(**不补 …**):保留串内 SGR 码,按可见宽度截到 ≤ width,末尾补 reset
|
|
8
|
-
* 防断色。用于 markdown 代码行 / 超长单行带色块——绝不能补 …('…' 在中文终端算 2 宽会
|
|
9
|
-
* 触发 auto-wrap 整屏左移)。宽度未超直接原样返回。
|
|
10
|
-
*/
|
|
11
|
-
declare function clipAnsiLine(str: string, width: number): string;
|
|
12
|
-
/**
|
|
13
|
-
* 内联 markdown → Seg[](有序 token 流)。支持:行内 code、bold、italic、strike、link。
|
|
14
|
-
* _italic_ 带词边界 flank 检查(避免 snake_case 被斜体)。emphasis 递归一层(粗体内可含
|
|
15
|
-
* 斜体/代码);code/link 内部当字面量(不再递归)。未配对的标记按字面量透传;反斜杠转义下一字符。
|
|
16
|
-
*/
|
|
17
|
-
declare function renderInline(text: string): Seg[];
|
|
18
|
-
/**
|
|
19
|
-
* Seg[] → 自洽 ANSI 串(每个 seg 前 reset+开 sgr,行末 reset):样式不跨 seg 泄漏,
|
|
20
|
-
* 交给 wrapAnsiString 折行时由 activeSgr 跨断行重开。
|
|
21
|
-
*/
|
|
22
|
-
declare function segsToAnsi(segs: Seg[]): string;
|
|
23
|
-
/**
|
|
24
|
-
* 把含 SGR / \n 的串按可见宽度软折成多行(每行可见宽 ≤ width)。等价 wrap-ansi 语义,零新依赖。
|
|
25
|
-
* - SGR 码 `\x1b[…m` 0 宽原样保留;`\x1b[0m`(reset)清 activeSgr,其余 SGR 累加到 activeSgr。
|
|
26
|
-
* - \n 为硬断行:flush 当前行(末尾补 reset),保留 activeSgr → 下一行重开同款样式
|
|
27
|
-
* (cli-highlight 多行串/块注释跨行着色不丢)。
|
|
28
|
-
* - 软折行断点:可见字符累加超 width → 当前行补 reset 收尾、新行首重发 activeSgr + 该字符。
|
|
29
|
-
* - 宽字符(CJK=2)在剩余放不下时整字折下行(同 wrapByDisplayWidth);零宽符(组合符)不计宽度。
|
|
30
|
-
* - 每行末尾补 reset(各自直出不串色);空行(源 \n\n 间)返 ''。
|
|
31
|
-
*/
|
|
32
|
-
declare function wrapAnsiString(str: string, width: number): string[];
|
|
33
|
-
/**
|
|
34
|
-
* 把 markdown 文本渲染成 ANSI 物理行数组(每行 ansiDisplayWidth ≤ cols,自洽带色)。
|
|
35
|
-
* 纯函数 + LRU memo(key=text,值 {cols, lines, themeVersion}):同一 text 同一 cols 同一主题版本直接
|
|
36
|
-
* 命中(MRU 提升),cols 变(resize)或切主题(themeVersion 变)则重算覆写。供 layout.contentWriteMd
|
|
37
|
-
* 每 chunk 调用(memo 使重复渲染命中缓存)。themeVersion 使 setTheme 后全量重绘不命中旧主题缓存行。
|
|
38
|
-
*/
|
|
39
|
-
export declare function renderMarkdown(text: string, cols: number): string[];
|
|
40
|
-
export declare const __test: {
|
|
41
|
-
clipAnsiLine: typeof clipAnsiLine;
|
|
42
|
-
renderInline: typeof renderInline;
|
|
43
|
-
wrapAnsiString: typeof wrapAnsiString;
|
|
44
|
-
segsToAnsi: typeof segsToAnsi;
|
|
45
|
-
};
|
|
46
|
-
export {};
|
package/dist/ui/mouse.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export type MouseEvent = {
|
|
2
|
-
type: 'wheel';
|
|
3
|
-
dir: number;
|
|
4
|
-
} | {
|
|
5
|
-
type: 'press';
|
|
6
|
-
col: number;
|
|
7
|
-
row: number;
|
|
8
|
-
button: number;
|
|
9
|
-
} | {
|
|
10
|
-
type: 'drag';
|
|
11
|
-
col: number;
|
|
12
|
-
row: number;
|
|
13
|
-
button: number;
|
|
14
|
-
} | {
|
|
15
|
-
type: 'release';
|
|
16
|
-
col: number;
|
|
17
|
-
row: number;
|
|
18
|
-
button: number;
|
|
19
|
-
};
|
|
20
|
-
/** 注册事件回调(layout 进 alt 屏时注册)。 */
|
|
21
|
-
export declare function setHandler(fn: ((e: MouseEvent) => void) | null): void;
|
|
22
|
-
/** 复位内部收集状态(退出 alt 屏 / 测试间清污染)。 */
|
|
23
|
-
export declare function resetMouse(): void;
|
|
24
|
-
/**
|
|
25
|
-
* 喂入一个 keypress 的 key.sequence。
|
|
26
|
-
* 返回 true=本 keypress 是鼠标 fragment(或完整报表),调用方须 return 吞掉;
|
|
27
|
-
* 返回 false=非鼠标,放行正常处理。完整报表拼齐时同步派发 MouseEvent 给 handler。
|
|
28
|
-
*/
|
|
29
|
-
export declare function swallow(seq: string): boolean;
|
package/dist/ui/prompt.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
export interface SlashCommand {
|
|
2
|
-
name: string;
|
|
3
|
-
desc: string;
|
|
4
|
-
}
|
|
5
|
-
export interface PromptOpts {
|
|
6
|
-
/** 纯文本 prompt(无 ANSI),如 '❯ '。 */
|
|
7
|
-
prompt: string;
|
|
8
|
-
/** 斜杠命令列表,仅用于菜单显示与过滤。 */
|
|
9
|
-
commands: SlashCommand[];
|
|
10
|
-
/** 预填初始行(运行中 typeahead 缓冲 → 下一轮 INPUT 态预填);光标置末行末尾。 */
|
|
11
|
-
initialLines?: string[];
|
|
12
|
-
/** Shift+Tab 循环切换 agent 模式(auto ↔ plan)的回调;repl 注入(翻 agentMode + 重写 history[0] + 设状态行 modeTag)。回调后 prompt 自调 redraw() 刷新底栏。 */
|
|
13
|
-
onCycleMode?: () => void;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* 读多行输入;TUI 下经 layout.paintInput 把输入框画在固定底栏、斜杠菜单向上展开进内容区底。
|
|
17
|
-
* 换行:Ctrl+J / Alt+Enter / Shift+Enter(终端区分时)/ 粘贴的 LF。Enter 提交。返回行数组;null=空缓冲 Ctrl+D。
|
|
18
|
-
* 非 TTY 退化为 readline.question(单行,返回 [answer])。raw 模式下 Ctrl+C 先恢复终端再 reject('SIGINT')。
|
|
19
|
-
*
|
|
20
|
-
* 渲染全归 layout(prompt 只持有编辑状态:lines / 光标 / 菜单),prompt 不直接发 ANSI 区域控制,
|
|
21
|
-
* 避免 readline 光标错位与区域越界——颜色仅用在菜单行字符串里(由 layout 原样贴入)。
|
|
22
|
-
*/
|
|
23
|
-
export declare function promptWithSlashMenu(opts: PromptOpts): Promise<string[] | null>;
|
|
24
|
-
/**
|
|
25
|
-
* 轮次选择菜单(供 /rollback 菜单化选择):↑/↓ 导航、Enter 选中、Esc/Ctrl+D 取消。
|
|
26
|
-
* 把 items 画成向上展开的菜单(经 layout.paintInput,与斜杠菜单同套渲染),输入框行作操作提示。
|
|
27
|
-
* 返回选中的 0-based 下标;null=取消 / 非 TTY / 空列表。纯导航(不收文本输入)。
|
|
28
|
-
* 长列表(超屏高)自动开窗保光标可见;默认聚焦末项(最新轮次,靠近输入框)。
|
|
29
|
-
*/
|
|
30
|
-
export declare function promptTurnPicker(items: {
|
|
31
|
-
firstLine: string;
|
|
32
|
-
}[]): Promise<number | null>;
|
|
33
|
-
/**
|
|
34
|
-
* 会话选择菜单(供 /resume 菜单化选择):↑/↓ 导航、Enter 续接、Esc/Ctrl+D 取消、a 切换「仅最近 N / 全部」。
|
|
35
|
-
* 把 items 画成向上展开的菜单(经 layout.paintInput,与斜杠菜单 / 轮次菜单同套渲染),输入框行作操作提示。
|
|
36
|
-
* 默认仅显示最近 N 条(默认 N=10,取 items 前缀——调用方按 createdAt 降序传入则前缀=最新 N);
|
|
37
|
-
* items 多于 N 时按 a 展开全部,再按 a 折回最近 N。选中项 cyan+bold + ▸ 高亮(同 promptTurnPicker)。
|
|
38
|
-
* 返回选中的 item(含 id);null=取消 / 非 TTY / 空列表。纯导航(不收文本输入)。
|
|
39
|
-
* 长列表(超屏高)自动开窗保光标可见;默认聚焦首项(最新会话,Enter 即续接最近一条)。
|
|
40
|
-
*/
|
|
41
|
-
export interface SessionPickerItem {
|
|
42
|
-
id: string;
|
|
43
|
-
title: string;
|
|
44
|
-
subtitle?: string;
|
|
45
|
-
}
|
|
46
|
-
export declare function promptSessionPicker(items: SessionPickerItem[], recentCap?: number): Promise<SessionPickerItem | null>;
|
|
47
|
-
/**
|
|
48
|
-
* 主题选择菜单(供 /theme):↑/↓ 导航、Enter 切换、Esc/Ctrl+D 取消、Ctrl+C 抛 SIGINT(调用方 try/catch)。
|
|
49
|
-
* 复用 SessionPickerItem 形状({id,title,subtitle?});选中项 cyan+bold + ▸ 高亮(同 /resume 菜单)。
|
|
50
|
-
* 返回选中的 item(含 id);null=取消 / 非 TTY / 空列表。纯导航(不收文本输入)。
|
|
51
|
-
* 长列表超屏高自动开窗保光标可见;默认聚焦首项。
|
|
52
|
-
*/
|
|
53
|
-
export declare function promptThemePicker(items: SessionPickerItem[]): Promise<SessionPickerItem | null>;
|
|
54
|
-
/**
|
|
55
|
-
* 回滚方式二选一菜单(供 /rollback 选完轮次后):↑/↓ 导航、Enter 确认、Esc/Ctrl+D 保留文件。
|
|
56
|
-
* 两个选项:1=撤销文件改动(恢复到回滚前);2=只撤销消息,保留文件改动。
|
|
57
|
-
* 复用轮次/会话菜单的渲染骨架(raw mode + layout.paintInput 的 menu),选中项 cyan+bold + ▸ 高亮。
|
|
58
|
-
* 返回 true=撤销文件 / false=只撤销消息 / null=取消(调用方按 false=保留文件处理)。
|
|
59
|
-
* 默认聚焦首项(撤销文件)。无文件改动时调用方不应调此菜单(直接走只撤销消息)。
|
|
60
|
-
*/
|
|
61
|
-
export declare function promptRevertChoice(fileCount: number): Promise<boolean | null>;
|
package/dist/ui/render.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 清空整屏 + 滚动缓冲(向上滚动可见的历史输出),光标归位。
|
|
3
|
-
* 进入会话时调用,让终端只剩当前 agent 对话。非 TTY 时空操作。
|
|
4
|
-
*/
|
|
5
|
-
export declare function clearScreen(): void;
|
|
6
|
-
export declare function charWidth(cp: number): number;
|
|
7
|
-
export declare function displayWidth(str: string): number;
|
|
8
|
-
/**
|
|
9
|
-
* 毫秒 → Claude Code 式耗时串:运行中状态行走时与轮次结束摘要行共用。
|
|
10
|
-
* <10s 显 1 位小数(3.2s);10-59s 整数(12s);≥60s m+s(3m 3s);≥1h h+m(1h 2m)。
|
|
11
|
-
*/
|
|
12
|
-
export declare function fmtElapsed(ms: number): string;
|
|
13
|
-
/** 去除 SGR 颜色转义(\x1B[…m),用于度量带色串的真实可见宽度。 */
|
|
14
|
-
export declare function stripAnsi(s: string): string;
|
|
15
|
-
/** 按显示列范围 [start, end) 截取纯文本(不含 ANSI,按 charWidth 计位,CJK/宽字符占 2)。
|
|
16
|
-
* 跨宽字符边界时整字符归入(w+cw>start 即含入),供鼠标选区文本提取用。 */
|
|
17
|
-
export declare function sliceByDisplayCol(str: string, start: number, end: number): string;
|
|
18
|
-
/** 把可视列(0-based)反推为 str 内的字符偏移(JS 字符串下标,UTF-16 code unit)。
|
|
19
|
-
* 点击落在宽字符的"列中段"时归到该字符之前的偏移(停在它左侧边界)——与终端光标行为一致。
|
|
20
|
-
* visCol 大于串的显示宽度时返回 str.length(点行末的"右边")。
|
|
21
|
-
* 输入框点击定位专用;与 sliceByDisplayCol 互为逆,但语义只关心单点、不关心区间。 */
|
|
22
|
-
export declare function visColToCharCol(str: string, visCol: number): number;
|
|
23
|
-
/** 带色串的可见显示宽度(先去 ANSI 再按 displayWidth 度量)。 */
|
|
24
|
-
export declare function ansiDisplayWidth(s: string): number;
|
|
25
|
-
/** 按显示宽度右补空格。 */
|
|
26
|
-
export declare function padEndDisplay(str: string, width: number): string;
|
|
27
|
-
/** 带色串按可见宽度右补空格(先剥离 ANSI 算真实宽度,空格补在串末,不破坏颜色码)。 */
|
|
28
|
-
export declare function padEndAnsi(str: string, width: number): string;
|
|
29
|
-
/** 带色串按可见宽度截断(保留中间 ANSI 码,超出末尾加 …,补 reset 防 … 继承颜色)。 */
|
|
30
|
-
export declare function truncateAnsi(str: string, width: number): string;
|
|
31
|
-
/** 按显示宽度截断,超出加 …。 */
|
|
32
|
-
export declare function truncateDisplay(str: string, width: number): string;
|
|
33
|
-
/**
|
|
34
|
-
* 按显示宽度从头部截断(保留尾部),超出前缀加 …。
|
|
35
|
-
* 用于单行只读预览需要始终看到最新内容的场景(如运行态输入回显:光标恒在文本末尾,
|
|
36
|
-
* 超长时应保留刚打的字,而非 truncateDisplay 那样保留开头、把刚打的内容截没)。
|
|
37
|
-
*/
|
|
38
|
-
export declare function truncateDisplayHead(str: string, width: number): string;
|
|
39
|
-
/**
|
|
40
|
-
* 按显示宽度把文本软折行为多行(供输入框软换行):每行可见宽度 ≤ width。
|
|
41
|
-
* 宽字符(CJK / emoji = 2)在剩余宽度放不下时整字折到下行(留尾部空格,与终端自动折行一致),
|
|
42
|
-
* 而非劈开半个字。零宽字符(组合符等)不计宽度、附在当前行。空串返回 [''](占一行)。
|
|
43
|
-
* 输入文本应全为可见字符(无控制码 / SGR)。
|
|
44
|
-
*/
|
|
45
|
-
export declare function wrapByDisplayWidth(text: string, width: number): string[];
|
|
46
|
-
export interface BannerInfo {
|
|
47
|
-
model: string;
|
|
48
|
-
baseURL: string;
|
|
49
|
-
cwd: string;
|
|
50
|
-
tools: string;
|
|
51
|
-
}
|
|
52
|
-
/** 横幅纯文本(带 ANSI 颜色,不写出)——供 TUI 经 contentWrite 写入内容区以跟踪续写位。
|
|
53
|
-
* 无边框:左侧实心小熊 + 右侧标题/信息(模型/目录),末尾一行提示。 */
|
|
54
|
-
export declare function bannerString(info: BannerInfo): string;
|
|
55
|
-
/** 启动横幅:小熊 logo + 标题/信息 + 一行提示。纯渲染,不依赖 config / 业务。 */
|
|
56
|
-
export declare function printBanner(info: BannerInfo): void;
|
|
57
|
-
/** 把工具调用的 JSON 参数提炼成人可读的一行(路径 / 模式 / 命令)。 */
|
|
58
|
-
export declare function summarizeToolCall(name: string, argsRaw: string): string;
|
|
59
|
-
/** 工具结果的人可读一行预览(行数 / 匹配数 / 首行);喂回 LLM 的全文不变。 */
|
|
60
|
-
export declare function summarizeToolResult(name: string, output: string): string;
|
package/dist/ui/spinner.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 等待动画:在 await 长操作(chat / 工具执行 / 压缩)时旋转,避免「卡死」错觉。
|
|
3
|
-
*
|
|
4
|
-
* 两种渲染模式:
|
|
5
|
-
* - onFrame 回调(TUI 态):帧经回调刷状态行(layout.drawStatusBar),内容区保持静止、底栏转圈;
|
|
6
|
-
* 不在内容行用 \r\x1B[K 原地刷(那会擦内容、与滚动区域冲突)。
|
|
7
|
-
* - 无回调(非 TTY / 旧路径):\r\x1B[K 原地刷 braille 帧;非 TTY 退化为启动时打印一行静态提示。
|
|
8
|
-
*
|
|
9
|
-
* stop() 仅在确实旋转过(有 timer)时清场,避免对从未 start 的实例误清状态行。
|
|
10
|
-
*/
|
|
11
|
-
export declare class Spinner {
|
|
12
|
-
private readonly onFrame?;
|
|
13
|
-
private timer;
|
|
14
|
-
private frame;
|
|
15
|
-
private msg;
|
|
16
|
-
constructor(onFrame?: ((msg: string, frame: string | null) => void) | undefined);
|
|
17
|
-
start(msg: string): void;
|
|
18
|
-
private render;
|
|
19
|
-
stop(): void;
|
|
20
|
-
/**
|
|
21
|
-
* 暂停当前活跃 spinner(供 ask_human 介入面板进入前停转,避免 onFrame 覆盖面板)。
|
|
22
|
-
* 未转则 no-op(stop 内 `!this.timer` 守护);停转时 onFrame(msg,null) 触发 clearLiveAtCursor 清续写位帧。
|
|
23
|
-
* 不 resume——ask_human 的活儿就是面板本身,退出后 agent 的 spinner.stop() 是 no-op,下一轮 start 自然重启。
|
|
24
|
-
*/
|
|
25
|
-
static pauseCurrent(): void;
|
|
26
|
-
}
|
package/dist/ui/theme.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/** 可切换的颜色字段(属性 bold/dim/reverse/reset 跨主题不变,不在此)。 */
|
|
2
|
-
export interface Palette {
|
|
3
|
-
red: string;
|
|
4
|
-
green: string;
|
|
5
|
-
yellow: string;
|
|
6
|
-
blue: string;
|
|
7
|
-
magenta: string;
|
|
8
|
-
cyan: string;
|
|
9
|
-
gray: string;
|
|
10
|
-
brightCyan: string;
|
|
11
|
-
brightMagenta: string;
|
|
12
|
-
/** 用户消息满宽背景色(上滑时易辨认)。 */
|
|
13
|
-
userBg: string;
|
|
14
|
-
/** diff 新增行整行底色——浅深主题下都柔和可辨,跟绿字 fg 配对;SGR 自洽,每行 reset 闭合。 */
|
|
15
|
-
addBg: string;
|
|
16
|
-
/** diff 删除行整行底色——同 addBg,跟红字 fg 配对。 */
|
|
17
|
-
delBg: string;
|
|
18
|
-
}
|
|
19
|
-
export type ColorKey = keyof Palette;
|
|
20
|
-
/**
|
|
21
|
-
* 切主题。name 未知则回退 default(不抛——启动时 config.theme 可能是用户填的任意值)。
|
|
22
|
-
* 仅当实际变更时自增 version(供缓存失效)。 */
|
|
23
|
-
export declare function setTheme(name: string): void;
|
|
24
|
-
export declare function getTheme(): string;
|
|
25
|
-
export declare function listThemes(): string[];
|
|
26
|
-
export declare function themeExists(name: string): boolean;
|
|
27
|
-
/** 主题版本号,每次 setTheme 实际变更自增;供 markdown MEMO 等缓存按版本失效。 */
|
|
28
|
-
export declare function getThemeVersion(): number;
|
|
29
|
-
export declare const ui: {
|
|
30
|
-
isTTY: boolean;
|
|
31
|
-
reset: string;
|
|
32
|
-
bold: string;
|
|
33
|
-
dim: string;
|
|
34
|
-
reverse: string;
|
|
35
|
-
readonly red: string;
|
|
36
|
-
readonly green: string;
|
|
37
|
-
readonly yellow: string;
|
|
38
|
-
readonly blue: string;
|
|
39
|
-
readonly magenta: string;
|
|
40
|
-
readonly cyan: string;
|
|
41
|
-
readonly gray: string;
|
|
42
|
-
readonly brightCyan: string;
|
|
43
|
-
readonly brightMagenta: string;
|
|
44
|
-
readonly userBg: string;
|
|
45
|
-
readonly addBg: string;
|
|
46
|
-
readonly delBg: string;
|
|
47
|
-
};
|
package/dist/ui/thinking.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { renderMarkdown } from './markdown.js';
|
|
2
|
-
import { ui } from './theme.js';
|
|
3
|
-
const records = new Map();
|
|
4
|
-
const absLineToId = new Map();
|
|
5
|
-
let liveRaw = '';
|
|
6
|
-
let nextId = 0;
|
|
7
|
-
/** 流式写入推理;首次写入会结束此前的正文 Markdown 段,确保两者能独立折叠。 */
|
|
8
|
-
export function writeThinking(delta, layout) {
|
|
9
|
-
if (!delta)
|
|
10
|
-
return;
|
|
11
|
-
if (!liveRaw)
|
|
12
|
-
layout.beginMarkdownSegment();
|
|
13
|
-
liveRaw += delta;
|
|
14
|
-
layout.contentWriteMd(delta);
|
|
15
|
-
}
|
|
16
|
-
/** 推理流结束:将实时 Markdown 段替换为可点击的一行摘要。 */
|
|
17
|
-
export function finishThinking(layout) {
|
|
18
|
-
if (!liveRaw)
|
|
19
|
-
return;
|
|
20
|
-
const raw = liveRaw;
|
|
21
|
-
liveRaw = '';
|
|
22
|
-
const lineCount = raw.split('\n').length;
|
|
23
|
-
const summary = ` ${ui.bold}${ui.accent}▸${ui.reset} ${ui.dim}Thought · ${lineCount} lines (click to expand)${ui.reset}`;
|
|
24
|
-
const summaryAbsIdx = layout.collapseMarkdownSegment(summary);
|
|
25
|
-
if (summaryAbsIdx == null)
|
|
26
|
-
return;
|
|
27
|
-
const id = `t${++nextId}`;
|
|
28
|
-
records.set(id, { id, summaryAbsIdx, raw, expanded: false, expandedLineCount: 0 });
|
|
29
|
-
absLineToId.set(summaryAbsIdx, id);
|
|
30
|
-
}
|
|
31
|
-
/** 返回指定缓冲绝对行命中的推理记录;非摘要行返回 null。 */
|
|
32
|
-
export function findThinkingByAbsLine(absLine) {
|
|
33
|
-
return absLineToId.get(absLine) ?? null;
|
|
34
|
-
}
|
|
35
|
-
/** 切换摘要行下的完整推理内容。 */
|
|
36
|
-
export function toggleThinking(id, layout) {
|
|
37
|
-
const record = records.get(id);
|
|
38
|
-
if (!record)
|
|
39
|
-
return;
|
|
40
|
-
if (record.expanded) {
|
|
41
|
-
layout.contentDeleteFrom(record.summaryAbsIdx + 1, record.expandedLineCount);
|
|
42
|
-
record.expanded = false;
|
|
43
|
-
record.expandedLineCount = 0;
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const rendered = renderMarkdown(record.raw, layout.contentCols());
|
|
47
|
-
const maxLines = 200;
|
|
48
|
-
const lines = rendered.slice(0, maxLines);
|
|
49
|
-
if (rendered.length > maxLines) {
|
|
50
|
-
lines.push(`${ui.dim} … (${rendered.length - maxLines} more lines)${ui.reset}`);
|
|
51
|
-
}
|
|
52
|
-
if (lines.length === 0)
|
|
53
|
-
return;
|
|
54
|
-
layout.contentInsertAfter(record.summaryAbsIdx, lines);
|
|
55
|
-
record.expanded = true;
|
|
56
|
-
record.expandedLineCount = lines.length;
|
|
57
|
-
}
|
|
58
|
-
/** 缓冲中段插删后同步摘要绝对行索引。 */
|
|
59
|
-
export function shiftThinkingsAfter(absIdx, delta) {
|
|
60
|
-
if (delta === 0)
|
|
61
|
-
return;
|
|
62
|
-
const next = new Map();
|
|
63
|
-
for (const [idx, id] of absLineToId) {
|
|
64
|
-
const shifted = idx > absIdx ? idx + delta : idx;
|
|
65
|
-
if (shifted >= 0)
|
|
66
|
-
next.set(shifted, id);
|
|
67
|
-
const record = records.get(id);
|
|
68
|
-
if (record && idx > absIdx)
|
|
69
|
-
record.summaryAbsIdx = shifted;
|
|
70
|
-
}
|
|
71
|
-
absLineToId.clear();
|
|
72
|
-
for (const [idx, id] of next)
|
|
73
|
-
absLineToId.set(idx, id);
|
|
74
|
-
}
|
|
75
|
-
/** 内容区整体清空时清掉折叠状态与尚未结束的流。 */
|
|
76
|
-
export function resetThinkings() {
|
|
77
|
-
records.clear();
|
|
78
|
-
absLineToId.clear();
|
|
79
|
-
liveRaw = '';
|
|
80
|
-
}
|