@wukonglabs/wukong 0.1.4 → 0.1.6

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/tui/app.js CHANGED
@@ -15,7 +15,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  * - M8:NoticePanel 独立承载错误
16
16
  * - M9:? / /keys 键位帮助
17
17
  */
18
- import { useState, useCallback, useEffect, useRef } from 'react';
18
+ import { useState, useCallback, useEffect, useMemo, useRef } from 'react';
19
19
  import { Box, Text, useApp, useStdout } from 'ink';
20
20
  import { TextInput } from './text-input.js';
21
21
  import { useInputHistory } from './use-input-history.js';
@@ -26,9 +26,10 @@ import { useTheme } from './theme/context.js';
26
26
  import { isThemeName } from './theme/theme.js';
27
27
  import { KEYS_HELP } from './keys-help.js';
28
28
  import { parseSlashCommand } from './slash/parse.js';
29
+ import { ModelMenu, getModelMenuRowCount, } from './slash/menu.js';
29
30
  import { MainArea } from './main-area.js';
30
31
  import { Welcome } from './welcome.js';
31
- import { useViewport } from './use-viewport.js';
32
+ import { FOOTER_ROWS_BASE, useViewport } from './use-viewport.js';
32
33
  import { useElapsed } from './use-elapsed.js';
33
34
  import { usePlanState } from './use-plan-state.js';
34
35
  /** §5.0 M0:abort 窗口超时(ms),与 sigint-handler 的 resetTimeoutMs 保持一致 */
@@ -37,20 +38,23 @@ const HELP_TEXT = `可用命令:
37
38
  /help 本帮助
38
39
  /status 显示当前配置(模型 / workspace / session)
39
40
  /clear 清空对话历史
40
- /model 列出可用模型
41
- /model <id> 切换模型
41
+ /model 打开模型选择面板
42
+ /model <id> 直接切换模型
42
43
  /session 显示 session 信息
43
44
  /theme 切换主题(dark/light/mono)
44
45
  /compact 手动触发压缩
45
46
  /think 展开 Thinking 到滚动历史
46
47
  /keys 键位帮助
47
48
  快捷键:Enter 发送 · Shift+Enter 换行 · Ctrl+R 反查 · Ctrl+C 中断 · ? 键位帮助 · / 命令菜单`;
