@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.
- package/dist/api/index.d.mts +16 -1
- package/dist/api/index.d.ts +16 -1
- package/dist/api/index.js +8 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +7 -1
- package/dist/api/server.d.mts +7 -1
- package/dist/api/server.d.ts +7 -1
- package/dist/api/server.js +8 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/server.mjs +7 -0
- package/dist/api/server.mjs.map +1 -1
- package/dist/{chunk-GOHHT3ET.mjs → chunk-BT33DRUI.mjs} +20 -1
- package/dist/chunk-BT33DRUI.mjs.map +1 -0
- package/dist/{chunk-ZK27UGO6.mjs → chunk-JCPMUFOP.mjs} +1 -1
- package/dist/{chunk-BH2FIDFK.js → chunk-KA7N4YTF.js} +22 -3
- package/dist/chunk-KA7N4YTF.js.map +1 -0
- package/dist/{chunk-2QL3LLC3.mjs → chunk-MNFZXJ2Y.mjs} +72 -33
- package/dist/chunk-MNFZXJ2Y.mjs.map +1 -0
- package/dist/{chunk-AF4QJD73.js → chunk-PKLT6GDN.js} +124 -85
- package/dist/chunk-PKLT6GDN.js.map +1 -0
- package/dist/{chunk-3VM5TCJR.js → chunk-VGWUFWOE.js} +1 -1
- package/dist/{chunk-3VM5TCJR.js.map → chunk-VGWUFWOE.js.map} +1 -1
- package/dist/hooks/index.d.mts +32 -1
- package/dist/hooks/index.d.ts +32 -1
- package/dist/hooks/index.js +5 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +4 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -3
- package/dist/models/index.d.mts +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.js +2 -2
- package/dist/models/index.mjs +1 -1
- package/dist/structured-Bs0IjwLD.d.mts +35 -0
- package/dist/structured-Bs0IjwLD.d.ts +35 -0
- package/package.json +2 -2
- package/dist/chunk-2QL3LLC3.mjs.map +0 -1
- package/dist/chunk-AF4QJD73.js.map +0 -1
- package/dist/chunk-BH2FIDFK.js.map +0 -1
- package/dist/chunk-GOHHT3ET.mjs.map +0 -1
- /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-
|
|
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
|
|
138
|
-
|
|
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-
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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
|
|
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
|
|
677
|
-
import { useApiAsync as
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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
|
|
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
|
|
741
|
-
import { useApiAsync as
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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
|
|
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-
|
|
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"]}
|