feat(setup): add contextual help text to all wizard flows
Each setup section now explains what's needed before prompting: - Providers: links to API key consoles (Anthropic, OpenAI, Gemini, etc.) - Channels: step-by-step bot creation (Telegram @BotFather, Discord dev portal, Slack app setup, WhatsApp QR) - Gmail: Google Cloud Console OAuth setup walkthrough - Memory: explains what vector search does and key reuse - Security: describes each option (sandbox, pairing, tool profiles) - Gateway: explains auth token, Tailscale Serve, lock mode Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,9 @@ import type { Prompter } from './prompts.js';
|
||||
import type { ConfigBuilder } from './config.js';
|
||||
|
||||
async function setupTelegram(p: Prompter, builder: ConfigBuilder): Promise<void> {
|
||||
p.println(' 1. Message @BotFather on Telegram and use /newbot to create a bot');
|
||||
p.println(' 2. Copy the bot token it gives you');
|
||||
p.println(' 3. To find your chat ID, message @userinfobot or @RawDataBot');
|
||||
const botToken = await p.password('Bot token (from @BotFather)');
|
||||
const chatIdsRaw = await p.ask('Allowed chat IDs (comma-separated)');
|
||||
const chatIds = chatIdsRaw.split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n));
|
||||
@@ -14,6 +17,11 @@ async function setupTelegram(p: Prompter, builder: ConfigBuilder): Promise<void>
|
||||
}
|
||||
|
||||
async function setupDiscord(p: Prompter, builder: ConfigBuilder): Promise<void> {
|
||||
p.println(' 1. Go to https://discord.com/developers/applications');
|
||||
p.println(' 2. Create an application → Bot → copy the bot token');
|
||||
p.println(' 3. Enable MESSAGE CONTENT intent under Bot settings');
|
||||
p.println(' 4. Invite bot to your server with OAuth2 URL Generator (bot scope + Send Messages)');
|
||||
p.println(' 5. Guild ID: right-click your server → Copy Server ID (enable Developer Mode in settings)');
|
||||
const botToken = await p.password('Bot token');
|
||||
const guildIdsRaw = await p.ask('Allowed guild IDs (comma-separated, or * for all)');
|
||||
const guildIds = guildIdsRaw === '*' ? [] : guildIdsRaw.split(',').map(s => s.trim()).filter(Boolean);
|
||||
@@ -22,6 +30,11 @@ async function setupDiscord(p: Prompter, builder: ConfigBuilder): Promise<void>
|
||||
}
|
||||
|
||||
async function setupSlack(p: Prompter, builder: ConfigBuilder): Promise<void> {
|
||||
p.println(' 1. Go to https://api.slack.com/apps and create a new app');
|
||||
p.println(' 2. Enable Socket Mode → generate an App Token (xapp-...)');
|
||||
p.println(' 3. Under OAuth & Permissions, install to workspace → copy Bot Token (xoxb-...)');
|
||||
p.println(' 4. Under Basic Information → copy Signing Secret');
|
||||
p.println(' 5. Channel IDs: right-click a channel → View channel details → copy the ID at bottom');
|
||||
const botToken = await p.password('Bot token (xoxb-...)');
|
||||
const appToken = await p.password('App token (xapp-...)');
|
||||
const signingSecret = await p.password('Signing secret');
|
||||
|
||||
Reference in New Issue
Block a user