@ai-zen/cli 1.0.0-alpha.3 → 1.0.0-alpha.31
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 +930 -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 +85 -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 +364 -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
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 鼠标滚轮支持 —— 终端模式开关 + SGR 上报解析
|
|
3
|
+
*
|
|
4
|
+
* 为什么需要自己实现:Ink 7 没有 `useMouse`(整个 `ink/build` 里 "mouse" 只出现在
|
|
5
|
+
* `measure-element.js` 的一句注释中),终端也默认**不把**鼠标事件发给应用——滚轮被
|
|
6
|
+
* 终端自己拿去滚 scrollback。要收到滚轮,必须由应用主动打开终端上报模式。
|
|
7
|
+
*
|
|
8
|
+
* 两种编码,只认后者:
|
|
9
|
+
* - `DECSET 1000`:上报「按钮按下 / 释放」(滚轮也算按钮),是收到滚轮的前提;
|
|
10
|
+
* - `DECSET 1006`:改用 SGR 扩展坐标 `CSI < b ; x ; y M`(释放为 `m`)。**必须开**:
|
|
11
|
+
* 老的 X10 编码(`CSI M` + 3 个原始字节)会被 Ink 的输入解析器拆成 `[M` 和三个
|
|
12
|
+
* 普通字符两条事件,后者会被当正文插进输入框(已实测重现)。
|
|
13
|
+
*
|
|
14
|
+
* 上报到 Ink 的形态(pty 实测):`useInput` 的 `char` 是 `"[<64;10;5M"`,`key` 的
|
|
15
|
+
* 所有标志位都是 false。也就是说**鼠标序列和用户打字走的是同一条路**——任何可能插入
|
|
16
|
+
* 文本的处理器都必须先拦一道(见 `isTerminalReply` 与各屏守卫)。
|
|
17
|
+
*
|
|
18
|
+
* 取舍(用户已知情并选择开启):
|
|
19
|
+
* - 点击 / 拖拽被应用吃掉,多数终端需按住 `Shift` 才回退到原生选词复制;
|
|
20
|
+
* - tmux / screen 需 `set -g mouse off`,否则滚轮先被多路复用器拦进 copy-mode;
|
|
21
|
+
* - 应用内滚动只动视口,不产生终端 scrollback。
|
|
22
|
+
*/
|
|
23
|
+
/** 开启上报:1000(按钮事件,含滚轮)+ 1006(SGR 扩展坐标) */
|
|
24
|
+
export const MOUSE_ENABLE = "\u001b[?1000h\u001b[?1006h";
|
|
25
|
+
/** 关闭上报。任何退出路径都必须下发,否则 shell 提示符后面会开始吐 `^[[<64;…M` */
|
|
26
|
+
export const MOUSE_DISABLE = "\u001b[?1000l\u001b[?1006l";
|
|
27
|
+
/** 滚轮一格滚动的行数(各终端应用的通行值) */
|
|
28
|
+
export const WHEEL_STEP = 3;
|
|
29
|
+
/**
|
|
30
|
+
* SGR 鼠标上报:`CSI < b ; x ; y M|m`。
|
|
31
|
+
*
|
|
32
|
+
* 前导 ESC 可有可无 —— Ink 喂给 `useInput` 的 `char` 已被剥掉 ESC(实测为 `[<64;…`),
|
|
33
|
+
* 但直接处理原始 stdin 数据时它还带着,两种都接受才不会漏。
|
|
34
|
+
*/
|
|
35
|
+
const SGR_MOUSE = /^(?:\u001b)?\[<(\d+);(\d+);(\d+)([Mm])$/;
|
|
36
|
+
/** 修饰位:Shift(4) / Meta(8) / Ctrl(16) / Motion(32) —— 判定滚轮前要剥掉 */
|
|
37
|
+
const MODIFIER_BITS = 0b11100;
|
|
38
|
+
/** 是否为鼠标上报序列(滚轮、点击、拖拽、移动都算) */
|
|
39
|
+
export function isMouseSequence(input) {
|
|
40
|
+
return SGR_MOUSE.test(input);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 从鼠标序列中解出滚轮事件;不是滚轮(点击 / 拖拽 / 横向滚轮)返回 `null`。
|
|
44
|
+
*
|
|
45
|
+
* SGR 的按钮码:`64` 滚轮上、`65` 滚轮下、`66` / `67` 横向滚轮。横向在这个视口里
|
|
46
|
+
* 没有对应维度,直接丢弃——否则横向滚一下就莫名其妙跳几行。
|
|
47
|
+
*/
|
|
48
|
+
export function parseWheel(input) {
|
|
49
|
+
const match = SGR_MOUSE.exec(input);
|
|
50
|
+
if (!match)
|
|
51
|
+
return null;
|
|
52
|
+
const code = Number(match[1]) & ~MODIFIER_BITS;
|
|
53
|
+
if (code !== 64 && code !== 65)
|
|
54
|
+
return null;
|
|
55
|
+
return {
|
|
56
|
+
direction: code === 64 ? -1 : 1,
|
|
57
|
+
x: Number(match[2]),
|
|
58
|
+
y: Number(match[3]),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 打开终端鼠标上报。
|
|
63
|
+
*
|
|
64
|
+
* 输出的是纯模式设置序列(不打印字符、不移动光标),因此可以安全地直接写 stdout,
|
|
65
|
+
* 不会与 Ink 的增量重绘打架。重复下发是幂等的。
|
|
66
|
+
*/
|
|
67
|
+
export function enableMouseTracking(stream = process.stdout) {
|
|
68
|
+
stream.write(MOUSE_ENABLE);
|
|
69
|
+
}
|
|
70
|
+
/** 关闭终端鼠标上报(幂等)。退出 / 信号 / 异常路径都要调用。 */
|
|
71
|
+
export function disableMouseTracking(stream = process.stdout) {
|
|
72
|
+
stream.write(MOUSE_DISABLE);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=mouse.js.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成阶段 —— 消息栏那一行提示的六态判定(纯逻辑,不依赖 React / Ink / SDK)
|
|
3
|
+
*
|
|
4
|
+
* 原先那里只有一个「思考中…」,但一轮对话里模型实际会走过几个阶段,用同一个词概括
|
|
5
|
+
* 在多数时候是**说错话**:等首 token 时并没有在思考,工具执行时更是模型根本没在跑。
|
|
6
|
+
* 于是按数据来源把阶段拆细:
|
|
7
|
+
*
|
|
8
|
+
* | 阶段 | 判据 | 用户真正关心什么 |
|
|
9
|
+
* |------|------|------------------|
|
|
10
|
+
* | `connecting` | `onInnerLoopStart`(请求即将发出)→ `open`(响应头到达) | 是不是网络卡住了 |
|
|
11
|
+
* | `queued` | `open` 之后、首个内容 chunk 之前 | 服务端排队 / 冷启动,还没开始吐字 |
|
|
12
|
+
* | `thinking` | 收到 `reasoning_content` delta | 推理模型中 |
|
|
13
|
+
* | `tool-calling` | 收到 `tool_calls` / `function_call` delta | 模型正在决定调哪个工具、拼参数 |
|
|
14
|
+
* | `tool-waiting` | 流结束(`parsed`)且该轮带工具调用 | 工具在执行,等结果回来才能继续 |
|
|
15
|
+
* | `streaming` | 收到 `content` delta | 正在输出正文 |
|
|
16
|
+
*
|
|
17
|
+
* 判据只用**事件与 delta 的形状**,不读文案、不猜时序;多轮工具调用时阶段会自然
|
|
18
|
+
* 回到 `connecting`(下一轮请求前由插件钩子重置)。
|
|
19
|
+
*/
|
|
20
|
+
/** 生成阶段(见文件头表格) */
|
|
21
|
+
export type PhaseKind = "connecting" | "queued" | "thinking" | "tool-calling" | "tool-waiting" | "streaming";
|
|
22
|
+
export interface PhaseInfo {
|
|
23
|
+
kind: PhaseKind;
|
|
24
|
+
/** 工具名(`tool-calling` / `tool-waiting` 时有值;流式早期可能还没吐到 name) */
|
|
25
|
+
tool?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 阶段跟踪器。生命周期由 `ChatSession` 驱动:
|
|
29
|
+
* `connecting()` → `opened()` → 若干 `delta()` → `streamEnded()` →(下一轮)`connecting()` …
|
|
30
|
+
* 一轮结束调 `reset()`。
|
|
31
|
+
*/
|
|
32
|
+
export declare class PhaseTracker {
|
|
33
|
+
private current;
|
|
34
|
+
/** 当前阶段;空闲(没有在生成的轮次)时为 null */
|
|
35
|
+
get phase(): PhaseInfo | null;
|
|
36
|
+
/** 清空(一轮结束 / 重建会话时调用) */
|
|
37
|
+
reset(): void;
|
|
38
|
+
/** 请求已发出、等响应头(DNS / TCP / TLS / 服务端受理都在这一段) */
|
|
39
|
+
connecting(): void;
|
|
40
|
+
/**
|
|
41
|
+
* 响应头已到(SDK 的 `open` 事件)——连接建立,进入「等首 token」。
|
|
42
|
+
*
|
|
43
|
+
* 注意不能在这里直接进 `thinking`:`open` 只说明服务端受理了请求,
|
|
44
|
+
* 推理模型冷启动排几十秒是常事,那段等待被叫成「思考中」就是在骗人。
|
|
45
|
+
*/
|
|
46
|
+
opened(): void;
|
|
47
|
+
/**
|
|
48
|
+
* 收到一个流式 chunk:按 delta 的实际内容推进阶段。
|
|
49
|
+
*
|
|
50
|
+
* 优先级是 `tool_calls` > `content` > `reasoning_content`:一个 chunk 里同时出现
|
|
51
|
+
* 时,靠后的才代表「模型现在在干什么」(决定调工具 → 工具参数;已经出正文 →
|
|
52
|
+
* 思考阶段结束)。三者都没有(如只带 `usage` 的收尾 chunk)则保持原阶段不变。
|
|
53
|
+
*/
|
|
54
|
+
delta(chunk: unknown): void;
|
|
55
|
+
/**
|
|
56
|
+
* 流结束(SDK 的 `parsed` 事件,参数是本轮 assistant 消息)。
|
|
57
|
+
*
|
|
58
|
+
* 本轮带工具调用 → 接下来是工具执行,模型不在跑;不带 → 由调用方 `reset()`。
|
|
59
|
+
*/
|
|
60
|
+
streamEnded(receiver: unknown): void;
|
|
61
|
+
}
|
|
62
|
+
/** 阶段对应的提示文案(中英由词典决定,这里只做分发) */
|
|
63
|
+
export declare function phaseLabel(phase: PhaseInfo | null): string;
|
|
64
|
+
//# sourceMappingURL=phase.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成阶段 —— 消息栏那一行提示的六态判定(纯逻辑,不依赖 React / Ink / SDK)
|
|
3
|
+
*
|
|
4
|
+
* 原先那里只有一个「思考中…」,但一轮对话里模型实际会走过几个阶段,用同一个词概括
|
|
5
|
+
* 在多数时候是**说错话**:等首 token 时并没有在思考,工具执行时更是模型根本没在跑。
|
|
6
|
+
* 于是按数据来源把阶段拆细:
|
|
7
|
+
*
|
|
8
|
+
* | 阶段 | 判据 | 用户真正关心什么 |
|
|
9
|
+
* |------|------|------------------|
|
|
10
|
+
* | `connecting` | `onInnerLoopStart`(请求即将发出)→ `open`(响应头到达) | 是不是网络卡住了 |
|
|
11
|
+
* | `queued` | `open` 之后、首个内容 chunk 之前 | 服务端排队 / 冷启动,还没开始吐字 |
|
|
12
|
+
* | `thinking` | 收到 `reasoning_content` delta | 推理模型中 |
|
|
13
|
+
* | `tool-calling` | 收到 `tool_calls` / `function_call` delta | 模型正在决定调哪个工具、拼参数 |
|
|
14
|
+
* | `tool-waiting` | 流结束(`parsed`)且该轮带工具调用 | 工具在执行,等结果回来才能继续 |
|
|
15
|
+
* | `streaming` | 收到 `content` delta | 正在输出正文 |
|
|
16
|
+
*
|
|
17
|
+
* 判据只用**事件与 delta 的形状**,不读文案、不猜时序;多轮工具调用时阶段会自然
|
|
18
|
+
* 回到 `connecting`(下一轮请求前由插件钩子重置)。
|
|
19
|
+
*/
|
|
20
|
+
import { t } from "../i18n/index.js";
|
|
21
|
+
/**
|
|
22
|
+
* 阶段跟踪器。生命周期由 `ChatSession` 驱动:
|
|
23
|
+
* `connecting()` → `opened()` → 若干 `delta()` → `streamEnded()` →(下一轮)`connecting()` …
|
|
24
|
+
* 一轮结束调 `reset()`。
|
|
25
|
+
*/
|
|
26
|
+
export class PhaseTracker {
|
|
27
|
+
current = null;
|
|
28
|
+
/** 当前阶段;空闲(没有在生成的轮次)时为 null */
|
|
29
|
+
get phase() {
|
|
30
|
+
return this.current;
|
|
31
|
+
}
|
|
32
|
+
/** 清空(一轮结束 / 重建会话时调用) */
|
|
33
|
+
reset() {
|
|
34
|
+
this.current = null;
|
|
35
|
+
}
|
|
36
|
+
/** 请求已发出、等响应头(DNS / TCP / TLS / 服务端受理都在这一段) */
|
|
37
|
+
connecting() {
|
|
38
|
+
this.current = { kind: "connecting" };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 响应头已到(SDK 的 `open` 事件)——连接建立,进入「等首 token」。
|
|
42
|
+
*
|
|
43
|
+
* 注意不能在这里直接进 `thinking`:`open` 只说明服务端受理了请求,
|
|
44
|
+
* 推理模型冷启动排几十秒是常事,那段等待被叫成「思考中」就是在骗人。
|
|
45
|
+
*/
|
|
46
|
+
opened() {
|
|
47
|
+
this.current = { kind: "queued" };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 收到一个流式 chunk:按 delta 的实际内容推进阶段。
|
|
51
|
+
*
|
|
52
|
+
* 优先级是 `tool_calls` > `content` > `reasoning_content`:一个 chunk 里同时出现
|
|
53
|
+
* 时,靠后的才代表「模型现在在干什么」(决定调工具 → 工具参数;已经出正文 →
|
|
54
|
+
* 思考阶段结束)。三者都没有(如只带 `usage` 的收尾 chunk)则保持原阶段不变。
|
|
55
|
+
*/
|
|
56
|
+
delta(chunk) {
|
|
57
|
+
const delta = chunk?.choices?.[0]?.delta;
|
|
58
|
+
if (!delta || typeof delta !== "object")
|
|
59
|
+
return;
|
|
60
|
+
const toolCall = Array.isArray(delta.tool_calls) ? delta.tool_calls[0] : undefined;
|
|
61
|
+
if (toolCall || delta.function_call) {
|
|
62
|
+
// 工具名只在首个 delta 里给出,后续 delta 只带参数片段 → 沿用已知的名字
|
|
63
|
+
const name = toolCall?.function?.name || delta.function_call?.name || this.current?.tool;
|
|
64
|
+
this.current = { kind: "tool-calling", tool: name || undefined };
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (delta.content) {
|
|
68
|
+
this.current = { kind: "streaming" };
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (delta.reasoning_content) {
|
|
72
|
+
this.current = { kind: "thinking" };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 流结束(SDK 的 `parsed` 事件,参数是本轮 assistant 消息)。
|
|
77
|
+
*
|
|
78
|
+
* 本轮带工具调用 → 接下来是工具执行,模型不在跑;不带 → 由调用方 `reset()`。
|
|
79
|
+
*/
|
|
80
|
+
streamEnded(receiver) {
|
|
81
|
+
const message = receiver;
|
|
82
|
+
const calls = Array.isArray(message?.tool_calls) ? message.tool_calls : [];
|
|
83
|
+
if (calls.length === 0 && !message?.function_call)
|
|
84
|
+
return;
|
|
85
|
+
const name = calls[0]?.function?.name || message?.function_call?.name || this.current?.tool;
|
|
86
|
+
this.current = { kind: "tool-waiting", tool: name || undefined };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** 阶段对应的提示文案(中英由词典决定,这里只做分发) */
|
|
90
|
+
export function phaseLabel(phase) {
|
|
91
|
+
if (!phase)
|
|
92
|
+
return t("phase.working");
|
|
93
|
+
switch (phase.kind) {
|
|
94
|
+
case "connecting":
|
|
95
|
+
return t("phase.connecting");
|
|
96
|
+
case "queued":
|
|
97
|
+
return t("phase.queued");
|
|
98
|
+
case "thinking":
|
|
99
|
+
return t("phase.thinking");
|
|
100
|
+
case "streaming":
|
|
101
|
+
return t("phase.streaming");
|
|
102
|
+
case "tool-calling":
|
|
103
|
+
return phase.tool
|
|
104
|
+
? t("phase.toolCallingWith", { name: phase.tool })
|
|
105
|
+
: t("phase.toolCalling");
|
|
106
|
+
case "tool-waiting":
|
|
107
|
+
return phase.tool
|
|
108
|
+
? t("phase.toolWaitingWith", { name: phase.tool })
|
|
109
|
+
: t("phase.toolWaiting");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=phase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase.js","sourceRoot":"","sources":["../../src/tui/phase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAiBrC;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACf,OAAO,GAAqB,IAAI,CAAC;IAEzC,+BAA+B;IAC/B,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,+CAA+C;IAC/C,UAAU;QACR,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAc;QAClB,MAAM,KAAK,GAAI,KAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO;QAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,IAAI,QAAQ,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACpC,8CAA8C;YAC9C,MAAM,IAAI,GACR,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAC9E,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;YACjE,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAiB;QAC3B,MAAM,OAAO,GAAG,QAAe,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa;YAAE,OAAO;QAC1D,MAAM,IAAI,GACR,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,OAAO,EAAE,aAAa,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;QACjF,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;IACnE,CAAC;CACF;AAED,gCAAgC;AAChC,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,IAAI;gBACf,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClD,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC7B,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,IAAI;gBACf,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClD,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** 一个可切换的 Agent 条目 */
|
|
2
|
+
export interface AgentTab {
|
|
3
|
+
/** 稳定 id:`"main"` 或子 Agent 视图 id */
|
|
4
|
+
id: string;
|
|
5
|
+
/** 展示名(主 Agent 用 `agentTabs.main`,子 Agent 用 `agentTabs.sub` 带序号) */
|
|
6
|
+
label: string;
|
|
7
|
+
/** 执行状态;undefined = 不画圆点(主 Agent 的忙碌由输入行的 Spinner 表示) */
|
|
8
|
+
status?: AgentTabStatus;
|
|
9
|
+
}
|
|
10
|
+
/** 子 Agent 的执行状态 */
|
|
11
|
+
export type AgentTabStatus = "running" | "done" | "failed";
|
|
12
|
+
/**
|
|
13
|
+
* 状态符号:三种状态**同形不同色**(蓝 / 绿 / 红)。
|
|
14
|
+
*
|
|
15
|
+
* 用 `◈`(U+25C8):比 `•` 更像个「状态指示符」,又不像 `●` 那样把一行密集文本撑得松散。
|
|
16
|
+
* 符号位于标签**之前**,使各标签的文字起始位置对齐。
|
|
17
|
+
*/
|
|
18
|
+
export declare const AGENT_STATUS_DOT = "\u25C8";
|
|
19
|
+
/**
|
|
20
|
+
* 状态圆点的颜色 —— 状态的**唯一视觉真相**。
|
|
21
|
+
*
|
|
22
|
+
* 运行中在「亮蓝 ↔ 暗」之间交替(闪烁),其余状态恒定。抽成纯函数是因为颜色没法在
|
|
23
|
+
* 测试里断言(`ink-testing-library` 的 stdout 不是 TTY,Ink 不输出 ANSI)。
|
|
24
|
+
*
|
|
25
|
+
* @param blinkOn 仅对 `running` 有意义:false 时返回暗色,形成一亮一暗的闪烁
|
|
26
|
+
*/
|
|
27
|
+
export declare function agentStatusColor(status: AgentTabStatus, blinkOn?: boolean): string;
|
|
28
|
+
/** 闪烁周期(毫秒):一亮一暗为一个完整周期 */
|
|
29
|
+
export declare const AGENT_BLINK_MS = 500;
|
|
30
|
+
/**
|
|
31
|
+
* 运行中时返回随时间翻转的开关(其余时候恒为 true,且不启定时器)。
|
|
32
|
+
*
|
|
33
|
+
* 定时器只在本组件内驱动自己的重渲染,不牵动上层:`AgentTabs` 的 state 变化只影响
|
|
34
|
+
* 它自己这一行。
|
|
35
|
+
*/
|
|
36
|
+
export declare function useBlink(active: boolean, intervalMs?: number): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 单个栏目的样式 —— 高亮规则的**唯一真相源**(组件与测试共用)。
|
|
39
|
+
*
|
|
40
|
+
* 抽成纯函数是因为颜色没法在测试里断言,只能锁样式契约。
|
|
41
|
+
*/
|
|
42
|
+
export declare function agentTabStyle(active: boolean): {
|
|
43
|
+
color: string;
|
|
44
|
+
bold: boolean;
|
|
45
|
+
backgroundColor?: string;
|
|
46
|
+
};
|
|
47
|
+
export interface AgentTabsProps {
|
|
48
|
+
tabs: readonly AgentTab[];
|
|
49
|
+
/** 当前选中的 id;不在 `tabs` 里时按「主 Agent」处理 */
|
|
50
|
+
activeId: string;
|
|
51
|
+
}
|
|
52
|
+
export declare function AgentTabs({ tabs, activeId }: AgentTabsProps): import("react").JSX.Element;
|
|
53
|
+
//# sourceMappingURL=agent-tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tabs.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/agent-tabs.tsx"],"names":[],"mappings":"AAgBA,sBAAsB;AACtB,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,oBAAoB;AACpB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,WAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,UAAO,GAAG,MAAM,CAG/E;AAED,2BAA2B;AAC3B,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,SAAiB,GAAG,OAAO,CAW9E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAOA;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,+BA0B3D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Agent 栏目 —— 主 Agent 与各子 Agent 之间的切换条。
|
|
3
|
+
//
|
|
4
|
+
// 位置固定在「消息列表下方、通知栏上方」:它切换的是消息列表的内容,所以要紧贴
|
|
5
|
+
// 被它控制的那块区域。行为(何时出现、左右键怎么分流)在 chat.tsx,这里只负责画。
|
|
6
|
+
//
|
|
7
|
+
// 宽度:整条栏目**恰好占一行**。它参与 `computeChatLayout` 的底部高度预算,一旦
|
|
8
|
+
// Ink 自己折出第二行,整帧就会比预算高一行、把输入框顶出屏幕。
|
|
9
|
+
// 所以外层 `<Text wrap="truncate">` 兜住宽度,内层嵌套 `<Text>` 保住逐项着色
|
|
10
|
+
// (Ink 里截断发生在带 `wrap` 的那一层,不会把内层样式丢掉)。
|
|
11
|
+
//
|
|
12
|
+
// 执行状态内联在标签**前**(一个圆点 + 颜色),不另推通知:通知栏凭空多一行会让整帧
|
|
13
|
+
// 高度跳一下。运行中的圆点会闪烁(亮蓝 ↔ 暗),完成后恒为绿色,失败恒为红色。
|
|
14
|
+
import { useEffect, useState } from "react";
|
|
15
|
+
import { Box, Text } from "ink";
|
|
16
|
+
import { theme } from "../theme.js";
|
|
17
|
+
/**
|
|
18
|
+
* 状态符号:三种状态**同形不同色**(蓝 / 绿 / 红)。
|
|
19
|
+
*
|
|
20
|
+
* 用 `◈`(U+25C8):比 `•` 更像个「状态指示符」,又不像 `●` 那样把一行密集文本撑得松散。
|
|
21
|
+
* 符号位于标签**之前**,使各标签的文字起始位置对齐。
|
|
22
|
+
*/
|
|
23
|
+
export const AGENT_STATUS_DOT = "◈";
|
|
24
|
+
/**
|
|
25
|
+
* 状态圆点的颜色 —— 状态的**唯一视觉真相**。
|
|
26
|
+
*
|
|
27
|
+
* 运行中在「亮蓝 ↔ 暗」之间交替(闪烁),其余状态恒定。抽成纯函数是因为颜色没法在
|
|
28
|
+
* 测试里断言(`ink-testing-library` 的 stdout 不是 TTY,Ink 不输出 ANSI)。
|
|
29
|
+
*
|
|
30
|
+
* @param blinkOn 仅对 `running` 有意义:false 时返回暗色,形成一亮一暗的闪烁
|
|
31
|
+
*/
|
|
32
|
+
export function agentStatusColor(status, blinkOn = true) {
|
|
33
|
+
if (status === "running")
|
|
34
|
+
return blinkOn ? theme.running : theme.faint;
|
|
35
|
+
return status === "done" ? theme.ok : theme.error;
|
|
36
|
+
}
|
|
37
|
+
/** 闪烁周期(毫秒):一亮一暗为一个完整周期 */
|
|
38
|
+
export const AGENT_BLINK_MS = 500;
|
|
39
|
+
/**
|
|
40
|
+
* 运行中时返回随时间翻转的开关(其余时候恒为 true,且不启定时器)。
|
|
41
|
+
*
|
|
42
|
+
* 定时器只在本组件内驱动自己的重渲染,不牵动上层:`AgentTabs` 的 state 变化只影响
|
|
43
|
+
* 它自己这一行。
|
|
44
|
+
*/
|
|
45
|
+
export function useBlink(active, intervalMs = AGENT_BLINK_MS) {
|
|
46
|
+
const [on, setOn] = useState(true);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!active) {
|
|
49
|
+
setOn(true);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const timer = setInterval(() => setOn((value) => !value), intervalMs);
|
|
53
|
+
return () => clearInterval(timer);
|
|
54
|
+
}, [active, intervalMs]);
|
|
55
|
+
return on;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 单个栏目的样式 —— 高亮规则的**唯一真相源**(组件与测试共用)。
|
|
59
|
+
*
|
|
60
|
+
* 抽成纯函数是因为颜色没法在测试里断言,只能锁样式契约。
|
|
61
|
+
*/
|
|
62
|
+
export function agentTabStyle(active) {
|
|
63
|
+
return {
|
|
64
|
+
color: active ? theme.assistant : theme.faint,
|
|
65
|
+
bold: active,
|
|
66
|
+
// 背景色块比改字色更能一眼看出「现在看的是谁」;非活动项必须没有背景,否则整条都是高亮
|
|
67
|
+
backgroundColor: active ? theme.border : undefined,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function AgentTabs({ tabs, activeId }) {
|
|
71
|
+
// 只要有一个子 Agent 在跑就闪——整条栏目共用一个节奏,避免几个圆点各闪各的
|
|
72
|
+
const blinkOn = useBlink(tabs.some((tab) => tab.status === "running"));
|
|
73
|
+
return (_jsx(Box, { children: _jsx(Text, { wrap: "truncate", children: tabs.map((tab) => {
|
|
74
|
+
const active = tab.id === activeId;
|
|
75
|
+
// 左右各一个空格作为选项**自身**的 padding(落在高亮块内部),而不是把分隔空格
|
|
76
|
+
// 拼在下一个选项里——后者会让高亮底色贴住上一个选项的文案。
|
|
77
|
+
// 也不靠外层 Box 的 paddingX:那样首个选项的文字会整体右移一格,与 ❯ / 分隔线不齐。
|
|
78
|
+
return (_jsxs(Text, { ...agentTabStyle(active), children: [" ", tab.status ? (_jsx(Text, { color: agentStatusColor(tab.status, blinkOn), children: AGENT_STATUS_DOT })) : null, tab.label, " "] }, tab.id));
|
|
79
|
+
}) }) }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=agent-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tabs.js","sourceRoot":"","sources":["../../../src/tui/screens/agent-tabs.tsx"],"names":[],"mappings":";AAAA,wCAAwC;AACxC,EAAE;AACF,yCAAyC;AACzC,+CAA+C;AAC/C,EAAE;AACF,sDAAsD;AACtD,mCAAmC;AACnC,0DAA0D;AAC1D,uCAAuC;AACvC,EAAE;AACF,+CAA+C;AAC/C,0CAA0C;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAepC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAsB,EAAE,OAAO,GAAG,IAAI;IACrE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACvE,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAe,EAAE,UAAU,GAAG,cAAc;IACnE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QACtE,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IAK3C,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;QAC7C,IAAI,EAAE,MAAM;QACZ,6CAA6C;QAC7C,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAkB;IAC1D,2CAA2C;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,YAClB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChB,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;gBACnC,+CAA+C;gBAC/C,gCAAgC;gBAChC,qDAAqD;gBACrD,OAAO,CACL,MAAC,IAAI,OAAkB,aAAa,CAAC,MAAM,CAAC,aACzC,GAAG,EACH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,YAAG,gBAAgB,GAAQ,CAC9E,CAAC,CAAC,CAAC,IAAI,EACP,GAAG,CAAC,KAAK,EACT,GAAG,KANK,GAAG,CAAC,EAAE,CAOV,CACR,CAAC;YACJ,CAAC,CAAC,GACG,GACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,17 +1,37 @@
|
|
|
1
|
-
import { Dispatch, SetStateAction } from "react";
|
|
1
|
+
import type { Dispatch, SetStateAction } from "react";
|
|
2
|
+
import type { HandoffMode } from "@ai-zen/agents-sdk";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
2
4
|
import { SelectItem } from "../components.js";
|
|
3
5
|
import { ChatSession } from "../chat-session.js";
|
|
6
|
+
import { type CommandName } from "../../conversation-commands/registry.js";
|
|
4
7
|
import { WizardStep } from "../config-wizard/index.js";
|
|
5
|
-
import { ChatAction } from "./state.js";
|
|
6
8
|
export interface ChatCommandHost {
|
|
7
9
|
session: ChatSession;
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* 起子进程的实现(`/update` 用)。缺省用 `node:child_process` 的 `spawn`。
|
|
12
|
+
*
|
|
13
|
+
* 做成可注入是为了让测试不必 `vi.mock("node:child_process")` —— 模块级 mock 是
|
|
14
|
+
* 全局注册的,进程内共享模块时会波及所有用到子进程的模块。
|
|
15
|
+
*/
|
|
16
|
+
spawn?: typeof spawn;
|
|
17
|
+
/** 通知通道:命令反馈(保存 / 清除 / 迁移结果 …)走独立栏位,不进 messages */
|
|
18
|
+
notice: (text: string, tone?: "info" | "error") => void;
|
|
19
|
+
/** 清屏(保留上下文):把转录显示起点推到最新 */
|
|
20
|
+
clearTranscript: () => void;
|
|
9
21
|
rows: number;
|
|
10
22
|
exit: (arg?: any) => void;
|
|
11
23
|
suspendTerminal: (fn: () => void | Promise<void>) => Promise<void>;
|
|
12
24
|
openWizard: (step: WizardStep) => Promise<void>;
|
|
13
25
|
openKeyEditor: () => Promise<void>;
|
|
14
26
|
doExit: () => void;
|
|
27
|
+
/**
|
|
28
|
+
* **真·重启进程**(`/update` 装完新版本后调用)。
|
|
29
|
+
*
|
|
30
|
+
* 与 `exit({ restart: true })` 不是一回事:后者只是同进程重挂载界面,内存里还是
|
|
31
|
+
* 旧的模块图,对「磁盘上的代码变了」这种升级等于没装。怎么重启(重新 exec 自己)
|
|
32
|
+
* 由宿主决定,命令层只负责决定**什么时候**重启。
|
|
33
|
+
*/
|
|
34
|
+
restartProcess: () => Promise<void>;
|
|
15
35
|
setPickerState: Dispatch<SetStateAction<{
|
|
16
36
|
title: string;
|
|
17
37
|
items: SelectItem<string>[];
|
|
@@ -22,6 +42,65 @@ export interface ChatCommandHost {
|
|
|
22
42
|
resolve: (value: boolean) => void;
|
|
23
43
|
} | null>>;
|
|
24
44
|
setInputText: (text: string) => void;
|
|
45
|
+
/** 更新状态栏的思考强度展示(`/think` 写入后由上层重取);文案与置灰一起给,避免漂移 */
|
|
46
|
+
setEffortView: (view: {
|
|
47
|
+
text: string;
|
|
48
|
+
dimmed: boolean;
|
|
49
|
+
} | null) => void;
|
|
50
|
+
/**
|
|
51
|
+
* 触发一次界面重渲染(`/lang` 切换语言后用)。
|
|
52
|
+
*
|
|
53
|
+
* `t()` 是模块级函数,语言一变,已渲染的文案不会自己更新 —— 必须让 React
|
|
54
|
+
* 重新执行一遍渲染函数才能取到新语言。这里只递增一个计数,不携带任何状态。
|
|
55
|
+
*/
|
|
56
|
+
refreshLocale: () => void;
|
|
25
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* 执行者参数(`/migrate self`)的解析结果。
|
|
60
|
+
*
|
|
61
|
+
* 分成「合法值」与「非法原值」两个字段,而不是一个 boolean + 一个 `string | undefined`:
|
|
62
|
+
* 调用方一看到 `invalid` 有值就能直接回显,不需要靠类型收窄去猜。
|
|
63
|
+
*/
|
|
64
|
+
export interface HandoffSelection {
|
|
65
|
+
/** 显式指定且合法的执行者(`self` / `summary`);未指定为 `undefined` */
|
|
66
|
+
mode: HandoffMode | undefined;
|
|
67
|
+
/** 显式指定但不合法的原值(报错回显用) */
|
|
68
|
+
invalid: string | undefined;
|
|
69
|
+
}
|
|
70
|
+
/** 单个命令的执行上下文:宿主能力 + 已解析的参数 */
|
|
71
|
+
export interface CommandContext extends ChatCommandHost {
|
|
72
|
+
/** 命中命令的**主名**(别名已归一:`/effort` → `think`、`/quit` → `exit`) */
|
|
73
|
+
name: CommandName;
|
|
74
|
+
/** 原始输入(含 `/`),用于「未知命令」等场景回显 */
|
|
75
|
+
raw: string;
|
|
76
|
+
/** 首个 token 之后的参数(`/migrate summary` → `["summary"]`) */
|
|
77
|
+
args: string[];
|
|
78
|
+
/** 通知(默认 info 语气) */
|
|
79
|
+
push: (text: string, tone?: "info" | "error") => void;
|
|
80
|
+
/**
|
|
81
|
+
* 弹选择器并等用户作答(取消为 `null`),由各命令自己决定取消后说什么。
|
|
82
|
+
*/
|
|
83
|
+
pick: (title: string, items: SelectItem<string>[]) => Promise<string | null>;
|
|
84
|
+
/** 弹确认框并等用户作答(与 `pick` 同一套覆盖层机制,只是答案为 是/否) */
|
|
85
|
+
confirm: (question: string) => Promise<boolean>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 解析命令后的执行者参数(`/migrate self`、`/handoff summary`)。
|
|
89
|
+
* 缺省返回 undefined(走服务默认值);非法值也返回 undefined,由调用方报错。
|
|
90
|
+
*/
|
|
91
|
+
export declare function parseHandoffMode(raw?: string): HandoffMode | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* 解析 `/handoff` `/migrate` 的执行者参数。
|
|
94
|
+
*
|
|
95
|
+
* 单独成函数而不是挂在 `CommandContext` 上:16 个命令里只有这两个用得到,
|
|
96
|
+
* 挂在上下文中会让另外 14 个命令(`/save` `/help` `/clear` …)每次也白算一遍。
|
|
97
|
+
*/
|
|
98
|
+
export declare function parseHandoffSelection(args: readonly string[]): HandoffSelection;
|
|
99
|
+
/**
|
|
100
|
+
* 执行一条斜杠命令。
|
|
101
|
+
*
|
|
102
|
+
* @param name 命令名(含别名,大小写不敏感;由 `parseCommandInput()` 从输入里取出)
|
|
103
|
+
* @param raw 原始输入(含 `/`),用于参数解析与错误回显
|
|
104
|
+
*/
|
|
26
105
|
export declare function runCommand(name: string, raw: string, host: ChatCommandHost): Promise<void>;
|
|
27
106
|
//# sourceMappingURL=chat-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/chat-commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chat-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/chat-commands.ts"],"names":[],"mappings":"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"}
|