@ai-zen/cli 0.9.0 → 1.0.0-alpha.2
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 +59 -1
- package/README.md +94 -40
- package/README.zh.md +94 -40
- package/dist/agent-creator.d.ts +7 -1
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +16 -1
- package/dist/agent-creator.js.map +1 -1
- package/dist/agents-store.d.ts +33 -0
- package/dist/agents-store.d.ts.map +1 -0
- package/dist/agents-store.js +50 -0
- package/dist/agents-store.js.map +1 -0
- package/dist/auto-migrate-confirm-plugin.d.ts +7 -7
- package/dist/auto-migrate-confirm-plugin.d.ts.map +1 -1
- package/dist/auto-migrate-confirm-plugin.js +3 -21
- package/dist/auto-migrate-confirm-plugin.js.map +1 -1
- package/dist/config-editor.d.ts +201 -0
- package/dist/config-editor.d.ts.map +1 -0
- package/dist/config-editor.js +511 -0
- package/dist/config-editor.js.map +1 -0
- package/dist/config.d.ts +41 -16
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -29
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts +4 -5
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +9 -6
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/conversation-persist-plugin.d.ts +25 -0
- package/dist/conversation-persist-plugin.d.ts.map +1 -0
- package/dist/conversation-persist-plugin.js +44 -0
- package/dist/conversation-persist-plugin.js.map +1 -0
- package/dist/conversation-repository.d.ts +19 -2
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +48 -5
- package/dist/conversation-repository.js.map +1 -1
- package/dist/format-time.d.ts +2 -2
- package/dist/format-time.js +2 -2
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +58 -46
- package/dist/hook.js.map +1 -1
- package/dist/index.js +65 -36
- package/dist/index.js.map +1 -1
- package/dist/migration-service.d.ts +3 -1
- package/dist/migration-service.d.ts.map +1 -1
- package/dist/migration-service.js +26 -23
- package/dist/migration-service.js.map +1 -1
- package/dist/mode.d.ts +56 -0
- package/dist/mode.d.ts.map +1 -0
- package/dist/mode.js +83 -0
- package/dist/mode.js.map +1 -0
- package/dist/session-pointer.d.ts +22 -0
- package/dist/session-pointer.d.ts.map +1 -0
- package/dist/session-pointer.js +49 -0
- package/dist/session-pointer.js.map +1 -0
- package/dist/stdio-runner.d.ts +34 -0
- package/dist/stdio-runner.d.ts.map +1 -0
- package/dist/stdio-runner.js +161 -0
- package/dist/stdio-runner.js.map +1 -0
- package/dist/tui/chat-session.d.ts +100 -0
- package/dist/tui/chat-session.d.ts.map +1 -0
- package/dist/tui/chat-session.js +263 -0
- package/dist/tui/chat-session.js.map +1 -0
- package/dist/tui/components.d.ts +44 -0
- package/dist/tui/components.d.ts.map +1 -0
- package/dist/tui/components.js +62 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/config-wizard/detail.d.ts +51 -0
- package/dist/tui/config-wizard/detail.d.ts.map +1 -0
- package/dist/tui/config-wizard/detail.js +273 -0
- package/dist/tui/config-wizard/detail.js.map +1 -0
- package/dist/tui/config-wizard/engine.d.ts +36 -0
- package/dist/tui/config-wizard/engine.d.ts.map +1 -0
- package/dist/tui/config-wizard/engine.js +187 -0
- package/dist/tui/config-wizard/engine.js.map +1 -0
- package/dist/tui/config-wizard/fields.d.ts +24 -0
- package/dist/tui/config-wizard/fields.d.ts.map +1 -0
- package/dist/tui/config-wizard/fields.js +411 -0
- package/dist/tui/config-wizard/fields.js.map +1 -0
- package/dist/tui/config-wizard/frame.d.ts +27 -0
- package/dist/tui/config-wizard/frame.d.ts.map +1 -0
- package/dist/tui/config-wizard/frame.js +28 -0
- package/dist/tui/config-wizard/frame.js.map +1 -0
- package/dist/tui/config-wizard/index.d.ts +6 -0
- package/dist/tui/config-wizard/index.d.ts.map +1 -0
- package/dist/tui/config-wizard/index.js +7 -0
- package/dist/tui/config-wizard/index.js.map +1 -0
- package/dist/tui/config-wizard/kv-editor.d.ts +18 -0
- package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -0
- package/dist/tui/config-wizard/kv-editor.js +116 -0
- package/dist/tui/config-wizard/kv-editor.js.map +1 -0
- package/dist/tui/config-wizard/list.d.ts +13 -0
- package/dist/tui/config-wizard/list.d.ts.map +1 -0
- package/dist/tui/config-wizard/list.js +29 -0
- package/dist/tui/config-wizard/list.js.map +1 -0
- package/dist/tui/config-wizard/mcp-helpers.d.ts +9 -0
- package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -0
- package/dist/tui/config-wizard/mcp-helpers.js +19 -0
- package/dist/tui/config-wizard/mcp-helpers.js.map +1 -0
- package/dist/tui/config-wizard/menu.d.ts +18 -0
- package/dist/tui/config-wizard/menu.d.ts.map +1 -0
- package/dist/tui/config-wizard/menu.js +70 -0
- package/dist/tui/config-wizard/menu.js.map +1 -0
- package/dist/tui/config-wizard/prompt-editor.d.ts +24 -0
- package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -0
- package/dist/tui/config-wizard/prompt-editor.js +83 -0
- package/dist/tui/config-wizard/prompt-editor.js.map +1 -0
- package/dist/tui/config-wizard/prompt.d.ts +57 -0
- package/dist/tui/config-wizard/prompt.d.ts.map +1 -0
- package/dist/tui/config-wizard/prompt.js +130 -0
- package/dist/tui/config-wizard/prompt.js.map +1 -0
- package/dist/tui/config-wizard/step-agents.d.ts +4 -0
- package/dist/tui/config-wizard/step-agents.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-agents.js +110 -0
- package/dist/tui/config-wizard/step-agents.js.map +1 -0
- package/dist/tui/config-wizard/step-defaults.d.ts +4 -0
- package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-defaults.js +76 -0
- package/dist/tui/config-wizard/step-defaults.js.map +1 -0
- package/dist/tui/config-wizard/step-endpoints.d.ts +4 -0
- package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-endpoints.js +43 -0
- package/dist/tui/config-wizard/step-endpoints.js.map +1 -0
- package/dist/tui/config-wizard/step-mcp.d.ts +4 -0
- package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-mcp.js +97 -0
- package/dist/tui/config-wizard/step-mcp.js.map +1 -0
- package/dist/tui/config-wizard/step-menu.d.ts +4 -0
- package/dist/tui/config-wizard/step-menu.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-menu.js +28 -0
- package/dist/tui/config-wizard/step-menu.js.map +1 -0
- package/dist/tui/config-wizard/step-models.d.ts +4 -0
- package/dist/tui/config-wizard/step-models.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-models.js +114 -0
- package/dist/tui/config-wizard/step-models.js.map +1 -0
- package/dist/tui/config-wizard/step-new-endpoint.d.ts +4 -0
- package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-new-endpoint.js +54 -0
- package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -0
- package/dist/tui/config-wizard/step-simple.d.ts +4 -0
- package/dist/tui/config-wizard/step-simple.d.ts.map +1 -0
- package/dist/tui/config-wizard/step-simple.js +55 -0
- package/dist/tui/config-wizard/step-simple.js.map +1 -0
- package/dist/tui/config-wizard/types.d.ts +138 -0
- package/dist/tui/config-wizard/types.d.ts.map +1 -0
- package/dist/tui/config-wizard/types.js +12 -0
- package/dist/tui/config-wizard/types.js.map +1 -0
- package/dist/tui/config-wizard/wizard.d.ts +9 -0
- package/dist/tui/config-wizard/wizard.d.ts.map +1 -0
- package/dist/tui/config-wizard/wizard.js +33 -0
- package/dist/tui/config-wizard/wizard.js.map +1 -0
- package/dist/tui/highlight.d.ts +34 -0
- package/dist/tui/highlight.d.ts.map +1 -0
- package/dist/tui/highlight.js +116 -0
- package/dist/tui/highlight.js.map +1 -0
- package/dist/tui/index.d.ts +33 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +265 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/chat-commands.d.ts +27 -0
- package/dist/tui/screens/chat-commands.d.ts.map +1 -0
- package/dist/tui/screens/chat-commands.js +176 -0
- package/dist/tui/screens/chat-commands.js.map +1 -0
- package/dist/tui/screens/chat.d.ts +25 -0
- package/dist/tui/screens/chat.d.ts.map +1 -0
- package/dist/tui/screens/chat.js +494 -0
- package/dist/tui/screens/chat.js.map +1 -0
- package/dist/tui/screens/index.d.ts +13 -0
- package/dist/tui/screens/index.d.ts.map +1 -0
- package/dist/tui/screens/index.js +14 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/screens/input.d.ts +29 -0
- package/dist/tui/screens/input.d.ts.map +1 -0
- package/dist/tui/screens/input.js +54 -0
- package/dist/tui/screens/input.js.map +1 -0
- package/dist/tui/screens/layout.d.ts +42 -0
- package/dist/tui/screens/layout.d.ts.map +1 -0
- package/dist/tui/screens/layout.js +45 -0
- package/dist/tui/screens/layout.js.map +1 -0
- package/dist/tui/screens/lines.d.ts +71 -0
- package/dist/tui/screens/lines.d.ts.map +1 -0
- package/dist/tui/screens/lines.js +198 -0
- package/dist/tui/screens/lines.js.map +1 -0
- package/dist/tui/screens/overlays.d.ts +12 -0
- package/dist/tui/screens/overlays.d.ts.map +1 -0
- package/dist/tui/screens/overlays.js +34 -0
- package/dist/tui/screens/overlays.js.map +1 -0
- package/dist/tui/screens/render.d.ts +9 -0
- package/dist/tui/screens/render.d.ts.map +1 -0
- package/dist/tui/screens/render.js +97 -0
- package/dist/tui/screens/render.js.map +1 -0
- package/dist/tui/screens/splash.d.ts +5 -0
- package/dist/tui/screens/splash.d.ts.map +1 -0
- package/dist/tui/screens/splash.js +51 -0
- package/dist/tui/screens/splash.js.map +1 -0
- package/dist/tui/screens/state.d.ts +13 -0
- package/dist/tui/screens/state.d.ts.map +1 -0
- package/dist/tui/screens/state.js +75 -0
- package/dist/tui/screens/state.js.map +1 -0
- package/dist/tui/text.d.ts +71 -0
- package/dist/tui/text.d.ts.map +1 -0
- package/dist/tui/text.js +191 -0
- package/dist/tui/text.js.map +1 -0
- package/dist/tui/theme.d.ts +62 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +120 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +11 -6
- package/dist/config-wizard.d.ts +0 -6
- package/dist/config-wizard.d.ts.map +0 -1
- package/dist/config-wizard.js +0 -46
- package/dist/config-wizard.js.map +0 -1
- package/dist/conversation-commands/back.d.ts +0 -3
- package/dist/conversation-commands/back.d.ts.map +0 -1
- package/dist/conversation-commands/back.js +0 -144
- package/dist/conversation-commands/back.js.map +0 -1
- package/dist/conversation-commands/clear.d.ts +0 -3
- package/dist/conversation-commands/clear.d.ts.map +0 -1
- package/dist/conversation-commands/clear.js +0 -8
- package/dist/conversation-commands/clear.js.map +0 -1
- package/dist/conversation-commands/editor.d.ts +0 -3
- package/dist/conversation-commands/editor.d.ts.map +0 -1
- package/dist/conversation-commands/editor.js +0 -15
- package/dist/conversation-commands/editor.js.map +0 -1
- package/dist/conversation-commands/exit.d.ts +0 -3
- package/dist/conversation-commands/exit.d.ts.map +0 -1
- package/dist/conversation-commands/exit.js +0 -37
- package/dist/conversation-commands/exit.js.map +0 -1
- package/dist/conversation-commands/help.d.ts +0 -3
- package/dist/conversation-commands/help.d.ts.map +0 -1
- package/dist/conversation-commands/help.js +0 -10
- package/dist/conversation-commands/help.js.map +0 -1
- package/dist/conversation-commands/index.d.ts +0 -13
- package/dist/conversation-commands/index.d.ts.map +0 -1
- package/dist/conversation-commands/index.js +0 -66
- package/dist/conversation-commands/index.js.map +0 -1
- package/dist/conversation-commands/migrate.d.ts +0 -12
- package/dist/conversation-commands/migrate.d.ts.map +0 -1
- package/dist/conversation-commands/migrate.js +0 -56
- package/dist/conversation-commands/migrate.js.map +0 -1
- package/dist/conversation-commands/new.d.ts +0 -3
- package/dist/conversation-commands/new.d.ts.map +0 -1
- package/dist/conversation-commands/new.js +0 -45
- package/dist/conversation-commands/new.js.map +0 -1
- package/dist/conversation-commands/save.d.ts +0 -3
- package/dist/conversation-commands/save.d.ts.map +0 -1
- package/dist/conversation-commands/save.js +0 -32
- package/dist/conversation-commands/save.js.map +0 -1
- package/dist/conversation-runner.d.ts +0 -17
- package/dist/conversation-runner.d.ts.map +0 -1
- package/dist/conversation-runner.js +0 -176
- package/dist/conversation-runner.js.map +0 -1
- package/dist/delta-renderer.d.ts +0 -33
- package/dist/delta-renderer.d.ts.map +0 -1
- package/dist/delta-renderer.js +0 -120
- package/dist/delta-renderer.js.map +0 -1
- package/dist/draft-plugin.d.ts +0 -19
- package/dist/draft-plugin.d.ts.map +0 -1
- package/dist/draft-plugin.js +0 -30
- package/dist/draft-plugin.js.map +0 -1
- package/dist/draft-repository.d.ts +0 -34
- package/dist/draft-repository.d.ts.map +0 -1
- package/dist/draft-repository.js +0 -64
- package/dist/draft-repository.js.map +0 -1
- package/dist/menus/agents.d.ts +0 -5
- package/dist/menus/agents.d.ts.map +0 -1
- package/dist/menus/agents.js +0 -219
- package/dist/menus/agents.js.map +0 -1
- package/dist/menus/common.d.ts +0 -41
- package/dist/menus/common.d.ts.map +0 -1
- package/dist/menus/common.js +0 -104
- package/dist/menus/common.js.map +0 -1
- package/dist/menus/config-display.d.ts +0 -2
- package/dist/menus/config-display.d.ts.map +0 -1
- package/dist/menus/config-display.js +0 -82
- package/dist/menus/config-display.js.map +0 -1
- package/dist/menus/config.d.ts +0 -8
- package/dist/menus/config.d.ts.map +0 -1
- package/dist/menus/config.js +0 -407
- package/dist/menus/config.js.map +0 -1
- package/dist/menus/conversations.d.ts +0 -20
- package/dist/menus/conversations.d.ts.map +0 -1
- package/dist/menus/conversations.js +0 -83
- package/dist/menus/conversations.js.map +0 -1
- package/dist/menus/index.d.ts +0 -5
- package/dist/menus/index.d.ts.map +0 -1
- package/dist/menus/index.js +0 -59
- package/dist/menus/index.js.map +0 -1
- package/dist/menus/start-conversation.d.ts +0 -16
- package/dist/menus/start-conversation.d.ts.map +0 -1
- package/dist/menus/start-conversation.js +0 -176
- package/dist/menus/start-conversation.js.map +0 -1
- package/dist/slash-hint-prompt.d.ts +0 -41
- package/dist/slash-hint-prompt.d.ts.map +0 -1
- package/dist/slash-hint-prompt.js +0 -92
- package/dist/slash-hint-prompt.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// 由 src/tui/config-wizard.tsx 拆分而来 —— 单行输入屏 PromptScreen + promptLayout
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Box, Text, useCursor, useInput } from "ink";
|
|
5
|
+
import { theme } from "../theme.js";
|
|
6
|
+
import { KeyHints } from "../components.js";
|
|
7
|
+
import { INPUT_PREFIX_WIDTH, bottomPadding, displayWidth, layoutInput, isTerminalReply } from "../text.js";
|
|
8
|
+
import { Header, WizardFrame, textRows } from "./frame.js";
|
|
9
|
+
/** 计算输入屏的顶部留白与硬件光标坐标(吸底布局 + IME 跟随) */
|
|
10
|
+
export function promptLayout(input) {
|
|
11
|
+
const contentLines = input.headerLines + input.inputLines + input.extraLines + input.hintLines;
|
|
12
|
+
const topPadding = bottomPadding(input.terminalRows, contentLines);
|
|
13
|
+
const before = Array.from(input.lineText).slice(0, input.cursorCol).join("");
|
|
14
|
+
return {
|
|
15
|
+
contentLines,
|
|
16
|
+
topPadding,
|
|
17
|
+
cursor: {
|
|
18
|
+
x: INPUT_PREFIX_WIDTH + displayWidth(before),
|
|
19
|
+
y: topPadding + input.headerLines + input.cursorRow,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 全屏单行输入:标题 + 输入行 + 键位提示(吸底布局)。
|
|
25
|
+
*
|
|
26
|
+
* 硬件光标 y 由 `promptLayout()` 按「顶部留白 + 标题行数 + 输入行内偏移」算出,
|
|
27
|
+
* 而整帧高度恒小于终端行数(不命中 Ink 全屏分支),因此 IME 候选框与自绘光标精确对齐。
|
|
28
|
+
*/
|
|
29
|
+
export function PromptScreen(props) {
|
|
30
|
+
const { setCursorPosition } = useCursor();
|
|
31
|
+
const [value, setValue] = useState(props.initialValue ?? "");
|
|
32
|
+
const [cursor, setCursor] = useState(Array.from(props.initialValue ?? "").length);
|
|
33
|
+
const [revealed, setRevealed] = useState(!props.mask);
|
|
34
|
+
const chars = Array.from(value);
|
|
35
|
+
const caret = Math.max(0, Math.min(cursor, chars.length));
|
|
36
|
+
const display = revealed ? value : "•".repeat(chars.length);
|
|
37
|
+
const layout = layoutInput(display, caret, Math.max(4, props.columns - 4));
|
|
38
|
+
const header = [
|
|
39
|
+
...textRows(`? ${props.title}`, props.columns, theme.warn, true),
|
|
40
|
+
...(props.details ?? []).flatMap((detail) => textRows(detail, props.columns, theme.dim)),
|
|
41
|
+
];
|
|
42
|
+
// 输入区之后的附加行:空值提示 / 校验错误 / 明文提示
|
|
43
|
+
const extraLines = (chars.length === 0 ? 1 : 0) + (props.error ? 1 : 0) + (props.mask && revealed ? 1 : 0);
|
|
44
|
+
const position = promptLayout({
|
|
45
|
+
terminalRows: props.rows,
|
|
46
|
+
headerLines: header.length,
|
|
47
|
+
inputLines: layout.lines.length,
|
|
48
|
+
extraLines,
|
|
49
|
+
hintLines: 1,
|
|
50
|
+
cursorRow: layout.cursorRow,
|
|
51
|
+
cursorCol: layout.cursorCol,
|
|
52
|
+
lineText: layout.lines[layout.cursorRow] ?? "",
|
|
53
|
+
});
|
|
54
|
+
setCursorPosition(position.cursor);
|
|
55
|
+
const update = (next, nextCursor) => {
|
|
56
|
+
setValue(next);
|
|
57
|
+
setCursor(nextCursor);
|
|
58
|
+
props.onChange?.(next);
|
|
59
|
+
};
|
|
60
|
+
const insert = (text) => {
|
|
61
|
+
update(chars.slice(0, caret).join("") + text + chars.slice(caret).join(""), caret + Array.from(text).length);
|
|
62
|
+
};
|
|
63
|
+
const deleteBefore = () => {
|
|
64
|
+
if (caret === 0)
|
|
65
|
+
return;
|
|
66
|
+
update(chars.slice(0, caret - 1).join("") + chars.slice(caret).join(""), caret - 1);
|
|
67
|
+
};
|
|
68
|
+
const deleteAfter = () => {
|
|
69
|
+
if (caret >= chars.length)
|
|
70
|
+
return;
|
|
71
|
+
update(chars.slice(0, caret).join("") + chars.slice(caret + 1).join(""), caret);
|
|
72
|
+
};
|
|
73
|
+
useInput((char, key) => {
|
|
74
|
+
// 终端应答序列(如 Kitty 查询应答 `[?0u`)不是用户输入,丢弃
|
|
75
|
+
if (isTerminalReply(char))
|
|
76
|
+
return;
|
|
77
|
+
if (key.escape) {
|
|
78
|
+
props.onCancel();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (key.return) {
|
|
82
|
+
props.onSubmit(value);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (key.tab && props.mask) {
|
|
86
|
+
setRevealed((v) => !v);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (char === "u" && key.ctrl) {
|
|
90
|
+
update("", 0);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (key.leftArrow) {
|
|
94
|
+
setCursor(Math.max(0, caret - 1));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (key.rightArrow) {
|
|
98
|
+
setCursor(Math.min(chars.length, caret + 1));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (key.home) {
|
|
102
|
+
setCursor(0);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (key.end) {
|
|
106
|
+
setCursor(chars.length);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (key.backspace) {
|
|
110
|
+
deleteBefore();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (key.delete) {
|
|
114
|
+
deleteAfter();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (char && !key.ctrl && !key.meta)
|
|
118
|
+
insert(char);
|
|
119
|
+
});
|
|
120
|
+
return (_jsxs(WizardFrame, { columns: props.columns, rows: props.rows, contentLines: position.contentLines, children: [_jsx(Header, { rows: header }), _jsx(Box, { flexDirection: "column", paddingX: 1, children: layout.lines.map((line, index) => {
|
|
121
|
+
const prompt = index === 0 ? (_jsx(Text, { color: theme.brand[0], bold: true, children: "❯ " })) : (_jsx(Text, { children: " " }));
|
|
122
|
+
if (index !== layout.cursorRow) {
|
|
123
|
+
return (_jsxs(Text, { wrap: "truncate", children: [prompt, _jsx(Text, { children: line })] }, index));
|
|
124
|
+
}
|
|
125
|
+
const rowChars = Array.from(line);
|
|
126
|
+
const at = rowChars[layout.cursorCol];
|
|
127
|
+
return (_jsxs(Text, { wrap: "truncate", children: [prompt, _jsx(Text, { children: rowChars.slice(0, layout.cursorCol).join("") }), _jsx(Text, { inverse: true, color: theme.brand[0], children: at ?? " " }), _jsx(Text, { children: rowChars.slice(layout.cursorCol + 1).join("") })] }, index));
|
|
128
|
+
}) }), chars.length === 0 ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: theme.faint, wrap: "truncate", children: props.mask ? "(粘贴或输入后按 Enter 保存,Tab 可切明文核对)" : "(输入后按 Enter 确认)" }) })) : null, props.error ? (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: theme.error, wrap: "truncate", children: ["\u2716 ", props.error] }) })) : null, props.mask && revealed ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: theme.warn, wrap: "truncate", children: "\u26A0 \u5F53\u524D\u4E3A\u660E\u6587\u663E\u793A\uFF08Tab \u5207\u56DE\u63A9\u7801\uFF09" }) })) : null, _jsx(KeyHints, { hints: props.hints })] }));
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/prompt.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAO,QAAQ,EAAE,MAAM,YAAY,CAAC;AA+BhE,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;IAC/F,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO;QACL,YAAY;QACZ,UAAU;QACV,MAAM,EAAE;YACN,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC;YAC5C,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS;SACpD;KACF,CAAC;AACJ,CAAC;AAwBD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAU;QACpB,GAAG,QAAQ,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QAChE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;KACzF,CAAC;IACF,+BAA+B;IAC/B,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,YAAY,EAAE,KAAK,CAAC,IAAI;QACxB,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QAC/B,UAAU;QACV,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;KAC/C,CAAC,CAAC;IACH,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,EAAE;QAClD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,SAAS,CAAC,UAAU,CAAC,CAAC;QACtB,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/G,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO;QACxB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO;QAClC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACrB,uCAAuC;QACvC,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO;QAClC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1B,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,SAAS,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,WAAW,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,WAAW,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,aACxF,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,GAAI,EAExB,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAChC,MAAM,MAAM,GACV,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,kBAC9B,IAAI,GACA,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,cAAE,IAAI,GAAQ,CACpB,CAAC;oBACJ,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;wBAC/B,OAAO,CACL,MAAC,IAAI,IAAa,IAAI,EAAC,UAAU,aAC9B,MAAM,EACP,KAAC,IAAI,cAAE,IAAI,GAAQ,KAFV,KAAK,CAGT,CACR,CAAC;oBACJ,CAAC;oBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACtC,OAAO,CACL,MAAC,IAAI,IAAa,IAAI,EAAC,UAAU,aAC9B,MAAM,EACP,KAAC,IAAI,cAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAQ,EAC3D,KAAC,IAAI,IAAC,OAAO,QAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAChC,EAAE,IAAI,GAAG,GACL,EACP,KAAC,IAAI,cAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAQ,KANnD,KAAK,CAOT,CACR,CAAC;gBACJ,CAAC,CAAC,GACE,EAEL,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAC,UAAU,YACtC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,iBAAiB,GAC5D,GACH,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAC,UAAU,wBACpC,KAAK,CAAC,KAAK,IACT,GACH,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CACxB,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAC,UAAU,0GAEjC,GACH,CACP,CAAC,CAAC,CAAC,IAAI,EAER,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,IACpB,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-agents.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-agents.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6L9D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { agentKindLabel, agentList, findAgentDefinition } from "../../agents-store.js";
|
|
3
|
+
import { createAgentDefinition, createSubAgentDefinition, getAgentPrompt, parseFunctionParameters, setAgentPrompt, uniqueAgentId, updateAgentFunction } from "../../config-editor.js";
|
|
4
|
+
import { NEW_AGENT, NEW_SUBAGENT } from "./types.js";
|
|
5
|
+
import { ListStep } from "./list.js";
|
|
6
|
+
import { DetailStep } from "./detail.js";
|
|
7
|
+
import { PromptEditorScreen } from "./prompt-editor.js";
|
|
8
|
+
import { PromptScreen } from "./prompt.js";
|
|
9
|
+
export function renderAgentsStep(ctx) {
|
|
10
|
+
const { store, error, notice, activeStep, go, saveAgent, deleteAgent, setError, agentFields, agentPermFields, cols, rows } = ctx;
|
|
11
|
+
// ---------- Agent 定义列表 ----------
|
|
12
|
+
if (activeStep.kind === "agents") {
|
|
13
|
+
const items = [
|
|
14
|
+
{ label: "+ 新建 Agent", value: NEW_AGENT, hint: "顶层 Agent(可作为默认 Agent)" },
|
|
15
|
+
{ label: "+ 新建 Sub-agent", value: NEW_SUBAGENT, hint: "可被委派的子 Agent" },
|
|
16
|
+
...store.agents.map((def) => ({
|
|
17
|
+
label: def.name || def.id,
|
|
18
|
+
value: `agent:${def.id}`,
|
|
19
|
+
hint: `Agent · ${def.id}${def.custom ? "" : " · 出厂托管"}`,
|
|
20
|
+
})),
|
|
21
|
+
...store.subAgents.map((def) => ({
|
|
22
|
+
label: def.name || def.id,
|
|
23
|
+
value: `subagent:${def.id}`,
|
|
24
|
+
hint: `Sub-agent · ${def.id}`,
|
|
25
|
+
})),
|
|
26
|
+
];
|
|
27
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u25C6 Agent \u5B9A\u4E49", subtitle: `Agent ${store.agents.length} · Sub-agent ${store.subAgents.length}`, items: items, onPick: (value) => {
|
|
28
|
+
if (value === NEW_AGENT)
|
|
29
|
+
go({ kind: "agent-new", agentKind: "agent" });
|
|
30
|
+
else if (value === NEW_SUBAGENT)
|
|
31
|
+
go({ kind: "agent-new", agentKind: "subagent" });
|
|
32
|
+
else {
|
|
33
|
+
const [kind, id] = value.split(":");
|
|
34
|
+
go({ kind: "agent", agentKind: kind, agentId: id });
|
|
35
|
+
}
|
|
36
|
+
}, onCancel: () => go({ kind: "menu" }) }));
|
|
37
|
+
}
|
|
38
|
+
// ---------- Agent 详情 ----------
|
|
39
|
+
if (activeStep.kind === "agent") {
|
|
40
|
+
const { agentKind, agentId } = activeStep;
|
|
41
|
+
const def = findAgentDefinition(store, agentKind, agentId);
|
|
42
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.name || def.id}`, details: [
|
|
43
|
+
`${def.id} · ${def.custom ? "自定义" : "出厂托管"}${agentKind === "subagent" ? " · Sub-agent" : ""}`,
|
|
44
|
+
"↑ ↓ 移动 · Enter 编辑/切换/进入 · 改动即时写入磁盘",
|
|
45
|
+
], fields: agentFields(agentKind, def), notice: notice, action: {
|
|
46
|
+
label: `删除${agentKindLabel(agentKind)}`,
|
|
47
|
+
run: async () => {
|
|
48
|
+
const failure = await deleteAgent(agentKind, def.id);
|
|
49
|
+
if (!failure)
|
|
50
|
+
go({ kind: "agents" });
|
|
51
|
+
return failure;
|
|
52
|
+
},
|
|
53
|
+
}, onBack: () => go({ kind: "agents" }) }));
|
|
54
|
+
}
|
|
55
|
+
// ---------- Agent 权限子屏 ----------
|
|
56
|
+
if (activeStep.kind === "agent-perms") {
|
|
57
|
+
const { agentKind, agentId } = activeStep;
|
|
58
|
+
const def = findAgentDefinition(store, agentKind, agentId);
|
|
59
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 权限`, details: ["格式:`allow: a, b` 或 `deny: x`(逗号分隔;留空清除该维)", "↑ ↓ 移动 · Enter 编辑 · Esc 返回"], fields: agentPermFields(agentKind, def), notice: notice, onBack: () => go({ kind: "agent", agentKind, agentId }) }));
|
|
60
|
+
}
|
|
61
|
+
// ---------- Agent / Sub-agent 多行文本编辑(提示词 / 函数说明 / 参数 schema,系统编辑器)----------
|
|
62
|
+
if (activeStep.kind === "agent-text") {
|
|
63
|
+
const { agentKind, agentId, field } = activeStep;
|
|
64
|
+
const def = findAgentDefinition(store, agentKind, agentId);
|
|
65
|
+
const managed = agentKind === "agent" && !def.custom;
|
|
66
|
+
const target = managed ? { ...def, custom: true } : def;
|
|
67
|
+
const name = `${agentKindLabel(agentKind)} ${def.id}`;
|
|
68
|
+
const back = () => go({ kind: "agent", agentKind, agentId });
|
|
69
|
+
if (field === "fnParams") {
|
|
70
|
+
return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 参数 schema`, subtitle: "JSON \u5BF9\u8C61\uFF1BEnter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF0C\u4FDD\u5B58\u540E\u7ACB\u5373\u6821\u9A8C\u5E76\u5199\u76D8", text: JSON.stringify(def.function?.parameters ?? {}, null, 2), ext: "json", notice: notice, onSave: (value) => {
|
|
71
|
+
const parsed = parseFunctionParameters(value);
|
|
72
|
+
if (typeof parsed === "string")
|
|
73
|
+
return Promise.resolve(parsed);
|
|
74
|
+
return saveAgent(agentKind, updateAgentFunction(target, { parameters: parsed }), `${name} 的参数 schema 已更新`);
|
|
75
|
+
}, onBack: back }));
|
|
76
|
+
}
|
|
77
|
+
if (field === "fnDesc") {
|
|
78
|
+
return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 函数说明`, subtitle: "Enter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF08$EDITOR / notepad\uFF09\uFF1B\u6539\u5B8C\u4FDD\u5B58\u5373\u5199\u76D8", text: def.function?.description ?? "", notice: notice, onSave: (value) => saveAgent(agentKind, updateAgentFunction(target, { description: value }), `${name} 的函数说明已更新`), onBack: back }));
|
|
79
|
+
}
|
|
80
|
+
// field === "prompt"
|
|
81
|
+
return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 提示词`, subtitle: "Enter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF08$EDITOR / notepad\uFF09\uFF1B\u6539\u5B8C\u4FDD\u5B58\u5373\u5199\u76D8", text: getAgentPrompt(def), notice: notice, onSave: (value) => saveAgent(agentKind, setAgentPrompt(target, value), `${name} 的提示词已更新`), onBack: back }));
|
|
82
|
+
}
|
|
83
|
+
// ---------- 新建 Agent / Sub-agent ----------
|
|
84
|
+
if (activeStep.kind === "agent-new") {
|
|
85
|
+
const kind = activeStep.agentKind;
|
|
86
|
+
const kindName = agentKindLabel(kind);
|
|
87
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: `新建 ${kindName} · 名称`, details: [
|
|
88
|
+
"用于在列表与状态栏中标识该定义,例如 Coder",
|
|
89
|
+
kind === "agent" ? "创建后可在「默认项 → 默认 Agent」中选为默认" : "创建后自动生成 function 骨架(可编辑)",
|
|
90
|
+
], error: error, hints: [["Enter", "创建并编辑"], ["Esc", "返回"]], onSubmit: (value) => {
|
|
91
|
+
const name = value.trim();
|
|
92
|
+
if (!name) {
|
|
93
|
+
setError("名称不能为空");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const id = uniqueAgentId(agentList(store, kind).map((item) => item.id), name, kind === "agent" ? "agent" : "subagent");
|
|
97
|
+
const def = kind === "agent" ? createAgentDefinition({ id, name }) : createSubAgentDefinition({ id, name });
|
|
98
|
+
void (async () => {
|
|
99
|
+
const failure = await saveAgent(kind, def, `已新建 ${kindName} ${name}(${id})`);
|
|
100
|
+
if (failure) {
|
|
101
|
+
setError(failure);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
go({ kind: "agent", agentKind: kind, agentId: id });
|
|
105
|
+
})();
|
|
106
|
+
}, onCancel: () => go({ kind: "agents" }) }, `new:${kind}`));
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=step-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-agents.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-agents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-defaults.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-defaults.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA0FhE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { findEndpoint, findModel, isApiKeySet, setDefaultAgent, setDefaultImageModel, setDefaultMigrationModel, setDefaultModel } from "../../config-editor.js";
|
|
3
|
+
import { ListStep } from "./list.js";
|
|
4
|
+
export function renderDefaultsStep(ctx) {
|
|
5
|
+
const { config, store, activeStep, go, commit, cols, rows, props } = ctx;
|
|
6
|
+
// ---------- 默认项子菜单 ----------
|
|
7
|
+
if (activeStep.kind === "defaults") {
|
|
8
|
+
const defaultImage = (config.imageModels ?? []).find((model) => model.id === config.defaultImageModel);
|
|
9
|
+
const items = [
|
|
10
|
+
{
|
|
11
|
+
label: "默认模型",
|
|
12
|
+
value: "defaultModel",
|
|
13
|
+
hint: findModel(config, config.defaultModel)?.name ?? config.defaultModel ?? "未设置",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
label: "默认图片模型",
|
|
17
|
+
value: "defaultImageModel",
|
|
18
|
+
hint: defaultImage?.name ?? config.defaultImageModel ?? "未设置",
|
|
19
|
+
},
|
|
20
|
+
{ label: "默认 Agent", value: "defaultAgent", hint: config.defaultAgent ?? "未设置" },
|
|
21
|
+
{
|
|
22
|
+
label: "默认迁移模型",
|
|
23
|
+
value: "defaultMigrationModel",
|
|
24
|
+
hint: findModel(config, config.defaultMigrationModel)?.name ?? config.defaultMigrationModel ?? "未设置",
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u9ED8\u8BA4\u9879", subtitle: "\u65B0\u4F1A\u8BDD / \u4EFB\u52A1\u8FC1\u79FB\u4F7F\u7528\u7684\u9ED8\u8BA4\u503C", items: items, onPick: (target) => go({ kind: "pick-default", target }), onCancel: () => go({ kind: "menu" }) }));
|
|
28
|
+
}
|
|
29
|
+
// ---------- 选择某个默认项的值 ----------
|
|
30
|
+
if (activeStep.kind === "pick-default") {
|
|
31
|
+
const target = activeStep.target;
|
|
32
|
+
let title = "默认项";
|
|
33
|
+
let items = [];
|
|
34
|
+
if (target === "defaultModel" || target === "defaultMigrationModel") {
|
|
35
|
+
title = target === "defaultModel" ? "默认模型" : "默认迁移模型";
|
|
36
|
+
items = config.models.map((model) => {
|
|
37
|
+
const endpoint = findEndpoint(config, model.endpointId);
|
|
38
|
+
return {
|
|
39
|
+
label: model.name || model.id,
|
|
40
|
+
value: model.id,
|
|
41
|
+
hint: `${endpoint?.name ?? model.endpointId} · ${isApiKeySet(endpoint?.apiKey) ? "密钥就绪" : "缺 API Key"}`,
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else if (target === "defaultImageModel") {
|
|
46
|
+
title = "默认图片模型";
|
|
47
|
+
items = (config.imageModels ?? []).map((model) => ({
|
|
48
|
+
label: model.name || model.id,
|
|
49
|
+
value: model.id,
|
|
50
|
+
hint: findEndpoint(config, model.endpointId)?.name ?? model.endpointId,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
title = "默认 Agent";
|
|
55
|
+
const source = props.agentStore
|
|
56
|
+
? store.agents.map((agent) => ({ id: agent.id, name: agent.name || agent.id }))
|
|
57
|
+
: (props.agents ?? []);
|
|
58
|
+
items = source.map((agent) => ({ label: agent.name, value: agent.id, hint: agent.id }));
|
|
59
|
+
}
|
|
60
|
+
items = [...items, { label: "(未设置)", value: "" }];
|
|
61
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: title, subtitle: "\u9009\u4E2D\u540E\u5373\u65F6\u5199\u76D8", items: items, onPick: (value) => {
|
|
62
|
+
const id = value || undefined;
|
|
63
|
+
const label = value || "未设置";
|
|
64
|
+
if (target === "defaultModel")
|
|
65
|
+
void commit(setDefaultModel(config, id), `默认模型 → ${label}`, [], { kind: "defaults" });
|
|
66
|
+
else if (target === "defaultMigrationModel")
|
|
67
|
+
void commit(setDefaultMigrationModel(config, id), `默认迁移模型 → ${label}`, [], { kind: "defaults" });
|
|
68
|
+
else if (target === "defaultImageModel")
|
|
69
|
+
void commit(setDefaultImageModel(config, id), `默认图片模型 → ${label}`, [], { kind: "defaults" });
|
|
70
|
+
else
|
|
71
|
+
void commit(setDefaultAgent(config, id), `默认 Agent → ${label}`, [], { kind: "defaults" });
|
|
72
|
+
}, onCancel: () => go({ kind: "defaults" }) }));
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=step-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-defaults.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-defaults.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGhK,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACnD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IACzE,+BAA+B;IAC/B,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACvG,MAAM,KAAK,GAAgC;YACzC;gBACE,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,YAAY,IAAI,KAAK;aACnF;YACD;gBACE,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,YAAY,EAAE,IAAI,IAAI,MAAM,CAAC,iBAAiB,IAAI,KAAK;aAC9D;YACD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE;YAChF;gBACE,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,qBAAqB,IAAI,KAAK;aACrG;SACF,CAAC;QACF,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAC,oBAAK,EACX,QAAQ,EAAC,mFAAkB,EAC3B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EACxD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GACpC,CACH,CAAC;IACJ,CAAC;IAGD,kCAAkC;IAClC,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,KAAK,GAAyB,EAAE,CAAC;QACrC,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,uBAAuB,EAAE,CAAC;YACpE,KAAK,GAAG,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtD,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBACxD,OAAO;oBACL,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;oBAC7B,KAAK,EAAE,KAAK,CAAC,EAAE;oBACf,IAAI,EAAE,GAAG,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,UAAU,MAAM,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE;iBACxG,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;YAC1C,KAAK,GAAG,QAAQ,CAAC;YACjB,KAAK,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACjD,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;gBAC7B,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,UAAU;aACvE,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,UAAU,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU;gBAC7B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/E,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACzB,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAC,4CAAS,EAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,MAAM,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC;gBAC9B,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;gBAC7B,IAAI,MAAM,KAAK,cAAc;oBAAE,KAAK,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;qBAChH,IAAI,MAAM,KAAK,uBAAuB;oBACzC,KAAK,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;qBAC9F,IAAI,MAAM,KAAK,mBAAmB;oBACrC,KAAK,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,YAAY,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;;oBAC1F,KAAK,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,cAAc,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACjG,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GACxC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-endpoints.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-endpoints.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6DjE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { findEndpoint, maskApiKey, modelsUsingEndpoint, removeEndpoint } from "../../config-editor.js";
|
|
3
|
+
import { NEW_ENDPOINT } from "./types.js";
|
|
4
|
+
import { ListStep } from "./list.js";
|
|
5
|
+
import { DetailStep } from "./detail.js";
|
|
6
|
+
export function renderEndpointsStep(ctx) {
|
|
7
|
+
const { config, notice, draft, activeStep, go, persist, endpointFields, cols, rows } = ctx;
|
|
8
|
+
// ---------- 端点管理([新建端点] + 端点列表)----------
|
|
9
|
+
if (activeStep.kind === "endpoints") {
|
|
10
|
+
const items = [
|
|
11
|
+
{ label: "+ 新建端点", value: NEW_ENDPOINT, hint: "自定义 OpenAI 兼容服务" },
|
|
12
|
+
...config.endpoints.map((endpoint) => ({
|
|
13
|
+
label: endpoint.name || endpoint.id,
|
|
14
|
+
value: endpoint.id,
|
|
15
|
+
hint: `${maskApiKey(endpoint.apiKey)} · ${endpoint.baseUrl}`,
|
|
16
|
+
})),
|
|
17
|
+
];
|
|
18
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u7AEF\u70B9\u7BA1\u7406", subtitle: `共 ${config.endpoints.length} 个端点 · 选中后可就地编辑 / 删除`, items: items, onPick: (value) => value === NEW_ENDPOINT
|
|
19
|
+
? go({ kind: "new-endpoint", field: "name", draft })
|
|
20
|
+
: go({ kind: "endpoint", endpointId: value }), onCancel: () => go({ kind: "menu" }) }));
|
|
21
|
+
}
|
|
22
|
+
// ---------- 端点详情(就地编辑名称 / Base URL / API Key / 描述)----------
|
|
23
|
+
if (activeStep.kind === "endpoint") {
|
|
24
|
+
const endpoint = findEndpoint(config, activeStep.endpointId);
|
|
25
|
+
const name = endpoint.name || endpoint.id;
|
|
26
|
+
const modelCount = modelsUsingEndpoint(config, endpoint.id).length;
|
|
27
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ 端点 · ${name}`, details: [`${endpoint.id}${modelCount > 0 ? ` · ${modelCount} 个模型引用` : ""}`, "↑ ↓ 移动 · Enter 编辑 · 改动即时写入磁盘"], fields: endpointFields(endpoint), notice: notice, action: {
|
|
28
|
+
label: "删除端点",
|
|
29
|
+
run: async () => {
|
|
30
|
+
const refs = modelsUsingEndpoint(config, endpoint.id);
|
|
31
|
+
if (refs.length > 0) {
|
|
32
|
+
return `无法删除:仍被 ${refs.length} 个模型引用(${refs.map((m) => m.name || m.id).join("、")}),请先删除或改绑这些模型`;
|
|
33
|
+
}
|
|
34
|
+
const failure = await persist(removeEndpoint(config, endpoint.id), `已删除端点 ${name}`);
|
|
35
|
+
if (!failure)
|
|
36
|
+
go({ kind: "endpoints" });
|
|
37
|
+
return failure;
|
|
38
|
+
},
|
|
39
|
+
}, onBack: () => go({ kind: "endpoints" }) }));
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=step-endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-endpoints.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-endpoints.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-mcp.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-mcp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA8I3D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { mcpConfigPath } from "../../config.js";
|
|
3
|
+
import { addMcpServer, findMcpServer, mcpServerIdTaken, removeMcpServer, updateMcpServer } from "../../config-editor.js";
|
|
4
|
+
import { SWITCH_SCOPE, NEW_MCP_SERVER } from "./types.js";
|
|
5
|
+
import { ListStep } from "./list.js";
|
|
6
|
+
import { DetailStep } from "./detail.js";
|
|
7
|
+
import { KvEditorScreen } from "./kv-editor.js";
|
|
8
|
+
import { PromptScreen } from "./prompt.js";
|
|
9
|
+
import { scopeLabel, mcpCount, mcpServerHint } from "./mcp-helpers.js";
|
|
10
|
+
export function renderMcpStep(ctx) {
|
|
11
|
+
const { mcp, error, notice, activeStep, go, persistMcp, setError, mcpServerFields, cols, rows } = ctx;
|
|
12
|
+
// ---------- MCP 服务器列表(含作用域切换)----------
|
|
13
|
+
if (activeStep.kind === "mcp") {
|
|
14
|
+
const scope = activeStep.scope;
|
|
15
|
+
const other = scope === "global" ? "project" : "global";
|
|
16
|
+
const items = [
|
|
17
|
+
{
|
|
18
|
+
label: `⇄ 切换到「${scopeLabel(other)}」作用域`,
|
|
19
|
+
value: SWITCH_SCOPE,
|
|
20
|
+
hint: `${mcpCount(mcp, other)} 个服务器`,
|
|
21
|
+
},
|
|
22
|
+
{ label: "+ 新建服务器", value: NEW_MCP_SERVER, hint: "stdio / http / sse" },
|
|
23
|
+
...Object.entries(mcp[scope].mcpServers).map(([id, entry]) => ({
|
|
24
|
+
label: id,
|
|
25
|
+
value: id,
|
|
26
|
+
hint: mcpServerHint(entry),
|
|
27
|
+
})),
|
|
28
|
+
];
|
|
29
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: `◆ MCP 服务器 · ${scopeLabel(scope)}`, subtitle: `${mcpCount(mcp, scope)} 个 · ${mcpConfigPath(scope)}`, items: items, onPick: (value) => {
|
|
30
|
+
if (value === SWITCH_SCOPE)
|
|
31
|
+
go({ kind: "mcp", scope: other });
|
|
32
|
+
else if (value === NEW_MCP_SERVER)
|
|
33
|
+
go({ kind: "mcp-new", scope });
|
|
34
|
+
else
|
|
35
|
+
go({ kind: "mcp-server", scope, serverId: value });
|
|
36
|
+
}, onCancel: () => go({ kind: "menu" }) }));
|
|
37
|
+
}
|
|
38
|
+
// ---------- MCP 服务器详情 ----------
|
|
39
|
+
if (activeStep.kind === "mcp-server") {
|
|
40
|
+
const { scope, serverId } = activeStep;
|
|
41
|
+
const entry = findMcpServer(mcp[scope], serverId);
|
|
42
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ MCP · ${serverId}`, details: [
|
|
43
|
+
`${scopeLabel(scope)} · ${mcpConfigPath(scope)}`,
|
|
44
|
+
`传输 ${entry.type ?? "stdio"} · ↑ ↓ 移动 · Enter 编辑/切换`,
|
|
45
|
+
], fields: mcpServerFields(scope, serverId, entry), notice: notice, action: {
|
|
46
|
+
label: "删除服务器",
|
|
47
|
+
run: async () => {
|
|
48
|
+
const failure = await persistMcp(scope, removeMcpServer(mcp[scope], serverId), `已删除 MCP 服务器 ${serverId}(${scopeLabel(scope)})`);
|
|
49
|
+
if (!failure)
|
|
50
|
+
go({ kind: "mcp", scope });
|
|
51
|
+
return failure;
|
|
52
|
+
},
|
|
53
|
+
}, onBack: () => go({ kind: "mcp", scope }) }));
|
|
54
|
+
}
|
|
55
|
+
// ---------- MCP 键值编辑(env / headers)----------
|
|
56
|
+
if (activeStep.kind === "mcp-kv") {
|
|
57
|
+
const { scope, serverId, field } = activeStep;
|
|
58
|
+
const entry = findMcpServer(mcp[scope], serverId);
|
|
59
|
+
const label = field === "env" ? "环境变量" : "请求头";
|
|
60
|
+
const current = entry[field] ?? {};
|
|
61
|
+
return (_jsx(KvEditorScreen, { columns: cols, rows: rows, title: `◆ MCP · ${serverId} · ${label}`, subtitle: `${scopeLabel(scope)} · ${Object.keys(current).length} 项`, map: current, notice: notice, onCommit: (next) => {
|
|
62
|
+
const patch = field === "env"
|
|
63
|
+
? { env: Object.keys(next).length ? next : undefined }
|
|
64
|
+
: { headers: Object.keys(next).length ? next : undefined };
|
|
65
|
+
return persistMcp(scope, updateMcpServer(mcp[scope], serverId, patch), `MCP ${serverId} 的${label}已更新(${scopeLabel(scope)})`);
|
|
66
|
+
}, onBack: () => go({ kind: "mcp-server", scope, serverId }) }));
|
|
67
|
+
}
|
|
68
|
+
// ---------- 新建 MCP 服务器 ----------
|
|
69
|
+
if (activeStep.kind === "mcp-new") {
|
|
70
|
+
const scope = activeStep.scope;
|
|
71
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: `新建 MCP 服务器 · 名称(${scopeLabel(scope)})`, details: [
|
|
72
|
+
"作为 mcpServers 的键,例如 github / chrome-devtools",
|
|
73
|
+
"创建后默认 stdio,可编辑传输方式 / 命令 / 参数 / 环境变量等",
|
|
74
|
+
], error: error, hints: [["Enter", "创建并编辑"], ["Esc", "返回"]], onSubmit: (value) => {
|
|
75
|
+
const name = value.trim();
|
|
76
|
+
if (!name) {
|
|
77
|
+
setError("名称不能为空");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (mcpServerIdTaken(mcp[scope], name)) {
|
|
81
|
+
setError(`已存在名为 ${name} 的服务器`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { mcp: next, id } = addMcpServer(mcp[scope], name);
|
|
85
|
+
void (async () => {
|
|
86
|
+
const failure = await persistMcp(scope, next, `已新建 MCP 服务器 ${id}(${scopeLabel(scope)})`);
|
|
87
|
+
if (failure) {
|
|
88
|
+
setError(failure);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
go({ kind: "mcp-server", scope, serverId: id });
|
|
92
|
+
})();
|
|
93
|
+
}, onCancel: () => go({ kind: "mcp", scope }) }, `new:mcp:${scope}`));
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=step-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-mcp.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-mcp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-menu.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-menu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6B5D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { MenuStep } from "./menu.js";
|
|
3
|
+
export function renderMenuStep(ctx) {
|
|
4
|
+
const { config, mcp, store, notice, activeStep, acc, snapshot, go, cols, rows, props } = ctx;
|
|
5
|
+
// ---------- 配置中心菜单 ----------
|
|
6
|
+
if (activeStep.kind === "menu") {
|
|
7
|
+
return (_jsx(MenuStep, { columns: cols, rows: rows, config: config, mcp: mcp, agentStore: store, savedCount: acc.current.summary.length, notice: notice, onClose: () => props.onClose(snapshot()), onPick: (action) => {
|
|
8
|
+
if (action === "endpoints")
|
|
9
|
+
go({ kind: "endpoints" });
|
|
10
|
+
else if (action === "models")
|
|
11
|
+
go({ kind: "models" });
|
|
12
|
+
else if (action === "imageModels")
|
|
13
|
+
go({ kind: "image-models" });
|
|
14
|
+
else if (action === "mcp")
|
|
15
|
+
go({ kind: "mcp", scope: "global" });
|
|
16
|
+
else if (action === "agents")
|
|
17
|
+
go({ kind: "agents" });
|
|
18
|
+
else if (action === "defaults")
|
|
19
|
+
go({ kind: "defaults" });
|
|
20
|
+
else if (action === "maxToolOutput")
|
|
21
|
+
go({ kind: "max-tool-output" });
|
|
22
|
+
else
|
|
23
|
+
props.onClose(snapshot());
|
|
24
|
+
} }));
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=step-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-menu.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-menu.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAC7F,+BAA+B;IAC/B,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,KAAK,EACjB,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EACxC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,MAAM,KAAK,WAAW;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;qBACjD,IAAI,MAAM,KAAK,QAAQ;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAChD,IAAI,MAAM,KAAK,aAAa;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;qBAC3D,IAAI,MAAM,KAAK,KAAK;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAC3D,IAAI,MAAM,KAAK,QAAQ;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAChD,IAAI,MAAM,KAAK,UAAU;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;qBACpD,IAAI,MAAM,KAAK,eAAe;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;;oBAChE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,CAAC,GACD,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-models.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-models.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAqL9D"}
|