mirror of
https://github.com/basketikun/infinite-canvas.git
synced 2026-08-05 08:54:23 +08:00
feat(agent): enhance local Agent connection handling with silent mode and update UI instructions
This commit is contained in:
@@ -25,6 +25,7 @@ type AgentStore = {
|
||||
token: string;
|
||||
connected: boolean;
|
||||
enabled: boolean;
|
||||
silentConnect: boolean;
|
||||
prompt: string;
|
||||
attachments: AgentAttachment[];
|
||||
sending: boolean;
|
||||
@@ -45,7 +46,7 @@ type AgentStore = {
|
||||
closePanel: () => void;
|
||||
togglePanel: () => void;
|
||||
setCanvasContext: (context: AgentCanvasContext | null) => void;
|
||||
connectAgent: () => void;
|
||||
connectAgent: (options?: { silent?: boolean }) => void;
|
||||
disconnectAgent: (patch?: Partial<Omit<AgentStore, "setAgentState" | "connectAgent" | "disconnectAgent" | "addMessage" | "addEventLog" | "clearEventLogs" | "openPanel" | "closePanel" | "togglePanel" | "setCanvasContext">>) => void;
|
||||
addMessage: (item: AgentChatItem) => void;
|
||||
addEventLog: (item: AgentEventLog) => void;
|
||||
@@ -64,6 +65,7 @@ export const useAgentStore = create<AgentStore>((set, get) => ({
|
||||
token: typeof window === "undefined" ? "" : localStorage.getItem("canvas-agent-token") || "",
|
||||
connected: false,
|
||||
enabled: false,
|
||||
silentConnect: false,
|
||||
prompt: "",
|
||||
attachments: [],
|
||||
sending: false,
|
||||
@@ -90,27 +92,28 @@ export const useAgentStore = create<AgentStore>((set, get) => ({
|
||||
},
|
||||
togglePanel: () => (get().panelOpen ? get().closePanel() : get().openPanel()),
|
||||
setCanvasContext: (canvasContext) => set({ canvasContext }),
|
||||
connectAgent: () => {
|
||||
connectAgent: (options) => {
|
||||
const silent = options?.silent ?? false;
|
||||
const endpoint = get().url.trim().replace(/\/$/, "");
|
||||
const token = get().token.trim();
|
||||
if (!endpoint || !token) return set({ connectError: "请填写 Local URL 和 Connect token" });
|
||||
if (!endpoint || !token) return set({ connectError: silent ? "" : "请填写 Local URL 和 Connect token" });
|
||||
try {
|
||||
const parsed = new URL(endpoint);
|
||||
if (!["http:", "https:"].includes(parsed.protocol)) throw new Error();
|
||||
} catch {
|
||||
return set({ connectError: "Local URL 格式不正确" });
|
||||
return set({ connectError: silent ? "" : "Local URL 格式不正确" });
|
||||
}
|
||||
localStorage.setItem("canvas-agent-url", endpoint);
|
||||
localStorage.setItem("canvas-agent-token", token);
|
||||
// 只设 enabled=true,由 CanvasLocalAgentPanel 的 useEffect 统一负责开 SSE
|
||||
set({ url: endpoint, token, enabled: true, activity: "连接中", connectError: "" });
|
||||
set({ url: endpoint, token, enabled: true, silentConnect: silent, activity: "连接中", connectError: "" });
|
||||
},
|
||||
disconnectAgent: (patch = {}) => {
|
||||
agentSource?.close();
|
||||
agentSource = null;
|
||||
if (connectTimer) clearTimeout(connectTimer);
|
||||
connectTimer = null;
|
||||
set({ enabled: false, connected: false, activity: "离线", ...patch });
|
||||
set({ enabled: false, connected: false, silentConnect: false, activity: "离线", ...patch });
|
||||
},
|
||||
addMessage: (item) => set((state) => ({ messages: [...state.messages.slice(-120), item] })),
|
||||
addEventLog: (item) => set((state) => ({ eventLogs: [...state.eventLogs.slice(-160), item] })),
|
||||
|
||||
Reference in New Issue
Block a user