@elqnt/agents 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/api/index.d.mts +16 -1
  2. package/dist/api/index.d.ts +16 -1
  3. package/dist/api/index.js +8 -2
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/index.mjs +7 -1
  6. package/dist/api/server.d.mts +7 -1
  7. package/dist/api/server.d.ts +7 -1
  8. package/dist/api/server.js +8 -1
  9. package/dist/api/server.js.map +1 -1
  10. package/dist/api/server.mjs +7 -0
  11. package/dist/api/server.mjs.map +1 -1
  12. package/dist/{chunk-GOHHT3ET.mjs → chunk-BT33DRUI.mjs} +20 -1
  13. package/dist/chunk-BT33DRUI.mjs.map +1 -0
  14. package/dist/{chunk-ZK27UGO6.mjs → chunk-JCPMUFOP.mjs} +1 -1
  15. package/dist/{chunk-BH2FIDFK.js → chunk-KA7N4YTF.js} +22 -3
  16. package/dist/chunk-KA7N4YTF.js.map +1 -0
  17. package/dist/{chunk-2QL3LLC3.mjs → chunk-MNFZXJ2Y.mjs} +72 -33
  18. package/dist/chunk-MNFZXJ2Y.mjs.map +1 -0
  19. package/dist/{chunk-AF4QJD73.js → chunk-PKLT6GDN.js} +124 -85
  20. package/dist/chunk-PKLT6GDN.js.map +1 -0
  21. package/dist/{chunk-3VM5TCJR.js → chunk-VGWUFWOE.js} +1 -1
  22. package/dist/{chunk-3VM5TCJR.js.map → chunk-VGWUFWOE.js.map} +1 -1
  23. package/dist/hooks/index.d.mts +32 -1
  24. package/dist/hooks/index.d.ts +32 -1
  25. package/dist/hooks/index.js +5 -3
  26. package/dist/hooks/index.js.map +1 -1
  27. package/dist/hooks/index.mjs +4 -2
  28. package/dist/index.d.mts +3 -2
  29. package/dist/index.d.ts +3 -2
  30. package/dist/index.js +12 -4
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.mjs +11 -3
  33. package/dist/models/index.d.mts +1 -0
  34. package/dist/models/index.d.ts +1 -0
  35. package/dist/models/index.js +2 -2
  36. package/dist/models/index.mjs +1 -1
  37. package/dist/structured-Bs0IjwLD.d.mts +35 -0
  38. package/dist/structured-Bs0IjwLD.d.ts +35 -0
  39. package/package.json +2 -2
  40. package/dist/chunk-2QL3LLC3.mjs.map +0 -1
  41. package/dist/chunk-AF4QJD73.js.map +0 -1
  42. package/dist/chunk-BH2FIDFK.js.map +0 -1
  43. package/dist/chunk-GOHHT3ET.mjs.map +0 -1
  44. /package/dist/{chunk-ZK27UGO6.mjs.map → chunk-JCPMUFOP.mjs.map} +0 -0
