@mastra/react 1.13.0-alpha.3 → 1.13.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) 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 +71 -54
  90. package/dist/hooks/traces/index.cjs.map +1 -1
  91. package/dist/hooks/traces/index.d.ts +2 -0
  92. package/dist/hooks/traces/index.d.ts.map +1 -1
  93. package/dist/hooks/traces/index.js +70 -55
  94. package/dist/hooks/traces/index.js.map +1 -1
  95. package/dist/hooks/traces/use-span-aggregate.d.ts +16 -0
  96. package/dist/hooks/traces/use-span-aggregate.d.ts.map +1 -0
  97. package/dist/hooks/traces/use-trace-aggregate.d.ts +17 -0
  98. package/dist/hooks/traces/use-trace-aggregate.d.ts.map +1 -0
  99. package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts +4 -2
  100. package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts.map +1 -1
  101. package/dist/hooks/vectors/index.cjs +2 -3
  102. package/dist/hooks/vectors/index.js +2 -3
  103. package/dist/hooks/voice/index.cjs +3 -4
  104. package/dist/hooks/voice/index.js +3 -4
  105. package/dist/hooks/workflows/index.cjs +7 -11
  106. package/dist/hooks/workflows/index.cjs.map +1 -1
  107. package/dist/hooks/workflows/index.js +7 -11
  108. package/dist/hooks/workflows/index.js.map +1 -1
  109. package/dist/hooks/workspace/index.cjs +12 -22
  110. package/dist/hooks/workspace/index.cjs.map +1 -1
  111. package/dist/hooks/workspace/index.js +12 -22
  112. package/dist/hooks/workspace/index.js.map +1 -1
  113. package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
  114. package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
  115. package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
  116. package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
  117. package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
  118. package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
  119. package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
  120. package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
  121. package/dist/index.cjs +7 -9
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.js +7 -9
  124. package/dist/index.js.map +1 -1
  125. package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
  126. package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
  127. package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
  128. package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
  129. package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
  130. package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
  131. package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
  132. package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
  133. package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
  134. package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
  135. package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
  136. package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
  137. package/dist/ui/index.cjs +15 -30
  138. package/dist/ui/index.cjs.map +1 -1
  139. package/dist/ui/index.js +14 -28
  140. package/dist/ui/index.js.map +1 -1
  141. package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
  142. package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
  143. package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
  144. package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
  145. package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
  146. package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
  147. package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
  148. package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
  149. package/package.json +19 -19
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_mastra_client_context = require("../../mastra-client-context-DzX3f0RF.cjs");
2
+ const require_mastra_client_context = require("../../mastra-client-context-DX8wJM9p.cjs");
3
3
  let react = require("react");
4
4
  let _tanstack_react_query = require("@tanstack/react-query");
5
5
  let _mastra_core_di = require("@mastra/core/di");
6
- //#region src/hooks/agents/use-agent-messages.ts
6
+ // src/hooks/agents/use-agent-messages.ts
7
7
  const PER_PAGE = 40;
8
8
  const NEWEST_PAGE = "";
9
9
  const createdAtMs = (message) => new Date(message.createdAt).getTime();
@@ -54,8 +54,7 @@ const useAgentMessages = ({ threadId, agentId, memory, requestContext, queryOpti
54
54
  ...queryOptions
55
55
  });
56
56
  };
57
- //#endregion
58
- //#region src/hooks/agents/use-agent-plan.ts
57
+ // src/hooks/agents/use-agent-plan.ts
59
58
  function useAgentPlan({ agentId, path, agentVersionId, requestContext, queryOptions }) {
60
59
  const client = require_mastra_client_context.useMastraClient();
61
60
  return (0, _tanstack_react_query.useQuery)({
@@ -73,8 +72,7 @@ function useAgentPlan({ agentId, path, agentVersionId, requestContext, queryOpti
73
72
  ...queryOptions
74
73
  });
75
74
  }
76
- //#endregion
77
- //#region src/hooks/agents/use-background-tasks.ts
75
+ // src/hooks/agents/use-background-tasks.ts
78
76
  const EVENT_STATUS_MAP = {
79
77
  "background-task-running": "running",
80
78
  "background-task-output": "running",
@@ -207,8 +205,7 @@ const useGetBackgroundTaskById = ({ backgroundTaskId, queryOptions }) => {
207
205
  ...queryOptions
208
206
  });
209
207
  };
210
- //#endregion
211
- //#region src/hooks/agents/use-browser-session-probe.ts
208
+ // src/hooks/agents/use-browser-session-probe.ts
212
209
  const browserSessionProbeQueryKey = (agentId, threadId) => [
213
210
  "browser-session-probe",
214
211
  agentId,
@@ -264,8 +261,7 @@ function useBrowserSessionProbe({ agentId, threadId, queryOptions }) {
264
261
  ...queryOptions
265
262
  });
266
263
  }