48
- export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialHistory = [], streamSinkRef, appVersion, configPath, sessionRecordCount = 0, sessionCreated = false, toolsCount, skillsLoaded, cursorAnchorRef, }) {
49
+ export function App({ model, modelId, sessionUuidShort, workspaceRoot, handlers, initialHistory = [], streamSinkRef, appVersion, configPath, sessionRecordCount = 0, sessionCreated = false, toolsCount, skillsLoaded, cursorAnchorRef, }) {
49
50
  const { exit } = useApp();
50
51
  const { write } = useStdout();
51
52
  const { themeName, setThemeName } = useTheme();
52
53
  const [input, setInput] = useState('');
54
+ const [inputMode, setInputMode] = useState('normal');
55
+ const [modelMenu, setModelMenu] = useState(null);
53
56
  const [currentModel, setCurrentModel] = useState(model);
57
+ const [currentModelId, setCurrentModelId] = useState(modelId);
54
58
  const [streamingText, setStreamingText] = useState('');
55
59
  const [streaming, setStreaming] = useState(false);
56
60
  const [thinkingText, setThinkingText] = useState('');
@@ -76,8 +80,12 @@ export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialH
76
80
  const [exiting, setExiting] = useState(false);
77
81
  const [pendingAuth, setPendingAuth] = useState(null);
78
82
  const inputHistory = useInputHistory(initialHistory);
79
- // 视口:固定 header + 弹性主区 + 固定 footer(24-tui-redesign-viewport.md)
80
- const viewport = useViewport();
83
+ const availableModels = useMemo(() => handlers.listModels?.() ?? [], [handlers]);
84
+ // 视口:模型面板展开时动态扣除其高度,保证输入区与提示栏始终留在屏幕内。
85
+ const footerRows = modelMenu
86
+ ? FOOTER_ROWS_BASE + getModelMenuRowCount(modelMenu.models, modelMenu.highlight)
87
+ : FOOTER_ROWS_BASE;
88
+ const viewport = useViewport(footerRows);
81
89
  // 集中计算本轮耗时,供 StatusBar 和 LiveBlock 活动行共用(避免重复 setInterval)
82
90
  const elapsedSec = useElapsed(busy ? runStartAt ?? null : null);
83
91
  // 派生"等待 LLM 首 token"窗口 —— busy=true 但还没收到任何 chunk、也没工具调用。
@@ -209,6 +217,10 @@ export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialH
209
217
  showNotice('warn', '当前任务运行中,不能切换模型');
210
218
  return;
211
219
  }
220
+ if (alias === currentModel) {
221
+ appendHistory({ kind: 'info', text: `当前已使用模型: ${currentModel}` });
222
+ return;
223
+ }
212
224
  if (!handlers.switchModel) {
213
225
  showNotice('warn', '模型切换功能未启用');
214
226
  return;
@@ -216,6 +228,7 @@ export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialH
216
228
  try {
217
229
  const switched = await handlers.switchModel(alias);
218
230
  setCurrentModel(switched.alias);
231
+ setCurrentModelId(switched.id);
219
232
  setCurrentStep(0);
220
233
  setCacheHitRate(undefined);
221
234
  appendHistory({
@@ -409,7 +422,7 @@ export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialH
409
422
  const placeholder = abortRequested
410
423
  ? '正在中断当前任务,请等它退出…'
411
424
  : '输入消息或 / 打开命令菜单…';
412
- const welcomeCard = (_jsx(Welcome, { appVersion: appVersion, cwd: workspaceRoot, configPath: configPath, model: currentModel, sessionUuidShort: sessionUuidShort, sessionRecordCount: welcomeSessionRecordCount, sessionCreated: sessionCreated, toolsCount: toolsCount, skillsLoaded: skillsLoaded }));
425
+ const welcomeCard = (_jsx(Welcome, { appVersion: appVersion, cwd: workspaceRoot, configPath: configPath, model: currentModelId, sessionUuidShort: sessionUuidShort, sessionRecordCount: welcomeSessionRecordCount, sessionCreated: sessionCreated, toolsCount: toolsCount, skillsLoaded: skillsLoaded }));
413
426
  /** 首条用户消息发出时,将欢迎卡作为历史首项固化进 Static */
414
427
  const maybePinWelcome = useCallback(() => {
415
428
  setHistory((prev) => {
@@ -419,14 +432,14 @@ export function App({ model, sessionUuidShort, workspaceRoot, handlers, initialH
419
432
  id: historyIdRef.current++,
420
433
  kind: 'welcome',
421
434
  text: '',
422
- welcomeEl: (_jsx(Welcome, { appVersion: appVersion, cwd: workspaceRoot, configPath: configPath, model: currentModel, sessionUuidShort: sessionUuidShort, sessionRecordCount: welcomeSessionRecordCount, sessionCreated: sessionCreated, toolsCount: toolsCount, skillsLoaded: skillsLoaded })),
435
+ welcomeEl: (_jsx(Welcome, { appVersion: appVersion, cwd: workspaceRoot, configPath: configPath, model: currentModelId, sessionUuidShort: sessionUuidShort, sessionRecordCount: welcomeSessionRecordCount, sessionCreated: sessionCreated, toolsCount: toolsCount, skillsLoaded: skillsLoaded })),
423
436
  };
424
437
  return [welcomeItem];
425
438
  });
426
- }, [appVersion, workspaceRoot, configPath, currentModel, sessionUuidShort, welcomeSessionRecordCount, sessionCreated, toolsCount, skillsLoaded]);
439
+ }, [appVersion, workspaceRoot, configPath, currentModelId, sessionUuidShort, welcomeSessionRecordCount, sessionCreated, toolsCount, skillsLoaded]);
427
440
  return (_jsxs(Box, { flexDirection: "column", children: [history.length === 0 && !busy ? (welcomeCard) : (_jsx(MainArea, { history: history, todos: todos, thinkingText: thinkingText, thinkingStreaming: thinkingStreaming, activeTools: activeTools, streamingText: streamingText, streaming: streaming, awaitingLlm: awaitingLlm, mainHeight: viewport.mainHeight, cols: viewport.cols, elapsedSec: elapsedSec, currentStep: currentStep, maxSteps: handlers.maxSteps })), abortRequested && _jsx(AbortHint, {}), notice && _jsx(NoticePanel, { notice: notice }), pendingAuth ? (_jsx(Box, { marginTop: 1, children: _jsx(PermissionCard, { request: pendingAuth.request, onSubmit: handleAuthSubmit }) })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, children: _jsx(TextInput, { value: input, onChange: setInput, onSubmit: handleSubmit, multiline: true, history: inputHistory, placeholder: placeholder, disabled: busy, cursorAnchorRef: cursorAnchorRef, terminalColumns: viewport.cols, onAbort: handleAbort, onExit: handleExit, onSlash: (n, a) => {
428
441
  void dispatchSlash(n, a);
429
- } }) }), _jsx(HintBar, { mode: busy ? 'busy' : 'normal' })] }))] }));
442
+ }, models: availableModels, currentModel: currentModel, onModeChange: setInputMode, onModelMenuChange: setModelMenu }) }), modelMenu && _jsx(ModelMenu, { ...modelMenu }), _jsx(HintBar, { mode: busy ? 'busy' : inputMode })] }))] }));
430
443
  }
