chore: Refactor onboarding TUI

This commit is contained in:
Yoftahe 2026-02-23 18:17:06 +03:00
parent 6e57b20555
commit 9b85a17e53

View file

@ -155,39 +155,13 @@ func (s *Setup) RunNonInteractive() error {
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("IMPORTANT COMMANDS"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("IMPORTANT COMMANDS")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" picoclaw agent - Start chatting with the agent"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" picoclaw agent - Start chatting")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw onboard --interactive - Full interactive setup"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw onboard --interactive - Full setup")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw auth login - Login to providers (openai, anthropic)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw auth login - Login to providers")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw skills list - List available skills"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw status - Show status")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw status - Show picoclaw status")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" picoclaw gateway - Start the gateway server")))
b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("🔌 PROVIDERS (in config.json)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" openai : OpenAI API key")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" anthropic : Anthropic/Claude API key")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" openrouter : OpenRouter (unified API)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" groq : Groq (fast inference)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" deepseek : DeepSeek API")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" ollama : Local models (http://localhost:11434)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" vllm : Local vLLM server")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" + more: gemini, nvidia, moonshot, qwen, etc.")))
b.WriteString("\n\n") b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
@ -195,47 +169,13 @@ func (s *Setup) RunNonInteractive() error {
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("CHANNELS (in config.json)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("CHANNELS (in config.json)")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" telegram : Telegram bot (token from @BotFather)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" telegram : Telegram bot")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" slack : Slack bot (bot_token, app_token)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" slack : Slack")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" discord : Discord bot (token from dev portal)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" discord : Discord")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" whatsapp : WhatsApp bridge (bridge_url)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" + more: whatsapp, feishu, dingtalk, line, qq, etc.")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" feishu : Feishu/Lark (app_id, app_secret)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" dingtalk : DingTalk (client_id, client_secret)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" line : LINE (channel_access_token)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" qq : QQ (app_id)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" onebot : OneBot (ws_url, access_token)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" wecom : WeCom (token, encoding_aes_key)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" wecom_app : WeCom App (corp_id, agent_id)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" maixcam : MaixCam device")))
b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("MODELS (in model_list)")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" Format: {\"model\": \"provider/model-id\", \"api_base\": \"url\"}")))
b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" Examples:")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" {\"model\": \"openai/gpt-4o\", \"api_base\": \"https://api.openai.com/v1\"}")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" {\"model\": \"anthropic/claude-sonnet-4-20250514\", \"api_base\": \"https://api.anthropic.com/v1\"}")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" {\"model\": \"deepseek/deepseek-chat\", \"api_base\": \"https://api.deepseek.com/v1\"}")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" {\"model\": \"ollama/llama3\", \"api_base\": \"http://localhost:11434/v1\"}")))
b.WriteString("\n\n") b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
@ -243,19 +183,14 @@ func (s *Setup) RunNonInteractive() error {
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("NEXT STEPS"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(sectionStyle.Render("NEXT STEPS")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" 1. Edit config.json to add your provider API key"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(highlightStyle.Render(" 1. Add API key in config.json")))
b.WriteString("\n") b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" 2. Enable and configure your desired channel(s)"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" 2. Run 'picoclaw agent' to start!")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" 3. Run 'picoclaw auth login' for OAuth providers")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(successStyle.Render(" 4. Run 'picoclaw agent' to start chatting!")))
b.WriteString("\n\n") b.WriteString("\n\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
b.WriteString("\n")
b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" Run 'picoclaw onboard --interactive' for guided setup"))) b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render(" Run 'picoclaw onboard --interactive' for guided setup")))
b.WriteString("\n\n") b.WriteString("\n")
// b.WriteString(lipgloss.NewStyle().PaddingLeft(4).Render(dimStyle.Render("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")))
// b.WriteString("\n\n")
fmt.Println(b.String()) fmt.Println(b.String())