import type { AgentSoulConfig } from '@dify/contracts/api/console/agent/types.gen' import type { AgentSoulConfigFormState } from './form-state' import isEqual from 'fast-deep-equal' import { atom } from 'jotai' import { defaultAgentSoulConfigFormState } from './form-state' export const agentComposerOriginalConfigAtom = atom(undefined) export const agentComposerOriginalDraftAtom = atom( defaultAgentSoulConfigFormState, ) export const agentComposerPublishedDraftAtom = atom( defaultAgentSoulConfigFormState, ) export const agentComposerDraftAtom = atom( defaultAgentSoulConfigFormState, ) export const rebaseAgentComposerDraftAtom = atom( null, ( _get, set, { draft, originalConfig, }: { draft: AgentSoulConfigFormState originalConfig?: AgentSoulConfig }, ) => { set(agentComposerOriginalConfigAtom, originalConfig) set(agentComposerDraftAtom, draft) set(agentComposerOriginalDraftAtom, draft) set(agentComposerPublishedDraftAtom, draft) }, ) export const isAgentComposerDirtyAtom = atom((get) => { const originalDraft = get(agentComposerOriginalDraftAtom) const draft = get(agentComposerDraftAtom) return !isEqual(draft, originalDraft ?? defaultAgentSoulConfigFormState) }) export const hasAgentComposerUnpublishedChangesAtom = atom((get) => { const publishedDraft = get(agentComposerPublishedDraftAtom) const draft = get(agentComposerDraftAtom) return !isEqual(draft, publishedDraft ?? defaultAgentSoulConfigFormState) })