@hotmeshio/long-tail 0.1.15 → 0.1.17

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 (368) hide show
  1. package/build/api/escalations/resolve.js +1 -0
  2. package/build/api/files.d.ts +4 -0
  3. package/build/api/files.js +14 -0
  4. package/build/api/settings.js +0 -3
  5. package/build/api/workflows/config.js +5 -0
  6. package/build/api/yaml-workflows/crud.js +25 -5
  7. package/build/index.d.ts +1 -2
  8. package/build/index.js +1 -4
  9. package/build/lib/db/schemas/002_seed.sql +3 -81
  10. package/build/lib/events/socketio.d.ts +12 -0
  11. package/build/lib/events/socketio.js +24 -1
  12. package/build/lib/storage/mime.js +20 -0
  13. package/build/routes/file-browser.js +30 -0
  14. package/build/routes/files.js +20 -18
  15. package/build/routes/index.js +2 -0
  16. package/build/routes/nats-credentials.d.ts +2 -0
  17. package/build/routes/nats-credentials.js +22 -0
  18. package/build/services/config/sql.d.ts +3 -0
  19. package/build/services/config/sql.js +15 -1
  20. package/build/services/config/write.d.ts +6 -0
  21. package/build/services/config/write.js +64 -0
  22. package/build/services/cron/index.d.ts +5 -0
  23. package/build/services/cron/index.js +30 -0
  24. package/build/services/insight/index.js +3 -0
  25. package/build/services/interceptor/activities/task.d.ts +1 -0
  26. package/build/services/interceptor/activities/task.js +2 -1
  27. package/build/services/interceptor/activities/workflow.js +1 -0
  28. package/build/services/interceptor/index.js +4 -4
  29. package/build/services/interceptor/lifecycle.js +1 -1
  30. package/build/services/mcp/db.d.ts +17 -0
  31. package/build/services/mcp/db.js +50 -0
  32. package/build/services/mcp/sql.d.ts +4 -1
  33. package/build/services/mcp/sql.js +9 -2
  34. package/build/services/oauth/index.js +4 -1
  35. package/build/services/oauth/providers/google.js +7 -2
  36. package/build/services/orchestrator/index.js +5 -0
  37. package/build/services/task/crud.js +1 -0
  38. package/build/services/task/sql.d.ts +1 -1
  39. package/build/services/task/sql.js +2 -2
  40. package/build/services/task/types.d.ts +2 -0
  41. package/build/services/workers/registry.js +3 -1
  42. package/build/services/workflow-invocation.js +8 -1
  43. package/build/services/yaml-workflow/workers/register.js +4 -2
  44. package/build/start/adapters.js +4 -1
  45. package/build/start/socket-auth.d.ts +13 -0
  46. package/build/start/socket-auth.js +32 -0
  47. package/build/start/workers.d.ts +2 -1
  48. package/build/start/workers.js +66 -6
  49. package/build/system/index.d.ts +12 -10
  50. package/build/system/index.js +240 -67
  51. package/build/system/mcp-servers/playwright/schemas.d.ts +12 -12
  52. package/build/system/seed/index.d.ts +0 -7
  53. package/build/system/seed/index.js +5 -46
  54. package/build/tsconfig.tsbuildinfo +1 -1
  55. package/build/types/index.d.ts +1 -1
  56. package/build/types/startup.d.ts +59 -2
  57. package/dashboard/dist/assets/AdminDashboard-CsTOErp1.js +2 -0
  58. package/dashboard/dist/assets/{AdminDashboard-NLryl1_B.js.map → AdminDashboard-CsTOErp1.js.map} +1 -1
  59. package/dashboard/dist/assets/AvailableEscalationsPage-BqQA3IJp.js +2 -0
  60. package/dashboard/dist/assets/{AvailableEscalationsPage-6vexlrk3.js.map → AvailableEscalationsPage-BqQA3IJp.js.map} +1 -1
  61. package/dashboard/dist/assets/BotPicker-C2xR1xay.js +2 -0
  62. package/dashboard/dist/assets/{BotPicker-DWhn0tr1.js.map → BotPicker-C2xR1xay.js.map} +1 -1
  63. package/dashboard/dist/assets/CollapsibleSection-CRtHQsAv.js +2 -0
  64. package/dashboard/dist/assets/{CollapsibleSection-CgYgQiOc.js.map → CollapsibleSection-CRtHQsAv.js.map} +1 -1
  65. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
  66. package/dashboard/dist/assets/{ConfirmDeleteModal-DCKAPXD3.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
  67. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
  68. package/dashboard/dist/assets/{CopyableId-DXkaAOYk.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
  69. package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js +2 -0
  70. package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js.map +1 -0
  71. package/dashboard/dist/assets/CustomDurationPicker-BABUv1V2.js +2 -0
  72. package/dashboard/dist/assets/{CustomDurationPicker-D2G1ldiF.js.map → CustomDurationPicker-BABUv1V2.js.map} +1 -1
  73. package/dashboard/dist/assets/DataTable-D3-wSEf0.js +2 -0
  74. package/dashboard/dist/assets/{DataTable-DXSUbA26.js.map → DataTable-D3-wSEf0.js.map} +1 -1
  75. package/dashboard/dist/assets/DropZone-DHKmMqRA.js +2 -0
  76. package/dashboard/dist/assets/DropZone-DHKmMqRA.js.map +1 -0
  77. package/dashboard/dist/assets/ElapsedCell-DrJif03B.js +2 -0
  78. package/dashboard/dist/assets/{ElapsedCell-CQGqkXP_.js.map → ElapsedCell-DrJif03B.js.map} +1 -1
  79. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
  80. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js.map +1 -0
  81. package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js +2 -0
  82. package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js.map +1 -0
  83. package/dashboard/dist/assets/EventTable-Dh3_9DAY.js +2 -0
  84. package/dashboard/dist/assets/{EventTable-BMJAPkMi.js.map → EventTable-Dh3_9DAY.js.map} +1 -1
  85. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
  86. package/dashboard/dist/assets/{FilterBar-DbVbCzH2.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
  87. package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +2 -0
  88. package/dashboard/dist/assets/{ListToolbar-0XNuXj0M.js.map → ListToolbar-CyEkulVR.js.map} +1 -1
  89. package/dashboard/dist/assets/McpOverview-ChLa6Gl7.js +2 -0
  90. package/dashboard/dist/assets/{McpOverview-CeYnCzBN.js.map → McpOverview-ChLa6Gl7.js.map} +1 -1
  91. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +5 -0
  92. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +1 -0
  93. package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js +2 -0
  94. package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js.map +1 -0
  95. package/dashboard/dist/assets/McpRunDetailPage-ERVuNEEK.js +2 -0
  96. package/dashboard/dist/assets/{McpRunDetailPage-CZtodW_Z.js.map → McpRunDetailPage-ERVuNEEK.js.map} +1 -1
  97. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +2 -0
  98. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +1 -0
  99. package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
  100. package/dashboard/dist/assets/{Modal-yyhUeKoA.js.map → Modal-DEODGeqx.js.map} +1 -1
  101. package/dashboard/dist/assets/OperatorDashboard-CJm_BTPU.js +2 -0
  102. package/dashboard/dist/assets/{OperatorDashboard-Ceh7OQtZ.js.map → OperatorDashboard-CJm_BTPU.js.map} +1 -1
  103. package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js +2 -0
  104. package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js.map +1 -0
  105. package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js +2 -0
  106. package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js.map +1 -0
  107. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
  108. package/dashboard/dist/assets/{PriorityBadge-BrPikMFy.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
  109. package/dashboard/dist/assets/ProcessDetailPage-vfnCDyQK.js +2 -0
  110. package/dashboard/dist/assets/{ProcessDetailPage-2miaYd8G.js.map → ProcessDetailPage-vfnCDyQK.js.map} +1 -1
  111. package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js +2 -0
  112. package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js.map +1 -0
  113. package/dashboard/dist/assets/RolePill-BhVC0cc3.js +2 -0
  114. package/dashboard/dist/assets/{RolePill-DxbJMfJu.js.map → RolePill-BhVC0cc3.js.map} +1 -1
  115. package/dashboard/dist/assets/RolesPage-DYSt2aAr.js +2 -0
  116. package/dashboard/dist/assets/RolesPage-DYSt2aAr.js.map +1 -0
  117. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
  118. package/dashboard/dist/assets/{RowActions-DurFwIwe.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
  119. package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +2 -0
  120. package/dashboard/dist/assets/{RunAsSelector-CNKraP6u.js.map → RunAsSelector-CD7_Dmb0.js.map} +1 -1
  121. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
  122. package/dashboard/dist/assets/{StatCard-CKplpK3w.js.map → StatCard-DlgF0CJC.js.map} +1 -1
  123. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
  124. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js.map +1 -0
  125. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
  126. package/dashboard/dist/assets/{StepIndicator-Dicx0WTZ.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
  127. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
  128. package/dashboard/dist/assets/{StickyPagination-B2jYvU3-.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
  129. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +2 -0
  130. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +1 -0
  131. package/dashboard/dist/assets/TagInput-DftaRHDV.js +2 -0
  132. package/dashboard/dist/assets/{TagInput-CypDZ6Kl.js.map → TagInput-DftaRHDV.js.map} +1 -1
  133. package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js +2 -0
  134. package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js.map +1 -0
  135. package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js +2 -0
  136. package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js.map +1 -0
  137. package/dashboard/dist/assets/TasksListPage-g6XIbhju.js +2 -0
  138. package/dashboard/dist/assets/{TasksListPage-D7CdkAeg.js.map → TasksListPage-g6XIbhju.js.map} +1 -1
  139. package/dashboard/dist/assets/TimeAgo-BihIwEbB.js +2 -0
  140. package/dashboard/dist/assets/{TimeAgo-B5LXB2aj.js.map → TimeAgo-BihIwEbB.js.map} +1 -1
  141. package/dashboard/dist/assets/TimestampCell-GOFcvE-i.js +2 -0
  142. package/dashboard/dist/assets/{TimestampCell-Crb9b0Gw.js.map → TimestampCell-GOFcvE-i.js.map} +1 -1
  143. package/dashboard/dist/assets/UserName-CmMVt4vS.js +2 -0
  144. package/dashboard/dist/assets/{UserName-OPg-nkRa.js.map → UserName-CmMVt4vS.js.map} +1 -1
  145. package/dashboard/dist/assets/WorkflowExecutionPage-soRFz_30.js +2 -0
  146. package/dashboard/dist/assets/{WorkflowExecutionPage-CcLVrs9b.js.map → WorkflowExecutionPage-soRFz_30.js.map} +1 -1
  147. package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js +2 -0
  148. package/dashboard/dist/assets/{WorkflowPill-CCV4MMj7.js.map → WorkflowPill-DUDDyBsj.js.map} +1 -1
  149. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +2 -0
  150. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +1 -0
  151. package/dashboard/dist/assets/WorkflowsOverview-z3Ztiz1y.js +2 -0
  152. package/dashboard/dist/assets/{WorkflowsOverview-DvShiYJV.js.map → WorkflowsOverview-z3Ztiz1y.js.map} +1 -1
  153. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +2 -0
  154. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +1 -0
  155. package/dashboard/dist/assets/{bots-Dqos20NE.js → bots-BZPXDh_y.js} +2 -2
  156. package/dashboard/dist/assets/{bots-Dqos20NE.js.map → bots-BZPXDh_y.js.map} +1 -1
  157. package/dashboard/dist/assets/escalation-DBUIq1Z4.js +2 -0
  158. package/dashboard/dist/assets/{escalation-A0CsbvNV.js.map → escalation-DBUIq1Z4.js.map} +1 -1
  159. package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +2 -0
  160. package/dashboard/dist/assets/{escalation-columns-BpBJN6k4.js.map → escalation-columns-DL4zsR8Y.js.map} +1 -1
  161. package/dashboard/dist/assets/helpers-D50KFFkI.js +2 -0
  162. package/dashboard/dist/assets/{helpers-CmznCuAx.js.map → helpers-D50KFFkI.js.map} +1 -1
  163. package/dashboard/dist/assets/index-B-ioA6yv.js +2 -0
  164. package/dashboard/dist/assets/index-B-ioA6yv.js.map +1 -0
  165. package/dashboard/dist/assets/index-B-jzKfuv.js +2 -0
  166. package/dashboard/dist/assets/index-B-jzKfuv.js.map +1 -0
  167. package/dashboard/dist/assets/index-BMpoMc4A.js +2 -0
  168. package/dashboard/dist/assets/{index-Cr0Rqsj7.js.map → index-BMpoMc4A.js.map} +1 -1
  169. package/dashboard/dist/assets/index-BU04qgJt.js +15 -0
  170. package/dashboard/dist/assets/index-BU04qgJt.js.map +1 -0
  171. package/dashboard/dist/assets/index-BUjxYyxc.js +63 -0
  172. package/dashboard/dist/assets/index-BUjxYyxc.js.map +1 -0
  173. package/dashboard/dist/assets/index-BpoHVMV7.js +2 -0
  174. package/dashboard/dist/assets/index-BpoHVMV7.js.map +1 -0
  175. package/dashboard/dist/assets/index-CEnDYJOO.js +2 -0
  176. package/dashboard/dist/assets/index-CEnDYJOO.js.map +1 -0
  177. package/dashboard/dist/assets/index-CbuH92vk.js +6 -0
  178. package/dashboard/dist/assets/index-CbuH92vk.js.map +1 -0
  179. package/dashboard/dist/assets/index-D9_hZmsW.js +5 -0
  180. package/dashboard/dist/assets/{index-BYwD3kHN.js.map → index-D9_hZmsW.js.map} +1 -1
  181. package/dashboard/dist/assets/index-DrouIN-M.js +2 -0
  182. package/dashboard/dist/assets/{index-VnYkWW8r.js.map → index-DrouIN-M.js.map} +1 -1
  183. package/dashboard/dist/assets/index-DzICLMI7.js +2 -0
  184. package/dashboard/dist/assets/{index-XGOmZ117.js.map → index-DzICLMI7.js.map} +1 -1
  185. package/dashboard/dist/assets/index-efS5gKpv.css +1 -0
  186. package/dashboard/dist/assets/index-qT78AZDq.js +2 -0
  187. package/dashboard/dist/assets/index-qT78AZDq.js.map +1 -0
  188. package/dashboard/dist/assets/mcp-D0GrHRFe.js +2 -0
  189. package/dashboard/dist/assets/{mcp-DrWymhSu.js.map → mcp-D0GrHRFe.js.map} +1 -1
  190. package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js → mcp-query-DC5woQn5.js} +2 -2
  191. package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js.map → mcp-query-DC5woQn5.js.map} +1 -1
  192. package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js → mcp-runs-CsoVQoPB.js} +2 -2
  193. package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js.map → mcp-runs-CsoVQoPB.js.map} +1 -1
  194. package/dashboard/dist/assets/namespaces-unpIb4gX.js +2 -0
  195. package/dashboard/dist/assets/{namespaces-Cm6AY5sh.js.map → namespaces-unpIb4gX.js.map} +1 -1
  196. package/dashboard/dist/assets/{roles-2v1Kc7BJ.js → roles--kBaFljg.js} +2 -2
  197. package/dashboard/dist/assets/{roles-2v1Kc7BJ.js.map → roles--kBaFljg.js.map} +1 -1
  198. package/dashboard/dist/assets/settings-B96YkawY.js +2 -0
  199. package/dashboard/dist/assets/{settings-DTQNp6tH.js.map → settings-B96YkawY.js.map} +1 -1
  200. package/dashboard/dist/assets/{tasks-CS1rgG1s.js → tasks-D_1NCfOZ.js} +2 -2
  201. package/dashboard/dist/assets/{tasks-CS1rgG1s.js.map → tasks-D_1NCfOZ.js.map} +1 -1
  202. package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js → useEventHooks-BPjEkCpD.js} +2 -2
  203. package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js.map → useEventHooks-BPjEkCpD.js.map} +1 -1
  204. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
  205. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
  206. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
  207. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
  208. package/dashboard/dist/assets/{useYamlActivityEvents-BeR-nVWQ.js → useYamlActivityEvents-D3RQjfzo.js} +2 -2
  209. package/dashboard/dist/assets/{useYamlActivityEvents-BeR-nVWQ.js.map → useYamlActivityEvents-D3RQjfzo.js.map} +1 -1
  210. package/dashboard/dist/assets/{users-DYsdQ7Md.js → users-e2oatvoj.js} +2 -2
  211. package/dashboard/dist/assets/{users-DYsdQ7Md.js.map → users-e2oatvoj.js.map} +1 -1
  212. package/dashboard/dist/assets/{vendor-icons-CWl44VA6.js → vendor-icons-BkK55L-1.js} +103 -88
  213. package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +1 -0
  214. package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
  215. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
  216. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
  217. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
  218. package/dashboard/dist/assets/{workflows-2QAXh3UD.js → workflows-D6diL54s.js} +2 -2
  219. package/dashboard/dist/assets/{workflows-2QAXh3UD.js.map → workflows-D6diL54s.js.map} +1 -1
  220. package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.js → yaml-workflows-CAKU7LUu.js} +2 -2
  221. package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.js.map → yaml-workflows-CAKU7LUu.js.map} +1 -1
  222. package/dashboard/dist/index.html +5 -5
  223. package/docs/dashboard.md +233 -65
  224. package/package.json +3 -2
  225. package/build/examples/external-mcp-server/server.d.ts +0 -17
  226. package/build/examples/external-mcp-server/server.js +0 -116
  227. package/build/examples/index.d.ts +0 -2
  228. package/build/examples/index.js +0 -7
  229. package/build/examples/seed-data.d.ts +0 -55
  230. package/build/examples/seed-data.js +0 -161
  231. package/build/examples/seed.d.ts +0 -5
  232. package/build/examples/seed.js +0 -132
  233. package/build/examples/types/envelopes.d.ts +0 -69
  234. package/build/examples/types/envelopes.js +0 -8
  235. package/build/examples/types/index.d.ts +0 -10
  236. package/build/examples/types/index.js +0 -9
  237. package/build/examples/types/resolvers.d.ts +0 -27
  238. package/build/examples/types/resolvers.js +0 -9
  239. package/build/examples/workers.d.ts +0 -10
  240. package/build/examples/workers.js +0 -59
  241. package/build/examples/workflows/assembly-line/activities.d.ts +0 -28
  242. package/build/examples/workflows/assembly-line/activities.js +0 -53
  243. package/build/examples/workflows/assembly-line/index.d.ts +0 -17
  244. package/build/examples/workflows/assembly-line/index.js +0 -60
  245. package/build/examples/workflows/assembly-line/iterator.d.ts +0 -12
  246. package/build/examples/workflows/assembly-line/iterator.js +0 -54
  247. package/build/examples/workflows/assembly-line/reverter.d.ts +0 -18
  248. package/build/examples/workflows/assembly-line/reverter.js +0 -89
  249. package/build/examples/workflows/assembly-line/types.d.ts +0 -25
  250. package/build/examples/workflows/assembly-line/types.js +0 -8
  251. package/build/examples/workflows/assembly-line/worker.d.ts +0 -13
  252. package/build/examples/workflows/assembly-line/worker.js +0 -81
  253. package/build/examples/workflows/basic-echo/activities.d.ts +0 -20
  254. package/build/examples/workflows/basic-echo/activities.js +0 -55
  255. package/build/examples/workflows/basic-echo/index.d.ts +0 -14
  256. package/build/examples/workflows/basic-echo/index.js +0 -66
  257. package/build/examples/workflows/basic-signal/activities.d.ts +0 -17
  258. package/build/examples/workflows/basic-signal/activities.js +0 -18
  259. package/build/examples/workflows/basic-signal/index.d.ts +0 -17
  260. package/build/examples/workflows/basic-signal/index.js +0 -116
  261. package/build/examples/workflows/kitchen-sink/activities.d.ts +0 -40
  262. package/build/examples/workflows/kitchen-sink/activities.js +0 -46
  263. package/build/examples/workflows/kitchen-sink/index.d.ts +0 -22
  264. package/build/examples/workflows/kitchen-sink/index.js +0 -123
  265. package/build/examples/workflows/review-content/activities.d.ts +0 -10
  266. package/build/examples/workflows/review-content/activities.js +0 -44
  267. package/build/examples/workflows/review-content/index.d.ts +0 -10
  268. package/build/examples/workflows/review-content/index.js +0 -95
  269. package/build/examples/workflows/review-content/types.d.ts +0 -28
  270. package/build/examples/workflows/review-content/types.js +0 -2
  271. package/build/system/seed/server-definitions.d.ts +0 -3210
  272. package/build/system/seed/server-definitions.js +0 -232
  273. package/dashboard/dist/assets/AdminDashboard-NLryl1_B.js +0 -2
  274. package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +0 -2
  275. package/dashboard/dist/assets/BotPicker-DWhn0tr1.js +0 -2
  276. package/dashboard/dist/assets/CollapsibleSection-CgYgQiOc.js +0 -2
  277. package/dashboard/dist/assets/ConfirmDeleteModal-DCKAPXD3.js +0 -2
  278. package/dashboard/dist/assets/CopyableId-DXkaAOYk.js +0 -2
  279. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +0 -2
  280. package/dashboard/dist/assets/CredentialsPage-B361BOfU.js.map +0 -1
  281. package/dashboard/dist/assets/CustomDurationPicker-D2G1ldiF.js +0 -2
  282. package/dashboard/dist/assets/DataTable-DXSUbA26.js +0 -2
  283. package/dashboard/dist/assets/ElapsedCell-CQGqkXP_.js +0 -2
  284. package/dashboard/dist/assets/EmptyState-Dep92Wkg.js +0 -2
  285. package/dashboard/dist/assets/EmptyState-Dep92Wkg.js.map +0 -1
  286. package/dashboard/dist/assets/EscalationsOverview-DVEFVjs7.js +0 -2
  287. package/dashboard/dist/assets/EscalationsOverview-DVEFVjs7.js.map +0 -1
  288. package/dashboard/dist/assets/EventTable-BMJAPkMi.js +0 -2
  289. package/dashboard/dist/assets/FilterBar-DbVbCzH2.js +0 -2
  290. package/dashboard/dist/assets/ListToolbar-0XNuXj0M.js +0 -2
  291. package/dashboard/dist/assets/McpOverview-CeYnCzBN.js +0 -2
  292. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +0 -5
  293. package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +0 -1
  294. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +0 -2
  295. package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js.map +0 -1
  296. package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +0 -2
  297. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +0 -2
  298. package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +0 -1
  299. package/dashboard/dist/assets/Modal-yyhUeKoA.js +0 -2
  300. package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +0 -2
  301. package/dashboard/dist/assets/PageHeader-CZ9a8cpr.js +0 -2
  302. package/dashboard/dist/assets/PageHeader-CZ9a8cpr.js.map +0 -1
  303. package/dashboard/dist/assets/PageHeaderWithStats-BJuNs5NM.js +0 -2
  304. package/dashboard/dist/assets/PageHeaderWithStats-BJuNs5NM.js.map +0 -1
  305. package/dashboard/dist/assets/PriorityBadge-BrPikMFy.js +0 -2
  306. package/dashboard/dist/assets/ProcessDetailPage-2miaYd8G.js +0 -2
  307. package/dashboard/dist/assets/ProcessesListPage-DqpRDqjk.js +0 -2
  308. package/dashboard/dist/assets/ProcessesListPage-DqpRDqjk.js.map +0 -1
  309. package/dashboard/dist/assets/RolePill-DxbJMfJu.js +0 -2
  310. package/dashboard/dist/assets/RolesPage-CYHRo21-.js +0 -2
  311. package/dashboard/dist/assets/RolesPage-CYHRo21-.js.map +0 -1
  312. package/dashboard/dist/assets/RowActions-DurFwIwe.js +0 -2
  313. package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +0 -2
  314. package/dashboard/dist/assets/StatCard-CKplpK3w.js +0 -2
  315. package/dashboard/dist/assets/StatusBadge-Dm0V1dNN.js +0 -2
  316. package/dashboard/dist/assets/StatusBadge-Dm0V1dNN.js.map +0 -1
  317. package/dashboard/dist/assets/StepIndicator-Dicx0WTZ.js +0 -2
  318. package/dashboard/dist/assets/StickyPagination-B2jYvU3-.js +0 -2
  319. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +0 -2
  320. package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +0 -1
  321. package/dashboard/dist/assets/TagInput-CypDZ6Kl.js +0 -2
  322. package/dashboard/dist/assets/TaskDetailPage-DooDNJGT.js +0 -2
  323. package/dashboard/dist/assets/TaskDetailPage-DooDNJGT.js.map +0 -1
  324. package/dashboard/dist/assets/TaskQueuePill-C1hZ-j31.js +0 -2
  325. package/dashboard/dist/assets/TaskQueuePill-C1hZ-j31.js.map +0 -1
  326. package/dashboard/dist/assets/TasksListPage-D7CdkAeg.js +0 -2
  327. package/dashboard/dist/assets/TimeAgo-B5LXB2aj.js +0 -2
  328. package/dashboard/dist/assets/TimestampCell-Crb9b0Gw.js +0 -2
  329. package/dashboard/dist/assets/UserName-OPg-nkRa.js +0 -2
  330. package/dashboard/dist/assets/WorkflowExecutionPage-CcLVrs9b.js +0 -2
  331. package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +0 -2
  332. package/dashboard/dist/assets/WorkflowsDashboard-DB1SncBi.js +0 -2
  333. package/dashboard/dist/assets/WorkflowsDashboard-DB1SncBi.js.map +0 -1
  334. package/dashboard/dist/assets/WorkflowsOverview-DvShiYJV.js +0 -2
  335. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +0 -2
  336. package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +0 -1
  337. package/dashboard/dist/assets/escalation-A0CsbvNV.js +0 -2
  338. package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +0 -2
  339. package/dashboard/dist/assets/helpers-CmznCuAx.js +0 -2
  340. package/dashboard/dist/assets/index-BIeYV5QK.js +0 -2
  341. package/dashboard/dist/assets/index-BIeYV5QK.js.map +0 -1
  342. package/dashboard/dist/assets/index-BYwD3kHN.js +0 -5
  343. package/dashboard/dist/assets/index-C5TUqJu0.css +0 -1
  344. package/dashboard/dist/assets/index-C8-UaN4N.js +0 -2
  345. package/dashboard/dist/assets/index-C8-UaN4N.js.map +0 -1
  346. package/dashboard/dist/assets/index-CAj5LT9H.js +0 -15
  347. package/dashboard/dist/assets/index-CAj5LT9H.js.map +0 -1
  348. package/dashboard/dist/assets/index-CjxHCVxl.js +0 -2
  349. package/dashboard/dist/assets/index-CjxHCVxl.js.map +0 -1
  350. package/dashboard/dist/assets/index-Cr0Rqsj7.js +0 -2
  351. package/dashboard/dist/assets/index-DZHNte4o.js +0 -2
  352. package/dashboard/dist/assets/index-DZHNte4o.js.map +0 -1
  353. package/dashboard/dist/assets/index-VnYkWW8r.js +0 -2
  354. package/dashboard/dist/assets/index-XGOmZ117.js +0 -2
  355. package/dashboard/dist/assets/index-ZjOUzWhc.js +0 -2
  356. package/dashboard/dist/assets/index-ZjOUzWhc.js.map +0 -1
  357. package/dashboard/dist/assets/index-puKKZ5l8.js +0 -281
  358. package/dashboard/dist/assets/index-puKKZ5l8.js.map +0 -1
  359. package/dashboard/dist/assets/index-t5frSddy.js +0 -6
  360. package/dashboard/dist/assets/index-t5frSddy.js.map +0 -1
  361. package/dashboard/dist/assets/mcp-DrWymhSu.js +0 -2
  362. package/dashboard/dist/assets/namespaces-Cm6AY5sh.js +0 -2
  363. package/dashboard/dist/assets/settings-DTQNp6tH.js +0 -2
  364. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +0 -1
  365. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
  366. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
  367. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
  368. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{j as e,S as D}from"./index-puKKZ5l8.js";import{a as p}from"./vendor-query-DLp59M9_.js";import{l as J,n as L,o as R,u as A}from"./yaml-workflows-sx8-UEE3.js";import{a as $,d as z}from"./useYamlActivityEvents-BeR-nVWQ.js";import{u as F}from"./useFilterParams-CGRYFw_A.js";import{u as q}from"./useExpandedRows-Cg9iq6Vy.js";import{P}from"./PageHeader-CZ9a8cpr.js";import{F as B,a as U,b as C}from"./FilterBar-DbVbCzH2.js";import{E as H}from"./EmptyState-Dep92Wkg.js";import{b as T,R as _}from"./RunAsSelector-CNKraP6u.js";import{X as Y,_ as X,a6 as G,P as O,k as K,W as Q,$ as Z,b as ee}from"./vendor-icons-CWl44VA6.js";import{L as se,c as oe}from"./vendor-react-Co3Y8ikm.js";import{d as W,C as re}from"./helpers-CmznCuAx.js";import{S as M}from"./StatusBadge-Dm0V1dNN.js";import"./BotPicker-DWhn0tr1.js";import"./bots-Dqos20NE.js";import"./TimeAgo-B5LXB2aj.js";const S={mcp:{border:"border-blue-500",text:"text-blue-500",icon:"MCP"},db:{border:"border-blue-500",text:"text-blue-500",icon:"DB"},llm:{border:"border-violet-500",text:"text-violet-500",icon:"LLM"},transform:{border:"border-emerald-500",text:"text-emerald-500",icon:"Map"}};function te({steps:o,manifest:l,isComplete:r}){const t=l.filter(s=>s.type==="worker"),c=t.length,n=t.map(s=>{const u=o.find(d=>d.activityId===s.activity_id),m=s.tool_source||"mcp",N=S[m]||S.mcp;return{activityId:s.activity_id,title:s.title||s.mcp_tool_name||s.activity_id,toolName:s.mcp_tool_name,colors:N,status:(u==null?void 0:u.status)||"pending",error:u==null?void 0:u.error}});return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-3",children:r?`All ${c} steps completed`:`Running step ${n.filter(s=>s.status==="completed").length+1} of ${c}...`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-0",children:n.map((s,u)=>{const m=u===n.length-1;return e.jsxDEV("div",{className:"flex items-stretch gap-2",children:[e.jsxDEV("div",{className:"flex flex-col items-center w-4 shrink-0",children:[e.jsxDEV("span",{className:`w-2.5 h-2.5 rounded-full shrink-0 border-2 transition-colors ${s.status==="completed"?"bg-status-success border-status-success":s.status==="running"?`${s.colors.border} bg-transparent animate-pulse`:s.status==="failed"?"bg-status-error border-status-error":"bg-surface-sunken border-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:52,columnNumber:17},this),!m&&e.jsxDEV("span",{className:`w-px flex-1 transition-colors ${s.status==="completed"?"bg-status-success/30":"bg-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:59,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:51,columnNumber:15},this),e.jsxDEV("div",{className:m?"":"pb-3",children:[e.jsxDEV("p",{className:`text-[11px] font-medium ${s.status==="running"?"text-text-primary":s.status==="completed"?"text-text-secondary":s.status==="failed"?"text-status-error":"text-text-tertiary"}`,children:s.title},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:65,columnNumber:17},this),s.toolName&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:s.toolName},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:72,columnNumber:19},this),s.error&&e.jsxDEV("p",{className:"text-[9px] text-status-error mt-0.5",children:s.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:75,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:64,columnNumber:15},this)]},s.activityId,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:50,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:46,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:40,columnNumber:5},this)}function ae({workflow:o,onClose:l}){const r=J(),[t,c]=p.useState(!1),[n,s]=p.useState({}),[u,m]=p.useState(""),[N,d]=p.useState(""),[f,w]=p.useState(""),[x,v]=p.useState(null),[k,g]=p.useState(null),{steps:j,isComplete:a}=$(x);p.useEffect(()=>{v(null),g(null),d(""),r.reset();const b=T(o.input_schema);s(b),m(JSON.stringify(b,null,2)),c(!1)},[o.id]),p.useEffect(()=>{if(a&&x){const b=x,h=setTimeout(()=>{g({jobId:b}),v(null)},800);return()=>clearTimeout(h)}},[a,x]);const i=()=>{if(!t)m(JSON.stringify(n,null,2));else try{s(JSON.parse(u))}catch{}c(!t)},y=async()=>{d(""),g(null);let b;if(t)try{b=JSON.parse(u)}catch{d("Invalid JSON");return}else b={...n};try{const h=await r.mutateAsync({id:o.id,data:b,sync:!1,...f?{execute_as:f}:{}});h.job_id&&v(h.job_id)}catch{}},V=!!x,I=o.app_id||"longtail";return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:o.app_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:161,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:162,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:160,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>{V||l()},className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(Y,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:165,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:164,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:159,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:V?e.jsxDEV(te,{steps:j,manifest:o.activity_manifest,isComplete:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:172,columnNumber:11},this):k?e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("svg",{className:"w-4 h-4 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsxDEV("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:177,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:176,columnNumber:15},this),e.jsxDEV("p",{className:"text-xs font-medium text-status-success",children:"Workflow completed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:179,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:175,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV(se,{to:`/mcp/executions/${encodeURIComponent(k.jobId)}?namespace=${encodeURIComponent(I)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:186,columnNumber:17},this)," View execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:182,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>g(null),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(G,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:192,columnNumber:17},this)," Run again"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:188,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:181,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:174,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(_,{selected:f,onChange:w},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:198,columnNumber:13},this),o.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:201,columnNumber:15},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:207,columnNumber:17},this),e.jsxDEV("button",{onClick:i,className:"text-[10px] text-accent hover:underline",children:t?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:208,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:206,columnNumber:15},this),t?e.jsxDEV("textarea",{value:u,onChange:b=>m(b.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:214,columnNumber:17},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(n).map(([b,h])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:b},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:225,columnNumber:23},this),typeof h=="boolean"?e.jsxDEV("select",{value:String(h),onChange:E=>s({...n,[b]:E.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:232,columnNumber:27},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:233,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:227,columnNumber:25},this):typeof h=="object"?e.jsxDEV("textarea",{value:JSON.stringify(h,null,2),onChange:E=>{try{s({...n,[b]:JSON.parse(E.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:236,columnNumber:25},this):e.jsxDEV("input",{type:typeof h=="number"?"number":"text",value:String(h??""),onChange:E=>s({...n,[b]:typeof h=="number"?Number(E.target.value):E.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:242,columnNumber:25},this)]},b,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:224,columnNumber:21},this)),Object.keys(n).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:252,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:222,columnNumber:17},this),N&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:N},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:256,columnNumber:29},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:205,columnNumber:13},this),r.isError&&e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:r.error instanceof Error?r.error.message:"Invocation failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:261,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:260,columnNumber:15},this),e.jsxDEV("button",{onClick:y,disabled:r.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:r.isPending?"Starting...":e.jsxDEV(e.Fragment,{children:[e.jsxDEV(O,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:61},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:59},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:266,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:197,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:170,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:157,columnNumber:5},this)}function le({cronInput:o,setCronInput:l,setCron:r,hasCronSchedule:t,onSave:c,onClear:n}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:24,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:o,onChange:s=>{l(s.target.value),r.reset()},placeholder:"0 */6 * * *",className:"input font-mono text-sm w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:27,columnNumber:13},this),o.trim()&&W(o.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:W(o.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:38,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:26,columnNumber:11},this),e.jsxDEV("button",{onClick:c,disabled:r.isPending,className:"btn-primary text-xs shrink-0",children:r.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:43,columnNumber:11},this),t&&e.jsxDEV("button",{onClick:n,disabled:r.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:51,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:25,columnNumber:9},this),r.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:62,columnNumber:11},this),r.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:r.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(D,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:71,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:re.map(([s,u])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(s),r.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:83,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:86,columnNumber:15},this)]},s,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:74,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:72,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:70,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:22,columnNumber:5},this)}function ne({workflow:o,onClose:l}){const r=L(),t=R(),[c,n]=p.useState(""),[s,u]=p.useState(""),[m,N]=p.useState(!1),[d,f]=p.useState({}),[w,x]=p.useState("{}");p.useEffect(()=>{n(o.cron_schedule??""),u(o.execute_as??""),r.reset(),t.reset();const a=o.cron_envelope||{},i=Object.keys(a).length>0?a:T(o.input_schema);f(i),x(JSON.stringify(i,null,2)),N(!1)},[o.id]);const v=()=>{if(!m)x(JSON.stringify(d,null,2));else try{f(JSON.parse(w))}catch{}N(!m)},k=()=>{let a;if(m)try{a=JSON.parse(w)}catch{return}else a={...d};r.mutate({id:o.id,cron_schedule:c.trim(),cron_envelope:Object.keys(a).length>0?a:null,execute_as:s||null})},g=()=>{t.mutate(o.id,{onSuccess:()=>{n("")}})},j={isPending:r.isPending||t.isPending,isSuccess:r.isSuccess||t.isSuccess,error:r.error||t.error,reset:()=>{r.reset(),t.reset()}};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:"Cron Schedule"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:87,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:86,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(Y,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:90,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:85,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(_,{selected:s,onChange:u},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:97,columnNumber:9},this),e.jsxDEV(le,{cronInput:c,setCronInput:n,setCron:j,hasCronSchedule:!!o.cron_schedule,onSave:k,onClear:g},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:99,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV(D,{children:"Default Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("button",{onClick:v,className:"text-[10px] text-accent hover:underline",children:m?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:112,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:110,columnNumber:11},this),m?e.jsxDEV("textarea",{value:w,onChange:a=>x(a.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:118,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[200px] overflow-y-auto",children:[Object.entries(d).map(([a,i])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:129,columnNumber:19},this),typeof i=="boolean"?e.jsxDEV("select",{value:String(i),onChange:y=>f({...d,[a]:y.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:136,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:137,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:131,columnNumber:21},this):typeof i=="object"?e.jsxDEV("textarea",{value:JSON.stringify(i,null,2),onChange:y=>{try{f({...d,[a]:JSON.parse(y.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:140,columnNumber:21},this):e.jsxDEV("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:y=>f({...d,[a]:typeof i=="number"?Number(y.target.value):y.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:146,columnNumber:21},this)]},a,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:128,columnNumber:17},this)),Object.keys(d).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:96,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:83,columnNumber:5},this)}function ie(o){const l=new Map;for(const r of o){const t=l.get(r.app_id)??[];t.push(r),l.set(r.app_id,t)}return[...l.entries()].map(([r,t])=>{var N;const c={active:0,deployed:1,draft:2,archived:3},n=t.reduce((d,f)=>(c[f.status]??9)<(c[d]??9)?f.status:d,t[0].status),s=t.reduce((d,f)=>f.updated_at>d?f.updated_at:d,t[0].updated_at),u=t.reduce((d,f)=>{const w=parseInt(f.app_version||"0",10);return w>d?w:d},0),m=((N=t.find(d=>d.set_id))==null?void 0:N.set_id)||null;return{appId:r,workflows:t,toolCount:t.length,status:n,updatedAt:s,appVersion:String(u),setId:m}})}function me(o,l){if(!l)return!0;const r=l.toLowerCase();return o.appId.toLowerCase().includes(r)?!0:o.workflows.some(t=>{var c,n;return t.graph_topic.toLowerCase().includes(r)||((c=t.name)==null?void 0:c.toLowerCase().includes(r))||((n=t.description)==null?void 0:n.toLowerCase().includes(r))})}function ce(o,l){if(!l)return o;const r=l.toLowerCase();return o.filter(t=>{var c,n;return t.graph_topic.toLowerCase().includes(r)||((c=t.name)==null?void 0:c.toLowerCase().includes(r))||((n=t.description)==null?void 0:n.toLowerCase().includes(r))})}function de({wf:o,onTry:l,onWizard:r,onCron:t}){const c=o.status==="active",n=!!o.cron_schedule;return e.jsxDEV("div",{onClick:c?l:void 0,className:`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${c?"cursor-pointer":""}`,children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary truncate",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:21,columnNumber:11},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono shrink-0",children:["v",o.content_version]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:22,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:20,columnNumber:9},this),o.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:25,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:19,columnNumber:7},this),e.jsxDEV("div",{className:"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0",children:new Date(o.updated_at).toLocaleDateString("en-US",{month:"short",day:"numeric"})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:28,columnNumber:7},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 whitespace-nowrap shrink-0",children:e.jsxDEV(M,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:32,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("div",{className:"w-20 px-3 py-2 flex justify-end gap-2 shrink-0",children:[c&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),l()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Test tool",children:e.jsxDEV(O,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:41,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:36,columnNumber:11},this),e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),t()},className:n?"text-status-success":"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:n?`Cron: ${o.cron_schedule}`:"Schedule cron",children:e.jsxDEV(Z,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:51,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:44,columnNumber:9},this),o.source_workflow_id&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),r()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"MCP Tool Compiler",children:e.jsxDEV(ee,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:59,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:54,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:34,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:18,columnNumber:5},this)}function ue({server:o,expanded:l,onToggle:r,onTryTool:t,onWizard:c,onWorkbench:n,onCron:s,visibleTools:u}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:r,className:"group/row border-b transition-colors duration-100 cursor-pointer row-hover",children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${l?"rotate-90":""} text-text-tertiary`,children:e.jsxDEV(K,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:98,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:97,columnNumber:13},this),e.jsxDEV("p",{className:"text-sm text-text-primary font-medium font-mono",children:o.appId},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:100,columnNumber:13},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:["app v",o.appVersion]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:101,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:96,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:95,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28 whitespace-nowrap",children:e.jsxDEV(M,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:107,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:106,columnNumber:9},this),e.jsxDEV("td",{className:"w-20 text-center",children:e.jsxDEV("div",{className:"flex items-center justify-center gap-2",children:[e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:o.toolCount},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:113,columnNumber:13},this),o.setId&&e.jsxDEV("button",{onClick:m=>{m.stopPropagation(),n()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Open workbench",children:e.jsxDEV(Q,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:122,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:117,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:112,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:90,columnNumber:7},this),e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:5,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:l?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[u.map(m=>e.jsxDEV(de,{wf:m,onTry:()=>t(m),onWizard:()=>c(m),onCron:()=>s(m)},m.id,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:138,columnNumber:17},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:140,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:136,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:132,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:131,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:130,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:89,columnNumber:5},this)}function We(){const o=oe(),{filters:l,setFilter:r}=F({filters:{status:"",server:"",search:""}}),{data:t,isLoading:c}=A({status:l.status||void 0,app_id:l.server||void 0,search:l.search||void 0,limit:200,offset:0}),n=(t==null?void 0:t.workflows)??[],{data:s}=z({limit:100}),u=p.useMemo(()=>{const a=new Map;for(const i of(s==null?void 0:s.sets)??[])i.source_workflow_id&&a.set(i.id,i.source_workflow_id);return a},[s==null?void 0:s.sets]),m=p.useMemo(()=>ie(n),[n]),N=p.useMemo(()=>[...new Set(n.map(i=>i.app_id))].sort().map(i=>({value:i,label:i})),[n]),d=p.useMemo(()=>l.search?m.filter(a=>me(a,l.search)):m,[m,l.search]),{expandedIds:f,toggle:w}=q("lt:expanded:yaml-workflows"),[x,v]=p.useState(null),[k,g]=p.useState(null),j=x||k;return c?e.jsxDEV("div",{children:[e.jsxDEV(P,{title:"MCP Pipeline Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:70,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:4}).map((a,i)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:74,columnNumber:15},this)},i,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:73,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:71,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:69,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(P,{title:"MCP Pipeline Tools",actions:e.jsxDEV("button",{onClick:()=>o("/mcp/queries"),className:"btn-primary text-xs",children:"Design Pipeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:87,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:84,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Compiled from successful triage runs. Each workflow is a deterministic tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:93,columnNumber:7},this),e.jsxDEV(B,{children:[e.jsxDEV(U,{label:"Search",value:l.search,onChange:a=>r("search",a),placeholder:"Server or tool name…"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:98,columnNumber:9},this),N.length>1&&e.jsxDEV(C,{label:"Server",value:l.server,onChange:a=>r("server",a),options:N},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:105,columnNumber:11},this),e.jsxDEV(C,{label:"Status",value:l.status,onChange:a=>r("status",a),options:[{value:"draft",label:"Draft"},{value:"deployed",label:"Deployed"},{value:"active",label:"Active"},{value:"archived",label:"Archived"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:97,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:`${j?"flex-1 min-w-0":"w-full"} transition-all`,children:d.length===0?e.jsxDEV(H,{title:"No pipelines yet",description:"Use the MCP Tool Designer to create your first MCP tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:133,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:136,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:139,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:132,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:131,columnNumber:15},this),e.jsxDEV("tbody",{children:d.map(a=>e.jsxDEV(ue,{server:a,expanded:f.has(a.appId),onToggle:()=>w(a.appId),onTryTool:i=>{g(null),v(i)},onWizard:i=>{i.source_workflow_id&&o(`/mcp/queries/${i.source_workflow_id}?step=4`)},onWorkbench:()=>{if(a.setId){const i=u.get(a.setId);i&&o(`/mcp/queries/${i}?mode=plan&set_id=${a.setId}&step=2`)}},onCron:i=>{v(null),g(i)},visibleTools:ce(a.workflows,l.search)},a.appId,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:144,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:142,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:130,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:126,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ae,{workflow:x,onClose:()=>v(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:172,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:171,columnNumber:11},this),k&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ne,{workflow:k,onClose:()=>g(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:181,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:180,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:125,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:83,columnNumber:5},this)}export{We as YamlWorkflowsPage};
2
- //# sourceMappingURL=YamlWorkflowsPage-DCBoMeGI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"YamlWorkflowsPage-DCBoMeGI.js","sources":["../../src/components/common/test/WorkflowTestPanel.tsx","../../src/pages/workflows/cron/CronScheduleEditor.tsx","../../src/components/common/test/CronPanel.tsx","../../src/pages/workflows/yaml-helpers.ts","../../src/pages/workflows/yaml-workflow-rows.tsx","../../src/pages/workflows/YamlWorkflowsPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, Play, RotateCcw, ExternalLink } from 'lucide-react';\nimport { useInvokeYamlWorkflow } from '../../../api/yaml-workflows';\nimport { useYamlActivityEvents, type ActivityStep } from '../../../hooks/useYamlActivityEvents';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport type { LTYamlWorkflowRecord, ActivityManifestEntry } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nconst TOOL_SOURCE_COLORS: Record<string, { border: string; text: string; icon: string }> = {\n mcp: { border: 'border-blue-500', text: 'text-blue-500', icon: 'MCP' },\n db: { border: 'border-blue-500', text: 'text-blue-500', icon: 'DB' },\n llm: { border: 'border-violet-500', text: 'text-violet-500', icon: 'LLM' },\n transform: { border: 'border-emerald-500', text: 'text-emerald-500', icon: 'Map' },\n};\n\nfunction LiveTimeline({ steps, manifest, isComplete }: {\n steps: ActivityStep[];\n manifest: ActivityManifestEntry[];\n isComplete: boolean;\n}) {\n const workerActivities = manifest.filter((a) => a.type === 'worker');\n const totalSteps = workerActivities.length;\n\n const merged = workerActivities.map((a) => {\n const live = steps.find((s) => s.activityId === a.activity_id);\n const source = a.tool_source || 'mcp';\n const colors = TOOL_SOURCE_COLORS[source] || TOOL_SOURCE_COLORS.mcp;\n return {\n activityId: a.activity_id,\n title: a.title || a.mcp_tool_name || a.activity_id,\n toolName: a.mcp_tool_name,\n colors,\n status: live?.status || 'pending' as const,\n error: live?.error,\n };\n });\n\n return (\n <div>\n <p className=\"text-[11px] text-text-secondary mb-3\">\n {isComplete\n ? `All ${totalSteps} steps completed`\n : `Running step ${merged.filter((s) => s.status === 'completed').length + 1} of ${totalSteps}...`}\n </p>\n <div className=\"space-y-0\">\n {merged.map((step, idx) => {\n const isLast = idx === merged.length - 1;\n return (\n <div key={step.activityId} className=\"flex items-stretch gap-2\">\n <div className=\"flex flex-col items-center w-4 shrink-0\">\n <span className={`w-2.5 h-2.5 rounded-full shrink-0 border-2 transition-colors ${\n step.status === 'completed' ? 'bg-status-success border-status-success'\n : step.status === 'running' ? `${step.colors.border} bg-transparent animate-pulse`\n : step.status === 'failed' ? 'bg-status-error border-status-error'\n : 'bg-surface-sunken border-surface-border'\n }`} />\n {!isLast && (\n <span className={`w-px flex-1 transition-colors ${\n step.status === 'completed' ? 'bg-status-success/30' : 'bg-surface-border'\n }`} />\n )}\n </div>\n <div className={isLast ? '' : 'pb-3'}>\n <p className={`text-[11px] font-medium ${\n step.status === 'running' ? 'text-text-primary'\n : step.status === 'completed' ? 'text-text-secondary'\n : step.status === 'failed' ? 'text-status-error'\n : 'text-text-tertiary'\n }`}>{step.title}</p>\n {step.toolName && (\n <span className=\"text-[9px] text-text-tertiary font-mono\">{step.toolName}</span>\n )}\n {step.error && (\n <p className=\"text-[9px] text-status-error mt-0.5\">{step.error}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface WorkflowTestPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function WorkflowTestPanel({ workflow, onClose }: WorkflowTestPanelProps) {\n const invokeMutation = useInvokeYamlWorkflow();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n const [activeJobId, setActiveJobId] = useState<string | null>(null);\n const [completedResult, setCompletedResult] = useState<{ jobId: string } | null>(null);\n const { steps, isComplete } = useYamlActivityEvents(activeJobId);\n\n useEffect(() => {\n setActiveJobId(null);\n setCompletedResult(null);\n setJsonError('');\n invokeMutation.reset();\n const skeleton = buildSkeleton(workflow.input_schema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (isComplete && activeJobId) {\n const jobId = activeJobId;\n const timer = setTimeout(() => {\n setCompletedResult({ jobId });\n setActiveJobId(null);\n }, 800);\n return () => clearTimeout(timer);\n }\n }, [isComplete, activeJobId]);\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = async () => {\n setJsonError('');\n setCompletedResult(null);\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n try {\n const result = await invokeMutation.mutateAsync({\n id: workflow.id,\n data: parsed,\n sync: false,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n if (result.job_id) setActiveJobId(result.job_id);\n } catch { /* error shown in panel */ }\n };\n\n const isRunning = !!activeJobId;\n const ns = workflow.app_id || 'longtail';\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{workflow.app_id}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</code>\n </div>\n <button onClick={() => { if (!isRunning) onClose(); }} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n {isRunning ? (\n <LiveTimeline steps={steps} manifest={workflow.activity_manifest} isComplete={isComplete} />\n ) : completedResult ? (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-success\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z\" />\n </svg>\n <p className=\"text-xs font-medium text-status-success\">Workflow completed</p>\n </div>\n <div className=\"flex items-center justify-between\">\n <Link\n to={`/mcp/executions/${encodeURIComponent(completedResult.jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} /> View execution\n </Link>\n <button\n onClick={() => setCompletedResult(null)}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <RotateCcw size={12} /> Run again\n </button>\n </div>\n </div>\n ) : (\n <>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {workflow.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{workflow.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Input</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {invokeMutation.isError && (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">\n {invokeMutation.error instanceof Error ? invokeMutation.error.message : 'Invocation failed'}\n </p>\n </div>\n )}\n <button\n onClick={handleRun}\n disabled={invokeMutation.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {invokeMutation.isPending ? 'Starting...' : <><Play size={12} /> Run</>}\n </button>\n </>\n )}\n </div>\n </div>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { describeCron, COMMON_PATTERNS } from './helpers';\n\ninterface CronScheduleEditorProps {\n cronInput: string;\n setCronInput: (value: string) => void;\n setCron: { isPending: boolean; isSuccess: boolean; error: Error | null; reset: () => void };\n hasCronSchedule: boolean;\n onSave: () => void;\n onClear: () => void;\n}\n\nexport function CronScheduleEditor({\n cronInput,\n setCronInput,\n setCron,\n hasCronSchedule,\n onSave,\n onClear,\n}: CronScheduleEditorProps) {\n return (\n <>\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => {\n setCronInput(e.target.value);\n setCron.reset();\n }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button\n onClick={onSave}\n disabled={setCron.isPending}\n className=\"btn-primary text-xs shrink-0\"\n >\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {hasCronSchedule && (\n <button\n onClick={onClear}\n disabled={setCron.isPending}\n className=\"btn-ghost text-xs text-status-error shrink-0\"\n >\n Clear\n </button>\n )}\n </div>\n\n {setCron.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>\n )}\n {setCron.error && (\n <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>\n )}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => {\n setCronInput(expr);\n setCron.reset();\n }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">\n {expr}\n </code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { X } from 'lucide-react';\nimport { useSetYamlCron, useClearYamlCron } from '../../../api/yaml-workflows';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { CronScheduleEditor } from '../../../pages/workflows/cron/CronScheduleEditor';\nimport { SectionLabel } from '../layout/SectionLabel';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\nimport type { LTYamlWorkflowRecord } from '../../../api/types';\n\ninterface CronPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function CronPanel({ workflow, onClose }: CronPanelProps) {\n const setCronMutation = useSetYamlCron();\n const clearCronMutation = useClearYamlCron();\n\n const [cronInput, setCronInput] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('{}');\n\n // Sync state when workflow changes\n useEffect(() => {\n setCronInput(workflow.cron_schedule ?? '');\n setExecuteAs(workflow.execute_as ?? '');\n setCronMutation.reset();\n clearCronMutation.reset();\n\n const envelope = workflow.cron_envelope || {};\n const skeleton = Object.keys(envelope).length > 0\n ? envelope\n : buildSkeleton(workflow.input_schema);\n setFields(skeleton as Record<string, any>);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleSave = () => {\n let envelope: Record<string, unknown>;\n if (jsonMode) {\n try { envelope = JSON.parse(argsJson); } catch { return; }\n } else {\n envelope = { ...fields };\n }\n\n setCronMutation.mutate({\n id: workflow.id,\n cron_schedule: cronInput.trim(),\n cron_envelope: Object.keys(envelope).length > 0 ? envelope : null,\n execute_as: executeAs || null,\n });\n };\n\n const handleClear = () => {\n clearCronMutation.mutate(workflow.id, {\n onSuccess: () => {\n setCronInput('');\n },\n });\n };\n\n // Combine mutation states for CronScheduleEditor\n const combinedMutation = {\n isPending: setCronMutation.isPending || clearCronMutation.isPending,\n isSuccess: setCronMutation.isSuccess || clearCronMutation.isSuccess,\n error: setCronMutation.error || clearCronMutation.error,\n reset: () => { setCronMutation.reset(); clearCronMutation.reset(); },\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">Cron Schedule</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n <CronScheduleEditor\n cronInput={cronInput}\n setCronInput={setCronInput}\n setCron={combinedMutation}\n hasCronSchedule={!!workflow.cron_schedule}\n onSave={handleSave}\n onClear={handleClear}\n />\n\n {/* Default input for cron invocations */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <SectionLabel>Default Input</SectionLabel>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[200px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface ProcessServer {\n appId: string;\n workflows: LTYamlWorkflowRecord[];\n toolCount: number;\n status: string;\n updatedAt: string;\n appVersion: string;\n setId: string | null;\n}\n\n// ── Grouping & filtering helpers ──────────────────────────────────────────────\n\nexport function groupByAppId(workflows: LTYamlWorkflowRecord[]): ProcessServer[] {\n const map = new Map<string, LTYamlWorkflowRecord[]>();\n for (const wf of workflows) {\n const list = map.get(wf.app_id) ?? [];\n list.push(wf);\n map.set(wf.app_id, list);\n }\n\n return [...map.entries()].map(([appId, wfs]) => {\n const statusPriority: Record<string, number> = { active: 0, deployed: 1, draft: 2, archived: 3 };\n const bestStatus = wfs.reduce(\n (best, wf) => ((statusPriority[wf.status] ?? 9) < (statusPriority[best] ?? 9) ? wf.status : best),\n wfs[0].status,\n );\n const latest = wfs.reduce((max, wf) => (wf.updated_at > max ? wf.updated_at : max), wfs[0].updated_at);\n\n const maxAppVersion = wfs.reduce((max, wf) => {\n const v = parseInt(wf.app_version || '0', 10);\n return v > max ? v : max;\n }, 0);\n // Use the set_id from any workflow in the group (they all share the same set)\n const setId = wfs.find(wf => wf.set_id)?.set_id || null;\n\n return {\n appId,\n workflows: wfs,\n toolCount: wfs.length,\n status: bestStatus,\n updatedAt: latest,\n appVersion: String(maxAppVersion),\n setId,\n };\n });\n}\n\n/** Client-side search: match server name or any tool's graph_topic/description */\nexport function matchesSearch(server: ProcessServer, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.appId.toLowerCase().includes(q)) return true;\n return server.workflows.some(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(workflows: LTYamlWorkflowRecord[], search: string): LTYamlWorkflowRecord[] {\n if (!search) return workflows;\n const q = search.toLowerCase();\n return workflows.filter(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Clock, Play, Wand2, Wrench } from 'lucide-react';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport type { ProcessServer } from './yaml-helpers';\nimport type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Tool row (individual workflow inside expanded server) ─────────────────────\n\nexport function ToolRow({ wf, onTry, onWizard, onCron }: {\n wf: LTYamlWorkflowRecord;\n onTry: () => void;\n onWizard: () => void;\n onCron: () => void;\n}) {\n const canTry = wf.status === 'active';\n const hasCron = !!wf.cron_schedule;\n\n return (\n <div onClick={canTry ? onTry : undefined} className={`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${canTry ? 'cursor-pointer' : ''}`}>\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <code className=\"text-xs font-mono text-accent-primary truncate\">{wf.graph_topic}</code>\n <span className=\"text-[9px] text-text-tertiary font-mono shrink-0\">v{wf.content_version}</span>\n </div>\n {wf.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{wf.description}</p>\n )}\n </div>\n <div className=\"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0\">\n {new Date(wf.updated_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}\n </div>\n <div className=\"w-28 px-6 py-2 whitespace-nowrap shrink-0\">\n <StatusBadge status={wf.status} />\n </div>\n <div className=\"w-20 px-3 py-2 flex justify-end gap-2 shrink-0\">\n {canTry && (\n <button\n onClick={(e) => { e.stopPropagation(); onTry(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Test tool\"\n >\n <Play className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n <button\n onClick={(e) => { e.stopPropagation(); onCron(); }}\n className={hasCron\n ? 'text-status-success'\n : 'opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent'}\n title={hasCron ? `Cron: ${wf.cron_schedule}` : 'Schedule cron'}\n >\n <Clock className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n {wf.source_workflow_id && (\n <button\n onClick={(e) => { e.stopPropagation(); onWizard(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"MCP Tool Compiler\"\n >\n <Wand2 className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── Server row (expandable namespace) ────────────────────────────────────────\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onTryTool,\n onWizard,\n onWorkbench,\n onCron,\n visibleTools,\n}: {\n server: ProcessServer;\n expanded: boolean;\n onToggle: () => void;\n onTryTool: (wf: LTYamlWorkflowRecord) => void;\n onWizard: (wf: LTYamlWorkflowRecord) => void;\n onWorkbench: () => void;\n onCron: (wf: LTYamlWorkflowRecord) => void;\n visibleTools: LTYamlWorkflowRecord[];\n}) {\n return (\n <>\n <tr\n onClick={onToggle}\n className=\"group/row border-b transition-colors duration-100 cursor-pointer row-hover\"\n >\n {/* Name + version */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} text-text-tertiary`}>\n <ChevronRight size={14} />\n </span>\n <p className=\"text-sm text-text-primary font-medium font-mono\">{server.appId}</p>\n <span className=\"text-[9px] text-text-tertiary font-mono\">app v{server.appVersion}</span>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28 whitespace-nowrap\">\n <StatusBadge status={server.status} />\n </td>\n\n {/* Tool count + workbench */}\n <td className=\"w-20 text-center\">\n <div className=\"flex items-center justify-center gap-2\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {server.toolCount}\n </span>\n {server.setId && (\n <button\n onClick={(e) => { e.stopPropagation(); onWorkbench(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Open workbench\"\n >\n <Wrench className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </td>\n </tr>\n\n {/* Expanded tool rows — no sub-header, aligned to outer columns */}\n <tr>\n <td colSpan={5} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((wf) => (\n <ToolRow key={wf.id} wf={wf} onTry={() => onTryTool(wf)} onWizard={() => onWizard(wf)} onCron={() => onCron(wf)} />\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n </>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useYamlWorkflows } from '../../api/yaml-workflows';\nimport { useWorkflowSets } from '../../api/workflow-sets';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../hooks/useExpandedRows';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { WorkflowTestPanel } from '../../components/common/test/WorkflowTestPanel';\nimport { CronPanel } from '../../components/common/test/CronPanel';\nimport { groupByAppId, matchesSearch, filterTools } from './yaml-helpers';\nimport { ServerRow } from './yaml-workflow-rows';\nimport type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function YamlWorkflowsPage() {\n const navigate = useNavigate();\n const { filters, setFilter } = useFilterParams({\n filters: { status: '', server: '', search: '' },\n });\n\n // Fetch a larger page to get all workflows for grouping\n const { data, isLoading } = useYamlWorkflows({\n status: (filters.status || undefined) as any,\n app_id: filters.server || undefined,\n search: filters.search || undefined,\n limit: 200,\n offset: 0,\n });\n\n const workflows = data?.workflows ?? [];\n\n // Fetch workflow sets to resolve workbench links (set_id → planner workflow ID)\n const { data: setsData } = useWorkflowSets({ limit: 100 });\n const setSourceMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of setsData?.sets ?? []) {\n if (s.source_workflow_id) map.set(s.id, s.source_workflow_id);\n }\n return map;\n }, [setsData?.sets]);\n\n const servers = useMemo(() => groupByAppId(workflows), [workflows]);\n\n // Build server options from unfiltered results; re-derive when status/search change\n const serverOptions = useMemo(() => {\n const ids = [...new Set(workflows.map((wf) => wf.app_id))].sort();\n return ids.map((id) => ({ value: id, label: id }));\n }, [workflows]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:yaml-workflows');\n const [tryWorkflow, setTryWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n const [cronWorkflow, setCronWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n\n // Active sidebar: test panel or cron panel (mutually exclusive)\n const sidebarWorkflow = tryWorkflow || cronWorkflow;\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Pipeline Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Pipeline Tools\"\n actions={\n <button onClick={() => navigate('/mcp/queries')} className=\"btn-primary text-xs\">\n Design Pipeline\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Compiled from successful triage runs. Each workflow is a deterministic tool.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name…\"\n />\n {serverOptions.length > 1 && (\n <FilterSelect\n label=\"Server\"\n value={filters.server}\n onChange={(v) => setFilter('server', v)}\n options={serverOptions}\n />\n )}\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'draft', label: 'Draft' },\n { value: 'deployed', label: 'Deployed' },\n { value: 'active', label: 'Active' },\n { value: 'archived', label: 'Archived' },\n ]}\n />\n </FilterBar>\n\n <div className=\"flex gap-0\">\n <div className={`${sidebarWorkflow ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No pipelines yet\" description=\"Use the MCP Tool Designer to create your first MCP tool.\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-20\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.appId}\n server={server}\n expanded={expandedIds.has(server.appId)}\n onToggle={() => toggleExpand(server.appId)}\n onTryTool={(wf) => { setCronWorkflow(null); setTryWorkflow(wf); }}\n onWizard={(wf) => {\n if (wf.source_workflow_id) navigate(`/mcp/queries/${wf.source_workflow_id}?step=4`);\n }}\n onWorkbench={() => {\n if (server.setId) {\n const plannerWfId = setSourceMap.get(server.setId);\n if (plannerWfId) {\n navigate(`/mcp/queries/${plannerWfId}?mode=plan&set_id=${server.setId}&step=2`);\n }\n }\n }}\n onCron={(wf) => { setTryWorkflow(null); setCronWorkflow(wf); }}\n visibleTools={filterTools(server.workflows, filters.search)}\n />\n ))}\n </tbody>\n </table>\n )}\n </div>\n\n {tryWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <WorkflowTestPanel\n workflow={tryWorkflow}\n onClose={() => setTryWorkflow(null)}\n />\n </div>\n )}\n\n {cronWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <CronPanel\n workflow={cronWorkflow}\n onClose={() => setCronWorkflow(null)}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["TOOL_SOURCE_COLORS","LiveTimeline","steps","manifest","isComplete","workerActivities","a","totalSteps","merged","live","s","source","colors","jsxDEV","step","idx","isLast","WorkflowTestPanel","workflow","onClose","invokeMutation","useInvokeYamlWorkflow","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","activeJobId","setActiveJobId","completedResult","setCompletedResult","useYamlActivityEvents","useEffect","skeleton","buildSkeleton","jobId","timer","toggleMode","handleRun","parsed","result","isRunning","ns","X","Link","ExternalLink","RotateCcw","Fragment","RunAsSelector","e","key","value","Play","CronScheduleEditor","cronInput","setCronInput","setCron","hasCronSchedule","onSave","onClear","SectionLabel","describeCron","COMMON_PATTERNS","expr","desc","CronPanel","setCronMutation","useSetYamlCron","clearCronMutation","useClearYamlCron","envelope","handleSave","handleClear","combinedMutation","groupByAppId","workflows","map","wf","list","appId","wfs","statusPriority","bestStatus","best","latest","max","maxAppVersion","v","setId","_a","matchesSearch","server","search","q","_b","filterTools","ToolRow","onTry","onWizard","onCron","canTry","hasCron","StatusBadge","Clock","Wand2","ServerRow","expanded","onToggle","onTryTool","onWorkbench","visibleTools","ChevronRight","Wrench","YamlWorkflowsPage","navigate","useNavigate","filters","setFilter","useFilterParams","data","isLoading","useYamlWorkflows","setsData","useWorkflowSets","setSourceMap","useMemo","servers","serverOptions","id","filteredServers","expandedIds","toggleExpand","useExpandedRows","tryWorkflow","setTryWorkflow","cronWorkflow","setCronWorkflow","sidebarWorkflow","PageHeader","_","FilterBar","FilterInput","FilterSelect","EmptyState","plannerWfId"],"mappings":"g2BASA,MAAMA,EAAqF,CACzF,IAAW,CAAE,OAAQ,kBAAmB,KAAM,gBAAiB,KAAM,KAAA,EACrE,GAAW,CAAE,OAAQ,kBAAmB,KAAM,gBAAiB,KAAM,IAAA,EACrE,IAAW,CAAE,OAAQ,oBAAqB,KAAM,kBAAmB,KAAM,KAAA,EACzE,UAAW,CAAE,OAAQ,qBAAsB,KAAM,mBAAoB,KAAM,KAAA,CAC7E,EAEA,SAASC,GAAa,CAAE,MAAAC,EAAO,SAAAC,EAAU,WAAAC,GAItC,CACD,MAAMC,EAAmBF,EAAS,OAAQG,GAAMA,EAAE,OAAS,QAAQ,EAC7DC,EAAaF,EAAiB,OAE9BG,EAASH,EAAiB,IAAKC,GAAM,CACzC,MAAMG,EAAOP,EAAM,KAAMQ,GAAMA,EAAE,aAAeJ,EAAE,WAAW,EACvDK,EAASL,EAAE,aAAe,MAC1BM,EAASZ,EAAmBW,CAAM,GAAKX,EAAmB,IAChE,MAAO,CACL,WAAYM,EAAE,YACd,MAAOA,EAAE,OAASA,EAAE,eAAiBA,EAAE,YACvC,SAAUA,EAAE,cACZ,OAAAM,EACA,QAAQH,GAAA,YAAAA,EAAM,SAAU,UACxB,MAAOA,GAAA,YAAAA,EAAM,KAAA,CAEjB,CAAC,EAED,gBACG,MAAA,CACC,SAAA,CAAAI,EAAAA,OAAC,IAAA,CAAE,UAAU,uCACV,SAAAT,EACG,OAAOG,CAAU,mBACjB,gBAAgBC,EAAO,OAAQ,GAAM,EAAE,SAAW,WAAW,EAAE,OAAS,CAAC,OAAOD,CAAU,KAAA,EAHhG,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,EACAM,SAAC,OAAI,UAAU,YACZ,WAAO,IAAI,CAACC,EAAMC,IAAQ,CACzB,MAAMC,EAASD,IAAQP,EAAO,OAAS,EACvC,OACEK,EAAAA,OAAC,MAAA,CAA0B,UAAU,2BACnC,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0CACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAW,gEACfC,EAAK,SAAW,YAAc,0CAC5BA,EAAK,SAAW,UAAY,GAAGA,EAAK,OAAO,MAAM,gCACjDA,EAAK,SAAW,SAAW,sCAC3B,yCACJ,IALA,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKI,EACH,CAACE,GACAH,EAAAA,OAAC,OAAA,CAAK,UAAW,iCACfC,EAAK,SAAW,YAAc,uBAAyB,mBACzD,EAAA,EAFA,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEI,CAAA,CAAA,EAVR,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAYA,EACAD,EAAAA,OAAC,MAAA,CAAI,UAAWG,EAAS,GAAK,OAC5B,SAAA,CAAAH,EAAAA,OAAC,KAAE,UAAW,2BACZC,EAAK,SAAW,UAAY,oBAC1BA,EAAK,SAAW,YAAc,sBAC9BA,EAAK,SAAW,SAAW,oBAC3B,oBACJ,GAAK,WAAK,OALV,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKgB,EACfA,EAAK,UACJD,SAAC,QAAK,UAAU,0CAA2C,WAAK,UAAhE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyE,EAE1EC,EAAK,OACJD,SAAC,KAAE,UAAU,sCAAuC,WAAK,OAAzD,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+D,CAAA,CAAA,EAXnE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAaA,CAAA,GA3BQC,EAAK,WAAf,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA4BA,CAEJ,CAAC,CAAA,EAlCH,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAmCA,CAAA,CAAA,EAzCF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA0CA,CAEJ,CAOO,SAASG,GAAkB,CAAE,SAAAC,EAAU,QAAAC,GAAmC,CAC/E,MAAMC,EAAiBC,EAAA,EACjB,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EACxC,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAA8B,CAAA,CAAE,EACtD,CAACG,EAAUC,CAAW,EAAIJ,EAAAA,SAAS,EAAE,EACrC,CAACK,EAAWC,CAAY,EAAIN,EAAAA,SAAS,EAAE,EACvC,CAACO,EAAWC,CAAY,EAAIR,EAAAA,SAAS,EAAE,EACvC,CAACS,EAAaC,CAAc,EAAIV,EAAAA,SAAwB,IAAI,EAC5D,CAACW,EAAiBC,CAAkB,EAAIZ,EAAAA,SAAmC,IAAI,EAC/E,CAAE,MAAAtB,EAAO,WAAAE,GAAeiC,EAAsBJ,CAAW,EAE/DK,EAAAA,UAAU,IAAM,CACdJ,EAAe,IAAI,EACnBE,EAAmB,IAAI,EACvBN,EAAa,EAAE,EACfV,EAAe,MAAA,EACf,MAAMmB,EAAWC,EAActB,EAAS,YAAY,EACpDQ,EAAUa,CAAQ,EAClBX,EAAY,KAAK,UAAUW,EAAU,KAAM,CAAC,CAAC,EAC7ChB,EAAY,EAAK,CACnB,EAAG,CAACL,EAAS,EAAE,CAAC,EAEhBoB,EAAAA,UAAU,IAAM,CACd,GAAIlC,GAAc6B,EAAa,CAC7B,MAAMQ,EAAQR,EACRS,EAAQ,WAAW,IAAM,CAC7BN,EAAmB,CAAE,MAAAK,EAAO,EAC5BP,EAAe,IAAI,CACrB,EAAG,GAAG,EACN,MAAO,IAAM,aAAaQ,CAAK,CACjC,CACF,EAAG,CAACtC,EAAY6B,CAAW,CAAC,EAE5B,MAAMU,EAAa,IAAM,CACvB,GAAI,CAACrB,EACHM,EAAY,KAAK,UAAUH,EAAQ,KAAM,CAAC,CAAC,MAE3C,IAAI,CAAEC,EAAU,KAAK,MAAMC,CAAQ,CAAC,CAAG,MAAQ,CAAoB,CAErEJ,EAAY,CAACD,CAAQ,CACvB,EAEMsB,EAAY,SAAY,CAC5Bd,EAAa,EAAE,EACfM,EAAmB,IAAI,EACvB,IAAIS,EACJ,GAAIvB,EACF,GAAI,CAAEuB,EAAS,KAAK,MAAMlB,CAAQ,CAAG,MAAQ,CAAEG,EAAa,cAAc,EAAG,MAAQ,MAErFe,EAAS,CAAE,GAAGpB,CAAA,EAEhB,GAAI,CACF,MAAMqB,EAAS,MAAM1B,EAAe,YAAY,CAC9C,GAAIF,EAAS,GACb,KAAM2B,EACN,KAAM,GACN,GAAId,EAAY,CAAE,WAAYA,GAAc,CAAA,CAAC,CAC9C,EACGe,EAAO,QAAQZ,EAAeY,EAAO,MAAM,CACjD,MAAQ,CAA6B,CACvC,EAEMC,EAAY,CAAC,CAACd,EACde,EAAK9B,EAAS,QAAU,WAE9B,OACEL,EAAAA,OAAC,MAAA,CAAI,UAAU,wEAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,sFACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,iDAAkD,SAAAK,EAAS,MAAA,EAAxE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA+E,EAC/EL,SAAC,OAAA,CAAK,UAAU,mDAAoD,WAAS,WAAA,EAA7E,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyF,CAAA,CAAA,EAF3F,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EACAA,SAAC,SAAA,CAAO,QAAS,IAAM,CAAOkC,GAAW5B,EAAA,CAAW,EAAG,UAAU,+DAC/D,SAAAN,EAAAA,OAACoC,EAAA,CAAE,UAAU,WAAb,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAQA,EAGApC,EAAAA,OAAC,MAAA,CAAI,UAAU,6CACZ,SAAAkC,EACClC,SAACZ,GAAA,CAAa,MAAAC,EAAc,SAAUgB,EAAS,kBAAmB,WAAAd,CAAA,EAAlE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0F,EACxF+B,EACFtB,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,8BAA8B,QAAQ,YAAY,KAAK,eACpE,SAAAA,EAAAA,OAAC,OAAA,CAAK,EAAE,iIAAA,EAAR,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0I,CAAA,EAD5I,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,IAAA,CAAE,UAAU,0CAA0C,SAAA,oBAAA,EAAvD,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyE,CAAA,CAAA,EAJ3E,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EACAA,EAAAA,OAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,OAACqC,GAAA,CACC,GAAI,mBAAmB,mBAAmBf,EAAgB,KAAK,CAAC,cAAc,mBAAmBa,CAAE,CAAC,GACpG,UAAU,uEAEV,SAAA,CAAAnC,EAAAA,OAACsC,EAAA,CAAa,KAAM,EAAA,EAApB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EAAE,iBAAA,CAAA,EAJ5B,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMAtC,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMuB,EAAmB,IAAI,EACtC,UAAU,uDAEV,SAAA,CAAAvB,EAAAA,OAACuC,EAAA,CAAU,KAAM,EAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqB,EAAE,YAAA,CAAA,EAJzB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,CAAA,CAAA,EApBF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAqBA,EAEAvC,EAAAA,OAAAwC,EAAAA,SAAA,CACE,SAAA,CAAAxC,SAACyC,EAAA,CAAc,SAAUvB,EAAW,SAAUC,CAAA,EAA9C,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,EAE3Dd,EAAS,aACRL,SAAC,KAAE,UAAU,kDAAmD,WAAS,aAAzE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqF,WAItF,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,yEAAyE,SAAA,OAAA,EAA1F,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA+F,EAC/FA,EAAAA,OAAC,UAAO,QAAS8B,EAAY,UAAU,0CACpC,SAAArB,EAAW,YAAc,WAAA,EAD5B,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAECA,EACCT,EAAAA,OAAC,WAAA,CACC,MAAOc,EACP,SAAW4B,GAAM3B,EAAY2B,EAAE,OAAO,KAAK,EAC3C,UAAU,yMACV,KAAM,EACN,WAAY,EAAA,EALd,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQA1C,EAAAA,OAAC,MAAA,CAAI,UAAU,0CACZ,SAAA,CAAA,OAAO,QAAQY,CAAM,EAAE,IAAI,CAAC,CAAC+B,EAAKC,CAAK,IACtC5C,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAqF,SAAA2C,CAAA,EAAtG,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0G,EACzG,OAAOC,GAAU,UAChB5C,EAAAA,OAAC,SAAA,CACC,MAAO,OAAO4C,CAAK,EACnB,SAAWF,GAAM7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAGD,EAAE,OAAO,QAAU,OAAQ,EAC1E,UAAU,oLAEV,SAAA,CAAA1C,SAAC,SAAA,CAAO,MAAM,OAAO,SAAA,MAAA,EAArB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyB,EACzBA,SAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,CAAA,CAAA,EAN7B,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQE,OAAO4C,GAAU,SACnB5C,EAAAA,OAAC,WAAA,CACC,MAAO,KAAK,UAAU4C,EAAO,KAAM,CAAC,EACpC,SAAWF,GAAM,CAAE,GAAI,CAAE7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAG,KAAK,MAAMD,EAAE,OAAO,KAAK,EAAG,CAAG,MAAQ,CAAgB,CAAE,EAChH,UAAU,mNAAA,EAHZ,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMA1C,EAAAA,OAAC,QAAA,CACC,KAAM,OAAO4C,GAAU,SAAW,SAAW,OAC7C,MAAO,OAAOA,GAAS,EAAE,EACzB,SAAWF,GAAM7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAG,OAAOC,GAAU,SAAW,OAAOF,EAAE,OAAO,KAAK,EAAIA,EAAE,OAAO,MAAO,EACpH,UAAU,mLAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAvBMC,EAAV,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAyBA,CACD,EACA,OAAO,KAAK/B,CAAM,EAAE,SAAW,GAC9BZ,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,yBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4E,CAAA,CAAA,EA9BhF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgCA,EAEDgB,GAAahB,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAgB,CAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6D,CAAA,CAAA,EAnD7E,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAoDA,EAECT,EAAe,SACdP,SAAC,MAAA,CAAI,UAAU,wEACb,SAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,gCACV,WAAe,iBAAiB,MAAQO,EAAe,MAAM,QAAU,mBAAA,EAD1E,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,EAEFP,EAAAA,OAAC,SAAA,CACC,QAAS+B,EACT,SAAUxB,EAAe,UACzB,UAAU,2EAET,SAAAA,EAAe,UAAY,cAAgBP,EAAAA,OAAAwC,EAAAA,SAAA,CAAE,SAAA,CAAAxC,EAAAA,OAAC6C,EAAA,CAAK,KAAM,EAAA,EAAZ,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgB,EAAE,MAAA,CAAA,EAApB,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,EALtE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EA3EF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IA4EA,CAAA,EAvGJ,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAyGA,CAAA,CAAA,EAtHF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAuHA,CAEJ,CCzQO,SAASC,GAAmB,CACjC,UAAAC,EACA,aAAAC,EACA,QAAAC,EACA,gBAAAC,EACA,OAAAC,EACA,QAAAC,CACF,EAA4B,CAC1B,OACEpD,EAAAA,OAAAwC,WAAA,CACE,SAAA,CAAAxC,SAAC,MAAA,CACC,SAAA,CAAAA,SAACqD,EAAA,CAAa,UAAU,OAAO,SAAA,UAAA,EAA/B,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuC,EACvCrD,EAAAA,OAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAO+C,EACP,SAAWL,GAAM,CACfM,EAAaN,EAAE,OAAO,KAAK,EAC3BO,EAAQ,MAAA,CACV,EACA,YAAY,cACZ,UAAU,gCAAA,EARZ,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAUCF,EAAU,KAAA,GAAUO,EAAaP,EAAU,MAAM,GAChD/C,EAAAA,OAAC,IAAA,CAAE,UAAU,qCACV,SAAAsD,EAAaP,EAAU,KAAA,CAAM,CAAA,EADhC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAdJ,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAgBA,EACA/C,EAAAA,OAAC,SAAA,CACC,QAASmD,EACT,SAAUF,EAAQ,UAClB,UAAU,+BAET,SAAAA,EAAQ,UAAY,YAAc,MAAA,EALrC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAOCC,GACClD,EAAAA,OAAC,SAAA,CACC,QAASoD,EACT,SAAUH,EAAQ,UAClB,UAAU,+CACX,SAAA,OAAA,EAJD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAhCJ,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAkCA,EAECA,EAAQ,WACPjD,SAAC,IAAA,CAAE,UAAU,uCAAuC,SAAA,oBAApD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoE,EAErEiD,EAAQ,OACPjD,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAiD,EAAQ,MAAM,OAAA,EAAjE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyE,CAAA,CAAA,EA1C7E,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA4CA,EAGAjD,EAAAA,OAAC,MAAA,CAAI,UAAU,mCACb,SAAA,CAAAA,SAACqD,EAAA,CAAa,UAAU,OAAO,SAAA,iBAAA,EAA/B,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA8C,EAC9CrD,EAAAA,OAAC,MAAA,CAAI,UAAU,oDACZ,SAAAuD,GAAgB,IAAI,CAAC,CAACC,EAAMC,CAAI,IAC/BzD,EAAAA,OAAC,SAAA,CAEC,KAAK,SACL,QAAS,IAAM,CACbgD,EAAaQ,CAAI,EACjBP,EAAQ,MAAA,CACV,EACA,UAAU,iDAEV,SAAA,CAAAjD,SAAC,OAAA,CAAK,UAAU,kEACb,SAAAwD,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAxD,SAAC,OAAA,CAAK,UAAU,iCAAkC,SAAAyD,CAAA,EAAlD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuD,CAAA,CAAA,EAXlDD,EADP,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAcD,CAAA,EAhBH,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiBA,CAAA,CAAA,EAnBF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAoBA,CAAA,CAAA,EApEF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAqEA,CAEJ,CC9EO,SAASE,GAAU,CAAE,SAAArD,EAAU,QAAAC,GAA2B,CAC/D,MAAMqD,EAAkBC,EAAA,EAClBC,EAAoBC,EAAA,EAEpB,CAACf,EAAWC,CAAY,EAAIrC,EAAAA,SAAS,EAAE,EACvC,CAACO,EAAWC,CAAY,EAAIR,EAAAA,SAAS,EAAE,EACvC,CAACF,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EACxC,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAA8B,CAAA,CAAE,EACtD,CAACG,EAAUC,CAAW,EAAIJ,EAAAA,SAAS,IAAI,EAG7Cc,EAAAA,UAAU,IAAM,CACduB,EAAa3C,EAAS,eAAiB,EAAE,EACzCc,EAAad,EAAS,YAAc,EAAE,EACtCsD,EAAgB,MAAA,EAChBE,EAAkB,MAAA,EAElB,MAAME,EAAW1D,EAAS,eAAiB,CAAA,EACrCqB,EAAW,OAAO,KAAKqC,CAAQ,EAAE,OAAS,EAC5CA,EACApC,EAActB,EAAS,YAAY,EACvCQ,EAAUa,CAA+B,EACzCX,EAAY,KAAK,UAAUW,EAAU,KAAM,CAAC,CAAC,EAC7ChB,EAAY,EAAK,CACnB,EAAG,CAACL,EAAS,EAAE,CAAC,EAEhB,MAAMyB,EAAa,IAAM,CACvB,GAAI,CAACrB,EACHM,EAAY,KAAK,UAAUH,EAAQ,KAAM,CAAC,CAAC,MAE3C,IAAI,CAAEC,EAAU,KAAK,MAAMC,CAAQ,CAAC,CAAG,MAAQ,CAAoB,CAErEJ,EAAY,CAACD,CAAQ,CACvB,EAEMuD,EAAa,IAAM,CACvB,IAAID,EACJ,GAAItD,EACF,GAAI,CAAEsD,EAAW,KAAK,MAAMjD,CAAQ,CAAG,MAAQ,CAAE,MAAQ,MAEzDiD,EAAW,CAAE,GAAGnD,CAAA,EAGlB+C,EAAgB,OAAO,CACrB,GAAItD,EAAS,GACb,cAAe0C,EAAU,KAAA,EACzB,cAAe,OAAO,KAAKgB,CAAQ,EAAE,OAAS,EAAIA,EAAW,KAC7D,WAAY7C,GAAa,IAAA,CAC1B,CACH,EAEM+C,EAAc,IAAM,CACxBJ,EAAkB,OAAOxD,EAAS,GAAI,CACpC,UAAW,IAAM,CACf2C,EAAa,EAAE,CACjB,CAAA,CACD,CACH,EAGMkB,EAAmB,CACvB,UAAWP,EAAgB,WAAaE,EAAkB,UAC1D,UAAWF,EAAgB,WAAaE,EAAkB,UAC1D,MAAOF,EAAgB,OAASE,EAAkB,MAClD,MAAO,IAAM,CAAEF,EAAgB,MAAA,EAASE,EAAkB,MAAA,CAAS,CAAA,EAGrE,OACE7D,EAAAA,OAAC,MAAA,CAAI,UAAU,wEAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,sFACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,iDAAiD,SAAA,eAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2E,EAC3EA,SAAC,OAAA,CAAK,UAAU,mDAAoD,WAAS,WAAA,EAA7E,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyF,CAAA,CAAA,EAF3F,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,EACAA,EAAAA,OAAC,UAAO,QAASM,EAAS,UAAU,+DAClC,SAAAN,EAAAA,OAACoC,EAAA,CAAE,UAAU,SAAA,EAAb,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,EAGApC,EAAAA,OAAC,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAA,SAACyC,EAAA,CAAc,SAAUvB,EAAW,SAAUC,CAAA,EAA9C,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4D,EAE5DnB,EAAAA,OAAC8C,GAAA,CACC,UAAAC,EACA,aAAAC,EACA,QAASkB,EACT,gBAAiB,CAAC,CAAC7D,EAAS,cAC5B,OAAQ2D,EACR,QAASC,CAAA,EANX,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,WAUC,MAAA,CACC,SAAA,CAAAjE,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAACqD,GAAa,SAAA,eAAA,EAAd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,EAC3BrD,EAAAA,OAAC,UAAO,QAAS8B,EAAY,UAAU,0CACpC,SAAArB,EAAW,YAAc,WAAA,EAD5B,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAECA,EACCT,EAAAA,OAAC,WAAA,CACC,MAAOc,EACP,SAAW4B,GAAM3B,EAAY2B,EAAE,OAAO,KAAK,EAC3C,UAAU,yMACV,KAAM,EACN,WAAY,EAAA,EALd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQA1C,EAAAA,OAAC,MAAA,CAAI,UAAU,0CACZ,SAAA,CAAA,OAAO,QAAQY,CAAM,EAAE,IAAI,CAAC,CAAC+B,EAAKC,CAAK,IACtC5C,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAqF,SAAA2C,CAAA,EAAtG,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0G,EACzG,OAAOC,GAAU,UAChB5C,EAAAA,OAAC,SAAA,CACC,MAAO,OAAO4C,CAAK,EACnB,SAAWF,GAAM7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAGD,EAAE,OAAO,QAAU,OAAQ,EAC1E,UAAU,oLAEV,SAAA,CAAA1C,SAAC,SAAA,CAAO,MAAM,OAAO,SAAA,MAAA,EAArB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyB,EACzBA,SAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,CAAA,CAAA,EAN7B,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQE,OAAO4C,GAAU,SACnB5C,EAAAA,OAAC,WAAA,CACC,MAAO,KAAK,UAAU4C,EAAO,KAAM,CAAC,EACpC,SAAWF,GAAM,CAAE,GAAI,CAAE7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAG,KAAK,MAAMD,EAAE,OAAO,KAAK,EAAG,CAAG,MAAQ,CAAgB,CAAE,EAChH,UAAU,mNAAA,EAHZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMA1C,EAAAA,OAAC,QAAA,CACC,KAAM,OAAO4C,GAAU,SAAW,SAAW,OAC7C,MAAO,OAAOA,GAAS,EAAE,EACzB,SAAWF,GAAM7B,EAAU,CAAE,GAAGD,EAAQ,CAAC+B,CAAG,EAAG,OAAOC,GAAU,SAAW,OAAOF,EAAE,OAAO,KAAK,EAAIA,EAAE,OAAO,MAAO,EACpH,UAAU,mLAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAvBMC,EAAV,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAyBA,CACD,EACA,OAAO,KAAK/B,CAAM,EAAE,SAAW,GAC9BZ,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,yBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4E,CAAA,CAAA,EA9BhF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgCA,CAAA,CAAA,EAjDJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmDA,CAAA,CAAA,EAhEF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiEA,CAAA,CAAA,EA9EF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA+EA,CAEJ,CCnJO,SAASmE,GAAaC,EAAoD,CAC/E,MAAMC,MAAU,IAChB,UAAWC,KAAMF,EAAW,CAC1B,MAAMG,EAAOF,EAAI,IAAIC,EAAG,MAAM,GAAK,CAAA,EACnCC,EAAK,KAAKD,CAAE,EACZD,EAAI,IAAIC,EAAG,OAAQC,CAAI,CACzB,CAEA,MAAO,CAAC,GAAGF,EAAI,QAAA,CAAS,EAAE,IAAI,CAAC,CAACG,EAAOC,CAAG,IAAM,OAC9C,MAAMC,EAAyC,CAAE,OAAQ,EAAG,SAAU,EAAG,MAAO,EAAG,SAAU,CAAA,EACvFC,EAAaF,EAAI,OACrB,CAACG,EAAMN,KAASI,EAAeJ,EAAG,MAAM,GAAK,IAAMI,EAAeE,CAAI,GAAK,GAAKN,EAAG,OAASM,EAC5FH,EAAI,CAAC,EAAE,MAAA,EAEHI,EAASJ,EAAI,OAAO,CAACK,EAAKR,IAAQA,EAAG,WAAaQ,EAAMR,EAAG,WAAaQ,EAAML,EAAI,CAAC,EAAE,UAAU,EAE/FM,EAAgBN,EAAI,OAAO,CAACK,EAAKR,IAAO,CAC5C,MAAMU,EAAI,SAASV,EAAG,aAAe,IAAK,EAAE,EAC5C,OAAOU,EAAIF,EAAME,EAAIF,CACvB,EAAG,CAAC,EAEEG,IAAQC,EAAAT,EAAI,QAAWH,EAAG,MAAM,IAAxB,YAAAY,EAA2B,SAAU,KAEnD,MAAO,CACL,MAAAV,EACA,UAAWC,EACX,UAAWA,EAAI,OACf,OAAQE,EACR,UAAWE,EACX,WAAY,OAAOE,CAAa,EAChC,MAAAE,CAAA,CAEJ,CAAC,CACH,CAGO,SAASE,GAAcC,EAAuBC,EAAyB,CAC5E,GAAI,CAACA,EAAQ,MAAO,GACpB,MAAMC,EAAID,EAAO,YAAA,EACjB,OAAID,EAAO,MAAM,YAAA,EAAc,SAASE,CAAC,EAAU,GAC5CF,EAAO,UAAU,KACrBd,YACC,OAAAA,EAAG,YAAY,cAAc,SAASgB,CAAC,KACvCJ,EAAAZ,EAAG,OAAH,YAAAY,EAAS,cAAc,SAASI,OAChCC,EAAAjB,EAAG,cAAH,YAAAiB,EAAgB,cAAc,SAASD,IAAC,CAE9C,CAGO,SAASE,GAAYpB,EAAmCiB,EAAwC,CACrG,GAAI,CAACA,EAAQ,OAAOjB,EACpB,MAAMkB,EAAID,EAAO,YAAA,EACjB,OAAOjB,EAAU,OACdE,YACC,OAAAA,EAAG,YAAY,cAAc,SAASgB,CAAC,KACvCJ,EAAAZ,EAAG,OAAH,YAAAY,EAAS,cAAc,SAASI,OAChCC,EAAAjB,EAAG,cAAH,YAAAiB,EAAgB,cAAc,SAASD,IAAC,CAE9C,CCnEO,SAASG,GAAQ,CAAE,GAAAnB,EAAI,MAAAoB,EAAO,SAAAC,EAAU,OAAAC,GAK5C,CACD,MAAMC,EAASvB,EAAG,SAAW,SACvBwB,EAAU,CAAC,CAACxB,EAAG,cAErB,OACEtE,EAAAA,OAAC,MAAA,CAAI,QAAS6F,EAASH,EAAQ,OAAW,UAAW,6GAA6GG,EAAS,iBAAmB,EAAE,GAC9L,SAAA,CAAA7F,EAAAA,OAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,iDAAkD,SAAAsE,EAAG,WAAA,EAArE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiF,EACjFtE,EAAAA,OAAC,OAAA,CAAK,UAAU,mDAAmD,SAAA,CAAA,IAAEsE,EAAG,eAAA,CAAA,EAAxE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwF,CAAA,CAAA,EAF1F,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,EACCA,EAAG,aACFtE,SAAC,KAAE,UAAU,qDAAsD,WAAG,aAAtE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkF,CAAA,CAAA,EANtF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,WACC,MAAA,CAAI,UAAU,2EACZ,SAAA,IAAI,KAAKsE,EAAG,UAAU,EAAE,mBAAmB,QAAS,CAAE,MAAO,QAAS,IAAK,UAAW,CAAA,EADzF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EACAtE,EAAAA,OAAC,OAAI,UAAU,4CACb,kBAAC+F,EAAA,CAAY,OAAQzB,EAAG,MAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAgC,CAAA,EADlC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EACAtE,EAAAA,OAAC,MAAA,CAAI,UAAU,iDACZ,SAAA,CAAA6F,GACC7F,EAAAA,OAAC,SAAA,CACC,QAAU0C,GAAM,CAAEA,EAAE,gBAAA,EAAmBgD,EAAA,CAAS,EAChD,UAAU,gGACV,MAAM,YAEN,SAAA1F,EAAAA,OAAC6C,EAAA,CAAK,UAAU,cAAc,YAAa,GAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgD,CAAA,EALlD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAQF7C,EAAAA,OAAC,SAAA,CACC,QAAU0C,GAAM,CAAEA,EAAE,gBAAA,EAAmBkD,EAAA,CAAU,EACjD,UAAWE,EACP,sBACA,gGACJ,MAAOA,EAAU,SAASxB,EAAG,aAAa,GAAK,gBAE/C,SAAAtE,EAAAA,OAACgG,EAAA,CAAM,UAAU,cAAc,YAAa,GAAA,EAA5C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiD,CAAA,EAPnD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EASC1B,EAAG,oBACFtE,EAAAA,OAAC,SAAA,CACC,QAAU0C,GAAM,CAAEA,EAAE,gBAAA,EAAmBiD,EAAA,CAAY,EACnD,UAAU,gGACV,MAAM,oBAEN,SAAA3F,EAAAA,OAACiG,GAAA,CAAM,UAAU,cAAc,YAAa,GAAA,EAA5C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiD,CAAA,EALnD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EA1BJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA4BA,CAAA,CAAA,EA5CF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6CA,CAEJ,CAIO,SAASC,GAAU,CACxB,OAAAd,EACA,SAAAe,EACA,SAAAC,EACA,UAAAC,EACA,SAAAV,EACA,YAAAW,EACA,OAAAV,EACA,aAAAW,CACF,EASG,CACD,OACEvG,EAAAA,OAAAwC,WAAA,CACE,SAAA,CAAAxC,EAAAA,OAAC,KAAA,CACC,QAASoG,EACT,UAAU,6EAGV,SAAA,CAAApG,EAAAA,OAAC,MAAG,UAAU,cACZ,SAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAW,qCAAqCmG,EAAW,YAAc,EAAE,sBAC/E,SAAAnG,EAAAA,OAACwG,EAAA,CAAa,KAAM,EAAA,EAApB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,EAD1B,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAxG,SAAC,IAAA,CAAE,UAAU,kDAAmD,WAAO,KAAA,EAAvE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6E,EAC7EA,EAAAA,OAAC,OAAA,CAAK,UAAU,0CAA0C,SAAA,CAAA,QAAMoF,EAAO,UAAA,CAAA,EAAvE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkF,CAAA,CAAA,EALpF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAMA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,EAGApF,EAAAA,OAAC,MAAG,UAAU,qCACZ,kBAAC+F,EAAA,CAAY,OAAQX,EAAO,MAAA,EAA5B,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,EADtC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,WAGC,KAAA,CAAG,UAAU,mBACZ,SAAApF,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,2HACb,SAAAoF,EAAO,SAAA,EADV,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACCA,EAAO,OACNpF,EAAAA,OAAC,SAAA,CACC,QAAU0C,GAAM,CAAEA,EAAE,gBAAA,EAAmB4D,EAAA,CAAe,EACtD,UAAU,gGACV,MAAM,iBAEN,SAAAtG,EAAAA,OAACyG,EAAA,CAAO,UAAU,cAAc,YAAa,GAAA,EAA7C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkD,CAAA,EALpD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAXJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,CAAA,EAdF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAeA,CAAA,CAAA,EApCF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,WAwCC,KAAA,CACC,SAAAzG,EAAAA,OAAC,MAAG,QAAS,EAAG,UAAU,eACxB,SAAAA,EAAAA,OAAC,MAAA,CACC,UAAU,gEACV,MAAO,CAAE,iBAAkBmG,EAAW,MAAQ,KAAA,EAE9C,SAAAnG,EAAAA,OAAC,MAAA,CAAI,UAAU,kBACZ,SAAA,CAAAuG,EAAa,IAAKjC,GACjBtE,SAACyF,IAAoB,GAAAnB,EAAQ,MAAO,IAAM+B,EAAU/B,CAAE,EAAG,SAAU,IAAMqB,EAASrB,CAAE,EAAG,OAAQ,IAAMsB,EAAOtB,CAAE,GAAhGA,EAAG,GAAjB,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiH,CAClH,EACDtE,EAAAA,OAAC,MAAA,CAAI,UAAU,0BAAA,EAAf,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0C,CAAA,CAAA,EAJ5C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAUA,EAXF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAYA,CAAA,EAbF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAcA,CAAA,CAAA,EAvDF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwDA,CAEJ,CChIO,SAAS0G,IAAoB,CAClC,MAAMC,EAAWC,GAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,CAAA,EAAcC,EAAgB,CAC7C,QAAS,CAAE,OAAQ,GAAI,OAAQ,GAAI,OAAQ,EAAA,CAAG,CAC/C,EAGK,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAiB,CAC3C,OAASL,EAAQ,QAAU,OAC3B,OAAQA,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,MAAO,IACP,OAAQ,CAAA,CACT,EAEKzC,GAAY4C,GAAA,YAAAA,EAAM,YAAa,CAAA,EAG/B,CAAE,KAAMG,CAAA,EAAaC,EAAgB,CAAE,MAAO,IAAK,EACnDC,EAAeC,EAAAA,QAAQ,IAAM,CACjC,MAAMjD,MAAU,IAChB,UAAWxE,KAAKsH,GAAA,YAAAA,EAAU,OAAQ,CAAA,EAC5BtH,EAAE,oBAAoBwE,EAAI,IAAIxE,EAAE,GAAIA,EAAE,kBAAkB,EAE9D,OAAOwE,CACT,EAAG,CAAC8C,GAAA,YAAAA,EAAU,IAAI,CAAC,EAEbI,EAAUD,EAAAA,QAAQ,IAAMnD,GAAaC,CAAS,EAAG,CAACA,CAAS,CAAC,EAG5DoD,EAAgBF,EAAAA,QAAQ,IAChB,CAAC,GAAG,IAAI,IAAIlD,EAAU,IAAKE,GAAOA,EAAG,MAAM,CAAC,CAAC,EAAE,KAAA,EAChD,IAAKmD,IAAQ,CAAE,MAAOA,EAAI,MAAOA,CAAA,EAAK,EAChD,CAACrD,CAAS,CAAC,EAGRsD,EAAkBJ,EAAAA,QAAQ,IACzBT,EAAQ,OACNU,EAAQ,OAAQ1H,GAAMsF,GAActF,EAAGgH,EAAQ,MAAM,CAAC,EADjCU,EAE3B,CAACA,EAASV,EAAQ,MAAM,CAAC,EAEtB,CAAE,YAAAc,EAAa,OAAQC,CAAA,EAAiBC,EAAgB,4BAA4B,EACpF,CAACC,EAAaC,CAAc,EAAIpH,EAAAA,SAAsC,IAAI,EAC1E,CAACqH,EAAcC,CAAe,EAAItH,EAAAA,SAAsC,IAAI,EAG5EuH,EAAkBJ,GAAeE,EAEvC,OAAIf,WAEC,MAAA,CACC,SAAA,CAAAjH,EAAAA,OAACmI,EAAA,CAAW,MAAM,oBAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuC,EACvCnI,EAAAA,OAAC,OAAI,UAAU,0BACZ,eAAM,KAAK,CAAE,OAAQ,EAAG,EAAE,IAAI,CAACoI,EAAG,IACjCpI,EAAAA,OAAC,MAAA,CAAY,UAAU,uDACrB,SAAAA,SAAC,MAAA,CAAI,UAAU,sCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,GAD9C,EAAV,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,GALH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAMA,CAAA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,WAKD,MAAA,CACC,SAAA,CAAAA,EAAAA,OAACmI,EAAA,CACC,MAAM,qBACN,QACEnI,EAAAA,OAAC,SAAA,CAAO,QAAS,IAAM2G,EAAS,cAAc,EAAG,UAAU,sBAAsB,SAAA,iBAAA,EAAjF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EALJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EASA3G,SAAC,IAAA,CAAE,UAAU,6DAA6D,SAAA,8EAAA,EAA1E,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,WAECqI,EAAA,CACC,SAAA,CAAArI,EAAAA,OAACsI,EAAA,CACC,MAAM,SACN,MAAOzB,EAAQ,OACf,SAAW7B,GAAM8B,EAAU,SAAU9B,CAAC,EACtC,YAAY,sBAAA,EAJd,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAMCwC,EAAc,OAAS,GACtBxH,EAAAA,OAACuI,EAAA,CACC,MAAM,SACN,MAAO1B,EAAQ,OACf,SAAW7B,GAAM8B,EAAU,SAAU9B,CAAC,EACtC,QAASwC,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOFxH,EAAAA,OAACuI,EAAA,CACC,MAAM,SACN,MAAO1B,EAAQ,OACf,SAAW7B,GAAM8B,EAAU,SAAU9B,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,QAAS,MAAO,OAAA,EACzB,CAAE,MAAO,WAAY,MAAO,UAAA,EAC5B,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,WAAY,MAAO,UAAA,CAAW,CACzC,EATF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAUA,CAAA,EAzBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA0BA,EAEAhF,EAAAA,OAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAA,SAAC,MAAA,CAAI,UAAW,GAAGkI,EAAkB,iBAAmB,QAAQ,kBAC7D,SAAAR,EAAgB,SAAW,EAC1B1H,EAAAA,OAACwI,EAAA,CAAW,MAAM,mBAAmB,YAAY,0DAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4G,EAE5GxI,SAAC,QAAA,CAAM,UAAU,SACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,WACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,kIAAkI,SAAA,eAAA,EAAhJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,KAAA,CAAG,UAAU,uIAAuI,SAAA,QAAA,EAArJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,KAAA,CAAG,UAAU,2CAAA,EAAd,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0D,CAAA,CAAA,EAP5D,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAUA,EACAA,EAAAA,OAAC,QAAA,CACE,SAAA0H,EAAgB,IAAKtC,GACpBpF,EAAAA,OAACkG,GAAA,CAEC,OAAAd,EACA,SAAUuC,EAAY,IAAIvC,EAAO,KAAK,EACtC,SAAU,IAAMwC,EAAaxC,EAAO,KAAK,EACzC,UAAYd,GAAO,CAAE2D,EAAgB,IAAI,EAAGF,EAAezD,CAAE,CAAG,EAChE,SAAWA,GAAO,CACZA,EAAG,oBAAoBqC,EAAS,gBAAgBrC,EAAG,kBAAkB,SAAS,CACpF,EACA,YAAa,IAAM,CACjB,GAAIc,EAAO,MAAO,CAChB,MAAMqD,EAAcpB,EAAa,IAAIjC,EAAO,KAAK,EAC7CqD,GACF9B,EAAS,gBAAgB8B,CAAW,qBAAqBrD,EAAO,KAAK,SAAS,CAElF,CACF,EACA,OAASd,GAAO,CAAEyD,EAAe,IAAI,EAAGE,EAAgB3D,CAAE,CAAG,EAC7D,aAAckB,GAAYJ,EAAO,UAAWyB,EAAQ,MAAM,CAAA,EAjBrDzB,EAAO,MADd,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAoBD,CAAA,EAtBH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAuBA,CAAA,CAAA,EAnCF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAoCA,CAAA,EAxCJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA0CA,EAEC0C,GACC9H,EAAAA,OAAC,MAAA,CAAI,UAAU,wDACb,SAAAA,EAAAA,OAACI,GAAA,CACC,SAAU0H,EACV,QAAS,IAAMC,EAAe,IAAI,CAAA,EAFpC,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAGA,EAJF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAGDC,GACChI,EAAAA,OAAC,MAAA,CAAI,UAAU,wDACb,SAAAA,EAAAA,OAAC0D,GAAA,CACC,SAAUsE,EACV,QAAS,IAAMC,EAAgB,IAAI,CAAA,EAFrC,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAGA,EAJF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,CAAA,EA5DJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA8DA,CAAA,CAAA,EAxGF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAyGA,CAEJ"}
@@ -1,2 +0,0 @@
1
- import{v as l,j as s,w as m,x as c}from"./index-puKKZ5l8.js";import{a}from"./vendor-query-DLp59M9_.js";const n=[{maxMs:0,color:"text-status-error"},{maxMs:300*1e3,color:"text-status-error"},{maxMs:900*1e3,color:"text-status-warning"},{maxMs:1/0,color:"text-accent"}];function u(e){if(e<=0)return n[0].color;for(const t of n)if(e<t.maxMs)return t.color;return n[n.length-1].color}function d({until:e}){const[t,r]=a.useState(()=>new Date(e).getTime()-Date.now());a.useEffect(()=>{const o=setInterval(()=>{r(new Date(e).getTime()-Date.now())},1e3);return()=>clearInterval(o)},[e]);const i=a.useMemo(()=>{const o=new Date(e);return[{label:"ms",value:String(Math.max(0,t))},{label:"until",value:o.toISOString()},{label:"local",value:l(o,"MMM d, yyyy h:mm:ss a")}]},[e,t]);return s.jsxDEV(m,{options:i,children:s.jsxDEV("span",{className:`text-xs font-mono ${u(t)}`,children:c(t)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:42,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:41,columnNumber:5},this)}function p(e){return!!(e.assigned_to&&e.assigned_until&&new Date(e.assigned_until)>new Date)}function w(e){return!e.workflow_type}export{d as C,p as a,w as i};
2
- //# sourceMappingURL=escalation-A0CsbvNV.js.map
@@ -1,2 +0,0 @@
1
- import{j as a}from"./index-puKKZ5l8.js";import{F as c,b as r}from"./FilterBar-DbVbCzH2.js";import{P as u}from"./PriorityBadge-BrPikMFy.js";import{R as p}from"./RolePill-DxbJMfJu.js";import{W as d}from"./WorkflowPill-CCV4MMj7.js";import{T as b}from"./TimestampCell-Crb9b0Gw.js";import{C as N,i as f,a as x}from"./escalation-A0CsbvNV.js";import{_ as h,$ as v,a0 as g,a1 as t}from"./vendor-icons-CWl44VA6.js";import{L as y}from"./vendor-react-Co3Y8ikm.js";function E({row:e}){if(f(e)){const l=e.status==="resolved"?"text-status-success":"text-text-tertiary";return a.jsxDEV(g,{className:`w-3 h-3 shrink-0 ${l}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:17,columnNumber:12},this)}return e.status==="resolved"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:20,columnNumber:12},this):e.status==="cancelled"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:23,columnNumber:12},this):x(e)?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:26,columnNumber:12},this):a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:29,columnNumber:10},this)}const R=[{key:"description",label:"Summary",render:e=>a.jsxDEV("div",{className:"flex items-start gap-2 overflow-hidden",children:[a.jsxDEV("span",{className:"mt-1 shrink-0",children:a.jsxDEV(E,{row:e},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:41},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:9},void 0),a.jsxDEV("div",{className:"min-w-0 overflow-hidden",children:[a.jsxDEV("p",{className:"text-xs text-text-primary truncate",children:e.description||e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:41,columnNumber:11},void 0),a.jsxDEV("div",{className:"flex items-center gap-2 mt-0.5",children:[a.jsxDEV(d,{type:e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:43,columnNumber:13},void 0),e.subtype&&e.subtype!==e.type&&a.jsxDEV("span",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:e.subtype},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:45,columnNumber:15},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:42,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:40,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:38,columnNumber:7},void 0),className:"max-w-0"},{key:"task_id",label:"Task",render:e=>e.task_id?a.jsxDEV(y,{to:`/workflows/tasks/detail/${e.task_id}`,onClick:l=>l.stopPropagation(),className:"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors",children:[e.task_id.slice(0,12),"…",a.jsxDEV(h,{size:10,className:"opacity-0 group-hover/task:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:64,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:58,columnNumber:9},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:67,columnNumber:9},void 0),className:"w-36 whitespace-nowrap"},{key:"role",label:"Role",render:e=>a.jsxDEV(p,{role:e.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:74,columnNumber:22},void 0),className:"w-28"},{key:"priority",label:"Priority",render:e=>a.jsxDEV(u,{priority:e.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:80,columnNumber:22},void 0),className:"w-20",sortable:!0},{key:"created_at",label:"Created",render:e=>a.jsxDEV(b,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:87,columnNumber:22},void 0),className:"w-40",sortable:!0}],L={key:"expires",label:a.jsxDEV(v,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:96,columnNumber:11},void 0),render:e=>e.assigned_until?a.jsxDEV(N,{until:e.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:99,columnNumber:7},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:101,columnNumber:7},void 0),className:"w-10"},j=[{value:"1",label:"P1"},{value:"2",label:"P2"},{value:"3",label:"P3"},{value:"4",label:"P4"}],D=[{value:"available",label:"Available"},{value:"claimed",label:"Claimed"},{value:"resolved",label:"Resolved"}];function I({filters:e,setFilter:l,roles:o,types:i,showStatus:n=!1,actions:m}){return a.jsxDEV(c,{actions:m,children:[n&&a.jsxDEV(r,{label:"Status",value:e.status??"",onChange:s=>l("status",s),options:D},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:172,columnNumber:9},this),a.jsxDEV(r,{label:"Role",value:e.role,onChange:s=>l("role",s),options:o.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:179,columnNumber:7},this),a.jsxDEV(r,{label:"Type",value:e.type,onChange:s=>l("type",s),options:i.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:185,columnNumber:7},this),a.jsxDEV(r,{label:"Priority",value:e.priority,onChange:s=>l("priority",s),options:j},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:191,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:170,columnNumber:5},this)}export{R as E,L as T,I as a};
2
- //# sourceMappingURL=escalation-columns-BpBJN6k4.js.map
@@ -1,2 +0,0 @@
1
- import{j as n}from"./index-puKKZ5l8.js";import{T as o}from"./TimeAgo-B5LXB2aj.js";import{S as l}from"./StatusBadge-Dm0V1dNN.js";const i={"* * * * *":"Every minute","*/5 * * * *":"Every 5 minutes","*/15 * * * *":"Every 15 minutes","*/30 * * * *":"Every 30 minutes","0 * * * *":"Every hour","0 */2 * * *":"Every 2 hours","0 */6 * * *":"Every 6 hours","0 */12 * * *":"Every 12 hours","0 0 * * *":"Daily at midnight","0 9 * * *":"Daily at 9 AM","0 9 * * 1-5":"Weekdays at 9 AM","0 0 * * 0":"Weekly (Sunday midnight)","0 0 1 * *":"Monthly (1st at midnight)","0 2 * * *":"Daily at 2 AM"};function c(e){return i[e]??""}const f=[["*/15 * * * *","Every 15 min"],["0 * * * *","Every hour"],["0 */6 * * *","Every 6 hours"],["0 9 * * *","Daily 9 AM"],["0 9 * * 1-5","Weekdays 9 AM"],["0 0 * * 0","Weekly (Sun)"]];function p(e){const t=e==null?void 0:e.data;if(!t||typeof t!="object"||Array.isArray(t))return null;const a=Object.entries(t);return a.length===0||!a.every(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)?null:a.map(([r,s])=>({key:r,value:s===null?"":String(s),type:s===null?"string":typeof s}))}const h=[{key:"workflow_id",label:"Workflow ID",render:e=>n.jsxDEV("span",{className:"font-mono text-[11px] text-text-secondary",children:e.workflow_id.length>40?`${e.workflow_id.slice(0,40)}...`:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:69,columnNumber:7},void 0)},{key:"status",label:"Status",render:e=>n.jsxDEV(l,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:79,columnNumber:22},void 0),className:"w-28"},{key:"created_at",label:"Started",render:e=>n.jsxDEV(o,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:85,columnNumber:22},void 0),className:"w-32"}];export{f as C,c as d,p as e,h as j};
2
- //# sourceMappingURL=helpers-CmznCuAx.js.map
@@ -1,2 +0,0 @@
1
- import{b as j,j as e}from"./index-puKKZ5l8.js";import{u as $,c as T,a as m}from"./vendor-query-DLp59M9_.js";import{P as q}from"./PageHeader-CZ9a8cpr.js";import{F as A,a as G}from"./FilterBar-DbVbCzH2.js";import{L as H}from"./ListToolbar-0XNuXj0M.js";import{E as K}from"./EmptyState-Dep92Wkg.js";import{F as X,k as B,D as U,H as J,i as Q,al as Y,am as Z,an as ee,ao as se,ap as ae,X as ie,aq as re,_ as te,ar as le,l as ne,j as oe}from"./vendor-icons-CWl44VA6.js";import{T as M}from"./TimeAgo-B5LXB2aj.js";import{f as me}from"./vendor-react-Co3Y8ikm.js";function ce(s,r=100,t){const a=new URLSearchParams;s&&a.set("prefix",s),a.set("pageSize",String(r)),t&&a.set("continuationToken",t);const l=a.toString();return $({queryKey:["fileBrowse",s,r,t],queryFn:()=>j(`/file-browser/browse?${l}`)})}function ue(s){return $({queryKey:["fileMetadata",s],queryFn:()=>j(`/file-browser/metadata/${s}`),enabled:!!s})}function de(){return T({mutationFn:s=>j("/file-browser/signed-url",{method:"POST",body:JSON.stringify(s)})})}function pe(){return T({mutationFn:s=>j(`/file-browser/delete/${s}`,{method:"DELETE"})})}function be(s){return`/api/files/${s.replace(/^\/+/,"")}`}function fe({prefix:s,onNavigate:r}){const t=s?s.replace(/\/+$/,"").split("/").filter(Boolean):[];return e.jsxDEV("nav",{className:"flex items-center gap-1 text-sm mb-6 min-h-[28px]",children:[e.jsxDEV("button",{onClick:()=>r(""),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${t.length===0?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(X,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("span",{children:"Files"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:13,columnNumber:7},this),t.map((a,l)=>{const i=l===t.length-1,c=t.slice(0,l+1).join("/")+"/";return e.jsxDEV("span",{className:"flex items-center gap-1",children:[e.jsxDEV(B,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:30,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>r(c),className:`px-1.5 py-0.5 rounded transition-colors ${i?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:31,columnNumber:13},this)]},c,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:29,columnNumber:11},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:12,columnNumber:5},this)}function he(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function F(s){return s.split("/").pop()||s}function L({label:s,value:r,mono:t,children:a}){return e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("dd",{className:`text-sm text-text-secondary ${t?"font-mono text-xs break-all":""}`,children:a||r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:32,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:30,columnNumber:5},this)}function Ne({url:s}){const[r,t]=m.useState(null),[a,l]=m.useState(!1);return r===null&&!a&&fetch(s).then(i=>{if(!i.ok)throw new Error;return i.text()}).then(i=>t(i.slice(0,1e5))).catch(()=>l(!0)),a?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Could not load preview"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:53,columnNumber:21},this):r===null?e.jsxDEV("div",{className:"animate-pulse h-32 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:55,columnNumber:12},this):e.jsxDEV("pre",{className:"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words",children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:59,columnNumber:5},this)}function xe({metadata:s}){const[r,t]=m.useState(null);async function a(l,i){await navigator.clipboard.writeText(l),t(i),setTimeout(()=>t(null),2e3)}return e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:"Path"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:79,columnNumber:9},this),e.jsxDEV("dd",{onClick:()=>a(s.path,"path"),className:"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors",title:"Click to copy",children:[e.jsxDEV("span",{className:"flex-1",children:s.path},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:85,columnNumber:11},this),r==="path"?e.jsxDEV(U,{className:"w-3.5 h-3.5 text-status-success shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:87,columnNumber:15},this):e.jsxDEV(J,{className:"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:88,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:78,columnNumber:7},this),e.jsxDEV(L,{label:"Type",value:s.content_type},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:91,columnNumber:7},this),e.jsxDEV(L,{label:"Size",value:he(s.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:92,columnNumber:7},this),e.jsxDEV(L,{label:"Modified",children:e.jsxDEV(M,{date:s.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:94,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:93,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:77,columnNumber:5},this)}async function ge(s,r){const a=await(await fetch(s)).blob(),l=URL.createObjectURL(a),i=document.createElement("a");i.href=l,i.download=r,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(l)}function ve(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function we(s){var t;const r=((t=s.split(".").pop())==null?void 0:t.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)?e.jsxDEV(Y,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:22,columnNumber:12},this):["json"].includes(r)?e.jsxDEV(Z,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:25,columnNumber:12},this):["csv","xlsx","xls"].includes(r)?e.jsxDEV(ee,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:28,columnNumber:12},this):["txt","md","html","xml","yaml","yml","css","js","ts"].includes(r)?e.jsxDEV(se,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:31,columnNumber:12},this):e.jsxDEV(ae,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:33,columnNumber:10},this)}function Fe(s){var t;const r=((t=s.split(".").pop())==null?void 0:t.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)}function Pe(s){const r=s.replace(/\/+$/,"");return r.split("/").pop()||r}function Ve(s){return s.split("/").pop()||s}function Ee({directories:s,files:r,onNavigate:t,onSelect:a,selectedFile:l}){return e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium",children:"Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:63,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 font-medium w-24 text-right",children:"Size"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:64,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-40 text-right",children:"Modified"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:62,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:61,columnNumber:7},this),e.jsxDEV("tbody",{children:[s.map(i=>e.jsxDEV("tr",{onClick:()=>t(i),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(Q,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:77,columnNumber:17},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:Pe(i)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:78,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:76,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:75,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:83,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:84,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:70,columnNumber:11},this)),r.map(i=>e.jsxDEV("tr",{onClick:()=>a(i.path),className:`row-hover cursor-pointer group ${l===i.path?"bg-surface-hover":""}`,children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[we(i.path),e.jsxDEV("span",{className:"text-sm text-text-primary truncate",children:Ve(i.path)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:98,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:96,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:95,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:ve(i.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:103,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(M,{date:i.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:107,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:106,columnNumber:13},this)]},i.path,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:88,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:68,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:60,columnNumber:5},this)}const je=[{label:"1 hour",value:3600},{label:"6 hours",value:21600},{label:"24 hours",value:86400},{label:"7 days",value:604800},{label:"30 days",value:2592e3}];function De({filePath:s,onClose:r,onDeleted:t}){var w,g;const{data:a,isLoading:l}=ue(s),i=de(),c=pe(),[v,f]=m.useState(!1),[N,P]=m.useState(!1),[x,d]=m.useState(!1),p=be(s),h=((w=a==null?void 0:a.content_type)==null?void 0:w.startsWith("image/"))||Fe(s),V=((g=a==null?void 0:a.content_type)==null?void 0:g.startsWith("text/"))||(a==null?void 0:a.content_type)==="application/json",u=(a==null?void 0:a.content_type)==="application/pdf";async function D(){try{const o=await i.mutateAsync({path:s,expiresIn:3600}),b=o.url.startsWith("http")?o.url:`${window.location.origin}${o.url}`;ge(b,F(s))}catch{}}async function y(o){f(!1);try{const b=await i.mutateAsync({path:s,expiresIn:o}),E=b.url.startsWith("http")?b.url:`${window.location.origin}${b.url}`;await navigator.clipboard.writeText(E),P(!0),setTimeout(()=>P(!1),2e3)}catch{}}return e.jsxDEV(e.Fragment,{children:e.jsxDEV("div",{className:"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto",children:[e.jsxDEV("div",{className:"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[e.jsxDEV("h3",{className:"text-sm font-medium text-text-primary truncate pr-2",title:F(s),children:F(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("button",{onClick:r,className:"text-text-tertiary hover:text-text-primary shrink-0",children:e.jsxDEV(ie,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:81,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:80,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:76,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-1 flex-wrap",children:[e.jsxDEV("button",{onClick:D,className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Download",children:[e.jsxDEV(re,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:92,columnNumber:15},this),e.jsxDEV("span",{children:"Download"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:93,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:87,columnNumber:13},this),e.jsxDEV("a",{href:p,target:"_blank",rel:"noopener noreferrer",className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Open in new tab",children:[e.jsxDEV(te,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:103,columnNumber:15},this),e.jsxDEV("span",{children:"Open"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:104,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:96,columnNumber:13},this),e.jsxDEV("div",{className:"relative",children:[e.jsxDEV("button",{onClick:()=>f(o=>!o),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Share with signed URL",children:[N?e.jsxDEV(U,{className:"w-3.5 h-3.5 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:113,columnNumber:27},this):e.jsxDEV(le,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:113,columnNumber:83},this),e.jsxDEV("span",{children:N?"Copied":"Share"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:114,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:108,columnNumber:15},this),v&&e.jsxDEV("div",{className:"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]",children:je.map(o=>e.jsxDEV("button",{onClick:()=>y(o.value),className:"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors",children:o.label},o.value,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:119,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:117,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:107,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>d(!0),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error",title:"Delete file",children:[e.jsxDEV(ne,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:136,columnNumber:15},this),e.jsxDEV("span",{children:"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:137,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:86,columnNumber:11},this),x&&e.jsxDEV("div",{className:"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md",children:[e.jsxDEV("p",{className:"text-xs text-text-primary mb-2",children:["Permanently delete ",e.jsxDEV("span",{className:"font-medium",children:F(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:145,columnNumber:36},this),"? This cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:144,columnNumber:15},this),e.jsxDEV("div",{className:"flex gap-2",children:[e.jsxDEV("button",{onClick:()=>d(!1),className:"btn-secondary text-xs",disabled:c.isPending,children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:148,columnNumber:17},this),e.jsxDEV("button",{onClick:async()=>{try{await c.mutateAsync(s),d(!1),t==null||t()}catch{}},className:"btn-primary text-xs !bg-status-error hover:!bg-status-error/90",disabled:c.isPending,children:c.isPending?"Deleting...":"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:155,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:147,columnNumber:15},this),c.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:c.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:172,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:143,columnNumber:13},this),i.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:i.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:178,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:75,columnNumber:9},this),e.jsxDEV("div",{className:"p-5",children:l?e.jsxDEV("div",{className:"animate-pulse space-y-3",children:[e.jsxDEV("div",{className:"h-48 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:186,columnNumber:15},this),e.jsxDEV("div",{className:"h-4 bg-surface-sunken rounded w-2/3"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:187,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:185,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[h&&e.jsxDEV("div",{className:"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden",style:{maxHeight:"400px"},children:e.jsxDEV("img",{src:p,alt:F(s),className:"w-full object-cover object-top",style:{maxHeight:"400px"}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:196,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:192,columnNumber:17},this),V&&e.jsxDEV("div",{className:"mb-5",children:e.jsxDEV(Ne,{url:p},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:207,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:206,columnNumber:17},this),u&&e.jsxDEV("div",{className:"mb-5 p-4 bg-surface-sunken rounded-md text-center",children:e.jsxDEV("a",{href:p,target:"_blank",rel:"noopener noreferrer",className:"text-accent hover:text-accent-hover text-sm font-medium",children:"Open PDF in new tab"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:213,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:212,columnNumber:17},this),a&&e.jsxDEV(xe,{metadata:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:225,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:183,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:73,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:69,columnNumber:5},this)}const ye=[25,50,100,200];function Re(){const[s,r]=me(),t=s.get("prefix")||"",[a,l]=m.useState(""),[i,c]=m.useState(""),[v,f]=m.useState(null),[N,P]=m.useState(100),[x,d]=m.useState([]),[p,h]=m.useState();m.useEffect(()=>{const n=setTimeout(()=>{c(a),h(void 0),d([])},300);return()=>clearTimeout(n)},[a]);const V=i?`${t}${i}`:t,{data:u,isLoading:D,isFetching:y,refetch:w}=ce(V,N,p),g=(u==null?void 0:u.directories)??[],o=(u==null?void 0:u.files)??[],b=u==null?void 0:u.nextToken,E=m.useCallback(n=>{l(""),c(""),f(null),h(void 0),d([]),r(n?{prefix:n}:{})},[r]);function R(){b&&(d(n=>[...n,p||""]),h(b))}function _(){if(x.length===0)return;const n=[...x],S=n.pop();d(n),h(S||void 0)}function I(n){P(n),h(void 0),d([])}const W=g.length===0&&o.length===0,z=x.length+1,k=!!b,C=x.length>0,O=`/file-browser/browse?prefix=${encodeURIComponent(V)}&pageSize=${N}${p?`&continuationToken=${encodeURIComponent(p)}`:""}`;return e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:"flex-1 min-w-0 overflow-hidden",children:[e.jsxDEV(q,{title:"Files"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:92,columnNumber:9},this),e.jsxDEV(fe,{prefix:t,onNavigate:E},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:94,columnNumber:9},this),e.jsxDEV(A,{actions:e.jsxDEV(H,{onRefresh:()=>w(),isFetching:y,apiPath:O},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:97,columnNumber:11},this),children:e.jsxDEV(G,{label:"Search",value:a,onChange:l,placeholder:"Filter by prefix..."},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:103,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:96,columnNumber:9},this),D?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((n,S)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},S,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:114,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:112,columnNumber:11},this):W?e.jsxDEV(K,{title:a?"No matching files":"This directory is empty"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:118,columnNumber:11},this):e.jsxDEV(Ee,{directories:g,files:o,onNavigate:E,onSelect:f,selectedFile:v},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:120,columnNumber:11},this),(C||k||o.length>0)&&e.jsxDEV("div",{className:"flex items-center justify-between pt-4 pb-2",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Page ",z," · ",o.length+g.length," items"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:133,columnNumber:15},this),e.jsxDEV("select",{value:N,onChange:n=>I(parseInt(n.target.value)),className:"select text-xs py-1",children:ye.map(n=>e.jsxDEV("option",{value:n,children:[n," / page"]},n,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:142,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:136,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:132,columnNumber:13},this),(C||k)&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("button",{onClick:_,disabled:!C,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:[e.jsxDEV(oe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:153,columnNumber:19},this),"Previous"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:148,columnNumber:17},this),e.jsxDEV("button",{onClick:R,disabled:!k,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:["Next",e.jsxDEV(B,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:162,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:147,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:131,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:91,columnNumber:7},this),v&&e.jsxDEV(De,{filePath:v,onClose:()=>f(null),onDeleted:()=>{f(null),w()}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:172,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:89,columnNumber:5},this)}export{Re as FilesPage};
2
- //# sourceMappingURL=index-BIeYV5QK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BIeYV5QK.js","sources":["../../src/api/files.ts","../../src/pages/files/FileBreadcrumbs.tsx","../../src/pages/files/FilePreviewContent.tsx","../../src/pages/files/FileListViews.tsx","../../src/pages/files/FilePreviewPanel.tsx","../../src/pages/files/FilesPage.tsx"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface FileEntry {\n path: string;\n size: number;\n modified_at: string;\n}\n\nexport interface BrowseResponse {\n files: FileEntry[];\n directories: string[];\n nextToken?: string;\n}\n\nexport interface FileMetadata {\n path: string;\n size: number;\n modified_at: string;\n content_type: string;\n}\n\nexport interface SignedUrlResponse {\n url: string;\n expiresAt: string;\n}\n\nexport function useFileBrowse(prefix: string, pageSize = 100, continuationToken?: string) {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n params.set('pageSize', String(pageSize));\n if (continuationToken) params.set('continuationToken', continuationToken);\n const qs = params.toString();\n\n return useQuery<BrowseResponse>({\n queryKey: ['fileBrowse', prefix, pageSize, continuationToken],\n queryFn: () => apiFetch(`/file-browser/browse?${qs}`),\n });\n}\n\nexport function useFileMetadata(filePath: string | null) {\n return useQuery<FileMetadata>({\n queryKey: ['fileMetadata', filePath],\n queryFn: () => apiFetch(`/file-browser/metadata/${filePath}`),\n enabled: !!filePath,\n });\n}\n\nexport function useGenerateSignedUrl() {\n return useMutation<SignedUrlResponse, Error, { path: string; expiresIn: number }>({\n mutationFn: (data) =>\n apiFetch('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteFile() {\n return useMutation<{ deleted: boolean; path: string }, Error, string>({\n mutationFn: (filePath) =>\n apiFetch(`/file-browser/delete/${filePath}`, { method: 'DELETE' }),\n });\n}\n\nexport function getFilePreviewUrl(filePath: string): string {\n return `/api/files/${filePath.replace(/^\\/+/, '')}`;\n}\n\nexport function getFileDownloadUrl(filePath: string): string {\n return `/api/file-browser/download/${filePath.replace(/^\\/+/, '')}`;\n}\n","import { ChevronRight, FolderOpen } from 'lucide-react';\n\ninterface FileBreadcrumbsProps {\n prefix: string;\n onNavigate: (prefix: string) => void;\n}\n\nexport function FileBreadcrumbs({ prefix, onNavigate }: FileBreadcrumbsProps) {\n const segments = prefix ? prefix.replace(/\\/+$/, '').split('/').filter(Boolean) : [];\n\n return (\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => onNavigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n segments.length === 0\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <FolderOpen className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>Files</span>\n </button>\n\n {segments.map((segment, i) => {\n const isLast = i === segments.length - 1;\n const targetPrefix = segments.slice(0, i + 1).join('/') + '/';\n return (\n <span key={targetPrefix} className=\"flex items-center gap-1\">\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => onNavigate(targetPrefix)}\n className={`px-1.5 py-0.5 rounded transition-colors ${\n isLast\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {segment}\n </button>\n </span>\n );\n })}\n </nav>\n );\n}\n","import { useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\n\ninterface FileMetadata {\n path: string;\n content_type: string;\n size: number;\n modified_at: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileName(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nexport function MetaRow({ label, value, mono, children }: {\n label: string;\n value?: string;\n mono?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">{label}</dt>\n <dd className={`text-sm text-text-secondary ${mono ? 'font-mono text-xs break-all' : ''}`}>\n {children || value}\n </dd>\n </div>\n );\n}\n\nexport function TextPreview({ url }: { url: string }) {\n const [content, setContent] = useState<string | null>(null);\n const [error, setError] = useState(false);\n\n if (content === null && !error) {\n fetch(url)\n .then((res) => {\n if (!res.ok) throw new Error();\n return res.text();\n })\n .then((text) => setContent(text.slice(0, 100_000)))\n .catch(() => setError(true));\n }\n\n if (error) return <p className=\"text-xs text-text-tertiary\">Could not load preview</p>;\n if (content === null) {\n return <div className=\"animate-pulse h-32 bg-surface-sunken rounded\" />;\n }\n\n return (\n <pre className=\"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words\">\n {content}\n </pre>\n );\n}\n\nexport function FileMetadataDisplay({ metadata }: {\n metadata: FileMetadata;\n}) {\n const [copied, setCopied] = useState<string | null>(null);\n\n async function copyToClipboard(text: string, label: string) {\n await navigator.clipboard.writeText(text);\n setCopied(label);\n setTimeout(() => setCopied(null), 2000);\n }\n\n return (\n <div className=\"space-y-3\">\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">Path</dt>\n <dd\n onClick={() => copyToClipboard(metadata.path, 'path')}\n className=\"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors\"\n title=\"Click to copy\"\n >\n <span className=\"flex-1\">{metadata.path}</span>\n {copied === 'path'\n ? <Check className=\"w-3.5 h-3.5 text-status-success shrink-0\" />\n : <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity\" />}\n </dd>\n </div>\n <MetaRow label=\"Type\" value={metadata.content_type} />\n <MetaRow label=\"Size\" value={formatSize(metadata.size)} />\n <MetaRow label=\"Modified\">\n <TimeAgo date={metadata.modified_at} />\n </MetaRow>\n </div>\n );\n}\n\nexport async function triggerDownload(url: string, name: string) {\n const res = await fetch(url);\n const blob = await res.blob();\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = name;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(blobUrl);\n}\n","import {\n Folder,\n File,\n Image,\n FileText,\n FileJson2,\n FileSpreadsheet,\n} from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { getFilePreviewUrl } from '../../api/files';\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileIcon(filePath: string) {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext)) {\n return <Image className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['json'].includes(ext)) {\n return <FileJson2 className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['csv', 'xlsx', 'xls'].includes(ext)) {\n return <FileSpreadsheet className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['txt', 'md', 'html', 'xml', 'yaml', 'yml', 'css', 'js', 'ts'].includes(ext)) {\n return <FileText className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n return <File className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n}\n\nexport function isImagePath(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n return ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext);\n}\n\nexport function dirName(dirPath: string): string {\n const stripped = dirPath.replace(/\\/+$/, '');\n return stripped.split('/').pop() || stripped;\n}\n\nexport function fileNameFromPath(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\ninterface ViewProps {\n directories: string[];\n files: Array<{ path: string; size: number; modified_at: string }>;\n onNavigate: (prefix: string) => void;\n onSelect: (path: string) => void;\n selectedFile: string | null;\n}\n\nexport function ListView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium\">Name</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Size</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {directories.map((dir) => (\n <tr\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n <Folder className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors\">\n {dirName(dir)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n </tr>\n ))}\n {files.map((file) => (\n <tr\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`row-hover cursor-pointer group ${\n selectedFile === file.path ? 'bg-surface-hover' : ''\n }`}\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n {fileIcon(file.path)}\n <span className=\"text-sm text-text-primary truncate\">\n {fileNameFromPath(file.path)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {formatSize(file.size)}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={file.modified_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport function GridView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <div className=\"mt-4\">\n {/* Directories as compact list */}\n {directories.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {directories.map((dir) => (\n <button\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors\"\n >\n <Folder className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>{dirName(dir)}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Files as thumbnail grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3\">\n {files.map((file) => {\n const isImg = isImagePath(file.path);\n return (\n <button\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`group text-left rounded-lg overflow-hidden transition-all ${\n selectedFile === file.path\n ? 'ring-2 ring-accent/40 bg-surface-hover'\n : 'hover:bg-surface-hover'\n }`}\n >\n <div className=\"aspect-square bg-surface-sunken flex items-center justify-center overflow-hidden\">\n {isImg ? (\n <img\n src={getFilePreviewUrl(file.path)}\n alt={fileNameFromPath(file.path)}\n loading=\"lazy\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-text-tertiary\">\n {fileIcon(file.path)}\n <span className=\"text-[10px] uppercase tracking-wider\">\n {file.path.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n </div>\n <div className=\"px-2 py-1.5\">\n <p className=\"text-xs text-text-primary truncate\" title={fileNameFromPath(file.path)}>\n {fileNameFromPath(file.path)}\n </p>\n <p className=\"text-[10px] text-text-tertiary tabular-nums\">\n {formatSize(file.size)}\n </p>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport {\n X,\n Download,\n ExternalLink,\n Link,\n Check,\n Trash2,\n} from 'lucide-react';\nimport { useFileMetadata, getFilePreviewUrl, useGenerateSignedUrl, useDeleteFile } from '../../api/files';\nimport { fileName, triggerDownload, TextPreview, FileMetadataDisplay } from './FilePreviewContent';\nimport { isImagePath } from './FileListViews';\n\ninterface FilePreviewPanelProps {\n filePath: string;\n onClose: () => void;\n onDeleted?: () => void;\n}\n\nconst EXPIRY_OPTIONS = [\n { label: '1 hour', value: 3600 },\n { label: '6 hours', value: 21600 },\n { label: '24 hours', value: 86400 },\n { label: '7 days', value: 604800 },\n { label: '30 days', value: 2592000 },\n];\n\nexport function FilePreviewPanel({ filePath, onClose, onDeleted }: FilePreviewPanelProps) {\n const { data: metadata, isLoading } = useFileMetadata(filePath);\n const signedUrlMutation = useGenerateSignedUrl();\n const deleteMutation = useDeleteFile();\n const [showShareMenu, setShowShareMenu] = useState(false);\n const [copied, setCopied] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState(false);\n\n const previewUrl = getFilePreviewUrl(filePath);\n const isImage = metadata?.content_type?.startsWith('image/') || isImagePath(filePath);\n const isText = metadata?.content_type?.startsWith('text/') || metadata?.content_type === 'application/json';\n const isPdf = metadata?.content_type === 'application/pdf';\n\n async function handleDownload() {\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn: 3600 });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n triggerDownload(fullUrl, fileName(filePath));\n } catch {\n // handled by mutation state\n }\n }\n\n async function handleShare(expiresIn: number) {\n setShowShareMenu(false);\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n await navigator.clipboard.writeText(fullUrl);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // handled by mutation state\n }\n }\n\n return (\n <>\n {/* Fullscreen — opens image in a new tab */}\n\n {/* Panel */}\n <div className=\"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto\">\n {/* Header */}\n <div className=\"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-medium text-text-primary truncate pr-2\" title={fileName(filePath)}>\n {fileName(filePath)}\n </h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary shrink-0\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-wrap\">\n <button\n onClick={handleDownload}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Download\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n <span>Download</span>\n </button>\n\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Open in new tab\"\n >\n <ExternalLink className=\"w-3.5 h-3.5\" />\n <span>Open</span>\n </a>\n\n <div className=\"relative\">\n <button\n onClick={() => setShowShareMenu((v) => !v)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Share with signed URL\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Link className=\"w-3.5 h-3.5\" />}\n <span>{copied ? 'Copied' : 'Share'}</span>\n </button>\n {showShareMenu && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]\">\n {EXPIRY_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n onClick={() => handleShare(opt.value)}\n className=\"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors\"\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error\"\n title=\"Delete file\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n <span>Delete</span>\n </button>\n </div>\n\n {/* Delete confirmation */}\n {confirmDelete && (\n <div className=\"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md\">\n <p className=\"text-xs text-text-primary mb-2\">\n Permanently delete <span className=\"font-medium\">{fileName(filePath)}</span>? This cannot be undone.\n </p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"btn-secondary text-xs\"\n disabled={deleteMutation.isPending}\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync(filePath);\n setConfirmDelete(false);\n onDeleted?.();\n } catch {\n // error shown below\n }\n }}\n className=\"btn-primary text-xs !bg-status-error hover:!bg-status-error/90\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n {deleteMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{deleteMutation.error.message}</p>\n )}\n </div>\n )}\n\n {signedUrlMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{signedUrlMutation.error.message}</p>\n )}\n </div>\n\n {/* Preview area */}\n <div className=\"p-5\">\n {isLoading ? (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-48 bg-surface-sunken rounded\" />\n <div className=\"h-4 bg-surface-sunken rounded w-2/3\" />\n </div>\n ) : (\n <>\n {isImage && (\n <div\n className=\"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden\"\n style={{ maxHeight: '400px' }}\n >\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"w-full object-cover object-top\"\n style={{ maxHeight: '400px' }}\n />\n </div>\n )}\n\n {isText && (\n <div className=\"mb-5\">\n <TextPreview url={previewUrl} />\n </div>\n )}\n\n {isPdf && (\n <div className=\"mb-5 p-4 bg-surface-sunken rounded-md text-center\">\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-accent hover:text-accent-hover text-sm font-medium\"\n >\n Open PDF in new tab\n </a>\n </div>\n )}\n\n {metadata && (\n <FileMetadataDisplay metadata={metadata} />\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n ChevronLeft,\n ChevronRight,\n} from 'lucide-react';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { useFileBrowse } from '../../api/files';\nimport { FileBreadcrumbs } from './FileBreadcrumbs';\nimport { FilePreviewPanel } from './FilePreviewPanel';\nimport { ListView } from './FileListViews';\n\nconst PAGE_SIZES = [25, 50, 100, 200];\n\nexport function FilesPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const prefix = searchParams.get('prefix') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [pageSize, setPageSize] = useState(100);\n const [tokenStack, setTokenStack] = useState<string[]>([]);\n const [currentToken, setCurrentToken] = useState<string | undefined>();\n\n // Debounce search — refines the prefix sent to S3\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setCurrentToken(undefined);\n setTokenStack([]);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const effectivePrefix = debouncedSearch\n ? `${prefix}${debouncedSearch}`\n : prefix;\n\n const { data, isLoading, isFetching, refetch } = useFileBrowse(effectivePrefix, pageSize, currentToken);\n\n const directories = data?.directories ?? [];\n const files = data?.files ?? [];\n const nextToken = data?.nextToken;\n\n const navigateTo = useCallback((newPrefix: string) => {\n setSearch('');\n setDebouncedSearch('');\n setSelectedFile(null);\n setCurrentToken(undefined);\n setTokenStack([]);\n if (newPrefix) {\n setSearchParams({ prefix: newPrefix });\n } else {\n setSearchParams({});\n }\n }, [setSearchParams]);\n\n function goNextPage() {\n if (!nextToken) return;\n setTokenStack((prev) => [...prev, currentToken || '']);\n setCurrentToken(nextToken);\n }\n\n function goPrevPage() {\n if (tokenStack.length === 0) return;\n const prev = [...tokenStack];\n const token = prev.pop()!;\n setTokenStack(prev);\n setCurrentToken(token || undefined);\n }\n\n function changePageSize(size: number) {\n setPageSize(size);\n setCurrentToken(undefined);\n setTokenStack([]);\n }\n\n const isEmpty = directories.length === 0 && files.length === 0;\n const pageNum = tokenStack.length + 1;\n const hasNextPage = !!nextToken;\n const hasPrevPage = tokenStack.length > 0;\n\n const apiPath = `/file-browser/browse?prefix=${encodeURIComponent(effectivePrefix)}&pageSize=${pageSize}${currentToken ? `&continuationToken=${encodeURIComponent(currentToken)}` : ''}`;\n\n return (\n <div className=\"flex gap-0\">\n {/* Main content */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n <PageHeader title=\"Files\" />\n\n <FileBreadcrumbs prefix={prefix} onNavigate={navigateTo} />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={apiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder=\"Filter by prefix...\"\n />\n </FilterBar>\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-2 mt-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-surface-sunken rounded\" />\n ))}\n </div>\n ) : isEmpty ? (\n <EmptyState title={search ? 'No matching files' : 'This directory is empty'} />\n ) : (\n <ListView\n directories={directories}\n files={files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n )}\n\n {/* Cursor-based pagination */}\n {(hasPrevPage || hasNextPage || files.length > 0) && (\n <div className=\"flex items-center justify-between pt-4 pb-2\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n Page {pageNum} &middot; {files.length + directories.length} items\n </p>\n <select\n value={pageSize}\n onChange={(e) => changePageSize(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZES.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n </div>\n {(hasPrevPage || hasNextPage) && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={goPrevPage}\n disabled={!hasPrevPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n Previous\n </button>\n <button\n onClick={goNextPage}\n disabled={!hasNextPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n Next\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <FilePreviewPanel\n filePath={selectedFile}\n onClose={() => setSelectedFile(null)}\n onDeleted={() => { setSelectedFile(null); refetch(); }}\n />\n )}\n </div>\n );\n}\n"],"names":["useFileBrowse","prefix","pageSize","continuationToken","params","qs","useQuery","apiFetch","useFileMetadata","filePath","useGenerateSignedUrl","useMutation","data","useDeleteFile","getFilePreviewUrl","FileBreadcrumbs","onNavigate","segments","jsxDEV","FolderOpen","segment","i","isLast","targetPrefix","ChevronRight","formatSize","bytes","fileName","MetaRow","label","value","mono","children","TextPreview","url","content","setContent","useState","error","setError","res","text","FileMetadataDisplay","metadata","copied","setCopied","copyToClipboard","Check","Copy","TimeAgo","triggerDownload","name","blob","blobUrl","a","fileIcon","ext","_a","Image","FileJson2","FileSpreadsheet","FileText","File","isImagePath","dirName","dirPath","stripped","fileNameFromPath","ListView","directories","files","onSelect","selectedFile","dir","Folder","file","EXPIRY_OPTIONS","FilePreviewPanel","onClose","onDeleted","isLoading","signedUrlMutation","deleteMutation","showShareMenu","setShowShareMenu","confirmDelete","setConfirmDelete","previewUrl","isImage","isText","_b","isPdf","handleDownload","result","fullUrl","handleShare","expiresIn","Fragment","X","Download","ExternalLink","v","Link","opt","Trash2","PAGE_SIZES","FilesPage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","setSelectedFile","setPageSize","tokenStack","setTokenStack","currentToken","setCurrentToken","useEffect","t","effectivePrefix","isFetching","refetch","nextToken","navigateTo","useCallback","newPrefix","goNextPage","prev","goPrevPage","token","changePageSize","size","isEmpty","pageNum","hasNextPage","hasPrevPage","apiPath","PageHeader","FilterBar","ListToolbar","FilterInput","_","EmptyState","e","ChevronLeft"],"mappings":"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"}