























@@ -45,30 +45,76 @@ export function summarizeExistingConfig(config: OpenClawConfig): string {
4545const rows: string[] = [];
4646const defaults = config.agents?.defaults;
4747if (defaults?.workspace) {
48-rows.push(shortenHomeInString(`workspace: ${defaults.workspace}`));
48+rows.push(shortenHomeInString(`Workspace: ${defaults.workspace}`));
4949}
5050if (defaults?.model) {
5151const model = resolveAgentModelPrimaryValue(defaults.model);
5252if (model) {
53-rows.push(shortenHomeInString(`model: ${model}`));
53+rows.push(shortenHomeInString(`Model: ${model}`));
5454}
5555}
56-if (config.gateway?.mode) {
57-rows.push(shortenHomeInString(`gateway.mode: ${config.gateway.mode}`));
56+const gatewaySummary = summarizeGatewayConfig(config);
57+if (gatewaySummary) {
58+rows.push(shortenHomeInString(gatewaySummary));
5859}
59-if (typeof config.gateway?.port === "number") {
60-rows.push(shortenHomeInString(`gateway.port: ${config.gateway.port}`));
60+if (config.skills?.install?.nodeManager) {
61+rows.push(shortenHomeInString(`Node manager: ${config.skills.install.nodeManager}`));
6162}
62-if (config.gateway?.bind) {
63-rows.push(shortenHomeInString(`gateway.bind: ${config.gateway.bind}`));
63+return rows.length ? rows.join("\n") : "No key settings detected.";
64+}
65+66+function summarizeGatewayConfig(config: OpenClawConfig): string | null {
67+const gateway = config.gateway;
68+if (
69+!gateway?.mode &&
70+typeof gateway?.port !== "number" &&
71+!gateway?.bind &&
72+!gateway?.remote?.url
73+) {
74+return null;
6475}
65-if (config.gateway?.remote?.url) {
66-rows.push(shortenHomeInString(`gateway.remote.url: ${config.gateway.remote.url}`));
76+const mode = normalizeOptionalString(gateway.mode);
77+const bind = formatGatewayBind(gateway.bind);
78+const remoteUrl = normalizeOptionalString(gateway.remote?.url);
79+const useRemoteUrl = remoteUrl !== undefined && mode !== "local";
80+const endpoint =
81+useRemoteUrl && remoteUrl
82+ ? remoteUrl
83+ : typeof gateway.port === "number"
84+ ? `:${gateway.port}`
85+ : undefined;
86+const words: string[] = [];
87+if (mode) {
88+words.push(mode);
6789}
68-if (config.skills?.install?.nodeManager) {
69-rows.push(shortenHomeInString(`skills.nodeManager: ${config.skills.install.nodeManager}`));
90+if (bind) {
91+words.push(mode ? `via ${bind}` : bind);
92+}
93+if (mode === "remote" && !remoteUrl) {
94+words.push("(missing remote URL)");
95+return `Gateway: ${words.join(" ")}`;
96+}
97+if (endpoint) {
98+words.push(`${useRemoteUrl ? "at" : "on"} ${endpoint}`);
99+}
100+return `Gateway: ${words.length > 0 ? words.join(" ") : "configured"}`;
101+}
102+103+function formatGatewayBind(value: string | undefined): string | undefined {
104+switch (value) {
105+case "lan":
106+return "LAN";
107+case "loopback":
108+return "loopback";
109+case "tailnet":
110+return "tailnet";
111+case "auto":
112+return "auto";
113+case "custom":
114+return "custom";
115+default:
116+return normalizeOptionalString(value);
70117}
71-return rows.length ? rows.join("\n") : "No key settings detected.";
72118}
7311974120export function normalizeGatewayTokenInput(value: unknown): string {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。