@mastra/playground-ui 67.0.0 → 68.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/dist/KnowledgePageGraph.css +11 -0
  2. package/dist/components/ai/tool-approval.cjs.js +1 -1
  3. package/dist/components/ai/tool-approval.es.js +1 -1
  4. package/dist/components/ai/tool-call.cjs.js +2 -2
  5. package/dist/components/ai/tool-call.es.js +2 -2
  6. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  7. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  8. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  9. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  10. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +40 -0
  11. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -0
  12. package/dist/domains/chat/knowledge/knowledge-links.d.ts +1 -0
  13. package/dist/domains/chat/knowledge/knowledge-links.es.js +38 -0
  14. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -0
  15. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +79 -0
  16. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -0
  17. package/dist/domains/chat/knowledge/pinned-knowledge-data.d.ts +1 -0
  18. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +77 -0
  19. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -0
  20. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +124 -0
  21. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -0
  22. package/dist/domains/chat/knowledge/pinned-knowledge.d.ts +1 -0
  23. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +123 -0
  24. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -0
  25. package/dist/domains/chat/knowledge.cjs.js +12 -0
  26. package/dist/domains/chat/knowledge.d.ts +1 -0
  27. package/dist/domains/chat/knowledge.es.js +5 -0
  28. package/dist/domains/chat/messages/message-row.cjs.js +2 -2
  29. package/dist/domains/chat/messages/message-row.es.js +2 -2
  30. package/dist/domains/chat/messages/signal-badge.cjs.js +7 -0
  31. package/dist/domains/chat/messages/signal-badge.cjs.js.map +1 -1
  32. package/dist/domains/chat/messages/signal-badge.es.js +7 -0
  33. package/dist/domains/chat/messages/signal-badge.es.js.map +1 -1
  34. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  35. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  36. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  37. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  38. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  39. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  40. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +273 -0
  41. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -0
  42. package/dist/domains/chat/tools/badges/knowledge-tool-badge.d.ts +1 -0
  43. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +270 -0
  44. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -0
  45. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
  46. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
  47. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  48. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  49. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  50. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  51. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
  52. package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
  53. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  54. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  55. package/dist/domains/chat/tools/tool-card-kind.cjs.js +4 -2
  56. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  57. package/dist/domains/chat/tools/tool-card-kind.es.js +4 -2
  58. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  59. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  60. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  61. package/dist/domains/chat/tools/tool-groups.cjs.js +3 -2
  62. package/dist/domains/chat/tools/tool-groups.cjs.js.map +1 -1
  63. package/dist/domains/chat/tools/tool-groups.es.js +3 -2
  64. package/dist/domains/chat/tools/tool-groups.es.js.map +1 -1
  65. package/dist/domains/chat.cjs.js +11 -0
  66. package/dist/domains/chat.es.js +5 -1
  67. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +438 -0
  68. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -0
  69. package/dist/domains/knowledge/components/KnowledgePageDetail.d.ts +1 -0
  70. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +436 -0
  71. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -0
  72. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +521 -0
  73. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -0
  74. package/dist/domains/knowledge/components/KnowledgePageExplorer.d.ts +1 -0
  75. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +520 -0
  76. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -0
  77. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +626 -0
  78. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -0
  79. package/dist/domains/knowledge/components/KnowledgePageGraph.d.ts +1 -0
  80. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +625 -0
  81. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -0
  82. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +170 -0
  83. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -0
  84. package/dist/domains/knowledge/components/KnowledgePageTree.d.ts +1 -0
  85. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +168 -0
  86. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -0
  87. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js +37 -0
  88. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js.map +1 -0
  89. package/dist/domains/knowledge/hooks/useInteractionIdle.d.ts +1 -0
  90. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js +35 -0
  91. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js.map +1 -0
  92. package/dist/domains/knowledge/lib/layout.cjs.js +93 -0
  93. package/dist/domains/knowledge/lib/layout.cjs.js.map +1 -0
  94. package/dist/domains/knowledge/lib/layout.d.ts +1 -0
  95. package/dist/domains/knowledge/lib/layout.es.js +92 -0
  96. package/dist/domains/knowledge/lib/layout.es.js.map +1 -0
  97. package/dist/domains/knowledge/lib/pageGraph.cjs.js +135 -0
  98. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -0
  99. package/dist/domains/knowledge/lib/pageGraph.d.ts +1 -0
  100. package/dist/domains/knowledge/lib/pageGraph.es.js +128 -0
  101. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -0
  102. package/dist/domains/knowledge/lib/pageLayout.cjs.js +49 -0
  103. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +1 -0
  104. package/dist/domains/knowledge/lib/pageLayout.d.ts +1 -0
  105. package/dist/domains/knowledge/lib/pageLayout.es.js +48 -0
  106. package/dist/domains/knowledge/lib/pageLayout.es.js.map +1 -0
  107. package/dist/domains/knowledge/lib/pageTree.cjs.js +98 -0
  108. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -0
  109. package/dist/domains/knowledge/lib/pageTree.d.ts +1 -0
  110. package/dist/domains/knowledge/lib/pageTree.es.js +94 -0
  111. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -0
  112. package/dist/domains/knowledge/lib/popupPlacement.cjs.js +22 -0
  113. package/dist/domains/knowledge/lib/popupPlacement.cjs.js.map +1 -0
  114. package/dist/domains/knowledge/lib/popupPlacement.d.ts +1 -0
  115. package/dist/domains/knowledge/lib/popupPlacement.es.js +21 -0
  116. package/dist/domains/knowledge/lib/popupPlacement.es.js.map +1 -0
  117. package/dist/domains/knowledge/lib/recordText.cjs.js +26 -0
  118. package/dist/domains/knowledge/lib/recordText.cjs.js.map +1 -0
  119. package/dist/domains/knowledge/lib/recordText.d.ts +1 -0
  120. package/dist/domains/knowledge/lib/recordText.es.js +25 -0
  121. package/dist/domains/knowledge/lib/recordText.es.js.map +1 -0
  122. package/dist/domains/knowledge/pageTypes.cjs.js +0 -0
  123. package/dist/domains/knowledge/pageTypes.d.ts +1 -0
  124. package/dist/domains/knowledge/pageTypes.es.js +0 -0
  125. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  126. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  127. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  128. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  129. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js +3 -2
  130. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js.map +1 -1
  131. package/dist/domains/observability/saved-views/saved-views-provider.es.js +3 -2
  132. package/dist/domains/observability/saved-views/saved-views-provider.es.js.map +1 -1
  133. package/dist/domains/observability/saved-views/saved-views-source.cjs.js.map +1 -1
  134. package/dist/domains/observability/saved-views/saved-views-source.es.js.map +1 -1
  135. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js +3 -2
  136. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js.map +1 -1
  137. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js +3 -2
  138. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js.map +1 -1
  139. package/dist/domains/observability/saved-views.cjs.js +1 -1
  140. package/dist/domains/observability/saved-views.es.js +1 -1
  141. package/dist/domains/observability.cjs.js +1 -1
  142. package/dist/domains/observability.es.js +1 -1
  143. package/dist/domains/skills/skill-simple-form.cjs.js +2 -2
  144. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
  145. package/dist/domains/skills/skill-simple-form.es.js +2 -2
  146. package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
  147. package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
  148. package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
  149. package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
  150. package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
  151. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  152. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  153. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  154. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  155. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +1 -1
  156. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +1 -1
  157. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  158. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  159. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  160. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  161. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  162. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  163. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  164. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  165. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  166. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  167. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  168. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  169. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  170. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  171. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +2 -1
  172. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js.map +1 -1
  173. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +2 -1
  174. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js.map +1 -1
  175. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  176. package/dist/lib/form/dynamic-form.cjs.js.map +1 -1
  177. package/dist/lib/form/dynamic-form.es.js +2 -2
  178. package/dist/lib/form/dynamic-form.es.js.map +1 -1
  179. package/dist/lib/form/json-draft.cjs.js +1 -1
  180. package/dist/lib/form/json-draft.es.js +1 -1
  181. package/dist/lib/form/zod-provider/compat.cjs.js +8 -0
  182. package/dist/lib/form/zod-provider/compat.cjs.js.map +1 -1
  183. package/dist/lib/form/zod-provider/compat.es.js +8 -1
  184. package/dist/lib/form/zod-provider/compat.es.js.map +1 -1
  185. package/dist/lib/form/zod-provider.cjs.js +1 -1
  186. package/dist/lib/form/zod-provider.es.js +1 -1
  187. package/dist/{observability-saved-views-CwCii7hh.cjs → observability-saved-views-BNU3GkK6.cjs} +8 -6
  188. package/dist/observability-saved-views-BNU3GkK6.cjs.map +1 -0
  189. package/dist/{observability-saved-views-Bo5kLN20.js → observability-saved-views-Zlz74syw.js} +8 -6
  190. package/dist/observability-saved-views-Zlz74syw.js.map +1 -0
  191. package/dist/{span-payload-primitives-Dyhbqaa7.js → span-payload-primitives-ChvD2RrN.js} +2 -2
  192. package/dist/{span-payload-primitives-Dyhbqaa7.js.map → span-payload-primitives-ChvD2RrN.js.map} +1 -1
  193. package/dist/{span-payload-primitives-B10Xxmx7.cjs → span-payload-primitives-w1vtAXAw.cjs} +2 -2
  194. package/dist/{span-payload-primitives-B10Xxmx7.cjs.map → span-payload-primitives-w1vtAXAw.cjs.map} +1 -1
  195. package/dist/src/domains/chat/index.d.ts +1 -0
  196. package/dist/src/domains/chat/knowledge/index.d.ts +5 -0
  197. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +21 -0
  198. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +22 -0
  199. package/dist/src/domains/chat/knowledge/pinned-knowledge.d.ts +9 -0
  200. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +19 -0
  201. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +2 -2
  202. package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +42 -0
  203. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +80 -0
  204. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +35 -0
  205. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +27 -0
  206. package/dist/src/domains/knowledge/hooks/useInteractionIdle.d.ts +12 -0
  207. package/dist/src/domains/knowledge/lib/layout.d.ts +35 -0
  208. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +45 -0
  209. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +24 -0
  210. package/dist/src/domains/knowledge/lib/pageTree.d.ts +28 -0
  211. package/dist/src/domains/knowledge/lib/popupPlacement.d.ts +12 -0
  212. package/dist/src/domains/knowledge/lib/recordText.d.ts +9 -0
  213. package/dist/src/domains/knowledge/pageTypes.d.ts +96 -0
  214. package/dist/src/domains/observability/saved-views/saved-views-provider.d.ts +6 -1
  215. package/dist/src/domains/observability/saved-views/saved-views-source.d.ts +1 -0
  216. package/dist/src/domains/observability/saved-views/use-hosted-saved-views.d.ts +1 -1
  217. package/dist/src/domains/skills/skill-simple-form.d.ts +3 -1
  218. package/dist/src/ds/components/SavedViews/saved-view-picker.d.ts +3 -1
  219. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +30 -0
  220. package/dist/src/lib/form/zod-provider/compat.d.ts +5 -0
  221. package/dist/style.css +63 -1
  222. package/dist/{tool-approval-FeuyUUcL.js → tool-approval-DHeCkWHT.js} +3 -3
  223. package/dist/{tool-approval-FeuyUUcL.js.map → tool-approval-DHeCkWHT.js.map} +1 -1
  224. package/dist/{tool-approval-BfjoSNOC.cjs → tool-approval-Dfi0uAKU.cjs} +3 -3
  225. package/dist/{tool-approval-BfjoSNOC.cjs.map → tool-approval-Dfi0uAKU.cjs.map} +1 -1
  226. package/dist/{tool-call-CvilN9ti.cjs → tool-call-BCsDhIhs.cjs} +32 -2
  227. package/dist/{tool-call-CvilN9ti.cjs.map → tool-call-BCsDhIhs.cjs.map} +1 -1
  228. package/dist/{tool-call-BxYXs9w0.js → tool-call-CILZa3tn.js} +32 -2
  229. package/dist/{tool-call-BxYXs9w0.js.map → tool-call-CILZa3tn.js.map} +1 -1
  230. package/dist/{tool-card-ELW898uw.js → tool-card-C3sDFUWc.js} +18 -4
  231. package/dist/tool-card-C3sDFUWc.js.map +1 -0
  232. package/dist/{tool-card-B7O8AsRl.cjs → tool-card-CJ7Kxi-U.cjs} +18 -4
  233. package/dist/tool-card-CJ7Kxi-U.cjs.map +1 -0
  234. package/dist/{tool-presentation-BLErsb7c.cjs → tool-presentation-CQlDEwgS.cjs} +26 -1
  235. package/dist/tool-presentation-CQlDEwgS.cjs.map +1 -0
  236. package/dist/{tool-presentation-BSZYIWx2.js → tool-presentation-DvCsb_kz.js} +26 -1
  237. package/dist/tool-presentation-DvCsb_kz.js.map +1 -0
  238. package/package.json +11 -9
  239. package/dist/observability-saved-views-Bo5kLN20.js.map +0 -1
  240. package/dist/observability-saved-views-CwCii7hh.cjs.map +0 -1
  241. package/dist/tool-card-B7O8AsRl.cjs.map +0 -1
  242. package/dist/tool-card-ELW898uw.js.map +0 -1
  243. package/dist/tool-presentation-BLErsb7c.cjs.map +0 -1
  244. package/dist/tool-presentation-BSZYIWx2.js.map +0 -1
