@ai-zen/cli 1.0.0-alpha.3 → 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 +885 -0
- package/LICENSE +21 -0
- package/README.md +135 -30
- package/README.zh.md +135 -30
- package/dist/agent-creator.d.ts +11 -0
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +50 -20
- package/dist/agent-creator.js.map +1 -1
- package/dist/agent-switch.d.ts +61 -0
- package/dist/agent-switch.d.ts.map +1 -0
- package/dist/agent-switch.js +83 -0
- package/dist/agent-switch.js.map +1 -0
- package/dist/agents-store.d.ts +6 -1
- package/dist/agents-store.d.ts.map +1 -1
- package/dist/agents-store.js +46 -4
- package/dist/agents-store.js.map +1 -1
- package/dist/auto-migrate-confirm.d.ts +43 -0
- package/dist/auto-migrate-confirm.d.ts.map +1 -0
- package/dist/auto-migrate-confirm.js +47 -0
- package/dist/auto-migrate-confirm.js.map +1 -0
- 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 +42 -5
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +80 -27
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +76 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +143 -39
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts +127 -4
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +93 -14
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/conversation-persist-plugin.d.ts +0 -1
- package/dist/conversation-persist-plugin.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.js +7 -16
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +79 -18
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +96 -30
- package/dist/conversation-repository.js.map +1 -1
- package/dist/cwd-tracker-plugin.d.ts.map +1 -1
- package/dist/cwd-tracker-plugin.js +22 -7
- package/dist/cwd-tracker-plugin.js.map +1 -1
- package/dist/format-time.d.ts +17 -6
- package/dist/format-time.d.ts.map +1 -1
- package/dist/format-time.js +32 -14
- package/dist/format-time.js.map +1 -1
- package/dist/handoff-service.d.ts +19 -0
- package/dist/handoff-service.d.ts.map +1 -0
- package/dist/handoff-service.js +89 -0
- package/dist/handoff-service.js.map +1 -0
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +69 -15
- package/dist/hook.js.map +1 -1
- package/dist/i18n/en-wizard.d.ts +8 -0
- package/dist/i18n/en-wizard.d.ts.map +1 -0
- package/dist/i18n/en-wizard.js +303 -0
- package/dist/i18n/en-wizard.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +247 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +57 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +109 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/preferences.d.ts +37 -0
- package/dist/i18n/preferences.d.ts.map +1 -0
- package/dist/i18n/preferences.js +73 -0
- package/dist/i18n/preferences.js.map +1 -0
- package/dist/i18n/zh-wizard.d.ts +11 -0
- package/dist/i18n/zh-wizard.d.ts.map +1 -0
- package/dist/i18n/zh-wizard.js +306 -0
- package/dist/i18n/zh-wizard.js.map +1 -0
- package/dist/i18n/zh.d.ts +10 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +251 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +72 -25
- package/dist/index.js.map +1 -1
- package/dist/mcp-command.d.ts +32 -0
- package/dist/mcp-command.d.ts.map +1 -0
- package/dist/mcp-command.js +37 -0
- package/dist/mcp-command.js.map +1 -0
- package/dist/mode.d.ts +31 -4
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js +42 -7
- package/dist/mode.js.map +1 -1
- package/dist/model-switch.d.ts +58 -0
- package/dist/model-switch.d.ts.map +1 -0
- package/dist/model-switch.js +62 -0
- package/dist/model-switch.js.map +1 -0
- package/dist/reasoning-effort.d.ts +96 -0
- package/dist/reasoning-effort.d.ts.map +1 -0
- package/dist/reasoning-effort.js +164 -0
- package/dist/reasoning-effort.js.map +1 -0
- package/dist/reasoning-presets.d.ts +34 -0
- package/dist/reasoning-presets.d.ts.map +1 -0
- package/dist/reasoning-presets.js +85 -0
- package/dist/reasoning-presets.js.map +1 -0
- package/dist/sdk-log.d.ts +84 -0
- package/dist/sdk-log.d.ts.map +1 -0
- package/dist/sdk-log.js +167 -0
- package/dist/sdk-log.js.map +1 -0
- 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/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +32 -30
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +10 -7
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +12 -9
- package/dist/sub-agent-guard-plugin.js.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 +177 -57
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +362 -126
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +113 -7
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +177 -12
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/detail.d.ts +18 -10
- package/dist/tui/config-wizard/detail.d.ts.map +1 -1
- package/dist/tui/config-wizard/detail.js +53 -46
- package/dist/tui/config-wizard/detail.js.map +1 -1
- package/dist/tui/config-wizard/engine.d.ts +2 -2
- package/dist/tui/config-wizard/engine.d.ts.map +1 -1
- package/dist/tui/config-wizard/engine.js +48 -26
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts +3 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +202 -167
- 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 +13 -5
- 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 +4 -4
- package/dist/tui/config-wizard/list.js.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.js +4 -3
- package/dist/tui/config-wizard/mcp-helpers.js.map +1 -1
- package/dist/tui/config-wizard/menu.d.ts.map +1 -1
- package/dist/tui/config-wizard/menu.js +33 -21
- package/dist/tui/config-wizard/menu.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 +11 -7
- package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
- package/dist/tui/config-wizard/prompt.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt.js +8 -7
- package/dist/tui/config-wizard/prompt.js.map +1 -1
- package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-agents.js +50 -29
- package/dist/tui/config-wizard/step-agents.js.map +1 -1
- package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-defaults.js +77 -27
- package/dist/tui/config-wizard/step-defaults.js.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.js +27 -14
- 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 +29 -25
- 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 +98 -43
- package/dist/tui/config-wizard/step-models.js.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.js +16 -12
- package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -1
- package/dist/tui/config-wizard/step-simple.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-simple.js +18 -17
- package/dist/tui/config-wizard/step-simple.js.map +1 -1
- package/dist/tui/config-wizard/types.d.ts +31 -3
- package/dist/tui/config-wizard/types.d.ts.map +1 -1
- package/dist/tui/config-wizard/types.js.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 +18 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +107 -49
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +52 -0
- package/dist/tui/input-editing.d.ts.map +1 -0
- package/dist/tui/input-editing.js +91 -0
- package/dist/tui/input-editing.js.map +1 -0
- package/dist/tui/key-debug.d.ts +62 -0
- package/dist/tui/key-debug.d.ts.map +1 -0
- package/dist/tui/key-debug.js +92 -0
- package/dist/tui/key-debug.js.map +1 -0
- 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.d.ts +55 -0
- package/dist/tui/mouse.d.ts.map +1 -0
- package/dist/tui/mouse.js +74 -0
- package/dist/tui/mouse.js.map +1 -0
- package/dist/tui/phase.d.ts +64 -0
- package/dist/tui/phase.d.ts.map +1 -0
- package/dist/tui/phase.js +112 -0
- package/dist/tui/phase.js.map +1 -0
- package/dist/tui/screens/agent-tabs.d.ts +53 -0
- package/dist/tui/screens/agent-tabs.d.ts.map +1 -0
- package/dist/tui/screens/agent-tabs.js +81 -0
- package/dist/tui/screens/agent-tabs.js.map +1 -0
- package/dist/tui/screens/chat-commands.d.ts +82 -3
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +688 -160
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +57 -5
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +799 -304
- package/dist/tui/screens/chat.js.map +1 -1
- package/dist/tui/screens/common-keys.d.ts +36 -0
- package/dist/tui/screens/common-keys.d.ts.map +1 -0
- package/dist/tui/screens/common-keys.js +67 -0
- package/dist/tui/screens/common-keys.js.map +1 -0
- package/dist/tui/screens/frame-buffer.d.ts +47 -0
- package/dist/tui/screens/frame-buffer.d.ts.map +1 -0
- package/dist/tui/screens/frame-buffer.js +78 -0
- package/dist/tui/screens/frame-buffer.js.map +1 -0
- package/dist/tui/screens/handoff-choice.d.ts +37 -0
- package/dist/tui/screens/handoff-choice.d.ts.map +1 -0
- package/dist/tui/screens/handoff-choice.js +42 -0
- package/dist/tui/screens/handoff-choice.js.map +1 -0
- package/dist/tui/screens/index.d.ts +11 -9
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +9 -8
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input-row.d.ts +64 -0
- package/dist/tui/screens/input-row.d.ts.map +1 -0
- package/dist/tui/screens/input-row.js +67 -0
- package/dist/tui/screens/input-row.js.map +1 -0
- package/dist/tui/screens/input.d.ts +77 -1
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +125 -8
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +42 -3
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +43 -13
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts +6 -36
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +8 -71
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts +29 -0
- package/dist/tui/screens/messages-view.d.ts.map +1 -0
- package/dist/tui/screens/messages-view.js +162 -0
- package/dist/tui/screens/messages-view.js.map +1 -0
- package/dist/tui/screens/notice-bar.d.ts +5 -0
- package/dist/tui/screens/notice-bar.d.ts.map +1 -0
- package/dist/tui/screens/notice-bar.js +21 -0
- package/dist/tui/screens/notice-bar.js.map +1 -0
- package/dist/tui/screens/notice.d.ts +66 -0
- package/dist/tui/screens/notice.d.ts.map +1 -0
- package/dist/tui/screens/notice.js +106 -0
- package/dist/tui/screens/notice.js.map +1 -0
- package/dist/tui/screens/overlays.d.ts.map +1 -1
- package/dist/tui/screens/overlays.js +4 -3
- package/dist/tui/screens/overlays.js.map +1 -1
- package/dist/tui/screens/render.d.ts +2 -4
- package/dist/tui/screens/render.d.ts.map +1 -1
- package/dist/tui/screens/render.js +19 -50
- package/dist/tui/screens/render.js.map +1 -1
- package/dist/tui/screens/splash.d.ts +1 -1
- package/dist/tui/screens/splash.d.ts.map +1 -1
- package/dist/tui/screens/splash.js +12 -3
- package/dist/tui/screens/splash.js.map +1 -1
- package/dist/tui/screens/use-chat-viewport.d.ts +22 -0
- package/dist/tui/screens/use-chat-viewport.d.ts.map +1 -0
- package/dist/tui/screens/use-chat-viewport.js +50 -0
- package/dist/tui/screens/use-chat-viewport.js.map +1 -0
- package/dist/tui/screens/use-input-editing.d.ts +69 -0
- package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
- package/dist/tui/screens/use-input-editing.js +220 -0
- package/dist/tui/screens/use-input-editing.js.map +1 -0
- package/dist/tui/screens/use-overlays.d.ts +25 -0
- package/dist/tui/screens/use-overlays.d.ts.map +1 -0
- package/dist/tui/screens/use-overlays.js +32 -0
- package/dist/tui/screens/use-overlays.js.map +1 -0
- package/dist/tui/screens/use-wizard-host.d.ts +46 -0
- package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
- package/dist/tui/screens/use-wizard-host.js +123 -0
- package/dist/tui/screens/use-wizard-host.js.map +1 -0
- package/dist/tui/status-segments.d.ts +37 -0
- package/dist/tui/status-segments.d.ts.map +1 -0
- package/dist/tui/status-segments.js +166 -0
- package/dist/tui/status-segments.js.map +1 -0
- package/dist/tui/text.d.ts +27 -7
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +116 -38
- package/dist/tui/text.js.map +1 -1
- package/dist/tui/theme.d.ts +2 -0
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +2 -0
- package/dist/tui/theme.js.map +1 -1
- package/dist/tui/token-rate.d.ts +83 -0
- package/dist/tui/token-rate.d.ts.map +1 -0
- package/dist/tui/token-rate.js +195 -0
- package/dist/tui/token-rate.js.map +1 -0
- package/dist/types.d.ts +7 -8
- package/dist/types.d.ts.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-compare.d.ts +37 -0
- package/dist/version-compare.d.ts.map +1 -0
- package/dist/version-compare.js +105 -0
- package/dist/version-compare.js.map +1 -0
- package/dist/version.js.map +1 -1
- package/package.json +5 -4
- package/dist/auto-migrate-confirm-plugin.d.ts +0 -58
- package/dist/auto-migrate-confirm-plugin.d.ts.map +0 -1
- package/dist/auto-migrate-confirm-plugin.js +0 -61
- package/dist/auto-migrate-confirm-plugin.js.map +0 -1
- package/dist/migration-service.d.ts +0 -15
- package/dist/migration-service.d.ts.map +0 -1
- package/dist/migration-service.js +0 -59
- package/dist/migration-service.js.map +0 -1
- package/dist/tui/screens/state.d.ts +0 -30
- package/dist/tui/screens/state.d.ts.map +0 -1
- package/dist/tui/screens/state.js +0 -100
- package/dist/tui/screens/state.js.map +0 -1
package/dist/tui/text.js
CHANGED
|
@@ -4,37 +4,94 @@
|
|
|
4
4
|
* 从 `screens.tsx` 中抽出,供对话屏、凭据设置屏、配置中心共用,
|
|
5
5
|
* 避免 `screens.tsx ↔ config-wizard.tsx` 相互 import 形成循环依赖。
|
|
6
6
|
*/
|
|
7
|
+
import stringWidth from "string-width";
|
|
8
|
+
import { isMouseSequence } from "./mouse.js";
|
|
7
9
|
// ==================== 显示宽度 ====================
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
//
|
|
11
|
+
// 宽度计算直接交给 `string-width` —— **Ink 排版时用的就是它**
|
|
12
|
+
//(`ink/build/output.js` 第一行 `import stringWidth from 'string-width'`)。
|
|
13
|
+
//
|
|
14
|
+
// 曾经这里手写了一张 `isWide` 区间表,逐 code point 累加。结果是两把尺子:
|
|
15
|
+
// - `⚡` `✅` `✨` `⭐` 这类 East Asian Wide 符号我们算 1 列、Ink 算 2 列;
|
|
16
|
+
// - `👨👩👧` 逐 code point 累加得 8 列,实际只占 2 列;
|
|
17
|
+
// - `✌️`(VS16 序列)与 `🇨🇳`(国旗对)同样对不上。
|
|
18
|
+
// 于是一切依赖宽度的东西(折行、状态栏装行、光标列号)都差一截,还靠
|
|
19
|
+
// 「预留 1 列余量」硬顶。现在两边用同一把尺子,这类偏差从根上没了。
|
|
20
|
+
//
|
|
21
|
+
// 仍然需要 `graphemes()`:`string-width` 只管宽度,不管「光标该以什么为单位移动」。
|
|
22
|
+
/**
|
|
23
|
+
* 单簇宽度缓存 —— `string-width` 内部要跑 emoji / EAW 正则,而折行是每帧热路径;
|
|
24
|
+
* 字素簇的种类远少于出现次数,缓存后几乎零成本。
|
|
25
|
+
*/
|
|
26
|
+
const clusterWidthCache = new Map();
|
|
27
|
+
const CLUSTER_CACHE_LIMIT = 4096;
|
|
28
|
+
/** 终端显示宽度(按字素簇,与 Ink 的排版完全一致) */
|
|
25
29
|
export function displayWidth(text) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
if (text === "")
|
|
31
|
+
return 0;
|
|
32
|
+
return stringWidth(text);
|
|
33
|
+
}
|
|
34
|
+
/** 单个字素簇的显示宽度(结果带缓存) */
|
|
35
|
+
export function clusterWidth(cluster) {
|
|
36
|
+
if (cluster === "")
|
|
37
|
+
return 0;
|
|
38
|
+
const cached = clusterWidthCache.get(cluster);
|
|
39
|
+
if (cached !== undefined)
|
|
40
|
+
return cached;
|
|
41
|
+
const width = stringWidth(cluster);
|
|
42
|
+
if (clusterWidthCache.size >= CLUSTER_CACHE_LIMIT)
|
|
43
|
+
clusterWidthCache.clear();
|
|
44
|
+
clusterWidthCache.set(cluster, width);
|
|
33
45
|
return width;
|
|
34
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* 把一个字符串切成**字素簇**(用户感知的「一个字符」)。
|
|
49
|
+
*
|
|
50
|
+
* 为什么不能按 code point 切:`✌️` 是 `U+270C U+FE0F` 两个 code point、`👨👩👧` 是
|
|
51
|
+
* 五个、`🇨🇳` 是两个区域指示符——它们都是**一个**字素簇。按 code point 切会让光标
|
|
52
|
+
* 停在簇中间(例如停在 `✌` 与 `U+FE0F` 之间),后果是:
|
|
53
|
+
* - 反显光标变成在反显一个变体选择符 —— 屏幕上什么都不显示(实测:Ink 的输出里
|
|
54
|
+
* 整个反显段直接消失);
|
|
55
|
+
* - 退格只删掉半个 emoji,留下一个孤立的 `U+FE0F`;
|
|
56
|
+
* - 光标列号也会因为「半个簇」的宽度而算错。
|
|
57
|
+
*
|
|
58
|
+
* 用 `Intl.Segmenter`(Node 内置,无需依赖);环境不支持时退回 code point 切分。
|
|
59
|
+
*/
|
|
60
|
+
const segmenter = typeof Intl !== "undefined" && typeof Intl.Segmenter === "function"
|
|
61
|
+
? new Intl.Segmenter("zh", { granularity: "grapheme" })
|
|
62
|
+
: null;
|
|
63
|
+
/**
|
|
64
|
+
* 「可能出现多个 code point 合为一簇」的码位集合。命中才需要 `Intl.Segmenter`。
|
|
65
|
+
*
|
|
66
|
+
* 折行是每帧热路径,而 `Segmenter.segment()` 比直接遍历慢一个数量级;但绝大多数
|
|
67
|
+
* 文本(ASCII / CJK / 代码)每一簇就是一个 code point,根本不需要分词器。
|
|
68
|
+
* 实测一帧 60 行中文:663 µs → 52 µs。
|
|
69
|
+
*
|
|
70
|
+
* 命中条件必须**宁可误报不可漏报**(误报只是走慢路径,漏报会切错字):
|
|
71
|
+
* - `\u{10000}-\u{10FFFF}`:astral 平面(emoji、区域指示符、肤色修饰符、
|
|
72
|
+
* tag 序列、扩展汉字)。注意**不能**写 `\uD800-\uDFFF`:`u` 模式下那是
|
|
73
|
+
* 「孤立代理项」,合法的 astral 字符(已合成为一个码位)反而匹配不到;
|
|
74
|
+
* - `\u000D`:CRLF 是一个字素簇(`\r\n` 两个 code point);
|
|
75
|
+
* - `\u200C` `\u200D`:ZWNJ / ZWJ(连字与 emoji 家族连接);
|
|
76
|
+
* - `\u1100-\u11FF`:韩文组合字母(`\u1100\u1161\u11A8` 三簇合一);
|
|
77
|
+
* - `\p{M}`:所有组合附加符(拉丁、天城文、阿拉伯文、键帽 U+20E3、
|
|
78
|
+
* 变体选择符 U+FE00-FE0F …)。这一条覆盖不了用枚举列全,必须用 Unicode 属性。
|
|
79
|
+
*/
|
|
80
|
+
const NEEDS_SEGMENTER = /[\u{10000}-\u{10FFFF}\u000D\u200C\u200D\u1100-\u11FF\p{M}]/u;
|
|
81
|
+
export function graphemes(text) {
|
|
82
|
+
if (text === "")
|
|
83
|
+
return [];
|
|
84
|
+
// 每簇就是一个 code point 的普通文本:直接切,省掉整个分词器
|
|
85
|
+
if (!segmenter || !NEEDS_SEGMENTER.test(text))
|
|
86
|
+
return Array.from(text);
|
|
87
|
+
const out = [];
|
|
88
|
+
for (const part of segmenter.segment(text))
|
|
89
|
+
out.push(part.segment);
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
35
92
|
/**
|
|
36
93
|
* 按显示宽度把文本折成多行(保留显式换行)。
|
|
37
|
-
* 拉丁文优先在空格处断行,CJK /
|
|
94
|
+
* 拉丁文优先在空格处断行,CJK / 超长词按**字素簇**硬断;保证每行显示宽度 ≤ limit。
|
|
38
95
|
*/
|
|
39
96
|
export function wrapText(text, limit) {
|
|
40
97
|
const width = Math.max(1, limit);
|
|
@@ -46,8 +103,8 @@ export function wrapText(text, limit) {
|
|
|
46
103
|
}
|
|
47
104
|
let line = "";
|
|
48
105
|
let lineWidth = 0;
|
|
49
|
-
for (const ch of raw) {
|
|
50
|
-
const w =
|
|
106
|
+
for (const ch of graphemes(raw)) {
|
|
107
|
+
const w = clusterWidth(ch);
|
|
51
108
|
if (lineWidth + w > width && line !== "") {
|
|
52
109
|
const space = line.lastIndexOf(" ");
|
|
53
110
|
if (space > 0) {
|
|
@@ -69,14 +126,15 @@ export function wrapText(text, limit) {
|
|
|
69
126
|
return out.length > 0 ? out : [""];
|
|
70
127
|
}
|
|
71
128
|
/**
|
|
72
|
-
* 把输入文本按显示宽度折行,并定位光标(`cursor`
|
|
73
|
-
*
|
|
129
|
+
* 把输入文本按显示宽度折行,并定位光标(`cursor` 为**字素簇**索引)。
|
|
130
|
+
* 折行采用逐簇硬断(不做空格优先),以保证光标映射精确、支持跨行编辑。
|
|
74
131
|
*/
|
|
75
132
|
export function layoutInput(text, cursor, width) {
|
|
76
133
|
const limit = Math.max(1, width);
|
|
77
|
-
const chars =
|
|
134
|
+
const chars = graphemes(text);
|
|
78
135
|
const pos = Math.max(0, Math.min(cursor, chars.length));
|
|
79
136
|
const lines = [];
|
|
137
|
+
const rowStarts = [];
|
|
80
138
|
let line = "";
|
|
81
139
|
let lineWidth = 0;
|
|
82
140
|
let row = 0;
|
|
@@ -84,7 +142,8 @@ export function layoutInput(text, cursor, width) {
|
|
|
84
142
|
let cursorRow = 0;
|
|
85
143
|
let cursorCol = 0;
|
|
86
144
|
let processed = 0;
|
|
87
|
-
|
|
145
|
+
rowStarts.push(0);
|
|
146
|
+
// 记录「处理完 processed 个簇后」的光标位置;processed === pos 即为光标处
|
|
88
147
|
const mark = () => {
|
|
89
148
|
if (processed === pos) {
|
|
90
149
|
cursorRow = row;
|
|
@@ -100,16 +159,18 @@ export function layoutInput(text, cursor, width) {
|
|
|
100
159
|
row += 1;
|
|
101
160
|
col = 0;
|
|
102
161
|
processed += 1;
|
|
162
|
+
rowStarts.push(processed);
|
|
103
163
|
mark();
|
|
104
164
|
continue;
|
|
105
165
|
}
|
|
106
|
-
const w =
|
|
166
|
+
const w = clusterWidth(ch);
|
|
107
167
|
if (col > 0 && lineWidth + w > limit) {
|
|
108
168
|
lines.push(line);
|
|
109
169
|
line = "";
|
|
110
170
|
lineWidth = 0;
|
|
111
171
|
row += 1;
|
|
112
172
|
col = 0;
|
|
173
|
+
rowStarts.push(processed); // 软折行不消耗字符
|
|
113
174
|
}
|
|
114
175
|
line += ch;
|
|
115
176
|
lineWidth += w;
|
|
@@ -119,27 +180,33 @@ export function layoutInput(text, cursor, width) {
|
|
|
119
180
|
}
|
|
120
181
|
lines.push(line);
|
|
121
182
|
mark();
|
|
122
|
-
return { lines, cursorRow, cursorCol };
|
|
183
|
+
return { lines, rowStarts, cursorRow, cursorCol };
|
|
123
184
|
}
|
|
124
185
|
/** 单行输入左侧留白:Box paddingX(1) + 提示符 `❯ `(宽 2) */
|
|
125
186
|
export const INPUT_PREFIX_WIDTH = 3;
|
|
126
187
|
/**
|
|
127
|
-
*
|
|
188
|
+
* 判断一段输入是否为「终端上报序列」而非用户输入。
|
|
128
189
|
*
|
|
129
190
|
* 典型来源:
|
|
130
191
|
* - Kitty 键盘协议查询的应答:`CSI ? <flags> u`(Ink 开启 `kittyKeyboard` 时会发 `CSI ? u`);
|
|
131
192
|
* - 光标位置报告(CPR):`CSI <row>;<col> R`;
|
|
132
|
-
* - 设备状态报告:`CSI ? <n> n
|
|
193
|
+
* - 设备状态报告:`CSI ? <n> n`;
|
|
194
|
+
* - 鼠标上报(SGR):`CSI < b ; x ; y M`——滚轮 / 点击 / 拖拽,见 `mouse.ts`。
|
|
133
195
|
*
|
|
134
196
|
* 这类序列本应由 Ink 的解析器整体吞掉。但当它被**拆包**时(前导 ESC 被 Ink 的
|
|
135
197
|
* 「待定转义刷新定时器」当作一次独立的 Escape 键消费),残留在后一个 chunk 里的
|
|
136
198
|
* `[?0u` 会退化成普通文本并被当作输入插入输入框(实测重现)。此处做一层护栏;
|
|
137
199
|
* 根因(不再向终端发查询)已在渲染选项里关闭。
|
|
200
|
+
*
|
|
201
|
+
* 鼠标上报是**主动开启**的(`src/tui/mouse.ts`),且 Ink 会把整条序列当作 `char`
|
|
202
|
+
* 交给 `useInput`,所以这里必须兜住——否则滚一下就往输入框里插一段 `[<64;10;5M`。
|
|
203
|
+
* 注意:需要读滚轮的屏(对话屏)必须**在处理完滚轮之后**再调用本函数。
|
|
138
204
|
*/
|
|
139
205
|
export function isTerminalReply(sequence) {
|
|
140
206
|
return (/^\[\?\d+u$/.test(sequence) || // Kitty 键盘协议应答(CSI ? <flags> u)
|
|
141
207
|
/^\[\d+;\d+R$/.test(sequence) || // 光标位置报告(CSI <row>;<col> R)
|
|
142
|
-
/^\[\?\d+n$/.test(sequence) // 设备状态报告(CSI ? <n> n)
|
|
208
|
+
/^\[\?\d+n$/.test(sequence) || // 设备状态报告(CSI ? <n> n)
|
|
209
|
+
isMouseSequence(sequence) // 鼠标上报(CSI < b ; x ; y M|m)
|
|
143
210
|
);
|
|
144
211
|
}
|
|
145
212
|
/**
|
|
@@ -154,8 +221,8 @@ export function clipWidth(text, max) {
|
|
|
154
221
|
return text;
|
|
155
222
|
let out = "";
|
|
156
223
|
let width = 0;
|
|
157
|
-
for (const ch of text) {
|
|
158
|
-
const w =
|
|
224
|
+
for (const ch of graphemes(text)) {
|
|
225
|
+
const w = clusterWidth(ch);
|
|
159
226
|
if (width + w > limit - 1)
|
|
160
227
|
break; // 预留 1 列给省略号
|
|
161
228
|
out += ch;
|
|
@@ -188,4 +255,15 @@ export function usableFrameRows(terminalRows) {
|
|
|
188
255
|
export function bottomPadding(terminalRows, contentLines) {
|
|
189
256
|
return Math.max(0, usableFrameRows(terminalRows) - Math.max(0, contentLines));
|
|
190
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* 去掉 CwdTrackerPlugin 追加在用户消息末尾的工作目录提示。
|
|
260
|
+
* 该提示是喂给模型的上下文,不该显示给用户。
|
|
261
|
+
*/
|
|
262
|
+
export function stripCwdNote(text) {
|
|
263
|
+
// 两代格式都要认:新(英文 + system-injected 标记)与旧存档里的中文格式。
|
|
264
|
+
// 旧格式不认会把磁盘上已有会话的 cwd 笔记渲染出来。
|
|
265
|
+
return text
|
|
266
|
+
.replace(/\n+\[system-injected: [^\]\n]*\]\nCurrent working directory: [^\n]*$/, "")
|
|
267
|
+
.replace(/\n+(?:\[工作目录变更\]\n)?当前工作目录: [^\n]*$/, "");
|
|
268
|
+
}
|
|
191
269
|
//# sourceMappingURL=text.js.map
|
package/dist/tui/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/tui/text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/tui/text.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/theme.d.ts
CHANGED
package/dist/tui/theme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yBAAyB;AACzB,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yBAAyB;AACzB,eAAO,MAAM,KAAK;IAChB,KAAK,YAAG,SAAS,EAAE,SAAS,EAAE,SAAS;IACvC,MAAM;IACN,IAAI;IACJ,SAAS;IACT,SAAS;IACT,IAAI;IACJ,KAAK;IACL,EAAE;IACF,+CAA+C;IAC/C,OAAO;IACP,IAAI;IACJ,GAAG;IACH,KAAK;IACL,MAAM;IACN,SAAS;CACV,CAAC;AAEF,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA6B5C,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEpD;AAID,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAOzC;AAED,wBAAgB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAG5C;AAED,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtE;AAID,sBAAsB;AACtB,eAAO,MAAM,SAAS,EAAE,MAAM,EAO7B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,eAAe,QAA8C,CAAC;AAE3E,wBAAwB;AACxB,eAAO,MAAM,YAAY,EAAE,MAAM,EAAqB,CAAC;AAEvD,yBAAyB;AACzB,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,CAUvF"}
|
package/dist/tui/theme.js
CHANGED
package/dist/tui/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU;IACjD,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;CACrB,CAAC;AAUF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAA8B;IAC/C,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;IACzC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC1B,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC7B,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACtD,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC1B,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/B,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC3B,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IACzB,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC1B,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;IAC9B,qDAAqD;IACrD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ;IACnD,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,+BAA+B;IACvD,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS;IACrC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS;IACvC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,eAAe;IACrC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW;IACvC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO;CACpC,CAAC;AAEF,yDAAyD;AACzD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAMD,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/B,OAAO;QACL,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAM;IAClC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACtD,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,KAAwB,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,uDAAuD;AAEvD,sBAAsB;AACtB,MAAM,CAAC,MAAM,SAAS,GAAa;IACjC,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;CAC5C,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE3E,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAa,CAAC,cAAc,CAAC,CAAC;AAEvD,yBAAyB;AACzB,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,OAAO,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAe,EAAE,KAAK,GAAG,CAAC;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAC3B,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;QAC1E,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成过程的 token 速率统计 —— 纯逻辑,不依赖 React / Ink / SDK
|
|
3
|
+
*
|
|
4
|
+
* 需求是「每秒接收多少 token」,而 SDK 只在**每个请求的最后一个 chunk** 才给出
|
|
5
|
+
* `usage`(`stream_options.include_usage`),拿不到逐 token 的用量。所以这里分两路:
|
|
6
|
+
*
|
|
7
|
+
* - **实时速率**:按增量字符估算 token,用 2 秒滑动窗口算(`live`)。它必须靠估算,
|
|
8
|
+
* 否则要等一整轮结束才有数字,就谈不上「实时」;
|
|
9
|
+
* - **本轮平均**:一轮结束时优先用真实 `completion_tokens`(累加多轮工具调用),
|
|
10
|
+
* 除以「首字 → 末字」的时间跨度(`average`)。这段时间不含开头的等待首字。
|
|
11
|
+
*
|
|
12
|
+
* 两者口径不同,展示上也分开(生成中显示实时,结束后显示本轮平均)——把估算值
|
|
13
|
+
* 和精确值混成一个数字才是真的误导。
|
|
14
|
+
*/
|
|
15
|
+
/** 实时速率的滑动窗口:取值越小越「跳」,越大越迟钝 */
|
|
16
|
+
export declare const LIVE_WINDOW_MS = 2000;
|
|
17
|
+
/** 计算速率的最小时间跨度:太短会把「首包爆发」放大成离谱的高速率 */
|
|
18
|
+
export declare const MIN_SPAN_MS = 400;
|
|
19
|
+
/**
|
|
20
|
+
* 按字符估算 token 数(浮点,调用方决定何时取整)。
|
|
21
|
+
*
|
|
22
|
+
* 权重取值依据:中文/全角约 0.7 token 一个字(DeepSeek / GLM 系分词器实测区间
|
|
23
|
+
* 0.6~0.8),其余非空白字符约 0.25(≈4 字符一个 token),空白约 0.1(多半与前词
|
|
24
|
+
* 合并,但不为零)。这是**估算**,用于实时速率;精确值一律以 `usage` 为准。
|
|
25
|
+
*/
|
|
26
|
+
export declare function estimateTokens(text: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* 从流式 chunk 里取出「本次新增的输出文本」:正文 + 思考 + 工具参数。
|
|
29
|
+
*
|
|
30
|
+
* 三者都是模型实打实吐出来的 token,只统计正文会低估(尤其推理模型的思考段)。
|
|
31
|
+
*/
|
|
32
|
+
export declare function deltaText(chunk: any): string;
|
|
33
|
+
/** 一次快照:生成中看 `live`,结束后看 `average` */
|
|
34
|
+
export interface RateSample {
|
|
35
|
+
/** 实时速率(token/秒,最近窗口估算);无数据时为 null */
|
|
36
|
+
live: number | null;
|
|
37
|
+
/** 本轮平均速率(token/秒,优先真实 usage);一轮未结束时为 null */
|
|
38
|
+
average: number | null;
|
|
39
|
+
/** 本轮是否仍在生成 */
|
|
40
|
+
running: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** 无数据的快照(状态栏据此不显示速率段) */
|
|
43
|
+
export declare const IDLE_RATE: RateSample;
|
|
44
|
+
/**
|
|
45
|
+
* 速率统计器。
|
|
46
|
+
*
|
|
47
|
+
* 生命周期由调用方驱动:`begin()`(一轮开始)→ 若干个 `addDelta()` / `addExact()`
|
|
48
|
+
* → `finish()`(一轮结束)。时间一律可注入,便于单测不依赖真实时钟。
|
|
49
|
+
*/
|
|
50
|
+
export declare class TokenRateMeter {
|
|
51
|
+
private samples;
|
|
52
|
+
/** 估算的累计输出 token */
|
|
53
|
+
private estimated;
|
|
54
|
+
/** 真实 `completion_tokens` 累加(多轮工具调用逐轮相加) */
|
|
55
|
+
private exact;
|
|
56
|
+
private startedAt;
|
|
57
|
+
private firstOutputAt;
|
|
58
|
+
private lastOutputAt;
|
|
59
|
+
private finished;
|
|
60
|
+
private averageValue;
|
|
61
|
+
/** 一轮开始:清空上一轮的所有状态 */
|
|
62
|
+
begin(now?: number): void;
|
|
63
|
+
/** 收到一段增量文本:累加估算 token 并打点 */
|
|
64
|
+
addDelta(text: string, now?: number): void;
|
|
65
|
+
/** 收到真实用量(流末 chunk 的 `usage.completion_tokens`),多轮累加 */
|
|
66
|
+
addExact(completionTokens: number | undefined | null): void;
|
|
67
|
+
/**
|
|
68
|
+
* 一轮结束:算本轮平均速率。
|
|
69
|
+
*
|
|
70
|
+
* 分子优先用真实 `completion_tokens`;分母是「首字 → 末字」的跨度,即真正在接收
|
|
71
|
+
* 内容的那段时间 —— 不含开头的排队等首字,也避免把整轮的思考停顿算成慢。
|
|
72
|
+
*/
|
|
73
|
+
finish(now?: number): void;
|
|
74
|
+
/** 当前快照(供状态栏直接渲染) */
|
|
75
|
+
snapshot(now?: number): RateSample;
|
|
76
|
+
/** 清空(退出 / 重建会话时调用) */
|
|
77
|
+
reset(): void;
|
|
78
|
+
/** 最近窗口的估算速率;窗口内没动静时返回 0(停顿本来就该显示 0,而不是上一秒的高值) */
|
|
79
|
+
private liveRate;
|
|
80
|
+
/** 丢掉窗口外的采样(保留一个窗口起点之前的锚点,用于算基准值) */
|
|
81
|
+
private trim;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=token-rate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-rate.d.ts","sourceRoot":"","sources":["../../src/tui/token-rate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,+BAA+B;AAC/B,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,sCAAsC;AACtC,eAAO,MAAM,WAAW,MAAM,CAAC;AAK/B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAqB5C;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,0BAA0B;AAC1B,eAAO,MAAM,SAAS,EAAE,UAA0D,CAAC;AASnF;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,oBAAoB;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,4CAA4C;IAC5C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAuB;IAE3C,sBAAsB;IACtB,KAAK,CAAC,GAAG,GAAE,MAAmB,GAAG,IAAI,CASpC;IAED,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CASrD;IAED,wDAAwD;IACxD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAI1D;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAG,GAAE,MAAmB,GAAG,IAAI,CAWrC;IAED,qBAAqB;IACrB,QAAQ,CAAC,GAAG,GAAE,MAAmB,GAAG,UAAU,CAI7C;IAED,uBAAuB;IACvB,KAAK,IAAI,IAAI,CASZ;IAED,kDAAkD;IAClD,OAAO,CAAC,QAAQ;IAkBhB,qCAAqC;IACrC,OAAO,CAAC,IAAI;CASb"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成过程的 token 速率统计 —— 纯逻辑,不依赖 React / Ink / SDK
|
|
3
|
+
*
|
|
4
|
+
* 需求是「每秒接收多少 token」,而 SDK 只在**每个请求的最后一个 chunk** 才给出
|
|
5
|
+
* `usage`(`stream_options.include_usage`),拿不到逐 token 的用量。所以这里分两路:
|
|
6
|
+
*
|
|
7
|
+
* - **实时速率**:按增量字符估算 token,用 2 秒滑动窗口算(`live`)。它必须靠估算,
|
|
8
|
+
* 否则要等一整轮结束才有数字,就谈不上「实时」;
|
|
9
|
+
* - **本轮平均**:一轮结束时优先用真实 `completion_tokens`(累加多轮工具调用),
|
|
10
|
+
* 除以「首字 → 末字」的时间跨度(`average`)。这段时间不含开头的等待首字。
|
|
11
|
+
*
|
|
12
|
+
* 两者口径不同,展示上也分开(生成中显示实时,结束后显示本轮平均)——把估算值
|
|
13
|
+
* 和精确值混成一个数字才是真的误导。
|
|
14
|
+
*/
|
|
15
|
+
/** 实时速率的滑动窗口:取值越小越「跳」,越大越迟钝 */
|
|
16
|
+
export const LIVE_WINDOW_MS = 2000;
|
|
17
|
+
/** 计算速率的最小时间跨度:太短会把「首包爆发」放大成离谱的高速率 */
|
|
18
|
+
export const MIN_SPAN_MS = 400;
|
|
19
|
+
/** 全角 / CJK 字符范围(这些字符在主流分词器里约占 0.7 个 token) */
|
|
20
|
+
const CJK = /[\u2e80-\u9fff\u3000-\u303f\uff00-\uffef\uac00-\ud7af]/;
|
|
21
|
+
/**
|
|
22
|
+
* 按字符估算 token 数(浮点,调用方决定何时取整)。
|
|
23
|
+
*
|
|
24
|
+
* 权重取值依据:中文/全角约 0.7 token 一个字(DeepSeek / GLM 系分词器实测区间
|
|
25
|
+
* 0.6~0.8),其余非空白字符约 0.25(≈4 字符一个 token),空白约 0.1(多半与前词
|
|
26
|
+
* 合并,但不为零)。这是**估算**,用于实时速率;精确值一律以 `usage` 为准。
|
|
27
|
+
*/
|
|
28
|
+
export function estimateTokens(text) {
|
|
29
|
+
if (!text)
|
|
30
|
+
return 0;
|
|
31
|
+
let tokens = 0;
|
|
32
|
+
for (const char of text) {
|
|
33
|
+
if (/\s/.test(char))
|
|
34
|
+
tokens += 0.1;
|
|
35
|
+
else
|
|
36
|
+
tokens += CJK.test(char) ? 0.7 : 0.25;
|
|
37
|
+
}
|
|
38
|
+
return tokens;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 从流式 chunk 里取出「本次新增的输出文本」:正文 + 思考 + 工具参数。
|
|
42
|
+
*
|
|
43
|
+
* 三者都是模型实打实吐出来的 token,只统计正文会低估(尤其推理模型的思考段)。
|
|
44
|
+
*/
|
|
45
|
+
export function deltaText(chunk) {
|
|
46
|
+
const delta = chunk?.choices?.[0]?.delta;
|
|
47
|
+
if (!delta)
|
|
48
|
+
return "";
|
|
49
|
+
let text = "";
|
|
50
|
+
const content = delta.content;
|
|
51
|
+
if (typeof content === "string") {
|
|
52
|
+
text += content;
|
|
53
|
+
}
|
|
54
|
+
else if (Array.isArray(content)) {
|
|
55
|
+
for (const section of content) {
|
|
56
|
+
if (section && typeof section.text === "string")
|
|
57
|
+
text += section.text;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (typeof delta.reasoning_content === "string")
|
|
61
|
+
text += delta.reasoning_content;
|
|
62
|
+
if (Array.isArray(delta.tool_calls)) {
|
|
63
|
+
for (const call of delta.tool_calls) {
|
|
64
|
+
if (typeof call?.function?.name === "string")
|
|
65
|
+
text += call.function.name;
|
|
66
|
+
if (typeof call?.function?.arguments === "string")
|
|
67
|
+
text += call.function.arguments;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return text;
|
|
71
|
+
}
|
|
72
|
+
/** 无数据的快照(状态栏据此不显示速率段) */
|
|
73
|
+
export const IDLE_RATE = { live: null, average: null, running: false };
|
|
74
|
+
/**
|
|
75
|
+
* 速率统计器。
|
|
76
|
+
*
|
|
77
|
+
* 生命周期由调用方驱动:`begin()`(一轮开始)→ 若干个 `addDelta()` / `addExact()`
|
|
78
|
+
* → `finish()`(一轮结束)。时间一律可注入,便于单测不依赖真实时钟。
|
|
79
|
+
*/
|
|
80
|
+
export class TokenRateMeter {
|
|
81
|
+
samples = [];
|
|
82
|
+
/** 估算的累计输出 token */
|
|
83
|
+
estimated = 0;
|
|
84
|
+
/** 真实 `completion_tokens` 累加(多轮工具调用逐轮相加) */
|
|
85
|
+
exact = 0;
|
|
86
|
+
startedAt = null;
|
|
87
|
+
firstOutputAt = null;
|
|
88
|
+
lastOutputAt = null;
|
|
89
|
+
finished = false;
|
|
90
|
+
averageValue = null;
|
|
91
|
+
/** 一轮开始:清空上一轮的所有状态 */
|
|
92
|
+
begin(now = Date.now()) {
|
|
93
|
+
this.samples = [];
|
|
94
|
+
this.estimated = 0;
|
|
95
|
+
this.exact = 0;
|
|
96
|
+
this.startedAt = now;
|
|
97
|
+
this.firstOutputAt = null;
|
|
98
|
+
this.lastOutputAt = null;
|
|
99
|
+
this.finished = false;
|
|
100
|
+
this.averageValue = null;
|
|
101
|
+
}
|
|
102
|
+
/** 收到一段增量文本:累加估算 token 并打点 */
|
|
103
|
+
addDelta(text, now = Date.now()) {
|
|
104
|
+
const tokens = estimateTokens(text);
|
|
105
|
+
if (tokens <= 0)
|
|
106
|
+
return;
|
|
107
|
+
if (this.startedAt == null)
|
|
108
|
+
this.begin(now);
|
|
109
|
+
this.estimated += tokens;
|
|
110
|
+
this.firstOutputAt ??= now;
|
|
111
|
+
this.lastOutputAt = now;
|
|
112
|
+
this.samples.push({ t: now, tokens: this.estimated });
|
|
113
|
+
this.trim(now);
|
|
114
|
+
}
|
|
115
|
+
/** 收到真实用量(流末 chunk 的 `usage.completion_tokens`),多轮累加 */
|
|
116
|
+
addExact(completionTokens) {
|
|
117
|
+
if (typeof completionTokens !== "number" || !Number.isFinite(completionTokens))
|
|
118
|
+
return;
|
|
119
|
+
if (completionTokens <= 0)
|
|
120
|
+
return;
|
|
121
|
+
this.exact += completionTokens;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 一轮结束:算本轮平均速率。
|
|
125
|
+
*
|
|
126
|
+
* 分子优先用真实 `completion_tokens`;分母是「首字 → 末字」的跨度,即真正在接收
|
|
127
|
+
* 内容的那段时间 —— 不含开头的排队等首字,也避免把整轮的思考停顿算成慢。
|
|
128
|
+
*/
|
|
129
|
+
finish(now = Date.now()) {
|
|
130
|
+
this.finished = true;
|
|
131
|
+
const tokens = this.exact > 0 ? this.exact : this.estimated;
|
|
132
|
+
const from = this.firstOutputAt ?? this.startedAt;
|
|
133
|
+
const to = this.lastOutputAt ?? now;
|
|
134
|
+
if (tokens <= 0 || from == null) {
|
|
135
|
+
this.averageValue = null;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const spanMs = to - from;
|
|
139
|
+
this.averageValue = spanMs >= MIN_SPAN_MS ? tokens / (spanMs / 1000) : null;
|
|
140
|
+
}
|
|
141
|
+
/** 当前快照(供状态栏直接渲染) */
|
|
142
|
+
snapshot(now = Date.now()) {
|
|
143
|
+
if (this.startedAt == null)
|
|
144
|
+
return IDLE_RATE;
|
|
145
|
+
if (this.finished)
|
|
146
|
+
return { live: null, average: this.averageValue, running: false };
|
|
147
|
+
return { live: this.liveRate(now), average: null, running: true };
|
|
148
|
+
}
|
|
149
|
+
/** 清空(退出 / 重建会话时调用) */
|
|
150
|
+
reset() {
|
|
151
|
+
this.samples = [];
|
|
152
|
+
this.estimated = 0;
|
|
153
|
+
this.exact = 0;
|
|
154
|
+
this.startedAt = null;
|
|
155
|
+
this.firstOutputAt = null;
|
|
156
|
+
this.lastOutputAt = null;
|
|
157
|
+
this.finished = false;
|
|
158
|
+
this.averageValue = null;
|
|
159
|
+
}
|
|
160
|
+
/** 最近窗口的估算速率;窗口内没动静时返回 0(停顿本来就该显示 0,而不是上一秒的高值) */
|
|
161
|
+
liveRate(now) {
|
|
162
|
+
if (this.samples.length === 0)
|
|
163
|
+
return null;
|
|
164
|
+
// 跨度从**首字**算起:把等首字的排队时间算进来会把速率稀释成端到端吞吐,
|
|
165
|
+
// 首字之后才开始计时间,同时也顺手挡掉了「首包爆发」被放大成离谱高值的问题。
|
|
166
|
+
const from = this.firstOutputAt ?? this.startedAt;
|
|
167
|
+
const windowStart = Math.max(from, now - LIVE_WINDOW_MS);
|
|
168
|
+
const spanMs = now - windowStart;
|
|
169
|
+
if (spanMs < MIN_SPAN_MS)
|
|
170
|
+
return null;
|
|
171
|
+
// 窗口起点对应的累计值:取最后一个不晚于窗口起点的采样
|
|
172
|
+
let base = 0;
|
|
173
|
+
for (const sample of this.samples) {
|
|
174
|
+
if (sample.t <= windowStart)
|
|
175
|
+
base = sample.tokens;
|
|
176
|
+
else
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
return Math.max(0, this.estimated - base) / (spanMs / 1000);
|
|
180
|
+
}
|
|
181
|
+
/** 丢掉窗口外的采样(保留一个窗口起点之前的锚点,用于算基准值) */
|
|
182
|
+
trim(now) {
|
|
183
|
+
const cutoff = now - LIVE_WINDOW_MS;
|
|
184
|
+
let keepFrom = 0;
|
|
185
|
+
for (let i = 0; i < this.samples.length; i += 1) {
|
|
186
|
+
if (this.samples[i].t <= cutoff)
|
|
187
|
+
keepFrom = i;
|
|
188
|
+
else
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
if (keepFrom > 0)
|
|
192
|
+
this.samples = this.samples.slice(keepFrom);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=token-rate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-rate.js","sourceRoot":"","sources":["../../src/tui/token-rate.ts"],"names":[],"mappings":"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"}
|