{
  "version": 3,
  "sources": ["../../src/app/agent/hooks/useAgent.ts"],
  "sourcesContent": ["import { emptyArray } from \"@framerjs/shared/src/emptyArray.ts\"\nimport type { AgentAttachmentImage } from \"app/agent/attachments.ts\"\nimport type { AgentInputSegment } from \"app/agent/editor/agentInputSchema.ts\"\nimport type { Agent, AgentID } from \"app/ai/agents/Agent.ts\"\nimport type { TransientTurnMessage } from \"app/ai/agents/types.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport type { AgentReasoningEffort } from \"app/ai/models.ts\"\nimport engine from \"document/engine.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/index.ts\"\nimport { useCallback, useEffect, useMemo, useState } from \"react\"\n\ninterface UseAgentResult {\n\tagent: Agent | undefined\n\tlastTransientMessages: readonly TransientTurnMessage[]\n\tuserMessageCount: number\n\tgetUserMessageParts: (index: number) => readonly AgentInputSegment[] | undefined\n\tsubmit: (\n\t\tparts: readonly AgentInputSegment[],\n\t\timplicitSelection: readonly NodeID[],\n\t\tmodel: LanguageModel,\n\t\treasoningEffort: AgentReasoningEffort,\n\t\timages: readonly AgentAttachmentImage[],\n\t) => void\n}\n\nexport function useAgent(agentId: AgentID | undefined): UseAgentResult {\n\tconst [updateVersion, setUpdateVersion] = useState(0)\n\n\tconst agent = agentId ? engine.stores.agentStore.getAgent(agentId) : undefined\n\n\t// Subscribe to session updates and track version for memoization.\n\t// This ensures the returned object gets a new reference only when the session notifies.\n\tuseEffect(() => {\n\t\tif (!agent) return\n\t\treturn agent.subscribe(() => setUpdateVersion(v => v + 1))\n\t}, [agent])\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: Chat messages is a getter and returns a new array each time\n\tconst lastTransientMessages = useMemo(() => {\n\t\tif (!agent) return emptyArray<TransientTurnMessage>()\n\t\treturn agent.chatMessages.at(-1)?.state?.messages ?? emptyArray<TransientTurnMessage>()\n\t}, [agent, updateVersion])\n\n\tconst userMessageCount = agent?.userMessageCount ?? 0\n\n\tconst getUserMessageParts = useCallback((index: number) => agent?.getUserMessageParts(index), [agent])\n\n\tconst submit = useCallback(\n\t\t(\n\t\t\tparts: readonly AgentInputSegment[],\n\t\t\timplicitSelection: readonly NodeID[],\n\t\t\tmodel: LanguageModel,\n\t\t\treasoningEffort: AgentReasoningEffort | undefined,\n\t\t\timages: AgentAttachmentImage[],\n\t\t) => {\n\t\t\tif (!agent) return\n\n\t\t\tvoid agent.send(parts, implicitSelection, model, reasoningEffort, images)\n\t\t},\n\t\t[agent],\n\t)\n\n\t// Include updateVersion so the object reference changes when the session notifies.\n\t// This ensures context consumers re-render and read fresh values (like systemMessages).\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: updateVersion intentionally triggers re-memoization\n\treturn useMemo(\n\t\t() => ({\n\t\t\tagent,\n\t\t\tlastTransientMessages,\n\t\t\tuserMessageCount,\n\t\t\tgetUserMessageParts,\n\t\t\tsubmit,\n\t\t}),\n\t\t[agent, lastTransientMessages, userMessageCount, getUserMessageParts, submit, updateVersion],\n\t)\n}\n"],
  "mappings": ";;;;;;;;;;;;;;AASA,mBAA0D;AAgBnD,SAAS,SAAS,SAA8C;AACtE,QAAM,CAAC,eAAe,gBAAgB,QAAI,uBAAS,CAAC;AAEpD,QAAM,QAAQ,UAAU,eAAO,OAAO,WAAW,SAAS,OAAO,IAAI;AAIrE,8BAAU,MAAM;AACf,QAAI,CAAC,MAAO;AACZ,WAAO,MAAM,UAAU,MAAM,iBAAiB,OAAK,IAAI,CAAC,CAAC;AAAA,EAC1D,GAAG,CAAC,KAAK,CAAC;AAGV,QAAM,4BAAwB,sBAAQ,MAAM;AAC3C,QAAI,CAAC,MAAO,QAAO,WAAiC;AACpD,WAAO,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,YAAY,WAAiC;AAAA,EACvF,GAAG,CAAC,OAAO,aAAa,CAAC;AAEzB,QAAM,mBAAmB,OAAO,oBAAoB;AAEpD,QAAM,0BAAsB,0BAAY,CAAC,UAAkB,OAAO,oBAAoB,KAAK,GAAG,CAAC,KAAK,CAAC;AAErG,QAAM,aAAS;AAAA,IACd,CACC,OACA,mBACA,OACA,iBACA,WACI;AACJ,UAAI,CAAC,MAAO;AAEZ,WAAK,MAAM,KAAK,OAAO,mBAAmB,OAAO,iBAAiB,MAAM;AAAA,IACzE;AAAA,IACA,CAAC,KAAK;AAAA,EACP;AAKA,aAAO;AAAA,IACN,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,CAAC,OAAO,uBAAuB,kBAAkB,qBAAqB,QAAQ,aAAa;AAAA,EAC5F;AACD;",
  "names": []
}