@@ -59,7 +59,7 @@ var validName = (name) => {
59
59
  * the draft: picking a view writes its state to the URL (and its columns to the column picker), and
60
60
  * the view shows unsaved changes while the URL differs from it.
61
61
  */
62
- function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true }) {
62
+ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSearchParams, columns, defaultDatePreset, canEdit = () => true, canCreate = true }) {
63
63
  const queryClient = useQueryClient();
64
64
  const queryKey = savedViewsQueryKey(queryKeyScope, page);
65
65
  const { data: records = [] } = useQuery({
@@ -150,6 +150,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
150
150
  applied: draft ?? activeView,
151
151
  select,
152
152
  create: () => {
153
+ if (!canCreate) return;
153
154
  setError(void 0);
154
155
  setCreatingName(NEW_VIEW_NAME);
155
156
  },
@@ -200,7 +201,7 @@ function useHostedSavedViews({ page, source, queryKeyScope, searchParams, setSea
200
201
  },
201
202
  duplicate: async (viewId) => {
202
203
  const original = records.find((item) => item.id === viewId);
203
- if (!original || pending || !fitsSizeLimit(original.state)) return;
204
+ if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;
204
205
  const name = validName(`${original.name} copy`) ?? original.name;
205
206
  const choice = choiceRef.current;
206
207
  const copy = await run(() => source.create({
@@ -1 +1 @@
1
- {"version":3,"file":"use-hosted-saved-views.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-hosted-saved-views.es.js","names":[],"sources":["../../../../src/domains/observability/saved-views/use-hosted-saved-views.ts"],"sourcesContent":["import type { SavedViewPage, SavedViewState } from '@mastra/core/storage';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRef, useState } from 'react';\nimport { applySavedView, savedViewFromSearchParams } from '../saved-view-state';\nimport { SavedViewNameTakenError, savedViewsQueryKey } from './saved-views-source';\nimport type { SavedViewRecord, SavedViewsContextValue } from './saved-views-source';\nimport type { TraceColumnPreferences } from '@/domains/traces/trace-list-columns';\nimport type { FilterBarItem } from '@/ds/components/FilterBar/types';\nimport { savedViewNameSchema } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedView } from '@/ds/components/SavedViews/saved-view-schema';\nimport type { SavedViewDraft, SavedViewsController } from '@/ds/components/SavedViews/use-saved-views';\nimport type { SetURLSearchParamsLike } from '@/lib/sort/use-url-sort';\n\n/** Same limit as the saved view schema in `@mastra/core`, checked before a request is made. */\nexport const SAVED_VIEW_STATE_MAX_BYTES = 16 * 1024;\n\nconst NEW_VIEW_NAME = 'Untitled view';\nexport const SAVED_VIEW_TOO_LARGE_MESSAGE =\n 'This view is too large to save (16 KiB max). Remove some filters or columns.';\nconst SAVE_FAILED_MESSAGE = 'Could not save the view. Try again.';\nconst DELETE_FAILED_MESSAGE = 'Could not delete the view. Try again.';\n\n/** A view's state, and for a stored view its record. */\nexport type HostedSavedViewSettings = { state: SavedViewState; record?: SavedViewRecord };\n\nexport type SavedViewColumnsControl = {\n preferences: TraceColumnPreferences;\n setPreferences: (next: TraceColumnPreferences) => void;\n /** Back to the page's default columns, when the page default is picked. */\n resetColumns: () => void;\n};\n\nexport type UseHostedSavedViewsArgs = SavedViewsContextValue & {\n page: SavedViewPage;\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n /** The page's column picker; omitted on pages with fixed columns. */\n columns?: SavedViewColumnsControl;\n /** The range the page shows when the URL names none, when the host's differs from the page's own. */\n defaultDatePreset?: string;\n};\n\nconst stateBytes = (state: SavedViewState) => new TextEncoder().encode(JSON.stringify(state)).length;\n\n/** The filters a view's hover summary lists: its top-level filters (groups are counted separately). */\nfunction summaryFilters(state: SavedViewState): FilterBarItem[] {\n return state.filters.flatMap((node, index) =>\n 'nodes' in node\n ? []\n : [\n {\n id: `${index}`,\n fieldId: node.fieldId,\n operatorId: node.operatorId ?? (Array.isArray(node.value) ? 'in' : 'is'),\n value: node.value,\n },\n ],\n );\n}\n\n/** The parts of a view that compare equal when they set the same URL and columns. */\nfunction comparable(state: SavedViewState, withColumns: boolean): string {\n const { filters, dateRange, sort, options, columns } = state;\n return JSON.stringify({ filters, dateRange, sort, options, columns: withColumns ? columns : undefined });\n}\n\nfunction errorMessage(error: unknown, name: string): string {\n return error instanceof SavedViewNameTakenError ? `A view named \"${name}\" already exists.` : SAVE_FAILED_MESSAGE;\n}\n\n/** What the user picked: a saved view, or the page default when `id` is undefined. */\ntype Picked = { id: string | undefined };\n\n/** The unsaved state shown in the bar: a view being created, or edits to the active view. */\nfunction draftOf(\n current: SavedViewState,\n creatingName: string | undefined,\n editedRecord: SavedViewRecord | undefined,\n): SavedViewDraft<HostedSavedViewSettings> | undefined {\n const unsaved = { filters: summaryFilters(current), settings: { state: current } };\n if (creatingName !== undefined) return { name: creatingName, ...unsaved };\n if (editedRecord) return { viewId: editedRecord.id, name: editedRecord.name, ...unsaved };\n return undefined;\n}\n\nconst validName = (name: string) => {\n const parsed = savedViewNameSchema.safeParse(name);\n return parsed.success ? parsed.data : undefined;\n};\n\n/**\n * Saved views of one observability page, stored by the host's `SavedViewsSource`. The page URL is\n * the draft: picking a view writes its state to the URL (and its columns to the column picker), and\n * the view shows unsaved changes while the URL differs from it.\n */\nexport function useHostedSavedViews({\n page,\n source,\n queryKeyScope,\n searchParams,\n setSearchParams,\n columns,\n defaultDatePreset,\n canEdit = () => true,\n canCreate = true,\n}: UseHostedSavedViewsArgs): SavedViewsController<HostedSavedViewSettings> {\n const queryClient = useQueryClient();\n const queryKey = savedViewsQueryKey(queryKeyScope, page);\n const { data: records = [] } = useQuery({ queryKey, queryFn: () => source.list(page) });\n\n // Nothing picked yet: the view matching the URL (e.g. after a reload) is active.\n // `{ id: undefined }`: the page default was picked.\n const [picked, setPicked] = useState<Picked>();\n const [creatingName, setCreatingName] = useState<string>();\n const [error, setError] = useState<string>();\n const [pending, setPending] = useState(false);\n // Bumped whenever the user picks or leaves a view, so a request that settles afterwards does not\n // switch the page back to the view it created.\n const choiceRef = useRef(0);\n // The search params a view was applied over. A host can render the new URL a render after the\n // navigation that set it (a data router does), so until it does the old URL says nothing about\n // whether the view has unsaved changes.\n const [appliedOver, setAppliedOver] = useState<URLSearchParams>();\n\n const current = savedViewFromSearchParams(page, searchParams, { columns: columns?.preferences });\n\n // A view as the page would hold it once applied, so a view saved by an older page (or with stale\n // parts) still compares equal to the URL it sets.\n const matchesUrl = (state: SavedViewState) => {\n const applied = applySavedView(state, new URLSearchParams(), { defaultDatePreset });\n const normalized = savedViewFromSearchParams(page, applied.params, { columns: applied.columns });\n const withColumns = applied.columns !== undefined;\n return comparable(normalized, withColumns) === comparable(current, withColumns);\n };\n\n const activeRecord = picked\n ? records.find(record => record.id === picked.id)\n : records.find(record => matchesUrl(record.state));\n const activeMatches = activeRecord !== undefined && matchesUrl(activeRecord.state);\n const awaitingUrl = appliedOver !== undefined && appliedOver === searchParams && !activeMatches;\n if (appliedOver !== undefined && !awaitingUrl) setAppliedOver(undefined);\n const activeUnsaved = activeRecord !== undefined && !activeMatches && !awaitingUrl;\n\n const toView = (record: SavedViewRecord): SavedView<HostedSavedViewSettings> => ({\n id: record.id,\n name: record.name,\n filters: summaryFilters(record.state),\n settings: { state: record.state, record },\n });\n const views = records.map(toView);\n const activeView = activeRecord ? toView(activeRecord) : undefined;\n\n const draft = draftOf(current, creatingName, activeUnsaved ? activeRecord : undefined);\n\n const applyState = (state: SavedViewState) => {\n const applied = applySavedView(state, searchParams, { defaultDatePreset });\n setAppliedOver(searchParams);\n setSearchParams(previous => applySavedView(state, previous, { defaultDatePreset }).params);\n if (applied.columns && columns) columns.setPreferences(applied.columns);\n };\n\n const storeRecord = (record: SavedViewRecord) =>\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) =>\n list.some(item => item.id === record.id)\n ? list.map(item => (item.id === record.id ? record : item))\n : [record, ...list],\n );\n\n const run = async <T>(task: () => Promise<T>, onError: (error: unknown) => string): Promise<T | undefined> => {\n setPending(true);\n setError(undefined);\n try {\n return await task();\n } catch (cause) {\n setError(onError(cause));\n return undefined;\n } finally {\n setPending(false);\n void queryClient.invalidateQueries({ queryKey });\n }\n };\n\n const fitsSizeLimit = (state: SavedViewState) => {\n if (stateBytes(state) <= SAVED_VIEW_STATE_MAX_BYTES) return true;\n setError(SAVED_VIEW_TOO_LARGE_MESSAGE);\n return false;\n };\n\n const select = (viewId: string | undefined) => {\n choiceRef.current += 1;\n setCreatingName(undefined);\n setError(undefined);\n if (viewId === undefined) {\n setPicked({ id: undefined });\n applyState({ schemaVersion: 1, page, filters: [] });\n columns?.resetColumns();\n return;\n }\n const record = records.find(item => item.id === viewId);\n if (!record) return;\n setPicked({ id: record.id });\n applyState(record.state);\n };\n\n return {\n views,\n activeView,\n draft,\n unsaved: creatingName !== undefined || activeUnsaved,\n error,\n pending,\n applied: draft ?? activeView,\n select,\n create: () => {\n if (!canCreate) return;\n setError(undefined);\n setCreatingName(NEW_VIEW_NAME);\n },\n edit: viewId => {\n if (viewId !== activeRecord?.id) select(viewId);\n },\n change: ({ name }) => {\n if (name === undefined || creatingName === undefined) return;\n setError(undefined);\n setCreatingName(name);\n },\n save: async () => {\n if (pending || !fitsSizeLimit(current)) return;\n if (creatingName !== undefined) {\n const name = validName(creatingName) ?? NEW_VIEW_NAME;\n const choice = choiceRef.current;\n const record = await run(\n () => source.create({ name, state: current }),\n cause => errorMessage(cause, name),\n );\n if (!record) return;\n storeRecord(record);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: record.id });\n return;\n }\n if (!activeRecord || !activeUnsaved || !canEdit(activeRecord)) return;\n const { id, name } = activeRecord;\n const record = await run(\n () => source.update(id, { state: current }),\n cause => errorMessage(cause, name),\n );\n if (record) storeRecord(record);\n },\n discard: () => {\n choiceRef.current += 1;\n setError(undefined);\n if (creatingName !== undefined) setCreatingName(undefined);\n else if (activeRecord) applyState(activeRecord.state);\n },\n rename: async (viewId, rawName) => {\n const name = validName(rawName);\n const record = records.find(item => item.id === viewId);\n if (!name || !record || pending || !canEdit(record)) return false;\n if (name === record.name) return true;\n const renamed = await run(\n () => source.update(viewId, { name }),\n cause => errorMessage(cause, name),\n );\n if (!renamed) return false;\n storeRecord(renamed);\n return true;\n },\n duplicate: async viewId => {\n const original = records.find(item => item.id === viewId);\n if (!canCreate || !original || pending || !fitsSizeLimit(original.state)) return;\n const name = validName(`${original.name} copy`) ?? original.name;\n const choice = choiceRef.current;\n const copy = await run(\n () => source.create({ name, state: original.state }),\n cause => errorMessage(cause, name),\n );\n if (!copy) return;\n storeRecord(copy);\n if (choice !== choiceRef.current) return;\n setCreatingName(undefined);\n setPicked({ id: copy.id });\n applyState(copy.state);\n },\n remove: async viewId => {\n const record = records.find(item => item.id === viewId);\n if (!record || pending || !canEdit(record)) return;\n choiceRef.current += 1;\n const removed = await run(\n async () => {\n await source.remove(viewId);\n return true;\n },\n () => DELETE_FAILED_MESSAGE,\n );\n if (!removed) return;\n queryClient.setQueryData<SavedViewRecord[]>(queryKey, (list = []) => list.filter(item => item.id !== viewId));\n // The page keeps its filters; the default tab is picked so the deleted view is not re-matched.\n if (activeRecord?.id === viewId) setPicked({ id: undefined });\n },\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_observability_saved_views_saved_views_source = require("./saved-views/saved-views-source.cjs.js");
3
- const require_observability_saved_views = require("../../observability-saved-views-CwCii7hh.cjs");
3
+ const require_observability_saved_views = require("../../observability-saved-views-BNU3GkK6.cjs");
4
4
  const require_domains_observability_saved_views_saved_views_provider = require("./saved-views/saved-views-provider.cjs.js");
5
5
  exports.ObservabilitySavedViews = require_observability_saved_views.ObservabilitySavedViews;
6
6
  exports.SavedViewNameTakenError = require_domains_observability_saved_views_saved_views_source.SavedViewNameTakenError;
@@ -1,4 +1,4 @@
1
1
  import { SavedViewNameTakenError } from "./saved-views/saved-views-source.es.js";
2
- import { t as ObservabilitySavedViews } from "../../observability-saved-views-Bo5kLN20.js";
2
+ import { t as ObservabilitySavedViews } from "../../observability-saved-views-Zlz74syw.js";
3
3
  import { SavedViewsProvider } from "./saved-views/saved-views-provider.es.js";
4
4
  export { ObservabilitySavedViews, SavedViewNameTakenError, SavedViewsProvider };
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_observability_saved_views_saved_views_source = require("./observability/saved-views/saved-views-source.cjs.js");
3
- const require_observability_saved_views = require("../observability-saved-views-CwCii7hh.cjs");
3
+ const require_observability_saved_views = require("../observability-saved-views-BNU3GkK6.cjs");
4
4
  const require_domains_observability_saved_views_saved_views_provider = require("./observability/saved-views/saved-views-provider.cjs.js");
5
5
  const require_domains_observability_components_observability_capability_gate = require("./observability/components/observability-capability-gate.cjs.js");
6
6
  const require_domains_observability_components_observability_list_body = require("./observability/components/observability-list-body.cjs.js");
@@ -1,5 +1,5 @@
1
1
  import { SavedViewNameTakenError } from "./observability/saved-views/saved-views-source.es.js";
2
- import { t as ObservabilitySavedViews } from "../observability-saved-views-Bo5kLN20.js";
2
+ import { t as ObservabilitySavedViews } from "../observability-saved-views-Zlz74syw.js";
3
3
  import { SavedViewsProvider } from "./observability/saved-views/saved-views-provider.es.js";
4
4
  import { ObservabilityCapabilityGate } from "./observability/components/observability-capability-gate.es.js";
5
5
  import { ObservabilityListBody } from "./observability/components/observability-list-body.es.js";
@@ -6,12 +6,12 @@ const require_CodeEditor = require("../../CodeEditor-CJ9jC9lu.cjs");
6
6
  const require_components_Field = require("../../components/Field.cjs.js");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
8
  // src/domains/skills/skill-simple-form.tsx
9
- function SkillSimpleForm({ name, onNameChange, description, onDescriptionChange, instructions, onInstructionsChange, readOnly }) {
9
+ function SkillSimpleForm({ name, onNameChange, description, onDescriptionChange, instructions, onInstructionsChange, readOnly, nameReadOnly }) {
10
10
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11
11
  className: "flex h-full flex-col gap-4",
12
12
  children: [
13
13
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_Field.Field, {
14
- disabled: readOnly,
14
+ disabled: readOnly || nameReadOnly,
15
15
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Field.FieldLabel, { children: "Name" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_input.Input, {
16
16
  value: name,
17
17
  onChange: (e) => onNameChange(e.target.value),
@@ -1 +1 @@
1
- {"version":3,"file":"skill-simple-form.cjs.js","names":["Field","FieldLabel","Input","MarkdownRenderer","Txt","CodeEditor"],"sources":["../../../src/domains/skills/skill-simple-form.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SkillSimpleFormProps {\n name: string;\n onNameChange: (name: string) => void;\n description: string;\n onDescriptionChange: (description: string) => void;\n instructions: string;\n onInstructionsChange: (instructions: string) => void;\n readOnly?: boolean;\n}\n\nexport function SkillSimpleForm({\n name,\n onNameChange,\n description,\n onDescriptionChange,\n instructions,\n onInstructionsChange,\n readOnly,\n}: SkillSimpleFormProps) {\n return (\n <div className=\"flex h-full flex-col gap-4\">\n <Field disabled={readOnly}>\n <FieldLabel>Name</FieldLabel>\n <Input value={name} onChange={e => onNameChange(e.target.value)} placeholder=\"Skill name\" />\n </Field>\n\n <Field disabled={readOnly}>\n <FieldLabel>Description</FieldLabel>\n <Input\n value={description}\n onChange={e => onDescriptionChange(e.target.value)}\n placeholder=\"Brief description of the skill\"\n />\n </Field>\n\n <Field className=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <FieldLabel>Instructions</FieldLabel>\n\n {readOnly ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-background p-4\">\n {instructions ? (\n <MarkdownRenderer>{instructions}</MarkdownRenderer>\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n No instructions provided.\n </Txt>\n )}\n </div>\n ) : (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <CodeEditor\n data-testid=\"skill-instructions-input\"\n value={instructions}\n onChange={onInstructionsChange}\n language=\"markdown\"\n editable\n placeholder=\"You are a helpful assistant that…\"\n showCopyButton={false}\n className=\"size-full\"\n />\n </div>\n )}\n </Field>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAgBA,SAAgB,gBAAgB,EAC9B,MACA,cACA,aACA,qBACA,cACA,sBACA,YACuB;CACvB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,yBAAAA,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,OAAgB,CAAA,GAC5B,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;KAAO,OAAO;KAAM,WAAU,MAAK,aAAa,EAAE,OAAO,KAAK;KAAG,aAAY;IAAc,CAAA,CACtF;;GAEP,iBAAA,GAAA,kBAAA,KAAA,CAACF,yBAAAA,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,cAAuB,CAAA,GACnC,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;KACE,OAAO;KACP,WAAU,MAAK,oBAAoB,EAAE,OAAO,KAAK;KACjD,aAAY;IACb,CAAA,CACI;;GAEP,iBAAA,GAAA,kBAAA,KAAA,CAACF,yBAAAA,OAAD;IAAO,WAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,eAAwB,CAAA,GAEnC,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACZ,UAAA,eACC,iBAAA,GAAA,kBAAA,IAAA,CAACE,yBAAAA,kBAAD,EAAA,UAAmB,aAA+B,CAAA,IAElD,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;MAAK,SAAQ;MAAU,MAAK;MAAQ,WAAU;MAAS,UAAA;KAElD,CAAA;IAEJ,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;MACE,eAAY;MACZ,OAAO;MACP,UAAU;MACV,UAAS;MACT,UAAA;MACA,aAAY;MACZ,gBAAgB;MAChB,WAAU;KACX,CAAA;IACE,CAAA,CAEF;;EACJ;;AAET"}
1
+ {"version":3,"file":"skill-simple-form.cjs.js","names":["Field","FieldLabel","Input","MarkdownRenderer","Txt","CodeEditor"],"sources":["../../../src/domains/skills/skill-simple-form.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SkillSimpleFormProps {\n name: string;\n onNameChange: (name: string) => void;\n description: string;\n onDescriptionChange: (description: string) => void;\n instructions: string;\n onInstructionsChange: (instructions: string) => void;\n readOnly?: boolean;\n /** Locks only the name, for skills whose name is their identity. */\n nameReadOnly?: boolean;\n}\n\nexport function SkillSimpleForm({\n name,\n onNameChange,\n description,\n onDescriptionChange,\n instructions,\n onInstructionsChange,\n readOnly,\n nameReadOnly,\n}: SkillSimpleFormProps) {\n return (\n <div className=\"flex h-full flex-col gap-4\">\n <Field disabled={readOnly || nameReadOnly}>\n <FieldLabel>Name</FieldLabel>\n <Input value={name} onChange={e => onNameChange(e.target.value)} placeholder=\"Skill name\" />\n </Field>\n\n <Field disabled={readOnly}>\n <FieldLabel>Description</FieldLabel>\n <Input\n value={description}\n onChange={e => onDescriptionChange(e.target.value)}\n placeholder=\"Brief description of the skill\"\n />\n </Field>\n\n <Field className=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <FieldLabel>Instructions</FieldLabel>\n\n {readOnly ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-background p-4\">\n {instructions ? (\n <MarkdownRenderer>{instructions}</MarkdownRenderer>\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n No instructions provided.\n </Txt>\n )}\n </div>\n ) : (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <CodeEditor\n data-testid=\"skill-instructions-input\"\n value={instructions}\n onChange={onInstructionsChange}\n language=\"markdown\"\n editable\n placeholder=\"You are a helpful assistant that…\"\n showCopyButton={false}\n className=\"size-full\"\n />\n </div>\n )}\n </Field>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAkBA,SAAgB,gBAAgB,EAC9B,MACA,cACA,aACA,qBACA,cACA,sBACA,UACA,gBACuB;CACvB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,yBAAAA,OAAD;IAAO,UAAU,YAAY;IAA7B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,OAAgB,CAAA,GAC5B,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;KAAO,OAAO;KAAM,WAAU,MAAK,aAAa,EAAE,OAAO,KAAK;KAAG,aAAY;IAAc,CAAA,CACtF;;GAEP,iBAAA,GAAA,kBAAA,KAAA,CAACF,yBAAAA,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,cAAuB,CAAA,GACnC,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,OAAD;KACE,OAAO;KACP,WAAU,MAAK,oBAAoB,EAAE,OAAO,KAAK;KACjD,aAAY;IACb,CAAA,CACI;;GAEP,iBAAA,GAAA,kBAAA,KAAA,CAACF,yBAAAA,OAAD;IAAO,WAAU;IAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,YAAD,EAAA,UAAY,eAAwB,CAAA,GAEnC,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACZ,UAAA,eACC,iBAAA,GAAA,kBAAA,IAAA,CAACE,yBAAAA,kBAAD,EAAA,UAAmB,aAA+B,CAAA,IAElD,iBAAA,GAAA,kBAAA,IAAA,CAACC,YAAAA,KAAD;MAAK,SAAQ;MAAU,MAAK;MAAQ,WAAU;MAAS,UAAA;KAElD,CAAA;IAEJ,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;MACE,eAAY;MACZ,OAAO;MACP,UAAU;MACV,UAAS;MACT,UAAA;MACA,aAAY;MACZ,gBAAgB;MAChB,WAAU;KACX,CAAA;IACE,CAAA,CAEF;;EACJ;;AAET"}
@@ -5,12 +5,12 @@ import { t as CodeEditor } from "../../CodeEditor-CPVxj7WS.js";
5
5
  import { Field, FieldLabel } from "../../components/Field.es.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  // src/domains/skills/skill-simple-form.tsx
8
- function SkillSimpleForm({ name, onNameChange, description, onDescriptionChange, instructions, onInstructionsChange, readOnly }) {
8
+ function SkillSimpleForm({ name, onNameChange, description, onDescriptionChange, instructions, onInstructionsChange, readOnly, nameReadOnly }) {
9
9
  return /* @__PURE__ */ jsxs("div", {
10
10
  className: "flex h-full flex-col gap-4",
11
11
  children: [
12
12
  /* @__PURE__ */ jsxs(Field, {
13
- disabled: readOnly,
13
+ disabled: readOnly || nameReadOnly,
14
14
  children: [/* @__PURE__ */ jsx(FieldLabel, { children: "Name" }), /* @__PURE__ */ jsx(Input, {
15
15
  value: name,
16
16
  onChange: (e) => onNameChange(e.target.value),
@@ -1 +1 @@
1
- {"version":3,"file":"skill-simple-form.es.js","names":[],"sources":["../../../src/domains/skills/skill-simple-form.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SkillSimpleFormProps {\n name: string;\n onNameChange: (name: string) => void;\n description: string;\n onDescriptionChange: (description: string) => void;\n instructions: string;\n onInstructionsChange: (instructions: string) => void;\n readOnly?: boolean;\n}\n\nexport function SkillSimpleForm({\n name,\n onNameChange,\n description,\n onDescriptionChange,\n instructions,\n onInstructionsChange,\n readOnly,\n}: SkillSimpleFormProps) {\n return (\n <div className=\"flex h-full flex-col gap-4\">\n <Field disabled={readOnly}>\n <FieldLabel>Name</FieldLabel>\n <Input value={name} onChange={e => onNameChange(e.target.value)} placeholder=\"Skill name\" />\n </Field>\n\n <Field disabled={readOnly}>\n <FieldLabel>Description</FieldLabel>\n <Input\n value={description}\n onChange={e => onDescriptionChange(e.target.value)}\n placeholder=\"Brief description of the skill\"\n />\n </Field>\n\n <Field className=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <FieldLabel>Instructions</FieldLabel>\n\n {readOnly ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-background p-4\">\n {instructions ? (\n <MarkdownRenderer>{instructions}</MarkdownRenderer>\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n No instructions provided.\n </Txt>\n )}\n </div>\n ) : (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <CodeEditor\n data-testid=\"skill-instructions-input\"\n value={instructions}\n onChange={onInstructionsChange}\n language=\"markdown\"\n editable\n placeholder=\"You are a helpful assistant that…\"\n showCopyButton={false}\n className=\"size-full\"\n />\n </div>\n )}\n </Field>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,gBAAgB,EAC9B,MACA,cACA,aACA,qBACA,cACA,sBACA,YACuB;CACvB,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,qBAAC,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,OAAgB,CAAA,GAC5B,oBAAC,OAAD;KAAO,OAAO;KAAM,WAAU,MAAK,aAAa,EAAE,OAAO,KAAK;KAAG,aAAY;IAAc,CAAA,CACtF;;GAEP,qBAAC,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,cAAuB,CAAA,GACnC,oBAAC,OAAD;KACE,OAAO;KACP,WAAU,MAAK,oBAAoB,EAAE,OAAO,KAAK;KACjD,aAAY;IACb,CAAA,CACI;;GAEP,qBAAC,OAAD;IAAO,WAAU;IAAjB,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,eAAwB,CAAA,GAEnC,WACC,oBAAC,OAAD;KAAK,WAAU;KACZ,UAAA,eACC,oBAAC,kBAAD,EAAA,UAAmB,aAA+B,CAAA,IAElD,oBAAC,KAAD;MAAK,SAAQ;MAAU,MAAK;MAAQ,WAAU;MAAS,UAAA;KAElD,CAAA;IAEJ,CAAA,IAEL,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,YAAD;MACE,eAAY;MACZ,OAAO;MACP,UAAU;MACV,UAAS;MACT,UAAA;MACA,aAAY;MACZ,gBAAgB;MAChB,WAAU;KACX,CAAA;IACE,CAAA,CAEF;;EACJ;;AAET"}
1
+ {"version":3,"file":"skill-simple-form.es.js","names":[],"sources":["../../../src/domains/skills/skill-simple-form.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface SkillSimpleFormProps {\n name: string;\n onNameChange: (name: string) => void;\n description: string;\n onDescriptionChange: (description: string) => void;\n instructions: string;\n onInstructionsChange: (instructions: string) => void;\n readOnly?: boolean;\n /** Locks only the name, for skills whose name is their identity. */\n nameReadOnly?: boolean;\n}\n\nexport function SkillSimpleForm({\n name,\n onNameChange,\n description,\n onDescriptionChange,\n instructions,\n onInstructionsChange,\n readOnly,\n nameReadOnly,\n}: SkillSimpleFormProps) {\n return (\n <div className=\"flex h-full flex-col gap-4\">\n <Field disabled={readOnly || nameReadOnly}>\n <FieldLabel>Name</FieldLabel>\n <Input value={name} onChange={e => onNameChange(e.target.value)} placeholder=\"Skill name\" />\n </Field>\n\n <Field disabled={readOnly}>\n <FieldLabel>Description</FieldLabel>\n <Input\n value={description}\n onChange={e => onDescriptionChange(e.target.value)}\n placeholder=\"Brief description of the skill\"\n />\n </Field>\n\n <Field className=\"flex min-h-0 flex-1 flex-col gap-1.5\">\n <FieldLabel>Instructions</FieldLabel>\n\n {readOnly ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-background p-4\">\n {instructions ? (\n <MarkdownRenderer>{instructions}</MarkdownRenderer>\n ) : (\n <Txt variant=\"caption\" tone=\"muted\" className=\"italic\">\n No instructions provided.\n </Txt>\n )}\n </div>\n ) : (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <CodeEditor\n data-testid=\"skill-instructions-input\"\n value={instructions}\n onChange={onInstructionsChange}\n language=\"markdown\"\n editable\n placeholder=\"You are a helpful assistant that…\"\n showCopyButton={false}\n className=\"size-full\"\n />\n </div>\n )}\n </Field>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,gBAAgB,EAC9B,MACA,cACA,aACA,qBACA,cACA,sBACA,UACA,gBACuB;CACvB,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,qBAAC,OAAD;IAAO,UAAU,YAAY;IAA7B,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,OAAgB,CAAA,GAC5B,oBAAC,OAAD;KAAO,OAAO;KAAM,WAAU,MAAK,aAAa,EAAE,OAAO,KAAK;KAAG,aAAY;IAAc,CAAA,CACtF;;GAEP,qBAAC,OAAD;IAAO,UAAU;IAAjB,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,cAAuB,CAAA,GACnC,oBAAC,OAAD;KACE,OAAO;KACP,WAAU,MAAK,oBAAoB,EAAE,OAAO,KAAK;KACjD,aAAY;IACb,CAAA,CACI;;GAEP,qBAAC,OAAD;IAAO,WAAU;IAAjB,UAAA,CACE,oBAAC,YAAD,EAAA,UAAY,eAAwB,CAAA,GAEnC,WACC,oBAAC,OAAD;KAAK,WAAU;KACZ,UAAA,eACC,oBAAC,kBAAD,EAAA,UAAmB,aAA+B,CAAA,IAElD,oBAAC,KAAD;MAAK,SAAQ;MAAU,MAAK;MAAQ,WAAU;MAAS,UAAA;KAElD,CAAA;IAEJ,CAAA,IAEL,oBAAC,OAAD;KAAK,WAAU;KACb,UAAA,oBAAC,YAAD;MACE,eAAY;MACZ,OAAO;MACP,UAAU;MACV,UAAS;MACT,UAAA;MACA,aAAY;MACZ,gBAAgB;MAChB,WAAU;KACX,CAAA;IACE,CAAA,CAEF;;EACJ;;AAET"}
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_observability_observability_list_url_state = require("../../observability/observability-list-url-state.cjs.js");
3
3
  const require_domains_spans_span_filters = require("../span-filters.cjs.js");
4
4
  const require_domains_traces_trace_list_columns = require("../../traces/trace-list-columns.cjs.js");
5
- const require_observability_saved_views = require("../../../observability-saved-views-CwCii7hh.cjs");
5
+ const require_observability_saved_views = require("../../../observability-saved-views-BNU3GkK6.cjs");
6
6
  const require_domains_observability_components_observability_list_body = require("../../observability/components/observability-list-body.cjs.js");
7
7
  const require_domains_observability_hooks_use_observability_list_filters = require("../../observability/hooks/use-observability-list-filters.cjs.js");
8
8
  const require_domains_spans_hooks_use_spans_list_source = require("../hooks/use-spans-list-source.cjs.js");
@@ -2,7 +2,7 @@ import { useObservabilityCapabilities } from "../../capabilities.es.js";
2
2
  import { SPAN_LIST_SORT_FIELDS } from "../../observability/observability-list-url-state.es.js";
3
3
  import { buildSpanQueryWhere } from "../span-filters.es.js";
4
4
  import { hasTraceColumn, withoutUnrecordedStreamingColumns } from "../../traces/trace-list-columns.es.js";
5
- import { t as ObservabilitySavedViews } from "../../../observability-saved-views-Bo5kLN20.js";
5
+ import { t as ObservabilitySavedViews } from "../../../observability-saved-views-Zlz74syw.js";
6
6
  import { ObservabilityListBody } from "../../observability/components/observability-list-body.es.js";
7
7
  import { useObservabilityListFilters } from "../../observability/hooks/use-observability-list-filters.es.js";
8
8
  import { useSpansListSource } from "../hooks/use-spans-list-source.es.js";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_threads_thread_filters = require("../thread-filters.cjs.js");
3
3
  const require_domains_traces_trace_list_columns = require("../../traces/trace-list-columns.cjs.js");
4
- const require_observability_saved_views = require("../../../observability-saved-views-CwCii7hh.cjs");
4
+ const require_observability_saved_views = require("../../../observability-saved-views-BNU3GkK6.cjs");
5
5
  const require_domains_observability_components_observability_list_body = require("../../observability/components/observability-list-body.cjs.js");
6
6
  const require_domains_observability_hooks_use_observability_list_filters = require("../../observability/hooks/use-observability-list-filters.cjs.js");
7
7
  const require_domains_traces_components_columns_menu_columns_menu = require("../../traces/components/columns-menu/columns-menu.cjs.js");
@@ -1,7 +1,7 @@
1
1
  import { useFeedbackAvailable, useTraceQueryAvailable } from "../../capabilities.es.js";
2
2
  import { buildThreadQueryWhere } from "../thread-filters.es.js";
3
3
  import { withoutUnrecordedStreamingColumns } from "../../traces/trace-list-columns.es.js";
4
- import { t as ObservabilitySavedViews } from "../../../observability-saved-views-Bo5kLN20.js";
4
+ import { t as ObservabilitySavedViews } from "../../../observability-saved-views-Zlz74syw.js";
5
5
  import { ObservabilityListBody } from "../../observability/components/observability-list-body.es.js";
6
6
  import { useObservabilityListFilters } from "../../observability/hooks/use-observability-list-filters.es.js";
7
7
  import { ColumnsMenu } from "../../traces/components/columns-menu/columns-menu.es.js";
@@ -4,7 +4,7 @@ const require_Notice = require("../../../../Notice-DWNeCe-t.cjs");
4
4
  const require_DataKeysAndValues = require("../../../../DataKeysAndValues-DsH6AbAo.cjs");
5
5
  const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
6
6
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
7
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
7
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  let _mastra_core_observability = require("@mastra/core/observability");
10
10
  // src/domains/traces/components/span-payload/span-error-renderer.tsx
@@ -3,7 +3,7 @@ import { t as Notice } from "../../../../Notice-CyKngbbv.js";
3
3
  import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-PwOmGxyp.js";
4
4
  import { asCoreSpan } from "./span-payload-registry.es.js";
5
5
  import { SpanPayloadJson } from "./span-payload-json.es.js";
6
- import { t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Dyhbqaa7.js";
6
+ import { t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-ChvD2RrN.js";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { describeSpanError } from "@mastra/core/observability";
9
9
  // src/domains/traces/components/span-payload/span-error-renderer.tsx
@@ -3,7 +3,7 @@ const require_DataKeysAndValues = require("../../../../DataKeysAndValues-DsH6AbA
3
3
  const require_domains_traces_utils_span_signal = require("../../utils/span-signal.cjs.js");
4
4
  const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
5
5
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
6
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
6
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
7
7
  const require_domains_traces_components_span_payload_span_payload_messages = require("./span-payload-messages.cjs.js");
8
8
  const require_domains_traces_components_span_payload_span_payload_processor = require("./span-payload-processor.cjs.js");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -2,7 +2,7 @@ import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-PwOmGxyp.j
2
2
  import { getSpanSignal } from "../../utils/span-signal.es.js";
3
3
  import { asCoreSpan, pickRenderer } from "./span-payload-registry.es.js";
4
4
  import { SpanPayloadJson } from "./span-payload-json.es.js";
5
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown } from "../../../../span-payload-primitives-Dyhbqaa7.js";
5
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown } from "../../../../span-payload-primitives-ChvD2RrN.js";
6
6
  import { SpanPayloadMessages, SpanSignal } from "./span-payload-messages.es.js";
7
7
  import { SpanPayloadProcessorInput } from "./span-payload-processor.es.js";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -6,7 +6,7 @@ const require_DataKeysAndValues = require("../../../../DataKeysAndValues-DsH6AbA
6
6
  const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
7
7
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
8
8
  const require_domains_traces_components_span_payload_span_payload_attachment = require("./span-payload-attachment.cjs.js");
9
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
9
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
10
10
  const require_domains_traces_components_span_payload_span_payload_processor = require("./span-payload-processor.cjs.js");
11
11
  const require_inline_code = require("../../../../inline-code-nhZUg7Zj.cjs");
12
12
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -5,7 +5,7 @@ import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-PwOmGxyp.j
5
5
  import { asCoreSpan, hasItems, pickRenderer } from "./span-payload-registry.es.js";
6
6
  import { SpanPayloadJson } from "./span-payload-json.es.js";
7
7
  import { SpanPayloadAttachment } from "./span-payload-attachment.es.js";
8
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Dyhbqaa7.js";
8
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-ChvD2RrN.js";
9
9
  import { SpanPayloadProcessor } from "./span-payload-processor.es.js";
10
10
  import { t as InlineCode } from "../../../../inline-code-BR1gVYiZ.js";
11
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -8,7 +8,7 @@ const require_domains_chat_messages_signal_badge = require("../../../chat/messag
8
8
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
9
9
  const require_domains_traces_components_span_payload_available_skills = require("./available-skills.cjs.js");
10
10
  const require_domains_traces_components_span_payload_span_payload_attachment = require("./span-payload-attachment.cjs.js");
11
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
11
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
12
12
  const require_domains_traces_components_span_payload_span_signal_details = require("./span-signal-details.cjs.js");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  // src/domains/traces/components/span-payload/span-payload-messages.tsx
@@ -7,7 +7,7 @@ import { SignalBadge } from "../../../chat/messages/signal-badge.es.js";
7
7
  import { SpanPayloadJson } from "./span-payload-json.es.js";
8
8
  import { parseAvailableSkills } from "./available-skills.es.js";
9
9
  import { SpanPayloadAttachment } from "./span-payload-attachment.es.js";
10
- import { a as SpanPayloadListName, c as SpanPayloadTool, i as SpanPayloadList, n as SpanPayloadField, o as SpanPayloadMarkdown, r as SpanPayloadLabel } from "../../../../span-payload-primitives-Dyhbqaa7.js";
10
+ import { a as SpanPayloadListName, c as SpanPayloadTool, i as SpanPayloadList, n as SpanPayloadField, o as SpanPayloadMarkdown, r as SpanPayloadLabel } from "../../../../span-payload-primitives-ChvD2RrN.js";
11
11
  import { SignalDetails } from "./span-signal-details.es.js";
12
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
13
  // src/domains/traces/components/span-payload/span-payload-messages.tsx
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
2
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
3
3
  exports.SpanPayloadCollapsible = require_span_payload_primitives.SpanPayloadCollapsible;
4
4
  exports.SpanPayloadField = require_span_payload_primitives.SpanPayloadField;
5
5
  exports.SpanPayloadLabel = require_span_payload_primitives.SpanPayloadLabel;
@@ -1 +1 @@
1
- export { t as SpanPayloadCollapsible, n as SpanPayloadField, r as SpanPayloadLabel, i as SpanPayloadList, a as SpanPayloadListName, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls } from "../../../../span-payload-primitives-Dyhbqaa7.js";
1
+ export { t as SpanPayloadCollapsible, n as SpanPayloadField, r as SpanPayloadLabel, i as SpanPayloadList, a as SpanPayloadListName, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls } from "../../../../span-payload-primitives-ChvD2RrN.js";
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_DataKeysAndValues = require("../../../../DataKeysAndValues-DsH6AbAo.cjs");
3
3
  const require_domains_traces_components_span_payload_span_payload_processor_fields = require("./span-payload-processor-fields.cjs.js");
4
4
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
5
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
5
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
6
6
  const require_domains_traces_components_span_payload_span_payload_messages = require("./span-payload-messages.cjs.js");
7
7
  let react = require("react");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -1,7 +1,7 @@
1
1
  import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-PwOmGxyp.js";
2
2
  import { isScalar, processorInputToolKeys, readProcessorPayload } from "./span-payload-processor-fields.es.js";
3
3
  import { SpanPayloadJson } from "./span-payload-json.es.js";
4
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Dyhbqaa7.js";
4
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-ChvD2RrN.js";
5
5
  import { SpanPayloadMessages } from "./span-payload-messages.es.js";
6
6
  import { Fragment } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
2
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
3
3
  exports.SpanPayloadTool = require_span_payload_primitives.SpanPayloadTool;
4
4
  exports.SpanToolNameValue = require_span_payload_primitives.SpanToolNameValue;
@@ -1 +1 @@
1
- export { c as SpanPayloadTool, l as SpanToolNameValue } from "../../../../span-payload-primitives-Dyhbqaa7.js";
1
+ export { c as SpanPayloadTool, l as SpanToolNameValue } from "../../../../span-payload-primitives-ChvD2RrN.js";
@@ -3,7 +3,7 @@ const require_Txt = require("../../../../Txt-BnoSqxKE.cjs");
3
3
  const require_string = require("../../../../string-DdJJdCv2.cjs");
4
4
  const require_domains_traces_components_span_outcome_utils = require("../span-outcome.utils.cjs.js");
5
5
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
6
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
6
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
7
7
  const require_domains_traces_components_span_payload_span_payload_messages = require("./span-payload-messages.cjs.js");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  // src/domains/traces/components/span-payload/span-processor-mutations.tsx
@@ -2,7 +2,7 @@ import { t as Txt } from "../../../../Txt-BM6TVV_c.js";
2
2
  import { r as pluralize } from "../../../../string-CNKDIc_4.js";
3
3
  import { getSpanChanges } from "../span-outcome.utils.es.js";
4
4
  import { SpanPayloadJson } from "./span-payload-json.es.js";
5
- import { t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Dyhbqaa7.js";
5
+ import { t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-ChvD2RrN.js";
6
6
  import { SpanPayloadMessages } from "./span-payload-messages.es.js";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  // src/domains/traces/components/span-payload/span-processor-mutations.tsx
@@ -5,7 +5,7 @@ const require_icons_ToolsIcon = require("../../../../icons/ToolsIcon.cjs.js");
5
5
  const require_domains_chat_messages_message_row = require("../../../chat/messages/message-row.cjs.js");
6
6
  const require_domains_traces_components_format_trace_thread_messages = require("../format-trace-thread-messages.cjs.js");
7
7
  const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
8
- const require_span_payload_primitives = require("../../../../span-payload-primitives-B10Xxmx7.cjs");
8
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-w1vtAXAw.cjs");
9
9
  const require_domains_traces_components_span_payload_span_payload_section = require("./span-payload-section.cjs.js");
10
10
  const require_domains_traces_components_read_only_tool_call_provider = require("../read-only-tool-call-provider.cjs.js");
11
11
  const require_domains_traces_components_span_payload_use_span_tool_calls = require("./use-span-tool-calls.cjs.js");
@@ -4,7 +4,7 @@ import { ToolsIcon } from "../../../../icons/ToolsIcon.es.js";
4
4
  import { MessageRow } from "../../../chat/messages/message-row.es.js";
5
5
  import { getRequestedToolCalls } from "../format-trace-thread-messages.es.js";
6
6
  import { getDelegatedToolHref, getSpanTools } from "./span-payload-registry.es.js";
7
- import { a as SpanPayloadListName, i as SpanPayloadList } from "../../../../span-payload-primitives-Dyhbqaa7.js";
7
+ import { a as SpanPayloadListName, i as SpanPayloadList } from "../../../../span-payload-primitives-ChvD2RrN.js";
8
8
  import { SpanPayloadSection } from "./span-payload-section.es.js";
9
9
  import { ReadOnlyToolCallProvider } from "../read-only-tool-call-provider.es.js";
10
10
  import { useSpanToolCalls } from "./use-span-tool-calls.es.js";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_observability_saved_views = require("../../../../observability-saved-views-CwCii7hh.cjs");
2
+ const require_observability_saved_views = require("../../../../observability-saved-views-BNU3GkK6.cjs");
3
3
  const require_domains_traces_components_traces_explorer_traces_explorer_context = require("./traces-explorer-context.cjs.js");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  // src/domains/traces/components/traces-explorer/traces-explorer-saved-views.tsx
@@ -1,4 +1,4 @@
1
- import { t as ObservabilitySavedViews } from "../../../../observability-saved-views-Bo5kLN20.js";
1
+ import { t as ObservabilitySavedViews } from "../../../../observability-saved-views-Zlz74syw.js";
2
2
  import { useTracesColumns } from "./traces-explorer-context.es.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  // src/domains/traces/components/traces-explorer/traces-explorer-saved-views.tsx
@@ -3,6 +3,7 @@ const require_domains_workflows_context_workflow_run_context = require("../conte
3
3
  require("./workflow-step-node-utils.cjs.js");
4
4
  const require_domains_workflows_workflow_utils = require("./utils.cjs.js");
5
5
  const require_lib_form_json_schema_to_zod_runtime = require("../../../lib/form/json-schema-to-zod-runtime.cjs.js");
6
+ const require_lib_form_zod_provider_compat = require("../../../lib/form/zod-provider/compat.cjs.js");
6
7
  let react = require("react");
7
8
  let superjson = require("superjson");
8
9
  let zod = require("zod");
@@ -24,7 +25,7 @@ function useWorkflowSchemas(workflow) {
24
25
  const zodStateSchema = stateSchema ? require_lib_form_json_schema_to_zod_runtime.jsonSchemaToZodRuntime((0, superjson.parse)(stateSchema)) : null;
25
26
  return {
26
27
  zodSchemaToUse: zodStateSchema ? zod.z.object({
27
- inputData: zodInputSchema ?? zod.z.any(),
28
+ inputData: require_lib_form_zod_provider_compat.asObjectProperty(zodInputSchema ?? zod.z.any()),
28
29
  initialState: zodStateSchema.optional()
29
30
  }) : zodInputSchema,
30
31
  hasStateSchema: !!stateSchema
@@ -1 +1 @@
1
- {"version":3,"file":"use-workflow-trigger.cjs.js","names":["useMemo","jsonSchemaToZodRuntime","parse","z","constructNodesAndEdges","buildStepsFlow","buildStepSuccessors","collectGraphStepFlags","useContext","WorkflowRunContext","useCallback","isBranchArmBypassed","selectNextStepKey","buildNextStepInput","isLastRunnableStep"],"sources":["../../../../src/domains/workflows/workflow/use-workflow-trigger.ts"],"sourcesContent":["import type { GetWorkflowResponse, TimeTravelParams } from '@mastra/client-js';\nimport { useCallback, useContext, useMemo } from 'react';\nimport { parse } from 'superjson';\nimport { z } from 'zod';\n\nimport type { WorkflowRunStreamResult } from '../context/workflow-run-context';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport {\n buildNextStepInput,\n buildStepSuccessors,\n buildStepsFlow,\n collectGraphStepFlags,\n constructNodesAndEdges,\n isBranchArmBypassed,\n isLastRunnableStep,\n selectNextStepKey,\n} from './utils';\nimport { WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { ResumeStepParams } from './workflow-suspended-steps';\nimport { jsonSchemaToZodRuntime } from '@/lib/form/json-schema-to-zod-runtime';\n\nexport interface SuspendedStep {\n stepId: string;\n runId: string;\n suspendPayload: unknown;\n}\n\nexport function useSuspendedSteps(streamResult: WorkflowRunStreamResult | null, runId: string): SuspendedStep[] {\n return useMemo(() => {\n return Object.entries(streamResult?.steps || {})\n .filter(([_, { status }]) => status === 'suspended')\n .map(([stepId, { suspendPayload }]) => ({ stepId, runId, suspendPayload }));\n }, [streamResult?.steps, runId]);\n}\n\nexport function useWorkflowSchemas(workflow?: GetWorkflowResponse) {\n return useMemo(() => {\n const triggerSchema = workflow?.inputSchema;\n const stateSchema = workflow?.stateSchema;\n\n const zodInputSchema = triggerSchema ? jsonSchemaToZodRuntime(parse(triggerSchema)) : null;\n const zodStateSchema = stateSchema ? jsonSchemaToZodRuntime(parse(stateSchema)) : null;\n\n return {\n zodSchemaToUse: zodStateSchema\n ? z.object({\n inputData: zodInputSchema ?? z.any(),\n initialState: zodStateSchema.optional(),\n })\n : zodInputSchema,\n hasStateSchema: !!stateSchema,\n };\n }, [workflow?.inputSchema, workflow?.stateSchema]);\n}\n\nfunction useWorkflowStepGraphInfo(stepGraph: GetWorkflowResponse['stepGraph'] | undefined) {\n return useMemo(() => {\n const { nodes, edges } = constructNodesAndEdges({ stepGraph });\n const stepNodesInOrder = nodes.flatMap(node => {\n if (node.type !== WORKFLOW_STEP_NODE_TYPE || node.data.nodeRole === 'condition' || !node.data.stepId) {\n return [];\n }\n return [node.data.stepId];\n });\n\n const stepsFlow = buildStepsFlow(edges);\n const stepSuccessors = buildStepSuccessors(stepsFlow);\n const { conditionalStepIds, nestedWorkflowStepIds } = collectGraphStepFlags(stepGraph);\n\n return { stepNodesInOrder, stepsFlow, stepSuccessors, conditionalStepIds, nestedWorkflowStepIds };\n }, [stepGraph]);\n}\n\nexport function useWaitingStepKey(): string | undefined {\n const { result, workflow } = useContext(WorkflowRunContext);\n\n const { stepNodesInOrder, stepsFlow, stepSuccessors, conditionalStepIds } = useWorkflowStepGraphInfo(\n workflow?.stepGraph,\n );\n\n const steps = result?.steps;\n const isPaused = result?.status === 'paused';\n\n const isStepResolved = useCallback(\n (stepId: string) => steps?.[stepId]?.status === 'success' || steps?.[stepId]?.status === 'skipped',\n [steps],\n );\n const isStepBypassed = useCallback(\n (stepId: string) => isBranchArmBypassed({ stepId, conditionalStepIds, stepSuccessors, stepsFlow, steps }),\n [conditionalStepIds, stepSuccessors, stepsFlow, steps],\n );\n\n return useMemo(\n () =>\n isPaused ? selectNextStepKey({ stepNodesInOrder, isStepSuccess: isStepResolved, isStepBypassed }) : undefined,\n [isPaused, stepNodesInOrder, isStepResolved, isStepBypassed],\n );\n}\n\nexport function useNextPerStep(requestContext: Record<string, any>) {\n const { result, runId, workflowId, workflow, payload, setDebugMode, timeTravelWorkflowStream } =\n useContext(WorkflowRunContext);\n\n const { stepsFlow, stepNodesInOrder, nestedWorkflowStepIds, conditionalStepIds, stepSuccessors } =\n useWorkflowStepGraphInfo(workflow?.stepGraph);\n\n const steps = result?.steps;\n\n const isStepResolved = useCallback(\n (stepId: string) => steps?.[stepId]?.status === 'success' || steps?.[stepId]?.status === 'skipped',\n [steps],\n );\n const isStepBypassed = useCallback(\n (stepId: string) => isBranchArmBypassed({ stepId, conditionalStepIds, stepSuccessors, stepsFlow, steps }),\n [conditionalStepIds, stepSuccessors, stepsFlow, steps],\n );\n\n const nextStepKey = useWaitingStepKey();\n\n const stepPayload = useMemo(() => {\n const input = buildNextStepInput({ nextStepKey, stepsFlow, steps, isStepBypassed });\n if (input) return input;\n if (nextStepKey && (stepsFlow[nextStepKey]?.length ?? 0) === 0) {\n return { hasMultiSteps: false, input: result?.input !== undefined ? result.input : payload };\n }\n return undefined;\n }, [nextStepKey, stepsFlow, steps, result?.input, payload, isStepBypassed]);\n\n const isLastStep = useMemo(\n () => isLastRunnableStep({ nextStepKey, stepNodesInOrder, isStepSuccess: isStepResolved, isStepBypassed }),\n [nextStepKey, stepNodesInOrder, isStepResolved, isStepBypassed],\n );\n\n const canRunNextStep = Boolean(nextStepKey && stepPayload);\n\n const runStep = useCallback(\n (isContinueRun: boolean) => {\n if (!nextStepKey || !stepPayload) return;\n const isNestedWorkflowStep = nestedWorkflowStepIds.has(nextStepKey);\n const runToFinish = isContinueRun || isNestedWorkflowStep || isLastStep;\n\n const payload = {\n runId,\n workflowId,\n step: nextStepKey,\n inputData: stepPayload.hasMultiSteps ? undefined : stepPayload.input,\n requestContext,\n perStep: !runToFinish,\n ...(stepPayload.hasMultiSteps\n ? {\n context: Object.keys(stepPayload.input).reduce<NonNullable<TimeTravelParams['context']>>(\n (acc, stepId) => {\n acc[stepId] = { status: 'success', output: stepPayload.input[stepId] };\n return acc;\n },\n {},\n ),\n }\n : {}),\n };\n\n if (isContinueRun) {\n setDebugMode(false);\n }\n\n void timeTravelWorkflowStream(payload);\n },\n [\n nextStepKey,\n stepPayload,\n runId,\n workflowId,\n requestContext,\n setDebugMode,\n timeTravelWorkflowStream,\n nestedWorkflowStepIds,\n isLastStep,\n ],\n );\n\n return {\n canRunNextStep,\n nextStepLabel: nextStepKey && conditionalStepIds.has(nextStepKey) ? 'Evaluate branch conditions' : nextStepKey,\n runNextStep: useCallback(() => runStep(false), [runStep]),\n continueFullRun: useCallback(() => runStep(true), [runStep]),\n };\n}\n\nexport function useResumeWorkflow(requestContext: Record<string, any>) {\n const { workflowId, workflow, createWorkflowRun, resumeWorkflow } = useContext(WorkflowRunContext);\n\n return useCallback(\n async (step: ResumeStepParams) => {\n if (!workflow) return;\n\n const { stepId, runId: prevRunId, resumeData } = step;\n\n const run = await createWorkflowRun({ workflowId, prevRunId });\n\n await resumeWorkflow({\n step: stepId,\n runId: run.runId,\n resumeData,\n workflowId,\n requestContext,\n });\n },\n [workflowId, workflow, createWorkflowRun, resumeWorkflow, requestContext],\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-workflow-trigger.cjs.js","names":["useMemo","jsonSchemaToZodRuntime","parse","z","asObjectProperty","constructNodesAndEdges","buildStepsFlow","buildStepSuccessors","collectGraphStepFlags","useContext","WorkflowRunContext","useCallback","isBranchArmBypassed","selectNextStepKey","buildNextStepInput","isLastRunnableStep"],"sources":["../../../../src/domains/workflows/workflow/use-workflow-trigger.ts"],"sourcesContent":["import type { GetWorkflowResponse, TimeTravelParams } from '@mastra/client-js';\nimport { useCallback, useContext, useMemo } from 'react';\nimport { parse } from 'superjson';\nimport { z } from 'zod';\n\nimport type { WorkflowRunStreamResult } from '../context/workflow-run-context';\nimport { WorkflowRunContext } from '../context/workflow-run-context';\nimport {\n buildNextStepInput,\n buildStepSuccessors,\n buildStepsFlow,\n collectGraphStepFlags,\n constructNodesAndEdges,\n isBranchArmBypassed,\n isLastRunnableStep,\n selectNextStepKey,\n} from './utils';\nimport { WORKFLOW_STEP_NODE_TYPE } from './workflow-step-node-utils';\nimport type { ResumeStepParams } from './workflow-suspended-steps';\nimport { jsonSchemaToZodRuntime } from '@/lib/form/json-schema-to-zod-runtime';\nimport { asObjectProperty } from '@/lib/form/zod-provider/compat';\n\nexport interface SuspendedStep {\n stepId: string;\n runId: string;\n suspendPayload: unknown;\n}\n\nexport function useSuspendedSteps(streamResult: WorkflowRunStreamResult | null, runId: string): SuspendedStep[] {\n return useMemo(() => {\n return Object.entries(streamResult?.steps || {})\n .filter(([_, { status }]) => status === 'suspended')\n .map(([stepId, { suspendPayload }]) => ({ stepId, runId, suspendPayload }));\n }, [streamResult?.steps, runId]);\n}\n\nexport function useWorkflowSchemas(workflow?: GetWorkflowResponse) {\n return useMemo(() => {\n const triggerSchema = workflow?.inputSchema;\n const stateSchema = workflow?.stateSchema;\n\n const zodInputSchema = triggerSchema ? jsonSchemaToZodRuntime(parse(triggerSchema)) : null;\n const zodStateSchema = stateSchema ? jsonSchemaToZodRuntime(parse(stateSchema)) : null;\n\n return {\n zodSchemaToUse: zodStateSchema\n ? z.object({\n inputData: asObjectProperty(zodInputSchema ?? z.any()),\n initialState: zodStateSchema.optional(),\n })\n : zodInputSchema,\n hasStateSchema: !!stateSchema,\n };\n }, [workflow?.inputSchema, workflow?.stateSchema]);\n}\n\nfunction useWorkflowStepGraphInfo(stepGraph: GetWorkflowResponse['stepGraph'] | undefined) {\n return useMemo(() => {\n const { nodes, edges } = constructNodesAndEdges({ stepGraph });\n const stepNodesInOrder = nodes.flatMap(node => {\n if (node.type !== WORKFLOW_STEP_NODE_TYPE || node.data.nodeRole === 'condition' || !node.data.stepId) {\n return [];\n }\n return [node.data.stepId];\n });\n\n const stepsFlow = buildStepsFlow(edges);\n const stepSuccessors = buildStepSuccessors(stepsFlow);\n const { conditionalStepIds, nestedWorkflowStepIds } = collectGraphStepFlags(stepGraph);\n\n return { stepNodesInOrder, stepsFlow, stepSuccessors, conditionalStepIds, nestedWorkflowStepIds };\n }, [stepGraph]);\n}\n\nexport function useWaitingStepKey(): string | undefined {\n const { result, workflow } = useContext(WorkflowRunContext);\n\n const { stepNodesInOrder, stepsFlow, stepSuccessors, conditionalStepIds } = useWorkflowStepGraphInfo(\n workflow?.stepGraph,\n );\n\n const steps = result?.steps;\n const isPaused = result?.status === 'paused';\n\n const isStepResolved = useCallback(\n (stepId: string) => steps?.[stepId]?.status === 'success' || steps?.[stepId]?.status === 'skipped',\n [steps],\n );\n const isStepBypassed = useCallback(\n (stepId: string) => isBranchArmBypassed({ stepId, conditionalStepIds, stepSuccessors, stepsFlow, steps }),\n [conditionalStepIds, stepSuccessors, stepsFlow, steps],\n );\n\n return useMemo(\n () =>\n isPaused ? selectNextStepKey({ stepNodesInOrder, isStepSuccess: isStepResolved, isStepBypassed }) : undefined,\n [isPaused, stepNodesInOrder, isStepResolved, isStepBypassed],\n );\n}\n\nexport function useNextPerStep(requestContext: Record<string, any>) {\n const { result, runId, workflowId, workflow, payload, setDebugMode, timeTravelWorkflowStream } =\n useContext(WorkflowRunContext);\n\n const { stepsFlow, stepNodesInOrder, nestedWorkflowStepIds, conditionalStepIds, stepSuccessors } =\n useWorkflowStepGraphInfo(workflow?.stepGraph);\n\n const steps = result?.steps;\n\n const isStepResolved = useCallback(\n (stepId: string) => steps?.[stepId]?.status === 'success' || steps?.[stepId]?.status === 'skipped',\n [steps],\n );\n const isStepBypassed = useCallback(\n (stepId: string) => isBranchArmBypassed({ stepId, conditionalStepIds, stepSuccessors, stepsFlow, steps }),\n [conditionalStepIds, stepSuccessors, stepsFlow, steps],\n );\n\n const nextStepKey = useWaitingStepKey();\n\n const stepPayload = useMemo(() => {\n const input = buildNextStepInput({ nextStepKey, stepsFlow, steps, isStepBypassed });\n if (input) return input;\n if (nextStepKey && (stepsFlow[nextStepKey]?.length ?? 0) === 0) {\n return { hasMultiSteps: false, input: result?.input !== undefined ? result.input : payload };\n }\n return undefined;\n }, [nextStepKey, stepsFlow, steps, result?.input, payload, isStepBypassed]);\n\n const isLastStep = useMemo(\n () => isLastRunnableStep({ nextStepKey, stepNodesInOrder, isStepSuccess: isStepResolved, isStepBypassed }),\n [nextStepKey, stepNodesInOrder, isStepResolved, isStepBypassed],\n );\n\n const canRunNextStep = Boolean(nextStepKey && stepPayload);\n\n const runStep = useCallback(\n (isContinueRun: boolean) => {\n if (!nextStepKey || !stepPayload) return;\n const isNestedWorkflowStep = nestedWorkflowStepIds.has(nextStepKey);\n const runToFinish = isContinueRun || isNestedWorkflowStep || isLastStep;\n\n const payload = {\n runId,\n workflowId,\n step: nextStepKey,\n inputData: stepPayload.hasMultiSteps ? undefined : stepPayload.input,\n requestContext,\n perStep: !runToFinish,\n ...(stepPayload.hasMultiSteps\n ? {\n context: Object.keys(stepPayload.input).reduce<NonNullable<TimeTravelParams['context']>>(\n (acc, stepId) => {\n acc[stepId] = { status: 'success', output: stepPayload.input[stepId] };\n return acc;\n },\n {},\n ),\n }\n : {}),\n };\n\n if (isContinueRun) {\n setDebugMode(false);\n }\n\n void timeTravelWorkflowStream(payload);\n },\n [\n nextStepKey,\n stepPayload,\n runId,\n workflowId,\n requestContext,\n setDebugMode,\n timeTravelWorkflowStream,\n nestedWorkflowStepIds,\n isLastStep,\n ],\n );\n\n return {\n canRunNextStep,\n nextStepLabel: nextStepKey && conditionalStepIds.has(nextStepKey) ? 'Evaluate branch conditions' : nextStepKey,\n runNextStep: useCallback(() => runStep(false), [runStep]),\n continueFullRun: useCallback(() => runStep(true), [runStep]),\n };\n}\n\nexport function useResumeWorkflow(requestContext: Record<string, any>) {\n const { workflowId, workflow, createWorkflowRun, resumeWorkflow } = useContext(WorkflowRunContext);\n\n return useCallback(\n async (step: ResumeStepParams) => {\n if (!workflow) return;\n\n const { stepId, runId: prevRunId, resumeData } = step;\n\n const run = await createWorkflowRun({ workflowId, prevRunId });\n\n await resumeWorkflow({\n step: stepId,\n runId: run.runId,\n resumeData,\n workflowId,\n requestContext,\n });\n },\n [workflowId, workflow, createWorkflowRun, resumeWorkflow, requestContext],\n );\n}\n"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { WorkflowRunContext } from "../context/workflow-run-context.es.js";
2
2
  import "./workflow-step-node-utils.es.js";
3
3
  import { buildNextStepInput, buildStepSuccessors, buildStepsFlow, collectGraphStepFlags, constructNodesAndEdges, isBranchArmBypassed, isLastRunnableStep, selectNextStepKey } from "./utils.es.js";
4
4
  import { jsonSchemaToZodRuntime } from "../../../lib/form/json-schema-to-zod-runtime.es.js";
5
+ import { asObjectProperty } from "../../../lib/form/zod-provider/compat.es.js";
5
6
  import { useCallback, useContext, useMemo } from "react";
6
7
  import { parse } from "superjson";
7
8
  import { z } from "zod";
@@ -23,7 +24,7 @@ function useWorkflowSchemas(workflow) {
23
24
  const zodStateSchema = stateSchema ? jsonSchemaToZodRuntime(parse(stateSchema)) : null;
24
25
  return {
25
26
  zodSchemaToUse: zodStateSchema ? z.object({
26
- inputData: zodInputSchema ?? z.any(),
27
+ inputData: asObjectProperty(zodInputSchema ?? z.any()),
27
28
  initialState: zodStateSchema.optional()
28
29
  }) : zodInputSchema,
29
30
  hasStateSchema: !!stateSchema