Spaces:
Runtime error
Runtime error
| import type { StateCreator } from "zustand"; | |
| import { create } from "zustand"; | |
| import { createJSONStorage, persist } from "zustand/middleware"; | |
| import { createSelectors } from "./helpers"; | |
| import type { ActiveTool } from "../hooks/useTools"; | |
| import type { AgentLifecycle } from "../services/agent/agent-run-model"; | |
| import type AutonomousAgent from "../services/agent/autonomous-agent"; | |
| interface AgentSlice { | |
| agent: AutonomousAgent | null; | |
| lifecycle: AgentLifecycle; | |
| setLifecycle: (AgentLifecycle) => void; | |
| summarized: boolean; | |
| setSummarized: (boolean) => void; | |
| isAgentThinking: boolean; | |
| setIsAgentThinking: (isThinking: boolean) => void; | |
| setAgent: (newAgent: AutonomousAgent | null) => void; | |
| } | |
| const initialAgentState = { | |
| agent: null, | |
| lifecycle: "offline" as const, | |
| summarized: false, | |
| isAgentThinking: false, | |
| isAgentPaused: undefined, | |
| }; | |
| interface ToolsSlice { | |
| tools: Omit<ActiveTool, "active">[]; | |
| setTools: (tools: ActiveTool[]) => void; | |
| } | |
| const resetters: (() => void)[] = []; | |
| const createAgentSlice: StateCreator<AgentSlice> = (set, get) => { | |
| resetters.push(() => set(initialAgentState)); | |
| return { | |
| ...initialAgentState, | |
| setLifecycle: (lifecycle: AgentLifecycle) => { | |
| set(() => ({ | |
| lifecycle: lifecycle, | |
| })); | |
| }, | |
| setSummarized: (summarized: boolean) => { | |
| set(() => ({ | |
| summarized: summarized, | |
| })); | |
| }, | |
| setIsAgentThinking: (isThinking: boolean) => { | |
| set(() => ({ | |
| isAgentThinking: isThinking, | |
| })); | |
| }, | |
| setAgent: (newAgent) => { | |
| set(() => ({ | |
| agent: newAgent, | |
| })); | |
| if (get().agent === null) { | |
| resetters.forEach((resetter) => resetter()); | |
| } | |
| }, | |
| }; | |
| }; | |
| const createToolsSlice: StateCreator<ToolsSlice> = (set) => { | |
| return { | |
| tools: [], | |
| setTools: (tools) => { | |
| set(() => ({ | |
| tools: tools, | |
| })); | |
| }, | |
| }; | |
| }; | |
| export const useAgentStore = createSelectors( | |
| create<AgentSlice & ToolsSlice>()( | |
| persist( | |
| (...a) => ({ | |
| ...createAgentSlice(...a), | |
| ...createToolsSlice(...a), | |
| }), | |
| { | |
| name: "agent-storage-v2", | |
| storage: createJSONStorage(() => localStorage), | |
| partialize: (state) => ({ | |
| tools: state.tools, | |
| }), | |
| } | |
| ) | |
| ) | |
| ); | |
| export const resetAllAgentSlices = () => resetters.forEach((resetter) => resetter()); | |