267
- //#endregion
268
- //#region src/hooks/agents/is-model-not-allowed.ts
264
+ // src/hooks/agents/is-model-not-allowed.ts
269
265
  /**
270
266
  * The wire-level error code the server emits on a 422 when a model is blocked
271
267
  * by the admin's builder policy. Kept as a local literal so the browser bundle
@@ -290,8 +286,7 @@ function isModelNotAllowedError(err) {
290
286
  offendingLabel: errorBody.offendingLabel
291
287
  };
292
288
  }
293
- //#endregion
294
- //#region src/hooks/agents/use-stored-agents.ts
289
+ // src/hooks/agents/use-stored-agents.ts
295
290
  const useStoredAgents = ({ queryOptions, ...params } = {}) => {
296
291
  const client = require_mastra_client_context.useMastraClient();
297
292
  const listParams = Object.keys(params).length > 0 ? params : void 0;
@@ -404,8 +399,7 @@ const useStoredAgentMutations = ({ agentId, requestContext, queryOptions } = {})
404
399
  })
405
400
  };
406
401
  };
407
- //#endregion
408
- //#region src/hooks/agents/use-agent-skills.ts
402
+ // src/hooks/agents/use-agent-skills.ts
409
403
  /**
410
404
  * Hook to read and mutate the skills config for a stored agent.
411
405
  *
@@ -448,8 +442,7 @@ function useAgentSkills({ agentId, requestContext, queryOptions } = {}) {
448
442
  })
449
443
  };
450
444
  }
451
- //#endregion
452
- //#region src/hooks/agents/use-agent-versions.ts
445
+ // src/hooks/agents/use-agent-versions.ts
453
446
  /**
454
447
  * Hook to list versions of a stored agent
455
448
  *
@@ -564,8 +557,7 @@ const useCompareAgentVersions = ({ agentId, fromVersionId, toVersionId, requestC
564
557
  ...queryOptions
565
558
  });
566
559
  };
567
- //#endregion
568
- //#region src/hooks/agents/use-agent-working-memory.ts
560
+ // src/hooks/agents/use-agent-working-memory.ts
569
561
  function parseJsonString(jsonString) {
570
562
  try {
571
563
  return JSON.stringify(JSON.parse(jsonString), null, 2);
@@ -661,8 +653,7 @@ function useAgentWorkingMemory(agentId, threadId, resourceId, requestContext) {
661
653
  updateWorkingMemory
662
654
  };
663
655
  }
664
- //#endregion
665
- //#region src/hooks/agents/use-agent-workspace.ts
656
+ // src/hooks/agents/use-agent-workspace.ts
666
657
  /**
667
658
  * Hook to read and mutate the workspace reference for a stored agent.
668
659
  *
@@ -702,8 +693,7 @@ function useAgentWorkspace({ agentId, requestContext, queryOptions } = {}) {
702
693
  })
703
694
  };
704
695
  }
705
- //#endregion
706
- //#region src/hooks/agents/use-agent.ts
696
+ // src/hooks/agents/use-agent.ts
707
697
  /**
708
698
  * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
709
699
  */
@@ -720,8 +710,7 @@ const useAgent = ({ agentId, requestContext, queryOptions } = {}) => {
720
710
  ...queryOptions
721
711
  });
722
712
  };
723
- //#endregion
724
- //#region src/hooks/agents/use-agents-model-providers.ts
713
+ // src/hooks/agents/use-agents-model-providers.ts
725
714
  const useAgentsModelProviders = ({ queryOptions } = {}) => {
726
715
  const client = require_mastra_client_context.useMastraClient();
727
716
  return (0, _tanstack_react_query.useQuery)({
@@ -731,8 +720,7 @@ const useAgentsModelProviders = ({ queryOptions } = {}) => {
731
720
  ...queryOptions
732
721
  });
733
722
  };
734
- //#endregion
735
- //#region src/hooks/agents/use-agents.ts
723
+ // src/hooks/agents/use-agents.ts
736
724
  const useAgents = ({ requestContext, queryOptions } = {}) => {
737
725
  const client = require_mastra_client_context.useMastraClient();
738
726
  return (0, _tanstack_react_query.useQuery)({
@@ -797,8 +785,7 @@ const useResetAgentModel = ({ agentId, queryOptions }) => {
797
785
  ...queryOptions
798
786
  });
799
787
  };
800
- //#endregion
801
- //#region src/hooks/agents/use-close-browser.ts
788
+ // src/hooks/agents/use-close-browser.ts
802
789
  /**
803
790
  * Mutation hook for closing an agent's browser session.
804
791
  */
@@ -812,8 +799,7 @@ function useCloseBrowser({ queryOptions } = {}) {
812
799
  ...queryOptions
813
800
  });
814
801
  }