@@ -23,6 +23,7 @@ import {
23
23
  deleteToolDefinitionApi,
24
24
  deleteWidgetApi,
25
25
  disconnectIntegrationApi,
26
+ exportAgentApi,
26
27
  getAgentApi,
27
28
  getAgentCSATAnalyticsApi,
28
29
  getAgentChatsAnalyticsApi,
@@ -42,6 +43,7 @@ import {
42
43
  getToolDefinitionApi,
43
44
  getToolDefinitionsByIdsApi,
44
45
  getWidgetApi,
46
+ importAgentApi,
45
47
  listAgentJobsApi,
46
48
  listAgentsApi,
47
49
  listAgentsSummaryApi,
@@ -65,6 +67,7 @@ import {
65
67
  setDefaultWidgetApi,
66
68
  snoozeSchedulerTaskApi,
67
69
  startSchedulerTaskApi,
70
+ structuredOutputApi,
68
71
  triggerBackgroundAgentApi,
69
72
  updateAgentApi,
70
73
  updateAgentJobApi,
@@ -77,7 +80,7 @@ import {
77
80
  updateSubAgentApi,
78
81
  updateToolDefinitionApi,
79
82
  updateWidgetApi
80
- } from "./chunk-GOHHT3ET.mjs";
83
+ } from "./chunk-BT33DRUI.mjs";
81
84
  import {
82
85
  createBGAgentTransport
83
86
  } from "./chunk-3EHE4O57.mjs";
@@ -134,8 +137,25 @@ function useAgents(options) {
134
137
  (data) => data.agent || null,
135
138
  null
136
139
  );
137
- const loading = listLoading || listSummaryLoading || getLoading || createLoading || updateLoading || deleteLoading || defaultLoading;
138
- const error = listError || listSummaryError || getError || createError || updateError || deleteError || defaultError;
140
+ const exportAgent = async (agentId) => {
141
+ const agent = await exportAgentApi(agentId, optionsRef.current);
142
+ const json = JSON.stringify(agent, null, 2);
143
+ const blob = new Blob([json], { type: "application/json" });
144
+ const url = URL.createObjectURL(blob);
145
+ const a = document.createElement("a");
146
+ a.href = url;
147
+ a.download = `${agent.name || "agent"}.agent.json`;
148
+ a.click();
149
+ URL.revokeObjectURL(url);
150
+ return agent;
151
+ };
152
+ const { execute: importAgent, loading: importLoading, error: importError } = useApiAsync(
153
+ (agent) => importAgentApi(agent, optionsRef.current),
154
+ (data) => data.agent || null,
155
+ null
156
+ );
157
+ const loading = listLoading || listSummaryLoading || getLoading || createLoading || updateLoading || deleteLoading || defaultLoading || importLoading;
158
+ const error = listError || listSummaryError || getError || createError || updateError || deleteError || defaultError || importError;
139
159
  return useMemo(
140
160
  () => ({
141
161
  loading,
@@ -146,9 +166,11 @@ function useAgents(options) {
146
166
  createAgent,
147
167
  updateAgent,
148
168
  deleteAgent,
149
- getDefaultAgent
169
+ getDefaultAgent,
170
+ exportAgent,
171
+ importAgent
150
172
  }),
151
- [loading, error, listAgents, listAgentSummaries, getAgent, createAgent, updateAgent, deleteAgent, getDefaultAgent]
173
+ [loading, error, listAgents, listAgentSummaries, getAgent, createAgent, updateAgent, deleteAgent, getDefaultAgent, exportAgent, importAgent]
152
174
  );
153
175
  }
154
176
 
@@ -608,54 +630,70 @@ function useSandbox(options) {
608
630
  );
609
631
  }
610
632
 
611
- // hooks/use-scheduler-tasks.ts
633
+ // hooks/use-structured-output.ts
612
634
  import { useMemo as useMemo11 } from "react";
613
635
  import { useApiAsync as useApiAsync11 } from "@elqnt/api-client/hooks";
636
+ function useStructuredOutput(options) {
637
+ const optionsRef = useOptionsRef(options);
638
+ const { execute: run, loading, error, clearError } = useApiAsync11(
639
+ (request) => structuredOutputApi(request, optionsRef.current),
640
+ (resp) => resp,
641
+ null
642
+ );
643
+ return useMemo11(
644
+ () => ({ run, loading, error, clearError }),
645
+ [run, loading, error, clearError]
646
+ );
647
+ }
648
+
649
+ // hooks/use-scheduler-tasks.ts
650
+ import { useMemo as useMemo12 } from "react";
651
+ import { useApiAsync as useApiAsync12 } from "@elqnt/api-client/hooks";
614
652
  function useSchedulerTasks(options) {
615
653
  const optionsRef = useOptionsRef(options);
616
- const { execute: listTasks, loading: listLoading, error: listError } = useApiAsync11(
654
+ const { execute: listTasks, loading: listLoading, error: listError } = useApiAsync12(
617
655
  (params) => listSchedulerTasksApi({ ...optionsRef.current, ...params }),
618
656
  (data) => data.tasks,
619
657
  []
620
658
  );
621
- const { execute: createTask, loading: createLoading, error: createError } = useApiAsync11(
659
+ const { execute: createTask, loading: createLoading, error: createError } = useApiAsync12(
622
660
  (task) => createSchedulerTaskApi(task, optionsRef.current),
623
661
  (data) => data.task || null,
624
662
  null
625
663
  );
626
- const { execute: getTask, loading: getLoading, error: getError } = useApiAsync11(
664
+ const { execute: getTask, loading: getLoading, error: getError } = useApiAsync12(
627
665
  (taskId) => getSchedulerTaskApi(taskId, optionsRef.current),
628
666
  (data) => data.task || null,
629
667
  null
630
668
  );
631
- const { execute: updateTask, loading: updateLoading, error: updateError } = useApiAsync11(
669
+ const { execute: updateTask, loading: updateLoading, error: updateError } = useApiAsync12(
632
670
  (taskId, task) => updateSchedulerTaskApi(taskId, task, optionsRef.current),
633
671
  (data) => data.task || null,
634
672
  null
635
673
  );
636
- const { execute: deleteTask, loading: deleteLoading, error: deleteError } = useApiAsync11(
674
+ const { execute: deleteTask, loading: deleteLoading, error: deleteError } = useApiAsync12(
637
675
  (taskId) => deleteSchedulerTaskApi(taskId, optionsRef.current),
638
676
  (data) => data.success,
639
677
  false
640
678
  );
641
- const { execute: snoozeTask, loading: snoozeLoading, error: snoozeError } = useApiAsync11(
679
+ const { execute: snoozeTask, loading: snoozeLoading, error: snoozeError } = useApiAsync12(
642
680
  (taskId, delay) => snoozeSchedulerTaskApi(taskId, delay, optionsRef.current),
643
681
  (data) => data.task || null,
644
682
  null
645
683
  );
646
- const { execute: completeTask, loading: completeLoading, error: completeError } = useApiAsync11(
684
+ const { execute: completeTask, loading: completeLoading, error: completeError } = useApiAsync12(
647
685
  (taskId) => completeSchedulerTaskApi(taskId, optionsRef.current),
648
686
  (data) => data.task || null,
649
687
  null
650
688
  );
651
- const { execute: startTask, loading: startLoading, error: startError } = useApiAsync11(
689
+ const { execute: startTask, loading: startLoading, error: startError } = useApiAsync12(
652
690
  (taskId) => startSchedulerTaskApi(taskId, optionsRef.current),
653
691
  (data) => data.task || null,
654
692
  null
655
693
  );
656
694
  const loading = listLoading || createLoading || getLoading || updateLoading || deleteLoading || snoozeLoading || completeLoading || startLoading;
657
695
  const error = listError || createError || getError || updateError || deleteError || snoozeError || completeError || startError;
658
- return useMemo11(
696
+ return useMemo12(
659
697
  () => ({
660
698
  loading,
661
699
  error,
@@ -673,53 +711,53 @@ function useSchedulerTasks(options) {
673
711
  }
674
712
 
675
713
  // hooks/use-scheduler-schedules.ts
676
- import { useMemo as useMemo12 } from "react";
677
- import { useApiAsync as useApiAsync12 } from "@elqnt/api-client/hooks";
714
+ import { useMemo as useMemo13 } from "react";
715
+ import { useApiAsync as useApiAsync13 } from "@elqnt/api-client/hooks";
678
716
  function useSchedulerSchedules(options) {
679
717
  const optionsRef = useOptionsRef(options);
680
- const { execute: listSchedules, loading: listLoading, error: listError } = useApiAsync12(
718
+ const { execute: listSchedules, loading: listLoading, error: listError } = useApiAsync13(
681
719
  (params) => listSchedulesApi({ ...optionsRef.current, ...params }),
682
720
  (data) => data.schedules,
683
721
  []
684
722
  );
685
- const { execute: createSchedule, loading: createLoading, error: createError } = useApiAsync12(
723
+ const { execute: createSchedule, loading: createLoading, error: createError } = useApiAsync13(
686
724
  (schedule) => createScheduleApi(schedule, optionsRef.current),
687
725
  (data) => data.schedule || null,
688
726
  null
689
727
  );
690
- const { execute: getSchedule, loading: getLoading, error: getError } = useApiAsync12(
728
+ const { execute: getSchedule, loading: getLoading, error: getError } = useApiAsync13(
691
729
  (scheduleId) => getScheduleApi(scheduleId, optionsRef.current),
692
730
  (data) => data.schedule || null,
693
731
  null
694
732
  );
695
- const { execute: updateSchedule, loading: updateLoading, error: updateError } = useApiAsync12(
733
+ const { execute: updateSchedule, loading: updateLoading, error: updateError } = useApiAsync13(
696
734
  (scheduleId, schedule) => updateScheduleApi(scheduleId, schedule, optionsRef.current),
697
735
  (data) => data.schedule || null,
698
736
  null
699
737
  );
700
- const { execute: deleteSchedule, loading: deleteLoading, error: deleteError } = useApiAsync12(
738
+ const { execute: deleteSchedule, loading: deleteLoading, error: deleteError } = useApiAsync13(
701
739
  (scheduleId) => deleteScheduleApi(scheduleId, optionsRef.current),
702
740
  (data) => data.success,
703
741
  false
704
742
  );
705
- const { execute: pauseSchedule, loading: pauseLoading, error: pauseError } = useApiAsync12(
743
+ const { execute: pauseSchedule, loading: pauseLoading, error: pauseError } = useApiAsync13(
706
744
  (scheduleId) => pauseScheduleApi(scheduleId, optionsRef.current),
707
745
  (data) => data.schedule || null,
708
746
  null
709
747
  );
710
- const { execute: resumeSchedule, loading: resumeLoading, error: resumeError } = useApiAsync12(
748
+ const { execute: resumeSchedule, loading: resumeLoading, error: resumeError } = useApiAsync13(
711
749
  (scheduleId) => resumeScheduleApi(scheduleId, optionsRef.current),
712
750
  (data) => data.schedule || null,
713
751
  null
714
752
  );
715
- const { execute: runSchedule, loading: runLoading, error: runError } = useApiAsync12(
753
+ const { execute: runSchedule, loading: runLoading, error: runError } = useApiAsync13(
716
754
  (scheduleId) => runScheduleApi(scheduleId, optionsRef.current),
717
755
  (data) => data.schedule || null,
718
756
  null
719
757
  );
720
758
  const loading = listLoading || createLoading || getLoading || updateLoading || deleteLoading || pauseLoading || resumeLoading || runLoading;
721
759
  const error = listError || createError || getError || updateError || deleteError || pauseError || resumeError || runError;
722
- return useMemo12(
760
+ return useMemo13(
723
761
  () => ({
724
762
  loading,
725
763
  error,
@@ -737,8 +775,8 @@ function useSchedulerSchedules(options) {
737
775
  }
738
776
 
739
777
  // hooks/use-background-agents.ts
740
- import { useState, useEffect as useEffect2, useRef as useRef2, useCallback, useMemo as useMemo13 } from "react";
741
- import { useApiAsync as useApiAsync13 } from "@elqnt/api-client/hooks";
778
+ import { useState, useEffect as useEffect2, useRef as useRef2, useCallback, useMemo as useMemo14 } from "react";
779
+ import { useApiAsync as useApiAsync14 } from "@elqnt/api-client/hooks";
742
780
  function useBackgroundAgents(options) {
743
781
  const optionsRef = useOptionsRef(options);
744
782
  const [liveStates, setLiveStates] = useState({});
@@ -793,17 +831,17 @@ function useBackgroundAgents(options) {
793
831
  });
794
832
  transport.streamJob(jobId);
795
833
  }, []);
796
- const { execute: triggerAgent, loading: triggerLoading, error: triggerError } = useApiAsync13(
834
+ const { execute: triggerAgent, loading: triggerLoading, error: triggerError } = useApiAsync14(
797
835
  (request) => triggerBackgroundAgentApi(request, optionsRef.current),
798
836
  (data) => data,
799
837
  null
800
838
  );
801
- const { execute: checkStatus, loading: statusLoading, error: statusError } = useApiAsync13(
839
+ const { execute: checkStatus, loading: statusLoading, error: statusError } = useApiAsync14(
802
840
  (jobId) => checkBackgroundAgentStatusApi(jobId, optionsRef.current),
803
841
  (data) => data,
804
842
  null
805
843
  );
806
- const { execute: listAgentSummaries, loading: summaryLoading, error: summaryError } = useApiAsync13(
844
+ const { execute: listAgentSummaries, loading: summaryLoading, error: summaryError } = useApiAsync14(
807
845
  () => listAgentsSummaryApi(optionsRef.current),
808
846
  (data) => data.agents || [],
809
847
  []
@@ -1041,7 +1079,7 @@ function useBackgroundAgents(options) {
1041
1079
  }, []);
1042
1080
  const loading = triggerLoading || statusLoading || summaryLoading;
1043
1081
  const error = triggerError || statusError || summaryError;
1044
- return useMemo13(() => ({
1082
+ return useMemo14(() => ({
1045
1083
  liveStates,
1046
1084
  streamJob,
1047
1085
  createTask,
@@ -1068,8 +1106,9 @@ export {
1068
1106
  useAnalytics,
1069
1107
  useIntegrations,
1070
1108
  useSandbox,
1109
+ useStructuredOutput,
1071
1110
  useSchedulerTasks,
1072
1111
  useSchedulerSchedules,
1073
1112
  useBackgroundAgents
1074
1113
  };
1075
- //# sourceMappingURL=chunk-2QL3LLC3.mjs.map
1114
+ //# sourceMappingURL=chunk-MNFZXJ2Y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../hooks/use-agents.ts","../hooks/use-options-ref.ts","../hooks/use-skills.ts","../hooks/use-sub-agents.ts","../hooks/use-tool-definitions.ts","../hooks/use-agent-jobs.ts","../hooks/use-widgets.ts","../hooks/use-skill-user-config.ts","../hooks/use-analytics.ts","../hooks/use-integrations.ts","../hooks/use-sandbox.ts","../hooks/use-structured-output.ts","../hooks/use-scheduler-tasks.ts","../hooks/use-scheduler-schedules.ts","../hooks/use-background-agents.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport type { Agent, AgentSummary } from \"../models\";\nimport {\n listAgentsApi,\n listAgentsSummaryApi,\n getAgentApi,\n createAgentApi,\n updateAgentApi,\n deleteAgentApi,\n getDefaultAgentApi,\n exportAgentApi,\n importAgentApi,\n} from \"../api\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseAgentsOptions = ApiClientOptions;\n\n/**\n * Hook for agent CRUD operations\n *\n * @example\n * ```tsx\n * const { loading, error, listAgents, createAgent } = useAgents({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const agents = await listAgents();\n * ```\n */\nexport function useAgents(options: UseAgentsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listAgents, loading: listLoading, error: listError } = useApiAsync(\n () => listAgentsApi(optionsRef.current),\n (data) => data.agents,\n [] as Agent[]\n );\n\n const { execute: listAgentSummaries, loading: listSummaryLoading, error: listSummaryError } = useApiAsync(\n () => listAgentsSummaryApi(optionsRef.current),\n (data) => data.agents,\n [] as AgentSummary[]\n );\n\n const { execute: getAgent, loading: getLoading, error: getError } = useApiAsync(\n (agentId: string) => getAgentApi(agentId, optionsRef.current),\n (data) => data.agent || null,\n null as Agent | null\n );\n\n const { execute: createAgent, loading: createLoading, error: createError } = useApiAsync(\n (agent: Partial<Agent>) => createAgentApi(agent, optionsRef.current),\n (data) => data.agent || null,\n null as Agent | null\n );\n\n const { execute: updateAgent, loading: updateLoading, error: updateError } = useApiAsync(\n (agentId: string, agent: Partial<Agent>) => updateAgentApi(agentId, agent, optionsRef.current),\n (data) => data.agent || null,\n null as Agent | null\n );\n\n const { execute: deleteAgent, loading: deleteLoading, error: deleteError } = useApiAsync(\n (agentId: string) => deleteAgentApi(agentId, optionsRef.current),\n () => true,\n false\n );\n\n const { execute: getDefaultAgent, loading: defaultLoading, error: defaultError } = useApiAsync(\n () => getDefaultAgentApi(optionsRef.current),\n (data) => data.agent || null,\n null as Agent | null\n );\n\n const exportAgent = async (agentId: string) => {\n const agent = await exportAgentApi(agentId, optionsRef.current);\n const json = JSON.stringify(agent, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${agent.name || \"agent\"}.agent.json`;\n a.click();\n URL.revokeObjectURL(url);\n return agent;\n };\n\n const { execute: importAgent, loading: importLoading, error: importError } = useApiAsync(\n (agent: Agent) => importAgentApi(agent, optionsRef.current),\n (data) => data.agent || null,\n null as Agent | null\n );\n\n const loading = listLoading || listSummaryLoading || getLoading || createLoading || updateLoading || deleteLoading || defaultLoading || importLoading;\n const error = listError || listSummaryError || getError || createError || updateError || deleteError || defaultError || importError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listAgents,\n listAgentSummaries,\n getAgent,\n createAgent,\n updateAgent,\n deleteAgent,\n getDefaultAgent,\n exportAgent,\n importAgent,\n }),\n [loading, error, listAgents, listAgentSummaries, getAgent, createAgent, updateAgent, deleteAgent, getDefaultAgent, exportAgent, importAgent]\n );\n}\n","\"use client\";\n\n/**\n * Options reference utility for React hooks\n *\n * Keeps a mutable ref synchronized with options to avoid\n * stale closures in callbacks while preventing unnecessary re-renders.\n */\n\nimport { useRef, useEffect } from \"react\";\n\n/**\n * Creates a ref that stays synchronized with the provided options.\n * Useful for accessing current options values in callbacks without\n * causing re-renders or stale closure issues.\n *\n * @param options - The options object to track\n * @returns A ref that always contains the latest options\n *\n * @example\n * ```tsx\n * const optionsRef = useOptionsRef(options);\n *\n * const fetchData = useCallback(async () => {\n * // Always has the latest options, no stale closure\n * const result = await api.fetch(optionsRef.current);\n * }, []); // No need to include options in deps\n * ```\n */\nexport function useOptionsRef<T>(options: T): React.MutableRefObject<T> {\n const optionsRef = useRef(options);\n\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n return optionsRef;\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { Skill } from \"../models\";\nimport {\n listSkillsApi,\n getSkillApi,\n createSkillApi,\n updateSkillApi,\n deleteSkillApi,\n getSkillCategoriesApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSkillsOptions = ApiClientOptions;\n\n/**\n * Hook for skill CRUD operations\n */\nexport function useSkills(options: UseSkillsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listSkills, loading: listLoading, error: listError } = useApiAsync(\n () => listSkillsApi(optionsRef.current),\n (data) => data.skills,\n [] as Skill[]\n );\n\n const { execute: getSkill, loading: getLoading, error: getError } = useApiAsync(\n (skillId: string) => getSkillApi(skillId, optionsRef.current),\n (data) => data.skill || null,\n null as Skill | null\n );\n\n const { execute: createSkill, loading: createLoading, error: createError } = useApiAsync(\n (skill: Partial<Skill>) => createSkillApi(skill, optionsRef.current),\n (data) => data.skill || null,\n null as Skill | null\n );\n\n const { execute: updateSkill, loading: updateLoading, error: updateError } = useApiAsync(\n (skillId: string, skill: Partial<Skill>) => updateSkillApi(skillId, skill, optionsRef.current),\n (data) => data.skill || null,\n null as Skill | null\n );\n\n const { execute: deleteSkill, loading: deleteLoading, error: deleteError } = useApiAsync(\n (skillId: string) => deleteSkillApi(skillId, optionsRef.current),\n () => true,\n false\n );\n\n const { execute: getCategories, loading: categoriesLoading, error: categoriesError } = useApiAsync(\n () => getSkillCategoriesApi(optionsRef.current),\n (data) => data.categories,\n [] as string[]\n );\n\n const loading = listLoading || getLoading || createLoading || updateLoading || deleteLoading || categoriesLoading;\n const error = listError || getError || createError || updateError || deleteError || categoriesError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listSkills,\n getSkill,\n createSkill,\n updateSkill,\n deleteSkill,\n getCategories,\n }),\n [loading, error, listSkills, getSkill, createSkill, updateSkill, deleteSkill, getCategories]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { SubAgent } from \"../models\";\nimport {\n listSubAgentsApi,\n getSubAgentApi,\n createSubAgentApi,\n updateSubAgentApi,\n deleteSubAgentApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSubAgentsOptions = ApiClientOptions;\n\n/**\n * Hook for sub-agent CRUD operations\n */\nexport function useSubAgents(options: UseSubAgentsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listSubAgents, loading: listLoading, error: listError } = useApiAsync(\n () => listSubAgentsApi(optionsRef.current),\n (data) => data.subAgents,\n [] as SubAgent[]\n );\n\n const { execute: getSubAgent, loading: getLoading, error: getError } = useApiAsync(\n (subAgentId: string) => getSubAgentApi(subAgentId, optionsRef.current),\n (data) => data.subAgent || null,\n null as SubAgent | null\n );\n\n const { execute: createSubAgent, loading: createLoading, error: createError } = useApiAsync(\n (subAgent: Partial<SubAgent>) => createSubAgentApi(subAgent, optionsRef.current),\n (data) => data.subAgent || null,\n null as SubAgent | null\n );\n\n const { execute: updateSubAgent, loading: updateLoading, error: updateError } = useApiAsync(\n (subAgentId: string, subAgent: Partial<SubAgent>) => updateSubAgentApi(subAgentId, subAgent, optionsRef.current),\n (data) => data.subAgent || null,\n null as SubAgent | null\n );\n\n const { execute: deleteSubAgent, loading: deleteLoading, error: deleteError } = useApiAsync(\n (subAgentId: string) => deleteSubAgentApi(subAgentId, optionsRef.current),\n () => true,\n false\n );\n\n const loading = listLoading || getLoading || createLoading || updateLoading || deleteLoading;\n const error = listError || getError || createError || updateError || deleteError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listSubAgents,\n getSubAgent,\n createSubAgent,\n updateSubAgent,\n deleteSubAgent,\n }),\n [loading, error, listSubAgents, getSubAgent, createSubAgent, updateSubAgent, deleteSubAgent]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { ToolDefinition } from \"../models\";\nimport {\n listToolDefinitionsApi,\n getToolDefinitionApi,\n createToolDefinitionApi,\n updateToolDefinitionApi,\n deleteToolDefinitionApi,\n getToolDefinitionsByIdsApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseToolDefinitionsOptions = ApiClientOptions;\n\n/**\n * Hook for tool definition CRUD operations\n *\n * @example\n * ```tsx\n * const { loading, error, listToolDefinitions, createToolDefinition } = useToolDefinitions({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const toolDefs = await listToolDefinitions();\n * ```\n */\nexport function useToolDefinitions(options: UseToolDefinitionsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listToolDefinitions, loading: listLoading, error: listError } = useApiAsync(\n () => listToolDefinitionsApi(optionsRef.current),\n (data) => data.toolDefinitions,\n [] as ToolDefinition[]\n );\n\n const { execute: getToolDefinition, loading: getLoading, error: getError } = useApiAsync(\n (toolDefId: string) => getToolDefinitionApi(toolDefId, optionsRef.current),\n (data) => data.toolDefinition || null,\n null as ToolDefinition | null\n );\n\n const { execute: getToolDefinitionsByIds, loading: getByIdsLoading, error: getByIdsError } = useApiAsync(\n (ids: string[]) => getToolDefinitionsByIdsApi(ids, optionsRef.current),\n (data) => data.toolDefinitions,\n [] as ToolDefinition[]\n );\n\n const { execute: createToolDefinition, loading: createLoading, error: createError } = useApiAsync(\n (toolDefinition: Partial<ToolDefinition>) => createToolDefinitionApi(toolDefinition, optionsRef.current),\n (data) => data.toolDefinition || null,\n null as ToolDefinition | null\n );\n\n const { execute: updateToolDefinition, loading: updateLoading, error: updateError } = useApiAsync(\n (toolDefId: string, toolDefinition: Partial<ToolDefinition>) => updateToolDefinitionApi(toolDefId, toolDefinition, optionsRef.current),\n (data) => data.toolDefinition || null,\n null as ToolDefinition | null\n );\n\n const { execute: deleteToolDefinition, loading: deleteLoading, error: deleteError } = useApiAsync(\n (toolDefId: string) => deleteToolDefinitionApi(toolDefId, optionsRef.current),\n () => true,\n false\n );\n\n const loading = listLoading || getLoading || getByIdsLoading || createLoading || updateLoading || deleteLoading;\n const error = listError || getError || getByIdsError || createError || updateError || deleteError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listToolDefinitions,\n getToolDefinition,\n getToolDefinitionsByIds,\n createToolDefinition,\n updateToolDefinition,\n deleteToolDefinition,\n }),\n [loading, error, listToolDefinitions, getToolDefinition, getToolDefinitionsByIds, createToolDefinition, updateToolDefinition, deleteToolDefinition]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { AgentJob } from \"../models\";\nimport {\n listAgentJobsApi,\n getAgentJobApi,\n createAgentJobApi,\n updateAgentJobApi,\n deleteAgentJobApi,\n pauseAgentJobApi,\n resumeAgentJobApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseAgentJobsOptions = ApiClientOptions;\n\n/**\n * Hook for agent job CRUD operations\n *\n * @example\n * ```tsx\n * const { loading, error, listAgentJobs, createAgentJob, pauseAgentJob } = useAgentJobs({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const jobs = await listAgentJobs();\n * await pauseAgentJob(jobId);\n * ```\n */\nexport function useAgentJobs(options: UseAgentJobsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listAgentJobs, loading: listLoading, error: listError } = useApiAsync(\n () => listAgentJobsApi(optionsRef.current),\n (data) => data.jobs,\n [] as AgentJob[]\n );\n\n const { execute: getAgentJob, loading: getLoading, error: getError } = useApiAsync(\n (jobId: string) => getAgentJobApi(jobId, optionsRef.current),\n (data) => data.job || null,\n null as AgentJob | null\n );\n\n const { execute: createAgentJob, loading: createLoading, error: createError } = useApiAsync(\n (job: Partial<AgentJob>) => createAgentJobApi(job, optionsRef.current),\n (data) => data.job || null,\n null as AgentJob | null\n );\n\n const { execute: updateAgentJob, loading: updateLoading, error: updateError } = useApiAsync(\n (jobId: string, job: Partial<AgentJob>) => updateAgentJobApi(jobId, job, optionsRef.current),\n (data) => data.job || null,\n null as AgentJob | null\n );\n\n const { execute: deleteAgentJob, loading: deleteLoading, error: deleteError } = useApiAsync(\n (jobId: string) => deleteAgentJobApi(jobId, optionsRef.current),\n () => true,\n false\n );\n\n const { execute: pauseAgentJob, loading: pauseLoading, error: pauseError } = useApiAsync(\n (jobId: string) => pauseAgentJobApi(jobId, optionsRef.current),\n (data) => data.job || null,\n null as AgentJob | null\n );\n\n const { execute: resumeAgentJob, loading: resumeLoading, error: resumeError } = useApiAsync(\n (jobId: string) => resumeAgentJobApi(jobId, optionsRef.current),\n (data) => data.job || null,\n null as AgentJob | null\n );\n\n const loading = listLoading || getLoading || createLoading || updateLoading || deleteLoading || pauseLoading || resumeLoading;\n const error = listError || getError || createError || updateError || deleteError || pauseError || resumeError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listAgentJobs,\n getAgentJob,\n createAgentJob,\n updateAgentJob,\n deleteAgentJob,\n pauseAgentJob,\n resumeAgentJob,\n }),\n [loading, error, listAgentJobs, getAgentJob, createAgentJob, updateAgentJob, deleteAgentJob, pauseAgentJob, resumeAgentJob]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { AgentWidget } from \"../models\";\nimport {\n listWidgetsApi,\n getWidgetApi,\n createWidgetApi,\n updateWidgetApi,\n deleteWidgetApi,\n getDefaultWidgetApi,\n setDefaultWidgetApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport interface UseWidgetsOptions extends ApiClientOptions {\n agentId: string;\n}\n\n/**\n * Hook for widget CRUD operations\n *\n * @example\n * ```tsx\n * const { loading, error, listWidgets, createWidget } = useWidgets({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * agentId: selectedAgentId,\n * });\n *\n * const widgets = await listWidgets();\n * ```\n */\nexport function useWidgets(options: UseWidgetsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listWidgets, loading: listLoading, error: listError } = useApiAsync(\n () => listWidgetsApi(optionsRef.current.agentId, optionsRef.current),\n (data) => data.widgets,\n [] as AgentWidget[]\n );\n\n const { execute: getWidget, loading: getLoading, error: getError } = useApiAsync(\n (widgetId: string) => getWidgetApi(widgetId, optionsRef.current),\n (data) => data.widget || null,\n null as AgentWidget | null\n );\n\n const { execute: getDefaultWidget, loading: defaultLoading, error: defaultError } = useApiAsync(\n () => getDefaultWidgetApi(optionsRef.current.agentId, optionsRef.current),\n (data) => data.widget || null,\n null as AgentWidget | null\n );\n\n const { execute: createWidget, loading: createLoading, error: createError } = useApiAsync(\n (widget: Partial<AgentWidget>) => createWidgetApi(optionsRef.current.agentId, widget, optionsRef.current),\n (data) => data.widget || null,\n null as AgentWidget | null\n );\n\n const { execute: updateWidget, loading: updateLoading, error: updateError } = useApiAsync(\n (widgetId: string, widget: Partial<AgentWidget>) => updateWidgetApi(widgetId, widget, optionsRef.current),\n (data) => data.widget || null,\n null as AgentWidget | null\n );\n\n const { execute: deleteWidget, loading: deleteLoading, error: deleteError } = useApiAsync(\n (widgetId: string) => deleteWidgetApi(widgetId, optionsRef.current),\n () => true,\n false\n );\n\n const { execute: setDefaultWidget, loading: setDefaultLoading, error: setDefaultError } = useApiAsync(\n (widgetId: string) => setDefaultWidgetApi(widgetId, optionsRef.current.agentId, optionsRef.current),\n () => true,\n false\n );\n\n const loading = listLoading || getLoading || defaultLoading || createLoading || updateLoading || deleteLoading || setDefaultLoading;\n const error = listError || getError || defaultError || createError || updateError || deleteError || setDefaultError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listWidgets,\n getWidget,\n getDefaultWidget,\n createWidget,\n updateWidget,\n deleteWidget,\n setDefaultWidget,\n }),\n [loading, error, listWidgets, getWidget, getDefaultWidget, createWidget, updateWidget, deleteWidget, setDefaultWidget]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { SkillUserConfig, ResolveSkillConfigResponse } from \"../models\";\nimport {\n getSkillUserConfigApi,\n updateSkillUserConfigApi,\n deleteSkillUserConfigApi,\n listSkillUserConfigsApi,\n resolveSkillConfigApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSkillUserConfigOptions = ApiClientOptions;\n\n/**\n * Hook for skill user configuration operations\n *\n * @example\n * ```tsx\n * const { loading, error, getSkillUserConfig, updateSkillUserConfig } = useSkillUserConfig({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const config = await getSkillUserConfig(skillId);\n * await updateSkillUserConfig(skillId, { enabled: true });\n * ```\n */\nexport function useSkillUserConfig(options: UseSkillUserConfigOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: getSkillUserConfig, loading: getLoading, error: getError } = useApiAsync(\n (skillId: string, agentId?: string) =>\n getSkillUserConfigApi(skillId, { ...optionsRef.current, agentId }),\n (data) => data.userConfig || null,\n null as SkillUserConfig | null\n );\n\n const { execute: updateSkillUserConfig, loading: updateLoading, error: updateError } = useApiAsync(\n (\n skillId: string,\n data: { enabled?: boolean; displayOrder?: number; config?: Record<string, unknown>; agentId?: string }\n ) => updateSkillUserConfigApi(skillId, data, optionsRef.current),\n (data) => data.userConfig || null,\n null as SkillUserConfig | null\n );\n\n const { execute: deleteSkillUserConfig, loading: deleteLoading, error: deleteError } = useApiAsync(\n (skillId: string, agentId?: string) =>\n deleteSkillUserConfigApi(skillId, { ...optionsRef.current, agentId }),\n () => true,\n false\n );\n\n const { execute: listSkillUserConfigs, loading: listLoading, error: listError } = useApiAsync(\n (params?: { agentId?: string; limit?: number; offset?: number }) =>\n listSkillUserConfigsApi({ ...optionsRef.current, ...params }),\n (data) => data.userConfigs || [],\n [] as SkillUserConfig[]\n );\n\n const { execute: resolveSkillConfig, loading: resolveLoading, error: resolveError } = useApiAsync(\n (skillId: string, agentId: string) => resolveSkillConfigApi(skillId, agentId, optionsRef.current),\n (data) => data,\n null as ResolveSkillConfigResponse | null\n );\n\n const loading = getLoading || updateLoading || deleteLoading || listLoading || resolveLoading;\n const error = getError || updateError || deleteError || listError || resolveError;\n\n return useMemo(\n () => ({\n loading,\n error,\n getSkillUserConfig,\n updateSkillUserConfig,\n deleteSkillUserConfig,\n listSkillUserConfigs,\n resolveSkillConfig,\n }),\n [loading, error, getSkillUserConfig, updateSkillUserConfig, deleteSkillUserConfig, listSkillUserConfigs, resolveSkillConfig]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport {\n getAgentChatsAnalyticsApi,\n getAgentCSATAnalyticsApi,\n getAgentListAnalyticsApi,\n getTaskOutcomesApi,\n type DateFilter,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseAnalyticsOptions = ApiClientOptions;\n\n/**\n * Hook for agent analytics operations\n *\n * @example\n * ```tsx\n * const { loading, error, getAgentChatsAnalytics, getAgentCSATAnalytics } = useAnalytics({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const chatsData = await getAgentChatsAnalytics({ from: '2024-01-01', to: '2024-12-31' });\n * ```\n */\nexport function useAnalytics(options: UseAnalyticsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: getAgentChatsAnalytics, loading: chatsLoading, error: chatsError } = useApiAsync(\n (params: { date_filter: DateFilter; agent_id?: string }) =>\n getAgentChatsAnalyticsApi(params, optionsRef.current),\n (data) => data.data,\n [] as unknown[]\n );\n\n const { execute: getAgentCSATAnalytics, loading: csatLoading, error: csatError } = useApiAsync(\n (params: { date_filter: DateFilter; agent_id?: string }) =>\n getAgentCSATAnalyticsApi(params, optionsRef.current),\n (data) => data.data,\n [] as unknown[]\n );\n\n const { execute: getAgentListAnalytics, loading: listLoading, error: listError } = useApiAsync(\n () => getAgentListAnalyticsApi(optionsRef.current),\n (data) => data.data,\n [] as unknown[]\n );\n\n const { execute: getTaskOutcomes, loading: taskLoading, error: taskError } = useApiAsync(\n (params: { date_filter: DateFilter }) => getTaskOutcomesApi(params, optionsRef.current),\n (data) => data.data,\n [] as unknown[]\n );\n\n const loading = chatsLoading || csatLoading || listLoading || taskLoading;\n const error = chatsError || csatError || listError || taskError;\n\n return useMemo(\n () => ({\n loading,\n error,\n getAgentChatsAnalytics,\n getAgentCSATAnalytics,\n getAgentListAnalytics,\n getTaskOutcomes,\n }),\n [loading, error, getAgentChatsAnalytics, getAgentCSATAnalytics, getAgentListAnalytics, getTaskOutcomes]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { UserIntegration, IntegrationProviderTS, IntegrationTypeTS } from \"../models\";\nimport {\n listIntegrationsApi,\n getIntegrationApi,\n connectIntegrationApi,\n disconnectIntegrationApi,\n refreshIntegrationApi,\n updateIntegrationTriageApi,\n runEmailTriageApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseIntegrationsOptions = ApiClientOptions;\n\n/**\n * Hook for user integration operations (OAuth connections)\n *\n * @example\n * ```tsx\n * const { loading, error, listIntegrations, connectIntegration, disconnectIntegration } = useIntegrations({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const integrations = await listIntegrations();\n * const { auth_url } = await connectIntegration({ provider: 'google', integrationType: 'email', redirectUri: '/callback' });\n * ```\n */\nexport function useIntegrations(options: UseIntegrationsOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listIntegrations, loading: listLoading, error: listError } = useApiAsync(\n () => listIntegrationsApi(optionsRef.current),\n (data) => data.integrations,\n [] as UserIntegration[]\n );\n\n const { execute: getIntegration, loading: getLoading, error: getError } = useApiAsync(\n (provider: IntegrationProviderTS, integrationType: IntegrationTypeTS) =>\n getIntegrationApi(provider, integrationType, optionsRef.current),\n (data) => data.integration || null,\n null as UserIntegration | null\n );\n\n const { execute: connectIntegration, loading: connectLoading, error: connectError } = useApiAsync(\n (params: { provider: IntegrationProviderTS; integrationType: IntegrationTypeTS; redirectUri: string }) =>\n connectIntegrationApi(params, optionsRef.current),\n (data) => ({ authUrl: data.auth_url, state: data.state }),\n null as { authUrl: string; state: string } | null\n );\n\n const { execute: disconnectIntegration, loading: disconnectLoading, error: disconnectError } = useApiAsync(\n (params: { provider: IntegrationProviderTS; integrationType: IntegrationTypeTS }) =>\n disconnectIntegrationApi(params, optionsRef.current),\n () => true,\n false\n );\n\n const { execute: refreshIntegration, loading: refreshLoading, error: refreshError } = useApiAsync(\n (params: { provider: IntegrationProviderTS; integrationType: IntegrationTypeTS }) =>\n refreshIntegrationApi(params, optionsRef.current),\n (data) => data.integration || null,\n null as UserIntegration | null\n );\n\n const { execute: updateTriage, loading: updateTriageLoading, error: updateTriageError } = useApiAsync(\n (params: { provider: IntegrationProviderTS; integrationType: IntegrationTypeTS; triageEnabled: boolean }) =>\n updateIntegrationTriageApi(params, optionsRef.current),\n (data) => data.integration || null,\n null as UserIntegration | null\n );\n\n const { execute: runEmailTriage, loading: runTriageLoading, error: runTriageError } = useApiAsync(\n () => runEmailTriageApi(optionsRef.current),\n (data) => ({ success: data.success, emailsFound: data.emails_found, instancesCreated: data.instances_created }),\n null as { success: boolean; emailsFound: number; instancesCreated: number } | null\n );\n\n const loading = listLoading || getLoading || connectLoading || disconnectLoading || refreshLoading || updateTriageLoading || runTriageLoading;\n const error = listError || getError || connectError || disconnectError || refreshError || updateTriageError || runTriageError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listIntegrations,\n getIntegration,\n connectIntegration,\n disconnectIntegration,\n refreshIntegration,\n updateTriage,\n runEmailTriage,\n }),\n [loading, error, listIntegrations, getIntegration, connectIntegration, disconnectIntegration, refreshIntegration, updateTriage, runEmailTriage]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { Sandbox, CreateSandboxRequest } from \"../models\";\nimport {\n createSandboxApi,\n getSandboxApi,\n updateSandboxApi,\n listSandboxesApi,\n deleteSandboxApi,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSandboxOptions = ApiClientOptions;\n\n/**\n * Hook for sandbox operations (AI-generated HTML sandboxes)\n *\n * @example\n * ```tsx\n * const { createSandbox, getSandbox, listSandboxes, loading, error } = useSandbox({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const result = await createSandbox({ prompt: \"Create a bar chart showing sales data\" });\n * console.log(result.url); // sandbox URL\n * ```\n */\nexport function useSandbox(options: UseSandboxOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: createSandbox, loading: createLoading, error: createError } = useApiAsync(\n (request: Omit<CreateSandboxRequest, \"orgId\">) => createSandboxApi(request, optionsRef.current),\n (data) => ({ id: data.id, url: data.url, sandbox: data.sandbox }),\n null as { id: string; url: string; sandbox?: Sandbox } | null\n );\n\n const { execute: getSandbox, loading: getLoading, error: getError } = useApiAsync(\n (sandboxId: string) => getSandboxApi(sandboxId, optionsRef.current),\n (data) => data.sandbox || null,\n null as Sandbox | null\n );\n\n const { execute: updateSandbox, loading: updateLoading, error: updateError } = useApiAsync(\n (sandboxId: string, request: { prompt: string; title?: string }) =>\n updateSandboxApi(sandboxId, request, optionsRef.current),\n (data) => ({ id: data.id, url: data.url, sandbox: data.sandbox }),\n null as { id: string; url: string; sandbox?: Sandbox } | null\n );\n\n const { execute: listSandboxes, loading: listLoading, error: listError } = useApiAsync(\n (limit?: number) => listSandboxesApi({ ...optionsRef.current, limit }),\n (data) => ({ sandboxes: data.sandboxes, total: data.total }),\n { sandboxes: [] as Sandbox[], total: 0 }\n );\n\n const { execute: deleteSandbox, loading: deleteLoading, error: deleteError } = useApiAsync(\n (sandboxId: string) => deleteSandboxApi(sandboxId, optionsRef.current),\n (data) => data.success,\n false\n );\n\n const loading = createLoading || getLoading || updateLoading || listLoading || deleteLoading;\n const error = createError || getError || updateError || listError || deleteError;\n\n return useMemo(\n () => ({\n loading,\n error,\n createSandbox,\n getSandbox,\n updateSandbox,\n listSandboxes,\n deleteSandbox,\n }),\n [loading, error, createSandbox, getSandbox, updateSandbox, listSandboxes, deleteSandbox]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { structuredOutputApi } from \"../api\";\nimport type { StructuredOutputRequest, StructuredOutputResponse } from \"../models\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseStructuredOutputOptions = ApiClientOptions;\n\n/**\n * Hook for the one-shot structured-output LLM primitive.\n *\n * @example\n * ```tsx\n * const { run, loading, error, data } = useStructuredOutput<{ title: string }>({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * await run({\n * provider: \"anthropic\",\n * model: \"claude-sonnet-4-6\",\n * userPrompt: \"Give me a title for a slide about onboarding.\",\n * schema: { type: \"object\", properties: { title: { type: \"string\" } }, required: [\"title\"] },\n * schemaName: \"slide_title\",\n * maxTokens: 256,\n * });\n * ```\n */\nexport function useStructuredOutput<T = unknown>(options: UseStructuredOutputOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: run, loading, error, clearError } = useApiAsync(\n (request: StructuredOutputRequest) => structuredOutputApi<T>(request, optionsRef.current),\n (resp: StructuredOutputResponse<T>) => resp,\n null as StructuredOutputResponse<T> | null\n );\n\n return useMemo(\n () => ({ run, loading, error, clearError }),\n [run, loading, error, clearError]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport {\n listSchedulerTasksApi,\n createSchedulerTaskApi,\n getSchedulerTaskApi,\n updateSchedulerTaskApi,\n deleteSchedulerTaskApi,\n snoozeSchedulerTaskApi,\n completeSchedulerTaskApi,\n startSchedulerTaskApi,\n type SchedulerTask,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSchedulerTasksOptions = ApiClientOptions;\n\n/**\n * Hook for scheduler task operations\n *\n * @example\n * ```tsx\n * const { listTasks, createTask, snoozeTask, loading, error } = useSchedulerTasks({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const tasks = await listTasks();\n * await snoozeTask(taskId, { amount: 30, unit: \"minutes\" });\n * ```\n */\nexport function useSchedulerTasks(options: UseSchedulerTasksOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listTasks, loading: listLoading, error: listError } = useApiAsync(\n (params?: { status?: string; limit?: number; offset?: number }) =>\n listSchedulerTasksApi({ ...optionsRef.current, ...params }),\n (data) => data.tasks,\n [] as SchedulerTask[]\n );\n\n const { execute: createTask, loading: createLoading, error: createError } = useApiAsync(\n (task: Partial<SchedulerTask>) => createSchedulerTaskApi(task, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const { execute: getTask, loading: getLoading, error: getError } = useApiAsync(\n (taskId: string) => getSchedulerTaskApi(taskId, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const { execute: updateTask, loading: updateLoading, error: updateError } = useApiAsync(\n (taskId: string, task: Partial<SchedulerTask>) =>\n updateSchedulerTaskApi(taskId, task, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const { execute: deleteTask, loading: deleteLoading, error: deleteError } = useApiAsync(\n (taskId: string) => deleteSchedulerTaskApi(taskId, optionsRef.current),\n (data) => data.success,\n false\n );\n\n const { execute: snoozeTask, loading: snoozeLoading, error: snoozeError } = useApiAsync(\n (taskId: string, delay: { amount: number; unit: string }) =>\n snoozeSchedulerTaskApi(taskId, delay, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const { execute: completeTask, loading: completeLoading, error: completeError } = useApiAsync(\n (taskId: string) => completeSchedulerTaskApi(taskId, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const { execute: startTask, loading: startLoading, error: startError } = useApiAsync(\n (taskId: string) => startSchedulerTaskApi(taskId, optionsRef.current),\n (data) => data.task || null,\n null as SchedulerTask | null\n );\n\n const loading = listLoading || createLoading || getLoading || updateLoading || deleteLoading || snoozeLoading || completeLoading || startLoading;\n const error = listError || createError || getError || updateError || deleteError || snoozeError || completeError || startError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listTasks,\n createTask,\n getTask,\n updateTask,\n deleteTask,\n snoozeTask,\n completeTask,\n startTask,\n }),\n [loading, error, listTasks, createTask, getTask, updateTask, deleteTask, snoozeTask, completeTask, startTask]\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport {\n listSchedulesApi,\n createScheduleApi,\n getScheduleApi,\n updateScheduleApi,\n deleteScheduleApi,\n pauseScheduleApi,\n resumeScheduleApi,\n runScheduleApi,\n type SchedulerSchedule,\n} from \"../api\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\nexport type UseSchedulerSchedulesOptions = ApiClientOptions;\n\n/**\n * Hook for scheduler schedule operations (recurring jobs)\n *\n * @example\n * ```tsx\n * const { listSchedules, createSchedule, pauseSchedule, loading, error } = useSchedulerSchedules({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * });\n *\n * const schedules = await listSchedules();\n * await pauseSchedule(scheduleId);\n * ```\n */\nexport function useSchedulerSchedules(options: UseSchedulerSchedulesOptions) {\n const optionsRef = useOptionsRef(options);\n\n const { execute: listSchedules, loading: listLoading, error: listError } = useApiAsync(\n (params?: { status?: string; limit?: number; offset?: number }) =>\n listSchedulesApi({ ...optionsRef.current, ...params }),\n (data) => data.schedules,\n [] as SchedulerSchedule[]\n );\n\n const { execute: createSchedule, loading: createLoading, error: createError } = useApiAsync(\n (schedule: Partial<SchedulerSchedule>) => createScheduleApi(schedule, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const { execute: getSchedule, loading: getLoading, error: getError } = useApiAsync(\n (scheduleId: string) => getScheduleApi(scheduleId, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const { execute: updateSchedule, loading: updateLoading, error: updateError } = useApiAsync(\n (scheduleId: string, schedule: Partial<SchedulerSchedule>) =>\n updateScheduleApi(scheduleId, schedule, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const { execute: deleteSchedule, loading: deleteLoading, error: deleteError } = useApiAsync(\n (scheduleId: string) => deleteScheduleApi(scheduleId, optionsRef.current),\n (data) => data.success,\n false\n );\n\n const { execute: pauseSchedule, loading: pauseLoading, error: pauseError } = useApiAsync(\n (scheduleId: string) => pauseScheduleApi(scheduleId, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const { execute: resumeSchedule, loading: resumeLoading, error: resumeError } = useApiAsync(\n (scheduleId: string) => resumeScheduleApi(scheduleId, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const { execute: runSchedule, loading: runLoading, error: runError } = useApiAsync(\n (scheduleId: string) => runScheduleApi(scheduleId, optionsRef.current),\n (data) => data.schedule || null,\n null as SchedulerSchedule | null\n );\n\n const loading = listLoading || createLoading || getLoading || updateLoading || deleteLoading || pauseLoading || resumeLoading || runLoading;\n const error = listError || createError || getError || updateError || deleteError || pauseError || resumeError || runError;\n\n return useMemo(\n () => ({\n loading,\n error,\n listSchedules,\n createSchedule,\n getSchedule,\n updateSchedule,\n deleteSchedule,\n pauseSchedule,\n resumeSchedule,\n runSchedule,\n }),\n [loading, error, listSchedules, createSchedule, getSchedule, updateSchedule, deleteSchedule, pauseSchedule, resumeSchedule, runSchedule]\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef, useCallback, useMemo } from \"react\";\nimport type { ApiClientOptions } from \"@elqnt/api-client\";\nimport type { AgentSummary, TriggerBackgroundAgentRequest, TriggerBackgroundAgentResponse, BackgroundAgentStatusResponse, AgentStatusUpdate } from \"../models\";\nimport {\n listAgentsSummaryApi,\n triggerBackgroundAgentApi,\n checkBackgroundAgentStatusApi,\n} from \"../api\";\nimport type { ChatMessage, Attachment } from \"@elqnt/chat/models\";\nimport { createBGAgentTransport } from \"../transport/sse\";\nimport type { BGAgentTransport, BackgroundAgentProgressEvent } from \"../transport/types\";\nimport { useApiAsync } from \"@elqnt/api-client/hooks\";\nimport { useOptionsRef } from \"./use-options-ref\";\n\n/** Live state accumulated from SSE events for a single background agent */\nexport interface BGAgentLiveState {\n status: \"running\" | \"completed\" | \"failed\";\n progressLog: string[];\n latestMessage: string;\n result?: string;\n error?: string;\n}\n\n/** Options for useBackgroundAgents hook */\nexport interface UseBackgroundAgentsOptions extends ApiClientOptions {\n /** Chat service URL for SSE streaming (e.g., wss://chat.example.com or https://chat.example.com) */\n chatServiceUrl?: string;\n /** User ID (typically email) for chat operations */\n userId?: string;\n}\n\n/** Background status reported by the agent via report_status tool */\nexport type BackgroundStatus = \"processing\" | \"completed\" | \"failed\";\n\n/** Watched chat state with messages */\nexport interface WatchedChatState {\n chatKey: string;\n messages: ChatMessage[];\n status: \"loading\" | \"active\" | \"completed\" | \"error\";\n /** Background agent status (from report_status tool) */\n backgroundStatus?: BackgroundStatus;\n /** Background agent status message (from report_status tool) */\n backgroundStatusMessage?: string;\n /** History of all status updates for inline display */\n statusHistory: AgentStatusUpdate[];\n title?: string;\n metadata?: Record<string, unknown>;\n error?: string;\n}\n\n/**\n * Hook for triggering background agents, streaming progress via SSE, and checking status.\n *\n * @example\n * ```tsx\n * const { startChat, sendMessage } = useChatContext();\n * const { liveStates, createTask, streamJob, checkStatus } = useBackgroundAgents({\n * baseUrl: apiGatewayUrl,\n * orgId: selectedOrgId,\n * startChat,\n * sendMessage,\n * });\n *\n * // Create a background task (simplified flow using chat)\n * const chatKey = await createTask(\"Analyze the quarterly report\");\n *\n * // Or trigger via jobs API (PostgreSQL-backed)\n * const result = await triggerAgent({ name: \"Analysis\", prompt: \"...\", agentName: \"Research Agent\" });\n * if (result?.jobId) streamJob(result.jobId);\n * ```\n */\nexport function useBackgroundAgents(options: UseBackgroundAgentsOptions) {\n const optionsRef = useOptionsRef(options);\n const [liveStates, setLiveStates] = useState<Record<string, BGAgentLiveState>>({});\n const [watchedChats, setWatchedChats] = useState<Record<string, WatchedChatState>>({});\n const transportRef = useRef<BGAgentTransport | null>(null);\n const sseRef = useRef<EventSource | null>(null);\n const watchedChatKeyRef = useRef<string | null>(null);\n\n // Initialize transport once\n useEffect(() => {\n const transport = createBGAgentTransport();\n transport.connect({ streamBaseUrl: optionsRef.current.baseUrl });\n transportRef.current = transport;\n return () => {\n transport.disconnect();\n transportRef.current = null;\n };\n }, []);\n\n // Track which jobIds already have handlers registered\n const subscribedJobsRef = useRef<Set<string>>(new Set());\n\n // Stream a job's progress via SSE\n const streamJob = useCallback((jobId: string) => {\n const transport = transportRef.current;\n if (!transport) return;\n\n // Skip if already subscribed (prevents duplicate handlers)\n if (subscribedJobsRef.current.has(jobId)) return;\n subscribedJobsRef.current.add(jobId);\n\n // Initialize live state\n setLiveStates((prev) => ({\n ...prev,\n [jobId]: prev[jobId] || { status: \"running\", progressLog: [], latestMessage: \"Starting...\" },\n }));\n\n // Subscribe to events for this job\n transport.on(\"bg_agent.round\", (event: BackgroundAgentProgressEvent) => {\n if (event.jobId !== jobId || !event.content) return;\n setLiveStates((prev) => {\n const cur = prev[jobId] || { status: \"running\" as const, progressLog: [], latestMessage: \"\" };\n return {\n ...prev,\n [jobId]: { ...cur, status: \"running\", progressLog: [...cur.progressLog, event.content!], latestMessage: event.content! },\n };\n });\n });\n\n transport.on(\"bg_agent.completed\", (event: BackgroundAgentProgressEvent) => {\n if (event.jobId !== jobId) return;\n subscribedJobsRef.current.delete(jobId);\n setLiveStates((prev) => ({\n ...prev,\n [jobId]: { ...(prev[jobId] || { progressLog: [], latestMessage: \"\" }), status: \"completed\", result: event.result, latestMessage: event.result || \"Completed\" },\n }));\n });\n\n transport.on(\"bg_agent.failed\", (event: BackgroundAgentProgressEvent) => {\n if (event.jobId !== jobId) return;\n subscribedJobsRef.current.delete(jobId);\n setLiveStates((prev) => ({\n ...prev,\n [jobId]: { ...(prev[jobId] || { progressLog: [], latestMessage: \"\" }), status: \"failed\", error: event.error, latestMessage: event.error || \"Failed\" },\n }));\n });\n\n // Open the SSE stream\n transport.streamJob(jobId);\n }, []);\n\n // Trigger a background agent\n const { execute: triggerAgent, loading: triggerLoading, error: triggerError } = useApiAsync(\n (request: Pick<TriggerBackgroundAgentRequest, \"name\" | \"prompt\" | \"agentName\" | \"context\" | \"enableSSE\" | \"description\">) =>\n triggerBackgroundAgentApi(request, optionsRef.current),\n (data) => data as TriggerBackgroundAgentResponse,\n null as TriggerBackgroundAgentResponse | null\n );\n\n // Check status\n const { execute: checkStatus, loading: statusLoading, error: statusError } = useApiAsync(\n (jobId: string) => checkBackgroundAgentStatusApi(jobId, optionsRef.current),\n (data) => data as BackgroundAgentStatusResponse,\n null as BackgroundAgentStatusResponse | null\n );\n\n // List agent summaries (for agent picker in \"New\" dialog)\n const { execute: listAgentSummaries, loading: summaryLoading, error: summaryError } = useApiAsync(\n () => listAgentsSummaryApi(optionsRef.current),\n (data) => data.agents || [],\n [] as AgentSummary[]\n );\n\n // Create a background task using the chat system (simplified flow, no PostgreSQL)\n // Calls the chat service directly (not through API Gateway)\n const createTask = useCallback(async (prompt: string, attachments?: Attachment[]): Promise<string | null> => {\n const { chatServiceUrl, orgId, userId } = optionsRef.current;\n if (!chatServiceUrl) {\n console.error(\"chatServiceUrl is required for createTask\");\n return null;\n }\n if (!userId) {\n console.error(\"userId is required for createTask\");\n return null;\n }\n\n try {\n // Create chat with background_agent by name and background flag\n // Direct call to chat service (same pattern as regular chat)\n // Include userId and userEmail in metadata for integration tools (email, calendar, etc.)\n const createResponse = await fetch(`${chatServiceUrl}/create`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n orgId,\n userId,\n metadata: {\n agentName: \"background_agent\",\n background: true,\n userId: userId,\n userEmail: userId,\n originalPrompt: prompt,\n },\n }),\n });\n\n if (!createResponse.ok) {\n const errorText = await createResponse.text();\n console.error(\"Failed to create background chat:\", errorText);\n return null;\n }\n\n const createData = await createResponse.json();\n // Chat service wraps response in { success: true, data: { chatKey: \"...\" } }\n const chatKey = createData.data?.chatKey || createData.chatKey;\n\n if (!chatKey) {\n console.error(\"No chatKey returned from create\");\n return null;\n }\n\n // Send the user's prompt as the first message\n // Direct call to chat service\n const sendResponse = await fetch(`${chatServiceUrl}/send`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n orgId,\n userId,\n chatKey,\n message: {\n role: \"user\",\n content: prompt,\n attachments: attachments || undefined,\n },\n }),\n });\n\n if (!sendResponse.ok) {\n const errorText = await sendResponse.text();\n console.error(\"Failed to send message:\", errorText);\n // Still return chatKey since chat was created\n }\n\n return chatKey;\n } catch (err) {\n console.error(\"Failed to create background task:\", err);\n return null;\n }\n }, []);\n\n // Watch a chat for updates via SSE\n // Calls the chat service directly (not through API Gateway)\n const watchChat = useCallback(async (chatKey: string): Promise<void> => {\n const { chatServiceUrl, orgId, userId } = optionsRef.current;\n\n if (!chatServiceUrl) {\n console.error(\"chatServiceUrl is required for watchChat\");\n return;\n }\n if (!userId) {\n console.error(\"userId is required for watchChat\");\n return;\n }\n\n // Close existing SSE connection if watching a different chat\n if (sseRef.current && watchedChatKeyRef.current !== chatKey) {\n sseRef.current.close();\n sseRef.current = null;\n }\n\n watchedChatKeyRef.current = chatKey;\n\n // Set loading state\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: { chatKey, messages: [], status: \"loading\", statusHistory: [] },\n }));\n\n try {\n // Load the chat data directly from chat service (same pattern as regular chat)\n const loadResponse = await fetch(`${chatServiceUrl}/load`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ orgId, chatKey, userId }),\n });\n\n if (!loadResponse.ok) {\n const errorText = await loadResponse.text();\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: { chatKey, messages: [], status: \"error\", statusHistory: [], error: errorText || \"Failed to load chat\" },\n }));\n return;\n }\n\n const loadData = await loadResponse.json();\n // Chat service wraps response in { success: true, data: { chat: {...} } }\n const chat = loadData.data?.chat || loadData.chat;\n\n if (!chat) {\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: { chatKey, messages: [], status: \"error\", statusHistory: [], error: \"No chat data returned\" },\n }));\n return;\n }\n\n // Extract background status from chat metadata if available\n const bgStatus = chat.metadata?.backgroundStatus as BackgroundStatus | undefined;\n const bgMessage = chat.metadata?.backgroundStatusMessage as string | undefined;\n\n // Determine initial status based on background status\n let initialStatus: WatchedChatState[\"status\"] = \"active\";\n if (bgStatus === \"completed\") initialStatus = \"completed\";\n else if (bgStatus === \"failed\") initialStatus = \"error\";\n\n // Initialize status history (will be populated from SSE events)\n const initialStatusHistory: AgentStatusUpdate[] = [];\n\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: {\n chatKey,\n messages: chat.messages || [],\n status: initialStatus,\n title: chat.title,\n metadata: chat.metadata as Record<string, unknown>,\n backgroundStatus: bgStatus,\n backgroundStatusMessage: bgMessage,\n statusHistory: initialStatusHistory,\n },\n }));\n\n // Connect to SSE for real-time updates (direct to chat service)\n const sseUrl = `${chatServiceUrl}/stream?orgId=${orgId}&userId=${userId}&chatId=${chatKey}&clientType=customer`;\n const sse = new EventSource(sseUrl);\n sseRef.current = sse;\n\n // Helper to process SSE event data\n const processEventData = (data: Record<string, unknown>) => {\n console.log(\"[useBackgroundAgents] SSE event received:\", data.type, data);\n // Handle new message events\n if (data.type === \"message\" && data.message) {\n setWatchedChats((prev) => {\n const current = prev[chatKey];\n if (!current) return prev;\n // Avoid duplicate messages\n const msg = data.message as ChatMessage;\n const exists = current.messages.some((m) => m.id === msg.id);\n if (exists) return prev;\n return {\n ...prev,\n [chatKey]: {\n ...current,\n messages: [...current.messages, msg],\n },\n };\n });\n }\n // Handle background status updates from report_status tool\n const eventData = data.data as Record<string, unknown> | undefined;\n if (data.type === \"agent_context_update\" && eventData?.backgroundStatus) {\n const bgStatus = eventData.backgroundStatus as BackgroundStatus;\n const bgMessage = eventData.backgroundStatusMessage as string | undefined;\n const timestamp = Date.now();\n console.log(\"[useBackgroundAgents] Background status update:\", bgStatus, bgMessage);\n setWatchedChats((prev) => {\n const current = prev[chatKey];\n if (!current) return prev;\n // Update background status and auto-set completion status\n const newStatus: WatchedChatState[\"status\"] =\n bgStatus === \"completed\" ? \"completed\" :\n bgStatus === \"failed\" ? \"error\" :\n current.status;\n // Add to status history (avoid duplicates by checking last entry)\n const newHistory = [...current.statusHistory];\n const lastEntry = newHistory[newHistory.length - 1];\n if (!lastEntry || lastEntry.message !== bgMessage || lastEntry.status !== bgStatus) {\n newHistory.push({\n status: bgStatus,\n message: bgMessage || \"\",\n timestamp,\n });\n }\n return {\n ...prev,\n [chatKey]: {\n ...current,\n status: newStatus,\n backgroundStatus: bgStatus,\n backgroundStatusMessage: bgMessage,\n statusHistory: newHistory,\n },\n };\n });\n }\n // Handle explicit chat completion (fallback)\n if (data.type === \"chat_ended\" || data.type === \"agent_done\") {\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: { ...prev[chatKey], status: \"completed\" },\n }));\n }\n };\n\n // Default message handler (for events without custom event type)\n sse.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n processEventData(data);\n } catch (err) {\n console.error(\"Failed to parse SSE event:\", err);\n }\n };\n\n // Handler for custom event types (backend sends events with `event: agent_context_update`)\n // Note: EventSource requires separate listeners for custom event types\n const customEventTypes = [\"agent_context_update\", \"message\", \"chat_ended\", \"agent_done\"];\n for (const eventType of customEventTypes) {\n sse.addEventListener(eventType, (event) => {\n try {\n const data = JSON.parse((event as MessageEvent).data);\n processEventData(data);\n } catch (err) {\n console.error(`Failed to parse SSE ${eventType} event:`, err);\n }\n });\n }\n\n sse.onerror = () => {\n // SSE will auto-reconnect, but log the error\n console.warn(\"SSE connection error for chat:\", chatKey);\n };\n } catch (err) {\n console.error(\"Failed to watch chat:\", err);\n setWatchedChats((prev) => ({\n ...prev,\n [chatKey]: { chatKey, messages: [], status: \"error\", statusHistory: [], error: String(err) },\n }));\n }\n }, []);\n\n // Stop watching a chat\n const unwatchChat = useCallback((chatKey: string) => {\n if (watchedChatKeyRef.current === chatKey && sseRef.current) {\n sseRef.current.close();\n sseRef.current = null;\n watchedChatKeyRef.current = null;\n }\n setWatchedChats((prev) => {\n const next = { ...prev };\n delete next[chatKey];\n return next;\n });\n }, []);\n\n // Cleanup SSE on unmount\n useEffect(() => {\n return () => {\n if (sseRef.current) {\n sseRef.current.close();\n sseRef.current = null;\n }\n };\n }, []);\n\n const loading = triggerLoading || statusLoading || summaryLoading;\n const error = triggerError || statusError || summaryError;\n\n return useMemo(() => ({\n liveStates,\n streamJob,\n createTask,\n watchChat,\n unwatchChat,\n watchedChats,\n triggerAgent,\n checkStatus,\n listAgentSummaries,\n loading,\n error,\n }), [liveStates, streamJob, createTask, watchChat, unwatchChat, watchedChats, triggerAgent, checkStatus, listAgentSummaries, loading, error]);\n}\n"],"mappings":"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","names":["useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useMemo","useApiAsync","useApiAsync","useMemo","useEffect","useRef","useMemo","useApiAsync","useRef","useEffect","useApiAsync","bgStatus","bgMessage","useMemo"]}