@mastra/react 1.13.0-alpha.2 → 1.13.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/{accumulator-BmD8-x9I.cjs → accumulator-Bjfckb5t.cjs} +5 -9
  2. package/dist/{accumulator-BmD8-x9I.cjs.map → accumulator-Bjfckb5t.cjs.map} +1 -1
  3. package/dist/{accumulator-D9jAph99.js → accumulator-DysrPe6U.js} +5 -9
  4. package/dist/{accumulator-D9jAph99.js.map → accumulator-DysrPe6U.js.map} +1 -1
  5. package/dist/chat/index.cjs +1 -1
  6. package/dist/chat/index.js +1 -1
  7. package/dist/{combine-by-ids-CcaZKGT9.js → combine-by-ids-C-0oe4eH.js} +2 -3
  8. package/dist/{combine-by-ids-CcaZKGT9.js.map → combine-by-ids-C-0oe4eH.js.map} +1 -1
  9. package/dist/{combine-by-ids-D_lp6Dvq.cjs → combine-by-ids-ERVPXXBi.cjs} +2 -3
  10. package/dist/{combine-by-ids-D_lp6Dvq.cjs.map → combine-by-ids-ERVPXXBi.cjs.map} +1 -1
  11. package/dist/{experiments-CJw1N3FB.cjs → experiments-Duv0RgkM.cjs} +12 -19
  12. package/dist/{experiments-CJw1N3FB.cjs.map → experiments-Duv0RgkM.cjs.map} +1 -1
  13. package/dist/{experiments-B7vRMK5T.js → experiments-DyecjEut.js} +12 -19
  14. package/dist/{experiments-B7vRMK5T.js.map → experiments-DyecjEut.js.map} +1 -1
  15. package/dist/{feedback-refetch-interval-XD5FVc2k.cjs → feedback-refetch-interval-BBcT9r8s.cjs} +3 -4
  16. package/dist/{feedback-refetch-interval-XD5FVc2k.cjs.map → feedback-refetch-interval-BBcT9r8s.cjs.map} +1 -1
  17. package/dist/{feedback-refetch-interval-DLHzQoVV.js → feedback-refetch-interval-C12Nzb2r.js} +3 -4
  18. package/dist/{feedback-refetch-interval-DLHzQoVV.js.map → feedback-refetch-interval-C12Nzb2r.js.map} +1 -1
  19. package/dist/hooks/agents/index.cjs +19 -37
  20. package/dist/hooks/agents/index.cjs.map +1 -1
  21. package/dist/hooks/agents/index.js +19 -37
  22. package/dist/hooks/agents/index.js.map +1 -1
  23. package/dist/hooks/auth/index.cjs +11 -21
  24. package/dist/hooks/auth/index.cjs.map +1 -1
  25. package/dist/hooks/auth/index.js +11 -21
  26. package/dist/hooks/auth/index.js.map +1 -1
  27. package/dist/hooks/capabilities/index.cjs +11 -21
  28. package/dist/hooks/capabilities/index.cjs.map +1 -1
  29. package/dist/hooks/capabilities/index.js +11 -21
  30. package/dist/hooks/capabilities/index.js.map +1 -1
  31. package/dist/hooks/configuration/index.cjs +2 -3
  32. package/dist/hooks/configuration/index.js +2 -3
  33. package/dist/hooks/datasets/index.cjs +12 -21
  34. package/dist/hooks/datasets/index.cjs.map +1 -1
  35. package/dist/hooks/datasets/index.js +12 -21
  36. package/dist/hooks/datasets/index.js.map +1 -1
  37. package/dist/hooks/embedders/index.cjs +2 -3
  38. package/dist/hooks/embedders/index.js +2 -3
  39. package/dist/hooks/experiments/index.cjs +1 -1
  40. package/dist/hooks/experiments/index.js +1 -1
  41. package/dist/hooks/feedback/index.cjs +3 -4
  42. package/dist/hooks/feedback/index.js +3 -4
  43. package/dist/hooks/llm/index.cjs +2 -3
  44. package/dist/hooks/llm/index.js +2 -3
  45. package/dist/hooks/logs/index.cjs +4 -5
  46. package/dist/hooks/logs/index.js +4 -5
  47. package/dist/hooks/mcps/index.cjs +8 -15
  48. package/dist/hooks/mcps/index.cjs.map +1 -1
  49. package/dist/hooks/mcps/index.js +8 -15
  50. package/dist/hooks/mcps/index.js.map +1 -1
  51. package/dist/hooks/memory/index.cjs +5 -9
  52. package/dist/hooks/memory/index.cjs.map +1 -1
  53. package/dist/hooks/memory/index.js +5 -9
  54. package/dist/hooks/memory/index.js.map +1 -1
  55. package/dist/hooks/metrics/index.cjs +19 -36
  56. package/dist/hooks/metrics/index.cjs.map +1 -1
  57. package/dist/hooks/metrics/index.js +19 -36
  58. package/dist/hooks/metrics/index.js.map +1 -1
  59. package/dist/hooks/processors/index.cjs +2 -3
  60. package/dist/hooks/processors/index.js +2 -3
  61. package/dist/hooks/prompt-blocks/index.cjs +3 -5
  62. package/dist/hooks/prompt-blocks/index.cjs.map +1 -1
  63. package/dist/hooks/prompt-blocks/index.js +3 -5
  64. package/dist/hooks/prompt-blocks/index.js.map +1 -1
  65. package/dist/hooks/query/index.cjs +2 -3
  66. package/dist/hooks/query/index.js +2 -3
  67. package/dist/hooks/review/index.cjs +4 -6
  68. package/dist/hooks/review/index.cjs.map +1 -1
  69. package/dist/hooks/review/index.js +4 -6
  70. package/dist/hooks/review/index.js.map +1 -1
  71. package/dist/hooks/schedules/index.cjs +6 -10
  72. package/dist/hooks/schedules/index.cjs.map +1 -1
  73. package/dist/hooks/schedules/index.js +6 -10
  74. package/dist/hooks/schedules/index.js.map +1 -1
  75. package/dist/hooks/scores/index.cjs +8 -13
  76. package/dist/hooks/scores/index.cjs.map +1 -1
  77. package/dist/hooks/scores/index.js +8 -13
  78. package/dist/hooks/scores/index.js.map +1 -1
  79. package/dist/hooks/templates/index.cjs +2 -3
  80. package/dist/hooks/templates/index.js +2 -3
  81. package/dist/hooks/tool-providers/index.cjs +10 -19
  82. package/dist/hooks/tool-providers/index.cjs.map +1 -1
  83. package/dist/hooks/tool-providers/index.js +10 -19
  84. package/dist/hooks/tool-providers/index.js.map +1 -1
  85. package/dist/hooks/tools/index.cjs +3 -5
  86. package/dist/hooks/tools/index.cjs.map +1 -1
  87. package/dist/hooks/tools/index.js +3 -5
  88. package/dist/hooks/tools/index.js.map +1 -1
  89. package/dist/hooks/traces/index.cjs +28 -51
  90. package/dist/hooks/traces/index.cjs.map +1 -1
  91. package/dist/hooks/traces/index.js +28 -51
  92. package/dist/hooks/traces/index.js.map +1 -1
  93. package/dist/hooks/vectors/index.cjs +2 -3
  94. package/dist/hooks/vectors/index.js +2 -3
  95. package/dist/hooks/voice/index.cjs +3 -4
  96. package/dist/hooks/voice/index.js +3 -4
  97. package/dist/hooks/workflows/index.cjs +7 -11
  98. package/dist/hooks/workflows/index.cjs.map +1 -1
  99. package/dist/hooks/workflows/index.js +7 -11
  100. package/dist/hooks/workflows/index.js.map +1 -1
  101. package/dist/hooks/workspace/index.cjs +12 -22
  102. package/dist/hooks/workspace/index.cjs.map +1 -1
  103. package/dist/hooks/workspace/index.js +12 -22
  104. package/dist/hooks/workspace/index.js.map +1 -1
  105. package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
  106. package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
  107. package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
  108. package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
  109. package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
  110. package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
  111. package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
  112. package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
  113. package/dist/index.cjs +7 -9
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.js +7 -9
  116. package/dist/index.js.map +1 -1
  117. package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
  118. package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
  119. package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
  120. package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
  121. package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
  122. package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
  123. package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
  124. package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
  125. package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
  126. package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
  127. package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
  128. package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
  129. package/dist/ui/index.cjs +15 -30
  130. package/dist/ui/index.cjs.map +1 -1
  131. package/dist/ui/index.js +14 -28
  132. package/dist/ui/index.js.map +1 -1
  133. package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
  134. package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
  135. package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
  136. package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
  137. package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
  138. package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
  139. package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
  140. package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
  141. package/package.json +17 -17
@@ -1,8 +1,8 @@
1
- import { n as useMastraClient } from "../../mastra-client-context-Bx_g84YB.js";
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
- //#region src/hooks/agents/use-agent-messages.ts
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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
- //#endregion
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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"}