815
- //#endregion
816
- //#region src/hooks/agents/use-preview-instructions.ts
802
+ // src/hooks/agents/use-preview-instructions.ts
817
803
  /**
818
804
  * Normalize blocks to API format.
819
805
  * Form-format ref blocks have `{ type: 'prompt_block_ref', promptBlockId }`,
@@ -857,8 +843,7 @@ function usePreviewInstructions({ blocks, requestContext, queryOptions }) {
857
843
  ...queryOptions
858
844
  });
859
845
  }
860
- //#endregion
861
- //#region src/hooks/agents/use-stored-skills.ts
846
+ // src/hooks/agents/use-stored-skills.ts
862
847
  function useStoredSkills({ queryOptions } = {}) {
863
848
  const client = require_mastra_client_context.useMastraClient();
864
849
  return (0, _tanstack_react_query.useQuery)({
@@ -867,8 +852,7 @@ function useStoredSkills({ queryOptions } = {}) {
867
852
  ...queryOptions
868
853
  });
869
854
  }
870
- //#endregion
871
- //#region src/hooks/agents/use-channels.ts
855
+ // src/hooks/agents/use-channels.ts
872
856
  const useChannelPlatforms = ({ queryOptions } = {}) => {
873
857
  const client = require_mastra_client_context.useMastraClient();
874
858
  return (0, _tanstack_react_query.useQuery)({
@@ -952,8 +936,7 @@ const useDisconnectChannel = ({ platform, queryOptions }) => {
952
936
  ...queryOptions
953
937
  });
954
938
  };
955
- //#endregion
956
- //#region src/hooks/agents/use-execute-agent-tool.ts
939
+ // src/hooks/agents/use-execute-agent-tool.ts
957
940
  const useExecuteAgentTool = ({ queryOptions } = {}) => {
958
941
  const client = require_mastra_client_context.useMastraClient();
959
942
  return (0, _tanstack_react_query.useMutation)({
@@ -970,7 +953,6 @@ const useExecuteAgentTool = ({ queryOptions } = {}) => {
970
953
  ...queryOptions
971
954
  });
972
955
  };
973
- //#endregion
974
956
  exports.browserSessionProbeQueryKey = browserSessionProbeQueryKey;
975
957
  exports.isModelNotAllowedError = isModelNotAllowedError;
976
958
  exports.useActivateAgentVersion = useActivateAgentVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["useMastraClient","useInfiniteQuery","skipToken","useMastraClient","useQuery","useMastraClient","useState","useRef","useMemo","useCallback","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useQueryClient","useMemo","useMutation","useMastraClient","useQuery","skipToken","useQueryClient","useMutation","useMastraClient","useState","useRef","useCallback","useMastraClient","useQueryClient","useMemo","useMutation","useMastraClient","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useMutation","useMastraClient","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useMutation","RequestContext"],"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.cjs","names":["useMastraClient","useInfiniteQuery","skipToken","useMastraClient","useQuery","useMastraClient","useState","useRef","useMemo","useCallback","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useQueryClient","useMemo","useMutation","useMastraClient","useQuery","skipToken","useQueryClient","useMutation","useMastraClient","useState","useRef","useCallback","useMastraClient","useQueryClient","useMemo","useMutation","useMastraClient","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useMutation","useMastraClient","useQuery","useMastraClient","useQuery","useMastraClient","useQuery","useQueryClient","useMutation","useMastraClient","useMutation","RequestContext"],"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":";;;;;;AAmBA,MAAM,WAAW;AAEjB,MAAM,cAAc;AAEpB,MAAM,eAAe,YAA6B,IAAI,KAAK,QAAQ,SAAS,CAAC,CAAC,QAAQ;AAEtF,MAAM,eAAe,GAAoB,MAAuB,YAAY,CAAC,IAAI,YAAY,CAAC;AAE9F,MAAa,oBAA+C,EAC1D,UACA,SACA,QACA,gBACA,mBACkC;CAClC,MAAM,SAASA,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,iBAAAA,CAAiB;EACtB,UAAU;GAAC;GAAU;GAAY;GAAU;GAAS;EAAc;EAClE,kBAAkB;EAClB,SACE,UAAU,YACL,EAAE,WAAW,gBACZ,OAAO,mBAAmB,UAAU;GAClC;GACA;GACA,wBAAwB;GACxB,SAAS;GACT,SAAS;IAAE,OAAO;IAAa,WAAW;GAAO;GAGjD,QAAQ,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,KAAK,SAAS,EAAE,EAAE,IAAI,KAAA;EACpE,CAAC,IACHC,sBAAAA;EACN,mBAAmB,UAAU,WAAW,kBAAkB;GACxD,IAAI,CAAC,SAAS,WAAW,SAAS,SAAS,WAAW,GAAG,OAAO,KAAA;GAChE,MAAM,OAAO,IAAI,KAAK,KAAK,IAAI,GAAG,SAAS,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY;GAEnF,OAAO,SAAS,gBAAgB,KAAA,IAAY;EAC9C;EACA,SAAS,SAAgB;GACvB,MAAM,uBAAO,IAAI,IAAY;GAC7B,MAAM,WAAW,KAAK,MACnB,SAAQ,SAAQ,KAAK,QAAQ,CAAC,CAC9B,QAAO,YAAW;IACjB,IAAI,KAAK,IAAI,QAAQ,EAAE,GAAG,OAAO;IACjC,KAAK,IAAI,QAAQ,EAAE;IACnB,OAAO;GACT,CAAC,CAAC,CACD,KAAK,WAAW;GACnB,OAAO;IAAE,GAAG;IAAM;GAAS;EAC7B;EACA,WAAW;EACX,QAAQ;EACR,OAAO;EACP,sBAAsB;EACtB,GAAG;CACL,CAAC;AACH;;AC7DA,SAAgB,aAAwC,EACtD,SACA,MACA,gBACA,gBACA,gBAC2D;CAC3D,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAc;GAAS;GAAgB;GAAM;EAAc;EACtE,eAAe;GAEb,QADc,iBAAiB,OAAO,SAAS,SAAS,EAAE,WAAW,eAAe,CAAC,IAAI,OAAO,SAAS,OAAO,EAAA,CACnG,SAAS,MAAM,cAAc;EAC5C;EACA,OAAO;EACP,GAAG;CACL,CAAC;AACH;;AC6CA,MAAM,mBAAoE;CACxE,2BAA2B;CAC3B,0BAA0B;CAC1B,6BAA6B;CAC7B,0BAA0B;CAC1B,6BAA6B;CAC7B,6BAA6B;CAC7B,2BAA2B;AAC7B;AAEA,SAAgB,wBAAwB,UAA0C,CAAC,GAAkC;CACnH,MAAM,EAAE,UAAU,MAAM,SAAS,OAAO,UAAU,YAAY,WAAW;CACzE,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,MAAM,CAAC,OAAO,aAAA,GAAYC,MAAAA,SAAAA,CAA8C,CAAC,CAAC;CAC1E,MAAM,CAAC,aAAa,mBAAA,GAAkBA,MAAAA,SAAAA,CAAS,KAAK;CACpD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAuB,IAAI;CACrD,MAAM,YAAA,GAAWC,MAAAA,OAAAA,CAA+B,IAAI;CACpD,MAAM,aAAA,GAAYA,MAAAA,OAAAA,CAA0C,IAAI;CAChE,MAAM,iBAAA,GAAgBA,MAAAA,OAAAA,CAAO,CAAC;CAE9B,MAAM,gBAAA,GAAeC,MAAAA,QAAAA,OAAc;EACjC,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,QAAO,SAAQ,KAAK,WAAW,SAAS;CACtE,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,kBAAA,GAAiBA,MAAAA,QAAAA,OAAc;EACnC,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,QAAO,SAAQ,KAAK,WAAW,WAAW;CACxE,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,eAAA,GAAcA,MAAAA,QAAAA,OAAc;EAChC,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,QAAO,SAAQ,KAAK,WAAW,QAAQ;CACrE,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,WAAA,GAAUC,MAAAA,YAAAA,OAAkB;EAChC,UAAU,SAAS,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC;EAC1C,UAAU,UAAU;EACpB,SAAS,SAAS,MAAM;EACxB,SAAS,UAAU;EACnB,eAAe,KAAK;CACtB,GAAG,CAAC,CAAC;CAEL,MAAM,WAAA,GAAUA,MAAAA,YAAAA,CAAY,YAAY;EACtC,MAAM,MAAM,EAAE,cAAc;EAC5B,QAAQ;EACR,SAAS,IAAI;EAEb,MAAM,aAAa,IAAI,gBAAgB;EACvC,SAAS,UAAU;EAEnB,IAAI;GACF,MAAM,SAAS,MAAM,OAAO,sBAAsB;IAAE;IAAS;IAAO;IAAU;IAAY;GAAO,CAAC;GAElG,IAAI,CAAC,QAAQ;IACX,yBAAS,IAAI,MAAM,0BAA0B,CAAC;IAC9C;GACF;GAEA,IAAI,QAAQ,cAAc,SACxB,eAAe,IAAI;GAIrB,MAAM,SAAS,OAAO,UAAU;GAChC,UAAU,UAAU;GAEpB,OAAO,CAAC,WAAW,OAAO,SAAS;IACjC,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;IAC1C,IAAI,MAAM;IAEV,MAAM,QAAQ;IACd,IAAI,MAAM,SAAS,0BACjB,UAAS,UAAS;KAChB,GAAG;MACF,MAAM,QAAQ,SAAS;MACtB,GAAG,KAAK,MAAM,QAAQ;MACtB,GAAG,MAAM;MACT,QAAQ,iBAAiB,MAAM;MAC/B,OACG,UAAU,MAAM,UAAU,MAAM,QAAQ,OAAO,KAAA,MAAc,KAAK,MAAM,QAAQ,OAAO,EAAE,QAAQ,CAAC;KACvG;IACF,EAAE;GAEN;EACF,SAAS,KAAU;GACjB,IAAI,KAAK,SAAS,cACZ;QAAA,QAAQ,cAAc,SACxB,SAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;GAAA;EAGlE,UAAU;GACR,IAAI,QAAQ,cAAc,SACxB,eAAe,KAAK;EAExB;CACF,GAAG;EAAC;EAAQ;EAAS;EAAO;EAAU;EAAY;EAAQ;CAAO,CAAC;CAElE,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,SAAS;GACZ,QAAQ;GACR;EACF;EAEA,QAAa;EACb,OAAO;CACT,GAAG;EAAC;EAAS;EAAS;CAAO,CAAC;CAE9B,MAAM,cAAA,GAAaA,MAAAA,YAAAA,OAAkB;EACnC,QAAQ;CACV,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,aAAA,GAAYA,MAAAA,YAAAA,OAAkB;EAClC,QAAa;CACf,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,qCAAqC;EACzC,UAAS,SAAQ;GACf,MAAM,WAAW,EAAE,GAAG,KAAK;GAC3B,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAQ,SAAQ;IACtC,IACE,KAAK,WAAW,eAChB,KAAK,WAAW,YAChB,KAAK,WAAW,eAChB,KAAK,WAAW,aAEhB,OAAO,SAAS,KAAK;GAEzB,CAAC;GACD,OAAO;EACT,CAAC;CACH;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAIA,MAAa,4BAA4D,EACvE,kBACA,mBAIkC;CAClC,MAAM,SAASJ,8BAAAA,gBAAgB;CAC/B,QAAA,GAAOK,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,mBAAmB,gBAAgB;EAC9C,eAAe,OAAO,kBAAkB,gBAAgB;EACxD,GAAG;CACL,CAAC;AACH;;AC7NA,MAAa,+BAA+B,SAAkB,aAC5D;CAAC;CAAyB;CAAS;AAAQ;AAE7C,MAAM,kBAAuC;CAAE,YAAY;CAAM,qBAAqB;AAAK;AAE3F,MAAM,mBAAmB,UAA4B;CACnD,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO;CAChD,IAAI,YAAY,SAAU,MAA8B,WAAW,KAAK,OAAO;CAC/E,IAAI,gBAAgB,SAAU,MAAkC,eAAe,KAAK,OAAO;CAC3F,OAAO;AACT;;;;;;;;;;;;;;;;;;;AAoBA,SAAgB,uBAAoD,EAClE,SACA,UACA,gBACqE;CACrE,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAA4C;EACjD,UAAU,4BAA4B,SAAS,QAAQ;EACvD,SAAS,YAAY;GACnB,IAAI,CAAC,SACH,OAAO;IAAE,YAAY;IAAO,qBAAqB;GAAM;GAGzD,IAAI;IACF,OAAO,MAAM,OAAO,SAAS,OAAO,CAAC,CAAC,eAAe,QAAQ;GAC/D,SAAS,OAAO;IACd,IAAI,gBAAgB,KAAK,GAEvB,OAAO;IAET,MAAM;GACR;EACF;EAKA,sBAAsB;EACtB,WAAW;EACX,OAAO;EACP,GAAG;CACL,CAAC;AACH;;;;;;;AC3EA,MAAM,yBAAyB;;;;;;AAa/B,SAAgB,uBAAuB,KAA6C;CAClF,IAAI,CAAC,OAAO,OAAO,QAAQ,UAAU,OAAO;CAC5C,MAAM,YAAY;CAClB,IAAI,UAAU,WAAW,KAAK,OAAO;CACrC,MAAM,OAAO,UAAU;CAEvB,IADa,MAAM,OAAO,SACb,wBAAwB,OAAO;CAC5C,MAAM,YAAY,KAAM;CAKxB,OAAO;EACL,SAAS,UAAU,WAAW,UAAU,WAAW;EACnD,WAAW,UAAU;EACrB,gBAAgB,UAAU;CAC5B;AACF;;ACpBA,MAAa,mBAAqD,EAChE,cACA,GAAG,WAGD,CAAC,MAAoC;CACvC,MAAM,SAASC,8BAAAA,gBAAgB;CAC/B,MAAM,aAAa,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,IAAI,SAAS,KAAA;CAE7D,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,iBAAiB,UAAU;EACtC,eAAe,OAAO,iBAAiB,UAAU;EACjD,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,kBAAsD,EACjE,SACA,QACA,gBACA,iBAME,CAAC,MAAoC;CACvC,MAAM,SAASD,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAgB;GAAS;GAAQ;EAAc;EAC1D,SAAS,YAAY;GACnB,IAAI,CAAC,SAAS,OAAO;GACrB,IAAI;IACF,OAAO,MAAM,OAAO,eAAe,OAAO,CAAC,CAAC,QAAQ,gBAAgB,EAAE,OAAO,CAAC;GAChF,SAAS,OAAO;IAEd,IAAI,SAAS,OAAO,UAAU,YAAY,YAAY,SAAU,MAA6B,WAAW,KACtG,OAAO;IAET,MAAM;GACR;EACF;EACA,OAAO;EACP,GAAG;CACL,CAAC;AACH;;;;AAOA,MAAa,4BAAmE,EAC9E,SACA,gBACA,iBAKE,CAAC,MAAoC;CACvC,MAAM,SAASD,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAA2B;GAAS;EAAc;EAC7D,eAAe,OAAO,eAAe,OAAQ,CAAC,CAAC,WAAW,cAAc;EACxE,OAAO;EACP,GAAG;CACL,CAAC;AACH;AAEA,MAAa,2BAA2B,EACtC,SACA,gBACA,iBASE,CAAC,MAAM;CACT,MAAM,SAASD,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAKnC,MAAM,2CAA2C,QAAiB;EAChE,IAAI,uBAAuB,GAAG,GAC5B,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;CAEzE;CA2DA,OAAO;EACL,oBAAA,GA1DqBC,sBAAAA,YAAAA,CAAY;GACjC,aAAa,WAAoC,OAAO,kBAAkB,MAAM;GAChF,YAAW,YAAW;IAKpB,YAAY,aAAa;KAAC;KAAgB,QAAQ;KAAI;KAAS;IAAc,GAAG,OAAO;IACvF,YAAY,aAAa;KAAC;KAAgB,QAAQ;KAAI,KAAA;KAAW;IAAc,GAAG,OAAO;IAEzF,YAAiB,kBAAkB,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC;IAClE,YAAiB,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;IAG3D,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,QAAQ,EAAE,EAAE,CAAC;GACxE;GACA,SAAS;GACT,GAAG,cAAc;EACnB,CAwCkC;EAChC,oBAAA,GAvCqBA,sBAAAA,YAAAA,CAAY;GACjC,aAAa,WAAoC;IAC/C,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,gCAAgC;IAC9D,OAAO,OAAO,eAAe,OAAO,CAAC,CAAC,OAAO,QAAQ,cAAc;GACrE;GACA,iBAAiB;IAEf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC;IAClE,YAAiB,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;IAE3D,IAAI,SAAS;KACX,YAAiB,kBAAkB,EAAE,UAAU,CAAC,gBAAgB,OAAO,EAAE,CAAC;KAC1E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;IACrE;GACF;GACA,SAAS;GACT,GAAG,cAAc;EACnB,CAsBkC;EAChC,oBAAA,GArBqBA,sBAAAA,YAAAA,CAAY;GACjC,kBAAkB;IAChB,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,gCAAgC;IAC9D,OAAO,OAAO,eAAe,OAAO,CAAC,CAAC,OAAO,cAAc;GAC7D;GACA,iBAAiB;IAEf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC;IAClE,YAAiB,kBAAkB,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;IAE3D,IAAI,SAAS;KACX,YAAY,cAAc,EAAE,UAAU,CAAC,gBAAgB,OAAO,EAAE,CAAC;KACjE,YAAY,cAAc,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;IAC5D;GACF;GACA,GAAG,cAAc;EACnB,CAKkC;CAClC;AACF;;;;;;;;;ACnKA,SAAgB,eAAe,EAC7B,SACA,gBACA,iBAOE,CAAC,GAAG;CACN,MAAM,SAASC,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CAEnC,MAAM,EAAE,MAAM,UAAU,eAAe;EAAE;EAAS,QAAQ;EAAS,cAAc,EAAE,SAAS,QAAQ,OAAO,EAAE;CAAE,CAAC;CA+BhH,OAAO;EAAE,SAAA,GA7BMC,MAAAA,QAAAA,OAAsD;GACnE,IAAI,CAAC,OAAO,QAAQ,OAAO,CAAC;GAE5B,IAAI,MAAM,QAAQ,MAAM,MAAM,GAAG;IAC/B,MAAM,SAAiD,CAAC;IACxD,KAAK,MAAM,WAAW,MAAM,QAC1B,OAAO,OAAO,QAAQ,QAAQ,KAAK;IAErC,OAAO;GACT;GACA,OAAO,MAAM;EACf,GAAG,CAAC,OAAO,MAAM,CAkBH;EAAG,eAAA,GAhBIC,sBAAAA,YAAAA,CAAY;GAC/B,aAAa,cAAkE;IAC7E,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,qBAAqB;IACnD,MAAM,SAAkC,EAAE,QAAQ,UAAU;IAC5D,OAAO,OAAO,eAAe,OAAO,CAAC,CAAC,OAAO,QAAQ,cAAc;GACrE;GACA,iBAAiB;IACf,IAAI,SAAS;KACX,YAAiB,kBAAkB,EAAE,UAAU,CAAC,gBAAgB,OAAO,EAAE,CAAC;KAC1E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;KACnE,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;IAC9E;GACF;GACA,GAAG,cAAc;EACnB,CAE4B;CAAE;AAChC;;;;;;;AChCA,MAAa,oBAAuD,EAClE,SACA,QACA,gBACA,mBACiE;CACjE,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAkD;EACvD,UAAU;GAAC;GAAkB;GAAS;GAAQ;EAAc;EAC5D,SAAS,gBAAgB,OAAO,eAAe,OAAO,CAAC,CAAC,aAAa,QAAQ,cAAc,IAAIC,sBAAAA;EAC/F,GAAG;CACL,CAAC;AACH;;;;;;AAOA,MAAa,mBAAiD,EAC5D,SACA,WACA,gBACA,mBAMkC;CAClC,MAAM,SAASF,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAA6C;EAClD,UAAU;GAAC;GAAiB;GAAS;GAAW;EAAc;EAC9D,eAAe,OAAO,eAAe,OAAO,CAAC,CAAC,WAAW,WAAW,cAAc;EAClF,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,yBAAyB,EACpC,SACA,gBACA,mBAKI;CACJ,MAAM,SAASD,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcG,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAA+E;EACpF,aAAa,WACX,OAAO,eAAe,OAAO,CAAC,CAAC,cAAc,QAAQ,cAAc;EACrE,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;GAC5E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,2BAA2B,EACtC,SACA,gBACA,mBAKI;CACJ,MAAM,SAASJ,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcG,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAyD;EAC9D,aAAa,cAAsB,OAAO,eAAe,OAAO,CAAC,CAAC,gBAAgB,WAAW,cAAc;EAC3G,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;GAC5E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,0BAA0B,EACrC,SACA,gBACA,mBAKI;CACJ,MAAM,SAASJ,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcG,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAiD;EACtD,aAAa,cAAsB,OAAO,eAAe,OAAO,CAAC,CAAC,eAAe,WAAW,cAAc;EAC1G,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;GAC5E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,yBAAyB,EACpC,SACA,gBACA,mBAKI;CACJ,MAAM,SAASJ,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcG,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAuD;EAC5D,aAAa,cAAsB,OAAO,eAAe,OAAO,CAAC,CAAC,cAAc,WAAW,cAAc;EACzG,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;EAC9E;EACA,GAAG;CACL,CAAC;AACH;;;;;;AAOA,MAAa,2BAA4D,EACvE,SACA,eACA,aACA,gBACA,mBAOkC;CAClC,MAAM,SAASJ,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAgD;EACrD,UAAU;GAAC;GAA0B;GAAS;GAAe;GAAa;EAAc;EACxF,eAAe,OAAO,eAAe,OAAO,CAAC,CAAC,gBAAgB,eAAe,aAAa,cAAc;EACxG,GAAG;CACL,CAAC;AACH;;AC9LA,SAAS,gBAAgB,YAAyB;CAChD,IAAI;EACF,OAAO,KAAK,UAAU,KAAK,MAAM,UAAU,GAAG,MAAM,CAAC;CACvD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,sBACd,SACA,UACA,YACA,gBACA;CACA,MAAM,SAASI,8BAAAA,gBAAgB;CAC/B,MAAM,CAAC,cAAc,oBAAA,GAAmBC,MAAAA,SAAAA,CAAS,KAAK;CACtD,MAAM,CAAC,mBAAmB,yBAAA,GAAwBA,MAAAA,SAAAA,CAAwB,IAAI;CAC9E,MAAM,CAAC,qBAAqB,2BAAA,GAA0BA,MAAAA,SAAAA,CAAgC,QAAQ;CAC9F,MAAM,CAAC,qBAAqB,2BAAA,GAA0BA,MAAAA,SAAAA,CAA8B,UAAU;CAC9F,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,CAAS,IAAI;CAC/C,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,KAAK;CAClD,MAAM,iBAAA,GAAgBC,MAAAA,OAAAA,CAAO,CAAC;CAE9B,MAAM,WAAA,GAAUC,MAAAA,YAAAA,CAAY,YAAY;EACtC,MAAM,YAAY,EAAE,cAAc;EAClC,aAAa,IAAI;EACjB,IAAI;GACF,IAAI,CAAC,WAAW,CAAC,UAAU;IACzB,qBAAqB,IAAI;IACzB,aAAa,KAAK;IAClB;GACF;GACA,MAAM,MAAM,MAAM,OAAO,iBAAiB;IAAE;IAAS;IAAU;IAAY;GAAe,CAAC;GAC3F,IAAI,cAAc,cAAc,SAAS;GACzC,MAAM,EAAE,eAAe,QAAQ,uBAAuB,iBAAiB;GAMvE,gBAAgB,YAAY;GAC5B,qBAAqB,aAAa;GAClC,uBAAuB,MAAM;GAC7B,uBAAuB,uBAAuB,UAAU,UAAU;GAClE,IAAI,uBAAuB,WAAW,QAAQ;IAC5C,IAAI,YAAY;IAChB,IAAI,eACF,YAAY,gBAAgB,aAAa;SACpC,IAAI,uBAAuB,SAChC,YAAY,gBAAgB,sBAAsB,OAAO;SAEzD,YAAY;IAEd,qBAAqB,SAAS;GAChC,OACE,qBAAqB,iBAAiB,uBAAuB,WAAW,EAAE;EAE9E,SAAS,OAAO;GACd,IAAI,cAAc,cAAc,SAAS;GACzC,qBAAqB,IAAI;GACzB,QAAQ,MAAM,iCAAiC,KAAK;EACtD,UAAU;GACR,IAAI,cAAc,cAAc,SAAS,aAAa,KAAK;EAC7D;CACF,GAAG;EAAC;EAAS;EAAU;EAAY;EAAQ;CAAc,CAAC;CAE1D,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,QAAa;CACf,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,sBAAsB,OAAO,cAAsB;EACvD,cAAc,IAAI;EAClB,IAAI;GACF,IAAI,wBAAwB,QAC1B,IAAI;IACF,KAAK,MAAM,SAAS;GACtB,QAAQ;IACN,MAAM,IAAI,MAAM,6BAA6B;GAC/C;GAEF,MAAM,OAAO,oBAAoB;IAAE;IAAS;IAAU,eAAe;IAAW;IAAY;GAAe,CAAC;GAC5G,QAAa;EACf,SAAS,OAAO;GACd,QAAQ,MAAM,iCAAiC,KAAK;GACpD,MAAM;EACR,UAAU;GACR,cAAc,KAAK;EACrB;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;;;;;;;ACxFA,SAAgB,kBAAkB,EAChC,SACA,gBACA,iBAOE,CAAC,GAAG;CACN,MAAM,SAASC,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CAEnC,MAAM,EAAE,MAAM,UAAU,eAAe;EAAE;EAAS,QAAQ;EAAS,cAAc,EAAE,SAAS,QAAQ,OAAO,EAAE;CAAE,CAAC;CA2BhH,OAAO;EAAE,YAAA,GAzBSC,MAAAA,QAAAA,OAA8C;GAC9D,IAAI,CAAC,OAAO,WAAW,OAAO,KAAA;GAE9B,IAAI,MAAM,QAAQ,MAAM,SAAS,GAC/B,OAAO,MAAM,UAAU,EAAE,EAAE;GAE7B,OAAO,MAAM;EACf,GAAG,CAAC,OAAO,SAAS,CAkBH;EAAG,kBAAA,GAhBIC,sBAAAA,YAAAA,CAAY;GAClC,aAAa,QAAwC;IACnD,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,qBAAqB;IACnD,MAAM,SAAkC,EAAE,WAAW,IAAI;IACzD,OAAO,OAAO,eAAe,OAAO,CAAC,CAAC,OAAO,QAAQ,cAAc;GACrE;GACA,iBAAiB;IACf,IAAI,SAAS;KACX,YAAiB,kBAAkB,EAAE,UAAU,CAAC,gBAAgB,OAAO,EAAE,CAAC;KAC1E,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;KACnE,YAAiB,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,OAAO,EAAE,CAAC;IAC9E;GACF;GACA,GAAG,cAAc;EACnB,CAEkC;CAAE;AACtC;;;;;AChDA,MAAa,YAA6C,EACxD,SACA,gBACA,iBAKE,CAAC,MAAoC;CACvC,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAS;GAAS;EAAc;EAC3C,eAAgB,UAAU,OAAO,SAAS,OAAO,CAAC,CAAC,QAAQ,cAAc,IAAI;EAC7E,OAAO;EACP,GAAG;CACL,CAAC;AACH;;AClBA,MAAa,2BAAiE,EAC5E,iBAC8E,CAAC,MAAoC;CACnH,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,wBAAwB;EACnC,eAAe,OAAO,yBAAyB;EAC/C,OAAO;EACP,GAAG;CACL,CAAC;AACH;;ACHA,MAAa,aAAyC,EACpD,gBACA,iBAIE,CAAC,MAAoC;CACvC,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,UAAU,cAAc;EACnC,eAAe,OAAO,WAAW,cAAc;EAC/C,GAAG;CACL,CAAC;AACH;AAEA,MAAa,uBAAuB,EAClC,SACA,mBAIsE;CACtE,MAAM,SAASD,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,OAAO,YAA+B,OAAO,SAAS,OAAO,CAAC,CAAC,YAAY,OAAO;EAC9F,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,UAAS,QAAO;GACd,QAAQ,MAAM,wBAAwB,GAAG;EAC3C;EACA,GAAG;CACL,CAAC;AACH;AAEA,MAAa,uBAAuB,EAClC,SACA,mBAI2E;CAC3E,MAAM,SAASH,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,OAAO,YAAoC,OAAO,SAAS,OAAO,CAAC,CAAC,iBAAiB,OAAO;EACxG,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,UAAS,QAAO;GACd,QAAQ,MAAM,+BAA+B,GAAG;EAClD;EACA,GAAG;CACL,CAAC;AACH;AAEA,MAAa,6BAA6B,EACxC,SACA,mBAIiF;CACjF,MAAM,SAASH,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,OAAO,YACjB,OAAO,SAAS,OAAO,CAAC,CAAC,uBAAuB,OAAO;EACzD,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,UAAS,QAAO;GACd,QAAQ,MAAM,sCAAsC,GAAG;EACzD;EACA,GAAG;CACL,CAAC;AACH;AAEA,MAAa,sBAAsB,EACjC,SACA,mBAIyD;CACzD,MAAM,SAASH,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,YAAY,OAAO,SAAS,OAAO,CAAC,CAAC,WAAW;EAC5D,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU,CAAC,SAAS,OAAO,EAAE,CAAC;EACrE;EACA,UAAS,QAAO;GACd,QAAQ,MAAM,yBAAyB,GAAG;EAC5C;EACA,GAAG;CACL,CAAC;AACH;;;;;AC3GA,SAAgB,gBAAgB,EAC9B,iBACsF,CAAC,GAAG;CAC1F,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,YAAAA,CAA6D;EAClE,aAAa,EAAE,SAAS,eAAe,OAAO,SAAS,OAAO,CAAC,CAAC,aAAa,QAAQ;EACrF,UAAS,QAAO;GACd,QAAQ,MAAM,4CAA4C,GAAG;EAC/D;EACA,GAAG;CACL,CAAC;AACH;;;;;;;ACLA,SAAS,YAAY,QAA+B;CAClD,OAAO,OAAO,KAAI,UAAS;EACzB,IAAI,MAAM,SAAS,oBAGjB,OAAO;GAAE,MAAM;GAA6B,IAAI,MAAM,iBAAiB,MAAM;GAAI,OAAO,MAAM;EAAM;EAEtG,OAAO;GAAE,MAAM,MAAM;GAAM,SAAS,MAAM;GAAS,OAAO,MAAM;EAAM;CACxE,CAAC;AACH;;;;AAKA,SAAgB,uBAAuC,EACrD,QACA,gBACA,gBAK+B;CAC/B,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAwB;GAAQ;EAAc;EACzD,SAAS,YAAY;GACnB,IAAI,CAAC,UAAU,OAAO,WAAW,GAAG,OAAO;GAO3C,QAAO,MALgB,OAAO,QAA4B,uCAAuC;IAC/F,QAAQ;IACR,MAAM;KAAE,QAAQ,YAAY,MAAM;KAAG,SAAS;IAAe;GAC/D,CAAC,EAAA,CAEe;EAClB;EACA,GAAG;CACL,CAAC;AACH;;ACjDA,SAAgB,gBAAkD,EAChE,iBAC0E,CAAC,GAAiC;CAC5G,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,eAAe;EAC1B,eAAe,OAAO,iBAAiB;EACvC,GAAG;CACL,CAAC;AACH;;ACXA,MAAa,uBAAsD,EACjE,iBACuE,CAAC,MAAoC;CAC5G,MAAM,SAASC,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAA8C;EACnD,UAAU,CAAC,YAAY,WAAW;EAClC,eAAe,OAAO,SAAS,cAAc;EAC7C,WAAW;EACX,OAAO;EACP,GAAG;CACL,CAAC;AACH;;;;AAKA,MAAa,2BAA8D,EACzE,UACA,SACA,mBAKkC;CAClC,MAAM,SAASD,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAkD;EACvD,UAAU;GAAC;GAAY;GAAiB;GAAU;EAAO;EACzD,eAAe,OAAO,SAAS,kBAAkB,UAAU,OAAO;EAClE,WAAW;EACX,OAAO;EACP,GAAG;CACL,CAAC;AACH;;;;;;;;AASA,MAAa,mCAAmC,EAC9C,UACA,mBAIsE;CACtE,MAAM,SAASD,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAA2D;EAChE,aAAY,YAAW,OAAO,SAAS,sBAAsB,UAAU,OAAO;EAC9E,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAY;IAAiB;GAAQ,EAAE,CAAC;EAC1F;EACA,GAAG;CACL,CAAC;AACH;AAEA,MAAa,qBAAqB,EAChC,UACA,mBAI4G;CAC5G,MAAM,SAASH,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAiG;EACtG,aAAa,EAAE,SAAS,cACtB,OAAO,SAAS,QAAQ,UAAU,SAAS;GACzC,GAAG;GAEH,aAAa,OAAO,SAAS;EAC/B,CAAC;EACH,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAY;IAAiB;GAAQ,EAAE,CAAC;EAC1F;EACA,GAAG;CACL,CAAC;AACH;AAEA,MAAa,wBAAwB,EACnC,UACA,mBAII;CACJ,MAAM,SAASH,8BAAAA,gBAAgB;CAC/B,MAAM,eAAA,GAAcE,sBAAAA,eAAAA,CAAe;CAEnC,QAAA,GAAOC,sBAAAA,YAAAA,CAAiD;EACtD,aAAY,YAAW,OAAO,SAAS,WAAW,UAAU,OAAO;EACnE,iBAAiB;GACf,YAAiB,kBAAkB,EAAE,UAAU;IAAC;IAAY;IAAiB;GAAQ,EAAE,CAAC;EAC1F;EACA,GAAG;CACL,CAAC;AACH;;ACjGA,MAAa,uBAAuB,EAClC,iBACwF,CAAC,MAAM;CAC/F,MAAM,SAASC,8BAAAA,gBAAgB;CAC/B,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,OAAO,EAAE,SAAS,QAAQ,OAAO,+BAAiD;GAC5F,MAAM,iBAAiB,IAAIC,gBAAAA,eAAe;GAC1C,OAAO,QAAQ,4BAA4B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IACvE,eAAe,IAAI,KAAK,KAAK;GAC/B,CAAC;GACD,OAAO,OAAO,SAAS,OAAO,CAAC,CAAC,YAAY,QAAQ;IAAE,MAAM;IAAO;GAAe,CAAC;EACrF;EACA,GAAG;CACL,CAAC;AACH"}