Files
clawdbot/src/commands/configure.shared.ts
2026-01-15 05:08:56 +00:00

78 lines
2.2 KiB
TypeScript

import {
confirm as clackConfirm,
intro as clackIntro,
outro as clackOutro,
select as clackSelect,
text as clackText,
} from "@clack/prompts";
import { stylePromptHint, stylePromptMessage, stylePromptTitle } from "../terminal/prompt-style.js";
export const CONFIGURE_WIZARD_SECTIONS = [
"workspace",
"model",
"web",
"gateway",
"daemon",
"channels",
"skills",
"health",
] as const;
export type WizardSection = (typeof CONFIGURE_WIZARD_SECTIONS)[number];
export type ChannelsWizardMode = "configure" | "remove";
export type ConfigureWizardParams = {
command: "configure" | "update";
sections?: WizardSection[];
};
export const CONFIGURE_SECTION_OPTIONS: Array<{
value: WizardSection;
label: string;
hint: string;
}> = [
{ value: "workspace", label: "Workspace", hint: "Set workspace + sessions" },
{ value: "model", label: "Model", hint: "Pick provider + credentials" },
{ value: "web", label: "Web tools", hint: "Configure Brave search + fetch" },
{ value: "gateway", label: "Gateway", hint: "Port, bind, auth, tailscale" },
{
value: "daemon",
label: "Daemon",
hint: "Install/manage the background service",
},
{
value: "channels",
label: "Channels",
hint: "Link WhatsApp/Telegram/etc and defaults",
},
{ value: "skills", label: "Skills", hint: "Install/enable workspace skills" },
{
value: "health",
label: "Health check",
hint: "Run gateway + channel checks",
},
];
export const intro = (message: string) => clackIntro(stylePromptTitle(message) ?? message);
export const outro = (message: string) => clackOutro(stylePromptTitle(message) ?? message);
export const text = (params: Parameters<typeof clackText>[0]) =>
clackText({
...params,
message: stylePromptMessage(params.message),
});
export const confirm = (params: Parameters<typeof clackConfirm>[0]) =>
clackConfirm({
...params,
message: stylePromptMessage(params.message),
});
export const select = <T>(params: Parameters<typeof clackSelect<T>>[0]) =>
clackSelect({
...params,
message: stylePromptMessage(params.message),
options: params.options.map((opt) =>
opt.hint === undefined ? opt : { ...opt, hint: stylePromptHint(opt.hint) },
),
});