import { useEffect, useState } from "react"; import { Link, useLocation } from "react-router-dom"; import { useQueryClient } from "@tanstack/react-query"; import { useAI } from "../context/AIContext"; import { fetchSkillsForRoute, type AISkill } from "../lib/ai-skills"; import { AI_PROVIDER_META, type AIProviderId } from "../lib/ai"; import { api } from "../lib/api"; import { extractAllStrategyBlocks } from "../lib/strategyImport"; import MarkdownMessage from "./MarkdownMessage"; import PixelMascot from "./PixelMascot"; export default function GuideMascot() { const loc = useLocation(); const ai = useAI(); const qc = useQueryClient(); const [skills, setSkills] = useState([]); const [importing, setImporting] = useState(null); useEffect(() => { void ai.refreshStatus(); }, []); useEffect(() => { if (ai.open) void ai.refreshStatus(); }, [ai.open]); useEffect(() => { void fetchSkillsForRoute(loc.pathname, ai.focus || undefined).then(setSkills); }, [loc.pathname, ai.focus?.cardTitle, ai.focus?.label, ai.open]); return (
{ai.open && (
金幣貓頭鷹
{ai.contextLabel}
{!ai.status?.ready && (

尚未設定 AI。請到設定頁填入 GrokOpenCode Go API Key。

前往 AI 設定 →
)}
{ai.messages.map((msg) => { const blocks = msg.role === "assistant" ? extractAllStrategyBlocks(msg.text) : []; return (
{msg.role === "assistant" && }
{blocks.map((b, i) => ( ))} {msg.meta &&
{msg.meta}
}
); })}
{skills.length > 0 && (
技能快捷
{skills.map((s) => ( ))}
)}