431
444
  /** 中断提示(24-tui-redesign-viewport.md §4.9):拆成两行,窄终端不折行错乱 */
432
445
  function AbortHint() {
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { useTheme } from './theme/context.js';
4
4
  const HINTS = {
5
5
  normal: 'Enter · send Shift+Enter · newline ? · help / · commands Ctrl+R · search Ctrl+C · interrupt',
6
6
  reverse: 'Enter · accept Esc · cancel Ctrl+R · next match',
7
- menu: '↑↓ · select Enter · run Esc · cancel',
7
+ menu: '↑↓ · select Enter · confirm Esc · cancel',
8
8
  busy: 'esc · interrupt Ctrl+C · also interrupt',
9
9
  };
10
10
  export function HintBar({ mode }) {
@@ -1 +1 @@
1
- {"version":3,"file":"hint-bar.js","sourceRoot":"","sources":["../../src/tui/hint-bar.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,MAAM,KAAK,GAA6B;IACtC,MAAM,EACJ,uGAAuG;IACzG,OAAO,EAAE,qDAAqD;IAC9D,IAAI,EAAE,0CAA0C;IAChD,IAAI,EAAE,2CAA2C;CAClD,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAsB;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,QAAC,IAAI,EAAC,UAAU,YAAE,KAAK,CAAC,IAAI,CAAC,GAAQ,GACjE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"hint-bar.js","sourceRoot":"","sources":["../../src/tui/hint-bar.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,MAAM,KAAK,GAA6B;IACtC,MAAM,EACJ,uGAAuG;IACzG,OAAO,EAAE,qDAAqD;IAC9D,IAAI,EAAE,8CAA8C;IACpD,IAAI,EAAE,2CAA2C;CAClD,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAsB;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,QAAC,IAAI,EAAC,UAAU,YAAE,KAAK,CAAC,IAAI,CAAC,GAAQ,GACjE,CACP,CAAC;AACJ,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { AppHandlers, SinkRef } from './app.js';
2
2
  export interface InkRunOptions {
3
+ /** 配置中的模型别名,用于模型选择与切换 */
3
4
  model: string;
5
+ /** 实际发送给 Provider 的模型 ID,用于运行时展示 */
6
+ modelId: string;
4
7
  sessionUuidShort: string;
5
8
  workspaceRoot: string;
6
9
  handlers: AppHandlers;
@@ -1 +1 @@
1
- {"version":3,"file":"run-ink.d.ts","sourceRoot":"","sources":["../../src/tui/run-ink.tsx"],"names":[],"mappings":"AASA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGrD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,eAAe,EAAE,eAAe,EAChC,aAAa,GAAE,aAAkC,GAChD,MAAM,CAAC,WAAW,CAsCpB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CA8CxD"}
1
+ {"version":3,"file":"run-ink.d.ts","sourceRoot":"","sources":["../../src/tui/run-ink.tsx"],"names":[],"mappings":"AASA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGrD,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,eAAe,EAAE,eAAe,EAChC,aAAa,GAAE,aAAkC,GAChD,MAAM,CAAC,WAAW,CAsCpB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CA+CxD"}
@@ -69,7 +69,7 @@ export function runInk(opts) {
69
69
  const cursorAnchorRef = { current: '' };
70
70
  const fullRenderRef = { current: false };
71
71
  const stdout = createCursorAnchoredStdout(process.stdout, cursorAnchorRef, fullRenderRef);
72
- const inkInstance = render(_jsx(ThemeProvider, { children: _jsx(App, { model: opts.model, sessionUuidShort: opts.sessionUuidShort, workspaceRoot: opts.workspaceRoot, handlers: opts.handlers, initialHistory: opts.initialHistory, streamSinkRef: opts.streamSinkRef, appVersion: opts.appVersion, configPath: opts.configPath, sessionRecordCount: opts.sessionRecordCount, sessionCreated: opts.sessionCreated, toolsCount: opts.toolsCount, skillsLoaded: opts.skillsLoaded, cursorAnchorRef: cursorAnchorRef }) }), { stdout });
72
+ const inkInstance = render(_jsx(ThemeProvider, { children: _jsx(App, { model: opts.model, modelId: opts.modelId, sessionUuidShort: opts.sessionUuidShort, workspaceRoot: opts.workspaceRoot, handlers: opts.handlers, initialHistory: opts.initialHistory, streamSinkRef: opts.streamSinkRef, appVersion: opts.appVersion, configPath: opts.configPath, sessionRecordCount: opts.sessionRecordCount, sessionCreated: opts.sessionCreated, toolsCount: opts.toolsCount, skillsLoaded: opts.skillsLoaded, cursorAnchorRef: cursorAnchorRef }) }), { stdout });
73
73
  /*
74
74
  * 终端 resize 会按新列宽重排旧帧,Ink 的 previousLineCount 不再可信。
75
75
  * 监听器排在 Ink 自带 resize 监听器之前:本次同步 resize 周期内让 stdout.rows=1,
@@ -1 +1 @@
1
- {"version":3,"file":"run-ink.js","sourceRoot":"","sources":["../../src/tui/run-ink.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-ink.js","sourceRoot":"","sources":["../../src/tui/run-ink.tsx"],"names":[],"mappings":"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"}
@@ -12,5 +12,29 @@ export interface SlashMenuProps {
12
12
  /** 当前高亮索引(0-based) */
13
13
  highlight: number;
14
14
  }
15
+ export interface ModelMenuItem {
16
+ alias: string;
17
+ id: string;
18
+ provider: string;
19
+ }
20
+ export interface ModelMenuState {
21
+ models: ModelMenuItem[];
22
+ highlight: number;
23
+ currentModel?: string;
24
+ query: string;
25
+ }
26
+ export type ModelMenuProps = ModelMenuState;
27
+ export declare const MODEL_MENU_MAX_VISIBLE = 8;
15
28
  export declare function SlashMenu({ commands, highlight }: SlashMenuProps): React.ReactElement | null;
29
+ export declare function filterModelMenuItems(models: ModelMenuItem[], query: string): ModelMenuItem[];
30
+ interface ModelMenuWindow {
31
+ items: ModelMenuItem[];
32
+ start: number;
33
+ hiddenBefore: number;
34
+ hiddenAfter: number;
35
+ }
36
+ export declare function getModelMenuWindow(models: ModelMenuItem[], highlight: number, maxVisible?: number): ModelMenuWindow;
37
+ export declare function getModelMenuRowCount(models: ModelMenuItem[], highlight: number): number;
38
+ export declare function ModelMenu({ models, highlight, currentModel, query, }: ModelMenuProps): React.ReactElement;
39
+ export {};
16
40
  //# sourceMappingURL=menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/tui/slash/menu.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkB5F"}
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/tui/slash/menu.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC;AAE5C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkB5F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAM5F;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,UAAU,SAAyB,GAClC,eAAe,CAejB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGvF;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,SAAS,EACT,YAAY,EACZ,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA8CrC"}
@@ -1,6 +1,7 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
3
  import { useTheme } from '../theme/context.js';
4
+ export const MODEL_MENU_MAX_VISIBLE = 8;
4
5
  export function SlashMenu({ commands, highlight }) {
5
6
  const { theme } = useTheme();
6
7
  if (commands.length === 0)
@@ -10,4 +11,37 @@ export function SlashMenu({ commands, highlight }) {
10
11
  return (_jsx(Box, { children: _jsxs(Text, { inverse: active, children: [_jsxs(Text, { color: active ? theme.status : undefined, children: ["/", c.name] }), _jsxs(Text, { children: [" \u2014 ", c.description] })] }) }, c.name));
11
12
  }) }));
12
13
  }
14
+ export function filterModelMenuItems(models, query) {
15
+ const normalized = query.trim().toLowerCase();
16
+ if (!normalized)
17
+ return models;
18
+ return models.filter((model) => [model.alias, model.id, model.provider].some((field) => field.toLowerCase().includes(normalized)));
19
+ }
20
+ export function getModelMenuWindow(models, highlight, maxVisible = MODEL_MENU_MAX_VISIBLE) {
21
+ if (models.length <= maxVisible) {
22
+ return { items: models, start: 0, hiddenBefore: 0, hiddenAfter: 0 };
23
+ }
24
+ const safeHighlight = Math.max(0, Math.min(highlight, models.length - 1));
25
+ const start = Math.max(0, Math.min(safeHighlight - Math.floor(maxVisible / 2), models.length - maxVisible));
26
+ return {
27
+ items: models.slice(start, start + maxVisible),
28
+ start,
29
+ hiddenBefore: start,
30
+ hiddenAfter: models.length - start - maxVisible,
31
+ };
32
+ }
33
+ export function getModelMenuRowCount(models, highlight) {
34
+ const window = getModelMenuWindow(models, highlight);
35
+ return 2 + window.items.length + Number(window.hiddenBefore > 0) + Number(window.hiddenAfter > 0);
36
+ }
37
+ export function ModelMenu({ models, highlight, currentModel, query, }) {
38
+ const { theme } = useTheme();
39
+ const window = getModelMenuWindow(models, highlight);
40
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: theme.status, borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, paddingX: 1, children: [_jsxs(Text, { children: [_jsx(Text, { bold: true, color: theme.status, children: "\u9009\u62E9\u6A21\u578B" }), _jsx(Text, { color: theme.dim, dimColor: true, children: query ? ` · 过滤: ${query}` : ' · ↑↓ 选择 · Enter 确认 · Esc 取消' })] }), window.hiddenBefore > 0 && (_jsxs(Text, { color: theme.dim, dimColor: true, children: [" \u2191 \u8FD8\u6709 ", window.hiddenBefore, " \u4E2A\u6A21\u578B"] })), models.length === 0 ? (_jsx(Text, { color: "yellow", children: " \u6CA1\u6709\u5339\u914D\u7684\u53EF\u7528\u6A21\u578B" })) : window.items.map((model, offset) => {
41
+ const index = window.start + offset;
42
+ const active = index === highlight;
43
+ const current = model.alias === currentModel;
44
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: active ? theme.status : undefined, bold: active, wrap: "truncate", children: [active ? '› ' : ' ', String(index + 1).padStart(2, ' '), ". ", model.id] }), _jsxs(Text, { color: theme.dim, dimColor: !active, wrap: "truncate", children: [' ', "(", model.provider, ")", model.alias !== model.id ? ` · 配置: ${model.alias}` : ''] }), current && _jsx(Text, { color: theme.status, children: " \u00B7 \u5F53\u524D" })] }, model.alias));
45
+ }), window.hiddenAfter > 0 && (_jsxs(Text, { color: theme.dim, dimColor: true, children: [" \u2193 \u8FD8\u6709 ", window.hiddenAfter, " \u4E2A\u6A21\u578B"] }))] }));
46
+ }
13
47
  //# sourceMappingURL=menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/tui/slash/menu.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAQ/C,MAAM,UAAU,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAkB;IAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,YACnF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,CAAC,KAAK,SAAS,CAAC;YAC/B,OAAO,CACL,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,OAAO,EAAE,MAAM,aACnB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,kBAAI,CAAC,CAAC,IAAI,IAAQ,EAChE,MAAC,IAAI,2BAAK,CAAC,CAAC,WAAW,IAAQ,IAC1B,IAJC,CAAC,CAAC,IAAI,CAKV,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/tui/slash/menu.tsx"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  */
