@hotmeshio/long-tail 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/agent-subscriptions.js +14 -0
- package/build/api/settings.js +4 -0
- package/build/lib/db/index.d.ts +1 -7
- package/build/lib/db/schemas/008_capability_reaction.sql +12 -0
- package/build/lib/db/schemas/009_file_topic_category.sql +10 -0
- package/build/lib/events/index.d.ts +9 -0
- package/build/lib/events/index.js +18 -0
- package/build/lib/events/nats.d.ts +15 -1
- package/build/lib/events/nats.js +46 -2
- package/build/lib/events/publish.d.ts +10 -0
- package/build/lib/events/publish.js +28 -0
- package/build/modules/config.d.ts +1 -7
- package/build/services/agent/index.js +14 -0
- package/build/services/agent/subscription-sql.d.ts +3 -3
- package/build/services/agent/subscription-sql.js +7 -5
- package/build/services/agent/subscriptions.d.ts +3 -1
- package/build/services/agent/subscriptions.js +6 -0
- package/build/services/agent/trigger-registry.d.ts +2 -0
- package/build/services/agent/trigger-registry.js +55 -8
- package/build/services/topics/system-topics.js +29 -0
- package/build/services/yaml-workflow/deployer.d.ts +1 -1
- package/build/services/yaml-workflow/deployer.js +2 -2
- package/build/services/yaml-workflow/invoke.d.ts +2 -0
- package/build/services/yaml-workflow/invoke.js +5 -1
- package/build/start/adapters.js +11 -9
- package/build/start/config.js +4 -0
- package/build/start/workers.js +15 -3
- package/build/system/index.js +16 -0
- package/build/system/mcp-servers/file-storage.js +18 -0
- package/build/system/workflows/capability-invoke/activities.d.ts +12 -0
- package/build/system/workflows/capability-invoke/activities.js +14 -0
- package/build/system/workflows/capability-invoke/index.d.ts +14 -0
- package/build/system/workflows/capability-invoke/index.js +74 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/events.d.ts +13 -1
- package/build/types/startup.d.ts +7 -0
- package/dashboard/dist/assets/AdminDashboard-ntLz5Pro.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-Dr5wTIZT.js.map → AdminDashboard-ntLz5Pro.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js +16 -0
- package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js.map +1 -0
- package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js +2 -0
- package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-bdPqEzbx.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-UzjXcO3W.js.map → AvailableEscalationsPage-bdPqEzbx.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-CYfFMpkY.js +2 -0
- package/dashboard/dist/assets/{BotPicker-CM-_u73k.js.map → BotPicker-CYfFMpkY.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js +2 -0
- package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js.map +1 -0
- package/dashboard/dist/assets/CollapsibleSection-DU5KAtQ-.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-CnPKa7df.js.map → CollapsibleSection-DU5KAtQ-.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-_hW5Vc05.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-_hW5Vc05.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DiWqv41D.js +2 -0
- package/dashboard/dist/assets/CopyableId-DiWqv41D.js.map +1 -0
- package/dashboard/dist/assets/CredentialsPage-CmbwypSF.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-CImIzra4.js.map → CredentialsPage-CmbwypSF.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-nycfAefc.js +2 -0
- package/dashboard/dist/assets/CronLabel-nycfAefc.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-gNZRBaHg.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-5JzEgS7I.js.map → CustomDurationPicker-gNZRBaHg.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-DGerT2ZM.js +2 -0
- package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-DGerT2ZM.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-vNcqMd05.js +2 -0
- package/dashboard/dist/assets/{DropZone-BEW3jBzf.js.map → DropZone-vNcqMd05.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-CdvQbtve.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-B79BF5Mj.js.map → ElapsedCell-CdvQbtve.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-DMldv8c5.js +2 -0
- package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-DMldv8c5.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-BNENCL_2.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-QvWvbpx3.js.map → EscalationsOverview-BNENCL_2.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-BqDAyXyc.js +2 -0
- package/dashboard/dist/assets/{EventTable-DAclQwfr.js.map → EventTable-BqDAyXyc.js.map} +1 -1
- package/dashboard/dist/assets/EventTopicPill-CnHFBglc.js +2 -0
- package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js.map → EventTopicPill-CnHFBglc.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-TYiTtUgv.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-TYiTtUgv.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-fterfLKH.js +2 -0
- package/dashboard/dist/assets/{HomePage-DVOi7rR1.js.map → HomePage-fterfLKH.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-BO5Igi6v.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-Bntl2hex.js.map → ListToolbar-BO5Igi6v.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-BQokGg0z.js +2 -0
- package/dashboard/dist/assets/{McpOverview-B-xSYPJj.js.map → McpOverview-BQokGg0z.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-0WOp2n_j.js +5 -0
- package/dashboard/dist/assets/{McpQueryDetailPage-Cq71BzjB.js.map → McpQueryDetailPage-0WOp2n_j.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-DUey_h9J.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-Dfz87aZF.js.map → McpQueryPage-DUey_h9J.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-B3R6KZ61.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-MUYvUYqz.js.map → McpRunsPage-B3R6KZ61.js.map} +1 -1
- package/dashboard/dist/assets/Modal-Qe8lW7gQ.js +2 -0
- package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-Qe8lW7gQ.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-dldvzjcg.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-Rih1SZrn.js.map → OperatorDashboard-dldvzjcg.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-DF4BeEm4.js +2 -0
- package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js.map → PageHeader-DF4BeEm4.js.map} +1 -1
- package/dashboard/dist/assets/PageHeaderWithStats-BQZw6BgA.js +2 -0
- package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js.map → PageHeaderWithStats-BQZw6BgA.js.map} +1 -1
- package/dashboard/dist/assets/PriorityBadge-DMyB3WLZ.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-DMyB3WLZ.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-Beo-QVL-.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-BMkWCjqD.js.map → ProcessDetailPage-Beo-QVL-.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-C_ars8gp.js +2 -0
- package/dashboard/dist/assets/{ProcessesListPage-vZjUSc7S.js.map → ProcessesListPage-C_ars8gp.js.map} +1 -1
- package/dashboard/dist/assets/RolePill-DrBZ7JJj.js +2 -0
- package/dashboard/dist/assets/{RolePill-BDzPFQUv.js.map → RolePill-DrBZ7JJj.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DgSXFFGL.js +2 -0
- package/dashboard/dist/assets/{RolesPage-kjeAsj3_.js.map → RolesPage-DgSXFFGL.js.map} +1 -1
- package/dashboard/dist/assets/RowActions-QcakGbVA.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-QcakGbVA.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CYMeZwrM.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-DC4SLtTq.js.map → RunAsSelector-CYMeZwrM.js.map} +1 -1
- package/dashboard/dist/assets/ServerName-D5NKD06M.js +2 -0
- package/dashboard/dist/assets/{ServerName-CEOFF7UG.js.map → ServerName-D5NKD06M.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-PZQmmCHK.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-PZQmmCHK.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-ME2R6a7K.js +2 -0
- package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-ME2R6a7K.js.map} +1 -1
- package/dashboard/dist/assets/StepIndicator-CDDVahOz.js +2 -0
- package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CDDVahOz.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-Ddy93Q5I.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-Ddy93Q5I.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js.map +1 -0
- package/dashboard/dist/assets/TagInput-B45Dm3IW.js +2 -0
- package/dashboard/dist/assets/{TagInput-VBY0xIwb.js.map → TagInput-B45Dm3IW.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BJRUjVDv.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js.map → TaskQueuePill-BJRUjVDv.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-Czu08px3.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-69ZWCaCP.js.map → TasksListPage-Czu08px3.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-CJ56IUy6.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-CttiZG0k.js.map → TimeAgo-CJ56IUy6.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-QtcYZ9Jx.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-CYFbEhqc.js.map → TimestampCell-QtcYZ9Jx.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-DpDv3FwI.js +2 -0
- package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js.map → ToolPill-DpDv3FwI.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js +2 -0
- package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js.map +1 -0
- package/dashboard/dist/assets/TopicDetailPage-DwShZbh9.js +9 -0
- package/dashboard/dist/assets/{TopicDetailPage-Aq4-6GLl.js.map → TopicDetailPage-DwShZbh9.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-DKXlpZl_.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-BYFKjRY_.js.map → TopicsPage-DKXlpZl_.js.map} +1 -1
- package/dashboard/dist/assets/UserName-zlR1so37.js +2 -0
- package/dashboard/dist/assets/{UserName-C4_T5-rI.js.map → UserName-zlR1so37.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-BlAPZbQZ.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-_LMWc-OC.js.map → WorkflowsDashboard-BlAPZbQZ.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsOverview-NnPi6rwS.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-DFrfw554.js.map → WorkflowsOverview-NnPi6rwS.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C4mZum6x.js +2 -0
- package/dashboard/dist/assets/{YamlWorkflowsPage-CZzGwfol.js.map → YamlWorkflowsPage-C4mZum6x.js.map} +1 -1
- package/dashboard/dist/assets/{agents-CsKILVSU.js → agents-B5wvILeV.js} +2 -2
- package/dashboard/dist/assets/{agents-CsKILVSU.js.map → agents-B5wvILeV.js.map} +1 -1
- package/dashboard/dist/assets/{bots-BzEs6Q9L.js → bots-BPlouRDm.js} +2 -2
- package/dashboard/dist/assets/{bots-BzEs6Q9L.js.map → bots-BPlouRDm.js.map} +1 -1
- package/dashboard/dist/assets/capabilities-DkvRG09b.js +2 -0
- package/dashboard/dist/assets/capabilities-DkvRG09b.js.map +1 -0
- package/dashboard/dist/assets/{controlplane-COYEIIAz.js → controlplane-0m_rA-UW.js} +2 -2
- package/dashboard/dist/assets/{controlplane-COYEIIAz.js.map → controlplane-0m_rA-UW.js.map} +1 -1
- package/dashboard/dist/assets/escalation-CfIAIUg2.js +2 -0
- package/dashboard/dist/assets/{escalation-BZjS2202.js.map → escalation-CfIAIUg2.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-CLIdxlbe.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-DtRVmPSB.js.map → escalation-columns-CLIdxlbe.js.map} +1 -1
- package/dashboard/dist/assets/helpers-prGqC38M.js +2 -0
- package/dashboard/dist/assets/{helpers-BngVEys5.js.map → helpers-prGqC38M.js.map} +1 -1
- package/dashboard/dist/assets/index-4T7Z_gQ4.js +281 -0
- package/dashboard/dist/assets/index-4T7Z_gQ4.js.map +1 -0
- package/dashboard/dist/assets/index-BPxglOYm.css +1 -0
- package/dashboard/dist/assets/index-BR3SwTNI.js +2 -0
- package/dashboard/dist/assets/{index-COgyD_H2.js.map → index-BR3SwTNI.js.map} +1 -1
- package/dashboard/dist/assets/index-BWKIigEk.js +2 -0
- package/dashboard/dist/assets/{index-Byp8BDPs.js.map → index-BWKIigEk.js.map} +1 -1
- package/dashboard/dist/assets/index-BgVuyWhi.js +15 -0
- package/dashboard/dist/assets/{index-DykjJxzr.js.map → index-BgVuyWhi.js.map} +1 -1
- package/dashboard/dist/assets/index-C0sDEKdo.js +2 -0
- package/dashboard/dist/assets/{index-DxMNiFPS.js.map → index-C0sDEKdo.js.map} +1 -1
- package/dashboard/dist/assets/index-C2MJzu6J.js +2 -0
- package/dashboard/dist/assets/{index-ByxH4qQ-.js.map → index-C2MJzu6J.js.map} +1 -1
- package/dashboard/dist/assets/index-CFoddJDr.js +6 -0
- package/dashboard/dist/assets/{index-BCsShN2l.js.map → index-CFoddJDr.js.map} +1 -1
- package/dashboard/dist/assets/index-CrMxD5Ib.js +6 -0
- package/dashboard/dist/assets/index-CrMxD5Ib.js.map +1 -0
- package/dashboard/dist/assets/index-CuY5hPYB.js +2 -0
- package/dashboard/dist/assets/{index-Bq5MSkCL.js.map → index-CuY5hPYB.js.map} +1 -1
- package/dashboard/dist/assets/index-CwkJBn87.js +2 -0
- package/dashboard/dist/assets/{index-R61-yG56.js.map → index-CwkJBn87.js.map} +1 -1
- package/dashboard/dist/assets/index-DeL84Cag.js +2 -0
- package/dashboard/dist/assets/{index-xgl431mG.js.map → index-DeL84Cag.js.map} +1 -1
- package/dashboard/dist/assets/index-DqeLbz6j.js +2 -0
- package/dashboard/dist/assets/{index-ABsZZf_U.js.map → index-DqeLbz6j.js.map} +1 -1
- package/dashboard/dist/assets/index-P9huxx3-.js +2 -0
- package/dashboard/dist/assets/{index-BwivT39P.js.map → index-P9huxx3-.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DhCbDgy4.js → knowledge-CUZxyRCO.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DhCbDgy4.js.map → knowledge-CUZxyRCO.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-xh7T0I-f.js → mcp-B5VQPoF3.js} +2 -2
- package/dashboard/dist/assets/{mcp-xh7T0I-f.js.map → mcp-B5VQPoF3.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-il3CfU3U.js → mcp-query-Ba5Zj3yg.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-il3CfU3U.js.map → mcp-query-Ba5Zj3yg.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js → mcp-runs-CAiEr5Fc.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js.map → mcp-runs-CAiEr5Fc.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-sVr5scma.js +2 -0
- package/dashboard/dist/assets/{namespaces-BBTvHnRF.js.map → namespaces-sVr5scma.js.map} +1 -1
- package/dashboard/dist/assets/{roles-D7bx5FAM.js → roles-E_bA4e0f.js} +2 -2
- package/dashboard/dist/assets/{roles-D7bx5FAM.js.map → roles-E_bA4e0f.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BgxRbhVM.js → tasks-CL6Gv8jB.js} +2 -2
- package/dashboard/dist/assets/{tasks-BgxRbhVM.js.map → tasks-CL6Gv8jB.js.map} +1 -1
- package/dashboard/dist/assets/{topics-CTtCboHe.js → topics-DbtPHERP.js} +2 -2
- package/dashboard/dist/assets/{topics-CTtCboHe.js.map → topics-DbtPHERP.js.map} +1 -1
- package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js → useCollapsedSections-CGNA5oKV.js} +2 -2
- package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js.map → useCollapsedSections-CGNA5oKV.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-C6c618cj.js +2 -0
- package/dashboard/dist/assets/useEventHooks-C6c618cj.js.map +1 -0
- 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-CSMX9He5.js → useYamlActivityEvents-eK7kIUdh.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CSMX9He5.js.map → useYamlActivityEvents-eK7kIUdh.js.map} +1 -1
- package/dashboard/dist/assets/{users-CyF-5WLI.js → users-CCHSIAxt.js} +2 -2
- package/dashboard/dist/assets/{users-CyF-5WLI.js.map → users-CCHSIAxt.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js → vendor-icons-D8-ZINAH.js} +3 -3
- package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js.map → vendor-icons-D8-ZINAH.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-Bf4_w24H.js → workflows-BNbocg_9.js} +2 -2
- package/dashboard/dist/assets/{workflows-Bf4_w24H.js.map → workflows-BNbocg_9.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js → yaml-workflows-Cu1FUwrc.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js.map → yaml-workflows-Cu1FUwrc.js.map} +1 -1
- package/dashboard/dist/index.html +5 -5
- package/docs/agents.md +9 -9
- package/docs/api/http/agents.md +12 -10
- package/docs/api/http/settings.md +4 -0
- package/docs/api/sdk/agents.md +4 -2
- package/docs/api/sdk/settings.md +2 -1
- package/docs/dashboard.md +1 -1
- package/package.json +2 -2
- package/dashboard/dist/assets/AdminDashboard-Dr5wTIZT.js +0 -2
- package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js +0 -13
- package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js.map +0 -1
- package/dashboard/dist/assets/AgentsPage-CvuF8--H.js +0 -2
- package/dashboard/dist/assets/AgentsPage-CvuF8--H.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-UzjXcO3W.js +0 -2
- package/dashboard/dist/assets/BotPicker-CM-_u73k.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js.map +0 -1
- package/dashboard/dist/assets/CollapsibleSection-CnPKa7df.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/CopyableId-DmLF-RqZ.js.map +0 -1
- package/dashboard/dist/assets/CredentialsPage-CImIzra4.js +0 -2
- package/dashboard/dist/assets/CronLabel-5HPAmciI.js +0 -2
- package/dashboard/dist/assets/CronLabel-5HPAmciI.js.map +0 -1
- package/dashboard/dist/assets/CustomDurationPicker-5JzEgS7I.js +0 -2
- package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
- package/dashboard/dist/assets/DropZone-BEW3jBzf.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-B79BF5Mj.js +0 -2
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-QvWvbpx3.js +0 -2
- package/dashboard/dist/assets/EventTable-DAclQwfr.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-By-6sXDp.js +0 -2
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/HomePage-DVOi7rR1.js +0 -2
- package/dashboard/dist/assets/ListToolbar-Bntl2hex.js +0 -2
- package/dashboard/dist/assets/McpOverview-B-xSYPJj.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-Cq71BzjB.js +0 -5
- package/dashboard/dist/assets/McpQueryPage-Dfz87aZF.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-MUYvUYqz.js +0 -2
- package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-Rih1SZrn.js +0 -2
- package/dashboard/dist/assets/PageHeader-Bo0SpcCK.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-7K5BdhOj.js +0 -2
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-BMkWCjqD.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-vZjUSc7S.js +0 -2
- package/dashboard/dist/assets/RolePill-BDzPFQUv.js +0 -2
- package/dashboard/dist/assets/RolesPage-kjeAsj3_.js +0 -2
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-DC4SLtTq.js +0 -2
- package/dashboard/dist/assets/ServerName-CEOFF7UG.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-MUUXgT3o.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-MUUXgT3o.js.map +0 -1
- package/dashboard/dist/assets/TagInput-VBY0xIwb.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-C0AlG_2t.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-C0AlG_2t.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-DZykFijh.js +0 -2
- package/dashboard/dist/assets/TasksListPage-69ZWCaCP.js +0 -2
- package/dashboard/dist/assets/TimeAgo-CttiZG0k.js +0 -2
- package/dashboard/dist/assets/TimestampCell-CYFbEhqc.js +0 -2
- package/dashboard/dist/assets/ToolPill-RP2Tvlrx.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js.map +0 -1
- package/dashboard/dist/assets/TopicDetailPage-Aq4-6GLl.js +0 -9
- package/dashboard/dist/assets/TopicsPage-BYFKjRY_.js +0 -2
- package/dashboard/dist/assets/UserName-C4_T5-rI.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-_LMWc-OC.js +0 -2
- package/dashboard/dist/assets/WorkflowsOverview-DFrfw554.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-CZzGwfol.js +0 -2
- package/dashboard/dist/assets/escalation-BZjS2202.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DtRVmPSB.js +0 -2
- package/dashboard/dist/assets/helpers-BngVEys5.js +0 -2
- package/dashboard/dist/assets/index-ABsZZf_U.js +0 -2
- package/dashboard/dist/assets/index-BCsShN2l.js +0 -6
- package/dashboard/dist/assets/index-Bq5MSkCL.js +0 -2
- package/dashboard/dist/assets/index-BwivT39P.js +0 -2
- package/dashboard/dist/assets/index-Byp8BDPs.js +0 -2
- package/dashboard/dist/assets/index-ByxH4qQ-.js +0 -2
- package/dashboard/dist/assets/index-COgyD_H2.js +0 -2
- package/dashboard/dist/assets/index-DXEYynKO.css +0 -1
- package/dashboard/dist/assets/index-DcpCR9c_.js +0 -63
- package/dashboard/dist/assets/index-DcpCR9c_.js.map +0 -1
- package/dashboard/dist/assets/index-DuPY59Yu.js +0 -5
- package/dashboard/dist/assets/index-DuPY59Yu.js.map +0 -1
- package/dashboard/dist/assets/index-DxMNiFPS.js +0 -2
- package/dashboard/dist/assets/index-DykjJxzr.js +0 -15
- package/dashboard/dist/assets/index-R61-yG56.js +0 -2
- package/dashboard/dist/assets/index-xgl431mG.js +0 -2
- package/dashboard/dist/assets/namespaces-BBTvHnRF.js +0 -2
- package/dashboard/dist/assets/settings-nt6qyR1S.js +0 -2
- package/dashboard/dist/assets/settings-nt6qyR1S.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-CkJOmbF-.js +0 -2
- package/dashboard/dist/assets/useEventHooks-CkJOmbF-.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 @@
|
|
|
1
|
+
{"version":3,"file":"TaskDetailPage-CoZFkJ6d.js","sources":["../../src/components/common/data/Field.tsx","../../src/components/common/display/Timeline.tsx","../../src/pages/workflows/TaskDetailPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SectionLabel } from '../layout/SectionLabel';\n\ninterface FieldProps {\n label: string;\n value: ReactNode;\n}\n\nexport function Field({ label, value }: FieldProps) {\n return (\n <div>\n <SectionLabel className=\"mb-1\">{label}</SectionLabel>\n <div className=\"text-sm text-text-primary\">{value ?? '—'}</div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface TimelineItem {\n id: string | number;\n label: string;\n timestamp?: string;\n detail?: ReactNode;\n category?: 'system' | 'user';\n}\n\nexport function Timeline({ items }: { items: TimelineItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border\" />\n\n <div className=\"space-y-0\">\n {items.map((item) => (\n <div key={item.id} className=\"relative flex gap-4 py-3\">\n {/* Dot */}\n <div className=\"relative z-10 mt-1\">\n <div\n className={`w-[15px] h-[15px] rounded-full border-2 ${\n item.category === 'system'\n ? 'border-accent-muted bg-surface-raised'\n : 'border-accent bg-accent'\n }`}\n />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-3\">\n <p className=\"text-sm text-text-primary\">{item.label}</p>\n {item.timestamp && (\n <time className=\"text-[10px] text-text-tertiary font-mono shrink-0\">\n {new Date(item.timestamp).toLocaleTimeString()}\n </time>\n )}\n </div>\n {item.detail && <div className=\"mt-1\">{item.detail}</div>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useParams, Link } from 'react-router-dom';\nimport { useTask } from '../../api/tasks';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { Field } from '../../components/common/data/Field';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { SectionLabel } from '../../components/common/layout/SectionLabel';\nimport { Timeline, type TimelineItem } from '../../components/common/display/Timeline';\n\nexport function TaskDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { data: task, isLoading } = useTask(id!);\n\n if (isLoading) {\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 if (!task) {\n return <p className=\"text-sm text-text-secondary\">Task not found.</p>;\n }\n\n const milestoneItems: TimelineItem[] = (task.milestones ?? []).map((m, i) => ({\n id: i,\n label: m.name,\n timestamp: m.created_at,\n detail: (\n <span className=\"text-xs text-text-secondary font-mono\">\n {typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value)}\n </span>\n ),\n category: 'user' as const,\n }));\n\n return (\n <div>\n <PageHeader title=\"Task Detail\" />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n {/* Left column — metadata */}\n <div className=\"lg:col-span-2 space-y-10\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-6\">\n <Field label=\"Status\" value={<StatusBadge status={task.status} />} />\n <Field label=\"Priority\" value={<PriorityBadge priority={task.priority} />} />\n <Field label=\"Workflow Type\" value={<span className=\"font-mono text-xs\">{task.workflow_type}</span>} />\n <Field label=\"LT Type\" value={<span className=\"font-mono text-xs\">{task.lt_type}</span>} />\n <Field label=\"Task Queue\" value={<span className=\"font-mono text-xs\">{task.task_queue}</span>} />\n <Field label=\"Workflow ID\" value={<span className=\"font-mono text-xs break-all\">{task.workflow_id}</span>} />\n <Field label=\"Started\" value={task.started_at ? new Date(task.started_at).toLocaleString() : '—'} />\n <Field label=\"Completed\" value={task.completed_at ? new Date(task.completed_at).toLocaleString() : '—'} />\n <Field label=\"Signal ID\" value={<span className=\"font-mono text-xs break-all\">{task.signal_id}</span>} />\n </div>\n\n {task.error && (\n <div>\n <SectionLabel className=\"mb-2 text-status-error\">Error</SectionLabel>\n <p className=\"text-sm text-text-primary font-mono\">{task.error}</p>\n </div>\n )}\n\n {milestoneItems.length > 0 && (\n <div>\n <SectionLabel className=\"mb-4\">Milestones</SectionLabel>\n <Timeline items={milestoneItems} />\n </div>\n )}\n\n <Link\n to={`/workflows/executions/${task.workflow_id}`}\n className=\"btn-secondary inline-block text-xs\"\n >\n View Workflow Execution\n </Link>\n </div>\n\n {/* Right column — payloads */}\n <div className=\"space-y-8\">\n <JsonViewer data={task.envelope} label=\"Envelope\" />\n {task.metadata && <JsonViewer data={task.metadata} label=\"Metadata\" />}\n {task.data && <JsonViewer data={task.data} label=\"Result Data\" />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Field","label","value","jsxDEV","SectionLabel","Timeline","items","item","TaskDetailPage","id","useParams","task","isLoading","useTask","milestoneItems","m","i","PageHeader","StatusBadge","PriorityBadge","Link","JsonViewer"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./index-4T7Z_gQ4.js";import{R as r}from"./vendor-icons-D8-ZINAH.js";function i({queue:o,size:e="sm"}){const a=e==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",t=e==="md"?"w-3 h-3":"w-2.5 h-2.5";return s.jsxDEV("span",{className:`inline-flex items-center ${a} font-mono border-y border-surface-border/50 text-text-secondary`,children:[s.jsxDEV(r,{className:`${t} shrink-0 text-accent/75`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/TaskQueuePill.tsx",lineNumber:16,columnNumber:7},this),o]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/TaskQueuePill.tsx",lineNumber:15,columnNumber:5},this)}export{i as T};
|
|
2
|
+
//# sourceMappingURL=TaskQueuePill-BJRUjVDv.js.map
|
package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js.map → TaskQueuePill-BJRUjVDv.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskQueuePill-
|
|
1
|
+
{"version":3,"file":"TaskQueuePill-BJRUjVDv.js","sources":["../../src/components/common/display/TaskQueuePill.tsx"],"sourcesContent":["import { Radio } from 'lucide-react';\n\ninterface TaskQueuePillProps {\n queue: string;\n size?: 'sm' | 'md';\n}\n\nexport function TaskQueuePill({ queue, size = 'sm' }: TaskQueuePillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-[11px] gap-1.5'\n : 'px-2 py-0.5 text-[10px] gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono border-y border-surface-border/50 text-text-secondary`}>\n <Radio className={`${iconClass} shrink-0 text-accent/75`} />\n {queue}\n </span>\n );\n}\n"],"names":["TaskQueuePill","queue","size","sizeClass","iconClass","jsxDEV","Radio"],"mappings":"uFAOO,SAASA,EAAc,CAAE,MAAAC,EAAO,KAAAC,EAAO,MAA4B,CACxE,MAAMC,EAAYD,IAAS,KACvB,oCACA,gCACEE,EAAYF,IAAS,KAAO,UAAY,cAE9C,OACEG,EAAAA,OAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,mEACpD,SAAA,CAAAE,SAACC,EAAA,CAAM,UAAW,GAAGF,CAAS,0BAAA,EAA9B,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA0D,EACzDH,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./index-4T7Z_gQ4.js";import{c as u}from"./tasks-CL6Gv8jB.js";import{u as g}from"./workflows-BNbocg_9.js";import{u as w}from"./useFilterParams-CGRYFw_A.js";import{D as b}from"./DataTable-DGerT2ZM.js";import{S as c}from"./StatusBadge-ME2R6a7K.js";import{P as k}from"./PriorityBadge-DMyB3WLZ.js";import{T as n}from"./TimeAgo-CJ56IUy6.js";import{S as N}from"./StickyPagination-Ddy93Q5I.js";import{F as x,b as m}from"./FilterBar-TYiTtUgv.js";import{P as y}from"./PageHeader-DF4BeEm4.js";import{W as P}from"./WorkflowPill-B5B3yGlh.js";import{c as v}from"./vendor-react-Co3Y8ikm.js";import"./vendor-query-DLp59M9_.js";import"./vendor-icons-D8-ZINAH.js";import"./EmptyState-DMldv8c5.js";const h=[{value:"pending",label:"Pending"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"},{value:"needs_intervention",label:"Needs Intervention"},{value:"cancelled",label:"Cancelled"}],T=[{key:"status",label:"Status",render:e=>s.jsxDEV(c,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:27,columnNumber:22},void 0),className:"w-40"},{key:"workflow_type",label:"Workflow Type",render:e=>s.jsxDEV(P,{type:e.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:33,columnNumber:22},void 0)},{key:"lt_type",label:"LT Type",render:e=>s.jsxDEV("span",{className:"text-text-secondary text-xs",children:e.lt_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:39,columnNumber:7},void 0)},{key:"priority",label:"Priority",render:e=>s.jsxDEV(k,{priority:e.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:45,columnNumber:22},void 0),className:"w-20"},{key:"started_at",label:"Started",render:e=>s.jsxDEV(n,{date:e.started_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:51,columnNumber:22},void 0),className:"w-28"},{key:"updated_at",label:"Updated",render:e=>s.jsxDEV(n,{date:e.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:57,columnNumber:22},void 0),className:"w-28"}];function M(){const e=v(),{filters:r,setFilter:l,pagination:o}=w({filters:{status:"",workflow_type:""}}),{data:p}=g(),d=[...new Set((p??[]).map(a=>a.workflow_type))].sort(),{data:t,isLoading:f}=u({status:r.status||void 0,workflow_type:r.workflow_type||void 0,limit:o.pageSize,offset:o.offset}),i=(t==null?void 0:t.total)??0;return s.jsxDEV("div",{children:[s.jsxDEV(y,{title:"Tasks"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:82,columnNumber:7},this),s.jsxDEV(x,{children:[s.jsxDEV(m,{label:"Status",value:r.status,onChange:a=>l("status",a),options:h},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:85,columnNumber:9},this),s.jsxDEV(m,{label:"Workflow Type",value:r.workflow_type,onChange:a=>l("workflow_type",a),options:d.map(a=>({value:a,label:a}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:91,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:84,columnNumber:7},this),s.jsxDEV(b,{columns:T,data:(t==null?void 0:t.tasks)??[],keyFn:a=>a.id,onRowClick:a=>e(`/workflows/tasks/detail/${a.id}`),isLoading:f,emptyMessage:"No tasks found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:99,columnNumber:7},this),s.jsxDEV(N,{page:o.page,totalPages:o.totalPages(i),onPageChange:o.setPage,total:i,pageSize:o.pageSize,onPageSizeChange:o.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:108,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/TasksListPage.tsx",lineNumber:81,columnNumber:5},this)}export{M as TasksListPage};
|
|
2
|
+
//# sourceMappingURL=TasksListPage-Czu08px3.js.map
|
package/dashboard/dist/assets/{TasksListPage-69ZWCaCP.js.map → TasksListPage-Czu08px3.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksListPage-
|
|
1
|
+
{"version":3,"file":"TasksListPage-Czu08px3.js","sources":["../../src/pages/workflows/TasksListPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useTasks } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport type { LTTaskRecord } from '../../api/types';\n\nconst statusOptions = [\n { value: 'pending', label: 'Pending' },\n { value: 'in_progress', label: 'In Progress' },\n { value: 'completed', label: 'Completed' },\n { value: 'needs_intervention', label: 'Needs Intervention' },\n { value: 'cancelled', label: 'Cancelled' },\n];\n\nconst columns: Column<LTTaskRecord>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-40',\n },\n {\n key: 'workflow_type',\n label: 'Workflow Type',\n render: (row) => <WorkflowPill type={row.workflow_type} />,\n },\n {\n key: 'lt_type',\n label: 'LT Type',\n render: (row) => (\n <span className=\"text-text-secondary text-xs\">{row.lt_type}</span>\n ),\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.started_at} />,\n className: 'w-28',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimeAgo date={row.updated_at} />,\n className: 'w-28',\n },\n];\n\nexport function TasksListPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', workflow_type: '' },\n });\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading } = useTasks({\n status: filters.status || undefined,\n workflow_type: filters.workflow_type || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Tasks\" />\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.tasks ?? []}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/workflows/tasks/detail/${row.id}`)}\n isLoading={isLoading}\n emptyMessage=\"No tasks found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["statusOptions","columns","row","StatusBadge","this","WorkflowPill","jsxDEV","PriorityBadge","TimeAgo","TasksListPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","useTasks","total","PageHeader","FilterBar","FilterSelect","v","t","DataTable","StickyPagination"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as a,d as m}from"./index-4T7Z_gQ4.js";function r({date:e,className:o=""}){return a.jsxDEV(m,{date:e,format:"relative",className:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/TimeAgo.tsx",lineNumber:8,columnNumber:10},this)}export{r as T};
|
|
2
|
+
//# sourceMappingURL=TimeAgo-CJ56IUy6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeAgo-
|
|
1
|
+
{"version":3,"file":"TimeAgo-CJ56IUy6.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\n/**\n * Relative time display (\"5 minutes ago\").\n * Thin wrapper around DateValue for backward compatibility.\n */\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n return <DateValue date={date} format=\"relative\" className={className} />;\n}\n"],"names":["TimeAgo","date","className","jsxDEV","DateValue"],"mappings":"+CAMO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,OAAOC,EAAAA,OAACC,EAAA,CAAU,KAAAH,EAAY,OAAO,WAAW,UAAAC,CAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAA+D,CACxE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,d as s}from"./index-4T7Z_gQ4.js";function a({date:m}){return e.jsxDEV("div",{children:[e.jsxDEV(s,{date:m,format:"relative"},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/TimestampCell.tsx",lineNumber:14,columnNumber:7},this),e.jsxDEV("p",{className:"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(m).toISOString().replace("T"," ").slice(0,19)," UTC"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/TimestampCell.tsx",lineNumber:15,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/TimestampCell.tsx",lineNumber:13,columnNumber:5},this)}export{a as T};
|
|
2
|
+
//# sourceMappingURL=TimestampCell-QtcYZ9Jx.js.map
|
package/dashboard/dist/assets/{TimestampCell-CYFbEhqc.js.map → TimestampCell-QtcYZ9Jx.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimestampCell-
|
|
1
|
+
{"version":3,"file":"TimestampCell-QtcYZ9Jx.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <DateValue date={date} format=\"relative\" />\n <p className=\"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsxDEV","DateValue"],"mappings":"+CAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,gBACG,MAAA,CACC,SAAA,CAAAC,EAAAA,OAACC,EAAA,CAAU,KAAAF,EAAY,OAAO,UAAA,EAA9B,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAyC,EACzCC,EAAAA,OAAC,IAAA,CAAE,UAAU,oEACV,SAAA,CAAA,IAAI,KAAKD,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,EAD/D,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as r}from"./index-4T7Z_gQ4.js";import{ac as a}from"./vendor-icons-D8-ZINAH.js";const c=["Describe","Discover","Compile","Deploy","Test","Verify"];function m(t){return t?t.status==="completed"?"completed":t.status==="failed"?"failed":"in_progress":"pending"}function f(t){const e=t.match(/```json\s*([\s\S]*?)```/)||t.match(/\{[\s\S]*?\n\}/);if(!e)return null;try{return JSON.parse((e[1]??e[0]).trim())}catch{return null}}const l=new Set(["token","authorization","bearer_token","access_token","api_token"]);function d(t){if(!(t!=null&&t.properties))return{};const e={},o=sessionStorage.getItem("lt_token")||"";for(const[s,i]of Object.entries(t.properties)){const n=i;n.default!==void 0?e[s]=n.default:l.has(s.toLowerCase())&&n.type==="string"?e[s]=o:n.type==="string"?e[s]="":n.type==="number"||n.type==="integer"?e[s]=n.minimum??0:n.type==="boolean"?e[s]=!1:n.type==="object"?e[s]={}:n.type==="array"?e[s]=[]:e[s]=null}return e}function x({name:t,size:e="sm"}){const o=e==="md"?"px-2 py-0.5 text-[12px] gap-1.5":"px-1.5 py-px text-[11px] gap-1",s=e==="md"?"w-2.5 h-2.5":"w-2 h-2";return r.jsxDEV("span",{className:`inline-flex items-center ${o} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`,children:[r.jsxDEV(a,{className:`${s} shrink-0 text-text-quaternary`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/ToolPill.tsx",lineNumber:20,columnNumber:7},this),t]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/ToolPill.tsx",lineNumber:19,columnNumber:5},this)}export{c as S,x as T,d as b,f as e,m};
|
|
2
|
+
//# sourceMappingURL=ToolPill-DpDv3FwI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPill-
|
|
1
|
+
{"version":3,"file":"ToolPill-DpDv3FwI.js","sources":["../../src/pages/mcp/mcp-query-detail/helpers.ts","../../src/components/common/display/ToolPill.tsx"],"sourcesContent":["// ── Shared helpers for MCP Query Detail wizard panels ────────────────────────\n\nexport type Step = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const STEP_LABELS_BASE = ['Describe', 'Discover', 'Compile', 'Deploy', 'Test', 'Verify'] as const;\n\nexport function mapStatus(exec: { status?: string } | undefined): string {\n if (!exec) return 'pending';\n if (exec.status === 'completed') return 'completed';\n if (exec.status === 'failed') return 'failed';\n return 'in_progress';\n}\n\nexport function extractJsonFromSummary(summary: string): Record<string, unknown> | null {\n const match = summary.match(/```json\\s*([\\s\\S]*?)```/) || summary.match(/\\{[\\s\\S]*?\\n\\}/);\n if (!match) return null;\n try { return JSON.parse((match[1] ?? match[0]).trim()); } catch { return null; }\n}\n\n// ── Helpers migrated from yaml-workflow-detail ───────────────────────────────\n\nexport type Section = 'invoke' | 'tools' | 'config';\n\n/** Keys that should auto-fill with the current session token when building test input skeletons. */\nconst TOKEN_FIELD_NAMES = new Set(['token', 'authorization', 'bearer_token', 'access_token', 'api_token']);\n\nexport function buildSkeleton(schema: Record<string, any>): Record<string, any> {\n if (!schema?.properties) return {};\n const result: Record<string, any> = {};\n // Auto-fill token fields with the current session token so test invocations\n // always use a fresh credential instead of requiring manual paste.\n const sessionToken = sessionStorage.getItem('lt_token') || '';\n for (const [key, prop] of Object.entries(schema.properties)) {\n const p = prop as any;\n if (p.default !== undefined) result[key] = p.default;\n else if (TOKEN_FIELD_NAMES.has(key.toLowerCase()) && p.type === 'string') result[key] = sessionToken;\n else if (p.type === 'string') result[key] = '';\n else if (p.type === 'number' || p.type === 'integer') result[key] = p.minimum ?? 0;\n else if (p.type === 'boolean') result[key] = false;\n else if (p.type === 'object') result[key] = {};\n else if (p.type === 'array') result[key] = [];\n else result[key] = null;\n }\n return result;\n}\n\nexport function inferFieldType(schemaProp: any): string {\n if (!schemaProp) return 'string';\n return schemaProp.type || 'string';\n}\n\nexport const metadataLabels: Record<string, string> = {\n app: 'MCP Workflow Server', tpc: 'MCP Workflow Tool', vrs: 'Version', ngn: 'Engine ID',\n jid: 'Job ID', gid: 'Run ID', aid: 'Activity ID', ts: 'Time Series',\n jc: 'Created', ju: 'Updated', trc: 'Trace ID', js: 'Job Status',\n};\n\nexport const jobStatusLabels: Record<number, string> = { 0: 'Completed', 1: 'Pending', 2: 'Error' };\n\nexport function parseCompactTimestamp(val: string): string {\n const match = val.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)$/);\n if (!match) return val;\n const [, y, mo, d, h, mi, s, ms] = match;\n return `${y}-${mo}-${d} ${h}:${mi}:${s}.${ms}`;\n}\n\nexport function formatMetadataValue(key: string, value: unknown): string {\n if (key === 'js' && typeof value === 'number') return jobStatusLabels[value] ?? `Unknown (${value})`;\n if ((key === 'jc' || key === 'ju') && typeof value === 'string') return parseCompactTimestamp(value);\n return String(value ?? '');\n}\n\nexport function sourceLabel(s: string | undefined) {\n if (s === 'llm') return 'LLM';\n if (s === 'db') return 'DB';\n return 'MCP';\n}\n\nexport function sourceColor(s: string | undefined) {\n if (s === 'llm') return 'bg-purple-500/10 text-purple-400 border-purple-500/20';\n return 'bg-accent-primary/10 text-accent border-accent-primary/20';\n}\n","import { Wrench } from 'lucide-react';\n\ninterface ToolPillProps {\n name: string;\n size?: 'sm' | 'md';\n}\n\n/**\n * Universal MCP tool pill — displays a tool name with a subtle wrench icon.\n * Used across Capabilities page, MCP Server Tools, Pipeline Tools, etc.\n */\nexport function ToolPill({ name, size = 'sm' }: ToolPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2 py-0.5 text-[12px] gap-1.5'\n : 'px-1.5 py-px text-[11px] gap-1';\n const iconClass = size === 'md' ? 'w-2.5 h-2.5' : 'w-2 h-2';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`}>\n <Wrench className={`${iconClass} shrink-0 text-text-quaternary`} strokeWidth={1.5} />\n {name}\n </span>\n );\n}\n"],"names":["STEP_LABELS_BASE","mapStatus","exec","extractJsonFromSummary","summary","match","TOKEN_FIELD_NAMES","buildSkeleton","schema","result","sessionToken","key","prop","p","ToolPill","name","size","sizeClass","iconClass","jsxDEV","Wrench"],"mappings":"wFAIO,MAAMA,EAAmB,CAAC,WAAY,WAAY,UAAW,SAAU,OAAQ,QAAQ,EAEvF,SAASC,EAAUC,EAA+C,CACvE,OAAKA,EACDA,EAAK,SAAW,YAAoB,YACpCA,EAAK,SAAW,SAAiB,SAC9B,cAHW,SAIpB,CAEO,SAASC,EAAuBC,EAAiD,CACtF,MAAMC,EAAQD,EAAQ,MAAM,yBAAyB,GAAKA,EAAQ,MAAM,gBAAgB,EACxF,GAAI,CAACC,EAAO,OAAO,KACnB,GAAI,CAAE,OAAO,KAAK,OAAOA,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAG,MAAM,CAAG,MAAQ,CAAE,OAAO,IAAM,CACjF,CAOA,MAAMC,MAAwB,IAAI,CAAC,QAAS,gBAAiB,eAAgB,eAAgB,WAAW,CAAC,EAElG,SAASC,EAAcC,EAAkD,CAC9E,GAAI,EAACA,GAAA,MAAAA,EAAQ,YAAY,MAAO,CAAA,EAChC,MAAMC,EAA8B,CAAA,EAG9BC,EAAe,eAAe,QAAQ,UAAU,GAAK,GAC3D,SAAW,CAACC,EAAKC,CAAI,IAAK,OAAO,QAAQJ,EAAO,UAAU,EAAG,CAC3D,MAAMK,EAAID,EACNC,EAAE,UAAY,OAAWJ,EAAOE,CAAG,EAAIE,EAAE,QACpCP,EAAkB,IAAIK,EAAI,YAAA,CAAa,GAAKE,EAAE,OAAS,SAAUJ,EAAOE,CAAG,EAAID,EAC/EG,EAAE,OAAS,SAAUJ,EAAOE,CAAG,EAAI,GACnCE,EAAE,OAAS,UAAYA,EAAE,OAAS,UAAWJ,EAAOE,CAAG,EAAIE,EAAE,SAAW,EACxEA,EAAE,OAAS,UAAWJ,EAAOE,CAAG,EAAI,GACpCE,EAAE,OAAS,SAAUJ,EAAOE,CAAG,EAAI,CAAA,EACnCE,EAAE,OAAS,QAASJ,EAAOE,CAAG,EAAI,CAAA,EACtCF,EAAOE,CAAG,EAAI,IACrB,CACA,OAAOF,CACT,CCjCO,SAASK,EAAS,CAAE,KAAAC,EAAM,KAAAC,EAAO,MAAuB,CAC7D,MAAMC,EAAYD,IAAS,KACvB,kCACA,iCACEE,EAAYF,IAAS,KAAO,cAAgB,UAElD,OACEG,EAAAA,OAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,iEACpD,SAAA,CAAAE,EAAAA,OAACC,GAAO,UAAW,GAAGF,CAAS,iCAAkC,YAAa,KAA9E,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAmF,EAClFH,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,J as O}from"./index-4T7Z_gQ4.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{h as q}from"./mcp-B5VQPoF3.js";import{R as k}from"./RunAsSelector-CYMeZwrM.js";import{b as A,T as L}from"./ToolPill-DpDv3FwI.js";import{S as z}from"./ServerName-D5NKD06M.js";import{X as F,ab as I,P as M,a3 as y,a8 as _}from"./vendor-icons-D8-ZINAH.js";import{L as S}from"./vendor-react-Co3Y8ikm.js";function B({error:o}){const n=o instanceof Error?o.message:"";return n.startsWith("No credential found for provider")?e.jsxDEV("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsxDEV(_,{size:14,className:"text-status-warning mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:17,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] font-medium text-text-primary mb-0.5",children:"Credential required"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:19,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-1",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:20,columnNumber:11},this),e.jsxDEV(S,{to:"/credentials",className:"text-[11px] text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsxDEV(y,{size:10},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:22,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:21,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:18,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:16,columnNumber:7},this):e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:n||"Tool call failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:30,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:29,columnNumber:5},this)}function U({data:o}){const n=o==null?void 0:o.result,a=n==null?void 0:n.job_id,p=(n==null?void 0:n.namespace)||"longtail";return a?e.jsxDEV(S,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(p)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(y,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:45,columnNumber:7},this),"View Execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:41,columnNumber:5},this):null}const f="input text-xs",g="label";function $({value:o,onChange:n,className:a}){const[p,t]=u.useState(o.join(", ")),i=()=>n(p.split(",").map(l=>l.trim()).filter(Boolean));return u.useEffect(()=>{t(o.join(", "))},[JSON.stringify(o)]),e.jsxDEV("input",{type:"text",value:p,onChange:l=>t(l.target.value),onBlur:i,onKeyDown:l=>{l.key==="Enter"&&(l.preventDefault(),i())},placeholder:"comma-separated values",className:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:68,columnNumber:5},this)}function ee({serverId:o,serverName:n,tool:a,onClose:p}){const t=q(),[i,l]=u.useState(!1),[c,N]=u.useState({}),[T,v]=u.useState(""),[P,j]=u.useState(""),[E,C]=u.useState("");u.useEffect(()=>{const s=A(a.inputSchema);N(s),v(JSON.stringify(s,null,2)),l(!1),j(""),t.reset()},[a.name,o]);const w=!!t.data||!!t.error,R=()=>{if(!i)v(JSON.stringify(c,null,2));else try{N(JSON.parse(T))}catch{}l(!i)},J=()=>{j(""),t.reset();let s;if(i)try{s=JSON.parse(T)}catch{j("Invalid JSON");return}else s={...c};t.mutate({serverId:o,toolName:a.name,arguments:s,...E?{execute_as:E}:{}})};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised",children:[e.jsxDEV("div",{className:"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0",children:[e.jsxDEV("div",{className:"min-w-0 space-y-1",children:[e.jsxDEV(z,{name:n,serverId:o,short:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:130,columnNumber:11},this),e.jsxDEV("div",{children:e.jsxDEV(L,{name:a.name,size:"md"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:131,columnNumber:16},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:131,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:129,columnNumber:9},this),e.jsxDEV("button",{onClick:p,className:"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(F,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:134,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:133,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:128,columnNumber:7},this),e.jsxDEV("div",{className:"px-4 py-4 space-y-5",children:[a.description&&e.jsxDEV("div",{className:"border-l-2 border-accent/30 pl-3 py-1",children:e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed italic",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:142,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:141,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:g,children:"run as"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:148,columnNumber:11},this),e.jsxDEV(k,{selected:E,onChange:C},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:149,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:147,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-2",children:[e.jsxDEV("span",{className:"text-[10px] text-text-quaternary",children:"Parameters"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:155,columnNumber:13},this),e.jsxDEV("button",{onClick:R,className:"text-[10px] text-accent/70 hover:text-accent transition-colors",children:i?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:156,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:154,columnNumber:11},this),i?e.jsxDEV("textarea",{value:T,onChange:s=>v(s.target.value),className:"input-json w-full",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:162,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3",children:[Object.entries(c).sort(([s],[m])=>{var h;const r=((h=a.inputSchema)==null?void 0:h.required)??[],b=r.indexOf(s),x=r.indexOf(m);return b!==-1&&x!==-1?b-x:b!==-1?-1:x!==-1?1:s.localeCompare(m)}).map(([s,m])=>{var h,D,V;const r=(D=(h=a.inputSchema)==null?void 0:h.properties)==null?void 0:D[s],b=r==null?void 0:r.description,x=(((V=a.inputSchema)==null?void 0:V.required)??[]).includes(s);return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:g,children:[s,x&&e.jsxDEV("span",{className:"text-accent/50 ml-0.5",children:"*"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:187,columnNumber:38},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:185,columnNumber:21},this),typeof m=="boolean"?e.jsxDEV("select",{value:String(m),onChange:d=>N({...c,[s]:d.target.value==="true"}),className:f,children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:195,columnNumber:25},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:196,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:190,columnNumber:23},this):Array.isArray(m)?e.jsxDEV($,{value:m,onChange:d=>N({...c,[s]:d}),className:f},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:199,columnNumber:23},this):typeof m=="object"&&m!==null?e.jsxDEV("textarea",{value:JSON.stringify(m,null,2),onChange:d=>{try{N({...c,[s]:JSON.parse(d.target.value)})}catch{}},className:`${f} min-h-[48px] font-mono resize-y`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:205,columnNumber:23},this):e.jsxDEV("input",{type:typeof m=="number"?"number":"text",value:String(m??""),onChange:d=>N({...c,[s]:typeof m=="number"?Number(d.target.value):d.target.value}),className:f,placeholder:(r==null?void 0:r.type)==="string"&&(r==null?void 0:r.example)||""},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:211,columnNumber:23},this),b&&e.jsxDEV("p",{className:"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug",children:b},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:219,columnNumber:30},this)]},s,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:184,columnNumber:19},this)}),Object.keys(c).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-quaternary",children:"No parameters"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:224,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:170,columnNumber:13},this),P&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:P},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:228,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:153,columnNumber:9},this),e.jsxDEV("button",{onClick:J,disabled:t.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:t.isPending?"Running...":w?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(I,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:240,columnNumber:15},this)," Re-run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:240,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(M,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:242,columnNumber:15},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:242,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:232,columnNumber:9},this),t.isPending&&e.jsxDEV("div",{className:"animate-pulse",children:[e.jsxDEV("p",{className:"text-[10px] text-text-quaternary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:249,columnNumber:13},this),e.jsxDEV("div",{className:"h-20 bg-surface-sunken/50 rounded-md"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:250,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:248,columnNumber:11},this),t.data?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV(O,{data:t.data,label:"Response",defaultCollapsed:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:255,columnNumber:13},this),e.jsxDEV(U,{data:t.data},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:256,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:254,columnNumber:11},this):null,t.error?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] text-text-quaternary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:261,columnNumber:13},this),e.jsxDEV(B,{error:t.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:262,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:260,columnNumber:11},this):null]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:139,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:126,columnNumber:5},this)}export{ee as T};
|
|
2
|
+
//# sourceMappingURL=ToolTestPanel-BzFOwzd_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolTestPanel-BzFOwzd_.js","sources":["../../src/components/common/test/ToolTestPanel.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || 'longtail';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-[11px] text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-[10px] text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).sort(([a], [b]) => {\n const req = (tool.inputSchema?.required ?? []) as string[];\n const ai = req.indexOf(a);\n const bi = req.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n }).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","e","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ServerName","ToolPill","X","RunAsSelector","a","b","req","_a","ai","bi","key","propSchema","_b","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{j as e,d as b,J as V}from"./index-4T7Z_gQ4.js";import{a as i}from"./vendor-query-DLp59M9_.js";import{a as L,b as U,c as $}from"./topics-DbtPHERP.js";import{L as B}from"./ListToolbar-BO5Igi6v.js";import{R as o,B as I,J as M,n as z,aL as A,X as G,T as H,a as y}from"./vendor-icons-D8-ZINAH.js";import{e as K,c as X}from"./vendor-react-Co3Y8ikm.js";const Y={task:"bg-blue-400/15 text-blue-400",workflow:"bg-accent/15 text-accent",escalation:"bg-amber-400/15 text-amber-400",activity:"bg-cyan-400/15 text-cyan-400",knowledge:"bg-violet-400/15 text-violet-400",agent:"bg-emerald-400/15 text-emerald-400",app:"bg-rose-400/15 text-rose-400",milestone:"bg-violet-400/15 text-violet-400"};function p({icon:r,color:m,children:c}){return e.jsxDEV("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsxDEV(r,{className:`w-4 h-4 ${m}`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV("h2",{className:"text-xs font-semibold uppercase tracking-widest text-accent/80",children:c},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:24,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:22,columnNumber:5},this)}function oe(){var E,P,j;const{topic:r}=K(),m=r?decodeURIComponent(r):null,c=X(),{data:a,isLoading:w,refetch:N,isFetching:S}=L(m),h=U(),k=$(),[t,n]=i.useState(!1),[x,g]=i.useState(""),[f,D]=i.useState(""),[d,v]=i.useState(""),[T,l]=i.useState("");if(w)return 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/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:53},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:107},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:12},this);if(!a)return e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsxDEV(o,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:50,columnNumber:9},this),e.jsxDEV("h2",{className:"text-lg font-medium text-text-primary mb-2",children:"Topic not found"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:51,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:49,columnNumber:7},this);const C=a.source==="system",_=!a.managed,q=Y[a.category]??"bg-zinc-400/15 text-zinc-400",O=()=>{g(a.description??""),D((a.tags??[]).join(", ")),v(a.payload_schema?JSON.stringify(a.payload_schema,null,2):""),l(""),n(!0)},R=()=>n(!1),J=()=>{const s=f.split(",").map(F=>F.trim()).filter(Boolean);let u;if(d.trim())try{u=JSON.parse(d),l("")}catch{l("Invalid JSON");return}h.mutate({topic:a.topic,description:x,tags:s,...u!==void 0?{payload_schema:u}:{}},{onSuccess:()=>{n(!1),N()}})},W=()=>{confirm(`Delete topic "${a.topic}"?
|
|
2
|
+
|
|
3
|
+
This removes it from the catalog. Active subscriptions are not affected.`)&&k.mutate(a.topic,{onSuccess:()=>c("/topics")})};return e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV("div",{className:"flex items-start justify-between mb-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-2",children:[e.jsxDEV(o,{className:"w-5 h-5 text-accent",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:101,columnNumber:13},this),e.jsxDEV("h1",{className:"text-lg font-mono font-medium text-text-primary",children:a.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:102,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsxDEV(I,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:104,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:103,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:100,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${q}`,children:a.category},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:108,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] font-mono text-text-quaternary",children:["source: ",a.source]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:109,columnNumber:13},this),a.last_seen_at&&e.jsxDEV("span",{className:"text-[10px] text-text-quaternary",children:["last seen ",e.jsxDEV(b,{date:a.last_seen_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:111,columnNumber:76},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:111,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:107,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:99,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(B,{onRefresh:()=>N(),isFetching:S,apiPath:`/topics/by-name/${encodeURIComponent(a.topic)}`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:117,columnNumber:11},this),!t&&_&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("button",{onClick:O,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsxDEV(M,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:125,columnNumber:17},this)," Edit"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:124,columnNumber:15},this),!C&&e.jsxDEV("button",{onClick:W,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors",children:[e.jsxDEV(z,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:129,columnNumber:19},this)," Delete"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:128,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:123,columnNumber:13},this),t&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("button",{onClick:J,disabled:h.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsxDEV(A,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:137,columnNumber:17},this)," Save"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:136,columnNumber:15},this),e.jsxDEV("button",{onClick:R,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsxDEV(G,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:140,columnNumber:17},this)," Cancel"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:139,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:135,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:116,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:98,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:151,columnNumber:13},this),e.jsxDEV("textarea",{value:x,onChange:s=>g(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:152,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:150,columnNumber:11},this):a.description?e.jsxDEV("p",{className:"text-sm text-text-secondary leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:162,columnNumber:15},this):e.jsxDEV("p",{className:"text-sm text-text-quaternary italic",children:"No description"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:163,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:148,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:171,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:f,onChange:s=>D(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:172,columnNumber:13},this),e.jsxDEV("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:179,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:170,columnNumber:11},this):((E=a.tags)==null?void 0:E.length)>0?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(H,{className:"w-3 h-3 text-text-quaternary",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:183,columnNumber:13},this),a.tags.map(s=>e.jsxDEV("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken",children:s},s,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:185,columnNumber:15},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:182,columnNumber:11},this):null},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:197,columnNumber:13},this),e.jsxDEV("textarea",{value:d,onChange:s=>{v(s.target.value),l("")},rows:12,className:"input-json w-full",placeholder:`{
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"orderId": { "type": "string" }
|
|
7
|
+
}
|
|
8
|
+
}`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:198,columnNumber:13},this),T&&e.jsxDEV("p",{className:"text-[10px] text-red-400 mt-1",children:T},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:205,columnNumber:29},this),e.jsxDEV("p",{className:"hint",children:"JSON Schema describing the event.data shape. Shown in subscription editor as field reference."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:206,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:196,columnNumber:11},this):a.payload_schema?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(p,{icon:o,color:"text-accent",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:210,columnNumber:13},this),e.jsxDEV(V,{data:a.payload_schema},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:211,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:209,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(p,{icon:o,color:"text-accent",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:215,columnNumber:13},this),e.jsxDEV("p",{className:"text-[11px] text-text-quaternary",children:"No schema defined. Click Edit to add one."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:216,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:214,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:194,columnNumber:7},this),a.example_payload&&e.jsxDEV("div",{className:"mb-8",children:[e.jsxDEV(p,{icon:o,color:"text-cyan-400",children:"Example Payload"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:224,columnNumber:11},this),e.jsxDEV(V,{data:a.example_payload},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:225,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:223,columnNumber:9},this),e.jsxDEV("div",{className:"mb-8",children:[e.jsxDEV(p,{icon:y,color:"text-emerald-400",children:["Subscribers (",((P=a.subscribers)==null?void 0:P.length)??0,")"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:231,columnNumber:9},this),(j=a.subscribers)!=null&&j.length?e.jsxDEV("div",{className:"space-y-1",children:a.subscribers.map(s=>e.jsxDEV("div",{className:"flex items-center justify-between py-2 px-3 rounded-md hover:bg-surface-hover transition-colors",children:[e.jsxDEV("button",{onClick:()=>c(`/agents/${s.agent_id}`),className:"flex items-center gap-2 text-left min-w-0",children:[e.jsxDEV(y,{className:"w-3 h-3 text-emerald-400 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:242,columnNumber:19},this),e.jsxDEV("span",{className:"text-xs text-text-primary hover:text-accent transition-colors",children:s.agent_name},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:243,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:238,columnNumber:17},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-[10px] font-mono text-text-quaternary",children:s.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:246,columnNumber:19},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:s.reaction_type},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:247,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:245,columnNumber:17},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:237,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:235,columnNumber:11},this):e.jsxDEV("p",{className:"text-[11px] text-text-quaternary py-2",children:"No agents are subscribed to this topic."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:253,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:230,columnNumber:7},this),e.jsxDEV("div",{className:"text-[10px] text-text-quaternary space-y-1 pt-4 border-t border-surface-border",children:[e.jsxDEV("p",{children:["Created ",e.jsxDEV(b,{date:a.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:259,columnNumber:20},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:259,columnNumber:9},this),e.jsxDEV("p",{children:["Updated ",e.jsxDEV(b,{date:a.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:260,columnNumber:20},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:260,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:258,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:96,columnNumber:5},this)}export{oe as TopicDetailPage};
|
|
9
|
+
//# sourceMappingURL=TopicDetailPage-DwShZbh9.js.map
|
package/dashboard/dist/assets/{TopicDetailPage-Aq4-6GLl.js.map → TopicDetailPage-DwShZbh9.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicDetailPage-Aq4-6GLl.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n\n const [editing, setEditing] = useState(false);\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const isManaged = topic.managed;\n const editable = !isManaged;\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-zinc-400/15 text-zinc-400';\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div className=\"max-w-3xl\">\n {/* Header */}\n <div className=\"flex items-start justify-between mb-6\">\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n <span className=\"text-[10px] font-mono text-text-quaternary\">source: {topic.source}</span>\n {topic.last_seen_at && (\n <span className=\"text-[10px] text-text-quaternary\">last seen <DateValue date={topic.last_seen_at} /></span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`}\n />\n {!editing && editable && (\n <>\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n {!isSystem && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n </>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Description */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n ) : (\n topic.description\n ? <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n : <p className=\"text-sm text-text-quaternary italic\">No description</p>\n )}\n </div>\n\n {/* Tags */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n ) : topic.tags?.length > 0 ? (\n <div className=\"flex items-center gap-2\">\n <Tag className=\"w-3 h-3 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">\n {tag}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n\n {/* Payload Schema */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-red-400 mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape. Shown in subscription editor as field reference.</p>\n </div>\n ) : topic.payload_schema ? (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <JsonViewer data={topic.payload_schema} />\n </>\n ) : (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n </>\n )}\n </div>\n\n {/* Example Payload */}\n {topic.example_payload && (\n <div className=\"mb-8\">\n <SectionHeader icon={Radio} color=\"text-cyan-400\">Example Payload</SectionHeader>\n <JsonViewer data={topic.example_payload} />\n </div>\n )}\n\n {/* Subscribers */}\n <div className=\"mb-8\">\n <SectionHeader icon={Bot} color=\"text-emerald-400\">\n Subscribers ({topic.subscribers?.length ?? 0})\n </SectionHeader>\n {topic.subscribers?.length ? (\n <div className=\"space-y-1\">\n {topic.subscribers.map((sub) => (\n <div key={sub.id} className=\"flex items-center justify-between py-2 px-3 rounded-md hover:bg-surface-hover transition-colors\">\n <button\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 text-left min-w-0\"\n >\n <Bot className=\"w-3 h-3 text-emerald-400 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-xs text-text-primary hover:text-accent transition-colors\">{sub.agent_name}</span>\n </button>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] font-mono text-text-quaternary\">{sub.topic}</span>\n <span className=\"text-[10px] text-text-tertiary\">{sub.reaction_type}</span>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary py-2\">No agents are subscribed to this topic.</p>\n )}\n </div>\n\n {/* Metadata */}\n <div className=\"text-[10px] text-text-quaternary space-y-1 pt-4 border-t border-surface-border\">\n <p>Created <DateValue date={topic.created_at} /></p>\n <p>Updated <DateValue date={topic.updated_at} /></p>\n </div>\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxs","jsx","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","editing","setEditing","useState","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","editable","categoryPillCls","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","DateValue","ListToolbar","Fragment","Pencil","Trash2","Save","X","e","_a","Tag","tag","JsonViewer","Bot","_b","_c","sub"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TopicDetailPage-DwShZbh9.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n\n const [editing, setEditing] = useState(false);\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const isManaged = topic.managed;\n const editable = !isManaged;\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-zinc-400/15 text-zinc-400';\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div className=\"max-w-3xl\">\n {/* Header */}\n <div className=\"flex items-start justify-between mb-6\">\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n <span className=\"text-[10px] font-mono text-text-quaternary\">source: {topic.source}</span>\n {topic.last_seen_at && (\n <span className=\"text-[10px] text-text-quaternary\">last seen <DateValue date={topic.last_seen_at} /></span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`}\n />\n {!editing && editable && (\n <>\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n {!isSystem && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n </>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Description */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n ) : (\n topic.description\n ? <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n : <p className=\"text-sm text-text-quaternary italic\">No description</p>\n )}\n </div>\n\n {/* Tags */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n ) : topic.tags?.length > 0 ? (\n <div className=\"flex items-center gap-2\">\n <Tag className=\"w-3 h-3 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">\n {tag}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n\n {/* Payload Schema */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-red-400 mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape. Shown in subscription editor as field reference.</p>\n </div>\n ) : topic.payload_schema ? (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <JsonViewer data={topic.payload_schema} />\n </>\n ) : (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n </>\n )}\n </div>\n\n {/* Example Payload */}\n {topic.example_payload && (\n <div className=\"mb-8\">\n <SectionHeader icon={Radio} color=\"text-cyan-400\">Example Payload</SectionHeader>\n <JsonViewer data={topic.example_payload} />\n </div>\n )}\n\n {/* Subscribers */}\n <div className=\"mb-8\">\n <SectionHeader icon={Bot} color=\"text-emerald-400\">\n Subscribers ({topic.subscribers?.length ?? 0})\n </SectionHeader>\n {topic.subscribers?.length ? (\n <div className=\"space-y-1\">\n {topic.subscribers.map((sub) => (\n <div key={sub.id} className=\"flex items-center justify-between py-2 px-3 rounded-md hover:bg-surface-hover transition-colors\">\n <button\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 text-left min-w-0\"\n >\n <Bot className=\"w-3 h-3 text-emerald-400 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-xs text-text-primary hover:text-accent transition-colors\">{sub.agent_name}</span>\n </button>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] font-mono text-text-quaternary\">{sub.topic}</span>\n <span className=\"text-[10px] text-text-tertiary\">{sub.reaction_type}</span>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary py-2\">No agents are subscribed to this topic.</p>\n )}\n </div>\n\n {/* Metadata */}\n <div className=\"text-[10px] text-text-quaternary space-y-1 pt-4 border-t border-surface-border\">\n <p>Created <DateValue date={topic.created_at} /></p>\n <p>Updated <DateValue date={topic.updated_at} /></p>\n </div>\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxDEV","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","editing","setEditing","useState","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","editable","categoryPillCls","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","DateValue","ListToolbar","Fragment","Pencil","Trash2","Save","X","e","_a","Tag","tag","JsonViewer","Bot","_b","_c","sub"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,d as m}from"./index-4T7Z_gQ4.js";import{u as d}from"./topics-DbtPHERP.js";import{u}from"./useFilterParams-CGRYFw_A.js";import{D as b}from"./DataTable-DGerT2ZM.js";import{S as g}from"./StickyPagination-Ddy93Q5I.js";import{F as f,b as x}from"./FilterBar-TYiTtUgv.js";import{P as N}from"./PageHeader-DF4BeEm4.js";import{L as h}from"./ListToolbar-BO5Igi6v.js";import{R as v}from"./vendor-icons-D8-ZINAH.js";import{c as y}from"./vendor-react-Co3Y8ikm.js";import"./vendor-query-DLp59M9_.js";import"./EmptyState-DMldv8c5.js";const P={task:"bg-blue-400/15 text-blue-400",workflow:"bg-accent/15 text-accent",escalation:"bg-amber-400/15 text-amber-400",activity:"bg-cyan-400/15 text-cyan-400",knowledge:"bg-violet-400/15 text-violet-400",agent:"bg-emerald-400/15 text-emerald-400",app:"bg-rose-400/15 text-rose-400",milestone:"bg-violet-400/15 text-violet-400"},T=[{value:"task",label:"Task"},{value:"workflow",label:"Workflow"},{value:"escalation",label:"Escalation"},{value:"activity",label:"Activity"},{value:"knowledge",label:"Knowledge"},{value:"agent",label:"Agent"},{value:"app",label:"App"},{value:"milestone",label:"Milestone"}];function D({category:a}){const s=P[a]??"bg-zinc-400/15 text-zinc-400";return e.jsxDEV("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${s}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:37,columnNumber:5},this)}const E=[{key:"topic",label:"Topic",render:a=>e.jsxDEV("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsxDEV(v,{className:"w-3 h-3 shrink-0 text-text-quaternary",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:49,columnNumber:9},void 0),e.jsxDEV("span",{className:"text-xs font-mono text-text-primary truncate",children:a.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:50,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:48,columnNumber:7},void 0)},{key:"category",label:"Category",render:a=>e.jsxDEV(D,{category:a.category},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:57,columnNumber:22},void 0),className:"w-28"},{key:"description",label:"Description",render:a=>a.description?e.jsxDEV("span",{className:"text-[11px] text-text-secondary truncate block max-w-xs",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:64,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:65,columnNumber:9},void 0)},{key:"source",label:"Source",render:a=>e.jsxDEV("span",{className:"text-[10px] font-mono text-text-tertiary",children:a.source},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:71,columnNumber:7},void 0),className:"w-24"},{key:"subscriber_count",label:"Subscribers",render:a=>{const s=a.subscriber_count??0;return s?e.jsxDEV("span",{className:"inline-flex items-center justify-center min-w-[20px] px-1.5 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:82,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:80,columnNumber:26},void 0)},className:"w-24 text-center"},{key:"last_seen_at",label:"Last Seen",render:a=>a.last_seen_at?e.jsxDEV("span",{className:"whitespace-nowrap",children:e.jsxDEV(m,{date:a.last_seen_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:93,columnNumber:45},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:93,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:94,columnNumber:9},void 0),className:"w-28"}];function A(){const a=y(),{filters:s,setFilter:l,pagination:t}=u({filters:{category:""}}),{data:i,isLoading:c,refetch:n,isFetching:p}=d({category:s.category||void 0,limit:t.pageSize,offset:t.offset}),r=(i==null?void 0:i.total)??0;return e.jsxDEV("div",{children:[e.jsxDEV(N,{title:"Topic Catalog",docsHash:"#docs:topics.md"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:116,columnNumber:7},this),e.jsxDEV(f,{actions:e.jsxDEV(h,{onRefresh:()=>n(),isFetching:p,apiPath:`/topics?limit=${t.pageSize}&offset=${t.offset}${s.category?`&category=${s.category}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:119,columnNumber:9},this),children:e.jsxDEV(x,{label:"Category",value:s.category,onChange:o=>l("category",o),options:T},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:125,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:118,columnNumber:7},this),e.jsxDEV(b,{columns:E,data:(i==null?void 0:i.topics)??[],keyFn:o=>o.topic,onRowClick:o=>a(`/topics/${encodeURIComponent(o.topic)}`),isLoading:c,emptyMessage:"No topics registered yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:133,columnNumber:7},this),e.jsxDEV(g,{page:t.page,totalPages:t.totalPages(r),onPageChange:t.setPage,total:r,pageSize:t.pageSize,onPageSizeChange:t.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:142,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:115,columnNumber:5},this)}export{A as TopicsPage};
|
|
2
|
+
//# sourceMappingURL=TopicsPage-DKXlpZl_.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicsPage-
|
|
1
|
+
{"version":3,"file":"TopicsPage-DKXlpZl_.js","sources":["../../src/pages/topics/TopicsPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Radio } from 'lucide-react';\nimport { useTopics, type TopicCatalogEntry } from '../../api/topics';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { DateValue } from '../../components/common/display/DateValue';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nconst CATEGORY_OPTIONS = [\n { value: 'task', label: 'Task' },\n { value: 'workflow', label: 'Workflow' },\n { value: 'escalation', label: 'Escalation' },\n { value: 'activity', label: 'Activity' },\n { value: 'knowledge', label: 'Knowledge' },\n { value: 'agent', label: 'Agent' },\n { value: 'app', label: 'App' },\n { value: 'milestone', label: 'Milestone' },\n];\n\nfunction CategoryPill({ category }: { category: string }) {\n const cls = CATEGORY_COLORS[category] ?? 'bg-zinc-400/15 text-zinc-400';\n return (\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${cls}`}>\n {category}\n </span>\n );\n}\n\nconst columns: Column<TopicCatalogEntry>[] = [\n {\n key: 'topic',\n label: 'Topic',\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <Radio className=\"w-3 h-3 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n <span className=\"text-xs font-mono text-text-primary truncate\">{row.topic}</span>\n </div>\n ),\n },\n {\n key: 'category',\n label: 'Category',\n render: (row) => <CategoryPill category={row.category} />,\n className: 'w-28',\n },\n {\n key: 'description',\n label: 'Description',\n render: (row) => row.description\n ? <span className=\"text-[11px] text-text-secondary truncate block max-w-xs\">{row.description}</span>\n : <span className=\"text-text-quaternary\">—</span>,\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => (\n <span className=\"text-[10px] font-mono text-text-tertiary\">{row.source}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'subscriber_count',\n label: 'Subscribers',\n render: (row) => {\n const count = row.subscriber_count ?? 0;\n if (!count) return <span className=\"text-text-quaternary\">—</span>;\n return (\n <span className=\"inline-flex items-center justify-center min-w-[20px] px-1.5 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent\">\n {count}\n </span>\n );\n },\n className: 'w-24 text-center',\n },\n {\n key: 'last_seen_at',\n label: 'Last Seen',\n render: (row) => row.last_seen_at\n ? <span className=\"whitespace-nowrap\"><DateValue date={row.last_seen_at} /></span>\n : <span className=\"text-text-quaternary\">—</span>,\n className: 'w-28',\n },\n];\n\nexport function TopicsPage() {\n const navigate = useNavigate();\n\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { category: '' },\n });\n\n const { data, isLoading, refetch, isFetching } = useTopics({\n category: filters.category || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Topic Catalog\" docsHash=\"#docs:topics.md\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/topics?limit=${pagination.pageSize}&offset=${pagination.offset}${filters.category ? `&category=${filters.category}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Category\"\n value={filters.category}\n onChange={(v) => setFilter('category', v)}\n options={CATEGORY_OPTIONS}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.topics ?? []}\n keyFn={(row) => row.topic}\n onRowClick={(row) => navigate(`/topics/${encodeURIComponent(row.topic)}`)}\n isLoading={isLoading}\n emptyMessage=\"No topics registered yet\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","CATEGORY_OPTIONS","CategoryPill","category","cls","columns","row","jsxDEV","Radio","this","count","DateValue","TopicsPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","data","isLoading","refetch","isFetching","useTopics","total","PageHeader","FilterBar","ListToolbar","FilterSelect","v","DataTable","StickyPagination"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./index-4T7Z_gQ4.js";import{a as m}from"./users-CCHSIAxt.js";function i({userId:a,fallback:r}){const{data:e}=m(a);return e?s.jsxDEV(s.Fragment,{children:e.display_name||e.email||e.external_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/UserName.tsx",lineNumber:11,columnNumber:12},this):s.jsxDEV(s.Fragment,{children:r??`${a.slice(0,8)}…`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/UserName.tsx",lineNumber:15,columnNumber:10},this)}export{i as U};
|
|
2
|
+
//# sourceMappingURL=UserName-zlR1so37.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserName-
|
|
1
|
+
{"version":3,"file":"UserName-zlR1so37.js","sources":["../../src/components/common/display/UserName.tsx"],"sourcesContent":["import { useUser } from '../../../api/users';\n\n/**\n * Resolves a user ID to their display name (or email, or truncated ID as fallback).\n * Renders inline — suitable for use inside <span>, <p>, etc.\n */\nexport function UserName({ userId, fallback }: { userId: string; fallback?: string }) {\n const { data: resolved } = useUser(userId);\n\n if (resolved) {\n return <>{resolved.display_name || resolved.email || resolved.external_id}</>;\n }\n\n // Still loading or no record — show fallback or truncated ID\n return <>{fallback ?? `${userId.slice(0, 8)}…`}</>;\n}\n"],"names":["UserName","userId","fallback","resolved","useUser","jsxDEV","Fragment"],"mappings":"gFAMO,SAASA,EAAS,CAAE,OAAAC,EAAQ,SAAAC,GAAmD,CACpF,KAAM,CAAE,KAAMC,GAAaC,EAAQH,CAAM,EAEzC,OAAIE,uBACQ,SAAAA,EAAS,cAAgBA,EAAS,OAASA,EAAS,aAAvD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmE,EAIrEE,EAAAA,OAAAC,EAAAA,SAAA,CAAG,YAAY,GAAGL,EAAO,MAAM,EAAG,CAAC,CAAC,GAAA,EAApC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwC,CACjD"}
|