@ai-zen/cli 1.0.0-alpha.20 → 1.0.0-alpha.23
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 +205 -0
- package/README.md +45 -17
- package/README.zh.md +45 -17
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +32 -10
- 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 +6 -1
- package/dist/agents-store.js.map +1 -1
- package/dist/auto-migrate-confirm.d.ts.map +1 -1
- package/dist/auto-migrate-confirm.js +2 -1
- package/dist/auto-migrate-confirm.js.map +1 -1
- package/dist/config-editor.d.ts +9 -1
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +30 -19
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -13
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts +123 -4
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +92 -17
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/conversation-persist-plugin.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.js +6 -14
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +68 -14
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +81 -23
- package/dist/conversation-repository.js.map +1 -1
- package/dist/cwd-tracker-plugin.d.ts.map +1 -1
- package/dist/cwd-tracker-plugin.js +6 -2
- 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.map +1 -1
- package/dist/handoff-service.js +22 -19
- package/dist/handoff-service.js.map +1 -1
- 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 +290 -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 +223 -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 +34 -0
- package/dist/i18n/preferences.d.ts.map +1 -0
- package/dist/i18n/preferences.js +69 -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 +293 -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 +227 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +41 -23
- 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.map +1 -1
- package/dist/model-switch.js +5 -4
- package/dist/model-switch.js.map +1 -1
- package/dist/reasoning-effort.d.ts +23 -4
- package/dist/reasoning-effort.d.ts.map +1 -1
- package/dist/reasoning-effort.js +51 -24
- package/dist/reasoning-effort.js.map +1 -1
- package/dist/sdk-log.d.ts +23 -16
- package/dist/sdk-log.d.ts.map +1 -1
- package/dist/sdk-log.js +43 -19
- package/dist/sdk-log.js.map +1 -1
- package/dist/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +19 -19
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +5 -2
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +5 -2
- package/dist/sub-agent-guard-plugin.js.map +1 -1
- package/dist/tui/chat-session.d.ts +73 -0
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +167 -33
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +43 -2
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +97 -4
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/detail.d.ts +12 -6
- package/dist/tui/config-wizard/detail.d.ts.map +1 -1
- package/dist/tui/config-wizard/detail.js +33 -32
- package/dist/tui/config-wizard/detail.js.map +1 -1
- package/dist/tui/config-wizard/engine.d.ts.map +1 -1
- package/dist/tui/config-wizard/engine.js +26 -20
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +176 -164
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/kv-editor.js +9 -5
- package/dist/tui/config-wizard/kv-editor.js.map +1 -1
- package/dist/tui/config-wizard/list.d.ts.map +1 -1
- package/dist/tui/config-wizard/list.js +2 -1
- 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 +32 -19
- package/dist/tui/config-wizard/menu.js.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.js +4 -3
- 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 +29 -20
- 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 +21 -17
- 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 +16 -6
- 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 +17 -19
- 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 +41 -26
- 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/index.d.ts +17 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +25 -14
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +4 -1
- package/dist/tui/input-editing.d.ts.map +1 -1
- package/dist/tui/input-editing.js +7 -3
- package/dist/tui/input-editing.js.map +1 -1
- 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 +54 -3
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +469 -330
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +8 -0
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +263 -406
- 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/handoff-choice.d.ts.map +1 -1
- package/dist/tui/screens/handoff-choice.js +4 -3
- package/dist/tui/screens/handoff-choice.js.map +1 -1
- package/dist/tui/screens/index.d.ts +3 -1
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +2 -1
- 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 +13 -1
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +26 -12
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +15 -0
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +14 -2
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +6 -6
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts.map +1 -1
- package/dist/tui/screens/messages-view.js +5 -4
- package/dist/tui/screens/messages-view.js.map +1 -1
- 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 +15 -0
- package/dist/tui/screens/notice-bar.js.map +1 -0
- package/dist/tui/screens/notice.d.ts +40 -8
- package/dist/tui/screens/notice.d.ts.map +1 -1
- package/dist/tui/screens/notice.js +75 -15
- package/dist/tui/screens/notice.js.map +1 -1
- package/dist/tui/screens/overlays.d.ts.map +1 -1
- package/dist/tui/screens/overlays.js +3 -2
- package/dist/tui/screens/overlays.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 +5 -2
- 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 +44 -0
- package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
- package/dist/tui/screens/use-input-editing.js +192 -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 +35 -0
- package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
- package/dist/tui/screens/use-wizard-host.js +103 -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 +8 -5
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +95 -35
- 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 +0 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
|
@@ -4,28 +4,39 @@ import { NEW_MODEL, NEW_IMAGE_MODEL } from "./types.js";
|
|
|
4
4
|
import { ListStep } from "./list.js";
|
|
5
5
|
import { DetailStep } from "./detail.js";
|
|
6
6
|
import { PromptScreen } from "./prompt.js";
|
|
7
|
+
import { t } from "../../i18n/index.js";
|
|
8
|
+
/** 模型来源标签:`出厂托管` 在详情屏里要多带一句说明(改动会转自定义) */
|
|
9
|
+
function kindLabel(custom, withNote = false) {
|
|
10
|
+
if (custom)
|
|
11
|
+
return t("wiz.kind.custom");
|
|
12
|
+
return t(withNote ? "wiz.modelKind.factoryNote" : "wiz.kind.factory");
|
|
13
|
+
}
|
|
7
14
|
export function renderModelsStep(ctx) {
|
|
8
15
|
const { config, error, notice, activeStep, go, persist, setError, modelFields, imageModelFields, cols, rows } = ctx;
|
|
9
16
|
// ---------- 模型管理 ----------
|
|
10
17
|
if (activeStep.kind === "models") {
|
|
11
18
|
const items = [
|
|
12
|
-
{ label: "
|
|
19
|
+
{ label: t("wiz.models.newItem"), value: NEW_MODEL, hint: t("wiz.models.newItemHint") },
|
|
13
20
|
...config.models.map((model) => ({
|
|
14
21
|
label: model.name || model.id,
|
|
15
22
|
value: model.id,
|
|
16
|
-
hint:
|
|
23
|
+
hint: t("wiz.modelItem.hint", {
|
|
24
|
+
endpoint: findEndpoint(config, model.endpointId)?.name ?? model.endpointId,
|
|
25
|
+
kind: kindLabel(model.custom),
|
|
26
|
+
vision: model.vision ? t("wiz.modelKind.visionSuffix") : "",
|
|
27
|
+
}),
|
|
17
28
|
})),
|
|
18
29
|
];
|
|
19
|
-
return (_jsx(ListStep, { columns: cols, rows: rows, title: "
|
|
30
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: t("wiz.menu.models"), subtitle: t("wiz.models.subtitle", { n: config.models.length }), items: items, onPick: (value) => (value === NEW_MODEL ? go({ kind: "new-model" }) : go({ kind: "model", modelId: value })), onCancel: () => go({ kind: "menu" }) }));
|
|
20
31
|
}
|
|
21
32
|
// ---------- 模型详情 ----------
|
|
22
33
|
if (activeStep.kind === "model") {
|
|
23
34
|
const model = findModel(config, activeStep.modelId);
|
|
24
35
|
const name = model.name || model.id;
|
|
25
|
-
return (_jsx(DetailStep, { columns: cols, rows: rows, title:
|
|
26
|
-
label: "
|
|
36
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: t("wiz.models.detailTitle", { name }), details: [t("wiz.models.detailLine", { id: model.id, kind: kindLabel(model.custom, true) }), t("wiz.detail.moveHint")], fields: modelFields(model), notice: notice, action: {
|
|
37
|
+
label: t("wiz.models.delete"),
|
|
27
38
|
run: async () => {
|
|
28
|
-
const failure = await persist(removeModel(config, model.id),
|
|
39
|
+
const failure = await persist(removeModel(config, model.id), t("wiz.models.deleted", { name }));
|
|
29
40
|
if (!failure)
|
|
30
41
|
go({ kind: "models" });
|
|
31
42
|
return failure;
|
|
@@ -36,23 +47,27 @@ export function renderModelsStep(ctx) {
|
|
|
36
47
|
if (activeStep.kind === "image-models") {
|
|
37
48
|
const list = config.imageModels ?? [];
|
|
38
49
|
const items = [
|
|
39
|
-
{ label: "
|
|
50
|
+
{ label: t("wiz.imageModels.newItem"), value: NEW_IMAGE_MODEL, hint: t("wiz.models.newItemHint") },
|
|
40
51
|
...list.map((model) => ({
|
|
41
52
|
label: model.name || model.id,
|
|
42
53
|
value: model.id,
|
|
43
|
-
hint:
|
|
54
|
+
hint: t("wiz.modelItem.hint", {
|
|
55
|
+
endpoint: findEndpoint(config, model.endpointId)?.name ?? model.endpointId,
|
|
56
|
+
kind: kindLabel(model.custom),
|
|
57
|
+
vision: "",
|
|
58
|
+
}),
|
|
44
59
|
})),
|
|
45
60
|
];
|
|
46
|
-
return (_jsx(ListStep, { columns: cols, rows: rows, title: "
|
|
61
|
+
return (_jsx(ListStep, { columns: cols, rows: rows, title: t("wiz.menu.imageModels"), subtitle: t("wiz.imageModels.subtitle", { n: list.length }), items: items, onPick: (value) => (value === NEW_IMAGE_MODEL ? go({ kind: "new-image-model" }) : go({ kind: "image-model", modelId: value })), onCancel: () => go({ kind: "menu" }) }));
|
|
47
62
|
}
|
|
48
63
|
// ---------- 图片模型详情 ----------
|
|
49
64
|
if (activeStep.kind === "image-model") {
|
|
50
65
|
const model = (config.imageModels ?? []).find((m) => m.id === activeStep.modelId);
|
|
51
66
|
const name = model.name || model.id;
|
|
52
|
-
return (_jsx(DetailStep, { columns: cols, rows: rows, title:
|
|
53
|
-
label: "
|
|
67
|
+
return (_jsx(DetailStep, { columns: cols, rows: rows, title: t("wiz.imageModels.detailTitle", { name }), details: [t("wiz.models.detailLine", { id: model.id, kind: kindLabel(model.custom, true) }), t("wiz.detail.moveHint")], fields: imageModelFields(model), notice: notice, action: {
|
|
68
|
+
label: t("wiz.imageModels.delete"),
|
|
54
69
|
run: async () => {
|
|
55
|
-
const failure = await persist(removeImageModel(config, model.id),
|
|
70
|
+
const failure = await persist(removeImageModel(config, model.id), t("wiz.imageModels.deleted", { name }));
|
|
56
71
|
if (!failure)
|
|
57
72
|
go({ kind: "image-models" });
|
|
58
73
|
return failure;
|
|
@@ -62,20 +77,20 @@ export function renderModelsStep(ctx) {
|
|
|
62
77
|
// ---------- 新建模型(名称 → 创建并进入详情)----------
|
|
63
78
|
if (activeStep.kind === "new-model") {
|
|
64
79
|
const endpointId = config.endpoints[0]?.id ?? "";
|
|
65
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: "
|
|
66
|
-
"
|
|
80
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.models.createTitle"), details: [
|
|
81
|
+
t("wiz.models.createDesc", { example: "My GPT" }),
|
|
67
82
|
config.endpoints.length === 0
|
|
68
|
-
? "
|
|
69
|
-
:
|
|
70
|
-
], error: error, hints: [["Enter", "
|
|
83
|
+
? t("wiz.models.noEndpoint")
|
|
84
|
+
: t("wiz.models.defaultEndpoint", { endpoint: findEndpoint(config, endpointId)?.name ?? endpointId }),
|
|
85
|
+
], error: error, hints: [["Enter", t("wiz.createAndEdit")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
71
86
|
const name = value.trim();
|
|
72
87
|
if (!name) {
|
|
73
|
-
setError("
|
|
88
|
+
setError(t("err.nameRequired"));
|
|
74
89
|
return;
|
|
75
90
|
}
|
|
76
91
|
const { config: next, model } = addModel(config, { name, endpointId });
|
|
77
92
|
void (async () => {
|
|
78
|
-
const failure = await persist(next,
|
|
93
|
+
const failure = await persist(next, t("wiz.models.created", { name: model.name, id: model.id }));
|
|
79
94
|
if (failure) {
|
|
80
95
|
setError(failure);
|
|
81
96
|
return;
|
|
@@ -87,20 +102,20 @@ export function renderModelsStep(ctx) {
|
|
|
87
102
|
// ---------- 新建图片模型(名称 → 创建并进入详情)----------
|
|
88
103
|
if (activeStep.kind === "new-image-model") {
|
|
89
104
|
const endpointId = config.endpoints[0]?.id ?? "";
|
|
90
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: "
|
|
91
|
-
"
|
|
105
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.imageModels.createTitle"), details: [
|
|
106
|
+
t("wiz.models.createDesc", { example: "My Image" }),
|
|
92
107
|
config.endpoints.length === 0
|
|
93
|
-
? "
|
|
94
|
-
:
|
|
95
|
-
], error: error, hints: [["Enter", "
|
|
108
|
+
? t("wiz.models.noEndpoint")
|
|
109
|
+
: t("wiz.models.defaultEndpoint", { endpoint: findEndpoint(config, endpointId)?.name ?? endpointId }),
|
|
110
|
+
], error: error, hints: [["Enter", t("wiz.createAndEdit")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
96
111
|
const name = value.trim();
|
|
97
112
|
if (!name) {
|
|
98
|
-
setError("
|
|
113
|
+
setError(t("err.nameRequired"));
|
|
99
114
|
return;
|
|
100
115
|
}
|
|
101
116
|
const { config: next, model } = addImageModel(config, { name, endpointId });
|
|
102
117
|
void (async () => {
|
|
103
|
-
const failure = await persist(next,
|
|
118
|
+
const failure = await persist(next, t("wiz.imageModels.created", { name: model.name, id: model.id }));
|
|
104
119
|
if (failure) {
|
|
105
120
|
setError(failure);
|
|
106
121
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-models.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-models.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-models.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-models.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-new-endpoint.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-new-endpoint.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-new-endpoint.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-new-endpoint.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAkGnE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { addEndpoint, apiKeyGuide } from "../../config-editor.js";
|
|
3
3
|
import { PromptScreen } from "./prompt.js";
|
|
4
|
+
import { t } from "../../i18n/index.js";
|
|
4
5
|
export function renderNewEndpointStep(ctx) {
|
|
5
6
|
const { config, error, draft, activeStep, go, commit, setDraft, setError, setStep, cols, rows } = ctx;
|
|
6
7
|
if (activeStep.kind !== "new-endpoint")
|
|
@@ -8,10 +9,10 @@ export function renderNewEndpointStep(ctx) {
|
|
|
8
9
|
// ---------- 新建端点(名称 → Base URL → API Key)----------
|
|
9
10
|
const field = activeStep.field;
|
|
10
11
|
if (field === "name") {
|
|
11
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: "
|
|
12
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.newEndpoint.nameTitle"), details: [t("wiz.newEndpoint.nameDesc", { example: "My Gateway" })], initialValue: draft.name, error: error, hints: [["Enter", t("ui.next")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
12
13
|
const name = value.trim();
|
|
13
14
|
if (!name) {
|
|
14
|
-
setError("
|
|
15
|
+
setError(t("err.nameRequired"));
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
18
|
const next = { ...draft, name };
|
|
@@ -21,10 +22,10 @@ export function renderNewEndpointStep(ctx) {
|
|
|
21
22
|
}, onCancel: () => go({ kind: "endpoints" }) }, "new:name"));
|
|
22
23
|
}
|
|
23
24
|
if (field === "baseUrl") {
|
|
24
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: "
|
|
25
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.newEndpoint.baseUrlTitle"), details: [t("wiz.newEndpoint.baseUrlDesc")], initialValue: draft.baseUrl, error: error, hints: [["Enter", t("ui.next")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
25
26
|
const baseUrl = value.trim();
|
|
26
27
|
if (!/^https?:\/\//i.test(baseUrl)) {
|
|
27
|
-
setError("
|
|
28
|
+
setError(t("err.baseUrlScheme"));
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
30
31
|
const next = { ...draft, baseUrl };
|
|
@@ -36,16 +37,19 @@ export function renderNewEndpointStep(ctx) {
|
|
|
36
37
|
setStep({ kind: "new-endpoint", field: "name", draft });
|
|
37
38
|
} }, "new:baseUrl"));
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
].filter((line) => Boolean(line)), mask: true, error: error, hints: [["Enter", "保存端点"], ["Tab", "明文/掩码"], ["Esc", "返回"]], onSubmit: (value) => {
|
|
40
|
+
const guide = apiKeyGuide(draft.baseUrl);
|
|
41
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.newEndpoint.apiKeyTitle"), details: [
|
|
42
|
+
t("wiz.apiKey.endpointLine", { name: draft.name, url: draft.baseUrl }),
|
|
43
|
+
t("wiz.newEndpoint.apiKeyOptional"),
|
|
44
|
+
guide.url ? t("wiz.apiKey.guideUrl", { vendor: guide.vendor, url: guide.url }) : undefined,
|
|
45
|
+
].filter((line) => Boolean(line)), mask: true, error: error, hints: [["Enter", t("wiz.newEndpoint.save")], ["Tab", t("ui.plainOrMasked")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
46
46
|
const apiKey = value.trim();
|
|
47
47
|
const { config: next, endpoint } = addEndpoint(config, { ...draft, apiKey });
|
|
48
|
-
void commit(next,
|
|
48
|
+
void commit(next, t("wiz.newEndpoint.created", {
|
|
49
|
+
name: endpoint.name,
|
|
50
|
+
id: endpoint.id,
|
|
51
|
+
suffix: apiKey ? "" : t("wiz.newEndpoint.keyPending"),
|
|
52
|
+
}), [endpoint.id], { kind: "endpoints" });
|
|
49
53
|
}, onCancel: () => {
|
|
50
54
|
setError(null);
|
|
51
55
|
setStep({ kind: "new-endpoint", field: "baseUrl", draft });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-new-endpoint.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-new-endpoint.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-new-endpoint.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-new-endpoint.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-simple.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-simple.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA8F9D"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { apiKeyGuide, findEndpoint, maskApiKey, setEndpointApiKey, setEndpointBaseUrl, setMaxToolOutput } from "../../config-editor.js";
|
|
3
3
|
import { PromptScreen } from "./prompt.js";
|
|
4
|
+
import { t } from "../../i18n/index.js";
|
|
4
5
|
export function renderSimpleStep(ctx) {
|
|
5
6
|
const { config, error, activeStep, snapshot, go, commit, setError, cols, rows, props } = ctx;
|
|
6
7
|
// ---------- 工具输出上限 ----------
|
|
7
8
|
if (activeStep.kind === "max-tool-output") {
|
|
8
9
|
const current = config.maxToolOutput ?? 32768;
|
|
9
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: "
|
|
10
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.maxToolOutput.title"), details: [t("wiz.currentLine", { value: current }), t("wiz.maxToolOutput.desc")], initialValue: String(current), error: error, hints: [["Enter", t("ui.save")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
10
11
|
const n = Number(value.trim());
|
|
11
12
|
if (!Number.isFinite(n) || n <= 0) {
|
|
12
|
-
setError("
|
|
13
|
+
setError(t("err.positiveInteger"));
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
|
-
void commit(setMaxToolOutput(config, Math.floor(n)),
|
|
16
|
+
void commit(setMaxToolOutput(config, Math.floor(n)), t("wiz.maxToolOutput.updated", { n: Math.floor(n) }), [], { kind: "menu" });
|
|
16
17
|
}, onCancel: () => go({ kind: "menu" }) }, "maxToolOutput"));
|
|
17
18
|
}
|
|
18
19
|
// ---------- 端点字段直达编辑(首启引导 / `/key`)----------
|
|
@@ -21,33 +22,33 @@ export function renderSimpleStep(ctx) {
|
|
|
21
22
|
const name = endpoint.name || endpoint.id;
|
|
22
23
|
if (activeStep.field === "apiKey") {
|
|
23
24
|
const guide = apiKeyGuide(endpoint.baseUrl);
|
|
24
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: props.onboarding ?
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: props.onboarding ? t("wiz.apiKey.titleOnboarding", { name }) : t("wiz.apiKey.title", { name }), details: [
|
|
26
|
+
t("wiz.apiKey.endpointLine", { name, url: endpoint.baseUrl }),
|
|
27
|
+
t("wiz.currentLine", { value: maskApiKey(endpoint.apiKey) }),
|
|
27
28
|
guide.url
|
|
28
|
-
?
|
|
29
|
-
:
|
|
30
|
-
props.onboarding ? "
|
|
29
|
+
? t("wiz.apiKey.guideUrl", { vendor: guide.vendor, url: guide.url })
|
|
30
|
+
: t("wiz.apiKey.guideNoUrl", { vendor: guide.vendor }),
|
|
31
|
+
props.onboarding ? t("wiz.apiKey.onboardingNote") : undefined,
|
|
31
32
|
].filter((line) => Boolean(line)), mask: true, error: error, hints: [
|
|
32
|
-
["Enter", props.onboarding ? "
|
|
33
|
-
["Tab", "
|
|
34
|
-
["Esc", props.closeOnSave ? "
|
|
33
|
+
["Enter", props.onboarding ? t("wiz.apiKey.saveAndEnter") : t("ui.save")],
|
|
34
|
+
["Tab", t("ui.plainOrMasked")],
|
|
35
|
+
["Esc", props.closeOnSave ? t("ui.discard") : t("ui.back")],
|
|
35
36
|
], onSubmit: (value) => {
|
|
36
37
|
const key = value.trim();
|
|
37
38
|
if (!key) {
|
|
38
|
-
setError("
|
|
39
|
+
setError(t("err.apiKeyRequired"));
|
|
39
40
|
return;
|
|
40
41
|
}
|
|
41
|
-
void commit(setEndpointApiKey(config, endpoint.id, key),
|
|
42
|
+
void commit(setEndpointApiKey(config, endpoint.id, key), t("wiz.endpointUpdated", { name, label: "API Key" }), [endpoint.id]);
|
|
42
43
|
}, onCancel: () => (props.closeOnSave ? props.onClose(snapshot()) : go({ kind: "menu" })) }, `apiKey:${endpoint.id}`));
|
|
43
44
|
}
|
|
44
|
-
return (_jsx(PromptScreen, { columns: cols, rows: rows, title:
|
|
45
|
+
return (_jsx(PromptScreen, { columns: cols, rows: rows, title: t("wiz.baseUrl.title", { name }), details: [t("wiz.currentLine", { value: endpoint.baseUrl }), t("wiz.baseUrl.hint")], initialValue: endpoint.baseUrl, error: error, hints: [["Enter", t("ui.save")], ["Esc", t("ui.back")]], onSubmit: (value) => {
|
|
45
46
|
const baseUrl = value.trim();
|
|
46
47
|
if (!/^https?:\/\//i.test(baseUrl)) {
|
|
47
|
-
setError("
|
|
48
|
+
setError(t("err.baseUrlScheme"));
|
|
48
49
|
return;
|
|
49
50
|
}
|
|
50
|
-
void commit(setEndpointBaseUrl(config, endpoint.id, baseUrl),
|
|
51
|
+
void commit(setEndpointBaseUrl(config, endpoint.id, baseUrl), t("wiz.endpointUpdated", { name, label: "Base URL" }), [endpoint.id]);
|
|
51
52
|
}, onCancel: () => go({ kind: "menu" }) }, `baseUrl:${endpoint.id}`));
|
|
52
53
|
}
|
|
53
54
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-simple.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAExI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-simple.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAExI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAC7F,+BAA+B;IAC/B,IAAI,UAAU,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;QAC9C,OAAO,CACL,KAAC,YAAY,IAEX,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,CAAC,CAAC,yBAAyB,CAAC,EACnC,OAAO,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,EAChF,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,EAC7B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;oBACnC,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACnI,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAhBhC,eAAe,CAiBnB,CACH,CAAC;IACJ,CAAC;IAGD,+CAA+C;IAC/C,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC;QAE1C,IAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,CACL,KAAC,YAAY,IAEX,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,EACrG,OAAO,EAAE;oBACP,CAAC,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAC7D,CAAC,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5D,KAAK,CAAC,GAAG;wBACP,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;wBACpE,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBACxD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC9D,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACjD,IAAI,QACJ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;oBACL,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACzE,CAAC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;oBAC9B,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;iBAC5D,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBACzB,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;wBAClC,OAAO;oBACT,CAAC;oBACD,KAAK,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChI,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IA3BjF,UAAU,QAAQ,CAAC,EAAE,EAAE,CA4B5B,CACH,CAAC;QACJ,CAAC;QAED,OAAO,CACL,KAAC,YAAY,IAEX,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,CAAC,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,EACvC,OAAO,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,EACnF,YAAY,EAAE,QAAQ,CAAC,OAAO,EAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACtI,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAhB/B,WAAW,QAAQ,CAAC,EAAE,EAAE,CAiB7B,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -30,5 +30,21 @@ export declare const RENDER_OPTIONS: {
|
|
|
30
30
|
readonly mode: "disabled";
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
/** `runTui()` 的可选参数 */
|
|
34
|
+
export interface RunTuiOptions {
|
|
35
|
+
/**
|
|
36
|
+
* 进入对话屏后**自动作为首条消息发送**的内容。
|
|
37
|
+
*
|
|
38
|
+
* 来源只有一处:shell 兜底钩子 `ai --tui --new "$@"`(命令不存在时把原命令带进来)。
|
|
39
|
+
* 不预填到输入框——钩子的语义就是「这条命令跑不了,你帮我处理」,等用户再敲一次回车没有意义。
|
|
40
|
+
*/
|
|
41
|
+
initialPrompt?: string;
|
|
42
|
+
/**
|
|
43
|
+
* `--new`:**开一条新会话**,跳过「续接该目录上一轮对话」(`last-session.json` 指针)。
|
|
44
|
+
*
|
|
45
|
+
* 默认(不带 `--new`)保持续接行为:`ai` 回到上次的对话是常用预期。
|
|
46
|
+
*/
|
|
47
|
+
newSession?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare function runTui(options?: RunTuiOptions): Promise<void>;
|
|
34
50
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/tui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqDH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AA8MX,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DvE"}
|
package/dist/tui/index.js
CHANGED
|
@@ -20,6 +20,8 @@ import { Splash, Chat } from "./screens/index.js";
|
|
|
20
20
|
import { keyDebugStart } from "./key-debug.js";
|
|
21
21
|
import { disableMouseTracking, enableMouseTracking } from "./mouse.js";
|
|
22
22
|
import { installSdkLogger } from "../sdk-log.js";
|
|
23
|
+
import { initLocale } from "../i18n/preferences.js";
|
|
24
|
+
import { t } from "../i18n/index.js";
|
|
23
25
|
/** ANSI:清屏 + 光标归位 + 显示光标(屏幕间切换时从头绘制,避免行偏移) */
|
|
24
26
|
const CLEAR_SCREEN = "\x1b[2J\x1b[H\x1b[?25h";
|
|
25
27
|
/**
|
|
@@ -50,7 +52,7 @@ function farewell() {
|
|
|
50
52
|
/* ignore */
|
|
51
53
|
}
|
|
52
54
|
const finish = () => process.exit(0);
|
|
53
|
-
process.stdout.write(
|
|
55
|
+
process.stdout.write(`\x1b[?25h${t("app.goodbye")}`, finish);
|
|
54
56
|
setTimeout(finish, 250);
|
|
55
57
|
}
|
|
56
58
|
/** 当前活动的 Ink 实例(用于信号处理时兜底卸载) */
|
|
@@ -128,10 +130,10 @@ async function modelOf(agentId) {
|
|
|
128
130
|
const agent = await new AgentRepository(AGENTS_DIR).read(id);
|
|
129
131
|
const modelId = agent?.modelId;
|
|
130
132
|
if (!modelId) {
|
|
131
|
-
throw new Error(
|
|
133
|
+
throw new Error(t("app.agentNoModel", { id }));
|
|
132
134
|
}
|
|
133
135
|
if (!config.models.some((model) => model.id === modelId)) {
|
|
134
|
-
throw new Error(
|
|
136
|
+
throw new Error(t("app.agentModelGone", { id, model: modelId }));
|
|
135
137
|
}
|
|
136
138
|
return modelId;
|
|
137
139
|
}
|
|
@@ -141,7 +143,7 @@ async function resolveTarget() {
|
|
|
141
143
|
const agents = await repository.list();
|
|
142
144
|
const agentId = config.defaultAgent ?? agents[0]?.id;
|
|
143
145
|
if (!agentId)
|
|
144
|
-
throw new Error("
|
|
146
|
+
throw new Error(t("app.noAgents"));
|
|
145
147
|
// 校验模型可用(缺失时抛出可读错误,交给启动屏展示)
|
|
146
148
|
await modelOf(agentId);
|
|
147
149
|
return { agentId };
|
|
@@ -176,14 +178,20 @@ function targetFromMessages(input) {
|
|
|
176
178
|
* 运行对话屏;`/clear`、`/back`、`/load` 通过重挂载(新 Ink 实例 + 原生清屏)实现,
|
|
177
179
|
* 其余退出(退出)直接结束。
|
|
178
180
|
*/
|
|
179
|
-
async function runChat(target) {
|
|
181
|
+
async function runChat(target, options = {}) {
|
|
180
182
|
let current = target;
|
|
181
183
|
let messages = target.messages;
|
|
182
184
|
let initialInput;
|
|
183
185
|
/** 重挂载后要展示一次的系统提示(如 `/model` 的写入结果,旧实例已卸载,只能传给新屏) */
|
|
184
186
|
let initialNotice;
|
|
187
|
+
/**
|
|
188
|
+
* shell 钩子(`ai --tui --new "$@"`)带来的首条消息。
|
|
189
|
+
* **只发一次**:挂载后置空,否则重挂载(切模型 / `/lang` 等)会反复重发。
|
|
190
|
+
*/
|
|
191
|
+
let initialPrompt = options.initialPrompt;
|
|
185
192
|
while (true) {
|
|
186
|
-
const result = await mount(_jsx(Chat, { agentId: current.agentId, messages: messages, conversationId: current.conversationId, conversationName: current.conversationName, initialInput: initialInput, initialNotice: initialNotice }));
|
|
193
|
+
const result = await mount(_jsx(Chat, { agentId: current.agentId, messages: messages, conversationId: current.conversationId, conversationName: current.conversationName, initialInput: initialInput, initialNotice: initialNotice, initialPrompt: initialPrompt }));
|
|
194
|
+
initialPrompt = undefined;
|
|
187
195
|
if (result && typeof result === "object") {
|
|
188
196
|
const value = result;
|
|
189
197
|
if (value.load) {
|
|
@@ -212,13 +220,15 @@ async function runChat(target) {
|
|
|
212
220
|
return;
|
|
213
221
|
}
|
|
214
222
|
}
|
|
215
|
-
|
|
216
|
-
export async function runTui() {
|
|
223
|
+
export async function runTui(options = {}) {
|
|
217
224
|
const uninstallSignals = installSignalSafety();
|
|
218
225
|
// 接管 SDK 全局日志:关掉库自带的 console 兜底。必须在任何 Ink 渲染之前——
|
|
219
226
|
// SDK 的 logger 默认是 console.log,直写 stdout 会把界面撕坏
|
|
220
227
|
// (`load_mcp` 甚至会把整份 manifest 打出来)。AIZ_DEBUG_SDK=1 可改为落盘。
|
|
221
228
|
installSdkLogger();
|
|
229
|
+
// 界面语言必须在任何渲染之前定下来:首次启动按系统语言识别并落盘,
|
|
230
|
+
// 之后以 preferences.json 为准(`/lang` 可随时改)。
|
|
231
|
+
await initLocale();
|
|
222
232
|
// 按键诊断:AIZ_DEBUG_KEYS=1 时把终端环境 + 每次按键写进日志(默认关闭,零开销)
|
|
223
233
|
keyDebugStart();
|
|
224
234
|
try {
|
|
@@ -230,14 +240,15 @@ export async function runTui() {
|
|
|
230
240
|
await ensureConfigDir();
|
|
231
241
|
// 启动界面(一次性)
|
|
232
242
|
await mount(_jsx(Splash, {}));
|
|
233
|
-
//
|
|
234
|
-
|
|
243
|
+
// 直达对话:优先续接「上一轮会话」,否则新建对话。
|
|
244
|
+
// `--new` 跳过续接(不读 last-session.json 指针),直接走新建路径
|
|
245
|
+
let target = options.newSession ? null : await resumeLastSession();
|
|
235
246
|
if (!target) {
|
|
236
247
|
try {
|
|
237
248
|
target = await resolveTarget();
|
|
238
249
|
}
|
|
239
250
|
catch (error) {
|
|
240
|
-
process.stderr.write(`\n
|
|
251
|
+
process.stderr.write(`\n${t("app.bootFailed", { error: error?.message ?? error })}\n`);
|
|
241
252
|
}
|
|
242
253
|
}
|
|
243
254
|
if (!target) {
|
|
@@ -251,7 +262,7 @@ export async function runTui() {
|
|
|
251
262
|
modelId = await modelOf(target.agentId);
|
|
252
263
|
}
|
|
253
264
|
catch (error) {
|
|
254
|
-
process.stderr.write(`\n
|
|
265
|
+
process.stderr.write(`\n${t("app.bootFailed", { error: error?.message ?? error })}\n`);
|
|
255
266
|
farewell();
|
|
256
267
|
return;
|
|
257
268
|
}
|
|
@@ -259,7 +270,7 @@ export async function runTui() {
|
|
|
259
270
|
farewell();
|
|
260
271
|
return;
|
|
261
272
|
}
|
|
262
|
-
await runChat(target);
|
|
273
|
+
await runChat(target, options);
|
|
263
274
|
farewell();
|
|
264
275
|
}
|
|
265
276
|
finally {
|
|
@@ -295,7 +306,7 @@ function installSignalSafety() {
|
|
|
295
306
|
};
|
|
296
307
|
const onFatal = (error) => {
|
|
297
308
|
restore();
|
|
298
|
-
process.stderr.write(`\n
|
|
309
|
+
process.stderr.write(`\n${t("app.unexpected", { error: error?.message ?? error })}\n`);
|
|
299
310
|
process.exit(1);
|
|
300
311
|
};
|
|
301
312
|
process.on("SIGINT", onSigint);
|
package/dist/tui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAiB,MAAM,KAAK,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAA0B,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,14 @@
|
|
|
4
4
|
* 全部函数都是「(文本, 光标) → (文本, 光标)」的纯变换,便于单测;
|
|
5
5
|
* chat.tsx 只负责把按键映射过来、套用结果、维护 kill ring 与撤销栈。
|
|
6
6
|
*
|
|
7
|
+
* 光标单位是**字素簇**(`graphemes`),不是 code point:`✌️` 是 2 个 code point
|
|
8
|
+
* 但只是 1 个簇,按 code point 删会只删掉半个 emoji、留下孤立的变体选择符。
|
|
9
|
+
*
|
|
7
10
|
* 键位语义依据 Claude Code 官方文档(interactive-mode.md):
|
|
8
11
|
* - `Ctrl+W` 删到**前一空白**(标点不切分:`src/utils/foo.ts` 一次删掉整条路径)
|
|
9
12
|
* - `Alt+B/F/D` 按「词」处理(标点算分隔符:停在 `ts` / `foo` / `utils` / `src`)
|
|
10
13
|
*/
|
|
11
|
-
/** 一段可撤销的编辑状态(文本 +
|
|
14
|
+
/** 一段可撤销的编辑状态(文本 + 字素簇光标) */
|
|
12
15
|
export interface EditState {
|
|
13
16
|
text: string;
|
|
14
17
|
cursor: number;
|