@hotmeshio/long-tail 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/dist/assets/AdminDashboard-45Ya2uzl.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-DThDjhN5.js.map → AdminDashboard-45Ya2uzl.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js +13 -0
- package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js.map +1 -0
- package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage--I4d5y9J.js +2 -0
- package/dashboard/dist/assets/{AgentsPage-pKfjHe4u.js.map → AgentsPage--I4d5y9J.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-DgbzCesR.js +2 -0
- package/dashboard/dist/assets/{BotPicker-Zxf7Npew.js.map → BotPicker-DgbzCesR.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-B2S8_Gsc.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-6zOJ12cB.js.map → CapabilitiesPage-B2S8_Gsc.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-4Eo3b5ha.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-DvBx4tmw.js.map → CollapsibleSection-4Eo3b5ha.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-Bac7RmDD.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-Bac7RmDD.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-BhwdwAJN.js +2 -0
- package/dashboard/dist/assets/{CopyableId-DmLF-RqZ.js.map → CopyableId-BhwdwAJN.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-CSEBaYx1.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-C5f-Bg-o.js.map → CredentialsPage-CSEBaYx1.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-DV2v2FlP.js +2 -0
- package/dashboard/dist/assets/{CronLabel-CAVTt5AG.js.map → CronLabel-DV2v2FlP.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-B_Oxq_nK.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-Bk7D38y7.js.map → CustomDurationPicker-B_Oxq_nK.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-etck0Zmp.js +2 -0
- package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-etck0Zmp.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-BDpzHWsI.js +2 -0
- package/dashboard/dist/assets/{DropZone-2mGyDo1P.js.map → DropZone-BDpzHWsI.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-D35Z-HSJ.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BpJjG1s-.js.map → ElapsedCell-D35Z-HSJ.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-Bk3_P-b8.js +2 -0
- package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-Bk3_P-b8.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-Bt6gGFW4.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-DPNd1vjF.js.map → EscalationsOverview-Bt6gGFW4.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-BMk93q8A.js +2 -0
- package/dashboard/dist/assets/{EventTable-BoP8KC3M.js.map → EventTable-BMk93q8A.js.map} +1 -1
- package/dashboard/dist/assets/EventTopicPill-9LcMnLF0.js +2 -0
- package/dashboard/dist/assets/{EventTopicPill-BUxxvpNg.js.map → EventTopicPill-9LcMnLF0.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-CZGTOMoo.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CZGTOMoo.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-Dtk7mgmf.js +2 -0
- package/dashboard/dist/assets/{HomePage-h8I5ZolJ.js.map → HomePage-Dtk7mgmf.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-CJEzypCM.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-BaYIIsAt.js.map → ListToolbar-CJEzypCM.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-ChUa4l3t.js +2 -0
- package/dashboard/dist/assets/{McpOverview-BhZ3lSO6.js.map → McpOverview-ChUa4l3t.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-04CTIN0v.js +5 -0
- package/dashboard/dist/assets/{McpQueryDetailPage-DVgcKa61.js.map → McpQueryDetailPage-04CTIN0v.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-DFnHFdbr.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-CTWOBqKT.js.map → McpQueryPage-DFnHFdbr.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-B95c3bFw.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-CIpZJWRB.js.map → McpRunDetailPage-B95c3bFw.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-DS43YmLU.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-B3zpzPBf.js.map → McpRunsPage-DS43YmLU.js.map} +1 -1
- package/dashboard/dist/assets/Modal-EUrK2c_A.js +2 -0
- package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-EUrK2c_A.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-DBF_AbRH.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-l2hVlIF3.js.map → OperatorDashboard-DBF_AbRH.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-BuUnJ5NY.js +2 -0
- package/dashboard/dist/assets/{PageHeader-DLjHNYHX.js.map → PageHeader-BuUnJ5NY.js.map} +1 -1
- package/dashboard/dist/assets/PageHeaderWithStats-cQKaJBAM.js +2 -0
- package/dashboard/dist/assets/{PageHeaderWithStats-Oljg3n4j.js.map → PageHeaderWithStats-cQKaJBAM.js.map} +1 -1
- package/dashboard/dist/assets/PriorityBadge-Bl0_pgex.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-Bl0_pgex.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-DgeXrHon.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-BJ1rhK9_.js.map → ProcessDetailPage-DgeXrHon.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-BGiiH4dW.js +2 -0
- package/dashboard/dist/assets/{ProcessesListPage-IQKk_qkn.js.map → ProcessesListPage-BGiiH4dW.js.map} +1 -1
- package/dashboard/dist/assets/RolePill-DsYF2JN9.js +2 -0
- package/dashboard/dist/assets/{RolePill-Bp10-WfX.js.map → RolePill-DsYF2JN9.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-CQ7vPamb.js +2 -0
- package/dashboard/dist/assets/{RolesPage-Dwcirtze.js.map → RolesPage-CQ7vPamb.js.map} +1 -1
- package/dashboard/dist/assets/RowActions-DBpvm3Jy.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-DBpvm3Jy.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-ZLKGTYP_.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-D4Fu8LVG.js.map → RunAsSelector-ZLKGTYP_.js.map} +1 -1
- package/dashboard/dist/assets/ServerName-B5-E7gZD.js +2 -0
- package/dashboard/dist/assets/{ServerName-C9lUCFYb.js.map → ServerName-B5-E7gZD.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-B7ySTryP.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-B7ySTryP.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-DNXTk01O.js +2 -0
- package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-DNXTk01O.js.map} +1 -1
- package/dashboard/dist/assets/StepIndicator-ftNmaJsu.js +2 -0
- package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-ftNmaJsu.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-CI5AyVVd.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CI5AyVVd.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-BA4aFrHf.js +2 -0
- package/dashboard/dist/assets/{SwimlaneTimeline-DQqgvwmC.js.map → SwimlaneTimeline-BA4aFrHf.js.map} +1 -1
- package/dashboard/dist/assets/TagInput-DfbVwc27.js +2 -0
- package/dashboard/dist/assets/{TagInput-Dkljw_WI.js.map → TagInput-DfbVwc27.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-A_kHjYRn.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-A_kHjYRn.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-Dtsa8CPO.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-DPwm25Cc.js.map → TaskQueuePill-Dtsa8CPO.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-Cw46VTuA.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-CnJdTsoX.js.map → TasksListPage-Cw46VTuA.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-Cx1kK1id.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-C3A1r1Cv.js.map → TimeAgo-Cx1kK1id.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-VDp4nVn6.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-DPfLR6bZ.js.map → TimestampCell-VDp4nVn6.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-BNaTJhu8.js +2 -0
- package/dashboard/dist/assets/{ToolPill-D_DIWFJ5.js.map → ToolPill-BNaTJhu8.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-BickLBjP.js +2 -0
- package/dashboard/dist/assets/{ToolTestPanel-CwZ9zkD-.js.map → ToolTestPanel-BickLBjP.js.map} +1 -1
- package/dashboard/dist/assets/UserName-DCdb6xnk.js +2 -0
- package/dashboard/dist/assets/{UserName-ClO0a6Ar.js.map → UserName-DCdb6xnk.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BZfxY1iB.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-B-2aHAHK.js.map → WorkflowExecutionPage-BZfxY1iB.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-BzhfqGa-.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-BbgVTGgI.js.map → WorkflowPill-BzhfqGa-.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-B7M8kPoH.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-NtiQKl_i.js.map → WorkflowsDashboard-B7M8kPoH.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsOverview-1V8vQ-mo.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-BQip_pvL.js.map → WorkflowsOverview-1V8vQ-mo.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js.map +1 -0
- package/dashboard/dist/assets/{agents-5APoyRH8.js → agents-SXs4tMLb.js} +2 -2
- package/dashboard/dist/assets/{agents-5APoyRH8.js.map → agents-SXs4tMLb.js.map} +1 -1
- package/dashboard/dist/assets/{bots-BoDH-pS7.js → bots-Ci5aCzDK.js} +2 -2
- package/dashboard/dist/assets/{bots-BoDH-pS7.js.map → bots-Ci5aCzDK.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-D4NhQux3.js → controlplane-BiPTCZeL.js} +2 -2
- package/dashboard/dist/assets/{controlplane-D4NhQux3.js.map → controlplane-BiPTCZeL.js.map} +1 -1
- package/dashboard/dist/assets/escalation-D-zr9D9G.js +2 -0
- package/dashboard/dist/assets/{escalation-BD2wtAt2.js.map → escalation-D-zr9D9G.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-Bpp7Sdbd.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-DjHcNgjo.js.map → escalation-columns-Bpp7Sdbd.js.map} +1 -1
- package/dashboard/dist/assets/helpers-CQZkvg6D.js +2 -0
- package/dashboard/dist/assets/{helpers-D1ZPA4kI.js.map → helpers-CQZkvg6D.js.map} +1 -1
- package/dashboard/dist/assets/index-Bp5f2OWJ.js +2 -0
- package/dashboard/dist/assets/{index-D9qswqDQ.js.map → index-Bp5f2OWJ.js.map} +1 -1
- package/dashboard/dist/assets/index-C7FUIcaY.js +2 -0
- package/dashboard/dist/assets/{index-_5qNyf9o.js.map → index-C7FUIcaY.js.map} +1 -1
- package/dashboard/dist/assets/index-COiEQlp9.js +2 -0
- package/dashboard/dist/assets/{index-jp94-YlF.js.map → index-COiEQlp9.js.map} +1 -1
- package/dashboard/dist/assets/index-CSsOukxa.js +2 -0
- package/dashboard/dist/assets/{index-_dKxJhey.js.map → index-CSsOukxa.js.map} +1 -1
- package/dashboard/dist/assets/index-DOE7HCzb.js +6 -0
- package/dashboard/dist/assets/{index-B6vQeWwf.js.map → index-DOE7HCzb.js.map} +1 -1
- package/dashboard/dist/assets/index-DV0_tQW3.js +2 -0
- package/dashboard/dist/assets/{index-Zn5XforP.js.map → index-DV0_tQW3.js.map} +1 -1
- package/dashboard/dist/assets/index-Da8R5Fn_.js +281 -0
- package/dashboard/dist/assets/index-Da8R5Fn_.js.map +1 -0
- package/dashboard/dist/assets/index-DtbAmRkr.js +15 -0
- package/dashboard/dist/assets/{index-qdYsS9h2.js.map → index-DtbAmRkr.js.map} +1 -1
- package/dashboard/dist/assets/index-DzL5pT70.js +5 -0
- package/dashboard/dist/assets/index-DzL5pT70.js.map +1 -0
- package/dashboard/dist/assets/index-OTsFiHXP.js +2 -0
- package/dashboard/dist/assets/index-OTsFiHXP.js.map +1 -0
- package/dashboard/dist/assets/index-hfravTJF.js +2 -0
- package/dashboard/dist/assets/{index-BgJR7kwH.js.map → index-hfravTJF.js.map} +1 -1
- package/dashboard/dist/assets/index-q4T_i7zT.js +2 -0
- package/dashboard/dist/assets/{index-DC7f6rWu.js.map → index-q4T_i7zT.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DsAU_TGL.js → knowledge-D8osen1O.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DsAU_TGL.js.map → knowledge-D8osen1O.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CA3OeIyH.js → mcp-CUFhWTyT.js} +2 -2
- package/dashboard/dist/assets/{mcp-CA3OeIyH.js.map → mcp-CUFhWTyT.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BgmTDc7h.js → mcp-query-n1t4sNm7.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BgmTDc7h.js.map → mcp-query-n1t4sNm7.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-C-FK2SyD.js → mcp-runs-BkRnXbcq.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-C-FK2SyD.js.map → mcp-runs-BkRnXbcq.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-CacF05ft.js +2 -0
- package/dashboard/dist/assets/{namespaces-B8KNk0Jb.js.map → namespaces-CacF05ft.js.map} +1 -1
- package/dashboard/dist/assets/{roles-BAPy1LU_.js → roles-CjLCgM_6.js} +2 -2
- package/dashboard/dist/assets/{roles-BAPy1LU_.js.map → roles-CjLCgM_6.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BHlTusW0.js → tasks-BLCzIHol.js} +2 -2
- package/dashboard/dist/assets/{tasks-BHlTusW0.js.map → tasks-BLCzIHol.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-DBMdj9vw.js → useEventHooks-AwwZnweF.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-DBMdj9vw.js.map → useEventHooks-AwwZnweF.js.map} +1 -1
- package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
- package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BH_ynR_L.js → useYamlActivityEvents-9Zs0PXY6.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BH_ynR_L.js.map → useYamlActivityEvents-9Zs0PXY6.js.map} +1 -1
- package/dashboard/dist/assets/{users-C9K2cMyb.js → users-BtLRzvZE.js} +2 -2
- package/dashboard/dist/assets/{users-C9K2cMyb.js.map → users-BtLRzvZE.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-E6836lXZ.js → vendor-icons-1qQ3NKfa.js} +2 -2
- package/dashboard/dist/assets/{vendor-icons-E6836lXZ.js.map → vendor-icons-1qQ3NKfa.js.map} +1 -1
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
- package/dashboard/dist/assets/{workflows-B2rsLjoh.js → workflows-B9xdIsfM.js} +2 -2
- package/dashboard/dist/assets/{workflows-B2rsLjoh.js.map → workflows-B9xdIsfM.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-BLiTvQM2.js → yaml-workflows-xOJxyEsQ.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-BLiTvQM2.js.map → yaml-workflows-xOJxyEsQ.js.map} +1 -1
- package/dashboard/dist/index.html +4 -4
- package/package.json +2 -2
- package/dashboard/dist/assets/AdminDashboard-DThDjhN5.js +0 -2
- package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js +0 -13
- package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js.map +0 -1
- package/dashboard/dist/assets/AgentsPage-pKfjHe4u.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BFzHVnPh.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BFzHVnPh.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-Zxf7Npew.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-6zOJ12cB.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-DvBx4tmw.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-C5f-Bg-o.js +0 -2
- package/dashboard/dist/assets/CronLabel-CAVTt5AG.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-Bk7D38y7.js +0 -2
- package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
- package/dashboard/dist/assets/DropZone-2mGyDo1P.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-BpJjG1s-.js +0 -2
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-DPNd1vjF.js +0 -2
- package/dashboard/dist/assets/EventTable-BoP8KC3M.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +0 -2
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/HomePage-h8I5ZolJ.js +0 -2
- package/dashboard/dist/assets/ListToolbar-BaYIIsAt.js +0 -2
- package/dashboard/dist/assets/McpOverview-BhZ3lSO6.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-DVgcKa61.js +0 -5
- package/dashboard/dist/assets/McpQueryPage-CTWOBqKT.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CIpZJWRB.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-B3zpzPBf.js +0 -2
- package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-l2hVlIF3.js +0 -2
- package/dashboard/dist/assets/PageHeader-DLjHNYHX.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-Oljg3n4j.js +0 -2
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-BJ1rhK9_.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-IQKk_qkn.js +0 -2
- package/dashboard/dist/assets/RolePill-Bp10-WfX.js +0 -2
- package/dashboard/dist/assets/RolesPage-Dwcirtze.js +0 -2
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-D4Fu8LVG.js +0 -2
- package/dashboard/dist/assets/ServerName-C9lUCFYb.js +0 -2
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
- package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-DQqgvwmC.js +0 -2
- package/dashboard/dist/assets/TagInput-Dkljw_WI.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-AHBMSHAA.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-AHBMSHAA.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-DPwm25Cc.js +0 -2
- package/dashboard/dist/assets/TasksListPage-CnJdTsoX.js +0 -2
- package/dashboard/dist/assets/TimeAgo-C3A1r1Cv.js +0 -2
- package/dashboard/dist/assets/TimestampCell-DPfLR6bZ.js +0 -2
- package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-CwZ9zkD-.js +0 -2
- package/dashboard/dist/assets/UserName-ClO0a6Ar.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-B-2aHAHK.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-NtiQKl_i.js +0 -2
- package/dashboard/dist/assets/WorkflowsOverview-BQip_pvL.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js.map +0 -1
- package/dashboard/dist/assets/escalation-BD2wtAt2.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DjHcNgjo.js +0 -2
- package/dashboard/dist/assets/helpers-D1ZPA4kI.js +0 -2
- package/dashboard/dist/assets/index-B-Z9TisY.js +0 -2
- package/dashboard/dist/assets/index-B-Z9TisY.js.map +0 -1
- package/dashboard/dist/assets/index-B6vQeWwf.js +0 -6
- package/dashboard/dist/assets/index-BD2vW8MG.js +0 -5
- package/dashboard/dist/assets/index-BD2vW8MG.js.map +0 -1
- package/dashboard/dist/assets/index-BgJR7kwH.js +0 -2
- package/dashboard/dist/assets/index-D9qswqDQ.js +0 -2
- package/dashboard/dist/assets/index-DC7f6rWu.js +0 -2
- package/dashboard/dist/assets/index-Zn5XforP.js +0 -2
- package/dashboard/dist/assets/index-_5qNyf9o.js +0 -2
- package/dashboard/dist/assets/index-_dKxJhey.js +0 -2
- package/dashboard/dist/assets/index-jp94-YlF.js +0 -2
- package/dashboard/dist/assets/index-oGYUhkFa.js +0 -63
- package/dashboard/dist/assets/index-oGYUhkFa.js.map +0 -1
- package/dashboard/dist/assets/index-qdYsS9h2.js +0 -15
- package/dashboard/dist/assets/namespaces-B8KNk0Jb.js +0 -2
- package/dashboard/dist/assets/settings-Da0QSQDH.js +0 -2
- package/dashboard/dist/assets/settings-Da0QSQDH.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{j as e,S as M,l as q}from"./index-Da8R5Fn_.js";import{a as i}from"./vendor-query-DLp59M9_.js";import{c as H,d as K,b as U,u as G,e as Q,f as X}from"./workflows-B9xdIsfM.js";import{P as Y}from"./PageHeader-BuUnJ5NY.js";import{P as B,a1 as F,a as T,a5 as Z,a6 as ee}from"./vendor-icons-1qQ3NKfa.js";import{W as se}from"./WorkflowPill-BzhfqGa-.js";import{B as ae}from"./BotPicker-DgbzCesR.js";import{L as te,c as z,f as re}from"./vendor-react-Co3Y8ikm.js";import{D as oe}from"./DataTable-etck0Zmp.js";import{e as le,d as L,C as ne,j as ie}from"./helpers-CQZkvg6D.js";import"./bots-Ci5aCzDK.js";import"./EmptyState-Bk3_P-b8.js";import"./TimeAgo-Cx1kK1id.js";import"./StatusBadge-DNXTk01O.js";function ce({mode:s,onChange:t}){const N=(o,r,l)=>e.jsxDEV("button",{onClick:()=>t(o),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${s===o?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[r,l]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[N("now",e.jsxDEV(B,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:22,columnNumber:19},this),"Start Now"),N("schedule",e.jsxDEV(F,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:23,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:21,columnNumber:5},this)}function me({configs:s,selectedType:t,onSelect:N,tierMap:o,activeTypes:r}){return e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-4",children:"Select Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{children:s.map(l=>{const p=t===l.workflow_type,c=o.get(l.workflow_type)??"durable",m=c==="certified"?"certified":c==="configured"?"configured":"durable";return e.jsxDEV("button",{onClick:()=>N(l),className:`w-full text-left px-6 py-3.5 border-b border-surface-border/50 transition-colors duration-150 ${p?"border-l-2 border-l-accent":"hover:bg-surface-hover/30"}`,children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(se,{type:l.workflow_type,size:"md",variant:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:39,columnNumber:17},this),(r==null?void 0:r.has(l.workflow_type))&&e.jsxDEV("span",{title:"Cron schedule active",children:e.jsxDEV(F,{className:"w-3 h-3 text-status-success/70 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:54},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:19},this),l.execute_as&&e.jsxDEV("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded",children:[e.jsxDEV(T,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:45,columnNumber:21},this),l.execute_as]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:44,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:38,columnNumber:15},this),l.description&&e.jsxDEV("p",{className:"text-[10px] text-text-quaternary mt-1 leading-snug",children:l.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:51,columnNumber:17},this)]},l.workflow_type,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:29,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:23,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:21,columnNumber:5},this)}const O=`{
|
|
2
|
+
"data": {},
|
|
3
|
+
"metadata": {}
|
|
4
|
+
}`;function de(s){return typeof s=="boolean"?"boolean":typeof s=="number"?"number":Array.isArray(s)?"array":s!==null&&typeof s=="object"?"object":"string"}function $(s){if(!s)return[];const t=s.data;return!t||typeof t!="object"?[]:Object.entries(t).map(([N,o])=>({key:N,type:de(o),defaultValue:o}))}function J(s){return{...s}}function A(s,t){return JSON.stringify({data:s,metadata:t},null,2)}function ue({config:s,overrideBot:t,onOverrideChange:N,showOverride:o}){const{user:r}=q(),l=t||s.execute_as;return e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-2",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:23,columnNumber:9},this),l&&!t&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"configured default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:25,columnNumber:11},this),t&&e.jsxDEV("span",{className:"text-[9px] text-accent",children:"admin override"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:28,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:l?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:34,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:35,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:33,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Z,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.username)||"you"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:40,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:31,columnNumber:7},this),o&&N&&e.jsxDEV("div",{className:"pt-1 border-t border-surface-border",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary mb-1 block",children:"Override identity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV(ae,{selected:t??"",onChange:N,placeholder:s.execute_as?`Default: ${s.execute_as}`:"Invoking user (default)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:21,columnNumber:5},this)}function pe({selectedConfig:s,isJsonMode:t,hasFormView:N,jsonInput:o,formFields:r,dataFields:l,onJsonChange:p,onToggleMode:c,onUpdateFormField:m,onSetFormFields:w}){return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV("label",{className:"block text-xs text-text-secondary",children:"Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[N&&e.jsxDEV("button",{type:"button",onClick:c,className:"text-[10px] text-accent hover:underline",children:t?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:41,columnNumber:13},this),s.envelope_schema?e.jsxDEV("span",{className:"text-[10px] text-accent",children:"Pre-filled from workflow config"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:50,columnNumber:13},this):e.jsxDEV("span",{className:"text-[10px] text-status-warning",children:"No template"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:39,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:35,columnNumber:7},this),!s.envelope_schema&&e.jsxDEV("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or register it as a ",e.jsxDEV(te,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"certified workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:64,columnNumber:100},this)," in the Workflow Registry for pre-filled fields and form-based input."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:62,columnNumber:9},this),t||!N?e.jsxDEV("textarea",{value:o,onChange:d=>p(d.target.value),className:"input-json",rows:12,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:71,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-3",children:l.map(({key:d,type:n})=>{var v,k;const f=r[d],b=typeof f=="string"?f:JSON.stringify(f??(n==="array"?[]:{}),null,2),g=Math.min(20,Math.max(4,((k=(v=b==null?void 0:b.split)==null?void 0:v.call(b,`
|
|
5
|
+
`))==null?void 0:k.length)??4));return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[d,e.jsxDEV("span",{className:"ml-2 font-normal normal-case",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:99,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:97,columnNumber:17},this),n==="boolean"?e.jsxDEV("select",{value:String(f??!1),onChange:x=>m(d,x.target.value,n),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:111,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:112,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:104,columnNumber:19},this):n==="object"||n==="array"?e.jsxDEV("textarea",{value:b,onChange:x=>{try{m(d,JSON.parse(x.target.value),n)}catch{w({...r,[d]:x.target.value})}},className:"input-json w-full",rows:g,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:115,columnNumber:19},this):e.jsxDEV("input",{type:n==="number"?"number":"text",value:String(f??""),onChange:x=>m(d,x.target.value,n),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:137,columnNumber:19},this)]},d,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:96,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",e.jsxDEV("code",{className:"text-accent/80",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:49},this)," holds workflow-specific fields; ",e.jsxDEV("code",{className:"text-accent/80",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:126},this)," is optional context."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:151,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:34,columnNumber:5},this)}function fe({selected:s,executionsPath:t}){var E,R;const N=z(),{isSuperAdmin:o,hasRoleType:r}=q(),l=o||r("admin"),p=H(),[c,m]=i.useState(O),[w,d]=i.useState(""),[n,f]=i.useState({}),[b,g]=i.useState(!1),[v,k]=i.useState(""),x=(((E=s.roles)==null?void 0:E.length)??0)>0||(((R=s.consumes)==null?void 0:R.length)??0)>0,[V,P]=i.useState(x),C=i.useMemo(()=>$(s.envelope_schema??null),[s.envelope_schema]),W=C.length>0,a=i.useMemo(()=>{if(!s.envelope_schema)return{};const u=s.envelope_schema.metadata;return u&&typeof u=="object"?u:{}},[s.envelope_schema]);i.useEffect(()=>{var _;d(""),p.reset();const u=sessionStorage.getItem("lt:invoke:prefill");if(u){sessionStorage.removeItem("lt:invoke:prefill"),m(u);try{const j=JSON.parse(u),I=(j==null?void 0:j.data)??j;I&&typeof I=="object"&&f(J(I))}catch{}g(!0),k("");return}const y=s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O;m(y),(_=s.envelope_schema)!=null&&_.data&&typeof s.envelope_schema.data=="object"?f(J(s.envelope_schema.data)):f({}),g(!$(s.envelope_schema??null).length),k(""),P(x)},[s.workflow_type]);const h=()=>{if(b)try{const u=JSON.parse(c);u.data&&typeof u.data=="object"&&f(J(u.data))}catch{}else m(A(n,a));g(!b)},S=(u,y,_)=>{let j=y;_==="number"?j=y===""?0:Number(y):_==="boolean"&&(j=y==="true"||y===!0);const I={...n,[u]:j};f(I),m(A(I,a))},D=async()=>{d("");let u;try{u=JSON.parse(c)}catch{d("Invalid JSON");return}const{data:y,metadata:_}=u;if(!y||typeof y!="object"){d('Envelope must include a "data" object');return}try{const j={..._??{}};V&&(j.certified=!0),await p.mutateAsync({workflowType:s.workflow_type,data:y,metadata:j,...v?{execute_as:v}:{}}),N(t)}catch{}};return e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:124,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:126,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV(ue,{config:s,overrideBot:v,onOverrideChange:k,showOverride:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:132,columnNumber:7},this),x&&e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:V,onChange:u=>P(u.target.checked),className:"rounded border-surface-border text-accent focus:ring-accent/30"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:141,columnNumber:11},this),e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:147,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-secondary",children:"Enable task tracking and escalation routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:140,columnNumber:9},this),e.jsxDEV(pe,{selectedConfig:s,isJsonMode:b,hasFormView:W,jsonInput:c,formFields:n,dataFields:C,onJsonChange:u=>{m(u),d("")},onToggleMode:h,onUpdateFormField:S,onSetFormFields:f},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:152,columnNumber:7},this),w&&e.jsxDEV("p",{className:"text-xs text-status-error",children:w},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:165,columnNumber:22},this),p.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:p.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:166,columnNumber:32},this),p.isSuccess&&e.jsxDEV("p",{className:"text-xs text-status-success",children:"Workflow started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:167,columnNumber:36},this),e.jsxDEV("button",{onClick:D,disabled:p.isPending,className:"btn-primary",children:p.isPending?"Starting...":"Start Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:169,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:122,columnNumber:5},this)}function he({children:s,className:t=""}){return e.jsxDEV("span",{className:`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${t}`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/Pill.tsx",lineNumber:10,columnNumber:5},this)}function Ne({selected:s,activeTypes:t}){const N=z(),o=K(),[r,l]=i.useState(""),[p,c]=i.useState(""),[m,w]=i.useState(""),[d,n]=i.useState("json"),f=i.useMemo(()=>s!=null&&s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O,[s==null?void 0:s.envelope_schema]),b=p!==f,g=i.useMemo(()=>{try{return JSON.parse(p)}catch{return null}},[p]),v=i.useMemo(()=>g?le(g):null,[g]);i.useEffect(()=>{l(s.cron_schedule??""),c(s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O),w(""),n("json"),o.reset()},[s.workflow_type]);const{data:k,isLoading:x}=U({entity:s.workflow_type,limit:10}),V=()=>{let a;try{a=JSON.parse(p)}catch{w("Invalid JSON in envelope");return}w(""),o.mutate({config:s,cron_schedule:r.trim()||null,envelope_schema:a})},P=()=>{l(""),o.mutate({config:s,cron_schedule:null})},C=()=>{c(f),w("")},W=(a,h)=>{if(!g)return;const S={...g.data??{}},D=S[a];typeof D=="number"?S[a]=h===""?0:Number(h):typeof D=="boolean"?S[a]=h==="true":S[a]=h,c(JSON.stringify({...g,data:S},null,2))};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:105,columnNumber:11},this),s.cron_schedule&&e.jsxDEV(he,{className:t.has(s.workflow_type)?"bg-status-success/10 text-status-success":"bg-surface-sunken text-text-tertiary",children:t.has(s.workflow_type)?"active":"inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:107,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:104,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:103,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3",children:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2",children:"Cron runs as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:s.execute_as??"lt-system"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:127,columnNumber:11},this),!s.execute_as&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary ml-1",children:"system bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:124,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:138,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:r,onChange:a=>{l(a.target.value),o.reset()},placeholder:"0 */6 * * *",className:"input font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:141,columnNumber:13},this),r.trim()&&L(r.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:L(r.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:149,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("button",{onClick:V,disabled:o.isPending,className:"btn-primary text-xs shrink-0",children:o.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:154,columnNumber:11},this),s.cron_schedule&&e.jsxDEV("button",{onClick:P,disabled:o.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:158,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:139,columnNumber:9},this),o.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:163,columnNumber:31},this),o.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:o.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:164,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:137,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(M,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:ne.map(([a,h])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(a),o.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:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:178,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:h},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:179,columnNumber:15},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:172,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:170,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV(M,{children:"Cron Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:188,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[b&&e.jsxDEV("button",{type:"button",onClick:C,className:"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors",children:"Reset to default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:191,columnNumber:15},this),v&&e.jsxDEV("div",{className:"flex rounded overflow-hidden border border-surface-border",children:[e.jsxDEV("button",{type:"button",onClick:()=>n("form"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="form"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:197,columnNumber:17},this),e.jsxDEV("button",{type:"button",onClick:()=>n("json"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="json"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:198,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:187,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mb-3",children:"This envelope is sent as the workflow input on each cron invocation."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:203,columnNumber:9},this),d==="form"&&v?e.jsxDEV("div",{className:"space-y-3",children:v.map(({key:a,value:h,type:S})=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[11px] text-text-secondary mb-1 font-mono",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:211,columnNumber:17},this),S==="boolean"?e.jsxDEV("select",{value:h,onChange:D=>W(a,D.target.value),className:"input text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:214,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:215,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:213,columnNumber:19},this):e.jsxDEV("input",{type:S==="number"?"number":"text",value:h,onChange:D=>W(a,D.target.value),className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:218,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:208,columnNumber:11},this):e.jsxDEV("textarea",{value:p,onChange:a=>{c(a.target.value),w("")},className:"input-json w-full",rows:10,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:224,columnNumber:11},this),m&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:233,columnNumber:27},this),b&&e.jsxDEV("p",{className:"text-[10px] text-accent mt-1.5",children:"Envelope has been customized. Changes will be saved with the schedule."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:234,columnNumber:32},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:186,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Recent Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:239,columnNumber:9},this),e.jsxDEV(oe,{columns:ie,data:(k==null?void 0:k.jobs)??[],keyFn:a=>a.workflow_id,onRowClick:a=>N(`/workflows/executions/${a.workflow_id}`),isLoading:x,emptyMessage:"No executions yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:240,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:238,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:101,columnNumber:5},this)}function be(){const[s,t]=re(),{data:N,isLoading:o}=G(),{data:r,isLoading:l}=Q(),{data:p}=X(),c=s.get("mode")||"now",m=s.get("type")??"",w=N??[],d=i.useMemo(()=>{const a=new Map;for(const h of r??[])a.set(h.workflow_type,h.tier??"durable");return a},[r]),n=i.useMemo(()=>{const a=w.filter(E=>E.invocable),h=new Set(w.map(E=>E.workflow_type)),D=(r??[]).filter(E=>E.active&&!h.has(E.workflow_type)).map(E=>({workflow_type:E.workflow_type,task_queue:E.task_queue??"",invocable:!0,description:null,default_role:"reviewer",roles:[],invocation_roles:[],consumes:[],envelope_schema:null,resolver_schema:null,cron_schedule:null,execute_as:null}));return[...a,...D]},[w,r]),f=n.find(a=>a.workflow_type===m),b=new Set((p??[]).filter(a=>a.active).map(a=>a.workflow_type)),g="/workflows/executions",v=i.useRef(null),[k,x]=i.useState(!0),V=`${m}:${c}`,P=i.useRef(V);i.useEffect(()=>{if(P.current!==V){x(!1);const a=setTimeout(()=>{P.current=V,x(!0)},120);return()=>clearTimeout(a)}},[V]),i.useEffect(()=>{n.length===1&&!s.get("type")&&t({type:n[0].workflow_type,mode:c},{replace:!0})},[n.length]);const C=a=>{const h={mode:a};m&&(h.type=m),t(h,{replace:!0})},W=a=>{t({type:a.workflow_type,mode:c},{replace:!0})};return o||l?e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:98,columnNumber:9},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:99,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:97,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(Y,{title:"Invoke Workflow",docsHash:"#docs:dashboard.md:invoke-workflow",actions:e.jsxDEV(ce,{mode:c,onChange:C},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:109,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:106,columnNumber:7},this),n.length===0?e.jsxDEV("div",{className:"py-16 text-center",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:"No invocable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:114,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:115,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:113,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[e.jsxDEV(me,{configs:n,selectedType:m,onSelect:W,tierMap:d,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{ref:v,className:`lg:col-span-2 transition-all duration-200 ease-out ${k?"opacity-100 translate-y-0":"opacity-0 translate-y-1"}`,children:m&&f?c==="now"?e.jsxDEV(fe,{selected:f,executionsPath:g},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:135,columnNumber:17},this):e.jsxDEV(Ne,{selected:f,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:137,columnNumber:17},this):e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-24 text-center",children:[e.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4",children:c==="schedule"?e.jsxDEV(F,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:143,columnNumber:23},this):e.jsxDEV(B,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:144,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:141,columnNumber:17},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-1",children:c==="schedule"?"Automate on a schedule":"Ready when you are"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:146,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs text-text-quaternary",children:c==="schedule"?"Choose a workflow to configure its schedule":"Choose a workflow from the list to get started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:149,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:140,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:127,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:118,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:105,columnNumber:5},this)}function We(){return e.jsxDEV(be,{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/DurableInvokePage.tsx",lineNumber:4,columnNumber:10},this)}export{We as DurableInvokePage,be as StartWorkflowPage};
|
|
6
|
+
//# sourceMappingURL=index-DOE7HCzb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-B6vQeWwf.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, Clock } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n activeTypes,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n activeTypes?: Set<string>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-4\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n const variant = tier === 'certified' ? 'certified' : tier === 'configured' ? 'configured' : 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left px-6 py-3.5 border-b border-surface-border/50 transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent'\n : 'hover:bg-surface-hover/30'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n <WorkflowPill type={config.workflow_type} size=\"md\" variant={variant} />\n {activeTypes?.has(config.workflow_type) && (\n <span title=\"Cron schedule active\"><Clock className=\"w-3 h-3 text-status-success/70 shrink-0\" /></span>\n )}\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[10px] text-text-quaternary mt-1 leading-snug\">\n {config.description}\n </p>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input-json\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input-json w-full\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ShieldCheck } from 'lucide-react';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n const isCertifiable = (selected.roles?.length ?? 0) > 0 || (selected.consumes?.length ?? 0) > 0;\n const [certified, setCertified] = useState(isCertifiable);\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n setCertified(isCertifiable);\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n const resolvedMetadata = { ...((metadata as Record<string, unknown>) ?? {}) };\n if (certified) resolvedMetadata.certified = true;\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: resolvedMetadata,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-lg font-mono font-medium text-text-primary\">{selected.workflow_type}</h2>\n {selected.description && (\n <p className=\"text-xs text-text-quaternary mt-1 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n {isCertifiable && (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={certified}\n onChange={(e) => setCertified(e.target.checked)}\n className=\"rounded border-surface-border text-accent focus:ring-accent/30\"\n />\n <ShieldCheck className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-secondary\">Enable task tracking and escalation routing</span>\n </label>\n )}\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill'; // kept for active/inactive badge\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <h2 className=\"text-lg font-mono font-medium text-text-primary\">{selected.workflow_type}</h2>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-quaternary mt-1 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\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) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono 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 onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\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={() => { setCronInput(expr); setCron.reset(); }}\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\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input-json w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { Play, Clock } from 'lucide-react';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n // Fade transition when selection or mode changes\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelVisible, setPanelVisible] = useState(true);\n const panelKey = `${selectedType}:${mode}`;\n const prevKeyRef = useRef(panelKey);\n useEffect(() => {\n if (prevKeyRef.current !== panelKey) {\n setPanelVisible(false);\n const timer = setTimeout(() => {\n prevKeyRef.current = panelKey;\n setPanelVisible(true);\n }, 120);\n return () => clearTimeout(timer);\n }\n }, [panelKey]);\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n docsHash=\"#docs:dashboard.md:invoke-workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n activeTypes={activeTypes}\n />\n\n <div\n ref={panelRef}\n className={`lg:col-span-2 transition-all duration-200 ease-out ${\n panelVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-1'\n }`}\n >\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"flex flex-col items-center justify-center py-24 text-center\">\n <div className=\"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4\">\n {mode === 'schedule'\n ? <Clock className=\"w-5 h-5 text-accent/50\" />\n : <Play className=\"w-5 h-5 text-accent/50\" />}\n </div>\n <p className=\"text-sm text-text-secondary mb-1\">\n {mode === 'schedule' ? 'Automate on a schedule' : 'Ready when you are'}\n </p>\n <p className=\"text-xs text-text-quaternary\">\n {mode === 'schedule'\n ? 'Choose a workflow to configure its schedule'\n : 'Choose a workflow from the list to get started'}\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxs","jsx","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","activeTypes","SectionLabel","config","isSelected","tier","variant","WorkflowPill","Bot","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","isCertifiable","certified","setCertified","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","resolvedMetadata","ShieldCheck","v","Pill","children","className","SchedulePanel","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","c","registeredTypes","durable","panelRef","useRef","panelVisible","setPanelVisible","panelKey","prevKeyRef","timer","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"urBAIO,SAASA,GAAW,CAAE,KAAAC,EAAM,SAAAC,GAAyD,CAC1F,MAAMC,EAAM,CAACC,EAASC,EAAuBC,IAC3CC,EAAAA,KAAC,SAAA,CACC,QAAS,IAAML,EAASE,CAAC,EACzB,UAAW,8EACTH,IAASG,EACL,uCACA,qEACN,GAEC,SAAA,CAAAC,EACAC,CAAA,CAAA,CAAA,EAIL,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,sDACZ,SAAA,CAAAJ,EAAI,MAAOK,EAAAA,IAACC,EAAA,CAAK,UAAU,aAAA,CAAc,EAAI,WAAW,EACxDN,EAAI,WAAYK,MAACE,GAAM,UAAU,aAAA,CAAc,EAAI,UAAU,CAAA,EAChE,CAEJ,CCnBO,SAASC,GAAiB,CAC/B,QAAAC,EACA,aAAAC,EACA,SAAAC,EACA,QAAAC,EACA,YAAAC,CACF,EAMG,CACD,cACG,MAAA,CACC,SAAA,CAAAR,EAAAA,IAACS,EAAA,CAAa,UAAU,OAAO,SAAA,kBAAe,EAC9CT,EAAAA,IAAC,MAAA,CACE,SAAAI,EAAQ,IAAKM,GAAW,CACvB,MAAMC,EAAaN,IAAiBK,EAAO,cACrCE,EAAOL,EAAQ,IAAIG,EAAO,aAAa,GAAK,UAC5CG,EAAUD,IAAS,YAAc,YAAcA,IAAS,aAAe,aAAe,UAC5F,OACEb,EAAAA,KAAC,SAAA,CAEC,QAAS,IAAMO,EAASI,CAAM,EAC9B,UAAW,iGACTC,EACI,6BACA,2BACN,GAEA,SAAA,CAAAZ,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,MAACc,IAAa,KAAMJ,EAAO,cAAe,KAAK,KAAK,QAAAG,EAAkB,GACrEL,GAAA,YAAAA,EAAa,IAAIE,EAAO,iBACvBV,EAAAA,IAAC,OAAA,CAAK,MAAM,uBAAuB,SAAAA,EAAAA,IAACE,EAAA,CAAM,UAAU,0CAA0C,EAAE,EAEjGQ,EAAO,YACNX,OAAC,OAAA,CAAK,UAAU,6FACd,SAAA,CAAAC,EAAAA,IAACe,EAAA,CAAI,UAAU,aAAA,CAAc,EAC5BL,EAAO,UAAA,CAAA,CACV,CAAA,EAEJ,EACCA,EAAO,aACNV,EAAAA,IAAC,KAAE,UAAU,qDACV,WAAO,WAAA,CACV,CAAA,CAAA,EAvBGU,EAAO,aAAA,CA2BlB,CAAC,CAAA,CACH,CAAA,EACF,CAEJ,CC5DO,MAAMM,EAAmB;AAAA;AAAA;AAAA,GAGzB,SAASC,GAAmBC,EAAwB,CACzD,OAAI,OAAOA,GAAU,UAAkB,UACnC,OAAOA,GAAU,SAAiB,SAClC,MAAM,QAAQA,CAAK,EAAU,QAC7BA,IAAU,MAAQ,OAAOA,GAAU,SAAiB,SACjD,QACT,CAGO,SAASC,EACdC,EACwD,CACxD,GAAI,CAACA,EAAQ,MAAO,CAAA,EACpB,MAAMC,EAAOD,EAAO,KACpB,MAAI,CAACC,GAAQ,OAAOA,GAAS,SAAiB,CAAA,EACvC,OAAO,QAAQA,CAA+B,EAAE,IAAI,CAAC,CAACC,EAAKJ,CAAK,KAAO,CAC5E,IAAAI,EACA,KAAML,GAAmBC,CAAK,EAC9B,aAAcA,CAAA,EACd,CACJ,CAGO,SAASK,EAAaF,EAAwD,CACnF,MAAO,CAAE,GAAGA,CAAA,CACd,CAGO,SAASG,EACdC,EACAC,EACQ,CACR,OAAO,KAAK,UAAU,CAAE,KAAMD,EAAQ,SAAAC,CAAA,EAAY,KAAM,CAAC,CAC3D,CC/BO,SAASC,GAAgB,CAC9B,OAAAjB,EACA,YAAAkB,EACA,iBAAAC,EACA,aAAAC,CACF,EAKG,CACD,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAA,EACXC,EAAeL,GAAelB,EAAO,WAE3C,OACEX,EAAAA,KAAC,MAAA,CAAI,UAAU,mDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,sEAAsE,SAAA,aAAU,EAC/FiC,GAAgB,CAACL,SACf,OAAA,CAAK,UAAU,gCAAgC,SAAA,qBAAkB,EAEnEA,GACC5B,EAAAA,IAAC,OAAA,CAAK,UAAU,yBAAyB,SAAA,gBAAA,CAAc,CAAA,EAE3D,EACAA,MAAC,MAAA,CAAI,UAAU,4BACZ,WACCD,EAAAA,KAAAmC,WAAA,CACE,SAAA,CAAAlC,EAAAA,IAACe,EAAA,CAAI,UAAU,4BAAA,CAA6B,EAC5Cf,EAAAA,IAAC,OAAA,CAAK,UAAU,sCAAuC,SAAAiC,CAAA,CAAa,CAAA,CAAA,CACtE,EAEAlC,EAAAA,KAAAmC,EAAAA,SAAA,CACE,SAAA,CAAAlC,EAAAA,IAACmC,EAAA,CAAW,UAAU,gCAAA,CAAiC,EACvDnC,EAAAA,IAAC,QAAK,UAAU,4BACb,2BAAM,eAAe+B,GAAA,YAAAA,EAAM,WAAY,KAAA,CAC1C,CAAA,CAAA,CACF,CAAA,CAEJ,EACCD,GAAgBD,GACf9B,OAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,4CAA4C,SAAA,oBAAiB,EAC9EA,EAAAA,IAACoC,GAAA,CACC,SAAUR,GAAe,GACzB,SAAUC,EACV,YAAanB,EAAO,WAAa,YAAYA,EAAO,UAAU,GAAK,yBAAA,CAAA,CACrE,CAAA,CACF,CAAA,EAEJ,CAEJ,CChDO,SAAS2B,GAAe,CAC7B,eAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EACA,aAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,gBAAAC,CACF,EAWG,CACD,cACG,MAAA,CACC,SAAA,CAAAhD,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,oCAAoC,SAAA,WAErD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAyC,GACCxC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS6C,EACT,UAAU,0CAET,WAAa,YAAc,WAAA,CAAA,EAG/BP,EAAe,gBACdtC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,iCAAA,CAE1C,EAEAA,EAAAA,IAAC,OAAA,CAAK,UAAU,kCAAkC,SAAA,aAAA,CAElD,CAAA,CAAA,CAEJ,CAAA,EACF,EAEC,CAACsC,EAAe,iBACftC,EAAAA,IAAC,MAAA,CAAI,UAAU,wEACb,SAAAD,EAAAA,KAAC,IAAA,CAAE,UAAU,8CAA8C,SAAA,CAAA,gGAC+BiD,GAAA,CAAK,GAAG,0BAA0B,UAAU,sCAAsC,SAAA,qBAAkB,EAAO,uEAAA,CAAA,CACrM,CAAA,CACF,EAGDT,GAAc,CAACC,EAEdxC,EAAAA,IAAC,WAAA,CACC,MAAOyC,EACP,SAAWQ,GAAML,EAAaK,EAAE,OAAO,KAAK,EAC5C,UAAU,aACV,KAAM,GACN,WAAY,EAAA,CAAA,EAIdjD,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAA2C,EAAW,IAAI,CAAC,CAAE,IAAArB,EAAK,KAAA4B,CAAA,IAAW,SACjC,MAAMhC,EAAQwB,EAAWpB,CAAG,EACtB6B,EACJ,OAAOjC,GAAU,SACbA,EACA,KAAK,UACHA,IAAUgC,IAAS,QAAU,CAAA,EAAK,CAAA,GAClC,KACA,CAAA,EAEFE,EAAe,KAAK,IACxB,GACA,KAAK,IAAI,IAAIC,GAAAC,EAAAH,GAAA,YAAAA,EAAW,QAAX,YAAAG,EAAA,KAAAH,EAAmB;AAAA,KAAnB,YAAAE,EAA0B,SAAU,CAAE,CAAA,EAErD,cACG,MAAA,CACC,SAAA,CAAAtD,EAAAA,KAAC,QAAA,CAAM,UAAU,oFACd,SAAA,CAAAuB,EACDtB,EAAAA,IAAC,OAAA,CAAK,UAAU,+BACb,SAAAkD,CAAA,CACH,CAAA,EACF,EACCA,IAAS,UACRnD,EAAAA,KAAC,SAAA,CACC,MAAO,OAAOmB,GAAS,EAAK,EAC5B,SAAW+B,GACTH,EAAkBxB,EAAK2B,EAAE,OAAO,MAAOC,CAAI,EAE7C,UAAU,wBAEV,SAAA,CAAAlD,EAAAA,IAAC,SAAA,CAAO,MAAM,OAAO,SAAA,OAAI,EACzBA,EAAAA,IAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,CAAK,CAAA,CAAA,CAAA,EAE3BkD,IAAS,UAAYA,IAAS,QAChClD,EAAAA,IAAC,WAAA,CACC,MAAOmD,EACP,SAAWF,GAAM,CACf,GAAI,CACFH,EACExB,EACA,KAAK,MAAM2B,EAAE,OAAO,KAAK,EACzBC,CAAA,CAEJ,MAAQ,CAENH,EAAgB,CACd,GAAGL,EACH,CAACpB,CAAG,EAAG2B,EAAE,OAAO,KAAA,CACjB,CACH,CACF,EACA,UAAU,oBACV,KAAMG,EACN,WAAY,EAAA,CAAA,EAGdpD,EAAAA,IAAC,QAAA,CACC,KAAMkD,IAAS,SAAW,SAAW,OACrC,MAAO,OAAOhC,GAAS,EAAE,EACzB,SAAW+B,GACTH,EAAkBxB,EAAK2B,EAAE,OAAO,MAAOC,CAAI,EAE7C,UAAU,sBAAA,CAAA,CACZ,CAAA,EAhDM5B,CAkDV,CAEJ,CAAC,CAAA,CACH,EAEFvB,EAAAA,KAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,CAAA,2CACXC,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAiB,SAAA,OAAI,EAAO,oCAAiCA,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAiB,SAAA,WAAQ,EAAO,uBAAA,CAAA,CACvK,CAAA,EACF,CAEJ,CC5IO,SAASuD,GAAc,CAAE,SAAAC,EAAU,eAAAC,GAA0E,SAClH,MAAMC,EAAWC,EAAA,EACX,CAAE,aAAAC,EAAc,YAAAC,CAAA,EAAgB7B,EAAA,EAChC8B,EAAUF,GAAgBC,EAAY,OAAO,EAC7CE,EAAiBC,EAAA,EACjB,CAACvB,EAAWwB,CAAY,EAAIC,EAAAA,SAASlD,CAAgB,EACrD,CAACmD,EAAYC,CAAa,EAAIF,EAAAA,SAAS,EAAE,EACzC,CAACxB,EAAY2B,CAAa,EAAIH,EAAAA,SAAkC,CAAA,CAAE,EAClE,CAAC3B,EAAY+B,CAAa,EAAIJ,EAAAA,SAAS,EAAK,EAC5C,CAACtC,EAAa2C,CAAc,EAAIL,EAAAA,SAAS,EAAE,EAC3CM,KAAiBlB,EAAAE,EAAS,QAAT,YAAAF,EAAgB,SAAU,GAAK,MAAMD,EAAAG,EAAS,WAAT,YAAAH,EAAmB,SAAU,GAAK,EACxF,CAACoB,EAAWC,CAAY,EAAIR,EAAAA,SAASM,CAAa,EAElD7B,EAAagC,EAAAA,QACjB,IAAMxD,EAAkBqC,EAAS,iBAAmB,IAAI,EACxD,CAACA,EAAS,eAAe,CAAA,EAErBhB,EAAcG,EAAW,OAAS,EAElCiC,EAAiBD,EAAAA,QAAQ,IAAM,CACnC,GAAI,CAACnB,EAAS,gBAAiB,MAAO,CAAA,EACtC,MAAMqB,EAAKrB,EAAS,gBAAgB,SACpC,OAAOqB,GAAM,OAAOA,GAAO,SAAYA,EAAiC,CAAA,CAC1E,EAAG,CAACrB,EAAS,eAAe,CAAC,EAE7BsB,EAAAA,UAAU,IAAM,OACdV,EAAc,EAAE,EAChBL,EAAe,MAAA,EAEf,MAAMgB,EAAU,eAAe,QAAQ,mBAAmB,EAC1D,GAAIA,EAAS,CACX,eAAe,WAAW,mBAAmB,EAC7Cd,EAAac,CAAO,EACpB,GAAI,CACF,MAAMC,EAAS,KAAK,MAAMD,CAAO,EAC3B1D,GAAO2D,GAAA,YAAAA,EAAQ,OAAQA,EACzB3D,GAAQ,OAAOA,GAAS,UAAUgD,EAAc9C,EAAaF,CAAI,CAAC,CACxE,MAAQ,CAAkB,CAC1BiD,EAAc,EAAI,EAClBC,EAAe,EAAE,EACjB,MACF,CAEA,MAAMU,EAAOzB,EAAS,gBAClB,KAAK,UAAUA,EAAS,gBAAiB,KAAM,CAAC,EAChDxC,EACJiD,EAAagB,CAAI,GACb3B,EAAAE,EAAS,kBAAT,MAAAF,EAA0B,MAAQ,OAAOE,EAAS,gBAAgB,MAAS,SAC7Ea,EAAc9C,EAAaiC,EAAS,gBAAgB,IAA+B,CAAC,EAEpFa,EAAc,CAAA,CAAE,EAElBC,EAAc,CAACnD,EAAkBqC,EAAS,iBAAmB,IAAI,EAAE,MAAM,EACzEe,EAAe,EAAE,EACjBG,EAAaF,CAAa,CAC5B,EAAG,CAAChB,EAAS,aAAa,CAAC,EAE3B,MAAM0B,EAAmB,IAAM,CAC7B,GAAI3C,EACF,GAAI,CACF,MAAMyC,EAAS,KAAK,MAAMvC,CAAS,EAC/BuC,EAAO,MAAQ,OAAOA,EAAO,MAAS,UAAUX,EAAc9C,EAAayD,EAAO,IAAI,CAAC,CAC7F,MAAQ,CAAsB,MAE9Bf,EAAazC,EAAakB,EAAYkC,CAAc,CAAC,EAEvDN,EAAc,CAAC/B,CAAU,CAC3B,EAEM4C,EAAkB,CAAC7D,EAAaJ,EAAgBgC,IAAiB,CACrE,IAAI8B,EAAS9D,EACTgC,IAAS,SAAU8B,EAAS9D,IAAU,GAAK,EAAI,OAAOA,CAAK,EACtDgC,IAAS,YAAW8B,EAAS9D,IAAU,QAAUA,IAAU,IACpE,MAAMkE,EAAU,CAAE,GAAG1C,EAAY,CAACpB,CAAG,EAAG0D,CAAA,EACxCX,EAAce,CAAO,EACrBnB,EAAazC,EAAa4D,EAASR,CAAc,CAAC,CACpD,EAEMS,EAAe,SAAY,CAC/BjB,EAAc,EAAE,EAChB,IAAIkB,EACJ,GAAI,CACFA,EAAW,KAAK,MAAM7C,CAAS,CACjC,MAAQ,CACN2B,EAAc,cAAc,EAC5B,MACF,CACA,KAAM,CAAE,KAAA/C,EAAM,SAAAK,CAAA,EAAa4D,EAC3B,GAAI,CAACjE,GAAQ,OAAOA,GAAS,SAAU,CACrC+C,EAAc,uCAAuC,EACrD,MACF,CACA,GAAI,CACF,MAAMmB,EAAmB,CAAE,GAAK7D,GAAwC,EAAC,EACrE+C,MAA4B,UAAY,IAC5C,MAAMV,EAAe,YAAY,CAC/B,aAAcP,EAAS,cACvB,KAAAnC,EACA,SAAUkE,EACV,GAAI3D,EAAc,CAAE,WAAYA,GAAgB,CAAA,CAAC,CAClD,EACD8B,EAASD,CAAc,CACzB,MAAQ,CAA2B,CACrC,EAEA,OACE1D,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,kDAAmD,SAAAwD,EAAS,cAAc,EACvFA,EAAS,aACRxD,EAAAA,IAAC,KAAE,UAAU,oDACV,WAAS,WAAA,CACZ,CAAA,EAEJ,EAEAA,EAAAA,IAAC2B,GAAA,CACC,OAAQ6B,EACR,YAAA5B,EACA,iBAAkB2C,EAClB,aAAcT,CAAA,CAAA,EAGfU,GACCzE,EAAAA,KAAC,QAAA,CAAM,UAAU,yCACf,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,WACL,QAASyE,EACT,SAAWxB,GAAMyB,EAAazB,EAAE,OAAO,OAAO,EAC9C,UAAU,gEAAA,CAAA,EAEZjD,EAAAA,IAACwF,GAAA,CAAY,UAAU,gCAAA,CAAiC,EACxDxF,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA8B,SAAA,6CAAA,CAA2C,CAAA,EAC3F,EAGFA,EAAAA,IAACqC,GAAA,CACC,eAAgBmB,EAChB,WAAAjB,EACA,YAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EACA,aAAe8C,GAAM,CAAExB,EAAawB,CAAC,EAAGrB,EAAc,EAAE,CAAG,EAC3D,aAAcc,EACd,kBAAmBC,EACnB,gBAAiBd,CAAA,CAAA,EAGlBF,GAAcnE,EAAAA,IAAC,IAAA,CAAE,UAAU,4BAA6B,SAAAmE,EAAW,EACnEJ,EAAe,OAAS/D,MAAC,IAAA,CAAE,UAAU,4BAA6B,SAAA+D,EAAe,MAAM,OAAA,CAAQ,EAC/FA,EAAe,WAAa/D,EAAAA,IAAC,IAAA,CAAE,UAAU,8BAA8B,SAAA,mBAAgB,EAExFA,EAAAA,IAAC,SAAA,CAAO,QAASqF,EAAc,SAAUtB,EAAe,UAAW,UAAU,cAC1E,SAAAA,EAAe,UAAY,cAAgB,gBAAA,CAC9C,CAAA,EACF,CAEJ,CCtKO,SAAS2B,GAAK,CAAE,SAAAC,EAAU,UAAAC,EAAY,IAAiB,CAC5D,aACG,OAAA,CAAK,UAAW,8EAA8EA,CAAS,GACrG,SAAAD,EACH,CAEJ,CCFO,SAASE,GAAc,CAC5B,SAAArC,EACA,YAAAhD,CACF,EAGG,CACD,MAAMkD,EAAWC,EAAA,EACXmC,EAAUC,EAAA,EAEV,CAACC,EAAWC,CAAY,EAAI/B,EAAAA,SAAS,EAAE,EACvC,CAACgC,EAAeC,CAAgB,EAAIjC,EAAAA,SAAS,EAAE,EAC/C,CAACkC,EAAeC,CAAgB,EAAInC,EAAAA,SAAS,EAAE,EAC/C,CAACoC,EAAUC,CAAW,EAAIrC,EAAAA,SAA0B,MAAM,EAE1DsC,EAAkB7B,EAAAA,QAAQ,IACzBnB,GAAA,MAAAA,EAAU,gBACR,KAAK,UAAUA,EAAS,gBAAiB,KAAM,CAAC,EADhBxC,EAEtC,CAACwC,GAAA,YAAAA,EAAU,eAAe,CAAC,EAExBiD,EAAqBP,IAAkBM,EAEvCE,EAAiB/B,EAAAA,QAAQ,IAAM,CACnC,GAAI,CACF,OAAO,KAAK,MAAMuB,CAAa,CACjC,MAAQ,CACN,OAAO,IACT,CACF,EAAG,CAACA,CAAa,CAAC,EAEZxD,EAAaiC,EAAAA,QACjB,IAAO+B,EAAiBC,GAAkBD,CAAc,EAAI,KAC5D,CAACA,CAAc,CAAA,EAGjB5B,EAAAA,UAAU,IAAM,CACdmB,EAAazC,EAAS,eAAiB,EAAE,EACzC2C,EACE3C,EAAS,gBACL,KAAK,UAAUA,EAAS,gBAAiB,KAAM,CAAC,EAChDxC,CAAA,EAENqF,EAAiB,EAAE,EACnBE,EAAY,MAAM,EAClBT,EAAQ,MAAA,CACV,EAAG,CAACtC,EAAS,aAAa,CAAC,EAE3B,KAAM,CAAE,KAAMoD,EAAU,UAAWC,CAAA,EAAgBC,EAAQ,CACzD,OAAQtD,EAAS,cACjB,MAAO,EAAA,CACR,EAEKuD,EAAa,IAAM,CACvB,IAAIC,EACJ,GAAI,CACFA,EAAiB,KAAK,MAAMd,CAAa,CAC3C,MAAQ,CACNG,EAAiB,0BAA0B,EAC3C,MACF,CACAA,EAAiB,EAAE,EACnBP,EAAQ,OAAO,CACb,OAAQtC,EACR,cAAewC,EAAU,KAAA,GAAU,KACnC,gBAAiBgB,CAAA,CAClB,CACH,EAEMC,EAAc,IAAM,CACxBhB,EAAa,EAAE,EACfH,EAAQ,OAAO,CAAE,OAAQtC,EAAU,cAAe,KAAM,CAC1D,EAEM0D,EAAsB,IAAM,CAChCf,EAAiBK,CAAe,EAChCH,EAAiB,EAAE,CACrB,EAEMc,EAAwB,CAAC7F,EAAaJ,IAAkB,CAC5D,GAAI,CAACwF,EAAgB,OACrB,MAAMrF,EAAO,CAAE,GAAKqF,EAAe,MAAoC,CAAA,CAAC,EAClEU,EAAW/F,EAAKC,CAAG,EACrB,OAAO8F,GAAa,SAAU/F,EAAKC,CAAG,EAAIJ,IAAU,GAAK,EAAI,OAAOA,CAAK,EACpE,OAAOkG,GAAa,UAAW/F,EAAKC,CAAG,EAAIJ,IAAU,OACzDG,EAAKC,CAAG,EAAIJ,EACjBiF,EAAiB,KAAK,UAAU,CAAE,GAAGO,EAAgB,KAAArF,CAAA,EAAQ,KAAM,CAAC,CAAC,CACvE,EAEA,OACEtB,EAAAA,KAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,kDAAmD,SAAAwD,EAAS,cAAc,EACvFA,EAAS,eACRxD,EAAAA,IAAC0F,IAAK,UAAWlF,EAAY,IAAIgD,EAAS,aAAa,EACnD,2CACA,uCAED,SAAAhD,EAAY,IAAIgD,EAAS,aAAa,EAAI,SAAW,UAAA,CACxD,CAAA,EAEJ,EACCA,EAAS,aACRxD,EAAAA,IAAC,KAAE,UAAU,oDACV,WAAS,WAAA,CACZ,CAAA,EAEJ,QAGC,MAAA,CAAI,UAAU,yCACb,SAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,2EAA2E,SAAA,eAAY,EACvGA,EAAAA,IAACe,EAAA,CAAI,UAAU,4BAAA,CAA6B,QAC3C,OAAA,CAAK,UAAU,sCACb,SAAAyC,EAAS,YAAc,YAC1B,EACC,CAACA,EAAS,kBACR,OAAA,CAAK,UAAU,qCAAqC,SAAA,YAAA,CAAU,CAAA,CAAA,CAEnE,CAAA,CACF,SAGC,MAAA,CACC,SAAA,CAAAxD,EAAAA,IAACS,EAAA,CAAa,UAAU,OAAO,SAAA,WAAQ,EACvCV,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,SACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOgG,EACP,SAAW/C,GAAM,CAAEgD,EAAahD,EAAE,OAAO,KAAK,EAAG6C,EAAQ,MAAA,CAAS,EAClE,YAAY,cACZ,UAAU,wBAAA,CAAA,EAEXE,EAAU,KAAA,GAAUqB,EAAarB,EAAU,MAAM,GAChDhG,EAAAA,IAAC,IAAA,CAAE,UAAU,qCACV,SAAAqH,EAAarB,EAAU,KAAA,CAAM,CAAA,CAChC,CAAA,EAEJ,EACAhG,EAAAA,IAAC,SAAA,CAAO,QAAS+G,EAAY,SAAUjB,EAAQ,UAAW,UAAU,+BACjE,SAAAA,EAAQ,UAAY,YAAc,OACrC,EACCtC,EAAS,eACRxD,EAAAA,IAAC,SAAA,CAAO,QAASiH,EAAa,SAAUnB,EAAQ,UAAW,UAAU,+CAA+C,SAAA,OAAA,CAEpH,CAAA,EAEJ,EACCA,EAAQ,WAAa9F,EAAAA,IAAC,IAAA,CAAE,UAAU,uCAAuC,SAAA,mBAAgB,EACzF8F,EAAQ,OAAS9F,MAAC,IAAA,CAAE,UAAU,qCAAsC,SAAA8F,EAAQ,MAAM,OAAA,CAAQ,CAAA,EAC7F,EAGA/F,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACb,SAAA,CAAAC,EAAAA,IAACS,EAAA,CAAa,UAAU,OAAO,SAAA,kBAAe,EAC9CT,EAAAA,IAAC,MAAA,CAAI,UAAU,oDACZ,SAAAsH,GAAgB,IAAI,CAAC,CAACC,EAAMC,CAAI,IAC/BzH,EAAAA,KAAC,SAAA,CAEC,KAAK,SACL,QAAS,IAAM,CAAEkG,EAAasB,CAAI,EAAGzB,EAAQ,MAAA,CAAS,EACtD,UAAU,iDAEV,SAAA,CAAA9F,EAAAA,IAAC,OAAA,CAAK,UAAU,kEAAmE,SAAAuH,EAAK,EACxFvH,EAAAA,IAAC,OAAA,CAAK,UAAU,iCAAkC,SAAAwH,CAAA,CAAK,CAAA,CAAA,EANlDD,CAAA,CAQR,CAAA,CACH,CAAA,EACF,SAGC,MAAA,CACC,SAAA,CAAAxH,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAC,EAAAA,IAACS,GAAa,SAAA,eAAA,CAAa,EAC3BV,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAA0G,GACCzG,EAAAA,IAAC,UAAO,KAAK,SAAS,QAASkH,EAAqB,UAAU,iFAAiF,SAAA,kBAAA,CAE/I,EAEDxE,GACC3C,EAAAA,KAAC,MAAA,CAAI,UAAU,4DACb,SAAA,CAAAC,MAAC,SAAA,CAAO,KAAK,SAAS,QAAS,IAAMuG,EAAY,MAAM,EAAG,UAAW,6CAA6CD,IAAa,OAAS,2BAA6B,8CAA8C,GAAI,SAAA,OAAI,QAC1N,SAAA,CAAO,KAAK,SAAS,QAAS,IAAMC,EAAY,MAAM,EAAG,UAAW,6CAA6CD,IAAa,OAAS,2BAA6B,8CAA8C,GAAI,SAAA,MAAA,CAAI,CAAA,CAAA,CAC7N,CAAA,CAAA,CAEJ,CAAA,EACF,EACAtG,EAAAA,IAAC,IAAA,CAAE,UAAU,sCAAsC,SAAA,uEAEnD,EAECsG,IAAa,QAAU5D,EACtB1C,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAA0C,EAAW,IAAI,CAAC,CAAE,IAAApB,EAAK,MAAAJ,EAAO,KAAAgC,CAAA,WAC5B,MAAA,CACC,SAAA,CAAAlD,EAAAA,IAAC,QAAA,CAAM,UAAU,uDAAwD,SAAAsB,EAAI,EAC5E4B,IAAS,UACRnD,OAAC,SAAA,CAAO,MAAAmB,EAAc,SAAW+B,GAAMkE,EAAsB7F,EAAK2B,EAAE,OAAO,KAAK,EAAG,UAAU,uBAC3F,SAAA,CAAAjD,EAAAA,IAAC,SAAA,CAAO,MAAM,OAAO,SAAA,OAAI,EACzBA,EAAAA,IAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,CAAK,CAAA,EAC7B,EAEAA,EAAAA,IAAC,QAAA,CAAM,KAAMkD,IAAS,SAAW,SAAW,OAAQ,MAAAhC,EAAc,SAAW+B,GAAMkE,EAAsB7F,EAAK2B,EAAE,OAAO,KAAK,EAAG,UAAU,gCAAA,CAAiC,CAAA,CAAA,EARpK3B,CAUV,CACD,CAAA,CACH,EAEAtB,EAAAA,IAAC,WAAA,CACC,MAAOkG,EACP,SAAWjD,GAAM,CAAEkD,EAAiBlD,EAAE,OAAO,KAAK,EAAGoD,EAAiB,EAAE,CAAG,EAC3E,UAAU,oBACV,KAAM,GACN,WAAY,EAAA,CAAA,EAIfD,GAAiBpG,EAAAA,IAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAoG,EAAc,EAClFK,GAAsBzG,EAAAA,IAAC,IAAA,CAAE,UAAU,iCAAiC,SAAA,wEAAA,CAAsE,CAAA,EAC7I,SAGC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAACS,EAAA,CAAa,UAAU,OAAO,SAAA,oBAAiB,EAChDT,EAAAA,IAACyH,GAAA,CACC,QAASC,GACT,MAAMd,GAAA,YAAAA,EAAU,OAAQ,CAAA,EACxB,MAAQe,GAAQA,EAAI,YACpB,WAAaA,GAAQjE,EAAS,yBAAyBiE,EAAI,WAAW,EAAE,EACxE,UAAWd,EACX,aAAa,mBAAA,CAAA,CACf,CAAA,CACF,CAAA,EACF,CAEJ,CC9OO,SAASe,IAAoB,CAClC,KAAM,CAACC,EAAcC,CAAe,EAAIC,GAAA,EAClC,CAAE,KAAMC,EAAa,UAAAC,CAAA,EAAcC,EAAA,EACnC,CAAE,KAAMC,EAAgB,UAAWC,CAAA,EAAsBC,EAAA,EACzD,CAAE,KAAMC,CAAA,EAAgBC,EAAA,EAExB9I,EAAQoI,EAAa,IAAI,MAAM,GAAc,MAC7CxH,EAAewH,EAAa,IAAI,MAAM,GAAK,GAE3CzH,EAA8B4H,GAAe,CAAA,EAE7CzH,EAAUoE,EAAAA,QAAQ,IAAM,CAC5B,MAAM6D,MAAU,IAChB,UAAWC,KAAMN,GAAkB,GACjCK,EAAI,IAAIC,EAAG,cAAeA,EAAG,MAAQ,SAAS,EAEhD,OAAOD,CACT,EAAG,CAACL,CAAc,CAAC,EAEbO,EAAmB/D,EAAAA,QAAQ,IAAM,CACrC,MAAMF,EAAYrE,EAAQ,OAAQuI,GAAMA,EAAE,SAAS,EAC7CC,EAAkB,IAAI,IAAIxI,EAAQ,IAAKuI,GAAMA,EAAE,aAAa,CAAC,EAE7DE,GADaV,GAAkB,CAAA,GAElC,OAAQM,GAAOA,EAAG,QAAU,CAACG,EAAgB,IAAIH,EAAG,aAAa,CAAC,EAClE,IAAKA,IAAQ,CACZ,cAAeA,EAAG,cAClB,WAAYA,EAAG,YAAc,GAC7B,UAAW,GACX,YAAa,KACb,aAAc,WACd,MAAO,CAAA,EACP,iBAAkB,CAAA,EAClB,SAAU,CAAA,EACV,gBAAiB,KACjB,gBAAiB,KACjB,cAAe,KACf,WAAY,IAAA,EACe,EAC/B,MAAO,CAAC,GAAGhE,EAAW,GAAGoE,CAAO,CAClC,EAAG,CAACzI,EAAS+H,CAAc,CAAC,EAEtB7F,EAAiBoG,EAAiB,KAAMC,GAAMA,EAAE,gBAAkBtI,CAAY,EAE9EG,EAAc,IAAI,KACrB8H,GAAe,CAAA,GAAI,OAAQrF,GAAMA,EAAE,MAAM,EAAE,IAAKA,GAAMA,EAAE,aAAa,CAAA,EAGlEQ,EAAiB,wBAGjBqF,EAAWC,EAAAA,OAAuB,IAAI,EACtC,CAACC,EAAcC,CAAe,EAAI/E,EAAAA,SAAS,EAAI,EAC/CgF,EAAW,GAAG7I,CAAY,IAAIZ,CAAI,GAClC0J,EAAaJ,EAAAA,OAAOG,CAAQ,EAClCpE,EAAAA,UAAU,IAAM,CACd,GAAIqE,EAAW,UAAYD,EAAU,CACnCD,EAAgB,EAAK,EACrB,MAAMG,EAAQ,WAAW,IAAM,CAC7BD,EAAW,QAAUD,EACrBD,EAAgB,EAAI,CACtB,EAAG,GAAG,EACN,MAAO,IAAM,aAAaG,CAAK,CACjC,CACF,EAAG,CAACF,CAAQ,CAAC,EAEbpE,EAAAA,UAAU,IAAM,CACV4D,EAAiB,SAAW,GAAK,CAACb,EAAa,IAAI,MAAM,GAC3DC,EAAgB,CAAE,KAAMY,EAAiB,CAAC,EAAE,cAAe,KAAAjJ,GAAQ,CAAE,QAAS,GAAM,CAExF,EAAG,CAACiJ,EAAiB,MAAM,CAAC,EAE5B,MAAMW,EAAWzJ,GAAY,CAC3B,MAAM0J,EAAiC,CAAE,KAAM1J,CAAA,EAC3CS,MAAqB,KAAOA,GAChCyH,EAAgBwB,EAAQ,CAAE,QAAS,EAAA,CAAM,CAC3C,EAEMC,EAAgB7I,GAA6B,CACjDoH,EAAgB,CAAE,KAAMpH,EAAO,cAAe,KAAAjB,GAAQ,CAAE,QAAS,GAAM,CACzE,EAEA,OAAIwI,GAAaG,EAEbrI,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,oCAAA,CAAqC,EACpDA,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAA,CAAiC,CAAA,EAClD,SAKD,MAAA,CACC,SAAA,CAAAA,EAAAA,IAACwJ,EAAA,CACC,MAAM,kBACN,SAAS,qCACT,QAASxJ,EAAAA,IAACR,GAAA,CAAW,KAAAC,EAAY,SAAU4J,CAAA,CAAS,CAAA,CAAA,EAGrDX,EAAiB,SAAW,EAC3B3I,EAAAA,KAAC,MAAA,CAAI,UAAU,oBACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,iCAAiC,SAAA,yBAAsB,EACpEA,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,yFAAA,CAAuF,CAAA,CAAA,CACnI,EAEAD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAACG,GAAA,CACC,QAASuI,EACT,aAAArI,EACA,SAAUkJ,EACV,QAAAhJ,EACA,YAAAC,CAAA,CAAA,EAGFR,EAAAA,IAAC,MAAA,CACC,IAAK8I,EACL,UAAW,sDACTE,EAAe,4BAA8B,yBAC/C,GAEC,YAAgB1G,EACf7C,IAAS,MACPO,MAACuD,GAAA,CAAc,SAAUjB,EAAgB,eAAAmB,CAAA,CAAgC,EAEzEzD,MAAC6F,GAAA,CAAc,SAAUvD,EAAgB,YAAA9B,CAAA,CAA0B,EAGrET,EAAAA,KAAC,MAAA,CAAI,UAAU,8DACb,SAAA,CAAAC,MAAC,MAAA,CAAI,UAAU,gFACZ,SAAAP,IAAS,WACNO,MAACE,EAAA,CAAM,UAAU,wBAAA,CAAyB,EAC1CF,EAAAA,IAACC,EAAA,CAAK,UAAU,yBAAyB,EAC/C,QACC,IAAA,CAAE,UAAU,mCACV,SAAAR,IAAS,WAAa,yBAA2B,qBACpD,QACC,IAAA,CAAE,UAAU,+BACV,SAAAA,IAAS,WACN,8CACA,gDAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EAEJ,CAEJ,CC9JO,SAASgK,IAAoB,CAClC,aAAQ7B,GAAA,EAAkB,CAC5B"}
|
|
1
|
+
{"version":3,"file":"index-DOE7HCzb.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, Clock } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n activeTypes,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n activeTypes?: Set<string>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-4\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n const variant = tier === 'certified' ? 'certified' : tier === 'configured' ? 'configured' : 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left px-6 py-3.5 border-b border-surface-border/50 transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent'\n : 'hover:bg-surface-hover/30'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n <WorkflowPill type={config.workflow_type} size=\"md\" variant={variant} />\n {activeTypes?.has(config.workflow_type) && (\n <span title=\"Cron schedule active\"><Clock className=\"w-3 h-3 text-status-success/70 shrink-0\" /></span>\n )}\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[10px] text-text-quaternary mt-1 leading-snug\">\n {config.description}\n </p>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input-json\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input-json w-full\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { ShieldCheck } from 'lucide-react';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n const isCertifiable = (selected.roles?.length ?? 0) > 0 || (selected.consumes?.length ?? 0) > 0;\n const [certified, setCertified] = useState(isCertifiable);\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n setCertified(isCertifiable);\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n const resolvedMetadata = { ...((metadata as Record<string, unknown>) ?? {}) };\n if (certified) resolvedMetadata.certified = true;\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: resolvedMetadata,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <h2 className=\"text-lg font-mono font-medium text-text-primary\">{selected.workflow_type}</h2>\n {selected.description && (\n <p className=\"text-xs text-text-quaternary mt-1 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n {isCertifiable && (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={certified}\n onChange={(e) => setCertified(e.target.checked)}\n className=\"rounded border-surface-border text-accent focus:ring-accent/30\"\n />\n <ShieldCheck className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-secondary\">Enable task tracking and escalation routing</span>\n </label>\n )}\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill'; // kept for active/inactive badge\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <h2 className=\"text-lg font-mono font-medium text-text-primary\">{selected.workflow_type}</h2>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-quaternary mt-1 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\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) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono 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 onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\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={() => { setCronInput(expr); setCron.reset(); }}\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\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input-json w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { Play, Clock } from 'lucide-react';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n // Fade transition when selection or mode changes\n const panelRef = useRef<HTMLDivElement>(null);\n const [panelVisible, setPanelVisible] = useState(true);\n const panelKey = `${selectedType}:${mode}`;\n const prevKeyRef = useRef(panelKey);\n useEffect(() => {\n if (prevKeyRef.current !== panelKey) {\n setPanelVisible(false);\n const timer = setTimeout(() => {\n prevKeyRef.current = panelKey;\n setPanelVisible(true);\n }, 120);\n return () => clearTimeout(timer);\n }\n }, [panelKey]);\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n docsHash=\"#docs:dashboard.md:invoke-workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n activeTypes={activeTypes}\n />\n\n <div\n ref={panelRef}\n className={`lg:col-span-2 transition-all duration-200 ease-out ${\n panelVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-1'\n }`}\n >\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"flex flex-col items-center justify-center py-24 text-center\">\n <div className=\"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4\">\n {mode === 'schedule'\n ? <Clock className=\"w-5 h-5 text-accent/50\" />\n : <Play className=\"w-5 h-5 text-accent/50\" />}\n </div>\n <p className=\"text-sm text-text-secondary mb-1\">\n {mode === 'schedule' ? 'Automate on a schedule' : 'Ready when you are'}\n </p>\n <p className=\"text-xs text-text-quaternary\">\n {mode === 'schedule'\n ? 'Choose a workflow to configure its schedule'\n : 'Choose a workflow from the list to get started'}\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxDEV","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","activeTypes","SectionLabel","config","isSelected","tier","variant","WorkflowPill","Bot","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","isCertifiable","certified","setCertified","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","resolvedMetadata","ShieldCheck","v","Pill","children","className","SchedulePanel","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","c","registeredTypes","durable","panelRef","useRef","panelVisible","setPanelVisible","panelKey","prevKeyRef","timer","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./index-Da8R5Fn_.js";import{a as l}from"./vendor-query-DLp59M9_.js";import{h as b}from"./workflows-B9xdIsfM.js";import{D as g}from"./DataTable-etck0Zmp.js";import{F as N,b as x}from"./FilterBar-CZGTOMoo.js";import{R as v,a as m}from"./RowActions-DBpvm3Jy.js";import{u as P}from"./useFilterParams-CGRYFw_A.js";import{P as W}from"./PageHeader-BuUnJ5NY.js";import{T as y}from"./TaskQueuePill-Dtsa8CPO.js";import{W as D}from"./WorkflowPill-BzhfqGa-.js";import{a6 as E,a8 as j,O as q}from"./vendor-icons-1qQ3NKfa.js";import{c as C}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-Bk3_P-b8.js";function B(){const a=C(),{data:u,isLoading:c}=b(),{filters:r,setFilter:i}=P({filters:{search:"",queue:""}}),[o,p]=l.useState(r.search);l.useEffect(()=>{if(o===r.search)return;const e=setTimeout(()=>i("search",o),300);return()=>clearTimeout(e)},[o,i,r.search]);const t=u??[],d=l.useMemo(()=>[...new Set(t.map(e=>e.task_queue).filter(Boolean))].sort(),[t]),f=l.useMemo(()=>{let e=t;if(r.search){const n=r.search.toLowerCase();e=e.filter(h=>h.name.toLowerCase().includes(n))}return r.queue&&(e=e.filter(n=>n.task_queue===r.queue)),e},[t,r]),k=[{key:"name",label:"Workflow",render:e=>s.jsxDEV(D,{type:e.name},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:52,columnNumber:24},this)},{key:"task_queue",label:"Queue",render:e=>s.jsxDEV(y,{queue:e.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:57,columnNumber:24},this),className:"whitespace-nowrap"},{key:"registered",label:"Status",render:e=>e.registered?s.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[s.jsxDEV(E,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:131},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:11},this):s.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:65,columnNumber:11},this),className:"whitespace-nowrap"},{key:"actions",label:"",render:e=>s.jsxDEV(v,{children:e.registered?s.jsxDEV(m,{icon:j,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.name)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:74,columnNumber:13},this):s.jsxDEV(m,{icon:q,title:"Register workflow",onClick:()=>a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:80,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:72,columnNumber:9},this),className:"w-16 text-right"}],w=e=>{e.registered?a(`/workflows/registry/${encodeURIComponent(e.name)}`):a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)};return s.jsxDEV("div",{children:[s.jsxDEV(W,{title:"Workers",docsHash:"#docs:dashboard.md:task-queues"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:102,columnNumber:7},this),s.jsxDEV(N,{children:[s.jsxDEV("input",{type:"text",placeholder:"Search workers...",value:o,onChange:e=>p(e.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:105,columnNumber:9},this),s.jsxDEV(x,{label:"Queue",value:r.queue,onChange:e=>i("queue",e),options:d.map(e=>({value:e,label:e}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:104,columnNumber:7},this),s.jsxDEV(g,{columns:k,data:f,keyFn:e=>e.name,onRowClick:w,isLoading:c,emptyMessage:"No active workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:101,columnNumber:5},this)}export{B as WorkersPage};
|
|
2
|
+
//# sourceMappingURL=index-DV0_tQW3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DV0_tQW3.js","sources":["../../src/pages/workflows/workers/WorkersPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Plus, Eye, ShieldCheck } from 'lucide-react';\nimport { useActiveWorkers } from '../../../api/workflows';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport type { ActiveWorker } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { TaskQueuePill } from '../../../components/common/display/TaskQueuePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkersPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useActiveWorkers();\n const { filters, setFilter } = useFilterParams({\n filters: { search: '', queue: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const allWorkers = data ?? [];\n\n const queues = useMemo(\n () => [...new Set(allWorkers.map((w) => w.task_queue).filter(Boolean))].sort(),\n [allWorkers],\n );\n\n const workers = useMemo(() => {\n let result = allWorkers;\n if (filters.search) {\n const q = filters.search.toLowerCase();\n result = result.filter((w) => w.name.toLowerCase().includes(q));\n }\n if (filters.queue) result = result.filter((w) => w.task_queue === filters.queue);\n return result;\n }, [allWorkers, filters]);\n\n const columns: Column<ActiveWorker>[] = [\n {\n key: 'name',\n label: 'Workflow',\n render: (row) => <WorkflowPill type={row.name} />,\n },\n {\n key: 'task_queue',\n label: 'Queue',\n render: (row) => <TaskQueuePill queue={row.task_queue} />,\n className: 'whitespace-nowrap',\n },\n {\n key: 'registered',\n label: 'Status',\n render: (row) => row.registered\n ? <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>\n : <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary\">Durable</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n {row.registered ? (\n <RowAction\n icon={Eye}\n title=\"View config\"\n onClick={() => navigate(`/workflows/registry/${encodeURIComponent(row.name)}`)}\n />\n ) : (\n <RowAction\n icon={Plus}\n title=\"Register workflow\"\n onClick={() => navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`)}\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleRowClick = (row: ActiveWorker) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.name)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`);\n }\n };\n\n return (\n <div>\n <PageHeader title=\"Workers\" docsHash=\"#docs:dashboard.md:task-queues\" />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workers...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Queue\"\n value={filters.queue}\n onChange={(v) => setFilter('queue', v)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={workers}\n keyFn={(row) => row.name}\n onRowClick={handleRowClick}\n isLoading={isLoading}\n emptyMessage=\"No active workers\"\n />\n </div>\n );\n}\n"],"names":["WorkersPage","navigate","useNavigate","data","isLoading","useActiveWorkers","filters","setFilter","useFilterParams","searchInput","setSearchInput","useState","useEffect","timer","allWorkers","queues","useMemo","w","workers","result","q","columns","row","WorkflowPill","TaskQueuePill","jsxDEV","ShieldCheck","RowActionGroup","RowAction","Eye","Plus","handleRowClick","PageHeader","FilterBar","FilterSelect","v","DataTable"],"mappings":"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"}
|