25
25
  import React from 'react';
26
26
  import { useInputHistory } from './use-input-history.js';
27
+ import { type ModelMenuItem, type ModelMenuState } from './slash/menu.js';
27
28
  export interface TextInputProps {
28
29
  /** 当前值(受控) */
29
30
  value: string;
@@ -56,8 +57,16 @@ export interface TextInputProps {
56
57
  onExit?: () => void;
57
58
  /** 选中某个 slash 命令时回调(name + 可选参数) */
58
59
  onSlash?: (name: string, arg?: string) => void;
60
+ /** `/model` 选择器使用的可用模型列表 */
61
+ models?: ModelMenuItem[];
62
+ /** 当前模型别名,用于菜单标记和初始高亮 */
63
+ currentModel?: string;
64
+ /** 输入模式变化,用于同步底部快捷键提示 */
65
+ onModeChange?: (mode: 'normal' | 'reverse' | 'menu') => void;
66
+ /** 模型面板状态变化;`null` 表示收起 */
67
+ onModelMenuChange?: (state: ModelMenuState | null) => void;
59
68
  }
60
- export declare function TextInput({ value, onChange, onSubmit, multiline, history, prompt, placeholder, disabled, cursorAnchorRef, terminalColumns, onAbort, onExit, onSlash, }: TextInputProps): React.ReactElement;
69
+ export declare function TextInput({ value, onChange, onSubmit, multiline, history, prompt, placeholder, disabled, cursorAnchorRef, terminalColumns, onAbort, onExit, onSlash, models, currentModel, onModeChange, onModelMenuChange, }: TextInputProps): React.ReactElement;
61
70
  /**
62
71
  * 生成 Ink 完成一帧输出后,将真实终端光标移回输入位置的 ANSI 序列。
63
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../../src/tui/text-input.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,EACL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAShC,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kBAAkB;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC7C,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAeD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAgB,EAChB,OAAO,EACP,MAAa,EACb,WAAgB,EAChB,QAAgB,EAChB,eAAe,EACf,eAAoB,EACpB,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAmXrC;AASD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,MAAM,CA0BR;AAgCD,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtD;AAiED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,0BAA0B;AAC1B,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnE"}
1
+ {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../../src/tui/text-input.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,EACL,eAAe,EAGhB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kBAAkB;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC7C,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,4BAA4B;IAC5B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC;IAC7D,2BAA2B;IAC3B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;CAC5D;AAeD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAgB,EAChB,OAAO,EACP,MAAa,EACb,WAAgB,EAChB,QAAgB,EAChB,eAAe,EACf,eAAoB,EACpB,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA8crC;AASD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,MAAM,CA0BR;AAgCD,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtD;AAiED,uDAAuD;AACvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,0BAA0B;AAC1B,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnE"}
@@ -23,12 +23,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
23
  * 因闭包未 flush 会丢字(实测 "你好" 只留 "好")。M11c 改用 valueRef/cursorRef,
24
24
  * 所有可打印字符(单/多)统一走 insertText,彻底消除闭包陷阱,IME 候选可见、可退格改字。
25
25
  */
26
- import { useState, useCallback, useEffect, useRef } from 'react';
26
+ import { useState, useCallback, useEffect, useMemo, useRef } from 'react';
27
27
  import { Text, useInput, useStdin } from 'ink';
28
28
  import { reverseSearch, reverseSearchNext, } from './use-input-history.js';
29
29
  import { parseSlashCommand } from './slash/parse.js';
30
30
  import { filterSlashCommands } from './slash/registry.js';
31
- import { SlashMenu } from './slash/menu.js';
31
+ import { SlashMenu, filterModelMenuItems, } from './slash/menu.js';
32
32
  import { useTheme } from './theme/context.js';
33
33
  /** 输入长度硬上限(M11c):粘贴大文件也够,防止异常灌入撑爆 Ink */
34
34
  const MAX_INPUT_LENGTH = 100_000;
@@ -37,11 +37,13 @@ const INITIAL_RS = {
37
37
  query: '',
38
38
  matchIndex: -1,
39
39
  };
40
- export function TextInput({ value, onChange, onSubmit, multiline = true, history, prompt = '> ', placeholder = '', disabled = false, cursorAnchorRef, terminalColumns = 80, onAbort, onExit, onSlash, }) {
40
+ export function TextInput({ value, onChange, onSubmit, multiline = true, history, prompt = '> ', placeholder = '', disabled = false, cursorAnchorRef, terminalColumns = 80, onAbort, onExit, onSlash, models, currentModel, onModeChange, onModelMenuChange, }) {
41
41
  const [cursor, setCursor] = useState(value.length);
42
42
  const [rs, setRs] = useState(INITIAL_RS);
43
43
  const [slashDismissed, setSlashDismissed] = useState(false);
44
44
  const [slashHighlight, setSlashHighlight] = useState(0);
45
+ const [modelPickerOpen, setModelPickerOpen] = useState(false);
46
+ const [modelHighlight, setModelHighlight] = useState(0);
45
47
  const { stdin, setRawMode } = useStdin();
46
48
  const { theme } = useTheme();
47
49
  // stdin 原始模式(捕获 Ctrl+C / Ctrl+R 等控制字符)
@@ -89,16 +91,82 @@ export function TextInput({ value, onChange, onSubmit, multiline = true, history
89
91
  setCursor(0);
90
92
  setRs(INITIAL_RS);
91
93
  }, [value, history, onSubmit, onChange]);
92
- // slash 菜单是否激活(输入以 / 开头且未取消、且不在反查模式)
93
- const slashActive = value.startsWith('/') && !slashDismissed && !rs.active;
94
- const slashCmds = slashActive ? filterSlashCommands(parseSlashCommand(value).raw) : [];
94
+ // slash / model 菜单状态:`/model` 首次回车后才打开独立模型面板。
95
+ const parsedSlash = parseSlashCommand(value);
96
+ const slashBaseActive = value.startsWith('/') && !slashDismissed && !rs.active;
97
+ const modelPickerActive = modelPickerOpen && parsedSlash.name === 'model' && models !== undefined;
98
+ const modelQuery = modelPickerActive ? parsedSlash.arg?.trim() ?? '' : '';
99
+ const filteredModels = useMemo(() => modelPickerActive ? filterModelMenuItems(models ?? [], modelQuery) : [], [modelPickerActive, models, modelQuery]);
100
+ const slashCmds = slashBaseActive && !modelPickerActive
101
+ ? filterSlashCommands(parsedSlash.raw)
102
+ : [];
103
+ const slashMenuActive = slashBaseActive && !modelPickerActive && slashCmds.length > 0;
104
+ const menuActive = modelPickerActive || slashMenuActive;
105
+ useEffect(() => {
106
+ if (modelPickerOpen && parsedSlash.name !== 'model') {
107
+ setModelPickerOpen(false);
108
+ }
109
+ }, [modelPickerOpen, parsedSlash.name]);
110
+ useEffect(() => {
111
+ if (!modelPickerActive)
112
+ return;
113
+ setModelHighlight((highlight) => {
114
+ const currentIndex = filteredModels.findIndex((model) => model.alias === currentModel);
115
+ if (!modelQuery && currentIndex >= 0)
116
+ return currentIndex;
117
+ return Math.min(highlight, Math.max(filteredModels.length - 1, 0));
118
+ });
119
+ }, [modelPickerActive, modelQuery, filteredModels.length, currentModel]);
120
+ useEffect(() => {
121
+ onModelMenuChange?.(modelPickerActive
122
+ ? {
123
+ models: filteredModels,
124
+ highlight: Math.min(modelHighlight, Math.max(filteredModels.length - 1, 0)),
125
+ currentModel,
126
+ query: modelQuery,
127
+ }
128
+ : null);
129
+ }, [modelPickerActive, filteredModels, modelHighlight, currentModel, modelQuery, onModelMenuChange]);
130
+ const inputMode = menuActive ? 'menu' : rs.active ? 'reverse' : 'normal';
131
+ useEffect(() => {
132
+ onModeChange?.(inputMode);
133
+ }, [inputMode, onModeChange]);
95
134
  useInput((input, key) => {
96
135
  if (disabled)
97
136
  return;
98
137
  // ink 的 Key 类型未声明 home/end(Fn+方向键 / 物理 Home/End),这里扩展访问
99
138
  const k = key;
139
+ // ── `/model` 二级选择菜单 ──
140
+ if (modelPickerActive) {
141
+ if (key.escape) {
142
+ setModelPickerOpen(false);
143
+ setSlashDismissed(true);
144
+ return;
145
+ }
146
+ if (key.upArrow) {
147
+ setModelHighlight((h) => Math.max(0, h - 1));
148
+ return;
149
+ }
150
+ if (key.downArrow) {
151
+ setModelHighlight((h) => Math.min(Math.max(filteredModels.length - 1, 0), h + 1));
152
+ return;
153
+ }
154
+ if (key.return && filteredModels.length > 0) {
155
+ const selected = filteredModels[Math.min(modelHighlight, filteredModels.length - 1)];
156
+ onSlash?.('model', selected.alias);
157
+ setModelPickerOpen(false);
158
+ valueRef.current = '';
159
+ cursorRef.current = 0;
160
+ onChange('');
161
+ setCursor(0);
162
+ setSlashDismissed(false);
163
+ setModelHighlight(0);
164
+ return;
165
+ }
166
+ // 没有匹配项时 Enter 落到普通提交,保留 `/model <alias>` 的错误提示。
167
+ }
100
168
  // ── Slash 菜单模式(M1)──
101
- if (slashActive) {
169
+ if (slashMenuActive) {
102
170
  if (key.escape) {
103
171
  setSlashDismissed(true);
104
172
  return;
@@ -111,10 +179,21 @@ export function TextInput({ value, onChange, onSubmit, multiline = true, history
111
179
  setSlashHighlight((h) => Math.min(Math.max(slashCmds.length - 1, 0), h + 1));
112
180
  return;
113
181
  }
114
- if (key.return && slashCmds.length > 0) {
182
+ if (key.return) {
115
183
  const cmd = slashCmds[Math.min(slashHighlight, slashCmds.length - 1)];
116
- const parsed = parseSlashCommand(value);
117
- onSlash?.(cmd.name, parsed.arg);
184
+ if (cmd.name === 'model') {
185
+ const completion = '/model';
186
+ valueRef.current = completion;
187
+ cursorRef.current = completion.length;
188
+ onChange(completion);
189
+ setCursor(completion.length);
190
+ setSlashHighlight(0);
191
+ setModelPickerOpen(true);
192
+ return;
193
+ }
194
+ onSlash?.(cmd.name, parsedSlash.arg);
195
+ valueRef.current = '';
196
+ cursorRef.current = 0;
118
197
  onChange('');
119
198
  setCursor(0);
120
199
  setSlashDismissed(false);
@@ -237,6 +316,11 @@ export function TextInput({ value, onChange, onSubmit, multiline = true, history
237
316
  }
238
317
  // ── 普通模式 ──
239
318
  if (key.return) {
319
+ if (parsedSlash.name === 'model' && !parsedSlash.arg && models !== undefined) {
320
+ setSlashDismissed(false);
321
+ setModelPickerOpen(true);
322
+ return;
323
+ }
240
324
  if (multiline && (key.shift || key.meta)) {
241
325
  insertText('\n');
242
326
  return;
@@ -348,13 +432,14 @@ export function TextInput({ value, onChange, onSubmit, multiline = true, history
348
432
  // 这里同步计算锚点;run-ink 的 stdout 包装器会在每次真实写帧后的 microtask 恢复它,
349
433
  // 不再用 setTimeout 与 Ink 的节流输出抢时序。
350
434
  if (cursorAnchorRef) {
351
- cursorAnchorRef.current = disabled || slashActive || rs.active
435
+ cursorAnchorRef.current = disabled || menuActive || rs.active
352
436
  ? ''
353
437
  : getCursorAnchorSequence(value, cursor, prompt, terminalColumns);
354
438
  }
355
439
  // ── 渲染 ──
356
- if (slashActive) {
357
- return _jsx(SlashMenu, { commands: slashCmds, highlight: Math.min(slashHighlight, Math.max(slashCmds.length - 1, 0)) });
440
+ // 模型面板由 App 渲染在输入框下方;这里始终保留 `/model` 输入行。
441
+ if (slashMenuActive) {
442
+ return _jsx(SlashMenu, { commands: slashCmds, highlight: Math.min(slashHighlight, slashCmds.length - 1) });
358
443
  }
359
444
  if (rs.active) {
360
445
  const matchText = rs.matchIndex >= 0 && history ? history.entries[rs.matchIndex] : '';