@hotmeshio/long-tail 0.3.2 → 0.3.3
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/agents.d.ts +1 -1
- package/build/api/agents.js +1 -1
- package/build/api/controlplane.d.ts +33 -0
- package/build/api/controlplane.js +46 -0
- package/build/bin/ltc.js +16 -0
- package/build/lib/cli/commands/streams.d.ts +20 -0
- package/build/lib/cli/commands/streams.js +134 -0
- package/build/lib/db/schemas/003_agents.sql +1 -2
- package/build/lib/db/schemas/004_agent_subscriptions.sql +1 -1
- package/build/routes/agents.js +3 -3
- package/build/routes/controlplane.js +28 -0
- package/build/sdk/index.d.ts +1 -0
- package/build/sdk/index.js +1 -0
- package/build/services/agent/index.d.ts +2 -3
- package/build/services/agent/index.js +5 -12
- package/build/services/agent/sql.d.ts +3 -4
- package/build/services/agent/sql.js +16 -20
- package/build/services/agent/subscription-sql.d.ts +1 -1
- package/build/services/agent/subscription-sql.js +1 -1
- package/build/services/agent/trigger-registry.js +1 -1
- package/build/services/controlplane/index.d.ts +9 -1
- package/build/services/controlplane/index.js +39 -0
- package/build/services/controlplane/stream-messages-sql.d.ts +21 -0
- package/build/services/controlplane/stream-messages-sql.js +109 -0
- package/build/services/controlplane/types.d.ts +44 -0
- package/build/services/cron/index.js +5 -5
- package/build/services/export/post-process.js +14 -6
- package/build/services/mcp-runs/execution-builder.js +9 -4
- package/build/services/topics/index.js +1 -4
- package/build/services/topics/sql.d.ts +2 -2
- package/build/services/topics/sql.js +9 -2
- package/build/services/topics/system-topics.js +2 -3
- package/build/start/workers.js +11 -14
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/agent.d.ts +1 -1
- package/dashboard/dist/assets/{AdminDashboard-CbeSejVX.js → AdminDashboard-BBWJAsjl.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-CbeSejVX.js.map → AdminDashboard-BBWJAsjl.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-CFJNOrlg.js → AgentConfigPage-Br2O6NDa.js} +3 -3
- package/dashboard/dist/assets/AgentConfigPage-Br2O6NDa.js.map +1 -0
- package/dashboard/dist/assets/AgentDetailPage-DjgOR62z.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-DjgOR62z.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage-CASVGEvY.js +2 -0
- package/dashboard/dist/assets/AgentsPage-CASVGEvY.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-Dl9ZmjKA.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-DdrzePy4.js.map → AvailableEscalationsPage-Dl9ZmjKA.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-kKBifD1w.js → BotPicker-wEoqL3HR.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-kKBifD1w.js.map → BotPicker-wEoqL3HR.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-DYkx5aa4.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-Ch5qY0I7.js.map → CapabilitiesPage-DYkx5aa4.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-kYTBL7dT.js → CollapsibleSection-DN1aF5HO.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-kYTBL7dT.js.map → CollapsibleSection-DN1aF5HO.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CcaAapMl.js → ConfirmDeleteModal-v8ufrnX5.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CcaAapMl.js.map → ConfirmDeleteModal-v8ufrnX5.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-B4CL12pv.js → CopyableId-D94R2n6C.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-B4CL12pv.js.map → CopyableId-D94R2n6C.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-D1VAlwid.js → CredentialsPage-CSSjAEx6.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-D1VAlwid.js.map → CredentialsPage-CSSjAEx6.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-DRmO5rH0.js → CronLabel-fYpkTnEd.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-DRmO5rH0.js.map → CronLabel-fYpkTnEd.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-C06QDDir.js → CustomDurationPicker-CSarfbO1.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-C06QDDir.js.map → CustomDurationPicker-CSarfbO1.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-J5R6mepB.js → DataTable-VKt4pvC-.js} +2 -2
- package/dashboard/dist/assets/{DataTable-J5R6mepB.js.map → DataTable-VKt4pvC-.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-DwNj3GiG.js → DropZone-Bl4j-AID.js} +2 -2
- package/dashboard/dist/assets/{DropZone-DwNj3GiG.js.map → DropZone-Bl4j-AID.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-ChyMzl9n.js → ElapsedCell-Y4UmrII0.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-ChyMzl9n.js.map → ElapsedCell-Y4UmrII0.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-BXGvOADa.js → EmptyState-Di6_NfbP.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-BXGvOADa.js.map → EmptyState-Di6_NfbP.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DM6zmE4g.js → EscalationsOverview-D0Ry84FE.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DM6zmE4g.js.map → EscalationsOverview-D0Ry84FE.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CvJ98E8s.js → EventTable-BzPleN3Y.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CvJ98E8s.js.map → EventTable-BzPleN3Y.js.map} +1 -1
- package/dashboard/dist/assets/{EventTopicPill-CB_rIGlL.js → EventTopicPill-DCqcr7N7.js} +2 -2
- package/dashboard/dist/assets/{EventTopicPill-CB_rIGlL.js.map → EventTopicPill-DCqcr7N7.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-Bdssa-Xn.js → FilterBar-BoRQss2J.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-Bdssa-Xn.js.map → FilterBar-BoRQss2J.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-CGH_dYSo.js +2 -0
- package/dashboard/dist/assets/HomePage-CGH_dYSo.js.map +1 -0
- package/dashboard/dist/assets/{ListToolbar-jy8NL6ll.js → ListToolbar-BMWttsi2.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-jy8NL6ll.js.map → ListToolbar-BMWttsi2.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-xkaKuHbX.js → McpOverview-DpC-BbBV.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-xkaKuHbX.js.map → McpOverview-DpC-BbBV.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-D5ICn6cR.js → McpQueryDetailPage-CZSzX-cI.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-D5ICn6cR.js.map → McpQueryDetailPage-CZSzX-cI.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-C46fzfm5.js → McpQueryPage-B4KsvBGo.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-C46fzfm5.js.map → McpQueryPage-B4KsvBGo.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-Znsl4Yc-.js → McpRunDetailPage-_owlNUzp.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-Znsl4Yc-.js.map → McpRunDetailPage-_owlNUzp.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-C3A1fU3h.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-C3A1fU3h.js.map +1 -0
- package/dashboard/dist/assets/{Modal-C6k6_5KB.js → Modal-IsEbA4rW.js} +2 -2
- package/dashboard/dist/assets/{Modal-C6k6_5KB.js.map → Modal-IsEbA4rW.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-B8MOtt_p.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-e5N3_dVl.js.map → OperatorDashboard-B8MOtt_p.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-COcgWWf-.js → PageHeader-C4DNgZKA.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-COcgWWf-.js.map → PageHeader-C4DNgZKA.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-C0PCY3aJ.js → PageHeaderWithStats-Fy6tGBaa.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-C0PCY3aJ.js.map → PageHeaderWithStats-Fy6tGBaa.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-BQCsYMpM.js → PriorityBadge-kSpsF-Zm.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-BQCsYMpM.js.map → PriorityBadge-kSpsF-Zm.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-C03LOgI0.js → ProcessDetailPage-CZjjs4jE.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-C03LOgI0.js.map → ProcessDetailPage-CZjjs4jE.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-iyPsmlhm.js → ProcessesListPage-Ds7y71o8.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-iyPsmlhm.js.map → ProcessesListPage-Ds7y71o8.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-CHwys1f9.js → RolePill-DmdF9L9Q.js} +2 -2
- package/dashboard/dist/assets/{RolePill-CHwys1f9.js.map → RolePill-DmdF9L9Q.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-Bmc3XaUk.js → RolesPage-CCmK38yn.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-Bmc3XaUk.js.map → RolesPage-CCmK38yn.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-Bs4PF-Gd.js → RowActions-uGuPBEWb.js} +2 -2
- package/dashboard/dist/assets/{RowActions-Bs4PF-Gd.js.map → RowActions-uGuPBEWb.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-DXzAr2WW.js → RunAsSelector-BsO-uSh9.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-DXzAr2WW.js.map → RunAsSelector-BsO-uSh9.js.map} +1 -1
- package/dashboard/dist/assets/{ServerName-BIdLC1Ay.js → ServerName-BHl8nLOV.js} +2 -2
- package/dashboard/dist/assets/{ServerName-BIdLC1Ay.js.map → ServerName-BHl8nLOV.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-OKzRSSx4.js → StatCard-DI4ZQ-Zi.js} +2 -2
- package/dashboard/dist/assets/{StatCard-OKzRSSx4.js.map → StatCard-DI4ZQ-Zi.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-CQlF46RR.js → StatusBadge-TV20Ulgl.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-CQlF46RR.js.map → StatusBadge-TV20Ulgl.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-CP7eycjI.js → StepIndicator-ziIED3Pz.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-CP7eycjI.js.map → StepIndicator-ziIED3Pz.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CGk8VAKt.js → StickyPagination-CXBDS1ka.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CGk8VAKt.js.map → StickyPagination-CXBDS1ka.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-MEUPc3yJ.js → SwimlaneTimeline-Dc_a4-D5.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-MEUPc3yJ.js.map → SwimlaneTimeline-Dc_a4-D5.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-BGxXKiWD.js → TagInput-BYEjEPsa.js} +2 -2
- package/dashboard/dist/assets/{TagInput-BGxXKiWD.js.map → TagInput-BYEjEPsa.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-pN5BXzYA.js → TaskDetailPage-Cu0XLEA4.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-pN5BXzYA.js.map → TaskDetailPage-Cu0XLEA4.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-bw8ieKsf.js → TaskQueuePill-yBqQ-piu.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-bw8ieKsf.js.map → TaskQueuePill-yBqQ-piu.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-D1INzcrA.js → TasksListPage-Dl0quVgM.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-D1INzcrA.js.map → TasksListPage-Dl0quVgM.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-CywLVIBA.js → TimeAgo-BAs-HL55.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-CywLVIBA.js.map → TimeAgo-BAs-HL55.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-B4Pc6f3A.js → TimestampCell-zFm6ze1U.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-B4Pc6f3A.js.map → TimestampCell-zFm6ze1U.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-DiM3hgAB.js +2 -0
- package/dashboard/dist/assets/{ToolPill-DdLN3JOT.js.map → ToolPill-DiM3hgAB.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-DusbUka5.js → ToolTestPanel-C3vWUW2p.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-DusbUka5.js.map → ToolTestPanel-C3vWUW2p.js.map} +1 -1
- package/dashboard/dist/assets/TopicDetailPage-wjwRE5eI.js +9 -0
- package/dashboard/dist/assets/TopicDetailPage-wjwRE5eI.js.map +1 -0
- package/dashboard/dist/assets/{TopicsPage-DbtrnQON.js → TopicsPage-D3AONwHP.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-DbtrnQON.js.map → TopicsPage-D3AONwHP.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-CLbusknU.js → UserName-0vrAWvND.js} +2 -2
- package/dashboard/dist/assets/{UserName-CLbusknU.js.map → UserName-0vrAWvND.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-C61R-3Gg.js → WorkflowExecutionPage-CBbWToVN.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-C61R-3Gg.js.map → WorkflowExecutionPage-CBbWToVN.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-7vt2F6wR.js → WorkflowPill-C7jE0e1g.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-7vt2F6wR.js.map → WorkflowPill-C7jE0e1g.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-1GVHYLlw.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-BWiUNvyl.js.map → WorkflowsDashboard-1GVHYLlw.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-DA2ZOs7D.js → WorkflowsOverview-2POOJzat.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DA2ZOs7D.js.map → WorkflowsOverview-2POOJzat.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BcRKxz3P.js +2 -0
- package/dashboard/dist/assets/{YamlWorkflowsPage-CLebf2eL.js.map → YamlWorkflowsPage-BcRKxz3P.js.map} +1 -1
- package/dashboard/dist/assets/{agents-Dga6NU7U.js → agents-Bd6SNUID.js} +2 -2
- package/dashboard/dist/assets/agents-Bd6SNUID.js.map +1 -0
- package/dashboard/dist/assets/{bots-CtU4i4OQ.js → bots-DEsg-T8t.js} +2 -2
- package/dashboard/dist/assets/{bots-CtU4i4OQ.js.map → bots-DEsg-T8t.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-BVoALhbL.js → controlplane-B3m1kIWb.js} +2 -2
- package/dashboard/dist/assets/{controlplane-BVoALhbL.js.map → controlplane-B3m1kIWb.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-_N5GfuIi.js → escalation-CJQPC0gm.js} +2 -2
- package/dashboard/dist/assets/{escalation-_N5GfuIi.js.map → escalation-CJQPC0gm.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-CoTmTpHp.js → escalation-columns-DEE62U3_.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-CoTmTpHp.js.map → escalation-columns-DEE62U3_.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-Dz2U3Ctb.js → helpers-BveI_035.js} +2 -2
- package/dashboard/dist/assets/{helpers-Dz2U3Ctb.js.map → helpers-BveI_035.js.map} +1 -1
- package/dashboard/dist/assets/index-B7zv_NKJ.js +2 -0
- package/dashboard/dist/assets/index-B7zv_NKJ.js.map +1 -0
- package/dashboard/dist/assets/index-BVVdr9s0.js +2 -0
- package/dashboard/dist/assets/{index-6Kd78p_v.js.map → index-BVVdr9s0.js.map} +1 -1
- package/dashboard/dist/assets/{index-D_H_Prht.js → index-BXIwxi_u.js} +2 -2
- package/dashboard/dist/assets/{index-D_H_Prht.js.map → index-BXIwxi_u.js.map} +1 -1
- package/dashboard/dist/assets/{index-B9ealjkt.js → index-CEPo8tn_.js} +2 -2
- package/dashboard/dist/assets/{index-B9ealjkt.js.map → index-CEPo8tn_.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYwPVJv0.js → index-CTKfvoGj.js} +2 -2
- package/dashboard/dist/assets/{index-BYwPVJv0.js.map → index-CTKfvoGj.js.map} +1 -1
- package/dashboard/dist/assets/{index-Dpjguclc.js → index-CZVprWC6.js} +2 -2
- package/dashboard/dist/assets/{index-Dpjguclc.js.map → index-CZVprWC6.js.map} +1 -1
- package/dashboard/dist/assets/{index-CtbG3UN-.js → index-ChNwlMdo.js} +2 -2
- package/dashboard/dist/assets/{index-CtbG3UN-.js.map → index-ChNwlMdo.js.map} +1 -1
- package/dashboard/dist/assets/{index-QicYdUsl.js → index-Cpq83bZq.js} +2 -2
- package/dashboard/dist/assets/{index-QicYdUsl.js.map → index-Cpq83bZq.js.map} +1 -1
- package/dashboard/dist/assets/{index-CS61sh5q.js → index-Csts1D-x.js} +2 -2
- package/dashboard/dist/assets/{index-CS61sh5q.js.map → index-Csts1D-x.js.map} +1 -1
- package/dashboard/dist/assets/{index-dM-OgCY3.js → index-D4v-EUTe.js} +2 -2
- package/dashboard/dist/assets/{index-dM-OgCY3.js.map → index-D4v-EUTe.js.map} +1 -1
- package/dashboard/dist/assets/{index-DWUunWxh.js → index-DI36hw6W.js} +2 -2
- package/dashboard/dist/assets/{index-DWUunWxh.js.map → index-DI36hw6W.js.map} +1 -1
- package/dashboard/dist/assets/{index-CCOSf1PY.js → index-MnRuwfHN.js} +59 -59
- package/dashboard/dist/assets/index-MnRuwfHN.js.map +1 -0
- package/dashboard/dist/assets/index-dp_Q2Hha.css +1 -0
- package/dashboard/dist/assets/{index-BWHDW_CF.js → index-wQaJXZYX.js} +2 -2
- package/dashboard/dist/assets/{index-BWHDW_CF.js.map → index-wQaJXZYX.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DJlebU82.js → knowledge-krdvn5bg.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DJlebU82.js.map → knowledge-krdvn5bg.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CsLJ5SRm.js → mcp-BTZ2ex4x.js} +2 -2
- package/dashboard/dist/assets/{mcp-CsLJ5SRm.js.map → mcp-BTZ2ex4x.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js → mcp-query-BzqJu709.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js.map → mcp-query-BzqJu709.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js → mcp-runs-BBUaY28a.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js.map → mcp-runs-BBUaY28a.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-iRejH3_A.js → namespaces-DJVfgGst.js} +2 -2
- package/dashboard/dist/assets/{namespaces-iRejH3_A.js.map → namespaces-DJVfgGst.js.map} +1 -1
- package/dashboard/dist/assets/{roles-3Jm5KtKc.js → roles-DogkRzK2.js} +2 -2
- package/dashboard/dist/assets/{roles-3Jm5KtKc.js.map → roles-DogkRzK2.js.map} +1 -1
- package/dashboard/dist/assets/{settings-DmN2I-c6.js → settings-D2sLRpie.js} +2 -2
- package/dashboard/dist/assets/{settings-DmN2I-c6.js.map → settings-D2sLRpie.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-Cc-QoITQ.js → tasks-CIuWkHLG.js} +2 -2
- package/dashboard/dist/assets/{tasks-Cc-QoITQ.js.map → tasks-CIuWkHLG.js.map} +1 -1
- package/dashboard/dist/assets/{topics-p8anbgi0.js → topics-DxMDwZFs.js} +2 -2
- package/dashboard/dist/assets/topics-DxMDwZFs.js.map +1 -0
- package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js → useEventHooks-xXspN8_9.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js.map → useEventHooks-xXspN8_9.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js → useYamlActivityEvents-2hdnnML7.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js.map → useYamlActivityEvents-2hdnnML7.js.map} +1 -1
- package/dashboard/dist/assets/{users-oXOlnold.js → users-DWQ-ojf9.js} +2 -2
- package/dashboard/dist/assets/{users-oXOlnold.js.map → users-DWQ-ojf9.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CBOM6Es0.js → vendor-icons-YdqUbzg6.js} +110 -100
- package/dashboard/dist/assets/vendor-icons-YdqUbzg6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-Yq7cK-vR.js → workflows-BvGU8_fj.js} +2 -2
- package/dashboard/dist/assets/{workflows-Yq7cK-vR.js.map → workflows-BvGU8_fj.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js → yaml-workflows-DNgb7krQ.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js.map → yaml-workflows-DNgb7krQ.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/agents.md +1 -1
- package/docs/api/http/agents.md +5 -7
- package/docs/api/http/controlplane.md +193 -0
- package/docs/api/sdk/agents.md +5 -5
- package/docs/api/sdk/controlplane.md +36 -0
- package/docs/dashboard.md +13 -0
- package/package.json +2 -2
- package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js.map +0 -1
- package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js +0 -2
- package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-Ch5qY0I7.js +0 -2
- package/dashboard/dist/assets/HomePage-BuZkdXZt.js +0 -2
- package/dashboard/dist/assets/HomePage-BuZkdXZt.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-DT-armx5.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-DT-armx5.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-e5N3_dVl.js +0 -2
- package/dashboard/dist/assets/ToolPill-DdLN3JOT.js +0 -2
- package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +0 -9
- package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-BWiUNvyl.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +0 -2
- package/dashboard/dist/assets/agents-Dga6NU7U.js.map +0 -1
- package/dashboard/dist/assets/index-6Kd78p_v.js +0 -2
- package/dashboard/dist/assets/index-BIUHY2Jz.css +0 -1
- package/dashboard/dist/assets/index-CCOSf1PY.js.map +0 -1
- package/dashboard/dist/assets/topics-p8anbgi0.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation-columns-CoTmTpHp.js","sources":["../../src/pages/operator/escalation-columns.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { ExternalLink, Circle, Bell, Clock } from 'lucide-react';\nimport type { Column } from '../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { CountdownTimer } from '../../components/common/display/CountdownTimer';\nimport { isEffectivelyClaimed, isAckEscalation } from '../../lib/escalation';\nimport type { LTEscalationRecord } from '../../api/types';\n\n/** Status dot — rendered inline before summary. */\nfunction StatusDot({ row }: { row: LTEscalationRecord }) {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 shrink-0 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success\" />;\n }\n if (row.status === 'cancelled') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active\" />;\n}\n\n/** Base columns shared by all escalation list pages. */\nexport const ESCALATION_COLUMNS: Column<LTEscalationRecord>[] = [\n {\n key: 'description',\n label: 'Summary',\n render: (row) => (\n <div className=\"flex items-start gap-2 overflow-hidden\">\n <span className=\"mt-1 shrink-0\"><StatusDot row={row} /></span>\n <div className=\"min-w-0 overflow-hidden\">\n <p className=\"text-xs text-text-primary truncate\">{row.description || row.type}</p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <WorkflowPill type={row.type} />\n {row.subtype && row.subtype !== row.type && (\n <span className=\"text-[10px] text-text-tertiary whitespace-nowrap\">{row.subtype}</span>\n )}\n </div>\n </div>\n </div>\n ),\n className: 'max-w-0',\n },\n {\n key: 'task_id',\n label: 'Task',\n render: (row) =>\n row.task_id ? (\n <Link\n to={`/workflows/tasks/detail/${row.task_id}`}\n onClick={(e) => e.stopPropagation()}\n className=\"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors\"\n >\n {row.task_id.slice(0, 12)}…\n <ExternalLink size={10} className=\"opacity-0 group-hover/task:opacity-100 transition-opacity\" />\n </Link>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-36 whitespace-nowrap',\n },\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n className: 'w-28',\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n sortable: true,\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-40',\n sortable: true,\n },\n];\n\n/** Time-remaining column for claimed escalations — aligns with checkbox column on All Escalations. */\nexport const TIME_LEFT_COLUMN: Column<LTEscalationRecord> = {\n key: 'expires',\n label: (<Clock className=\"w-3.5 h-3.5 text-text-tertiary\" />) as any,\n render: (row) =>\n row.assigned_until ? (\n <CountdownTimer until={row.assigned_until} />\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-16 whitespace-nowrap',\n};\n\n/** Status icon column — color-coded filled circle, or bell for ACK/notification escalations. */\nexport const STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) => {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 fill-status-success text-status-success\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 fill-text-tertiary text-text-tertiary\" />;\n },\n className: 'w-8',\n};\n\n/** Claimed-only status icon (always orange, or bell for ACK). */\nexport const CLAIMED_STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) =>\n isAckEscalation(row)\n ? <Bell className=\"w-3 h-3 text-status-warning\" />\n : <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />,\n className: 'w-8',\n};\n\n/** Priority filter options shared by both pages. */\nexport const PRIORITY_OPTIONS = [\n { value: '1', label: 'P1' },\n { value: '2', label: 'P2' },\n { value: '3', label: 'P3' },\n { value: '4', label: 'P4' },\n];\n\n/** Status filter options for escalation list pages. */\nexport const STATUS_OPTIONS = [\n { value: 'available', label: 'Available' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'resolved', label: 'Resolved' },\n];\n\n/** Shared filter bar for escalation list pages. */\nexport function EscalationFilterBar({\n filters,\n setFilter,\n roles,\n types,\n showStatus = false,\n actions,\n}: {\n filters: { role: string; type: string; priority: string; status?: string };\n setFilter: (key: any, value: string) => void;\n roles: string[];\n types: string[];\n showStatus?: boolean;\n actions?: React.ReactNode;\n}) {\n return (\n <FilterBar actions={actions}>\n {showStatus && (\n <FilterSelect\n label=\"Status\"\n value={filters.status ?? ''}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n )}\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n <FilterSelect\n label=\"Type\"\n value={filters.type}\n onChange={(v) => setFilter('type', v)}\n options={types.map((t) => ({ value: t, label: t }))}\n />\n <FilterSelect\n label=\"Priority\"\n value={filters.priority}\n onChange={(v) => setFilter('priority', v)}\n options={PRIORITY_OPTIONS}\n />\n </FilterBar>\n );\n}\n"],"names":["StatusDot","row","isAckEscalation","color","jsxDEV","Bell","Circle","isEffectivelyClaimed","ESCALATION_COLUMNS","this","WorkflowPill","Link","e","ExternalLink","RolePill","PriorityBadge","TimestampCell","TIME_LEFT_COLUMN","Clock","CountdownTimer","PRIORITY_OPTIONS","STATUS_OPTIONS","EscalationFilterBar","filters","setFilter","roles","types","showStatus","actions","FilterBar","FilterSelect","v","r","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"escalation-columns-DEE62U3_.js","sources":["../../src/pages/operator/escalation-columns.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { ExternalLink, Circle, Bell, Clock } from 'lucide-react';\nimport type { Column } from '../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { CountdownTimer } from '../../components/common/display/CountdownTimer';\nimport { isEffectivelyClaimed, isAckEscalation } from '../../lib/escalation';\nimport type { LTEscalationRecord } from '../../api/types';\n\n/** Status dot — rendered inline before summary. */\nfunction StatusDot({ row }: { row: LTEscalationRecord }) {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 shrink-0 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success\" />;\n }\n if (row.status === 'cancelled') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active\" />;\n}\n\n/** Base columns shared by all escalation list pages. */\nexport const ESCALATION_COLUMNS: Column<LTEscalationRecord>[] = [\n {\n key: 'description',\n label: 'Summary',\n render: (row) => (\n <div className=\"flex items-start gap-2 overflow-hidden\">\n <span className=\"mt-1 shrink-0\"><StatusDot row={row} /></span>\n <div className=\"min-w-0 overflow-hidden\">\n <p className=\"text-xs text-text-primary truncate\">{row.description || row.type}</p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <WorkflowPill type={row.type} />\n {row.subtype && row.subtype !== row.type && (\n <span className=\"text-[10px] text-text-tertiary whitespace-nowrap\">{row.subtype}</span>\n )}\n </div>\n </div>\n </div>\n ),\n className: 'max-w-0',\n },\n {\n key: 'task_id',\n label: 'Task',\n render: (row) =>\n row.task_id ? (\n <Link\n to={`/workflows/tasks/detail/${row.task_id}`}\n onClick={(e) => e.stopPropagation()}\n className=\"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors\"\n >\n {row.task_id.slice(0, 12)}…\n <ExternalLink size={10} className=\"opacity-0 group-hover/task:opacity-100 transition-opacity\" />\n </Link>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-36 whitespace-nowrap',\n },\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n className: 'w-28',\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n sortable: true,\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-40',\n sortable: true,\n },\n];\n\n/** Time-remaining column for claimed escalations — aligns with checkbox column on All Escalations. */\nexport const TIME_LEFT_COLUMN: Column<LTEscalationRecord> = {\n key: 'expires',\n label: (<Clock className=\"w-3.5 h-3.5 text-text-tertiary\" />) as any,\n render: (row) =>\n row.assigned_until ? (\n <CountdownTimer until={row.assigned_until} />\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-16 whitespace-nowrap',\n};\n\n/** Status icon column — color-coded filled circle, or bell for ACK/notification escalations. */\nexport const STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) => {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 fill-status-success text-status-success\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 fill-text-tertiary text-text-tertiary\" />;\n },\n className: 'w-8',\n};\n\n/** Claimed-only status icon (always orange, or bell for ACK). */\nexport const CLAIMED_STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) =>\n isAckEscalation(row)\n ? <Bell className=\"w-3 h-3 text-status-warning\" />\n : <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />,\n className: 'w-8',\n};\n\n/** Priority filter options shared by both pages. */\nexport const PRIORITY_OPTIONS = [\n { value: '1', label: 'P1' },\n { value: '2', label: 'P2' },\n { value: '3', label: 'P3' },\n { value: '4', label: 'P4' },\n];\n\n/** Status filter options for escalation list pages. */\nexport const STATUS_OPTIONS = [\n { value: 'available', label: 'Available' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'resolved', label: 'Resolved' },\n];\n\n/** Shared filter bar for escalation list pages. */\nexport function EscalationFilterBar({\n filters,\n setFilter,\n roles,\n types,\n showStatus = false,\n actions,\n}: {\n filters: { role: string; type: string; priority: string; status?: string };\n setFilter: (key: any, value: string) => void;\n roles: string[];\n types: string[];\n showStatus?: boolean;\n actions?: React.ReactNode;\n}) {\n return (\n <FilterBar actions={actions}>\n {showStatus && (\n <FilterSelect\n label=\"Status\"\n value={filters.status ?? ''}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n )}\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n <FilterSelect\n label=\"Type\"\n value={filters.type}\n onChange={(v) => setFilter('type', v)}\n options={types.map((t) => ({ value: t, label: t }))}\n />\n <FilterSelect\n label=\"Priority\"\n value={filters.priority}\n onChange={(v) => setFilter('priority', v)}\n options={PRIORITY_OPTIONS}\n />\n </FilterBar>\n );\n}\n"],"names":["StatusDot","row","isAckEscalation","color","jsxDEV","Bell","Circle","isEffectivelyClaimed","ESCALATION_COLUMNS","this","WorkflowPill","Link","e","ExternalLink","RolePill","PriorityBadge","TimestampCell","TIME_LEFT_COLUMN","Clock","CountdownTimer","PRIORITY_OPTIONS","STATUS_OPTIONS","EscalationFilterBar","filters","setFilter","roles","types","showStatus","actions","FilterBar","FilterSelect","v","r","t"],"mappings":"ucAaA,SAASA,EAAU,CAAE,IAAAC,GAAoC,CACvD,GAAIC,EAAgBD,CAAG,EAAG,CACxB,MAAME,EAAQF,EAAI,SAAW,WAAa,sBAAwB,qBAClE,OAAOG,EAAAA,OAACC,EAAA,CAAK,UAAW,oBAAoBF,CAAK,EAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8C,CACvD,CACA,OAAIF,EAAI,SAAW,WACVG,EAAAA,OAACE,EAAA,CAAO,UAAU,8DAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiF,EAEtFL,EAAI,SAAW,YACVG,EAAAA,OAACE,EAAA,CAAO,UAAU,0DAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6E,EAElFC,EAAqBN,CAAG,EACnBG,EAAAA,OAACE,EAAA,CAAO,UAAU,8DAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiF,EAGnFF,EAAAA,OAACE,EAAA,CAAO,UAAU,4DAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+E,CACxF,CAGO,MAAME,EAAmD,CAC9D,CACE,IAAK,cACL,MAAO,UACP,OAASP,GACPG,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,gBAAgB,SAAAA,SAACJ,GAAU,IAAAC,GAAX,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAAqB,CAAA,EAArD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAA,MAAuD,EACvDL,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,KAAE,UAAU,qCAAsC,SAAAH,EAAI,aAAeA,EAAI,MAA1E,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAA+E,EAC/EL,EAAAA,OAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,EAAAA,OAACM,EAAA,CAAa,KAAMT,EAAI,IAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAA8B,EAC7BR,EAAI,SAAWA,EAAI,UAAYA,EAAI,MAClCG,SAAC,OAAA,CAAK,UAAU,mDAAoD,SAAAH,EAAI,OAAA,EAAxE,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAAgF,CAAA,CAAA,EAHpF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAA,MAKA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAA,MAQA,CAAA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAA,MAWA,EAEF,UAAW,SAAA,EAEb,CACE,IAAK,UACL,MAAO,OACP,OAASR,GACPA,EAAI,QACFG,EAAAA,OAACO,EAAA,CACC,GAAI,2BAA2BV,EAAI,OAAO,GAC1C,QAAUW,GAAMA,EAAE,gBAAA,EAClB,UAAU,sHAET,SAAA,CAAAX,EAAI,QAAQ,MAAM,EAAG,EAAE,EAAE,IAC1BG,SAACS,EAAA,CAAa,KAAM,GAAI,UAAU,2DAAA,EAAlC,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAJ,MAA8F,CAAA,CAAA,EANhG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAA,MAAA,EASAL,EAAAA,OAAC,OAAA,CAAK,UAAU,6BAA6B,SAAA,GAAA,EAA7C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAK,MAA8C,EAElD,UAAW,wBAAA,EAEb,CACE,IAAK,OACL,MAAO,OACP,OAASR,YAASa,EAAA,CAAS,KAAMb,EAAI,IAAA,EAApB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAA0B,EAC3C,UAAW,MAAA,EAEb,CACE,IAAK,WACL,MAAO,WACP,OAASR,YAASc,EAAA,CAAc,SAAUd,EAAI,QAAA,EAA7B,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAAuC,EACxD,UAAW,OACX,SAAU,EAAA,EAEZ,CACE,IAAK,aACL,MAAO,UACP,OAASR,YAASe,EAAA,CAAc,KAAMf,EAAI,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAQ,MAAqC,EACtD,UAAW,OACX,SAAU,EAAA,CAEd,EAGaQ,EAA+C,CAC1D,IAAK,UACL,MAAQb,EAAAA,OAACc,EAAA,CAAM,UAAU,gCAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAAT,MAAkD,EAC1D,OAASR,GACPA,EAAI,eACFG,EAAAA,OAACe,EAAA,CAAe,MAAOlB,EAAI,gBAA3B,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAAQ,MAA2C,EAE3CL,SAAC,OAAA,CAAK,UAAU,6BAA6B,SAAA,KAA7C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAAK,MAA8C,EAElD,UAAW,wBACb,EAmCaW,EAAmB,CAC9B,CAAE,MAAO,IAAK,MAAO,IAAA,EACrB,CAAE,MAAO,IAAK,MAAO,IAAA,EACrB,CAAE,MAAO,IAAK,MAAO,IAAA,EACrB,CAAE,MAAO,IAAK,MAAO,IAAA,CACvB,EAGaC,EAAiB,CAC5B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,WAAY,MAAO,UAAA,CAC9B,EAGO,SAASC,EAAoB,CAClC,QAAAC,EACA,UAAAC,EACA,MAAAC,EACA,MAAAC,EACA,WAAAC,EAAa,GACb,QAAAC,CACF,EAOG,CACD,OACExB,SAACyB,GAAU,QAAAD,EACR,SAAA,CAAAD,GACCvB,EAAAA,OAAC0B,EAAA,CACC,MAAM,SACN,MAAOP,EAAQ,QAAU,GACzB,SAAWQ,GAAMP,EAAU,SAAUO,CAAC,EACtC,QAASV,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOFjB,EAAAA,OAAC0B,EAAA,CACC,MAAM,OACN,MAAOP,EAAQ,KACf,SAAWQ,GAAMP,EAAU,OAAQO,CAAC,EACpC,QAASN,EAAM,IAAKO,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,EAJpD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA5B,EAAAA,OAAC0B,EAAA,CACC,MAAM,OACN,MAAOP,EAAQ,KACf,SAAWQ,GAAMP,EAAU,OAAQO,CAAC,EACpC,QAASL,EAAM,IAAKO,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,EAJpD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA7B,EAAAA,OAAC0B,EAAA,CACC,MAAM,WACN,MAAOP,EAAQ,SACf,SAAWQ,GAAMP,EAAU,WAAYO,CAAC,EACxC,QAASX,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAKA,CAAA,EA1BF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA2BA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=helpers-
|
|
1
|
+
import{j as n}from"./index-MnRuwfHN.js";import{T as o}from"./TimeAgo-BAs-HL55.js";import{S as l}from"./StatusBadge-TV20Ulgl.js";const i={"* * * * *":"Every minute","*/5 * * * *":"Every 5 minutes","*/15 * * * *":"Every 15 minutes","*/30 * * * *":"Every 30 minutes","0 * * * *":"Every hour","0 */2 * * *":"Every 2 hours","0 */6 * * *":"Every 6 hours","0 */12 * * *":"Every 12 hours","0 0 * * *":"Daily at midnight","0 9 * * *":"Daily at 9 AM","0 9 * * 1-5":"Weekdays at 9 AM","0 0 * * 0":"Weekly (Sunday midnight)","0 0 1 * *":"Monthly (1st at midnight)","0 2 * * *":"Daily at 2 AM"};function c(e){return i[e]??""}const f=[["*/15 * * * *","Every 15 min"],["0 * * * *","Every hour"],["0 */6 * * *","Every 6 hours"],["0 9 * * *","Daily 9 AM"],["0 9 * * 1-5","Weekdays 9 AM"],["0 0 * * 0","Weekly (Sun)"]];function p(e){const t=e==null?void 0:e.data;if(!t||typeof t!="object"||Array.isArray(t))return null;const a=Object.entries(t);return a.length===0||!a.every(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)?null:a.map(([r,s])=>({key:r,value:s===null?"":String(s),type:s===null?"string":typeof s}))}const h=[{key:"workflow_id",label:"Workflow ID",render:e=>n.jsxDEV("span",{className:"font-mono text-[11px] text-text-secondary",children:e.workflow_id.length>40?`${e.workflow_id.slice(0,40)}...`:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:69,columnNumber:7},void 0)},{key:"status",label:"Status",render:e=>n.jsxDEV(l,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:79,columnNumber:22},void 0),className:"w-28"},{key:"created_at",label:"Started",render:e=>n.jsxDEV(o,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:85,columnNumber:22},void 0),className:"w-32"}];export{f as C,c as d,p as e,h as j};
|
|
2
|
+
//# sourceMappingURL=helpers-BveI_035.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers-
|
|
1
|
+
{"version":3,"file":"helpers-BveI_035.js","sources":["../../src/pages/workflows/cron/helpers.tsx"],"sourcesContent":["import type { LTJob } from '../../../api/types';\nimport type { Column } from '../../../components/common/data/DataTable';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\n// -- Cron descriptions -------------------------------------------------------\n\nconst CRON_DESCRIPTIONS: Record<string, string> = {\n '* * * * *': 'Every minute',\n '*/5 * * * *': 'Every 5 minutes',\n '*/15 * * * *': 'Every 15 minutes',\n '*/30 * * * *': 'Every 30 minutes',\n '0 * * * *': 'Every hour',\n '0 */2 * * *': 'Every 2 hours',\n '0 */6 * * *': 'Every 6 hours',\n '0 */12 * * *': 'Every 12 hours',\n '0 0 * * *': 'Daily at midnight',\n '0 9 * * *': 'Daily at 9 AM',\n '0 9 * * 1-5': 'Weekdays at 9 AM',\n '0 0 * * 0': 'Weekly (Sunday midnight)',\n '0 0 1 * *': 'Monthly (1st at midnight)',\n '0 2 * * *': 'Daily at 2 AM',\n};\n\nexport function describeCron(expr: string): string {\n return CRON_DESCRIPTIONS[expr] ?? '';\n}\n\nexport const COMMON_PATTERNS: [string, string][] = [\n ['*/15 * * * *', 'Every 15 min'],\n ['0 * * * *', 'Every hour'],\n ['0 */6 * * *', 'Every 6 hours'],\n ['0 9 * * *', 'Daily 9 AM'],\n ['0 9 * * 1-5', 'Weekdays 9 AM'],\n ['0 0 * * 0', 'Weekly (Sun)'],\n];\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n// -- Envelope helpers ---------------------------------------------------------\n\n/** Extract simple string/number/boolean keys from `data` for form view. */\nexport function extractFormFields(\n envelope: Record<string, unknown>,\n): { key: string; value: string; type: string }[] | null {\n const data = envelope?.data;\n if (!data || typeof data !== 'object' || Array.isArray(data)) return null;\n const entries = Object.entries(data as Record<string, unknown>);\n if (entries.length === 0) return null;\n // Only show form if all values are scalar\n const allScalar = entries.every(\n ([, v]) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null,\n );\n if (!allScalar) return null;\n return entries.map(([key, value]) => ({\n key,\n value: value === null ? '' : String(value),\n type: value === null ? 'string' : typeof value,\n }));\n}\n\n// -- Recent jobs table columns ------------------------------------------------\n\nexport const jobColumns: Column<LTJob>[] = [\n {\n key: 'workflow_id',\n label: 'Workflow ID',\n render: (row) => (\n <span className=\"font-mono text-[11px] text-text-secondary\">\n {row.workflow_id.length > 40\n ? `${row.workflow_id.slice(0, 40)}...`\n : row.workflow_id}\n </span>\n ),\n },\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-28',\n },\n {\n key: 'created_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.created_at} />,\n className: 'w-32',\n },\n];\n"],"names":["CRON_DESCRIPTIONS","describeCron","expr","COMMON_PATTERNS","extractFormFields","envelope","data","entries","v","key","value","jobColumns","row","jsxDEV","this","StatusBadge","TimeAgo"],"mappings":"gIAOA,MAAMA,EAA4C,CAChD,YAAa,eACb,cAAe,kBACf,eAAgB,mBAChB,eAAgB,mBAChB,YAAa,aACb,cAAe,gBACf,cAAe,gBACf,eAAgB,iBAChB,YAAa,oBACb,YAAa,gBACb,cAAe,mBACf,YAAa,2BACb,YAAa,4BACb,YAAa,eACf,EAEO,SAASC,EAAaC,EAAsB,CACjD,OAAOF,EAAkBE,CAAI,GAAK,EACpC,CAEO,MAAMC,EAAsC,CACjD,CAAC,eAAgB,cAAc,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,cAAc,CAC9B,EAOO,SAASC,EACdC,EACuD,CACvD,MAAMC,EAAOD,GAAA,YAAAA,EAAU,KACvB,GAAI,CAACC,GAAQ,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,EAAG,OAAO,KACrE,MAAMC,EAAU,OAAO,QAAQD,CAA+B,EAM9D,OALIC,EAAQ,SAAW,GAKnB,CAHcA,EAAQ,MACxB,CAAC,EAAGC,CAAC,IAAM,OAAOA,GAAM,UAAY,OAAOA,GAAM,UAAY,OAAOA,GAAM,WAAaA,IAAM,IAAA,EAExE,KAChBD,EAAQ,IAAI,CAAC,CAACE,EAAKC,CAAK,KAAO,CACpC,IAAAD,EACA,MAAOC,IAAU,KAAO,GAAK,OAAOA,CAAK,EACzC,KAAMA,IAAU,KAAO,SAAW,OAAOA,CAAA,EACzC,CACJ,CAIO,MAAMC,EAA8B,CACzC,CACE,IAAK,cACL,MAAO,cACP,OAASC,GACPC,EAAAA,OAAC,QAAK,UAAU,4CACb,WAAI,YAAY,OAAS,GACtB,GAAGD,EAAI,YAAY,MAAM,EAAG,EAAE,CAAC,MAC/BA,EAAI,aAHV,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAAE,MAIA,CAAA,EAGJ,CACE,IAAK,SACL,MAAO,SACP,OAASF,YAASG,EAAA,CAAY,OAAQH,EAAI,MAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAAiC,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASF,YAASI,EAAA,CAAQ,KAAMJ,EAAI,UAAA,EAAnB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAA+B,EAChD,UAAW,MAAA,CAEf"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as w,j as a,S as b,J as F,c as T}from"./index-MnRuwfHN.js";import{u as C,a as N}from"./vendor-query-DLp59M9_.js";import{a as $}from"./vendor-react-Co3Y8ikm.js";import{a as R}from"./controlplane-B3m1kIWb.js";import{u as A}from"./useFilterParams-CGRYFw_A.js";import{D as L}from"./DataTable-VKt4pvC-.js";import{S as O}from"./StickyPagination-CXBDS1ka.js";import{F as z,b as g,a as I}from"./FilterBar-BoRQss2J.js";import{T as x}from"./TimestampCell-zFm6ze1U.js";import{P as q}from"./PageHeader-C4DNgZKA.js";import{L as J}from"./ListToolbar-BMWttsi2.js";import{s as U,X as v}from"./vendor-icons-YdqUbzg6.js";import"./EmptyState-Di6_NfbP.js";function W(e){const s=new URLSearchParams;return s.set("namespace",e.namespace),s.set("source",e.source),e.limit&&s.set("limit",String(e.limit)),e.offset&&s.set("offset",String(e.offset)),e.sort_by&&s.set("sort_by",e.sort_by),e.order&&s.set("order",e.order),e.status&&s.set("status",e.status),e.stream_name&&s.set("stream_name",e.stream_name),e.msg_type&&s.set("msg_type",e.msg_type),e.topic&&s.set("topic",e.topic),e.workflow_name&&s.set("workflow_name",e.workflow_name),e.jid&&s.set("jid",e.jid),e.aid&&s.set("aid",e.aid),w(`/controlplane/stream-messages?${s}`)}function B(e){return C({queryKey:["controlplane","stream-messages",e],queryFn:()=>W(e),enabled:!!e.namespace,staleTime:15e3})}const D={pending:"bg-text-tertiary",claimed:"bg-status-warning",processed:"bg-status-success",dead_lettered:"bg-status-error"},S={pending:"Pending",claimed:"Claimed",processed:"Processed",dead_lettered:"Dead Lettered"},y="inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary",H=[{value:"pending",label:"Pending"},{value:"claimed",label:"Claimed"},{value:"processed",label:"Processed"},{value:"dead_lettered",label:"Dead Lettered"}],K=[{value:"engine",label:"Engine"},{value:"worker",label:"Worker"}];function n({label:e,value:s}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:12,columnNumber:7},this),a.jsxDEV("div",{className:"mt-0.5",children:a.jsxDEV(T,{date:s,format:"datetime"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:14,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:13,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:11,columnNumber:5},this):null}function u({label:e,value:s}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:24,columnNumber:7},this),a.jsxDEV("p",{className:"text-xs text-text-primary font-mono break-all",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:25,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:23,columnNumber:5},this):null}function m({label:e,value:s,onFilter:r}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:39,columnNumber:7},this),a.jsxDEV("button",{onClick:()=>r==null?void 0:r(s),className:"flex items-center gap-1 group text-left w-full",title:`Filter by ${e.toLowerCase()}: ${s}`,children:[a.jsxDEV("p",{className:"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:45,columnNumber:9},this),a.jsxDEV(U,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:40,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:38,columnNumber:5},this):null}function G({message:e,filters:s}){return e?a.jsxDEV("div",{className:"space-y-5 text-[11px]",children:[a.jsxDEV("div",{children:[a.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[a.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${D[e.status]}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:81,columnNumber:11},this),a.jsxDEV(m,{label:"",value:S[e.status],onFilter:()=>{var r;return(r=s==null?void 0:s.onFilterStatus)==null?void 0:r.call(s,e.status)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:82,columnNumber:11},this),a.jsxDEV("span",{className:y,children:e.source},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:87,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:80,columnNumber:9},this),a.jsxDEV(m,{label:"",value:e.stream_name,onFilter:()=>{var r;return(r=s==null?void 0:s.onFilterStreamName)==null?void 0:r.call(s,e.stream_name)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:89,columnNumber:9},this),a.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:["ID: ",e.id]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:94,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:79,columnNumber:7},this),a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(b,{children:"Timestamps"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:99,columnNumber:9},this),a.jsxDEV("div",{className:"grid grid-cols-1 gap-2",children:[a.jsxDEV(n,{label:"Created",value:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:101,columnNumber:11},this),a.jsxDEV(n,{label:"Reserved",value:e.reserved_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:102,columnNumber:11},this),a.jsxDEV(n,{label:"Processed",value:e.expired_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:103,columnNumber:11},this),a.jsxDEV(n,{label:"Dead-lettered",value:e.dead_lettered_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:104,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:98,columnNumber:7},this),a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(b,{children:"Metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:110,columnNumber:9},this),a.jsxDEV("div",{className:"grid grid-cols-2 gap-2",children:[a.jsxDEV(u,{label:"Priority",value:String(e.priority)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:112,columnNumber:11},this),a.jsxDEV(u,{label:"Retries",value:`${e.retry_attempt} / ${e.max_retry_attempts}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:113,columnNumber:11},this),a.jsxDEV(u,{label:"Reserved by",value:e.reserved_by},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:114,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:109,columnNumber:7},this),e.source==="worker"&&a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(b,{children:"Worker Details"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:121,columnNumber:11},this),a.jsxDEV("div",{className:"grid grid-cols-1 gap-2",children:[a.jsxDEV(m,{label:"Workflow",value:e.workflow_name,onFilter:s==null?void 0:s.onFilterWorkflow},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:123,columnNumber:13},this),a.jsxDEV(m,{label:"Job ID",value:e.jid,onFilter:s==null?void 0:s.onFilterJid},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:124,columnNumber:13},this),a.jsxDEV(m,{label:"Activity",value:e.aid,onFilter:s==null?void 0:s.onFilterAid},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:125,columnNumber:13},this),a.jsxDEV(u,{label:"Dimension",value:e.dad},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:126,columnNumber:13},this),a.jsxDEV(m,{label:"Type",value:e.msg_type,onFilter:s==null?void 0:s.onFilterMsgType},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:127,columnNumber:13},this),a.jsxDEV(m,{label:"Topic",value:e.topic,onFilter:s==null?void 0:s.onFilterTopic},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:128,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:122,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:120,columnNumber:9},this),a.jsxDEV("div",{className:"space-y-2",children:a.jsxDEV(F,{data:e.message,label:"Payload",defaultCollapsed:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:135,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:134,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:77,columnNumber:5},this):null}function oe(){const{filters:e,setFilter:s,pagination:r,sort:c,setSort:j}=A({filters:{namespace:"durable",source:"worker",status:"",stream_name:"",msg_type:"",topic:"",workflow_name:"",jid:"",aid:""}}),[l,h]=N.useState(null),{data:o}=R(),M=N.useMemo(()=>((o==null?void 0:o.apps)??[]).map(t=>({value:t.appId,label:t.appId})),[o]),{data:i,isLoading:E,refetch:V,isFetching:_}=B({namespace:e.namespace||"durable",source:e.source||"worker",limit:r.pageSize,offset:r.offset,sort_by:c.sort_by||"created_at",order:c.order||"desc",status:e.status||void 0,stream_name:e.stream_name||void 0,msg_type:e.msg_type||void 0,topic:e.topic||void 0,workflow_name:e.workflow_name||void 0,jid:e.jid||void 0,aid:e.aid||void 0}),p=(i==null?void 0:i.messages)??[],f=(i==null?void 0:i.total)??0,d=N.useMemo(()=>l?p.find(t=>t.id===l.id&&t.source===l.source)??l:null,[p,l]),P=!!d,k=[{key:"status",label:"Status",render:t=>a.jsxDEV("div",{className:"flex items-center gap-2",children:[a.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${D[t.status]}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:61,columnNumber:11},this),a.jsxDEV("span",{className:"text-xs",children:S[t.status]},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:62,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:60,columnNumber:9},this),className:"w-28"},{key:"source",label:"Source",render:t=>a.jsxDEV("span",{className:y,children:t.source},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:70,columnNumber:24},this),className:"w-20"},{key:"stream_name",label:"Stream",sortable:!0,render:t=>a.jsxDEV("span",{className:"font-mono text-xs text-text-secondary truncate block max-w-[240px]",title:t.stream_name,children:t.stream_name},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:78,columnNumber:9},this)},{key:"msg_type",label:"Type",render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:t.msg_type||"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:87,columnNumber:9},this),className:"w-24"},{key:"created_at",label:"Created",sortable:!0,render:t=>a.jsxDEV(x,{date:t.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:95,columnNumber:24},this),className:"w-44"},{key:"reserved_at",label:"Reserved",render:t=>t.reserved_at?a.jsxDEV(x,{date:t.reserved_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:101,columnNumber:42},this):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:101,columnNumber:85},this),className:"w-44"},{key:"expired_at",label:"Processed",render:t=>t.expired_at?a.jsxDEV(x,{date:t.expired_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:107,columnNumber:41},this):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:107,columnNumber:83},this),className:"w-44"},{key:"priority",label:"Pri",sortable:!0,render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:t.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:114,columnNumber:24},this),className:"w-12 text-right"},{key:"retry_attempt",label:"Retries",render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:[t.retry_attempt,"/",t.max_retry_attempts]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:121,columnNumber:9},this),className:"w-16"}];return a.jsxDEV("div",{children:[a.jsxDEV(q,{title:"Messages",docsHash:"#docs:dashboard.md:messages"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:131,columnNumber:7},this),a.jsxDEV(z,{actions:a.jsxDEV(J,{onRefresh:()=>V(),isFetching:_,apiPath:`/controlplane/stream-messages?namespace=${e.namespace||"durable"}&source=${e.source||"worker"}&limit=${r.pageSize}&offset=${r.offset}${e.status?`&status=${e.status}`:""}${e.stream_name?`&stream_name=${e.stream_name}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:134,columnNumber:9},this),children:[a.jsxDEV(g,{label:"Namespace",value:e.namespace,onChange:t=>s("namespace",t),options:M,required:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:140,columnNumber:9},this),a.jsxDEV(g,{label:"Source",value:e.source,onChange:t=>s("source",t),options:K,required:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:147,columnNumber:9},this),a.jsxDEV(g,{label:"Status",value:e.status,onChange:t=>s("status",t),options:H},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:154,columnNumber:9},this),a.jsxDEV(I,{label:"Stream",value:e.stream_name,onChange:t=>s("stream_name",t),placeholder:"Filter by stream name…"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:160,columnNumber:9},this),[{key:"topic",label:"Topic",value:e.topic},{key:"workflow_name",label:"Workflow",value:e.workflow_name},{key:"jid",label:"Job",value:e.jid},{key:"aid",label:"Activity",value:e.aid},{key:"msg_type",label:"Type",value:e.msg_type}].filter(t=>t.value).map(t=>a.jsxDEV("button",{onClick:()=>s(t.key,""),className:"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors",title:`Clear ${t.label} filter`,children:[t.label,": ",t.value,a.jsxDEV(v,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:181,columnNumber:13},this)]},t.key,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:174,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:133,columnNumber:7},this),a.jsxDEV(L,{columns:k,data:p,keyFn:t=>`${t.source}:${t.id}`,isLoading:E,emptyMessage:"No stream messages found",onRowClick:t=>h(t),activeRowKey:d?`${d.source}:${d.id}`:null,sort:c,onSort:j},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:186,columnNumber:7},this),a.jsxDEV(O,{page:r.page,totalPages:r.totalPages(f),onPageChange:r.setPage,total:f,pageSize:r.pageSize,onPageSizeChange:r.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:198,columnNumber:7},this),P&&$.createPortal(a.jsxDEV("div",{className:"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg",style:{top:"3.5rem"},children:[a.jsxDEV("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50",children:[a.jsxDEV("span",{className:"text-xs font-medium text-text-primary",children:"Message Detail"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:211,columnNumber:13},this),a.jsxDEV("button",{onClick:()=>h(null),className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:a.jsxDEV(v,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:217,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:212,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:210,columnNumber:11},this),a.jsxDEV("div",{className:"px-4 py-4",children:a.jsxDEV(G,{message:d,filters:{onFilterStatus:t=>s("status",t),onFilterStreamName:t=>s("stream_name",t),onFilterMsgType:t=>s("msg_type",t),onFilterTopic:t=>s("topic",t),onFilterWorkflow:t=>s("workflow_name",t),onFilterJid:t=>s("jid",t),onFilterAid:t=>s("aid",t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:221,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:220,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:209,columnNumber:9},this),document.body)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:130,columnNumber:5},this)}export{oe as StreamMessagesPage};
|
|
2
|
+
//# sourceMappingURL=index-B7zv_NKJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-B7zv_NKJ.js","sources":["../../src/api/stream-messages.ts","../../src/pages/admin/streams/constants.ts","../../src/pages/admin/streams/StreamMessageDetail.tsx","../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type StreamMessageStatus = 'pending' | 'claimed' | 'processed' | 'dead_lettered';\nexport type StreamMessageSource = 'engine' | 'worker';\n\nexport interface StreamMessage {\n id: string;\n source: StreamMessageSource;\n stream_name: string;\n message: string;\n status: StreamMessageStatus;\n created_at: string;\n reserved_at: string | null;\n reserved_by: string | null;\n expired_at: string | null;\n dead_lettered_at: string | null;\n priority: number;\n visible_at: string | null;\n retry_attempt: number;\n max_retry_attempts: number;\n workflow_name: string | null;\n jid: string | null;\n aid: string | null;\n dad: string | null;\n msg_type: string | null;\n topic: string | null;\n}\n\nexport interface StreamMessagesResponse {\n messages: StreamMessage[];\n total: number;\n}\n\nexport interface StreamMessagesParams {\n namespace: string;\n source: StreamMessageSource;\n limit?: number;\n offset?: number;\n sort_by?: string;\n order?: 'asc' | 'desc';\n status?: StreamMessageStatus | '';\n stream_name?: string;\n msg_type?: string;\n topic?: string;\n workflow_name?: string;\n jid?: string;\n aid?: string;\n}\n\n// ── Fetch ───────────────────────────────────────────────────────────────────\n\nfunction fetchStreamMessages(params: StreamMessagesParams) {\n const qs = new URLSearchParams();\n qs.set('namespace', params.namespace);\n qs.set('source', params.source);\n if (params.limit) qs.set('limit', String(params.limit));\n if (params.offset) qs.set('offset', String(params.offset));\n if (params.sort_by) qs.set('sort_by', params.sort_by);\n if (params.order) qs.set('order', params.order);\n if (params.status) qs.set('status', params.status);\n if (params.stream_name) qs.set('stream_name', params.stream_name);\n if (params.msg_type) qs.set('msg_type', params.msg_type);\n if (params.topic) qs.set('topic', params.topic);\n if (params.workflow_name) qs.set('workflow_name', params.workflow_name);\n if (params.jid) qs.set('jid', params.jid);\n if (params.aid) qs.set('aid', params.aid);\n return apiFetch<StreamMessagesResponse>(`/controlplane/stream-messages?${qs}`);\n}\n\n// ── Hook ────────────────────────────────────────────────────────────────────\n\nexport function useStreamMessages(params: StreamMessagesParams) {\n return useQuery({\n queryKey: ['controlplane', 'stream-messages', params],\n queryFn: () => fetchStreamMessages(params),\n enabled: !!params.namespace,\n staleTime: 15_000,\n });\n}\n","import type { StreamMessageStatus } from '../../../api/stream-messages';\n\nexport const STATUS_DOT: Record<StreamMessageStatus, string> = {\n pending: 'bg-text-tertiary',\n claimed: 'bg-status-warning',\n processed: 'bg-status-success',\n dead_lettered: 'bg-status-error',\n};\n\nexport const STATUS_LABEL: Record<StreamMessageStatus, string> = {\n pending: 'Pending',\n claimed: 'Claimed',\n processed: 'Processed',\n dead_lettered: 'Dead Lettered',\n};\n\nexport const SOURCE_BADGE =\n 'inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary';\n\nexport const STATUS_OPTIONS = [\n { value: 'pending', label: 'Pending' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'processed', label: 'Processed' },\n { value: 'dead_lettered', label: 'Dead Lettered' },\n];\n\nexport const SOURCE_OPTIONS = [\n { value: 'engine', label: 'Engine' },\n { value: 'worker', label: 'Worker' },\n];\n","import { Filter } from 'lucide-react';\nimport type { StreamMessage } from '../../../api/stream-messages';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { STATUS_DOT, STATUS_LABEL, SOURCE_BADGE } from './constants';\n\nfunction Timestamp({ label, value }: { label: string; value: string | null }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <div className=\"mt-0.5\">\n <DateValue date={value} format=\"datetime\" />\n </div>\n </div>\n );\n}\n\nfunction Field({ label, value }: { label: string; value: string | null | undefined }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <p className=\"text-xs text-text-primary font-mono break-all\">{value}</p>\n </div>\n );\n}\n\n/** A field value that can be clicked to filter the master list. */\nfunction FilterableField({ label, value, onFilter }: {\n label: string;\n value: string | null | undefined;\n onFilter?: (value: string) => void;\n}) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <button\n onClick={() => onFilter?.(value)}\n className=\"flex items-center gap-1 group text-left w-full\"\n title={`Filter by ${label.toLowerCase()}: ${value}`}\n >\n <p className=\"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors\">{value}</p>\n <Filter className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n </div>\n );\n}\n\nexport interface StreamMessageDetailFilters {\n onFilterStatus?: (value: string) => void;\n onFilterStreamName?: (value: string) => void;\n onFilterMsgType?: (value: string) => void;\n onFilterTopic?: (value: string) => void;\n onFilterWorkflow?: (value: string) => void;\n onFilterJid?: (value: string) => void;\n onFilterAid?: (value: string) => void;\n}\n\n/**\n * Standard stream message detail view.\n *\n * This component is the canonical representation of a stream message.\n * Reuse it wherever stream messages need to be displayed — the layout,\n * timestamp formatting (via DateValue with ms/UTC/local tooltip), and\n * payload viewer are the standard.\n */\nexport function StreamMessageDetail({ message, filters }: {\n message: StreamMessage | null;\n filters?: StreamMessageDetailFilters;\n}) {\n if (!message) return null;\n\n return (\n <div className=\"space-y-5 text-[11px]\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[message.status]}`} />\n <FilterableField\n label=\"\"\n value={STATUS_LABEL[message.status]}\n onFilter={() => filters?.onFilterStatus?.(message.status)}\n />\n <span className={SOURCE_BADGE}>{message.source}</span>\n </div>\n <FilterableField\n label=\"\"\n value={message.stream_name}\n onFilter={() => filters?.onFilterStreamName?.(message.stream_name)}\n />\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">ID: {message.id}</p>\n </div>\n\n {/* Timestamps */}\n <div className=\"space-y-2\">\n <SectionLabel>Timestamps</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <Timestamp label=\"Created\" value={message.created_at} />\n <Timestamp label=\"Reserved\" value={message.reserved_at} />\n <Timestamp label=\"Processed\" value={message.expired_at} />\n <Timestamp label=\"Dead-lettered\" value={message.dead_lettered_at} />\n </div>\n </div>\n\n {/* Metadata */}\n <div className=\"space-y-2\">\n <SectionLabel>Metadata</SectionLabel>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Priority\" value={String(message.priority)} />\n <Field label=\"Retries\" value={`${message.retry_attempt} / ${message.max_retry_attempts}`} />\n <Field label=\"Reserved by\" value={message.reserved_by} />\n </div>\n </div>\n\n {/* Worker-specific fields — clickable to filter */}\n {message.source === 'worker' && (\n <div className=\"space-y-2\">\n <SectionLabel>Worker Details</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Workflow\" value={message.workflow_name} onFilter={filters?.onFilterWorkflow} />\n <FilterableField label=\"Job ID\" value={message.jid} onFilter={filters?.onFilterJid} />\n <FilterableField label=\"Activity\" value={message.aid} onFilter={filters?.onFilterAid} />\n <Field label=\"Dimension\" value={message.dad} />\n <FilterableField label=\"Type\" value={message.msg_type} onFilter={filters?.onFilterMsgType} />\n <FilterableField label=\"Topic\" value={message.topic} onFilter={filters?.onFilterTopic} />\n </div>\n </div>\n )}\n\n {/* Message payload — fully expanded by default */}\n <div className=\"space-y-2\">\n <JsonViewer data={message.message} label=\"Payload\" defaultCollapsed={false} />\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useControlPlaneApps } from '../../../api/controlplane';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nexport function StreamMessagesPage() {\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: 'durable', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const { data: appsData } = useControlPlaneApps();\n const namespaceOptions = useMemo(\n () => (appsData?.apps ?? []).map((a) => ({ value: a.appId, label: a.appId })),\n [appsData],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || 'durable',\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n const columns: Column<StreamMessage>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => (\n <div className=\"flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[row.status]}`} />\n <span className=\"text-xs\">{STATUS_LABEL[row.status]}</span>\n </div>\n ),\n className: 'w-28',\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-20',\n },\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <span className=\"font-mono text-xs text-text-secondary truncate block max-w-[240px]\" title={row.stream_name}>\n {row.stream_name}\n </span>\n ),\n },\n {\n key: 'msg_type',\n label: 'Type',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">{row.msg_type || '—'}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at ? <TimestampCell date={row.reserved_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at ? <TimestampCell date={row.expired_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-12 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-16',\n },\n ];\n\n return (\n <div>\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/controlplane/stream-messages?namespace=${filters.namespace || 'durable'}&source=${filters.source || 'worker'}&limit=${pagination.pageSize}&offset=${pagination.offset}${filters.status ? `&status=${filters.status}` : ''}${filters.stream_name ? `&stream_name=${filters.stream_name}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'jid', label: 'Job', value: filters.jid },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter`}\n >\n {f.label}: {f.value}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\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\n {/* Detail panel — portaled to body so fixed positioning works */}\n {panelOpen && createPortal(\n <div className=\"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg\" style={{ top: '3.5rem' }}>\n <div className=\"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50\">\n <span className=\"text-xs font-medium text-text-primary\">Message Detail</span>\n <button\n onClick={() => setSelected(null)}\n className=\"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"px-4 py-4\">\n <StreamMessageDetail\n message={activeMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n"],"names":["fetchStreamMessages","params","qs","apiFetch","useStreamMessages","useQuery","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","STATUS_OPTIONS","SOURCE_OPTIONS","Timestamp","label","value","jsxDEV","DateValue","Field","FilterableField","onFilter","Filter","StreamMessageDetail","message","filters","_a","SectionLabel","JsonViewer","StreamMessagesPage","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","appsData","useControlPlaneApps","namespaceOptions","useMemo","a","data","isLoading","refetch","isFetching","messages","total","activeMessage","m","panelOpen","columns","row","TimestampCell","PageHeader","FilterBar","ListToolbar","FilterSelect","v","FilterInput","f","X","DataTable","StickyPagination","createPortal"],"mappings":"qoBAsDA,SAASA,EAAoBC,EAA8B,CACzD,MAAMC,EAAK,IAAI,gBACf,OAAAA,EAAG,IAAI,YAAaD,EAAO,SAAS,EACpCC,EAAG,IAAI,SAAUD,EAAO,MAAM,EAC1BA,EAAO,OAAOC,EAAG,IAAI,QAAS,OAAOD,EAAO,KAAK,CAAC,EAClDA,EAAO,QAAQC,EAAG,IAAI,SAAU,OAAOD,EAAO,MAAM,CAAC,EACrDA,EAAO,SAASC,EAAG,IAAI,UAAWD,EAAO,OAAO,EAChDA,EAAO,OAAOC,EAAG,IAAI,QAASD,EAAO,KAAK,EAC1CA,EAAO,QAAQC,EAAG,IAAI,SAAUD,EAAO,MAAM,EAC7CA,EAAO,aAAaC,EAAG,IAAI,cAAeD,EAAO,WAAW,EAC5DA,EAAO,UAAUC,EAAG,IAAI,WAAYD,EAAO,QAAQ,EACnDA,EAAO,OAAOC,EAAG,IAAI,QAASD,EAAO,KAAK,EAC1CA,EAAO,eAAeC,EAAG,IAAI,gBAAiBD,EAAO,aAAa,EAClEA,EAAO,KAAKC,EAAG,IAAI,MAAOD,EAAO,GAAG,EACpCA,EAAO,KAAKC,EAAG,IAAI,MAAOD,EAAO,GAAG,EACjCE,EAAiC,iCAAiCD,CAAE,EAAE,CAC/E,CAIO,SAASE,EAAkBH,EAA8B,CAC9D,OAAOI,EAAS,CACd,SAAU,CAAC,eAAgB,kBAAmBJ,CAAM,EACpD,QAAS,IAAMD,EAAoBC,CAAM,EACzC,QAAS,CAAC,CAACA,EAAO,UAClB,UAAW,IAAA,CACZ,CACH,CC/EO,MAAMK,EAAkD,CAC7D,QAAS,mBACT,QAAS,oBACT,UAAW,oBACX,cAAe,iBACjB,EAEaC,EAAoD,CAC/D,QAAS,UACT,QAAS,UACT,UAAW,YACX,cAAe,eACjB,EAEaC,EACX,iGAEWC,EAAiB,CAC5B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,gBAAiB,MAAO,eAAA,CACnC,EAEaC,EAAiB,CAC5B,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,SAAU,MAAO,QAAA,CAC5B,ECtBA,SAASC,EAAU,CAAE,MAAAC,EAAO,MAAAC,GAAkD,CAC5E,OAAKA,WAEF,MAAA,CACC,SAAA,CAAAC,SAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAF,CAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4C,EAC5CE,EAAAA,OAAC,OAAI,UAAU,SACb,kBAACC,EAAA,CAAU,KAAMF,EAAO,OAAO,UAAA,EAA/B,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA0C,CAAA,EAD5C,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,EAPiB,IASrB,CAEA,SAASG,EAAM,CAAE,MAAAJ,EAAO,MAAAC,GAA8D,CACpF,OAAKA,WAEF,MAAA,CACC,SAAA,CAAAC,SAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAF,CAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4C,EAC5CE,SAAC,IAAA,CAAE,UAAU,gDAAiD,SAAAD,CAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAoE,CAAA,CAAA,EAFtE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,EALiB,IAOrB,CAGA,SAASI,EAAgB,CAAE,MAAAL,EAAO,MAAAC,EAAO,SAAAK,GAItC,CACD,OAAKL,WAEF,MAAA,CACC,SAAA,CAAAC,SAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAF,CAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4C,EAC5CE,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMI,GAAA,YAAAA,EAAWL,GAC1B,UAAU,iDACV,MAAO,aAAaD,EAAM,YAAA,CAAa,KAAKC,CAAK,GAEjD,SAAA,CAAAC,SAAC,IAAA,CAAE,UAAU,0FAA2F,SAAAD,CAAA,EAAxG,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA8G,EAC9GC,EAAAA,OAACK,EAAA,CAAO,UAAU,gGAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAmH,CAAA,CAAA,EANrH,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAOA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,EAZiB,IAcrB,CAoBO,SAASC,EAAoB,CAAE,QAAAC,EAAS,QAAAC,GAG5C,CACD,OAAKD,EAGHP,EAAAA,OAAC,MAAA,CAAI,UAAU,wBAEb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAA,EAAAA,OAAC,QAAK,UAAW,iCAAiCR,EAAWe,EAAQ,MAAM,CAAC,IAA5E,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgF,EAChFP,EAAAA,OAACG,EAAA,CACC,MAAM,GACN,MAAOV,EAAac,EAAQ,MAAM,EAClC,SAAU,IAAA,OAAM,OAAAE,EAAAD,GAAA,YAAAA,EAAS,iBAAT,YAAAC,EAAA,KAAAD,EAA0BD,EAAQ,QAAM,EAH1D,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAKAP,SAAC,OAAA,CAAK,UAAWN,EAAe,WAAQ,MAAA,EAAxC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+C,CAAA,CAAA,EAPjD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,EACAM,EAAAA,OAACG,EAAA,CACC,MAAM,GACN,MAAOI,EAAQ,YACf,SAAU,IAAA,OAAM,OAAAE,EAAAD,GAAA,YAAAA,EAAS,qBAAT,YAAAC,EAAA,KAAAD,EAA8BD,EAAQ,aAAW,EAHnE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAKAP,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,CAAA,OAAKO,EAAQ,EAAA,CAAA,EAAlE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqE,CAAA,CAAA,EAfvE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgBA,EAGAP,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAACU,GAAa,SAAA,YAAA,EAAd,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAwB,EACxBV,EAAAA,OAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,SAACH,EAAA,CAAU,MAAM,UAAU,MAAOU,EAAQ,UAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsD,WACrDV,EAAA,CAAU,MAAM,WAAW,MAAOU,EAAQ,WAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,WACvDV,EAAA,CAAU,MAAM,YAAY,MAAOU,EAAQ,UAAA,EAA5C,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,WACvDV,EAAA,CAAU,MAAM,gBAAgB,MAAOU,EAAQ,gBAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkE,CAAA,CAAA,EAJpE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAKA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,EAGAP,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAACU,GAAa,SAAA,UAAA,EAAd,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAsB,EACtBV,EAAAA,OAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,OAACE,GAAM,MAAM,WAAW,MAAO,OAAOK,EAAQ,QAAQ,GAAtD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyD,EACzDP,EAAAA,OAACE,EAAA,CAAM,MAAM,UAAU,MAAO,GAAGK,EAAQ,aAAa,MAAMA,EAAQ,kBAAkB,EAAA,EAAtF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0F,WACzFL,EAAA,CAAM,MAAM,cAAc,MAAOK,EAAQ,WAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuD,CAAA,CAAA,EAHzD,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,EAGCA,EAAQ,SAAW,UAClBP,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAACU,GAAa,SAAA,gBAAA,EAAd,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4B,EAC5BV,EAAAA,OAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,OAACG,EAAA,CAAgB,MAAM,WAAW,MAAOI,EAAQ,cAAe,SAAUC,GAAA,YAAAA,EAAS,gBAAA,EAAnF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqG,EACrGR,EAAAA,OAACG,GAAgB,MAAM,SAAS,MAAOI,EAAQ,IAAK,SAAUC,GAAA,YAAAA,EAAS,WAAA,EAAvE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoF,EACpFR,EAAAA,OAACG,GAAgB,MAAM,WAAW,MAAOI,EAAQ,IAAK,SAAUC,GAAA,YAAAA,EAAS,WAAA,EAAzE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsF,WACrFN,EAAA,CAAM,MAAM,YAAY,MAAOK,EAAQ,GAAA,EAAxC,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6C,EAC7CP,EAAAA,OAACG,GAAgB,MAAM,OAAO,MAAOI,EAAQ,SAAU,SAAUC,GAAA,YAAAA,EAAS,eAAA,EAA1E,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2F,EAC3FR,EAAAA,OAACG,GAAgB,MAAM,QAAQ,MAAOI,EAAQ,MAAO,SAAUC,GAAA,YAAAA,EAAS,aAAA,EAAxE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuF,CAAA,CAAA,EANzF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAUA,EAIFR,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAAA,EAAAA,OAACW,EAAA,CAAW,KAAMJ,EAAQ,QAAS,MAAM,UAAU,iBAAkB,EAAA,EAArE,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA4E,CAAA,EAD9E,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EA3DF,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA4DA,EA/DmB,IAiEvB,CC3HO,SAASK,IAAqB,CACnC,KAAM,CAAE,QAAAJ,EAAS,UAAAK,EAAW,WAAAC,EAAY,KAAAC,EAAM,QAAAC,CAAA,EAAYC,EAAgB,CACxE,QAAS,CAAE,UAAW,UAAW,OAAQ,SAAU,OAAQ,GAAI,YAAa,GAAI,SAAU,GAAI,MAAO,GAAI,cAAe,GAAI,IAAK,GAAI,IAAK,EAAA,CAAG,CAC9I,EAEK,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAA+B,IAAI,EAE7D,CAAE,KAAMC,CAAA,EAAaC,EAAA,EACrBC,EAAmBC,EAAAA,QACvB,MAAOH,GAAA,YAAAA,EAAU,OAAQ,CAAA,GAAI,IAAKI,IAAO,CAAE,MAAOA,EAAE,MAAO,MAAOA,EAAE,OAAQ,EAC5E,CAACJ,CAAQ,CAAA,EAGL,CAAE,KAAAK,EAAM,UAAAC,EAAW,QAAAC,EAAS,WAAAC,CAAA,EAAevC,EAAkB,CACjE,UAAWkB,EAAQ,WAAa,UAChC,OAASA,EAAQ,QAAkC,SACnD,MAAOM,EAAW,SAClB,OAAQA,EAAW,OACnB,QAASC,EAAK,SAAW,aACzB,MAAOA,EAAK,OAAS,OACrB,OAASP,EAAQ,QAAkB,OACnC,YAAaA,EAAQ,aAAe,OACpC,SAAUA,EAAQ,UAAY,OAC9B,MAAOA,EAAQ,OAAS,OACxB,cAAeA,EAAQ,eAAiB,OACxC,IAAKA,EAAQ,KAAO,OACpB,IAAKA,EAAQ,KAAO,MAAA,CACrB,EAEKsB,GAAWJ,GAAA,YAAAA,EAAM,WAAY,CAAA,EAC7BK,GAAQL,GAAA,YAAAA,EAAM,QAAS,EAEvBM,EAAgBR,EAAAA,QAAQ,IACvBN,EACEY,EAAS,KAAMG,GAAMA,EAAE,KAAOf,EAAS,IAAMe,EAAE,SAAWf,EAAS,MAAM,GAAKA,EAD/D,KAErB,CAACY,EAAUZ,CAAQ,CAAC,EAEjBgB,EAAY,CAAC,CAACF,EAEdG,EAAmC,CACvC,CACE,IAAK,SACL,MAAO,SACP,OAASC,GACPpC,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,QAAK,UAAW,iCAAiCR,EAAW4C,EAAI,MAAM,CAAC,IAAxE,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4E,WAC3E,OAAA,CAAK,UAAU,UAAW,SAAA3C,EAAa2C,EAAI,MAAM,GAAlD,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoD,CAAA,CAAA,EAFtD,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,EAEF,UAAW,MAAA,EAEb,CACE,IAAK,SACL,MAAO,SACP,OAASA,GAAQpC,SAAC,QAAK,UAAWN,EAAe,WAAI,QAApC,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2C,EAC5D,UAAW,MAAA,EAEb,CACE,IAAK,cACL,MAAO,SACP,SAAU,GACV,OAAS0C,GACPpC,EAAAA,OAAC,OAAA,CAAK,UAAU,qEAAqE,MAAOoC,EAAI,YAC7F,SAAAA,EAAI,WAAA,EADP,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAGJ,CACE,IAAK,WACL,MAAO,OACP,OAASA,GACPpC,EAAAA,OAAC,QAAK,UAAU,8BAA+B,SAAAoC,EAAI,UAAY,GAAA,EAA/D,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAmE,EAErE,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,SAAU,GACV,OAASA,YAASC,EAAA,CAAc,KAAMD,EAAI,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqC,EACtD,UAAW,MAAA,EAEb,CACE,IAAK,cACL,MAAO,WACP,OAASA,GAAQA,EAAI,YAAcpC,EAAAA,OAACqC,EAAA,CAAc,KAAMD,EAAI,aAAzB,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsC,EAAKpC,SAAC,OAAA,CAAK,UAAU,6BAA6B,SAAA,KAA7C,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8C,EAC5H,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,YACP,OAASoC,GAAQA,EAAI,WAAapC,EAAAA,OAACqC,EAAA,CAAc,KAAMD,EAAI,YAAzB,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EAAKpC,SAAC,OAAA,CAAK,UAAU,6BAA6B,SAAA,KAA7C,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8C,EAC1H,UAAW,MAAA,EAEb,CACE,IAAK,WACL,MAAO,MACP,SAAU,GACV,OAASoC,GAAQpC,SAAC,QAAK,UAAU,8BAA+B,WAAI,UAAnD,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,EAC7E,UAAW,iBAAA,EAEb,CACE,IAAK,gBACL,MAAO,UACP,OAASoC,GACPpC,EAAAA,OAAC,OAAA,CAAK,UAAU,8BACb,SAAA,CAAAoC,EAAI,cAAc,IAAEA,EAAI,kBAAA,CAAA,EAD3B,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,EAEF,UAAW,MAAA,CACb,EAGF,gBACG,MAAA,CACC,SAAA,CAAApC,SAACsC,EAAA,CAAW,MAAM,WAAW,SAAS,6BAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAoE,EAEpEtC,SAACuC,GAAU,QACTvC,EAAAA,OAACwC,EAAA,CACC,UAAW,IAAMZ,EAAA,EACjB,WAAAC,EACA,QAAS,2CAA2CrB,EAAQ,WAAa,SAAS,WAAWA,EAAQ,QAAU,QAAQ,UAAUM,EAAW,QAAQ,WAAWA,EAAW,MAAM,GAAGN,EAAQ,OAAS,WAAWA,EAAQ,MAAM,GAAK,EAAE,GAAGA,EAAQ,YAAc,gBAAgBA,EAAQ,WAAW,GAAK,EAAE,EAAA,EAHzS,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA,SAAA,CAAAR,EAAAA,OAACyC,EAAA,CACC,MAAM,YACN,MAAOjC,EAAQ,UACf,SAAWkC,GAAM7B,EAAU,YAAa6B,CAAC,EACzC,QAASnB,EACT,SAAQ,EAAA,EALV,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOAvB,EAAAA,OAACyC,EAAA,CACC,MAAM,SACN,MAAOjC,EAAQ,OACf,SAAWkC,GAAM7B,EAAU,SAAU6B,CAAC,EACtC,QAAS9C,EACT,SAAQ,EAAA,EALV,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOAI,EAAAA,OAACyC,EAAA,CACC,MAAM,SACN,MAAOjC,EAAQ,OACf,SAAWkC,GAAM7B,EAAU,SAAU6B,CAAC,EACtC,QAAS/C,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMAK,EAAAA,OAAC2C,EAAA,CACC,MAAM,SACN,MAAOnC,EAAQ,YACf,SAAWkC,GAAM7B,EAAU,cAAe6B,CAAC,EAC3C,YAAY,wBAAA,EAJd,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOC,CACC,CAAE,IAAK,QAAS,MAAO,QAAS,MAAOlC,EAAQ,KAAA,EAC/C,CAAE,IAAK,gBAAiB,MAAO,WAAY,MAAOA,EAAQ,aAAA,EAC1D,CAAE,IAAK,MAAO,MAAO,MAAO,MAAOA,EAAQ,GAAA,EAC3C,CAAE,IAAK,MAAO,MAAO,WAAY,MAAOA,EAAQ,GAAA,EAChD,CAAE,IAAK,WAAY,MAAO,OAAQ,MAAOA,EAAQ,QAAA,CAAS,EAC1D,OAAQoC,GAAMA,EAAE,KAAK,EAAE,IAAKA,GAC5B5C,EAAAA,OAAC,SAAA,CAEC,QAAS,IAAMa,EAAU+B,EAAE,IAAY,EAAE,EACzC,UAAU,8IACV,MAAO,SAASA,EAAE,KAAK,UAEtB,SAAA,CAAAA,EAAE,MAAM,KAAGA,EAAE,MACd5C,EAAAA,OAAC6C,EAAA,CAAE,UAAU,aAAA,EAAb,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,CAAA,CAAA,EANtBD,EAAE,IADT,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CASD,CAAA,CAAA,EAlDH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmDA,EAEA5C,EAAAA,OAAC8C,EAAA,CACC,QAAAX,EACA,KAAML,EACN,MAAQM,GAAQ,GAAGA,EAAI,MAAM,IAAIA,EAAI,EAAE,GACvC,UAAAT,EACA,aAAa,2BACb,WAAaS,GAAQjB,EAAYiB,CAAG,EACpC,aAAcJ,EAAgB,GAAGA,EAAc,MAAM,IAAIA,EAAc,EAAE,GAAK,KAC9E,KAAAjB,EACA,OAAQC,CAAA,EATV,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAYAhB,EAAAA,OAAC+C,EAAA,CACC,KAAMjC,EAAW,KACjB,WAAYA,EAAW,WAAWiB,CAAK,EACvC,aAAcjB,EAAW,QACzB,MAAAiB,EACA,SAAUjB,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAUCoB,GAAac,EAAAA,aACZhD,SAAC,OAAI,UAAU,4GAA4G,MAAO,CAAE,IAAK,UACvI,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,6GACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,wCAAwC,SAAA,gBAAA,EAAxD,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsE,EACtEA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMmB,EAAY,IAAI,EAC/B,UAAU,kGACV,MAAM,QAEN,SAAAnB,EAAAA,OAAC6C,EAAA,CAAE,UAAU,SAAA,EAAb,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EALzB,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IASA,EACA7C,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAAA,EAAAA,OAACM,EAAA,CACC,QAAS0B,EACT,QAAS,CACP,eAAiBU,GAAM7B,EAAU,SAAU6B,CAAC,EAC5C,mBAAqBA,GAAM7B,EAAU,cAAe6B,CAAC,EACrD,gBAAkBA,GAAM7B,EAAU,WAAY6B,CAAC,EAC/C,cAAgBA,GAAM7B,EAAU,QAAS6B,CAAC,EAC1C,iBAAmBA,GAAM7B,EAAU,gBAAiB6B,CAAC,EACrD,YAAcA,GAAM7B,EAAU,MAAO6B,CAAC,EACtC,YAAcA,GAAM7B,EAAU,MAAO6B,CAAC,CAAA,CACxC,EAVF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAWA,EAZF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,CAAA,CAAA,EAxBF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAyBA,EACA,SAAS,IAAA,CACX,CAAA,EA1GF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA2GA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./index-MnRuwfHN.js";import{a as l}from"./vendor-query-DLp59M9_.js";import{P as oe}from"./PageHeader-C4DNgZKA.js";import{F as ie,a as de}from"./FilterBar-BoRQss2J.js";import{L as me}from"./ListToolbar-BMWttsi2.js";import{S as ce}from"./StickyPagination-CXBDS1ka.js";import{E as Q}from"./EmptyState-Di6_NfbP.js";import{D as ue}from"./DropZone-Bl4j-AID.js";import{T as _}from"./TimeAgo-BAs-HL55.js";import{u as pe,a as ge,b as ne,c as be,d as he,e as le,f as Ne}from"./knowledge-krdvn5bg.js";import{T as xe}from"./TagInput-BYEjEPsa.js";import{o as fe,X as we,Y as Z,d as X,n as ee,D as ae,aA as se}from"./vendor-icons-YdqUbzg6.js";import{a as Ee,f as ve}from"./vendor-react-Co3Y8ikm.js";function ye(t){return t==null?"":typeof t=="string"?t:JSON.stringify(t,null,2)}function te(t){const r=t.trim();if(!r)return{value:"",looksLikeJson:!1,parsedOk:!1};const o=r.startsWith("{")||r.startsWith("[");try{return{value:JSON.parse(r),looksLikeJson:o,parsedOk:!0}}catch{return{value:r,looksLikeJson:o,parsedOk:!1}}}function re(t){if(typeof t=="string"){const r=t.trim();return!(r.startsWith("{")&&r.endsWith("}")||r.startsWith("[")&&r.endsWith("]"))}return typeof t=="number"||typeof t=="boolean"||t===null}function q({value:t,onChange:r,onKeyDown:o,placeholder:i,mono:m}){const c=l.useRef(null);return l.useEffect(()=>{c.current&&(c.current.style.height="auto",c.current.style.height=`${c.current.scrollHeight}px`,c.current.focus())},[t]),e.jsxDEV("textarea",{ref:c,value:t,onChange:f=>r(f.target.value),onKeyDown:o,placeholder:i,rows:1,className:`w-full bg-transparent text-xs text-text-primary resize-none outline-none p-0 ${m?"font-mono":""}`,style:{minHeight:"1.5em"}},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:60,columnNumber:5},this)}function ke({domain:t,entryKey:r,onDeleted:o}){const{data:i,isLoading:m,refetch:c}=pe(t,r),f=ge(),u=ne(),S=be(),k=he(),[V,M]=l.useState(!1),[p,h]=l.useState(null),[D,N]=l.useState(""),[x,P]=l.useState(""),[j,n]=l.useState(""),[C,A]=l.useState(null),[R,J]=l.useState(null),[F,w]=l.useState(!1),E=i==null?void 0:i.data,T=E?Object.entries(E):[],H=l.useMemo(()=>{const a=x.trim().toLowerCase();return a?T.filter(([b])=>b.toLowerCase().includes(a)):T},[T,x]),G=l.useCallback((a,b)=>b==="field"?a:ye(E==null?void 0:E[a]),[E]),W=p?D!==G(p.field,p.column):!1;function $(a,b){h({field:a,column:b}),N(G(a,b)),A(null)}function O(){h(null),N("")}function s(){J("Invalid JSON — saved as text"),setTimeout(()=>J(null),4e3)}async function d(){if(!p||!E)return;const{field:a,column:b}=p;if(b==="value"){const{value:y,looksLikeJson:K,parsedOk:z}=te(D);K&&!z&&s(),await S.mutateAsync({domain:t,key:r,path:a,value:y})}else{const y=D.trim();if(!y||y===a){O();return}const K=E[a];await k.mutateAsync({domain:t,key:r,path:a}),await S.mutateAsync({domain:t,key:r,path:y,value:K})}h(null),N(""),c()}async function v(a){await k.mutateAsync({domain:t,key:r,path:a}),A(null),h(null),c()}async function g(a){await u.mutateAsync({domain:t,key:r,data:E||{},tags:a,replace:!0}),c()}async function B(){const a=x.trim();if(!a)return;const{value:b,looksLikeJson:y,parsedOk:K}=te(j);y&&!K&&s();const z={...E,[a]:b||""};await u.mutateAsync({domain:t,key:r,data:z}),P(""),n(""),c()}function U(a){a.key==="Escape"?O():a.key==="Enter"&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),d())}function Y(a){a.key==="Escape"?(P(""),n("")):a.key==="Enter"&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),B())}return m?e.jsxDEV("div",{className:"animate-pulse space-y-3 mt-4",children:[e.jsxDEV("div",{className:"h-4 bg-surface-sunken rounded w-1/3"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:200,columnNumber:9},this),e.jsxDEV("div",{className:"h-48 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:201,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:199,columnNumber:7},this):!i||i.found===!1?e.jsxDEV("p",{className:"text-sm text-text-tertiary mt-4",children:"Entry not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:207,columnNumber:12},this):e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[e.jsxDEV("div",{className:"flex items-center gap-4 min-h-[28px]",children:F?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(xe,{tags:i.tags||[],onChange:a=>{g(a)},placeholder:"Add tag...",compact:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:217,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>w(!1),className:"text-[10px] text-text-tertiary hover:text-text-secondary shrink-0",children:"Done"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:223,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:216,columnNumber:13},this):e.jsxDEV("div",{className:"flex items-center gap-1 cursor-text group",onClick:()=>w(!0),title:"Click to edit tags",children:i.tags&&i.tags.length>0?i.tags.map(a=>e.jsxDEV("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-medium bg-accent/10 text-accent",children:a},a,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:238,columnNumber:19},this)):e.jsxDEV("span",{className:"text-[10px] text-text-tertiary/40 italic group-hover:text-text-tertiary",children:"add tags..."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:243,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:231,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:214,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:e.jsxDEV(_,{date:i.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:249,columnNumber:60},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:249,columnNumber:11},this),V?e.jsxDEV("span",{className:"flex items-center gap-2 text-[10px]",children:[e.jsxDEV("span",{className:"text-status-error",children:"Delete entry?"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:252,columnNumber:15},this),e.jsxDEV("button",{onClick:async()=>{try{await f.mutateAsync({domain:t,key:r}),o()}catch{}},className:"font-medium text-status-error hover:text-status-error/80",disabled:f.isPending,children:f.isPending?"Deleting...":"Yes"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:253,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>M(!1),className:"text-text-tertiary hover:text-text-secondary",children:"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:265,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:251,columnNumber:13},this):e.jsxDEV("button",{onClick:()=>M(!0),className:"text-text-tertiary/50 hover:text-status-error transition-colors",title:"Delete entry",children:e.jsxDEV(fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:278,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:273,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:248,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:213,columnNumber:7},this),R&&e.jsxDEV("div",{className:"flex items-center justify-end gap-2 mb-2 px-1",children:[e.jsxDEV("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:286,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-status-warning",children:R},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:287,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:285,columnNumber:9},this),e.jsxDEV("table",{className:"w-full border-collapse",children:[e.jsxDEV("thead",{className:"sticky top-0 z-10 bg-surface",children:[e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary border-b border-surface-border",children:[e.jsxDEV("th",{className:"px-3 py-2 font-medium w-[200px] border-r border-surface-border",children:"Field"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:295,columnNumber:13},this),e.jsxDEV("th",{className:"px-3 py-2 font-medium",children:"Value"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:296,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:294,columnNumber:11},this),e.jsxDEV("tr",{className:"border-b border-surface-border bg-surface",children:[e.jsxDEV("td",{className:"px-3 py-2 align-top border-r border-surface-border",children:e.jsxDEV("input",{value:x,onChange:a=>P(a.target.value),onKeyDown:Y,placeholder:T.length?"add or filter...":"new field",className:"w-full bg-transparent text-xs text-text-primary placeholder:text-text-tertiary/40 placeholder:italic outline-none p-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:301,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:300,columnNumber:13},this),e.jsxDEV("td",{className:"px-3 py-2 align-top",children:[e.jsxDEV(q,{value:j,onChange:n,onKeyDown:Y,placeholder:"value"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:310,columnNumber:15},this),x.trim()&&e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[e.jsxDEV("button",{onClick:B,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:318,columnNumber:19},this),e.jsxDEV("button",{onClick:()=>{P(""),n("")},className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:325,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:317,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:309,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:299,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:293,columnNumber:9},this),e.jsxDEV("tbody",{children:H.map(([a,b])=>{const y=(p==null?void 0:p.field)===a&&p.column==="field",K=(p==null?void 0:p.field)===a&&p.column==="value",z=y||K,L=C===a;return e.jsxDEV("tr",{className:`border-b border-surface-border ${L?"bg-status-error/10":z?"":"hover:bg-surface-hover/30"}`,children:[e.jsxDEV("td",{className:`px-3 py-2 align-top border-r cursor-text ${L?"bg-transparent border-r-transparent":y?"border-r-surface-border bg-accent/5 border-l-2 border-l-accent":"border-r-surface-border"}`,onClick:()=>!y&&!L&&$(a,"field"),children:y?e.jsxDEV("div",{children:[e.jsxDEV(q,{value:D,onChange:N,onKeyDown:U,placeholder:"field name"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:352,columnNumber:23},this),W&&e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[e.jsxDEV("button",{onClick:d,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:355,columnNumber:27},this),e.jsxDEV("button",{onClick:O,className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:358,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:354,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:351,columnNumber:21},this):e.jsxDEV("span",{className:"text-xs font-medium text-text-secondary break-all",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:363,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:346,columnNumber:17},this),e.jsxDEV("td",{className:`px-3 py-2 align-top cursor-text ${L?"bg-transparent":K?"bg-accent/5 border-l-2 border-l-accent":""}`,onClick:()=>!K&&!L&&$(a,"value"),children:L?e.jsxDEV("span",{className:"flex items-center justify-end gap-2 text-[10px]",children:[e.jsxDEV("span",{className:"text-status-error",children:["Remove ",e.jsxDEV("span",{className:"font-medium",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:374,columnNumber:66},this),"?"]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:374,columnNumber:23},this),e.jsxDEV("button",{onClick:I=>{I.stopPropagation(),v(a)},className:"font-medium text-status-error hover:text-status-error/80",disabled:u.isPending,children:u.isPending?"...":"Yes"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:375,columnNumber:23},this),e.jsxDEV("button",{onClick:I=>{I.stopPropagation(),A(null)},className:"text-text-tertiary hover:text-text-secondary",children:"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:382,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:373,columnNumber:21},this):K?e.jsxDEV("div",{children:[e.jsxDEV(q,{value:D,onChange:N,onKeyDown:U,placeholder:"value (string or JSON)",mono:!re(b)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:391,columnNumber:23},this),e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[W&&e.jsxDEV("button",{onClick:d,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:400,columnNumber:27},this),e.jsxDEV("button",{onClick:O,className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:404,columnNumber:25},this),e.jsxDEV("button",{onClick:I=>{I.stopPropagation(),A(a)},className:"text-[10px] text-status-error/50 hover:text-status-error ml-auto",children:"Remove"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:405,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:398,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:390,columnNumber:21},this):re(b)?e.jsxDEV("p",{className:"text-xs text-text-primary break-words whitespace-pre-wrap",children:String(b)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:415,columnNumber:23},this):e.jsxDEV("pre",{className:"text-xs text-text-primary font-mono whitespace-pre-wrap break-words",children:typeof b=="string"?b:JSON.stringify(b,null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:417,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:368,columnNumber:17},this)]},a,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:344,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:336,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:292,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:211,columnNumber:5},this)}function Ve({open:t,onClose:r,onCreated:o,prefillData:i,prefillDomain:m}){const{data:c}=le(),f=ne(),[u,S]=l.useState(m||""),[k,V]=l.useState(""),[M,p]=l.useState(i?JSON.stringify(i,null,2):"{}"),[h,D]=l.useState(""),[N,x]=l.useState(""),P=((c==null?void 0:c.domains)??[]).map(n=>n.domain);if(l.useEffect(()=>{t&&(p(i?JSON.stringify(i,null,2):"{}"),S(m||""),V(""),D(""),x(""))},[t,i,m]),!t)return null;const j=async()=>{if(x(""),!u.trim()){x("Domain is required");return}if(!k.trim()){x("Key is required");return}let n;try{if(n=JSON.parse(M),typeof n!="object"||Array.isArray(n))throw new Error}catch{x("Data must be a valid JSON object");return}try{await f.mutateAsync({domain:u.trim(),key:k.trim(),data:n,tags:h?h.split(",").map(C=>C.trim()).filter(Boolean):[]}),o==null||o(u.trim(),k.trim()),r()}catch(C){x(C.message)}};return Ee.createPortal(e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"fixed inset-0 z-40 bg-black/30",onClick:r},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:68,columnNumber:7},this),e.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-6 overflow-y-auto",children:e.jsxDEV("div",{className:"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-md max-h-[85vh] flex flex-col",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-5 py-4 border-b border-surface-border",children:[e.jsxDEV("h3",{className:"text-sm font-medium text-text-primary",children:"New Knowledge Entry"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:72,columnNumber:13},this),e.jsxDEV("button",{onClick:r,className:"text-text-tertiary hover:text-text-primary",children:e.jsxDEV(we,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:74,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:73,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:71,columnNumber:11},this),e.jsxDEV("div",{className:"px-5 py-4 space-y-4 overflow-y-auto flex-1 min-h-0",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Domain"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:81,columnNumber:15},this),e.jsxDEV("input",{type:"text",list:"domain-list",value:u,onChange:n=>S(n.target.value),placeholder:"e.g., screenshots, config, emails",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:82,columnNumber:15},this),e.jsxDEV("datalist",{id:"domain-list",children:P.map(n=>e.jsxDEV("option",{value:n},n,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:91,columnNumber:45},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:90,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:80,columnNumber:13},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Key"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:97,columnNumber:15},this),e.jsxDEV("input",{type:"text",value:k,onChange:n=>V(n.target.value),placeholder:"e.g., homepage, user-profile, report-2026",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:98,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:96,columnNumber:13},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Data (JSON)"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:109,columnNumber:15},this),e.jsxDEV("textarea",{value:M,onChange:n=>p(n.target.value),rows:8,className:"input-json w-full max-h-[30vh]"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:110,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:108,columnNumber:13},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags (comma-separated)"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:120,columnNumber:15},this),e.jsxDEV("input",{type:"text",value:h,onChange:n=>D(n.target.value),placeholder:"e.g., important, review, 401k",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:121,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:119,columnNumber:13},this),N&&e.jsxDEV("p",{className:"text-xs text-status-error",children:N},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:130,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:78,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-2 px-5 py-3 border-t border-surface-border",children:[e.jsxDEV("button",{onClick:r,className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:134,columnNumber:13},this),e.jsxDEV("button",{onClick:j,disabled:f.isPending,className:"btn-primary text-xs",children:f.isPending?"Creating...":"Create Entry"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:135,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:133,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:70,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:69,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/CreateEntryModal.tsx",lineNumber:67,columnNumber:5},this),document.body)}const De=50;function We(){var W,$,O;const[t,r]=ve(),o=t.get("domain")||"",i=t.get("key")||"",[m,c]=l.useState(""),[f,u]=l.useState(""),[S,k]=l.useState(1),[V,M]=l.useState(De),[p,h]=l.useState(!1),[D,N]=l.useState(),x=l.useCallback(s=>{console.debug("[Knowledge] drop received:",s.map(g=>({name:g.name,type:g.type,size:g.size})));const d=s.find(g=>g.name.endsWith(".json")||g.type==="application/json");if(!d){console.warn("[Knowledge] no JSON file found in dropped files");return}console.debug("[Knowledge] reading:",d.name);const v=new FileReader;v.onload=()=>{try{const g=JSON.parse(v.result);typeof g=="object"&&!Array.isArray(g)?(console.debug("[Knowledge] parsed object with keys:",Object.keys(g)),N(g),h(!0)):console.warn("[Knowledge] JSON is not a plain object, got:",Array.isArray(g)?"array":typeof g)}catch(g){console.warn("[Knowledge] JSON parse failed:",g)}},v.readAsText(d)},[]);l.useEffect(()=>{const s=setTimeout(()=>{u(m),k(1)},300);return()=>clearTimeout(s)},[m]);const P=(S-1)*V,j=le(),n=Ne(o,{search:f||void 0,limit:V,offset:P}),C=((W=j.data)==null?void 0:W.domains)??[],A=(($=n.data)==null?void 0:$.entries)??[],R=((O=n.data)==null?void 0:O.total)??0,J=l.useMemo(()=>{if(!m)return C;const s=m.toLowerCase();return C.filter(d=>d.domain.toLowerCase().includes(s))},[C,m]);function F(s,d){c(""),u(""),k(1);const v={};s&&(v.domain=s),d&&(v.key=d),r(v)}const w=i?"entry":o?"entries":"domains",E=w==="entries"?n.isLoading:w==="domains"?j.isLoading:!1,T=Math.ceil((w==="entries"?R:J.length)/V),H=o?`/knowledge/entries?domain=${encodeURIComponent(o)}&limit=${V}&offset=${P}${f?`&search=${encodeURIComponent(f)}`:""}`:void 0;return e.jsxDEV(ue,{onDrop:x,label:"Drop a JSON file to create an entry",accept:".json,application/json",children:[e.jsxDEV("div",{children:[e.jsxDEV(oe,{title:"Knowledge",docsHash:"#docs:dashboard.md:knowledge",actions:e.jsxDEV("button",{onClick:()=>{N(void 0),h(!0)},className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(Z,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:113,columnNumber:13},this),"New Entry"]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:109,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:105,columnNumber:7},this),e.jsxDEV("nav",{className:"flex items-center gap-1 text-sm mb-6 min-h-[28px]",children:[e.jsxDEV("button",{onClick:()=>F(""),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${w==="domains"?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(X,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:129,columnNumber:11},this),e.jsxDEV("span",{children:"All Domains"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:130,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:121,columnNumber:9},this),o&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:134,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>F(o),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${w==="entries"?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(ae,{className:"w-3.5 h-3.5 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:143,columnNumber:15},this),o]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:135,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:133,columnNumber:11},this),i&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:150,columnNumber:13},this),e.jsxDEV("span",{className:"flex items-center gap-1.5 px-1.5 py-0.5 text-text-primary font-medium",children:[e.jsxDEV(se,{className:"w-3.5 h-3.5 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:152,columnNumber:15},this),i]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:151,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:149,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:120,columnNumber:7},this),w==="entry"?e.jsxDEV(ke,{domain:o,entryKey:i,onDeleted:()=>F(o)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:161,columnNumber:9},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(ie,{actions:e.jsxDEV(me,{onRefresh:()=>w==="entries"?n.refetch():j.refetch(),isFetching:w==="entries"?n.isFetching:j.isFetching,apiPath:w==="entries"?H:"/knowledge/domains"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:169,columnNumber:13},this),children:e.jsxDEV(de,{label:"Search",value:m,onChange:c,placeholder:o?"Filter by key or tag...":"Filter by domain..."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:175,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:168,columnNumber:11},this),E?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((s,d)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},d,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:186,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:184,columnNumber:13},this):w==="domains"?J.length===0?e.jsxDEV("div",{className:"cursor-pointer",onClick:()=>{N(void 0),h(!0)},children:e.jsxDEV(Q,{icon:X,title:m?"No matching domains":"No knowledge yet",description:m?void 0:"Create your first entry or drop a JSON file"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:192,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:191,columnNumber:15},this):e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium",children:"Domain"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:198,columnNumber:21},this),e.jsxDEV("th",{className:"pb-2 font-medium w-24 text-right",children:"Entries"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:199,columnNumber:21},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-40 text-right",children:"Latest"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:200,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:197,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:196,columnNumber:17},this),e.jsxDEV("tbody",{children:J.map(s=>e.jsxDEV("tr",{onClick:()=>F(s.domain),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(ae,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:212,columnNumber:27},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:s.domain},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:213,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:211,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:210,columnNumber:23},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:s.count},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:218,columnNumber:23},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(_,{date:s.latest},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:222,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:221,columnNumber:23},this)]},s.domain,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:205,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:203,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:195,columnNumber:15},this):A.length===0?e.jsxDEV("div",{className:"cursor-pointer",onClick:()=>{N(void 0),h(!0)},children:e.jsxDEV(Q,{icon:Z,title:m?"No matching entries":"No entries in this domain",description:m?void 0:"Add an entry or drop a JSON file"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:232,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:231,columnNumber:15},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium w-[200px]",children:"Key"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:239,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 font-medium",children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:240,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 font-medium w-16 text-right",children:"Fields"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:241,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-32 text-right",children:"Updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:242,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:238,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:237,columnNumber:19},this),e.jsxDEV("tbody",{children:A.map(s=>{var d;return e.jsxDEV("tr",{onClick:()=>F(o,s.key),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2 w-[200px]",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(se,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:254,columnNumber:29},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors truncate max-w-[160px]",title:s.key,children:s.key},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:255,columnNumber:29},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:253,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:252,columnNumber:25},this),e.jsxDEV("td",{className:"py-2",children:e.jsxDEV("div",{className:"flex flex-wrap gap-1",children:[(d=s.tags)==null?void 0:d.slice(0,5).map(v=>e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0 rounded-full text-[10px] font-medium bg-accent/10 text-accent",children:v},v,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:263,columnNumber:31},this)),s.tags&&s.tags.length>5&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:["+",s.tags.length-5]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:271,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:261,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:260,columnNumber:25},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:s.data?Object.keys(s.data).length:0},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:277,columnNumber:25},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(_,{date:s.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:281,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:280,columnNumber:25},this)]},s.key,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:247,columnNumber:23},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:245,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:236,columnNumber:17},this),e.jsxDEV(ce,{page:S,totalPages:T,onPageChange:k,total:R,pageSize:V,onPageSizeChange:M},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:288,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:235,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:167,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:104,columnNumber:5},this),e.jsxDEV(Ve,{open:p,onClose:()=>{h(!1),N(void 0)},onCreated:(s,d)=>{r({domain:s,key:d}),j.refetch()},prefillData:D,prefillDomain:o||void 0},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:303,columnNumber:5},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:103,columnNumber:5},this)}export{We as KnowledgePage};
|
|
2
|
+
//# sourceMappingURL=index-BVVdr9s0.js.map
|