{"version":3,"file":"useAiAssistant.mjs","names":["useCallback","useEffect","useMemo","useRef","useSyncExternalStore","Conversation","AiConversation","AiEngineConfig","notifyContextSwitch","engineNotifyContextSwitch","runTurn","setProposalStatus","engineSetProposalStatus","AiChatItem","ProposalStatus","UseAiAssistantConfig","useAiAssistant","config","conversation","$","_c","t0","Symbol","for","own","target","configRef","t1","current","t2","listener","subscribe","t3","getSnapshot","items","sending","draft","t4","userText","model","contextKey","send","t5","id","status","t6","noticeText","historyMarker","t7","clear","t8"],"sources":["../../src/aiAssistant/useAiAssistant.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react';\nimport { Conversation } from './conversationState';\nimport {\n  AiConversation,\n  AiEngineConfig,\n  notifyContextSwitch as engineNotifyContextSwitch,\n  runTurn,\n  setProposalStatus as engineSetProposalStatus,\n} from './engine';\nimport type { AiChatItem, ProposalStatus } from './types';\n\nexport type UseAiAssistantConfig = AiEngineConfig;\n\n/**\n * Binds the conversation engine to React. `conversation` is the Conversation\n * to drive — typically from useConversation(id) so it survives remounts and\n * can be shown elsewhere; omitted, a private one is created for this mount.\n * Returns the same surface API either way.\n */\nexport const useAiAssistant = (config: UseAiAssistantConfig, conversation?: AiConversation) => {\n  const own = useMemo(() => new Conversation<AiChatItem>(), []);\n  const target = conversation ?? own;\n  // Always-fresh config so send() and callbacks (all user-event driven, so\n  // they run after commit) never see stale props.\n  const configRef = useRef(config);\n  useEffect(() => {\n    configRef.current = config;\n  });\n\n  const { items, sending, draft } = useSyncExternalStore(\n    useCallback((listener: () => void) => target.subscribe(listener), [target]),\n    () => target.getSnapshot(),\n  );\n\n  const send = useCallback(\n    (userText: string, model: string, contextKey?: string) =>\n      runTurn(target, () => configRef.current, userText, model, contextKey),\n    [target],\n  );\n  const setProposalStatus = useCallback(\n    (id: number, status: ProposalStatus) => engineSetProposalStatus(target, id, status),\n    [target],\n  );\n  const notifyContextSwitch = useCallback(\n    (noticeText: string, historyMarker: string) => engineNotifyContextSwitch(target, noticeText, historyMarker),\n    [target],\n  );\n  const clear = useCallback(() => target.clear(), [target]);\n\n  return { items, sending, draft, send, setProposalStatus, notifyContextSwitch, clear, conversation: target };\n};\n"],"mappings":";;;;;;;;;;;AAmBA,MAAagB,kBAAiBC,QAAAC,iBAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAG,OAAAC,IAAA,4BAAA,EAAA;AACFF,OAAA,IAAIhB,cAA0B;AAAAc,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CACxD,MAAAM,SAAeP,gBADWG;CAI1B,MAAAK,YAAkBvB,OAAOc,OAAO;CAAC,IAAAU;AAAA,KAAAR,EAAA,OAAAF,QAAA;AACvBU,aAAA;AACRD,aAASE,UAAWX;;AACrBE,IAAA,KAAAF;AAAAE,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;AAFDlB,WAAU0B,GAER;CAAA,IAAAE;AAAA,KAAAV,EAAA,OAAAM,QAAA;AAGYI,QAAAC,aAA0BL,OAAMM,UAAWD,SAAS;AAAAX,IAAA,KAAAM;AAAAN,IAAA,KAAAU;OAAAA,MAAAV,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAM,QAAA;AAChEO,aAAMP,OAAMQ,aAAc;AAAAd,IAAA,KAAAM;AAAAN,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAF5B,MAAA,EAAAe,OAAAC,SAAAC,UAAkChC,qBAChCyB,IACAG,GACD;CAAC,IAAAK;AAAA,KAAAlB,EAAA,OAAAM,QAAA;AAGAY,QAAAC,UAAAC,OAAAC,eACE9B,QAAQe,cAAcC,UAASE,SAAUU,UAAUC,OAAOC,WAAW;AAAArB,IAAA,KAAAM;AAAAN,IAAA,KAAAkB;OAAAA,MAAAlB,EAAA;CAFzE,MAAAsB,OAAaJ;CAIX,IAAAK;AAAA,KAAAvB,EAAA,OAAAM,QAAA;AAEAiB,QAAAC,IAAAC,WAAwChC,kBAAwBa,QAAQkB,IAAIC,OAAO;AAAAzB,IAAA,KAAAM;AAAAN,IAAA,MAAAuB;OAAAA,MAAAvB,EAAA;CADrF,MAAAR,sBAA0B+B;CAGxB,IAAAG;AAAA,KAAA1B,EAAA,QAAAM,QAAA;AAEAoB,QAAAC,YAAAC,kBAA+CtC,oBAA0BgB,QAAQqB,YAAYC,cAAc;AAAA5B,IAAA,MAAAM;AAAAN,IAAA,MAAA0B;OAAAA,MAAA1B,EAAA;CAD7G,MAAAX,wBAA4BqC;CAG1B,IAAAG;AAAA,KAAA7B,EAAA,QAAAM,QAAA;AACwBuB,aAAMvB,OAAMwB,OAAQ;AAAA9B,IAAA,MAAAM;AAAAN,IAAA,MAAA6B;OAAAA,MAAA7B,EAAA;CAA9C,MAAA8B,QAAcD;CAA4C,IAAAE;AAAA,KAAA/B,EAAA,QAAA8B,SAAA9B,EAAA,QAAAiB,SAAAjB,EAAA,QAAAe,SAAAf,EAAA,QAAAX,yBAAAW,EAAA,QAAAsB,QAAAtB,EAAA,QAAAgB,WAAAhB,EAAA,QAAAR,uBAAAQ,EAAA,QAAAM,QAAA;AAEnDyB,OAAA;GAAAhB;GAAAC;GAAAC;GAAAK;GAAA9B,mBAAAA;GAAAH,qBAAAA;GAAAyC;GAAA/B,cAA4FO;GAAQ;AAAAN,IAAA,MAAA8B;AAAA9B,IAAA,MAAAiB;AAAAjB,IAAA,MAAAe;AAAAf,IAAA,MAAAX;AAAAW,IAAA,MAAAsB;AAAAtB,IAAA,MAAAgB;AAAAhB,IAAA,MAAAR;AAAAQ,IAAA,MAAAM;AAAAN,IAAA,MAAA+B;OAAAA,MAAA/B,EAAA;AAAA,QAApG+B"}