@mastra/react 1.13.0-alpha.3 → 1.13.0-alpha.5
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/{accumulator-BmD8-x9I.cjs → accumulator-Bjfckb5t.cjs} +5 -9
- package/dist/{accumulator-BmD8-x9I.cjs.map → accumulator-Bjfckb5t.cjs.map} +1 -1
- package/dist/{accumulator-D9jAph99.js → accumulator-DysrPe6U.js} +5 -9
- package/dist/{accumulator-D9jAph99.js.map → accumulator-DysrPe6U.js.map} +1 -1
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{combine-by-ids-CcaZKGT9.js → combine-by-ids-C-0oe4eH.js} +2 -3
- package/dist/{combine-by-ids-CcaZKGT9.js.map → combine-by-ids-C-0oe4eH.js.map} +1 -1
- package/dist/{combine-by-ids-D_lp6Dvq.cjs → combine-by-ids-ERVPXXBi.cjs} +2 -3
- package/dist/{combine-by-ids-D_lp6Dvq.cjs.map → combine-by-ids-ERVPXXBi.cjs.map} +1 -1
- package/dist/{experiments-CJw1N3FB.cjs → experiments-Duv0RgkM.cjs} +12 -19
- package/dist/{experiments-CJw1N3FB.cjs.map → experiments-Duv0RgkM.cjs.map} +1 -1
- package/dist/{experiments-B7vRMK5T.js → experiments-DyecjEut.js} +12 -19
- package/dist/{experiments-B7vRMK5T.js.map → experiments-DyecjEut.js.map} +1 -1
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs → feedback-refetch-interval-BBcT9r8s.cjs} +3 -4
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs.map → feedback-refetch-interval-BBcT9r8s.cjs.map} +1 -1
- package/dist/{feedback-refetch-interval-DLHzQoVV.js → feedback-refetch-interval-C12Nzb2r.js} +3 -4
- package/dist/{feedback-refetch-interval-DLHzQoVV.js.map → feedback-refetch-interval-C12Nzb2r.js.map} +1 -1
- package/dist/hooks/agents/index.cjs +19 -37
- package/dist/hooks/agents/index.cjs.map +1 -1
- package/dist/hooks/agents/index.js +19 -37
- package/dist/hooks/agents/index.js.map +1 -1
- package/dist/hooks/auth/index.cjs +11 -21
- package/dist/hooks/auth/index.cjs.map +1 -1
- package/dist/hooks/auth/index.js +11 -21
- package/dist/hooks/auth/index.js.map +1 -1
- package/dist/hooks/capabilities/index.cjs +11 -21
- package/dist/hooks/capabilities/index.cjs.map +1 -1
- package/dist/hooks/capabilities/index.js +11 -21
- package/dist/hooks/capabilities/index.js.map +1 -1
- package/dist/hooks/configuration/index.cjs +2 -3
- package/dist/hooks/configuration/index.js +2 -3
- package/dist/hooks/datasets/index.cjs +12 -21
- package/dist/hooks/datasets/index.cjs.map +1 -1
- package/dist/hooks/datasets/index.js +12 -21
- package/dist/hooks/datasets/index.js.map +1 -1
- package/dist/hooks/embedders/index.cjs +2 -3
- package/dist/hooks/embedders/index.js +2 -3
- package/dist/hooks/experiments/index.cjs +1 -1
- package/dist/hooks/experiments/index.js +1 -1
- package/dist/hooks/feedback/index.cjs +3 -4
- package/dist/hooks/feedback/index.js +3 -4
- package/dist/hooks/llm/index.cjs +2 -3
- package/dist/hooks/llm/index.js +2 -3
- package/dist/hooks/logs/index.cjs +4 -5
- package/dist/hooks/logs/index.js +4 -5
- package/dist/hooks/mcps/index.cjs +8 -15
- package/dist/hooks/mcps/index.cjs.map +1 -1
- package/dist/hooks/mcps/index.js +8 -15
- package/dist/hooks/mcps/index.js.map +1 -1
- package/dist/hooks/memory/index.cjs +5 -9
- package/dist/hooks/memory/index.cjs.map +1 -1
- package/dist/hooks/memory/index.js +5 -9
- package/dist/hooks/memory/index.js.map +1 -1
- package/dist/hooks/metrics/index.cjs +19 -36
- package/dist/hooks/metrics/index.cjs.map +1 -1
- package/dist/hooks/metrics/index.js +19 -36
- package/dist/hooks/metrics/index.js.map +1 -1
- package/dist/hooks/processors/index.cjs +2 -3
- package/dist/hooks/processors/index.js +2 -3
- package/dist/hooks/prompt-blocks/index.cjs +3 -5
- package/dist/hooks/prompt-blocks/index.cjs.map +1 -1
- package/dist/hooks/prompt-blocks/index.js +3 -5
- package/dist/hooks/prompt-blocks/index.js.map +1 -1
- package/dist/hooks/query/index.cjs +2 -3
- package/dist/hooks/query/index.js +2 -3
- package/dist/hooks/review/index.cjs +4 -6
- package/dist/hooks/review/index.cjs.map +1 -1
- package/dist/hooks/review/index.js +4 -6
- package/dist/hooks/review/index.js.map +1 -1
- package/dist/hooks/schedules/index.cjs +6 -10
- package/dist/hooks/schedules/index.cjs.map +1 -1
- package/dist/hooks/schedules/index.js +6 -10
- package/dist/hooks/schedules/index.js.map +1 -1
- package/dist/hooks/scores/index.cjs +8 -13
- package/dist/hooks/scores/index.cjs.map +1 -1
- package/dist/hooks/scores/index.js +8 -13
- package/dist/hooks/scores/index.js.map +1 -1
- package/dist/hooks/templates/index.cjs +2 -3
- package/dist/hooks/templates/index.js +2 -3
- package/dist/hooks/tool-providers/index.cjs +10 -19
- package/dist/hooks/tool-providers/index.cjs.map +1 -1
- package/dist/hooks/tool-providers/index.js +10 -19
- package/dist/hooks/tool-providers/index.js.map +1 -1
- package/dist/hooks/tools/index.cjs +3 -5
- package/dist/hooks/tools/index.cjs.map +1 -1
- package/dist/hooks/tools/index.js +3 -5
- package/dist/hooks/tools/index.js.map +1 -1
- package/dist/hooks/traces/index.cjs +71 -54
- package/dist/hooks/traces/index.cjs.map +1 -1
- package/dist/hooks/traces/index.d.ts +2 -0
- package/dist/hooks/traces/index.d.ts.map +1 -1
- package/dist/hooks/traces/index.js +70 -55
- package/dist/hooks/traces/index.js.map +1 -1
- package/dist/hooks/traces/use-span-aggregate.d.ts +16 -0
- package/dist/hooks/traces/use-span-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts +17 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts +4 -2
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts.map +1 -1
- package/dist/hooks/vectors/index.cjs +2 -3
- package/dist/hooks/vectors/index.js +2 -3
- package/dist/hooks/voice/index.cjs +3 -4
- package/dist/hooks/voice/index.js +3 -4
- package/dist/hooks/workflows/index.cjs +7 -11
- package/dist/hooks/workflows/index.cjs.map +1 -1
- package/dist/hooks/workflows/index.js +7 -11
- package/dist/hooks/workflows/index.js.map +1 -1
- package/dist/hooks/workspace/index.cjs +12 -22
- package/dist/hooks/workspace/index.cjs.map +1 -1
- package/dist/hooks/workspace/index.js +12 -22
- package/dist/hooks/workspace/index.js.map +1 -1
- package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
- package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
- package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
- package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
- package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
- package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
- package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
- package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
- package/dist/index.cjs +7 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
- package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
- package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
- package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
- package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
- package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
- package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
- package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
- package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
- package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
- package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
- package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
- package/dist/ui/index.cjs +15 -30
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.js +14 -28
- package/dist/ui/index.js.map +1 -1
- package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
- package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
- package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
- package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
- package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
- package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
- package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
- package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
- package/package.json +19 -19
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as useMastraClient } from "../../mastra-client-context-
|
|
1
|
+
import { n as useMastraClient } from "../../mastra-client-context-DQ5z_ze9.js";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { skipToken, useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
4
4
|
import { RequestContext } from "@mastra/core/di";
|
|
5
|
-
|
|
5
|
+
// src/hooks/agents/use-agent-messages.ts
|
|
6
6
|
const PER_PAGE = 40;
|
|
7
7
|
const NEWEST_PAGE = "";
|
|
8
8
|
const createdAtMs = (message) => new Date(message.createdAt).getTime();
|
|
@@ -53,8 +53,7 @@ const useAgentMessages = ({ threadId, agentId, memory, requestContext, queryOpti
|
|
|
53
53
|
...queryOptions
|
|
54
54
|
});
|
|
55
55
|
};
|
|
56
|
-
|
|
57
|
-
//#region src/hooks/agents/use-agent-plan.ts
|
|
56
|
+
// src/hooks/agents/use-agent-plan.ts
|
|
58
57
|
function useAgentPlan({ agentId, path, agentVersionId, requestContext, queryOptions }) {
|
|
59
58
|
const client = useMastraClient();
|
|
60
59
|
return useQuery({
|
|
@@ -72,8 +71,7 @@ function useAgentPlan({ agentId, path, agentVersionId, requestContext, queryOpti
|
|
|
72
71
|
...queryOptions
|
|
73
72
|
});
|
|
74
73
|
}
|
|
75
|
-
|
|
76
|
-
//#region src/hooks/agents/use-background-tasks.ts
|
|
74
|
+
// src/hooks/agents/use-background-tasks.ts
|
|
77
75
|
const EVENT_STATUS_MAP = {
|
|
78
76
|
"background-task-running": "running",
|
|
79
77
|
"background-task-output": "running",
|
|
@@ -206,8 +204,7 @@ const useGetBackgroundTaskById = ({ backgroundTaskId, queryOptions }) => {
|
|
|
206
204
|
...queryOptions
|
|
207
205
|
});
|
|
208
206
|
};
|
|
209
|
-
|
|
210
|
-
//#region src/hooks/agents/use-browser-session-probe.ts
|
|
207
|
+
// src/hooks/agents/use-browser-session-probe.ts
|
|
211
208
|
const browserSessionProbeQueryKey = (agentId, threadId) => [
|
|
212
209
|
"browser-session-probe",
|
|
213
210
|
agentId,
|
|
@@ -263,8 +260,7 @@ function useBrowserSessionProbe({ agentId, threadId, queryOptions }) {
|
|
|
263
260
|
...queryOptions
|
|
264
261
|
});
|
|
265
262
|
}
|
|
266
|
-
|
|
267
|
-
//#region src/hooks/agents/is-model-not-allowed.ts
|
|
263
|
+
// src/hooks/agents/is-model-not-allowed.ts
|
|
268
264
|
/**
|
|
269
265
|
* The wire-level error code the server emits on a 422 when a model is blocked
|
|
270
266
|
* by the admin's builder policy. Kept as a local literal so the browser bundle
|
|
@@ -289,8 +285,7 @@ function isModelNotAllowedError(err) {
|
|
|
289
285
|
offendingLabel: errorBody.offendingLabel
|
|
290
286
|
};
|
|
291
287
|
}
|
|
292
|
-
|
|
293
|
-
//#region src/hooks/agents/use-stored-agents.ts
|
|
288
|
+
// src/hooks/agents/use-stored-agents.ts
|
|
294
289
|
const useStoredAgents = ({ queryOptions, ...params } = {}) => {
|
|
295
290
|
const client = useMastraClient();
|
|
296
291
|
const listParams = Object.keys(params).length > 0 ? params : void 0;
|
|
@@ -403,8 +398,7 @@ const useStoredAgentMutations = ({ agentId, requestContext, queryOptions } = {})
|
|
|
403
398
|
})
|
|
404
399
|
};
|
|
405
400
|
};
|
|
406
|
-
|
|
407
|
-
//#region src/hooks/agents/use-agent-skills.ts
|
|
401
|
+
// src/hooks/agents/use-agent-skills.ts
|
|
408
402
|
/**
|
|
409
403
|
* Hook to read and mutate the skills config for a stored agent.
|
|
410
404
|
*
|
|
@@ -447,8 +441,7 @@ function useAgentSkills({ agentId, requestContext, queryOptions } = {}) {
|
|
|
447
441
|
})
|
|
448
442
|
};
|
|
449
443
|
}
|
|
450
|
-
|
|
451
|
-
//#region src/hooks/agents/use-agent-versions.ts
|
|
444
|
+
// src/hooks/agents/use-agent-versions.ts
|
|
452
445
|
/**
|
|
453
446
|
* Hook to list versions of a stored agent
|
|
454
447
|
*
|
|
@@ -563,8 +556,7 @@ const useCompareAgentVersions = ({ agentId, fromVersionId, toVersionId, requestC
|
|
|
563
556
|
...queryOptions
|
|
564
557
|
});
|
|
565
558
|
};
|
|
566
|
-
|
|
567
|
-
//#region src/hooks/agents/use-agent-working-memory.ts
|
|
559
|
+
// src/hooks/agents/use-agent-working-memory.ts
|
|
568
560
|
function parseJsonString(jsonString) {
|
|
569
561
|
try {
|
|
570
562
|
return JSON.stringify(JSON.parse(jsonString), null, 2);
|
|
@@ -660,8 +652,7 @@ function useAgentWorkingMemory(agentId, threadId, resourceId, requestContext) {
|
|
|
660
652
|
updateWorkingMemory
|
|
661
653
|
};
|
|
662
654
|
}
|
|
663
|
-
|
|
664
|
-
//#region src/hooks/agents/use-agent-workspace.ts
|
|
655
|
+
// src/hooks/agents/use-agent-workspace.ts
|
|
665
656
|
/**
|
|
666
657
|
* Hook to read and mutate the workspace reference for a stored agent.
|
|
667
658
|
*
|
|
@@ -701,8 +692,7 @@ function useAgentWorkspace({ agentId, requestContext, queryOptions } = {}) {
|
|
|
701
692
|
})
|
|
702
693
|
};
|
|
703
694
|
}
|
|
704
|
-
|
|
705
|
-
//#region src/hooks/agents/use-agent.ts
|
|
695
|
+
// src/hooks/agents/use-agent.ts
|
|
706
696
|
/**
|
|
707
697
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
708
698
|
*/
|
|
@@ -719,8 +709,7 @@ const useAgent = ({ agentId, requestContext, queryOptions } = {}) => {
|
|
|
719
709
|
...queryOptions
|
|
720
710
|
});
|
|
721
711
|
};
|
|
722
|
-
|
|
723
|
-
//#region src/hooks/agents/use-agents-model-providers.ts
|
|
712
|
+
// src/hooks/agents/use-agents-model-providers.ts
|
|
724
713
|
const useAgentsModelProviders = ({ queryOptions } = {}) => {
|
|
725
714
|
const client = useMastraClient();
|
|
726
715
|
return useQuery({
|
|
@@ -730,8 +719,7 @@ const useAgentsModelProviders = ({ queryOptions } = {}) => {
|
|
|
730
719
|
...queryOptions
|
|
731
720
|
});
|
|
732
721
|
};
|
|
733
|
-
|
|
734
|
-
//#region src/hooks/agents/use-agents.ts
|
|
722
|
+
// src/hooks/agents/use-agents.ts
|
|
735
723
|
const useAgents = ({ requestContext, queryOptions } = {}) => {
|
|
736
724
|
const client = useMastraClient();
|
|
737
725
|
return useQuery({
|
|
@@ -796,8 +784,7 @@ const useResetAgentModel = ({ agentId, queryOptions }) => {
|
|
|
796
784
|
...queryOptions
|
|
797
785
|
});
|
|
798
786
|
};
|
|
799
|
-
|
|
800
|
-
//#region src/hooks/agents/use-close-browser.ts
|
|
787
|
+
// src/hooks/agents/use-close-browser.ts
|
|
801
788
|
/**
|
|
802
789
|
* Mutation hook for closing an agent's browser session.
|
|
803
790
|
*/
|
|
@@ -811,8 +798,7 @@ function useCloseBrowser({ queryOptions } = {}) {
|
|
|
811
798
|
...queryOptions
|
|
812
799
|
});
|
|
813
800
|
}
|
|
814
|
-
|
|
815
|
-
//#region src/hooks/agents/use-preview-instructions.ts
|
|
801
|
+
// src/hooks/agents/use-preview-instructions.ts
|
|
816
802
|
/**
|
|
817
803
|
* Normalize blocks to API format.
|
|
818
804
|
* Form-format ref blocks have `{ type: 'prompt_block_ref', promptBlockId }`,
|
|
@@ -856,8 +842,7 @@ function usePreviewInstructions({ blocks, requestContext, queryOptions }) {
|
|
|
856
842
|
...queryOptions
|
|
857
843
|
});
|
|
858
844
|
}
|
|
859
|
-
|
|
860
|
-
//#region src/hooks/agents/use-stored-skills.ts
|
|
845
|
+
// src/hooks/agents/use-stored-skills.ts
|
|
861
846
|
function useStoredSkills({ queryOptions } = {}) {
|
|
862
847
|
const client = useMastraClient();
|
|
863
848
|
return useQuery({
|
|
@@ -866,8 +851,7 @@ function useStoredSkills({ queryOptions } = {}) {
|
|
|
866
851
|
...queryOptions
|
|
867
852
|
});
|
|
868
853
|
}
|
|
869
|
-
|
|
870
|
-
//#region src/hooks/agents/use-channels.ts
|
|
854
|
+
// src/hooks/agents/use-channels.ts
|
|
871
855
|
const useChannelPlatforms = ({ queryOptions } = {}) => {
|
|
872
856
|
const client = useMastraClient();
|
|
873
857
|
return useQuery({
|
|
@@ -951,8 +935,7 @@ const useDisconnectChannel = ({ platform, queryOptions }) => {
|
|
|
951
935
|
...queryOptions
|
|
952
936
|
});
|
|
953
937
|
};
|
|
954
|
-
|
|
955
|
-
//#region src/hooks/agents/use-execute-agent-tool.ts
|
|
938
|
+
// src/hooks/agents/use-execute-agent-tool.ts
|
|
956
939
|
const useExecuteAgentTool = ({ queryOptions } = {}) => {
|
|
957
940
|
const client = useMastraClient();
|
|
958
941
|
return useMutation({
|
|
@@ -969,7 +952,6 @@ const useExecuteAgentTool = ({ queryOptions } = {}) => {
|
|
|
969
952
|
...queryOptions
|
|
970
953
|
});
|
|
971
954
|
};
|
|
972
|
-
//#endregion
|
|
973
955
|
export { browserSessionProbeQueryKey, isModelNotAllowedError, useActivateAgentVersion, useAgent, useAgentMessages, useAgentPlan, useAgentSkills, useAgentVersion, useAgentVersions, useAgentWorkingMemory, useAgentWorkspace, useAgents, useAgentsModelProviders, useBackgroundTaskStream, useBrowserSessionProbe, useChannelInstallations, useChannelPlatforms, useCloseBrowser, useCompareAgentVersions, useConnectChannel, useCreateAgentVersion, useDeleteAgentVersion, useDisconnectChannel, useExecuteAgentTool, useGetBackgroundTaskById, usePreviewInstructions, useReconcileChannelInstallation, useReorderModelList, useResetAgentModel, useRestoreAgentVersion, useStoredAgent, useStoredAgentDependents, useStoredAgentMutations, useStoredAgents, useStoredSkills, useUpdateAgentModel, useUpdateModelInModelList };
|
|
974
956
|
|
|
975
957
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/agents/use-agent-messages.ts","../../../src/hooks/agents/use-agent-plan.ts","../../../src/hooks/agents/use-background-tasks.ts","../../../src/hooks/agents/use-browser-session-probe.ts","../../../src/hooks/agents/is-model-not-allowed.ts","../../../src/hooks/agents/use-stored-agents.ts","../../../src/hooks/agents/use-agent-skills.ts","../../../src/hooks/agents/use-agent-versions.ts","../../../src/hooks/agents/use-agent-working-memory.ts","../../../src/hooks/agents/use-agent-workspace.ts","../../../src/hooks/agents/use-agent.ts","../../../src/hooks/agents/use-agents-model-providers.ts","../../../src/hooks/agents/use-agents.ts","../../../src/hooks/agents/use-close-browser.ts","../../../src/hooks/agents/use-preview-instructions.ts","../../../src/hooks/agents/use-stored-skills.ts","../../../src/hooks/agents/use-channels.ts","../../../src/hooks/agents/use-execute-agent-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport { skipToken, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\ntype AgentMessagesPage = Awaited<ReturnType<MastraClient['listThreadMessages']>>;\n\ntype AgentMessagesData = InfiniteData<AgentMessagesPage, string> & { messages: MastraDBMessage[] };\n\nexport interface UseAgentMessagesProps<TData = AgentMessagesData> {\n threadId?: string;\n agentId: string;\n memory: boolean;\n requestContext?: Record<string, any>;\n queryOptions?: MastraInfiniteQueryOptions<AgentMessagesPage, TData, QueryKey, string>;\n}\n\nconst PER_PAGE = 40;\n\nconst NEWEST_PAGE = '';\n\nconst createdAtMs = (message: MastraDBMessage) => new Date(message.createdAt).getTime();\n\nconst byCreatedAt = (a: MastraDBMessage, b: MastraDBMessage) => createdAtMs(a) - createdAtMs(b);\n\nexport const useAgentMessages = <TData = AgentMessagesData>({\n threadId,\n agentId,\n memory,\n requestContext,\n queryOptions,\n}: UseAgentMessagesProps<TData>) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['memory', 'messages', threadId, agentId, requestContext],\n initialPageParam: NEWEST_PAGE,\n queryFn:\n memory && threadId\n ? ({ pageParam: olderThan }) =>\n client.listThreadMessages(threadId, {\n agentId,\n requestContext,\n includeSystemReminders: true,\n perPage: PER_PAGE,\n orderBy: { field: 'createdAt', direction: 'DESC' },\n // Inclusive bound: messages sharing the oldest createdAt of the previous page\n // may have been cut off by perPage, so re-ask for them and dedupe by id below.\n filter: olderThan ? { dateRange: { end: new Date(olderThan) } } : undefined,\n })\n : skipToken,\n getNextPageParam: (lastPage, _allPages, lastPageParam) => {\n if (!lastPage.hasMore || lastPage.messages.length === 0) return undefined;\n const next = new Date(Math.min(...lastPage.messages.map(createdAtMs))).toISOString();\n // A full page of same-timestamp messages would re-request itself forever.\n return next === lastPageParam ? undefined : next;\n },\n select: (data): TData => {\n const seen = new Set<string>();\n const messages = data.pages\n .flatMap(page => page.messages)\n .filter(message => {\n if (seen.has(message.id)) return false;\n seen.add(message.id);\n return true;\n })\n .sort(byCreatedAt);\n return { ...data, messages } as AgentMessagesData as TData;\n },\n staleTime: 0,\n gcTime: 0,\n retry: false,\n refetchOnWindowFocus: false,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype AgentPlanResponse = Awaited<ReturnType<ReturnType<MastraClient['getAgent']>['readPlan']>>;\n\ninterface UseAgentPlanOptions<TData> {\n agentId: string;\n path: string;\n agentVersionId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<AgentPlanResponse, TData>;\n}\n\nexport function useAgentPlan<TData = AgentPlanResponse>({\n agentId,\n path,\n agentVersionId,\n requestContext,\n queryOptions,\n}: UseAgentPlanOptions<TData>): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agent-plan', agentId, agentVersionId, path, requestContext],\n queryFn: () => {\n const agent = agentVersionId ? client.getAgent(agentId, { versionId: agentVersionId }) : client.getAgent(agentId);\n return agent.readPlan(path, requestContext);\n },\n retry: false,\n ...queryOptions,\n });\n}\n","import type { MastraClient, StreamBackgroundTasksParams } from '@mastra/client-js';\nimport type { BackgroundTaskStatus } from '@mastra/core/background-tasks';\nimport type { AgentChunkType } from '@mastra/core/stream';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype BackgroundTaskStreamReader = ReturnType<Awaited<ReturnType<MastraClient['streamBackgroundTasks']>>['getReader']>;\n\nexport interface BackgroundTaskEvent {\n taskId: string;\n toolName: string;\n toolCallId: string;\n agentId: string;\n runId: string;\n result?: unknown;\n error?: { message: string; stack?: string };\n status: BackgroundTaskStatus;\n args: Record<string, unknown>;\n suspendPayload?: unknown;\n}\n\nexport interface UseBackgroundTaskStreamOptions extends StreamBackgroundTasksParams {\n /** Whether the stream is active. Default: true */\n enabled?: boolean;\n}\n\nexport interface UseBackgroundTaskStreamReturn {\n /** Map of taskId → latest event data */\n tasks: Record<string, BackgroundTaskEvent>;\n /** Whether the stream is currently connected */\n isConnected: boolean;\n /** Any connection error */\n error: Error | null;\n /** Manually disconnect the stream */\n disconnect: () => void;\n /** Manually reconnect the stream */\n reconnect: () => void;\n /** List of running tasks */\n runningTasks: BackgroundTaskEvent[];\n /** List of completed tasks */\n completedTasks: BackgroundTaskEvent[];\n /** List of failed tasks */\n failedTasks: BackgroundTaskEvent[];\n /** Clear completed and failed tasks */\n clearCompletedAndFailedTasks: () => void;\n}\n\n/**\n * Streams background task events via SSE and accumulates them in a map keyed by taskId.\n *\n * Each incoming event (task.completed / task.failed) is stored in state so the UI\n * can react to completions — e.g., show a toast, update a badge, or display results.\n *\n * @example\n * ```tsx\n * const { tasks, isConnected, completedTasks } = useBackgroundTaskStream({ agentId: 'crypto-agent' });\n *\n * // Show a badge with completed count\n * const completedCount = completedTasks.length;\n * ```\n */\n\ntype EventType = Extract<\n AgentChunkType,\n {\n type:\n | 'background-task-running'\n | 'background-task-completed'\n | 'background-task-failed'\n | 'background-task-cancelled'\n | 'background-task-output'\n | 'background-task-suspended'\n | 'background-task-resumed';\n }\n>;\n\nconst EVENT_STATUS_MAP: Record<EventType['type'], BackgroundTaskStatus> = {\n 'background-task-running': 'running',\n 'background-task-output': 'running',\n 'background-task-completed': 'completed',\n 'background-task-failed': 'failed',\n 'background-task-cancelled': 'cancelled',\n 'background-task-suspended': 'suspended',\n 'background-task-resumed': 'running',\n};\n\nexport function useBackgroundTaskStream(options: UseBackgroundTaskStreamOptions = {}): UseBackgroundTaskStreamReturn {\n const { enabled = true, agentId, runId, threadId, resourceId, taskId } = options;\n const client = useMastraClient();\n\n const [tasks, setTasks] = useState<Record<string, BackgroundTaskEvent>>({});\n const [isConnected, setIsConnected] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n const readerRef = useRef<BackgroundTaskStreamReader | null>(null);\n const connectSeqRef = useRef(0);\n\n const runningTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'running');\n }, [tasks]);\n\n const completedTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'completed');\n }, [tasks]);\n\n const failedTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'failed');\n }, [tasks]);\n\n const cleanup = useCallback(() => {\n readerRef.current?.cancel().catch(() => {});\n readerRef.current = null;\n abortRef.current?.abort();\n abortRef.current = null;\n setIsConnected(false);\n }, []);\n\n const connect = useCallback(async () => {\n const seq = ++connectSeqRef.current;\n cleanup();\n setError(null);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const stream = await client.streamBackgroundTasks({ agentId, runId, threadId, resourceId, taskId });\n\n if (!stream) {\n setError(new Error('Stream connection failed'));\n return;\n }\n\n if (seq === connectSeqRef.current) {\n setIsConnected(true);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n readerRef.current = reader;\n\n while (!controller.signal.aborted) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const event = value as EventType;\n if (event.type !== 'background-task-output') {\n setTasks(prev => ({\n ...prev,\n [event.payload.taskId]: {\n ...prev[event.payload.taskId],\n ...event.payload,\n status: EVENT_STATUS_MAP[event.type],\n args:\n ('args' in event.payload ? event.payload.args : undefined) ?? prev[event.payload.taskId]?.args ?? {},\n },\n }));\n }\n }\n } catch (err: any) {\n if (err?.name !== 'AbortError') {\n if (seq === connectSeqRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n }\n } finally {\n if (seq === connectSeqRef.current) {\n setIsConnected(false);\n }\n }\n }, [client, agentId, runId, threadId, resourceId, taskId, cleanup]);\n\n useEffect(() => {\n if (!enabled) {\n cleanup();\n return;\n }\n\n void connect();\n return cleanup;\n }, [enabled, connect, cleanup]);\n\n const disconnect = useCallback(() => {\n cleanup();\n }, [cleanup]);\n\n const reconnect = useCallback(() => {\n void connect();\n }, [connect]);\n\n const clearCompletedAndFailedTasks = () => {\n setTasks(prev => {\n const newTasks = { ...prev };\n Object.values(newTasks).forEach(task => {\n if (\n task.status === 'completed' ||\n task.status === 'failed' ||\n task.status === 'cancelled' ||\n task.status === 'timed_out'\n ) {\n delete newTasks[task.taskId];\n }\n });\n return newTasks;\n });\n };\n\n return {\n tasks,\n isConnected,\n error,\n disconnect,\n reconnect,\n runningTasks,\n completedTasks,\n failedTasks,\n clearCompletedAndFailedTasks,\n };\n}\n\ntype BackgroundTaskResponse = Awaited<ReturnType<MastraClient['getBackgroundTask']>>;\n\nexport const useGetBackgroundTaskById = <TData = BackgroundTaskResponse>({\n backgroundTaskId,\n queryOptions,\n}: {\n backgroundTaskId: string;\n queryOptions?: MastraQueryOptions<BackgroundTaskResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['background-task', backgroundTaskId],\n queryFn: () => client.getBackgroundTask(backgroundTaskId),\n ...queryOptions,\n });\n};\n","import type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport interface BrowserSessionProbe {\n hasSession: boolean;\n screencastAvailable: boolean;\n}\n\ninterface UseBrowserSessionProbeOptions<TData> {\n agentId?: string;\n threadId?: string;\n /** TanStack overrides spread last, e.g. `{ enabled: false }` for agents without browser tools. */\n queryOptions?: MastraQueryOptions<BrowserSessionProbe, TData>;\n}\n\nexport const browserSessionProbeQueryKey = (agentId?: string, threadId?: string) =>\n ['browser-session-probe', agentId, threadId] as const;\n\nconst LEGACY_FALLBACK: BrowserSessionProbe = { hasSession: true, screencastAvailable: true };\n\nconst isNotFoundError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n if ('status' in error && (error as { status: unknown }).status === 404) return true;\n if ('statusCode' in error && (error as { statusCode: unknown }).statusCode === 404) return true;\n return false;\n};\n\n/**\n * Query hook that probes the server for the agent's browser session state.\n *\n * Used by {@link BrowserSessionProvider} to decide whether to open a screencast\n * WebSocket. The probe avoids two failure modes:\n *\n * 1. `screencastAvailable: false` — the server doesn't have `ws` / `@hono/node-ws`\n * installed (or the route was never registered). Opening a WS would fail and\n * trigger a reconnect loop.\n * 2. `hasSession: false` — no active browser session for this thread yet. Opening\n * a WS would succeed but sit idle, holding resources for no reason.\n *\n * When the endpoint itself returns 404 (older server that predates this probe),\n * the hook assumes screencast is available and a session is active so behavior\n * matches the legacy unconditional connect.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useBrowserSessionProbe<TData = BrowserSessionProbe>({\n agentId,\n threadId,\n queryOptions,\n}: UseBrowserSessionProbeOptions<TData>): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery<BrowserSessionProbe, Error, TData>({\n queryKey: browserSessionProbeQueryKey(agentId, threadId),\n queryFn: async () => {\n if (!agentId) {\n return { hasSession: false, screencastAvailable: false };\n }\n\n try {\n return await client.getAgent(agentId).browserSession(threadId);\n } catch (error) {\n if (isNotFoundError(error)) {\n // Older server without the probe endpoint — fall back to legacy behavior.\n return LEGACY_FALLBACK;\n }\n throw error;\n }\n },\n // No polling: the probe fires once on mount, on window focus, and is\n // updated via `setQueriesData` from `tool-fallback.tsx` when a browser\n // tool call transitions. This avoids idle 5s polls and lets the probe\n // flip to `hasSession: true` the instant a tool call is seen.\n refetchOnWindowFocus: true,\n staleTime: 0,\n retry: 1,\n ...queryOptions,\n });\n}\n","/**\n * The wire-level error code the server emits on a 422 when a model is blocked\n * by the admin's builder policy. Kept as a local literal so the browser bundle\n * never imports server-only agent-builder EE code.\n */\nconst MODEL_NOT_ALLOWED_CODE = 'MODEL_NOT_ALLOWED';\n\nexport interface ModelNotAllowedDetails {\n message: string;\n attempted?: { provider?: string; modelId?: string };\n offendingLabel?: string;\n}\n\n/**\n * Detects HTTP 422 + MODEL_NOT_ALLOWED responses thrown by `MastraClientError`\n * (or any error carrying `status` + `body.error.code`). Returns the parsed\n * details when matched, or `null` otherwise.\n */\nexport function isModelNotAllowedError(err: unknown): ModelNotAllowedDetails | null {\n if (!err || typeof err !== 'object') return null;\n const candidate = err as { status?: number; body?: unknown; message?: string };\n if (candidate.status !== 422) return null;\n const body = candidate.body as { error?: { code?: unknown } } | undefined;\n const code = body?.error?.code;\n if (code !== MODEL_NOT_ALLOWED_CODE) return null;\n const errorBody = body!.error as {\n message?: string;\n attempted?: { provider?: string; modelId?: string };\n offendingLabel?: string;\n };\n return {\n message: errorBody.message || candidate.message || 'Model not allowed by admin policy',\n attempted: errorBody.attempted,\n offendingLabel: errorBody.offendingLabel,\n };\n}\n","import type {\n CreateStoredAgentParams,\n UpdateStoredAgentParams,\n ListStoredAgentsParams,\n StoredAgentResponse,\n ListStoredAgentsResponse,\n StoredAgentDependentsResponse,\n DeleteStoredAgentResponse,\n} from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\nimport { isModelNotAllowedError } from './is-model-not-allowed';\n\nexport const useStoredAgents = <TData = ListStoredAgentsResponse>({\n queryOptions,\n ...params\n}: ListStoredAgentsParams & {\n queryOptions?: MastraQueryOptions<ListStoredAgentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const listParams = Object.keys(params).length > 0 ? params : undefined;\n\n return useQuery({\n queryKey: ['stored-agents', listParams],\n queryFn: () => client.listStoredAgents(listParams),\n ...queryOptions,\n });\n};\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useStoredAgent = <TData = StoredAgentResponse | null>({\n agentId,\n status,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n status?: 'draft' | 'published';\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<StoredAgentResponse | null, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-agent', agentId, status, requestContext],\n queryFn: async () => {\n if (!agentId) return null;\n try {\n return await client.getStoredAgent(agentId).details(requestContext, { status });\n } catch (error) {\n // 404 is expected for code-only agents that haven't been stored yet\n if (error && typeof error === 'object' && 'status' in error && (error as { status: number }).status === 404) {\n return null;\n }\n throw error;\n }\n },\n retry: false,\n ...queryOptions,\n });\n};\n\nexport type StoredAgent = StoredAgentResponse;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useStoredAgentDependents = <TData = StoredAgentDependentsResponse>({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<StoredAgentDependentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-agent-dependents', agentId, requestContext],\n queryFn: () => client.getStoredAgent(agentId!).dependents(requestContext),\n retry: false,\n ...queryOptions,\n });\n};\n\nexport const useStoredAgentMutations = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n createStoredAgent?: MastraMutationOptions<StoredAgentResponse, CreateStoredAgentParams>;\n updateStoredAgent?: MastraMutationOptions<StoredAgentResponse, UpdateStoredAgentParams>;\n deleteStoredAgent?: MastraMutationOptions<DeleteStoredAgentResponse, void>;\n };\n} = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n // If the server rejects with HTTP 422 + MODEL_NOT_ALLOWED the admin policy\n // has likely changed under us — refresh the cached settings so the UI\n // re-renders against the latest server truth.\n const invalidateBuilderSettingsOnPolicyReject = (err: unknown) => {\n if (isModelNotAllowedError(err)) {\n void queryClient.invalidateQueries({ queryKey: ['builder-settings'] });\n }\n };\n\n const createMutation = useMutation({\n mutationFn: (params: CreateStoredAgentParams) => client.createStoredAgent(params),\n onSuccess: created => {\n // Prime the per-agent details cache with the response so the next page\n // (the edit page) can render the agent on first paint without a refetch.\n // The starter relies on this to immediately mount the conversation panel\n // and dispatch the user's initial message.\n queryClient.setQueryData(['stored-agent', created.id, 'draft', requestContext], created);\n queryClient.setQueryData(['stored-agent', created.id, undefined, requestContext], created);\n // Invalidate both stored-agents list and the merged agents list\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Invalidate the merged agent details so the freshly-created id resolves\n // instead of staying stuck on the initial `null` from the 404 lookup.\n void queryClient.invalidateQueries({ queryKey: ['agent', created.id] });\n },\n onError: invalidateBuilderSettingsOnPolicyReject,\n ...queryOptions?.createStoredAgent,\n });\n\n const updateMutation = useMutation({\n mutationFn: (params: UpdateStoredAgentParams) => {\n if (!agentId) throw new Error('agentId is required for update');\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n // Invalidate lists\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Invalidate specific agent details\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n }\n },\n onError: invalidateBuilderSettingsOnPolicyReject,\n ...queryOptions?.updateStoredAgent,\n });\n\n const deleteMutation = useMutation({\n mutationFn: () => {\n if (!agentId) throw new Error('agentId is required for delete');\n return client.getStoredAgent(agentId).delete(requestContext);\n },\n onSuccess: () => {\n // Invalidate lists so the agents list page refetches without the deleted entry\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Drop the deleted entity from the cache so active observers don't refetch a 404\n if (agentId) {\n queryClient.removeQueries({ queryKey: ['stored-agent', agentId] });\n queryClient.removeQueries({ queryKey: ['agent', agentId] });\n }\n },\n ...queryOptions?.deleteStoredAgent,\n });\n\n return {\n createStoredAgent: createMutation,\n updateStoredAgent: updateMutation,\n deleteStoredAgent: deleteMutation,\n };\n};\n","import type { StoredAgentResponse, StoredAgentSkillConfig, UpdateStoredAgentParams } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\nimport { useStoredAgent } from './use-stored-agents';\n\n/**\n * Hook to read and mutate the skills config for a stored agent.\n *\n * The skills field is `Record<string, StoredAgentSkillConfig>` on the agent\n * snapshot. Each key is a stored skill ID and the value holds per-skill\n * overrides (description, instructions, pin, strategy).\n */\nexport function useAgentSkills({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n updateSkills?: MastraMutationOptions<StoredAgentResponse, Record<string, StoredAgentSkillConfig> | undefined>;\n };\n} = {}) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const { data: agent } = useStoredAgent({ agentId, status: 'draft', queryOptions: { enabled: Boolean(agentId) } });\n\n const skills = useMemo((): Record<string, StoredAgentSkillConfig> => {\n if (!agent?.skills) return {};\n // Handle conditional field: if it's an array of variants, merge values\n if (Array.isArray(agent.skills)) {\n const merged: Record<string, StoredAgentSkillConfig> = {};\n for (const variant of agent.skills) {\n Object.assign(merged, variant.value);\n }\n return merged;\n }\n return agent.skills as Record<string, StoredAgentSkillConfig>;\n }, [agent?.skills]);\n\n const updateSkills = useMutation({\n mutationFn: (newSkills: Record<string, StoredAgentSkillConfig> | undefined) => {\n if (!agentId) throw new Error('agentId is required');\n const params: UpdateStoredAgentParams = { skills: newSkills };\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n }\n },\n ...queryOptions?.updateSkills,\n });\n\n return { skills, updateSkills };\n}\n","import type {\n ListAgentVersionsParams,\n CreateAgentVersionParams,\n ListAgentVersionsResponse,\n AgentVersionResponse,\n CompareVersionsResponse,\n ActivateAgentVersionResponse,\n DeleteAgentVersionResponse,\n} from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery, useMutation, useQueryClient, skipToken } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ListAgentVersionsParams, CreateAgentVersionParams };\n\ntype UseAgentVersionsParams<TData = ListAgentVersionsResponse> = {\n agentId?: string;\n params?: ListAgentVersionsParams;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ListAgentVersionsResponse, TData>;\n};\n\n/**\n * Hook to list versions of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgentVersions = <TData = ListAgentVersionsResponse>({\n agentId,\n params,\n requestContext,\n queryOptions,\n}: UseAgentVersionsParams<TData>): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ListAgentVersionsResponse, Error, TData>({\n queryKey: ['agent-versions', agentId, params, requestContext],\n queryFn: agentId ? () => client.getStoredAgent(agentId).listVersions(params, requestContext) : skipToken,\n ...queryOptions,\n });\n};\n\n/**\n * Hook to get a single version of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgentVersion = <TData = AgentVersionResponse>({\n agentId,\n versionId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n versionId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<AgentVersionResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<AgentVersionResponse, Error, TData>({\n queryKey: ['agent-version', agentId, versionId, requestContext],\n queryFn: () => client.getStoredAgent(agentId).getVersion(versionId, requestContext),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to create a new version of a stored agent\n */\nexport const useCreateAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<AgentVersionResponse, CreateAgentVersionParams | undefined>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<AgentVersionResponse, Error, CreateAgentVersionParams | undefined>({\n mutationFn: (params?: CreateAgentVersionParams) =>\n client.getStoredAgent(agentId).createVersion(params, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to activate a specific version of a stored agent\n */\nexport const useActivateAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<ActivateAgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ActivateAgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).activateVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to restore a specific version of a stored agent (creates a new version from an old one)\n */\nexport const useRestoreAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<AgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<AgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).restoreVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to delete a specific version of a stored agent\n */\nexport const useDeleteAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<DeleteAgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<DeleteAgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).deleteVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to compare two versions of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareAgentVersions = <TData = CompareVersionsResponse>({\n agentId,\n fromVersionId,\n toVersionId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n fromVersionId: string;\n toVersionId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<CompareVersionsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<CompareVersionsResponse, Error, TData>({\n queryKey: ['agent-versions-compare', agentId, fromVersionId, toVersionId, requestContext],\n queryFn: () => client.getStoredAgent(agentId).compareVersions(fromVersionId, toVersionId, requestContext),\n ...queryOptions,\n });\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\n\nfunction parseJsonString(jsonString: string): any {\n try {\n return JSON.stringify(JSON.parse(jsonString), null, 2);\n } catch {\n return jsonString;\n }\n}\n\nexport function useAgentWorkingMemory(\n agentId: string,\n threadId: string,\n resourceId: string,\n requestContext?: Record<string, any>,\n) {\n const client = useMastraClient();\n const [threadExists, setThreadExists] = useState(false);\n const [workingMemoryData, setWorkingMemoryData] = useState<string | null>(null);\n const [workingMemorySource, setWorkingMemorySource] = useState<'thread' | 'resource'>('thread');\n const [workingMemoryFormat, setWorkingMemoryFormat] = useState<'json' | 'markdown'>('markdown');\n const [isLoading, setIsLoading] = useState(true);\n const [isUpdating, setIsUpdating] = useState(false);\n const latestRequest = useRef(0);\n\n const refetch = useCallback(async () => {\n const requestId = ++latestRequest.current;\n setIsLoading(true);\n try {\n if (!agentId || !threadId) {\n setWorkingMemoryData(null);\n setIsLoading(false);\n return;\n }\n const res = await client.getWorkingMemory({ agentId, threadId, resourceId, requestContext });\n if (requestId !== latestRequest.current) return;\n const { workingMemory, source, workingMemoryTemplate, threadExists } = res as {\n workingMemory: string | null;\n source: 'thread' | 'resource';\n workingMemoryTemplate: { content: string; format: 'json' | 'markdown' };\n threadExists: boolean;\n };\n setThreadExists(threadExists);\n setWorkingMemoryData(workingMemory);\n setWorkingMemorySource(source);\n setWorkingMemoryFormat(workingMemoryTemplate?.format || 'markdown');\n if (workingMemoryTemplate?.format === 'json') {\n let dataToSet = '';\n if (workingMemory) {\n dataToSet = parseJsonString(workingMemory);\n } else if (workingMemoryTemplate?.content) {\n dataToSet = parseJsonString(workingMemoryTemplate.content);\n } else {\n dataToSet = '';\n }\n setWorkingMemoryData(dataToSet);\n } else {\n setWorkingMemoryData(workingMemory || workingMemoryTemplate?.content || '');\n }\n } catch (error) {\n if (requestId !== latestRequest.current) return;\n setWorkingMemoryData(null);\n console.error('Error fetching working memory', error);\n } finally {\n if (requestId === latestRequest.current) setIsLoading(false);\n }\n }, [agentId, threadId, resourceId, client, requestContext]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n const updateWorkingMemory = async (newMemory: string) => {\n setIsUpdating(true);\n try {\n if (workingMemoryFormat === 'json') {\n try {\n JSON.parse(newMemory);\n } catch {\n throw new Error('Invalid JSON working memory');\n }\n }\n await client.updateWorkingMemory({ agentId, threadId, workingMemory: newMemory, resourceId, requestContext });\n void refetch();\n } catch (error) {\n console.error('Error updating working memory', error);\n throw error;\n } finally {\n setIsUpdating(false);\n }\n };\n\n return {\n threadExists,\n workingMemoryData,\n workingMemorySource,\n workingMemoryFormat,\n isLoading,\n isUpdating,\n refetch,\n updateWorkingMemory,\n };\n}\n","import type { StoredAgentResponse, StoredWorkspaceRef, UpdateStoredAgentParams } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\nimport { useStoredAgent } from './use-stored-agents';\n\n/**\n * Hook to read and mutate the workspace reference for a stored agent.\n *\n * The workspace ref is part of the agent snapshot config and can be:\n * - `{ type: 'id', workspaceId }` — references a stored workspace by ID\n * - `{ type: 'inline', config }` — inline workspace config\n * - `undefined` — no workspace assigned\n */\nexport function useAgentWorkspace({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n updateWorkspace?: MastraMutationOptions<StoredAgentResponse, StoredWorkspaceRef | undefined>;\n };\n} = {}) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const { data: agent } = useStoredAgent({ agentId, status: 'draft', queryOptions: { enabled: Boolean(agentId) } });\n\n const workspace = useMemo((): StoredWorkspaceRef | undefined => {\n if (!agent?.workspace) return undefined;\n // Handle conditional field: if it's an array of variants, take the first value\n if (Array.isArray(agent.workspace)) {\n return agent.workspace[0]?.value as StoredWorkspaceRef | undefined;\n }\n return agent.workspace as StoredWorkspaceRef;\n }, [agent?.workspace]);\n\n const updateWorkspace = useMutation({\n mutationFn: (ref: StoredWorkspaceRef | undefined) => {\n if (!agentId) throw new Error('agentId is required');\n const params: UpdateStoredAgentParams = { workspace: ref };\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n }\n },\n ...queryOptions?.updateWorkspace,\n });\n\n return { workspace, updateWorkspace };\n}\n","import type { GetAgentResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgent = <TData = GetAgentResponse | null>({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<GetAgentResponse | null, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agent', agentId, requestContext],\n queryFn: () => (agentId ? client.getAgent(agentId).details(requestContext) : null),\n retry: false,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype AgentsModelProvidersResponse = Awaited<ReturnType<MastraClient['listAgentsModelProviders']>>;\n\nexport const useAgentsModelProviders = <TData = AgentsModelProvidersResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<AgentsModelProvidersResponse, TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agents-model-providers'],\n queryFn: () => client.listAgentsModelProviders(),\n retry: false,\n ...queryOptions,\n });\n};\n","import type {\n MastraClient,\n ReorderModelListParams,\n UpdateModelInModelListParams,\n UpdateModelParams,\n} from '@mastra/client-js';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { UseMutationResult, UseQueryResult } from '@tanstack/react-query';\n\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\ntype Agent = ReturnType<MastraClient['getAgent']>;\ntype ListAgentsResponse = Awaited<ReturnType<MastraClient['listAgents']>>;\nexport type ModelUpdateResponse = Awaited<ReturnType<Agent['updateModel']>>;\n\nexport const useAgents = <TData = ListAgentsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ListAgentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agents', requestContext],\n queryFn: () => client.listAgents(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useUpdateAgentModel = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, UpdateModelParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, UpdateModelParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: UpdateModelParams) => client.getAgent(agentId).updateModel(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error updating model', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useReorderModelList = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, ReorderModelListParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, ReorderModelListParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: ReorderModelListParams) => client.getAgent(agentId).reorderModelList(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error reordering model list', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useUpdateModelInModelList = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, UpdateModelInModelListParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, UpdateModelInModelListParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: UpdateModelInModelListParams) =>\n client.getAgent(agentId).updateModelInModelList(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error updating model in model list', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useResetAgentModel = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, void>;\n}): UseMutationResult<ModelUpdateResponse, Error, void> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async () => client.getAgent(agentId).resetModel(),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error resetting model', err);\n },\n ...queryOptions,\n });\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ninterface CloseBrowserParams {\n agentId: string;\n threadId?: string;\n}\n\n/**\n * Mutation hook for closing an agent's browser session.\n */\nexport function useCloseBrowser({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<{ success: boolean }, CloseBrowserParams> } = {}) {\n const client = useMastraClient();\n\n return useMutation<{ success: boolean }, Error, CloseBrowserParams>({\n mutationFn: ({ agentId, threadId }) => client.getAgent(agentId).closeBrowser(threadId),\n onError: err => {\n console.error('[useCloseBrowser] Error closing browser:', err);\n },\n ...queryOptions,\n });\n}\n","import type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ninterface ApiInstructionBlock {\n type: string;\n content?: string;\n id?: string;\n /** Form-format ref blocks use `promptBlockId` instead of `id` */\n promptBlockId?: string;\n rules?: unknown;\n}\n\n/**\n * Normalize blocks to API format.\n * Form-format ref blocks have `{ type: 'prompt_block_ref', promptBlockId }`,\n * while API-format blocks have `{ type: 'prompt_block_ref', id }`.\n */\nfunction toApiBlocks(blocks: ApiInstructionBlock[]) {\n return blocks.map(block => {\n if (block.type === 'prompt_block_ref') {\n // Form-format blocks have `promptBlockId` (the storage ID) and `id` (form-internal UUID).\n // API-format blocks have `id` (the storage ID). Prefer promptBlockId when present.\n return { type: 'prompt_block_ref' as const, id: block.promptBlockId ?? block.id, rules: block.rules };\n }\n return { type: block.type, content: block.content, rules: block.rules };\n });\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function usePreviewInstructions<TData = string>({\n blocks,\n requestContext,\n queryOptions,\n}: {\n blocks: ApiInstructionBlock[] | undefined;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<string, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['preview-instructions', blocks, requestContext],\n queryFn: async () => {\n if (!blocks || blocks.length === 0) return '';\n\n const response = await client.request<{ result: string }>('/stored/agents/preview-instructions', {\n method: 'POST',\n body: { blocks: toApiBlocks(blocks), context: requestContext },\n });\n\n return response.result;\n },\n ...queryOptions,\n });\n}\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type ListStoredSkillsResponse = Awaited<ReturnType<MastraClient['listStoredSkills']>>;\n\nexport function useStoredSkills<TData = ListStoredSkillsResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ListStoredSkillsResponse, TData> } = {}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-skills'],\n queryFn: () => client.listStoredSkills(),\n ...queryOptions,\n });\n}\n","import type { ChannelPlatformInfo, ChannelInstallationInfo, ChannelConnectResult } from '@mastra/client-js';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { UseMutationResult, UseQueryResult } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ChannelPlatformInfo, ChannelInstallationInfo, ChannelConnectResult };\n\nexport const useChannelPlatforms = <TData = ChannelPlatformInfo[]>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ChannelPlatformInfo[], TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ChannelPlatformInfo[], Error, TData>({\n queryKey: ['channels', 'platforms'],\n queryFn: () => client.channels.listPlatforms(),\n staleTime: 60 * 1000,\n retry: false,\n ...queryOptions,\n });\n};\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useChannelInstallations = <TData = ChannelInstallationInfo[]>({\n platform,\n agentId,\n queryOptions,\n}: {\n platform: string;\n agentId: string;\n queryOptions?: MastraQueryOptions<ChannelInstallationInfo[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ChannelInstallationInfo[], Error, TData>({\n queryKey: ['channels', 'installations', platform, agentId],\n queryFn: () => client.channels.listInstallations(platform, agentId),\n staleTime: 10 * 1000,\n retry: false,\n ...queryOptions,\n });\n};\n\n/**\n * Reconcile an agent's installation with platform state — activates a pending\n * installation whose connect flow completed out-of-band (e.g. a Discord bot\n * invite finished in another tab). Resolves null on platforms without\n * reconciliation. Call it deliberately (e.g. on window focus while a connect\n * is in flight) — it is a write, not a read.\n */\nexport const useReconcileChannelInstallation = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<ChannelInstallationInfo | null, string>;\n}): UseMutationResult<ChannelInstallationInfo | null, Error, string> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ChannelInstallationInfo | null, Error, string>({\n mutationFn: agentId => client.channels.reconcileInstallation(platform, agentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n\nexport const useConnectChannel = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<ChannelConnectResult, { agentId: string; options?: Record<string, unknown> }>;\n}): UseMutationResult<ChannelConnectResult, Error, { agentId: string; options?: Record<string, unknown> }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ChannelConnectResult, Error, { agentId: string; options?: Record<string, unknown> }>({\n mutationFn: ({ agentId, options }) =>\n client.channels.connect(platform, agentId, {\n ...options,\n // Tell the server to redirect back here after OAuth\n redirectUrl: window.location.href,\n }),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n\nexport const useDisconnectChannel = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<{ success: boolean }, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<{ success: boolean }, Error, string>({\n mutationFn: agentId => client.channels.disconnect(platform, agentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteAgentToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getAgent']>['executeTool']>>;\n\nexport interface ExecuteToolInput {\n agentId: string;\n toolId: string;\n input: any;\n playgroundRequestContext?: Record<string, any>;\n}\n\nexport const useExecuteAgentTool = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<ExecuteAgentToolResponse, ExecuteToolInput> } = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ agentId, toolId, input, playgroundRequestContext }: ExecuteToolInput) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n return client.getAgent(agentId).executeTool(toolId, { data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/agents/use-agent-messages.ts","../../../src/hooks/agents/use-agent-plan.ts","../../../src/hooks/agents/use-background-tasks.ts","../../../src/hooks/agents/use-browser-session-probe.ts","../../../src/hooks/agents/is-model-not-allowed.ts","../../../src/hooks/agents/use-stored-agents.ts","../../../src/hooks/agents/use-agent-skills.ts","../../../src/hooks/agents/use-agent-versions.ts","../../../src/hooks/agents/use-agent-working-memory.ts","../../../src/hooks/agents/use-agent-workspace.ts","../../../src/hooks/agents/use-agent.ts","../../../src/hooks/agents/use-agents-model-providers.ts","../../../src/hooks/agents/use-agents.ts","../../../src/hooks/agents/use-close-browser.ts","../../../src/hooks/agents/use-preview-instructions.ts","../../../src/hooks/agents/use-stored-skills.ts","../../../src/hooks/agents/use-channels.ts","../../../src/hooks/agents/use-execute-agent-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { MastraDBMessage } from '@mastra/core/agent/message-list';\nimport { skipToken, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\ntype AgentMessagesPage = Awaited<ReturnType<MastraClient['listThreadMessages']>>;\n\ntype AgentMessagesData = InfiniteData<AgentMessagesPage, string> & { messages: MastraDBMessage[] };\n\nexport interface UseAgentMessagesProps<TData = AgentMessagesData> {\n threadId?: string;\n agentId: string;\n memory: boolean;\n requestContext?: Record<string, any>;\n queryOptions?: MastraInfiniteQueryOptions<AgentMessagesPage, TData, QueryKey, string>;\n}\n\nconst PER_PAGE = 40;\n\nconst NEWEST_PAGE = '';\n\nconst createdAtMs = (message: MastraDBMessage) => new Date(message.createdAt).getTime();\n\nconst byCreatedAt = (a: MastraDBMessage, b: MastraDBMessage) => createdAtMs(a) - createdAtMs(b);\n\nexport const useAgentMessages = <TData = AgentMessagesData>({\n threadId,\n agentId,\n memory,\n requestContext,\n queryOptions,\n}: UseAgentMessagesProps<TData>) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['memory', 'messages', threadId, agentId, requestContext],\n initialPageParam: NEWEST_PAGE,\n queryFn:\n memory && threadId\n ? ({ pageParam: olderThan }) =>\n client.listThreadMessages(threadId, {\n agentId,\n requestContext,\n includeSystemReminders: true,\n perPage: PER_PAGE,\n orderBy: { field: 'createdAt', direction: 'DESC' },\n // Inclusive bound: messages sharing the oldest createdAt of the previous page\n // may have been cut off by perPage, so re-ask for them and dedupe by id below.\n filter: olderThan ? { dateRange: { end: new Date(olderThan) } } : undefined,\n })\n : skipToken,\n getNextPageParam: (lastPage, _allPages, lastPageParam) => {\n if (!lastPage.hasMore || lastPage.messages.length === 0) return undefined;\n const next = new Date(Math.min(...lastPage.messages.map(createdAtMs))).toISOString();\n // A full page of same-timestamp messages would re-request itself forever.\n return next === lastPageParam ? undefined : next;\n },\n select: (data): TData => {\n const seen = new Set<string>();\n const messages = data.pages\n .flatMap(page => page.messages)\n .filter(message => {\n if (seen.has(message.id)) return false;\n seen.add(message.id);\n return true;\n })\n .sort(byCreatedAt);\n return { ...data, messages } as AgentMessagesData as TData;\n },\n staleTime: 0,\n gcTime: 0,\n retry: false,\n refetchOnWindowFocus: false,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype AgentPlanResponse = Awaited<ReturnType<ReturnType<MastraClient['getAgent']>['readPlan']>>;\n\ninterface UseAgentPlanOptions<TData> {\n agentId: string;\n path: string;\n agentVersionId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<AgentPlanResponse, TData>;\n}\n\nexport function useAgentPlan<TData = AgentPlanResponse>({\n agentId,\n path,\n agentVersionId,\n requestContext,\n queryOptions,\n}: UseAgentPlanOptions<TData>): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agent-plan', agentId, agentVersionId, path, requestContext],\n queryFn: () => {\n const agent = agentVersionId ? client.getAgent(agentId, { versionId: agentVersionId }) : client.getAgent(agentId);\n return agent.readPlan(path, requestContext);\n },\n retry: false,\n ...queryOptions,\n });\n}\n","import type { MastraClient, StreamBackgroundTasksParams } from '@mastra/client-js';\nimport type { BackgroundTaskStatus } from '@mastra/core/background-tasks';\nimport type { AgentChunkType } from '@mastra/core/stream';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype BackgroundTaskStreamReader = ReturnType<Awaited<ReturnType<MastraClient['streamBackgroundTasks']>>['getReader']>;\n\nexport interface BackgroundTaskEvent {\n taskId: string;\n toolName: string;\n toolCallId: string;\n agentId: string;\n runId: string;\n result?: unknown;\n error?: { message: string; stack?: string };\n status: BackgroundTaskStatus;\n args: Record<string, unknown>;\n suspendPayload?: unknown;\n}\n\nexport interface UseBackgroundTaskStreamOptions extends StreamBackgroundTasksParams {\n /** Whether the stream is active. Default: true */\n enabled?: boolean;\n}\n\nexport interface UseBackgroundTaskStreamReturn {\n /** Map of taskId → latest event data */\n tasks: Record<string, BackgroundTaskEvent>;\n /** Whether the stream is currently connected */\n isConnected: boolean;\n /** Any connection error */\n error: Error | null;\n /** Manually disconnect the stream */\n disconnect: () => void;\n /** Manually reconnect the stream */\n reconnect: () => void;\n /** List of running tasks */\n runningTasks: BackgroundTaskEvent[];\n /** List of completed tasks */\n completedTasks: BackgroundTaskEvent[];\n /** List of failed tasks */\n failedTasks: BackgroundTaskEvent[];\n /** Clear completed and failed tasks */\n clearCompletedAndFailedTasks: () => void;\n}\n\n/**\n * Streams background task events via SSE and accumulates them in a map keyed by taskId.\n *\n * Each incoming event (task.completed / task.failed) is stored in state so the UI\n * can react to completions — e.g., show a toast, update a badge, or display results.\n *\n * @example\n * ```tsx\n * const { tasks, isConnected, completedTasks } = useBackgroundTaskStream({ agentId: 'crypto-agent' });\n *\n * // Show a badge with completed count\n * const completedCount = completedTasks.length;\n * ```\n */\n\ntype EventType = Extract<\n AgentChunkType,\n {\n type:\n | 'background-task-running'\n | 'background-task-completed'\n | 'background-task-failed'\n | 'background-task-cancelled'\n | 'background-task-output'\n | 'background-task-suspended'\n | 'background-task-resumed';\n }\n>;\n\nconst EVENT_STATUS_MAP: Record<EventType['type'], BackgroundTaskStatus> = {\n 'background-task-running': 'running',\n 'background-task-output': 'running',\n 'background-task-completed': 'completed',\n 'background-task-failed': 'failed',\n 'background-task-cancelled': 'cancelled',\n 'background-task-suspended': 'suspended',\n 'background-task-resumed': 'running',\n};\n\nexport function useBackgroundTaskStream(options: UseBackgroundTaskStreamOptions = {}): UseBackgroundTaskStreamReturn {\n const { enabled = true, agentId, runId, threadId, resourceId, taskId } = options;\n const client = useMastraClient();\n\n const [tasks, setTasks] = useState<Record<string, BackgroundTaskEvent>>({});\n const [isConnected, setIsConnected] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n const readerRef = useRef<BackgroundTaskStreamReader | null>(null);\n const connectSeqRef = useRef(0);\n\n const runningTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'running');\n }, [tasks]);\n\n const completedTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'completed');\n }, [tasks]);\n\n const failedTasks = useMemo(() => {\n return Object.values(tasks).filter(task => task.status === 'failed');\n }, [tasks]);\n\n const cleanup = useCallback(() => {\n readerRef.current?.cancel().catch(() => {});\n readerRef.current = null;\n abortRef.current?.abort();\n abortRef.current = null;\n setIsConnected(false);\n }, []);\n\n const connect = useCallback(async () => {\n const seq = ++connectSeqRef.current;\n cleanup();\n setError(null);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const stream = await client.streamBackgroundTasks({ agentId, runId, threadId, resourceId, taskId });\n\n if (!stream) {\n setError(new Error('Stream connection failed'));\n return;\n }\n\n if (seq === connectSeqRef.current) {\n setIsConnected(true);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n readerRef.current = reader;\n\n while (!controller.signal.aborted) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const event = value as EventType;\n if (event.type !== 'background-task-output') {\n setTasks(prev => ({\n ...prev,\n [event.payload.taskId]: {\n ...prev[event.payload.taskId],\n ...event.payload,\n status: EVENT_STATUS_MAP[event.type],\n args:\n ('args' in event.payload ? event.payload.args : undefined) ?? prev[event.payload.taskId]?.args ?? {},\n },\n }));\n }\n }\n } catch (err: any) {\n if (err?.name !== 'AbortError') {\n if (seq === connectSeqRef.current) {\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n }\n } finally {\n if (seq === connectSeqRef.current) {\n setIsConnected(false);\n }\n }\n }, [client, agentId, runId, threadId, resourceId, taskId, cleanup]);\n\n useEffect(() => {\n if (!enabled) {\n cleanup();\n return;\n }\n\n void connect();\n return cleanup;\n }, [enabled, connect, cleanup]);\n\n const disconnect = useCallback(() => {\n cleanup();\n }, [cleanup]);\n\n const reconnect = useCallback(() => {\n void connect();\n }, [connect]);\n\n const clearCompletedAndFailedTasks = () => {\n setTasks(prev => {\n const newTasks = { ...prev };\n Object.values(newTasks).forEach(task => {\n if (\n task.status === 'completed' ||\n task.status === 'failed' ||\n task.status === 'cancelled' ||\n task.status === 'timed_out'\n ) {\n delete newTasks[task.taskId];\n }\n });\n return newTasks;\n });\n };\n\n return {\n tasks,\n isConnected,\n error,\n disconnect,\n reconnect,\n runningTasks,\n completedTasks,\n failedTasks,\n clearCompletedAndFailedTasks,\n };\n}\n\ntype BackgroundTaskResponse = Awaited<ReturnType<MastraClient['getBackgroundTask']>>;\n\nexport const useGetBackgroundTaskById = <TData = BackgroundTaskResponse>({\n backgroundTaskId,\n queryOptions,\n}: {\n backgroundTaskId: string;\n queryOptions?: MastraQueryOptions<BackgroundTaskResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['background-task', backgroundTaskId],\n queryFn: () => client.getBackgroundTask(backgroundTaskId),\n ...queryOptions,\n });\n};\n","import type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport interface BrowserSessionProbe {\n hasSession: boolean;\n screencastAvailable: boolean;\n}\n\ninterface UseBrowserSessionProbeOptions<TData> {\n agentId?: string;\n threadId?: string;\n /** TanStack overrides spread last, e.g. `{ enabled: false }` for agents without browser tools. */\n queryOptions?: MastraQueryOptions<BrowserSessionProbe, TData>;\n}\n\nexport const browserSessionProbeQueryKey = (agentId?: string, threadId?: string) =>\n ['browser-session-probe', agentId, threadId] as const;\n\nconst LEGACY_FALLBACK: BrowserSessionProbe = { hasSession: true, screencastAvailable: true };\n\nconst isNotFoundError = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n if ('status' in error && (error as { status: unknown }).status === 404) return true;\n if ('statusCode' in error && (error as { statusCode: unknown }).statusCode === 404) return true;\n return false;\n};\n\n/**\n * Query hook that probes the server for the agent's browser session state.\n *\n * Used by {@link BrowserSessionProvider} to decide whether to open a screencast\n * WebSocket. The probe avoids two failure modes:\n *\n * 1. `screencastAvailable: false` — the server doesn't have `ws` / `@hono/node-ws`\n * installed (or the route was never registered). Opening a WS would fail and\n * trigger a reconnect loop.\n * 2. `hasSession: false` — no active browser session for this thread yet. Opening\n * a WS would succeed but sit idle, holding resources for no reason.\n *\n * When the endpoint itself returns 404 (older server that predates this probe),\n * the hook assumes screencast is available and a session is active so behavior\n * matches the legacy unconditional connect.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useBrowserSessionProbe<TData = BrowserSessionProbe>({\n agentId,\n threadId,\n queryOptions,\n}: UseBrowserSessionProbeOptions<TData>): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery<BrowserSessionProbe, Error, TData>({\n queryKey: browserSessionProbeQueryKey(agentId, threadId),\n queryFn: async () => {\n if (!agentId) {\n return { hasSession: false, screencastAvailable: false };\n }\n\n try {\n return await client.getAgent(agentId).browserSession(threadId);\n } catch (error) {\n if (isNotFoundError(error)) {\n // Older server without the probe endpoint — fall back to legacy behavior.\n return LEGACY_FALLBACK;\n }\n throw error;\n }\n },\n // No polling: the probe fires once on mount, on window focus, and is\n // updated via `setQueriesData` from `tool-fallback.tsx` when a browser\n // tool call transitions. This avoids idle 5s polls and lets the probe\n // flip to `hasSession: true` the instant a tool call is seen.\n refetchOnWindowFocus: true,\n staleTime: 0,\n retry: 1,\n ...queryOptions,\n });\n}\n","/**\n * The wire-level error code the server emits on a 422 when a model is blocked\n * by the admin's builder policy. Kept as a local literal so the browser bundle\n * never imports server-only agent-builder EE code.\n */\nconst MODEL_NOT_ALLOWED_CODE = 'MODEL_NOT_ALLOWED';\n\nexport interface ModelNotAllowedDetails {\n message: string;\n attempted?: { provider?: string; modelId?: string };\n offendingLabel?: string;\n}\n\n/**\n * Detects HTTP 422 + MODEL_NOT_ALLOWED responses thrown by `MastraClientError`\n * (or any error carrying `status` + `body.error.code`). Returns the parsed\n * details when matched, or `null` otherwise.\n */\nexport function isModelNotAllowedError(err: unknown): ModelNotAllowedDetails | null {\n if (!err || typeof err !== 'object') return null;\n const candidate = err as { status?: number; body?: unknown; message?: string };\n if (candidate.status !== 422) return null;\n const body = candidate.body as { error?: { code?: unknown } } | undefined;\n const code = body?.error?.code;\n if (code !== MODEL_NOT_ALLOWED_CODE) return null;\n const errorBody = body!.error as {\n message?: string;\n attempted?: { provider?: string; modelId?: string };\n offendingLabel?: string;\n };\n return {\n message: errorBody.message || candidate.message || 'Model not allowed by admin policy',\n attempted: errorBody.attempted,\n offendingLabel: errorBody.offendingLabel,\n };\n}\n","import type {\n CreateStoredAgentParams,\n UpdateStoredAgentParams,\n ListStoredAgentsParams,\n StoredAgentResponse,\n ListStoredAgentsResponse,\n StoredAgentDependentsResponse,\n DeleteStoredAgentResponse,\n} from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\nimport { isModelNotAllowedError } from './is-model-not-allowed';\n\nexport const useStoredAgents = <TData = ListStoredAgentsResponse>({\n queryOptions,\n ...params\n}: ListStoredAgentsParams & {\n queryOptions?: MastraQueryOptions<ListStoredAgentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const listParams = Object.keys(params).length > 0 ? params : undefined;\n\n return useQuery({\n queryKey: ['stored-agents', listParams],\n queryFn: () => client.listStoredAgents(listParams),\n ...queryOptions,\n });\n};\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useStoredAgent = <TData = StoredAgentResponse | null>({\n agentId,\n status,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n status?: 'draft' | 'published';\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<StoredAgentResponse | null, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-agent', agentId, status, requestContext],\n queryFn: async () => {\n if (!agentId) return null;\n try {\n return await client.getStoredAgent(agentId).details(requestContext, { status });\n } catch (error) {\n // 404 is expected for code-only agents that haven't been stored yet\n if (error && typeof error === 'object' && 'status' in error && (error as { status: number }).status === 404) {\n return null;\n }\n throw error;\n }\n },\n retry: false,\n ...queryOptions,\n });\n};\n\nexport type StoredAgent = StoredAgentResponse;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useStoredAgentDependents = <TData = StoredAgentDependentsResponse>({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<StoredAgentDependentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-agent-dependents', agentId, requestContext],\n queryFn: () => client.getStoredAgent(agentId!).dependents(requestContext),\n retry: false,\n ...queryOptions,\n });\n};\n\nexport const useStoredAgentMutations = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n createStoredAgent?: MastraMutationOptions<StoredAgentResponse, CreateStoredAgentParams>;\n updateStoredAgent?: MastraMutationOptions<StoredAgentResponse, UpdateStoredAgentParams>;\n deleteStoredAgent?: MastraMutationOptions<DeleteStoredAgentResponse, void>;\n };\n} = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n // If the server rejects with HTTP 422 + MODEL_NOT_ALLOWED the admin policy\n // has likely changed under us — refresh the cached settings so the UI\n // re-renders against the latest server truth.\n const invalidateBuilderSettingsOnPolicyReject = (err: unknown) => {\n if (isModelNotAllowedError(err)) {\n void queryClient.invalidateQueries({ queryKey: ['builder-settings'] });\n }\n };\n\n const createMutation = useMutation({\n mutationFn: (params: CreateStoredAgentParams) => client.createStoredAgent(params),\n onSuccess: created => {\n // Prime the per-agent details cache with the response so the next page\n // (the edit page) can render the agent on first paint without a refetch.\n // The starter relies on this to immediately mount the conversation panel\n // and dispatch the user's initial message.\n queryClient.setQueryData(['stored-agent', created.id, 'draft', requestContext], created);\n queryClient.setQueryData(['stored-agent', created.id, undefined, requestContext], created);\n // Invalidate both stored-agents list and the merged agents list\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Invalidate the merged agent details so the freshly-created id resolves\n // instead of staying stuck on the initial `null` from the 404 lookup.\n void queryClient.invalidateQueries({ queryKey: ['agent', created.id] });\n },\n onError: invalidateBuilderSettingsOnPolicyReject,\n ...queryOptions?.createStoredAgent,\n });\n\n const updateMutation = useMutation({\n mutationFn: (params: UpdateStoredAgentParams) => {\n if (!agentId) throw new Error('agentId is required for update');\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n // Invalidate lists\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Invalidate specific agent details\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n }\n },\n onError: invalidateBuilderSettingsOnPolicyReject,\n ...queryOptions?.updateStoredAgent,\n });\n\n const deleteMutation = useMutation({\n mutationFn: () => {\n if (!agentId) throw new Error('agentId is required for delete');\n return client.getStoredAgent(agentId).delete(requestContext);\n },\n onSuccess: () => {\n // Invalidate lists so the agents list page refetches without the deleted entry\n void queryClient.invalidateQueries({ queryKey: ['stored-agents'] });\n void queryClient.invalidateQueries({ queryKey: ['agents'] });\n // Drop the deleted entity from the cache so active observers don't refetch a 404\n if (agentId) {\n queryClient.removeQueries({ queryKey: ['stored-agent', agentId] });\n queryClient.removeQueries({ queryKey: ['agent', agentId] });\n }\n },\n ...queryOptions?.deleteStoredAgent,\n });\n\n return {\n createStoredAgent: createMutation,\n updateStoredAgent: updateMutation,\n deleteStoredAgent: deleteMutation,\n };\n};\n","import type { StoredAgentResponse, StoredAgentSkillConfig, UpdateStoredAgentParams } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\nimport { useStoredAgent } from './use-stored-agents';\n\n/**\n * Hook to read and mutate the skills config for a stored agent.\n *\n * The skills field is `Record<string, StoredAgentSkillConfig>` on the agent\n * snapshot. Each key is a stored skill ID and the value holds per-skill\n * overrides (description, instructions, pin, strategy).\n */\nexport function useAgentSkills({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n updateSkills?: MastraMutationOptions<StoredAgentResponse, Record<string, StoredAgentSkillConfig> | undefined>;\n };\n} = {}) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const { data: agent } = useStoredAgent({ agentId, status: 'draft', queryOptions: { enabled: Boolean(agentId) } });\n\n const skills = useMemo((): Record<string, StoredAgentSkillConfig> => {\n if (!agent?.skills) return {};\n // Handle conditional field: if it's an array of variants, merge values\n if (Array.isArray(agent.skills)) {\n const merged: Record<string, StoredAgentSkillConfig> = {};\n for (const variant of agent.skills) {\n Object.assign(merged, variant.value);\n }\n return merged;\n }\n return agent.skills as Record<string, StoredAgentSkillConfig>;\n }, [agent?.skills]);\n\n const updateSkills = useMutation({\n mutationFn: (newSkills: Record<string, StoredAgentSkillConfig> | undefined) => {\n if (!agentId) throw new Error('agentId is required');\n const params: UpdateStoredAgentParams = { skills: newSkills };\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n }\n },\n ...queryOptions?.updateSkills,\n });\n\n return { skills, updateSkills };\n}\n","import type {\n ListAgentVersionsParams,\n CreateAgentVersionParams,\n ListAgentVersionsResponse,\n AgentVersionResponse,\n CompareVersionsResponse,\n ActivateAgentVersionResponse,\n DeleteAgentVersionResponse,\n} from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery, useMutation, useQueryClient, skipToken } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ListAgentVersionsParams, CreateAgentVersionParams };\n\ntype UseAgentVersionsParams<TData = ListAgentVersionsResponse> = {\n agentId?: string;\n params?: ListAgentVersionsParams;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ListAgentVersionsResponse, TData>;\n};\n\n/**\n * Hook to list versions of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgentVersions = <TData = ListAgentVersionsResponse>({\n agentId,\n params,\n requestContext,\n queryOptions,\n}: UseAgentVersionsParams<TData>): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ListAgentVersionsResponse, Error, TData>({\n queryKey: ['agent-versions', agentId, params, requestContext],\n queryFn: agentId ? () => client.getStoredAgent(agentId).listVersions(params, requestContext) : skipToken,\n ...queryOptions,\n });\n};\n\n/**\n * Hook to get a single version of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgentVersion = <TData = AgentVersionResponse>({\n agentId,\n versionId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n versionId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<AgentVersionResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<AgentVersionResponse, Error, TData>({\n queryKey: ['agent-version', agentId, versionId, requestContext],\n queryFn: () => client.getStoredAgent(agentId).getVersion(versionId, requestContext),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to create a new version of a stored agent\n */\nexport const useCreateAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<AgentVersionResponse, CreateAgentVersionParams | undefined>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<AgentVersionResponse, Error, CreateAgentVersionParams | undefined>({\n mutationFn: (params?: CreateAgentVersionParams) =>\n client.getStoredAgent(agentId).createVersion(params, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to activate a specific version of a stored agent\n */\nexport const useActivateAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<ActivateAgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ActivateAgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).activateVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to restore a specific version of a stored agent (creates a new version from an old one)\n */\nexport const useRestoreAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<AgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<AgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).restoreVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to delete a specific version of a stored agent\n */\nexport const useDeleteAgentVersion = ({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraMutationOptions<DeleteAgentVersionResponse, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<DeleteAgentVersionResponse, Error, string>({\n mutationFn: (versionId: string) => client.getStoredAgent(agentId).deleteVersion(versionId, requestContext),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to compare two versions of a stored agent\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareAgentVersions = <TData = CompareVersionsResponse>({\n agentId,\n fromVersionId,\n toVersionId,\n requestContext,\n queryOptions,\n}: {\n agentId: string;\n fromVersionId: string;\n toVersionId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<CompareVersionsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<CompareVersionsResponse, Error, TData>({\n queryKey: ['agent-versions-compare', agentId, fromVersionId, toVersionId, requestContext],\n queryFn: () => client.getStoredAgent(agentId).compareVersions(fromVersionId, toVersionId, requestContext),\n ...queryOptions,\n });\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\n\nfunction parseJsonString(jsonString: string): any {\n try {\n return JSON.stringify(JSON.parse(jsonString), null, 2);\n } catch {\n return jsonString;\n }\n}\n\nexport function useAgentWorkingMemory(\n agentId: string,\n threadId: string,\n resourceId: string,\n requestContext?: Record<string, any>,\n) {\n const client = useMastraClient();\n const [threadExists, setThreadExists] = useState(false);\n const [workingMemoryData, setWorkingMemoryData] = useState<string | null>(null);\n const [workingMemorySource, setWorkingMemorySource] = useState<'thread' | 'resource'>('thread');\n const [workingMemoryFormat, setWorkingMemoryFormat] = useState<'json' | 'markdown'>('markdown');\n const [isLoading, setIsLoading] = useState(true);\n const [isUpdating, setIsUpdating] = useState(false);\n const latestRequest = useRef(0);\n\n const refetch = useCallback(async () => {\n const requestId = ++latestRequest.current;\n setIsLoading(true);\n try {\n if (!agentId || !threadId) {\n setWorkingMemoryData(null);\n setIsLoading(false);\n return;\n }\n const res = await client.getWorkingMemory({ agentId, threadId, resourceId, requestContext });\n if (requestId !== latestRequest.current) return;\n const { workingMemory, source, workingMemoryTemplate, threadExists } = res as {\n workingMemory: string | null;\n source: 'thread' | 'resource';\n workingMemoryTemplate: { content: string; format: 'json' | 'markdown' };\n threadExists: boolean;\n };\n setThreadExists(threadExists);\n setWorkingMemoryData(workingMemory);\n setWorkingMemorySource(source);\n setWorkingMemoryFormat(workingMemoryTemplate?.format || 'markdown');\n if (workingMemoryTemplate?.format === 'json') {\n let dataToSet = '';\n if (workingMemory) {\n dataToSet = parseJsonString(workingMemory);\n } else if (workingMemoryTemplate?.content) {\n dataToSet = parseJsonString(workingMemoryTemplate.content);\n } else {\n dataToSet = '';\n }\n setWorkingMemoryData(dataToSet);\n } else {\n setWorkingMemoryData(workingMemory || workingMemoryTemplate?.content || '');\n }\n } catch (error) {\n if (requestId !== latestRequest.current) return;\n setWorkingMemoryData(null);\n console.error('Error fetching working memory', error);\n } finally {\n if (requestId === latestRequest.current) setIsLoading(false);\n }\n }, [agentId, threadId, resourceId, client, requestContext]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n const updateWorkingMemory = async (newMemory: string) => {\n setIsUpdating(true);\n try {\n if (workingMemoryFormat === 'json') {\n try {\n JSON.parse(newMemory);\n } catch {\n throw new Error('Invalid JSON working memory');\n }\n }\n await client.updateWorkingMemory({ agentId, threadId, workingMemory: newMemory, resourceId, requestContext });\n void refetch();\n } catch (error) {\n console.error('Error updating working memory', error);\n throw error;\n } finally {\n setIsUpdating(false);\n }\n };\n\n return {\n threadExists,\n workingMemoryData,\n workingMemorySource,\n workingMemoryFormat,\n isLoading,\n isUpdating,\n refetch,\n updateWorkingMemory,\n };\n}\n","import type { StoredAgentResponse, StoredWorkspaceRef, UpdateStoredAgentParams } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\nimport { useStoredAgent } from './use-stored-agents';\n\n/**\n * Hook to read and mutate the workspace reference for a stored agent.\n *\n * The workspace ref is part of the agent snapshot config and can be:\n * - `{ type: 'id', workspaceId }` — references a stored workspace by ID\n * - `{ type: 'inline', config }` — inline workspace config\n * - `undefined` — no workspace assigned\n */\nexport function useAgentWorkspace({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: {\n updateWorkspace?: MastraMutationOptions<StoredAgentResponse, StoredWorkspaceRef | undefined>;\n };\n} = {}) {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const { data: agent } = useStoredAgent({ agentId, status: 'draft', queryOptions: { enabled: Boolean(agentId) } });\n\n const workspace = useMemo((): StoredWorkspaceRef | undefined => {\n if (!agent?.workspace) return undefined;\n // Handle conditional field: if it's an array of variants, take the first value\n if (Array.isArray(agent.workspace)) {\n return agent.workspace[0]?.value as StoredWorkspaceRef | undefined;\n }\n return agent.workspace as StoredWorkspaceRef;\n }, [agent?.workspace]);\n\n const updateWorkspace = useMutation({\n mutationFn: (ref: StoredWorkspaceRef | undefined) => {\n if (!agentId) throw new Error('agentId is required');\n const params: UpdateStoredAgentParams = { workspace: ref };\n return client.getStoredAgent(agentId).update(params, requestContext);\n },\n onSuccess: () => {\n if (agentId) {\n void queryClient.invalidateQueries({ queryKey: ['stored-agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n void queryClient.invalidateQueries({ queryKey: ['agent-versions', agentId] });\n }\n },\n ...queryOptions?.updateWorkspace,\n });\n\n return { workspace, updateWorkspace };\n}\n","import type { GetAgentResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useAgent = <TData = GetAgentResponse | null>({\n agentId,\n requestContext,\n queryOptions,\n}: {\n agentId?: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<GetAgentResponse | null, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agent', agentId, requestContext],\n queryFn: () => (agentId ? client.getAgent(agentId).details(requestContext) : null),\n retry: false,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype AgentsModelProvidersResponse = Awaited<ReturnType<MastraClient['listAgentsModelProviders']>>;\n\nexport const useAgentsModelProviders = <TData = AgentsModelProvidersResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<AgentsModelProvidersResponse, TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agents-model-providers'],\n queryFn: () => client.listAgentsModelProviders(),\n retry: false,\n ...queryOptions,\n });\n};\n","import type {\n MastraClient,\n ReorderModelListParams,\n UpdateModelInModelListParams,\n UpdateModelParams,\n} from '@mastra/client-js';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { UseMutationResult, UseQueryResult } from '@tanstack/react-query';\n\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\ntype Agent = ReturnType<MastraClient['getAgent']>;\ntype ListAgentsResponse = Awaited<ReturnType<MastraClient['listAgents']>>;\nexport type ModelUpdateResponse = Awaited<ReturnType<Agent['updateModel']>>;\n\nexport const useAgents = <TData = ListAgentsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ListAgentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['agents', requestContext],\n queryFn: () => client.listAgents(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useUpdateAgentModel = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, UpdateModelParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, UpdateModelParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: UpdateModelParams) => client.getAgent(agentId).updateModel(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error updating model', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useReorderModelList = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, ReorderModelListParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, ReorderModelListParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: ReorderModelListParams) => client.getAgent(agentId).reorderModelList(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error reordering model list', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useUpdateModelInModelList = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, UpdateModelInModelListParams>;\n}): UseMutationResult<ModelUpdateResponse, Error, UpdateModelInModelListParams> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async (payload: UpdateModelInModelListParams) =>\n client.getAgent(agentId).updateModelInModelList(payload),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error updating model in model list', err);\n },\n ...queryOptions,\n });\n};\n\nexport const useResetAgentModel = ({\n agentId,\n queryOptions,\n}: {\n agentId: string;\n queryOptions?: MastraMutationOptions<ModelUpdateResponse, void>;\n}): UseMutationResult<ModelUpdateResponse, Error, void> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: async () => client.getAgent(agentId).resetModel(),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['agent', agentId] });\n },\n onError: err => {\n console.error('Error resetting model', err);\n },\n ...queryOptions,\n });\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ninterface CloseBrowserParams {\n agentId: string;\n threadId?: string;\n}\n\n/**\n * Mutation hook for closing an agent's browser session.\n */\nexport function useCloseBrowser({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<{ success: boolean }, CloseBrowserParams> } = {}) {\n const client = useMastraClient();\n\n return useMutation<{ success: boolean }, Error, CloseBrowserParams>({\n mutationFn: ({ agentId, threadId }) => client.getAgent(agentId).closeBrowser(threadId),\n onError: err => {\n console.error('[useCloseBrowser] Error closing browser:', err);\n },\n ...queryOptions,\n });\n}\n","import type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ninterface ApiInstructionBlock {\n type: string;\n content?: string;\n id?: string;\n /** Form-format ref blocks use `promptBlockId` instead of `id` */\n promptBlockId?: string;\n rules?: unknown;\n}\n\n/**\n * Normalize blocks to API format.\n * Form-format ref blocks have `{ type: 'prompt_block_ref', promptBlockId }`,\n * while API-format blocks have `{ type: 'prompt_block_ref', id }`.\n */\nfunction toApiBlocks(blocks: ApiInstructionBlock[]) {\n return blocks.map(block => {\n if (block.type === 'prompt_block_ref') {\n // Form-format blocks have `promptBlockId` (the storage ID) and `id` (form-internal UUID).\n // API-format blocks have `id` (the storage ID). Prefer promptBlockId when present.\n return { type: 'prompt_block_ref' as const, id: block.promptBlockId ?? block.id, rules: block.rules };\n }\n return { type: block.type, content: block.content, rules: block.rules };\n });\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function usePreviewInstructions<TData = string>({\n blocks,\n requestContext,\n queryOptions,\n}: {\n blocks: ApiInstructionBlock[] | undefined;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<string, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['preview-instructions', blocks, requestContext],\n queryFn: async () => {\n if (!blocks || blocks.length === 0) return '';\n\n const response = await client.request<{ result: string }>('/stored/agents/preview-instructions', {\n method: 'POST',\n body: { blocks: toApiBlocks(blocks), context: requestContext },\n });\n\n return response.result;\n },\n ...queryOptions,\n });\n}\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type ListStoredSkillsResponse = Awaited<ReturnType<MastraClient['listStoredSkills']>>;\n\nexport function useStoredSkills<TData = ListStoredSkillsResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ListStoredSkillsResponse, TData> } = {}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['stored-skills'],\n queryFn: () => client.listStoredSkills(),\n ...queryOptions,\n });\n}\n","import type { ChannelPlatformInfo, ChannelInstallationInfo, ChannelConnectResult } from '@mastra/client-js';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { UseMutationResult, UseQueryResult } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ChannelPlatformInfo, ChannelInstallationInfo, ChannelConnectResult };\n\nexport const useChannelPlatforms = <TData = ChannelPlatformInfo[]>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ChannelPlatformInfo[], TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ChannelPlatformInfo[], Error, TData>({\n queryKey: ['channels', 'platforms'],\n queryFn: () => client.channels.listPlatforms(),\n staleTime: 60 * 1000,\n retry: false,\n ...queryOptions,\n });\n};\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useChannelInstallations = <TData = ChannelInstallationInfo[]>({\n platform,\n agentId,\n queryOptions,\n}: {\n platform: string;\n agentId: string;\n queryOptions?: MastraQueryOptions<ChannelInstallationInfo[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery<ChannelInstallationInfo[], Error, TData>({\n queryKey: ['channels', 'installations', platform, agentId],\n queryFn: () => client.channels.listInstallations(platform, agentId),\n staleTime: 10 * 1000,\n retry: false,\n ...queryOptions,\n });\n};\n\n/**\n * Reconcile an agent's installation with platform state — activates a pending\n * installation whose connect flow completed out-of-band (e.g. a Discord bot\n * invite finished in another tab). Resolves null on platforms without\n * reconciliation. Call it deliberately (e.g. on window focus while a connect\n * is in flight) — it is a write, not a read.\n */\nexport const useReconcileChannelInstallation = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<ChannelInstallationInfo | null, string>;\n}): UseMutationResult<ChannelInstallationInfo | null, Error, string> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ChannelInstallationInfo | null, Error, string>({\n mutationFn: agentId => client.channels.reconcileInstallation(platform, agentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n\nexport const useConnectChannel = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<ChannelConnectResult, { agentId: string; options?: Record<string, unknown> }>;\n}): UseMutationResult<ChannelConnectResult, Error, { agentId: string; options?: Record<string, unknown> }> => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<ChannelConnectResult, Error, { agentId: string; options?: Record<string, unknown> }>({\n mutationFn: ({ agentId, options }) =>\n client.channels.connect(platform, agentId, {\n ...options,\n // Tell the server to redirect back here after OAuth\n redirectUrl: window.location.href,\n }),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n\nexport const useDisconnectChannel = ({\n platform,\n queryOptions,\n}: {\n platform: string;\n queryOptions?: MastraMutationOptions<{ success: boolean }, string>;\n}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n return useMutation<{ success: boolean }, Error, string>({\n mutationFn: agentId => client.channels.disconnect(platform, agentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['channels', 'installations', platform] });\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteAgentToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getAgent']>['executeTool']>>;\n\nexport interface ExecuteToolInput {\n agentId: string;\n toolId: string;\n input: any;\n playgroundRequestContext?: Record<string, any>;\n}\n\nexport const useExecuteAgentTool = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<ExecuteAgentToolResponse, ExecuteToolInput> } = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ agentId, toolId, input, playgroundRequestContext }: ExecuteToolInput) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n return client.getAgent(agentId).executeTool(toolId, { data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":"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"}
|