Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
33 KiB
JSON

{"repo": "alinaqi/maggy", "files": {"maggy/maggy/orchestrator/adapters/deepseek.py": {"bb6195fdd529bd81d66f6bb02714ce58f0fb542e": {"t": 1785745456.489435, "n": 1249, "h": "ae07a4bd0b33ce92", "c": "\"\"\"DeepSeek adapter — uses Claude CLI with DeepSeek env overrides.\n\nDeepSeek supports the Anthropic API format, so we invoke the Claude\nCLI with ANTHROPIC_BASE_URL pointed at DeepSeek's endpoint.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\n\nfrom ..models import AgentProfile, RunSpec\n\n\nclass DeepSeekAdapter:\n \"\"\"Adapter for DeepSeek V4 via Claude CLI.\"\"\"\n\n def build_command(\n self,\n profile: AgentProfile,\n run_spec: RunSpec,\n ) -> list[str]:\n \"\"\"Build claude CLI command with DeepSeek backend.\"\"\"\n parts = profile.cli_command.split()\n return parts\n\n def build_env(self) -> dict[str, str]:\n \"\"\"Env overrides to route Claude CLI to DeepSeek.\"\"\"\n key = os.environ.get(\"DEEPSEEK_API_KEY\", \"\")\n return {\n \"ANTHROPIC_BASE_URL\": \"https://api.deepseek.com/anthropic\",\n \"ANTHROPIC_AUTH_TOKEN\": key,\n }\n\n def detect_completion(self, event: dict) -> bool:\n \"\"\"Check if event signals task completion.\"\"\"\n return event.get(\"done\") is True\n\n def detect_quota(self, text: str) -> bool:\n \"\"\"Check if output indicates quota/rate limit.\"\"\"\n lower = text.lower()\n return \"rate limit\" in lower or \"quota\" in lower\n"}, "242814d1b6aa50f0be4222ad7fa33463609deb7c": {"t": 1785753437.535135, "n": 1249, "h": "ae07a4bd0b33ce92", "c": "\"\"\"DeepSeek adapter — uses Claude CLI with DeepSeek env overrides.\n\nDeepSeek supports the Anthropic API format, so we invoke the Claude\nCLI with ANTHROPIC_BASE_URL pointed at DeepSeek's endpoint.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\n\nfrom ..models import AgentProfile, RunSpec\n\n\nclass DeepSeekAdapter:\n \"\"\"Adapter for DeepSeek V4 via Claude CLI.\"\"\"\n\n def build_command(\n self,\n profile: AgentProfile,\n run_spec: RunSpec,\n ) -> list[str]:\n \"\"\"Build claude CLI command with DeepSeek backend.\"\"\"\n parts = profile.cli_command.split()\n return parts\n\n def build_env(self) -> dict[str, str]:\n \"\"\"Env overrides to route Claude CLI to DeepSeek.\"\"\"\n key = os.environ.get(\"DEEPSEEK_API_KEY\", \"\")\n return {\n \"ANTHROPIC_BASE_URL\": \"https://api.deepseek.com/anthropic\",\n \"ANTHROPIC_AUTH_TOKEN\": key,\n }\n\n def detect_completion(self, event: dict) -> bool:\n \"\"\"Check if event signals task completion.\"\"\"\n return event.get(\"done\") is True\n\n def detect_quota(self, text: str) -> bool:\n \"\"\"Check if output indicates quota/rate limit.\"\"\"\n lower = text.lower()\n return \"rate limit\" in lower or \"quota\" in lower\n"}}, "scripts/onboard.sh": {"bb6195fdd529bd81d66f6bb02714ce58f0fb542e": {"t": 1785745935.7867472, "n": 6021, "h": "606d8becec3a2454", "c": "#!/bin/bash\n# Maggy + Claude Bootstrap Onboarding — collect API keys, enable/disable models.\n# Run: ./scripts/onboard.sh\n\nset -e\n\necho \"\"\necho \" ⚡ Maggy + Claude Bootstrap — Model Onboarding\"\necho \" ─────────────────────────────────────────────\"\necho \"\"\necho \" I'll ask you for API keys. Press Enter to skip any provider.\"\necho \" Models with skipped keys will be disabled for routing.\"\necho \"\"\n\nZSRC=\"$HOME/.zshrc\"\n# Markers for idempotent writes\nMARKER_START=\"# >>> maggy-onboard-start (do not remove)\"\nMARKER_END=\"# <<< maggy-onboard-end\"\n\n# ── Collect keys ─────────────────────────────────────────────────────────\n\necho \" ┌─ DeepSeek V4 (Anthropic-compatible API)\"\nread -rsp \" │ API Key (sk-...): \" DS_KEY\necho \"\"\nif [ -n \"$DS_KEY\" ]; then\n DEEPSEEK_ENABLED=1\n echo \" │ → DeepSeek Flash + Pro enabled\"\nelse\n DEEPSEEK_ENABLED=0\n echo \" │ → DeepSeek disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Google Gemini (OpenAI-compatible endpoint)\"\nread -rsp \" │ API Key: \" GM_KEY\necho \"\"\nif [ -n \"$GM_KEY\" ]; then\n GEMINI_ENABLED=1\n echo \" │ → Gemini Flash-Lite, Flash + Pro Search enabled\"\nelse\n GEMINI_ENABLED=0\n echo \" │ → Gemini disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ OpenAI (for Codex CLI)\"\nread -rsp \" │ API Key (sk-...): \" OAI_KEY\necho \"\"\nif [ -n \"$OAI_KEY\" ]; then\n CODEX_ENABLED=1\n echo \" │ → Codex enabled\"\nelse\n CODEX_ENABLED=0\n echo \" │ → Codex disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ MiniMax M-series (OpenAI-compatible, strong on SWE-bench)\"\nread -rsp \" │ API Key: \" MM_KEY\necho \"\"\nif [ -n \"$MM_KEY\" ]; then\n MINIMAX_ENABLED=1\n echo \" │ → MiniMax M2.5 / M3 enabled\"\nelse\n MINIMAX_ENABLED=0\n echo \" │ → MiniMax disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Local Models\"\necho -n \" │ Is Ollama running locally? [Y/n]: \"\nread -r OLLAMA_OK\nif [[ \"$OLLAMA_OK\" =~ ^[Nn] ]]; then\n LOCAL_ENABLED=0\n echo \" │ → Qwen3 local disabled. Classifier will use kimi → deepseek.\"\nelse\n LOCAL_ENABLED=1\n echo \" │ → Qwen3 local enabled (fast + free classification)\"\nfi\necho \" └────────────────────\"\n\n# ── Write to ~/.zshrc ────────────────────────────────────────────────────\n\necho \"\"\necho \" Writing keys to $ZSRC...\"\n\n# Remove previous onboarding block if exists\nif grep -q \"$MARKER_START\" \"$ZSRC\" 2>/dev/null; then\n sed -i '' \"/$MARKER_START/,/$MARKER_END/d\" \"$ZSRC\"\nfi\n\n{\n echo \"$MARKER_START\"\n echo \"# Maggy Model Routing — API Keys (added by onboard.sh)\"\n if [ \"$DEEPSEEK_ENABLED\" -eq 1 ]; then\n echo \"export DEEPSEEK_API_KEY=\\\"$DS_KEY\\\"\"\n fi\n if [ \"$GEMINI_ENABLED\" -eq 1 ]; then\n echo \"export GEMINI_API_KEY=\\\"$GM_KEY\\\"\"\n fi\n if [ \"$CODEX_ENABLED\" -eq 1 ]; then\n echo \"export OPENAI_API_KEY=\\\"$OAI_KEY\\\"\"\n fi\n if [ \"$MINIMAX_ENABLED\" -eq 1 ]; then\n echo \"export MINIMAX_API_KEY=\\\"$MM_KEY\\\"\"\n fi\n echo \"$MARKER_END\"\n} >> \"$ZSRC\"\n\n# ── Write routing config ──────────────────────────────────────────────────\n\nCONFIG_DIR=\"$HOME/.claude\"\nmkdir -p \"$CONFIG_DIR\"\n\ncat > \"$CONFIG_DIR/model-config.json\" <<EOF\n{\n \"enabled\": {\n \"qwen3\": $LOCAL_ENABLED,\n \"deepseek-flash\": $DEEPSEEK_ENABLED,\n \"deepseek-pro\": $DEEPSEEK_ENABLED,\n \"gemini-flash-lite\": $GEMINI_ENABLED,\n \"gemini-flash\": $GEMINI_ENABLED,\n \"gemini-pro-search\": $GEMINI_ENABLED,\n \"kimi\": 1,\n \"codex\": $CODEX_ENABLED,\n \"claude\": 1\n },\n \"configured_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n}\nEOF\n\necho \" ✓ Model config written to $CONFIG_DIR/model-config.json\"\n\n# ── Primary (\"followed\") model picker ─────────────────────────────────────\n# Smart routing: this model handles the main coding work across srooter, the\n# route-task hooks, and Maggy. Cheap/trivial asks still route locally.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nMR=\"$SCRIPT_DIR/model_routing.py\"\n\nif [ -f \"$MR\" ] && command -v python3 >/dev/null 2>&1; then\n echo \"\"\n echo \" ┌─ Primary model (the one you want to 'follow' for coding)\"\n AVAIL=$(python3 \"$MR\" detect 2>/dev/null | python3 -c \"import sys,json;print(' '.join(k for k,v in json.load(sys.stdin).items() if v))\" 2>/dev/null)\n REC=$(python3 \"$MR\" get primary 2>/dev/null || echo claude)\n if [ -n \"$AVAIL\" ]; then\n echo \" │ Available: $AVAIL\"\n echo -n \" │ Which model should be primary? [$REC]: \"\n read -r PICK\n PICK=\"${PICK:-$REC}\"\n python3 \"$MR\" set-primary \"$PICK\" >/dev/null 2>&1 && \\\n echo \" │ → primary = $PICK (smart routing)\" || \\\n echo \" │ → kept $REC\"\n # Sync the choice into srooter's routing if srooter is present.\n SYNC=$(python3 \"$MR\" apply 2>/dev/null || echo \"srooter sync: skipped\")\n echo \" │ $SYNC\"\n fi\n echo \" └────────────────────\"\nfi\n\n# ── Summary ───────────────────────────────────────────────────────────────\n\nACTIVE=0\nTOTAL=10\necho \"\"\necho \" ╔══════════════════════════════════════╗\"\necho \" ║ Routing Status ║\"\necho \" ╠══════════════════════════════════════╣\"\n\nstatus_line() {\n local name=\"$1\" enabled=\"$2\" cost=\"$3\"\n if [ \"$enabled\" -eq 1 ]; then\n printf \" ║ \\033[32m✓\\033[0m %-22s %12s ║\\n\" \"$name\" \"$cost\"\n ACTIVE=$((ACTIVE + 1))\n else\n printf \" ║ \\033[31m✗\\033[0m %-22s %12s ║\\n\" \"$name\" \"(disabled)\"\n fi\n}\n\nstatus_line \"Qwen3 (local)\" \"$LOCAL_ENABLED\" \"\\$0\"\nstatus_line \"DeepSeek Flash\" \"$DEEPSEEK_ENABLED\" \"\\$0.14/M\"\nstatus_line \"DeepSeek Pro\" \"$DEEPSEEK_ENABLED\" \"\\$0.44/M\"\nstatus_line \"Gemini Flash-Lite\" \"$GEMINI_ENABLED\" \"\\$0.10/M\"\nstatus_line \"Gemini Flash\" \"$GEMINI_ENABLED\" \"\\$0.15/M\"\nstatus_line \"Gemini Pro Search\" \"$GEMINI_ENABLED\" \"\\$1.25/M\"\nstatus_line \"Kimi K2.6\" 1 \"\\$0.60/M\"\nstatus_line \"Codex\" \"$CODEX_ENABLED\" \"varies\"\nstatus_line \"MiniMax M2.5\" \"$MINIMAX_ENABLED\" \"low\"\nstatus_line \"Claude\" 1 \"\\$3-5/M\"\n\necho \" ╠══════════════════════════════════════╣\"\nprintf \" ║ %d of %d models active ║\\n\" \"$ACTIVE\" \"$TOTAL\"\necho \" ╚══════════════════════════════════════╝\"\necho \"\"\necho \" To apply: source ~/.zshrc\"\necho \" To re-configure: ./scripts/onboard.sh\"\necho \"\"\n"}, "290a1bb1671efe4d43a0c4ce930c9eab3733a883": {"t": 1785753433.647423, "n": 6021, "h": "606d8becec3a2454", "c": "#!/bin/bash\n# Maggy + Claude Bootstrap Onboarding — collect API keys, enable/disable models.\n# Run: ./scripts/onboard.sh\n\nset -e\n\necho \"\"\necho \" ⚡ Maggy + Claude Bootstrap — Model Onboarding\"\necho \" ─────────────────────────────────────────────\"\necho \"\"\necho \" I'll ask you for API keys. Press Enter to skip any provider.\"\necho \" Models with skipped keys will be disabled for routing.\"\necho \"\"\n\nZSRC=\"$HOME/.zshrc\"\n# Markers for idempotent writes\nMARKER_START=\"# >>> maggy-onboard-start (do not remove)\"\nMARKER_END=\"# <<< maggy-onboard-end\"\n\n# ── Collect keys ─────────────────────────────────────────────────────────\n\necho \" ┌─ DeepSeek V4 (Anthropic-compatible API)\"\nread -rsp \" │ API Key (sk-...): \" DS_KEY\necho \"\"\nif [ -n \"$DS_KEY\" ]; then\n DEEPSEEK_ENABLED=1\n echo \" │ → DeepSeek Flash + Pro enabled\"\nelse\n DEEPSEEK_ENABLED=0\n echo \" │ → DeepSeek disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Google Gemini (OpenAI-compatible endpoint)\"\nread -rsp \" │ API Key: \" GM_KEY\necho \"\"\nif [ -n \"$GM_KEY\" ]; then\n GEMINI_ENABLED=1\n echo \" │ → Gemini Flash-Lite, Flash + Pro Search enabled\"\nelse\n GEMINI_ENABLED=0\n echo \" │ → Gemini disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ OpenAI (for Codex CLI)\"\nread -rsp \" │ API Key (sk-...): \" OAI_KEY\necho \"\"\nif [ -n \"$OAI_KEY\" ]; then\n CODEX_ENABLED=1\n echo \" │ → Codex enabled\"\nelse\n CODEX_ENABLED=0\n echo \" │ → Codex disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ MiniMax M-series (OpenAI-compatible, strong on SWE-bench)\"\nread -rsp \" │ API Key: \" MM_KEY\necho \"\"\nif [ -n \"$MM_KEY\" ]; then\n MINIMAX_ENABLED=1\n echo \" │ → MiniMax M2.5 / M3 enabled\"\nelse\n MINIMAX_ENABLED=0\n echo \" │ → MiniMax disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Local Models\"\necho -n \" │ Is Ollama running locally? [Y/n]: \"\nread -r OLLAMA_OK\nif [[ \"$OLLAMA_OK\" =~ ^[Nn] ]]; then\n LOCAL_ENABLED=0\n echo \" │ → Qwen3 local disabled. Classifier will use kimi → deepseek.\"\nelse\n LOCAL_ENABLED=1\n echo \" │ → Qwen3 local enabled (fast + free classification)\"\nfi\necho \" └────────────────────\"\n\n# ── Write to ~/.zshrc ────────────────────────────────────────────────────\n\necho \"\"\necho \" Writing keys to $ZSRC...\"\n\n# Remove previous onboarding block if exists\nif grep -q \"$MARKER_START\" \"$ZSRC\" 2>/dev/null; then\n sed -i '' \"/$MARKER_START/,/$MARKER_END/d\" \"$ZSRC\"\nfi\n\n{\n echo \"$MARKER_START\"\n echo \"# Maggy Model Routing — API Keys (added by onboard.sh)\"\n if [ \"$DEEPSEEK_ENABLED\" -eq 1 ]; then\n echo \"export DEEPSEEK_API_KEY=\\\"$DS_KEY\\\"\"\n fi\n if [ \"$GEMINI_ENABLED\" -eq 1 ]; then\n echo \"export GEMINI_API_KEY=\\\"$GM_KEY\\\"\"\n fi\n if [ \"$CODEX_ENABLED\" -eq 1 ]; then\n echo \"export OPENAI_API_KEY=\\\"$OAI_KEY\\\"\"\n fi\n if [ \"$MINIMAX_ENABLED\" -eq 1 ]; then\n echo \"export MINIMAX_API_KEY=\\\"$MM_KEY\\\"\"\n fi\n echo \"$MARKER_END\"\n} >> \"$ZSRC\"\n\n# ── Write routing config ──────────────────────────────────────────────────\n\nCONFIG_DIR=\"$HOME/.claude\"\nmkdir -p \"$CONFIG_DIR\"\n\ncat > \"$CONFIG_DIR/model-config.json\" <<EOF\n{\n \"enabled\": {\n \"qwen3\": $LOCAL_ENABLED,\n \"deepseek-flash\": $DEEPSEEK_ENABLED,\n \"deepseek-pro\": $DEEPSEEK_ENABLED,\n \"gemini-flash-lite\": $GEMINI_ENABLED,\n \"gemini-flash\": $GEMINI_ENABLED,\n \"gemini-pro-search\": $GEMINI_ENABLED,\n \"kimi\": 1,\n \"codex\": $CODEX_ENABLED,\n \"claude\": 1\n },\n \"configured_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n}\nEOF\n\necho \" ✓ Model config written to $CONFIG_DIR/model-config.json\"\n\n# ── Primary (\"followed\") model picker ─────────────────────────────────────\n# Smart routing: this model handles the main coding work across srooter, the\n# route-task hooks, and Maggy. Cheap/trivial asks still route locally.\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nMR=\"$SCRIPT_DIR/model_routing.py\"\n\nif [ -f \"$MR\" ] && command -v python3 >/dev/null 2>&1; then\n echo \"\"\n echo \" ┌─ Primary model (the one you want to 'follow' for coding)\"\n AVAIL=$(python3 \"$MR\" detect 2>/dev/null | python3 -c \"import sys,json;print(' '.join(k for k,v in json.load(sys.stdin).items() if v))\" 2>/dev/null)\n REC=$(python3 \"$MR\" get primary 2>/dev/null || echo claude)\n if [ -n \"$AVAIL\" ]; then\n echo \" │ Available: $AVAIL\"\n echo -n \" │ Which model should be primary? [$REC]: \"\n read -r PICK\n PICK=\"${PICK:-$REC}\"\n python3 \"$MR\" set-primary \"$PICK\" >/dev/null 2>&1 && \\\n echo \" │ → primary = $PICK (smart routing)\" || \\\n echo \" │ → kept $REC\"\n # Sync the choice into srooter's routing if srooter is present.\n SYNC=$(python3 \"$MR\" apply 2>/dev/null || echo \"srooter sync: skipped\")\n echo \" │ $SYNC\"\n fi\n echo \" └────────────────────\"\nfi\n\n# ── Summary ───────────────────────────────────────────────────────────────\n\nACTIVE=0\nTOTAL=10\necho \"\"\necho \" ╔══════════════════════════════════════╗\"\necho \" ║ Routing Status ║\"\necho \" ╠══════════════════════════════════════╣\"\n\nstatus_line() {\n local name=\"$1\" enabled=\"$2\" cost=\"$3\"\n if [ \"$enabled\" -eq 1 ]; then\n printf \" ║ \\033[32m✓\\033[0m %-22s %12s ║\\n\" \"$name\" \"$cost\"\n ACTIVE=$((ACTIVE + 1))\n else\n printf \" ║ \\033[31m✗\\033[0m %-22s %12s ║\\n\" \"$name\" \"(disabled)\"\n fi\n}\n\nstatus_line \"Qwen3 (local)\" \"$LOCAL_ENABLED\" \"\\$0\"\nstatus_line \"DeepSeek Flash\" \"$DEEPSEEK_ENABLED\" \"\\$0.14/M\"\nstatus_line \"DeepSeek Pro\" \"$DEEPSEEK_ENABLED\" \"\\$0.44/M\"\nstatus_line \"Gemini Flash-Lite\" \"$GEMINI_ENABLED\" \"\\$0.10/M\"\nstatus_line \"Gemini Flash\" \"$GEMINI_ENABLED\" \"\\$0.15/M\"\nstatus_line \"Gemini Pro Search\" \"$GEMINI_ENABLED\" \"\\$1.25/M\"\nstatus_line \"Kimi K2.6\" 1 \"\\$0.60/M\"\nstatus_line \"Codex\" \"$CODEX_ENABLED\" \"varies\"\nstatus_line \"MiniMax M2.5\" \"$MINIMAX_ENABLED\" \"low\"\nstatus_line \"Claude\" 1 \"\\$3-5/M\"\n\necho \" ╠══════════════════════════════════════╣\"\nprintf \" ║ %d of %d models active ║\\n\" \"$ACTIVE\" \"$TOTAL\"\necho \" ╚══════════════════════════════════════╝\"\necho \"\"\necho \" To apply: source ~/.zshrc\"\necho \" To re-configure: ./scripts/onboard.sh\"\necho \"\"\n"}, "a2107a146b991369031da80ae125db34a38b83ab": {"t": 1785753435.0602129, "n": 4393, "h": "97ff57546d659d30", "c": "#!/bin/bash\n# Maggy + Claude Bootstrap Onboarding — collect API keys, enable/disable models.\n# Run: ./scripts/onboard.sh\n\nset -e\n\necho \"\"\necho \" ⚡ Maggy + Claude Bootstrap — Model Onboarding\"\necho \" ─────────────────────────────────────────────\"\necho \"\"\necho \" I'll ask you for API keys. Press Enter to skip any provider.\"\necho \" Models with skipped keys will be disabled for routing.\"\necho \"\"\n\nZSRC=\"$HOME/.zshrc\"\n# Markers for idempotent writes\nMARKER_START=\"# >>> maggy-onboard-start (do not remove)\"\nMARKER_END=\"# <<< maggy-onboard-end\"\n\n# ── Collect keys ─────────────────────────────────────────────────────────\n\necho \" ┌─ DeepSeek V4 (Anthropic-compatible API)\"\nread -rsp \" │ API Key (sk-...): \" DS_KEY\necho \"\"\nif [ -n \"$DS_KEY\" ]; then\n DEEPSEEK_ENABLED=1\n echo \" │ → DeepSeek Flash + Pro enabled\"\nelse\n DEEPSEEK_ENABLED=0\n echo \" │ → DeepSeek disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Google Gemini (OpenAI-compatible endpoint)\"\nread -rsp \" │ API Key: \" GM_KEY\necho \"\"\nif [ -n \"$GM_KEY\" ]; then\n GEMINI_ENABLED=1\n echo \" │ → Gemini Flash-Lite, Flash + Pro Search enabled\"\nelse\n GEMINI_ENABLED=0\n echo \" │ → Gemini disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ OpenAI (for Codex CLI)\"\nread -rsp \" │ API Key (sk-...): \" OAI_KEY\necho \"\"\nif [ -n \"$OAI_KEY\" ]; then\n CODEX_ENABLED=1\n echo \" │ → Codex enabled\"\nelse\n CODEX_ENABLED=0\n echo \" │ → Codex disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Local Models\"\necho -n \" │ Is Ollama running locally? [Y/n]: \"\nread -r OLLAMA_OK\nif [[ \"$OLLAMA_OK\" =~ ^[Nn] ]]; then\n LOCAL_ENABLED=0\n echo \" │ → Qwen3 local disabled. Classifier will use kimi → deepseek.\"\nelse\n LOCAL_ENABLED=1\n echo \" │ → Qwen3 local enabled (fast + free classification)\"\nfi\necho \" └────────────────────\"\n\n# ── Write to ~/.zshrc ────────────────────────────────────────────────────\n\necho \"\"\necho \" Writing keys to $ZSRC...\"\n\n# Remove previous onboarding block if exists\nif grep -q \"$MARKER_START\" \"$ZSRC\" 2>/dev/null; then\n sed -i '' \"/$MARKER_START/,/$MARKER_END/d\" \"$ZSRC\"\nfi\n\n{\n echo \"$MARKER_START\"\n echo \"# Maggy Model Routing — API Keys (added by onboard.sh)\"\n if [ \"$DEEPSEEK_ENABLED\" -eq 1 ]; then\n echo \"export DEEPSEEK_API_KEY=\\\"$DS_KEY\\\"\"\n fi\n if [ \"$GEMINI_ENABLED\" -eq 1 ]; then\n echo \"export GEMINI_API_KEY=\\\"$GM_KEY\\\"\"\n fi\n if [ \"$CODEX_ENABLED\" -eq 1 ]; then\n echo \"export OPENAI_API_KEY=\\\"$OAI_KEY\\\"\"\n fi\n echo \"$MARKER_END\"\n} >> \"$ZSRC\"\n\n# ── Write routing config ──────────────────────────────────────────────────\n\nCONFIG_DIR=\"$HOME/.claude\"\nmkdir -p \"$CONFIG_DIR\"\n\ncat > \"$CONFIG_DIR/model-config.json\" <<EOF\n{\n \"enabled\": {\n \"qwen3\": $LOCAL_ENABLED,\n \"deepseek-flash\": $DEEPSEEK_ENABLED,\n \"deepseek-pro\": $DEEPSEEK_ENABLED,\n \"gemini-flash-lite\": $GEMINI_ENABLED,\n \"gemini-flash\": $GEMINI_ENABLED,\n \"gemini-pro-search\": $GEMINI_ENABLED,\n \"kimi\": 1,\n \"codex\": $CODEX_ENABLED,\n \"claude\": 1\n },\n \"configured_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n}\nEOF\n\necho \" ✓ Model config written to $CONFIG_DIR/model-config.json\"\n\n# ── Summary ───────────────────────────────────────────────────────────────\n\nACTIVE=0\nTOTAL=9\necho \"\"\necho \" ╔══════════════════════════════════════╗\"\necho \" ║ Routing Status ║\"\necho \" ╠══════════════════════════════════════╣\"\n\nstatus_line() {\n local name=\"$1\" enabled=\"$2\" cost=\"$3\"\n if [ \"$enabled\" -eq 1 ]; then\n printf \" ║ \\033[32m✓\\033[0m %-22s %12s ║\\n\" \"$name\" \"$cost\"\n ACTIVE=$((ACTIVE + 1))\n else\n printf \" ║ \\033[31m✗\\033[0m %-22s %12s ║\\n\" \"$name\" \"(disabled)\"\n fi\n}\n\nstatus_line \"Qwen3 (local)\" \"$LOCAL_ENABLED\" \"\\$0\"\nstatus_line \"DeepSeek Flash\" \"$DEEPSEEK_ENABLED\" \"\\$0.14/M\"\nstatus_line \"DeepSeek Pro\" \"$DEEPSEEK_ENABLED\" \"\\$0.44/M\"\nstatus_line \"Gemini Flash-Lite\" \"$GEMINI_ENABLED\" \"\\$0.10/M\"\nstatus_line \"Gemini Flash\" \"$GEMINI_ENABLED\" \"\\$0.15/M\"\nstatus_line \"Gemini Pro Search\" \"$GEMINI_ENABLED\" \"\\$1.25/M\"\nstatus_line \"Kimi K2.6\" 1 \"\\$0.60/M\"\nstatus_line \"Codex\" \"$CODEX_ENABLED\" \"varies\"\nstatus_line \"Claude\" 1 \"\\$3-5/M\"\n\necho \" ╠══════════════════════════════════════╣\"\nprintf \" ║ %d of %d models active ║\\n\" \"$ACTIVE\" \"$TOTAL\"\necho \" ╚══════════════════════════════════════╝\"\necho \"\"\necho \" To apply: source ~/.zshrc\"\necho \" To re-configure: ./scripts/onboard.sh\"\necho \"\"\n"}, "0f635316029043aae9e7337b5b97ca4a68869cf3": {"t": 1785753436.7078912, "n": 4385, "h": "c8a0ca407d9186cb", "c": "#!/bin/bash\n# Maggy + Claude Bootstrap Onboarding — collect API keys, enable/disable models.\n# Run: ./scripts/onboard.sh\n\nset -e\n\necho \"\"\necho \" ⚡ Maggy + Claude Bootstrap — Model Onboarding\"\necho \" ─────────────────────────────────────────────\"\necho \"\"\necho \" I'll ask you for API keys. Press Enter to skip any provider.\"\necho \" Models with skipped keys will be disabled for routing.\"\necho \"\"\n\nZSRC=\"$HOME/.zshrc\"\n# Markers for idempotent writes\nMARKER_START=\"# >>> maggy-onboard-start (do not remove)\"\nMARKER_END=\"# <<< maggy-onboard-end\"\n\n# ── Collect keys ─────────────────────────────────────────────────────────\n\necho \" ┌─ DeepSeek V4 (Anthropic-compatible API)\"\nread -rsp \" │ API Key (sk-...): \" DS_KEY\necho \"\"\nif [ -n \"$DS_KEY\" ]; then\n DEEPSEEK_ENABLED=1\n echo \" │ → DeepSeek Flash + Pro enabled\"\nelse\n DEEPSEEK_ENABLED=0\n echo \" │ → DeepSeek disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Google Gemini (OpenAI-compatible endpoint)\"\nread -rsp \" │ API Key: \" GM_KEY\necho \"\"\nif [ -n \"$GM_KEY\" ]; then\n GEMINI_ENABLED=1\n echo \" │ → Gemini Flash-Lite, Flash + Pro Search enabled\"\nelse\n GEMINI_ENABLED=0\n echo \" │ → Gemini disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ OpenAI (for Codex CLI)\"\nread -rsp \" │ API Key (sk-...): \" OAI_KEY\necho \"\"\nif [ -n \"$OAI_KEY\" ]; then\n CODEX_ENABLED=1\n echo \" │ → Codex enabled\"\nelse\n CODEX_ENABLED=0\n echo \" │ → Codex disabled (no key)\"\nfi\necho \" └────────────────────\"\n\necho \"\"\necho \" ┌─ Local Models\"\necho -n \" │ Is Ollama running locally? [Y/n]: \"\nread -r OLLAMA_OK\nif [[ \"$OLLAMA_OK\" =~ ^[Nn] ]]; then\n LOCAL_ENABLED=0\n echo \" │ → Qwen3 local disabled. Classifier will use kimi → deepseek.\"\nelse\n LOCAL_ENABLED=1\n echo \" │ → Qwen3 local enabled (fast + free classification)\"\nfi\necho \" └────────────────────\"\n\n# ── Write to ~/.zshrc ────────────────────────────────────────────────────\n\necho \"\"\necho \" Writing keys to $ZSRC...\"\n\n# Remove previous onboarding block if exists\nif grep -q \"$MARKER_START\" \"$ZSRC\" 2>/dev/null; then\n sed -i '' \"/$MARKER_START/,/$MARKER_END/d\" \"$ZSRC\"\nfi\n\n{\n echo \"$MARKER_START\"\n echo \"# Maggy Model Routing — API Keys (added by onboard.sh)\"\n if [ \"$DEEPSEEK_ENABLED\" -eq 1 ]; then\n echo \"export DEEPSEEK_API_KEY=\\\"$DS_KEY\\\"\"\n fi\n if [ \"$GEMINI_ENABLED\" -eq 1 ]; then\n echo \"export GEMINI_API_KEY=\\\"$GM_KEY\\\"\"\n fi\n if [ \"$CODEX_ENABLED\" -eq 1 ]; then\n echo \"export OPENAI_API_KEY=\\\"$OAI_KEY\\\"\"\n fi\n echo \"$MARKER_END\"\n} >> \"$ZSRC\"\n\n# ── Write routing config ──────────────────────────────────────────────────\n\nCONFIG_DIR=\"$HOME/.claude\"\nmkdir -p \"$CONFIG_DIR\"\n\ncat > \"$CONFIG_DIR/model-config.json\" <<EOF\n{\n \"enabled\": {\n \"qwen3\": $LOCAL_ENABLED,\n \"deepseek-flash\": $DEEPSEEK_ENABLED,\n \"deepseek-pro\": $DEEPSEEK_ENABLED,\n \"gemini-flash-lite\": $GEMINI_ENABLED,\n \"gemini-flash\": $GEMINI_ENABLED,\n \"gemini-pro-search\": $GEMINI_ENABLED,\n \"kimi\": 1,\n \"codex\": $CODEX_ENABLED,\n \"claude\": 1\n },\n \"configured_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n}\nEOF\n\necho \" ✓ Model config written to $CONFIG_DIR/model-config.json\"\n\n# ── Summary ───────────────────────────────────────────────────────────────\n\nACTIVE=0\nTOTAL=9\necho \"\"\necho \" ╔══════════════════════════════════════╗\"\necho \" ║ Routing Status ║\"\necho \" ╠══════════════════════════════════════╣\"\n\nstatus_line() {\n local name=\"$1\" enabled=\"$2\" cost=\"$3\"\n if [ \"$enabled\" -eq 1 ]; then\n printf \" ║ \\033[32m✓\\033[0m %-22s %12s ║\\n\" \"$name\" \"$cost\"\n ACTIVE=$((ACTIVE + 1))\n else\n printf \" ║ \\033[31m✗\\033[0m %-22s %12s ║\\n\" \"$name\" \"(disabled)\"\n fi\n}\n\nstatus_line \"Qwen3 (local)\" \"$LOCAL_ENABLED\" \"$0\"\nstatus_line \"DeepSeek Flash\" \"$DEEPSEEK_ENABLED\" \"$0.14/M\"\nstatus_line \"DeepSeek Pro\" \"$DEEPSEEK_ENABLED\" \"$0.44/M\"\nstatus_line \"Gemini Flash-Lite\" \"$GEMINI_ENABLED\" \"$0.10/M\"\nstatus_line \"Gemini Flash\" \"$GEMINI_ENABLED\" \"$0.15/M\"\nstatus_line \"Gemini Pro Search\" \"$GEMINI_ENABLED\" \"$1.25/M\"\nstatus_line \"Kimi K2.6\" 1 \"$0.60/M\"\nstatus_line \"Codex\" \"$CODEX_ENABLED\" \"varies\"\nstatus_line \"Claude\" 1 \"$3-5/M\"\n\necho \" ╠══════════════════════════════════════╣\"\nprintf \" ║ %d of %d models active ║\\n\" \"$ACTIVE\" \"$TOTAL\"\necho \" ╚══════════════════════════════════════╝\"\necho \"\"\necho \" To apply: source ~/.zshrc\"\necho \" To re-configure: ./scripts/onboard.sh\"\necho \"\"\n"}}, "templates/routing.yaml": {"bb6195fdd529bd81d66f6bb02714ce58f0fb542e": {"t": 1786068217.0401602, "n": 2088, "h": "2709d484da3fdf3c", "c": "# Maggy Provider Config — copy to ~/.maggy/routing.yaml and customize\n#\n# sovereignty:\n# us — US-based providers only (groq, together, anthropic, openai, google)\n# Blocks: deepseek, kimi, moonshot\n# local — local models only (ollama). No external API calls, no data leaves machine.\n# any — no restrictions (use any provider including deepseek, kimi, etc.)\n#\nsovereignty: us\n\n# tiers — which provider handles each complexity tier\n# flash: simple code, boilerplate, CRUD, single-file changes\n# pro: multi-file features, refactors, debugging, test suites\n#\n# Options:\n# groq — Groq API, Llama 3.3 70B, fast + cheap (~$0.05/M). US-based.\n# together — Together AI, Llama 3.1 405B, near-Claude quality (~$3.50/M). US-based.\n# ollama — Local Ollama, qwen2.5-coder:72b, free + private. Needs GPU for best results.\n# deepseek — DeepSeek API, strong coding model (~$0.44/M). China-based.\n#\ntiers:\n flash: groq # groq | together | ollama | deepseek\n pro: together # together | groq | ollama | deepseek\n\n# providers — model and auth config per provider\n# Override only what you need; defaults are filled in automatically.\n#\nproviders:\n groq:\n model: llama-3.3-70b-versatile\n api_key_env: GROQ_API_KEY\n\n together:\n model: meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo\n api_key_env: TOGETHER_API_KEY\n\n ollama:\n model: qwen2.5-coder:72b\n base_url: http://localhost:11434 # override if Ollama runs elsewhere\n\n deepseek:\n model: deepseek-chat\n api_key_env: DEEPSEEK_API_KEY\n\n# ── Quick presets ────────────────────────────────────────────────────────────\n#\n# Full US (recommended for data sovereignty):\n# sovereignty: us\n# tiers: { flash: groq, pro: together }\n#\n# Fully local (air-gapped / maximum privacy):\n# sovereignty: local\n# tiers: { flash: ollama, pro: ollama }\n#\n# Best quality, US-only (close to Claude for pro tier):\n# sovereignty: us\n# tiers: { flash: groq, pro: together }\n#\n# No restrictions (include DeepSeek for cheaper pro tier):\n# sovereignty: any\n# tiers: { flash: groq, pro: deepseek }\n"}}}}