@hotmeshio/long-tail 0.10.9 → 0.10.10
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/index.d.ts +1 -0
- package/build/api/index.js +2 -1
- package/build/api/personas.d.ts +121 -0
- package/build/api/personas.js +341 -0
- package/build/bin/ltc.js +23 -0
- package/build/lib/cli/commands/personas.d.ts +16 -0
- package/build/lib/cli/commands/personas.js +42 -0
- package/build/lib/db/schemas/024_personas.sql +53 -0
- package/build/routes/index.js +2 -0
- package/build/routes/personas.d.ts +2 -0
- package/build/routes/personas.js +118 -0
- package/build/routes/users.js +35 -0
- package/build/sdk/index.d.ts +15 -0
- package/build/sdk/index.js +16 -0
- package/build/services/persona/index.d.ts +92 -0
- package/build/services/persona/index.js +217 -0
- package/build/services/persona/sql.d.ts +24 -0
- package/build/services/persona/sql.js +158 -0
- package/build/services/persona/types.d.ts +23 -0
- package/build/services/persona/types.js +33 -0
- package/build/services/user/sql.d.ts +8 -5
- package/build/services/user/sql.js +15 -5
- package/build/system/mcp-servers/admin/index.d.ts +1 -0
- package/build/system/mcp-servers/admin/index.js +5 -2
- package/build/system/mcp-servers/admin/personas.d.ts +8 -0
- package/build/system/mcp-servers/admin/personas.js +186 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +91 -0
- package/build/system/mcp-servers/admin/schemas.js +42 -2
- package/build/system/seed/tool-manifests-admin.d.ts +975 -0
- package/build/system/seed/tool-manifests-admin.js +11 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/persona.d.ts +56 -0
- package/build/types/persona.js +2 -0
- package/build/types/user.d.ts +2 -0
- package/dashboard/dist/assets/{AdminDashboard-DWSYdAeW.js → AdminDashboard-cGYuppUP.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DWSYdAeW.js.map → AdminDashboard-cGYuppUP.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-Dm6gL76m.js → AgentConfigPage-DwaUyoCy.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-Dm6gL76m.js.map → AgentConfigPage-DwaUyoCy.js.map} +1 -1
- package/dashboard/dist/assets/AgentDetailPage-DxpFaltM.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-DxpFaltM.js.map +1 -0
- package/dashboard/dist/assets/{AgentsPage-DKaDRk-Y.js → AgentsPage-ByOoA8oT.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-DKaDRk-Y.js.map → AgentsPage-ByOoA8oT.js.map} +1 -1
- package/dashboard/dist/assets/AutoGrowTextarea-y-oNY51_.js +2 -0
- package/dashboard/dist/assets/AutoGrowTextarea-y-oNY51_.js.map +1 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-B-aHvGKD.js → AvailableEscalationsPage-C1vtTvqP.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-B-aHvGKD.js.map → AvailableEscalationsPage-C1vtTvqP.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-DRv_orzI.js → BotPicker-Dohv8dhR.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-DRv_orzI.js.map → BotPicker-Dohv8dhR.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-DqRVzMol.js → CapabilitiesPage-DeijFG3J.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-DqRVzMol.js.map → CapabilitiesPage-DeijFG3J.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-D0psvw8i.js → CollapsibleSection-BPNwS4eO.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-D0psvw8i.js.map → CollapsibleSection-BPNwS4eO.js.map} +1 -1
- package/dashboard/dist/assets/CountdownTimer-BF71ldGF.js +2 -0
- package/dashboard/dist/assets/CountdownTimer-BF71ldGF.js.map +1 -0
- package/dashboard/dist/assets/{CredentialsPage-Axdci1z-.js → CredentialsPage-oeNmMzTM.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-Axdci1z-.js.map → CredentialsPage-oeNmMzTM.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-BjZ_wZA8.js → CronLabel-CebR1m2k.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-BjZ_wZA8.js.map → CronLabel-CebR1m2k.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-CkUCMUfk.js → CustomDurationPicker-Bh9QdBVw.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-CkUCMUfk.js.map → CustomDurationPicker-Bh9QdBVw.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-_tmC3jEe.js → DropZone-Bavzt2QR.js} +2 -2
- package/dashboard/dist/assets/{DropZone-_tmC3jEe.js.map → DropZone-Bavzt2QR.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-Caa6CU_y.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BE_CN5sP.js.map → ElapsedCell-Caa6CU_y.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-CgcVIiYR.js → EscalationListSchemaPage-CAGfq0eK.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-CgcVIiYR.js.map → EscalationListSchemaPage-CAGfq0eK.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-BaAn1Hcr.js → EscalationSchemaPage-qDD4ur6P.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-BaAn1Hcr.js.map → EscalationSchemaPage-qDD4ur6P.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-Dbq7tKzr.js → EscalationsOverview-CC1wRTzy.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-Dbq7tKzr.js.map → EscalationsOverview-CC1wRTzy.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-0RUK9jqt.js → EventTable-4JeTcXr_.js} +2 -2
- package/dashboard/dist/assets/{EventTable-0RUK9jqt.js.map → EventTable-4JeTcXr_.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-B_dy2Jhj.js → FilterBar-BOV8DWIO.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-B_dy2Jhj.js.map → FilterBar-BOV8DWIO.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-CvLYp1nL.js → GraphInvokePage-C0i1speW.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-CvLYp1nL.js.map → GraphInvokePage-C0i1speW.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-B6s1ZeyA.js → HomePage-HPCd8SjF.js} +2 -2
- package/dashboard/dist/assets/{HomePage-B6s1ZeyA.js.map → HomePage-HPCd8SjF.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-DVhlAKZ3.js → ListToolbar-BFHVOba6.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-DVhlAKZ3.js.map → ListToolbar-BFHVOba6.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-Ca8cpc8g.js → McpOverview-Chn2zIXr.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-Ca8cpc8g.js.map → McpOverview-Chn2zIXr.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Cv1FKrvw.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-Cv1FKrvw.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-Dzn8JE4E.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-Dzn8JE4E.js.map +1 -0
- package/dashboard/dist/assets/{McpRunDetailPage-C76mfUtG.js → McpRunDetailPage-CuNtR4Ed.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-C76mfUtG.js.map → McpRunDetailPage-CuNtR4Ed.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-B43BqEyw.js → McpRunsPage-C8iifeKN.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-B43BqEyw.js.map → McpRunsPage-C8iifeKN.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-B5gHotsd.js → NamespacePill-ep9Zmokr.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-B5gHotsd.js.map → NamespacePill-ep9Zmokr.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-DbHzQCuE.js → OperationsPage-flrZ-EJ9.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-DbHzQCuE.js.map → OperationsPage-flrZ-EJ9.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Dhs2eo8p.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-B70nS_Ah.js.map → OperatorDashboard-Dhs2eo8p.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-DrbNMGxm.js → PageHeader-Bw8RNkqR.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-DrbNMGxm.js.map → PageHeader-Bw8RNkqR.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-SbQkaQLG.js → PageHeaderWithStats-NR_4idn6.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-SbQkaQLG.js.map → PageHeaderWithStats-NR_4idn6.js.map} +1 -1
- package/dashboard/dist/assets/PersonaDetailPage-DKILoUqL.js +2 -0
- package/dashboard/dist/assets/PersonaDetailPage-DKILoUqL.js.map +1 -0
- package/dashboard/dist/assets/PersonasPage-qvzHTrFw.js +2 -0
- package/dashboard/dist/assets/PersonasPage-qvzHTrFw.js.map +1 -0
- package/dashboard/dist/assets/ProcessDetailPage-C3LfeKvi.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-C3LfeKvi.js.map +1 -0
- package/dashboard/dist/assets/{ProcessesListPage-Di0n8TR4.js → ProcessesListPage-OoZ_u4ty.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-Di0n8TR4.js.map → ProcessesListPage-OoZ_u4ty.js.map} +1 -1
- package/dashboard/dist/assets/RoleDetailPage-D70jTLZm.js +8 -0
- package/dashboard/dist/assets/RoleDetailPage-D70jTLZm.js.map +1 -0
- package/dashboard/dist/assets/{RolePill-Cz-AAWqA.js → RolePill-TySZq7dB.js} +2 -2
- package/dashboard/dist/assets/{RolePill-Cz-AAWqA.js.map → RolePill-TySZq7dB.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-CNueMVuJ.js +2 -0
- package/dashboard/dist/assets/RolesPage-CNueMVuJ.js.map +1 -0
- package/dashboard/dist/assets/{RunAsSelector-DFv0VNVZ.js → RunAsSelector-CwWEpiSF.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-DFv0VNVZ.js.map → RunAsSelector-CwWEpiSF.js.map} +1 -1
- package/dashboard/dist/assets/ScopeBadge-C7Uixtmk.js +2 -0
- package/dashboard/dist/assets/ScopeBadge-C7Uixtmk.js.map +1 -0
- package/dashboard/dist/assets/StatCard-Ca-ngCaD.js +2 -0
- package/dashboard/dist/assets/StatCard-Ca-ngCaD.js.map +1 -0
- package/dashboard/dist/assets/{StatusBadge-BbqghFMi.js → StatusBadge-BwUvykDo.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-BbqghFMi.js.map → StatusBadge-BwUvykDo.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-D5zxe_l9.js → StickyPagination-DvIF3kQK.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-D5zxe_l9.js.map → StickyPagination-DvIF3kQK.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-BmBfNSEr.js → StreamMessageDetail-DkFK_XGD.js} +2 -2
- package/dashboard/dist/assets/StreamMessageDetail-DkFK_XGD.js.map +1 -0
- package/dashboard/dist/assets/{SwimlaneTimeline-CA0TKDIi.js → SwimlaneTimeline-CMw-Et6h.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CA0TKDIi.js.map → SwimlaneTimeline-CMw-Et6h.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-Bf9dZSG6.js → TagInput-D8gSp48D.js} +2 -2
- package/dashboard/dist/assets/{TagInput-Bf9dZSG6.js.map → TagInput-D8gSp48D.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C15nADUW.js → TaskDetailPage-BhXuChOf.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C15nADUW.js.map → TaskDetailPage-BhXuChOf.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-DfiBYQy2.js → TaskQueuePill-CHqolBmU.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-DfiBYQy2.js.map → TaskQueuePill-CHqolBmU.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DQdAayqc.js → TasksListPage-6JHQQ5QZ.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DQdAayqc.js.map → TasksListPage-6JHQQ5QZ.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-CvslqTB7.js → TimeAgo-CInx-vzY.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-CvslqTB7.js.map → TimeAgo-CInx-vzY.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BZCQQONl.js → TimestampCell-Fq17Zrsu.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BZCQQONl.js.map → TimestampCell-Fq17Zrsu.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-gA4sXukc.js → ToolPill-BbgMDhaE.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-gA4sXukc.js.map → ToolPill-BbgMDhaE.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-BgLVc6R5.js → ToolTestPanel-DhjEe59s.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-BgLVc6R5.js.map → ToolTestPanel-DhjEe59s.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-9A0aPb4t.js → TopicDetailPage-DbIdmQpQ.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-9A0aPb4t.js.map → TopicDetailPage-DbIdmQpQ.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-CAP-GUbr.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-o0EZxKbR.js.map → TopicsPage-CAP-GUbr.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DKMLxBJ5.js → UserName-DggcLkSc.js} +2 -2
- package/dashboard/dist/assets/{UserName-DKMLxBJ5.js.map → UserName-DggcLkSc.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-C-snB_dD.js → WorkflowExecutionPage-Bmra5fVt.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-C-snB_dD.js.map → WorkflowExecutionPage-Bmra5fVt.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-Djt2AtZk.js → WorkflowPill-CcUUVugA.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-Djt2AtZk.js.map → WorkflowPill-CcUUVugA.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BRQmgsLR.js → WorkflowsDashboard-BQsZAGYU.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BRQmgsLR.js.map → WorkflowsDashboard-BQsZAGYU.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-DmMdIRHQ.js → WorkflowsOverview-CeliraHZ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DmMdIRHQ.js.map → WorkflowsOverview-CeliraHZ.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-Bj7QkCry.js → YamlWorkflowDetailPage-DGxlonrV.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-Bj7QkCry.js.map → YamlWorkflowDetailPage-DGxlonrV.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-BIi77mE0.js → YamlWorkflowsPage-DnT8UiyQ.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-BIi77mE0.js.map → YamlWorkflowsPage-DnT8UiyQ.js.map} +1 -1
- package/dashboard/dist/assets/{agents-EBIsjLCr.js → agents-mRV7m4sh.js} +2 -2
- package/dashboard/dist/assets/{agents-EBIsjLCr.js.map → agents-mRV7m4sh.js.map} +1 -1
- package/dashboard/dist/assets/{bots-BXzxybS6.js → bots-SONCZlCM.js} +2 -2
- package/dashboard/dist/assets/{bots-BXzxybS6.js.map → bots-SONCZlCM.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-CnprG6q_.js → capabilities-DZjCMN32.js} +2 -2
- package/dashboard/dist/assets/{capabilities-CnprG6q_.js.map → capabilities-DZjCMN32.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-DiC0xtNq.js → controlplane-RQNXjna2.js} +2 -2
- package/dashboard/dist/assets/{controlplane-DiC0xtNq.js.map → controlplane-RQNXjna2.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-D0aYpJkF.js → escalation-columns-XLEcZRCg.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-D0aYpJkF.js.map → escalation-columns-XLEcZRCg.js.map} +1 -1
- package/dashboard/dist/assets/index-2BwHxjCw.css +1 -0
- package/dashboard/dist/assets/{index-CcMIca5t.js → index-C6GsrvX1.js} +2 -2
- package/dashboard/dist/assets/{index-CcMIca5t.js.map → index-C6GsrvX1.js.map} +1 -1
- package/dashboard/dist/assets/{index-C7KY8GTF.js → index-CK-6m8e_.js} +2 -2
- package/dashboard/dist/assets/{index-C7KY8GTF.js.map → index-CK-6m8e_.js.map} +1 -1
- package/dashboard/dist/assets/index-CkeSxuZ0.js +2 -0
- package/dashboard/dist/assets/{index-CjBdB8Ht.js.map → index-CkeSxuZ0.js.map} +1 -1
- package/dashboard/dist/assets/{index-B6ldRx_s.js → index-CxVGlkK6.js} +2 -2
- package/dashboard/dist/assets/{index-B6ldRx_s.js.map → index-CxVGlkK6.js.map} +1 -1
- package/dashboard/dist/assets/{index-DVmC_UfQ.js → index-D2CfSx_x.js} +4 -4
- package/dashboard/dist/assets/{index-DVmC_UfQ.js.map → index-D2CfSx_x.js.map} +1 -1
- package/dashboard/dist/assets/{index-BHAjQoOy.js → index-DFJF8aWz.js} +3 -3
- package/dashboard/dist/assets/{index-BHAjQoOy.js.map → index-DFJF8aWz.js.map} +1 -1
- package/dashboard/dist/assets/index-DYKRtstT.js +2 -0
- package/dashboard/dist/assets/index-DYKRtstT.js.map +1 -0
- package/dashboard/dist/assets/index-DY_hlZCQ.js +2 -0
- package/dashboard/dist/assets/index-DY_hlZCQ.js.map +1 -0
- package/dashboard/dist/assets/{index-Dht0ihGT.js → index-DbZpL10z.js} +2 -2
- package/dashboard/dist/assets/{index-Dht0ihGT.js.map → index-DbZpL10z.js.map} +1 -1
- package/dashboard/dist/assets/{index-CSTwyrwu.js → index-Dh3CVChT.js} +18 -18
- package/dashboard/dist/assets/index-Dh3CVChT.js.map +1 -0
- package/dashboard/dist/assets/{index-gBnGEubX.js → index-DqsLfO-0.js} +2 -2
- package/dashboard/dist/assets/{index-gBnGEubX.js.map → index-DqsLfO-0.js.map} +1 -1
- package/dashboard/dist/assets/{index-BzRXMicE.js → index-iHV3d7o3.js} +2 -2
- package/dashboard/dist/assets/{index-BzRXMicE.js.map → index-iHV3d7o3.js.map} +1 -1
- package/dashboard/dist/assets/{index-ovFEZ9SV.js → index-ymm58cTW.js} +2 -2
- package/dashboard/dist/assets/{index-ovFEZ9SV.js.map → index-ymm58cTW.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-W5QSKkYQ.js → knowledge-Bawo8u7l.js} +2 -2
- package/dashboard/dist/assets/{knowledge-W5QSKkYQ.js.map → knowledge-Bawo8u7l.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-n877HyOj.js → mcp-CKIpbpRZ.js} +2 -2
- package/dashboard/dist/assets/{mcp-n877HyOj.js.map → mcp-CKIpbpRZ.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-C9kV4sUm.js → mcp-query-vld4hYxQ.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-C9kV4sUm.js.map → mcp-query-vld4hYxQ.js.map} +1 -1
- package/dashboard/dist/assets/personas-BsARc3df.js +2 -0
- package/dashboard/dist/assets/personas-BsARc3df.js.map +1 -0
- package/dashboard/dist/assets/{pipelines-CBR68T8R.js → pipelines-BTSL-5ko.js} +2 -2
- package/dashboard/dist/assets/{pipelines-CBR68T8R.js.map → pipelines-BTSL-5ko.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-DHpWqKMk.js → tasks-DggQdNbj.js} +2 -2
- package/dashboard/dist/assets/{tasks-DHpWqKMk.js.map → tasks-DggQdNbj.js.map} +1 -1
- package/dashboard/dist/assets/{topics-CaLtyqSh.js → topics-DzAKa34X.js} +2 -2
- package/dashboard/dist/assets/{topics-CaLtyqSh.js.map → topics-DzAKa34X.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-B8p56JlB.js → useEventHooks-5uI9oI5W.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-B8p56JlB.js.map → useEventHooks-5uI9oI5W.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-ej71FCvu.js → useNamespace-CEKzFIqe.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-ej71FCvu.js.map → useNamespace-CEKzFIqe.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-DgpiFXib.js → useYamlActivityEvents-hHgX1Z50.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-DgpiFXib.js.map → useYamlActivityEvents-hHgX1Z50.js.map} +1 -1
- package/dashboard/dist/assets/{users-CHnjI_Ca.js → users-AO8lUyNr.js} +2 -2
- package/dashboard/dist/assets/{users-CHnjI_Ca.js.map → users-AO8lUyNr.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-Bg6eJX4Z.js → vendor-icons-DN9yGSuM.js} +141 -131
- package/dashboard/dist/assets/vendor-icons-DN9yGSuM.js.map +1 -0
- package/dashboard/dist/assets/{workflows-DtnXUL0U.js → workflows-PtnlRK09.js} +2 -2
- package/dashboard/dist/assets/{workflows-DtnXUL0U.js.map → workflows-PtnlRK09.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DDclYAID.js → yaml-workflows-DPu3Y8vG.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DDclYAID.js.map → yaml-workflows-DPu3Y8vG.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/personas.md +160 -0
- package/docs/cli.md +12 -0
- package/docs/dashboard.md +16 -1
- package/docs/design-principles.md +9 -5
- package/docs/hitl/x-lt-list-schema.md +2 -3
- package/docs/iam.md +47 -0
- package/docs/sdk.md +1 -0
- package/package.json +1 -1
- package/dashboard/dist/assets/AgentDetailPage-D-Xbyrb6.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-D-Xbyrb6.js.map +0 -1
- package/dashboard/dist/assets/CountdownTimer-BhF3oqS8.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-BhF3oqS8.js.map +0 -1
- package/dashboard/dist/assets/ElapsedCell-BE_CN5sP.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-D0r2lyZg.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-D0r2lyZg.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-DPP6BB3d.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-DPP6BB3d.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-B70nS_Ah.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-eLLUCWFf.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-eLLUCWFf.js.map +0 -1
- package/dashboard/dist/assets/RoleDetailPage-Dhn9zU5l.js +0 -8
- package/dashboard/dist/assets/RoleDetailPage-Dhn9zU5l.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-BnAwjUiG.js +0 -2
- package/dashboard/dist/assets/RolesPage-BnAwjUiG.js.map +0 -1
- package/dashboard/dist/assets/StatCard-DBANWIss.js +0 -2
- package/dashboard/dist/assets/StatCard-DBANWIss.js.map +0 -1
- package/dashboard/dist/assets/StreamMessageDetail-BmBfNSEr.js.map +0 -1
- package/dashboard/dist/assets/TopicsPage-o0EZxKbR.js +0 -2
- package/dashboard/dist/assets/index-B2iZG_HP.css +0 -1
- package/dashboard/dist/assets/index-CSTwyrwu.js.map +0 -1
- package/dashboard/dist/assets/index-CjBdB8Ht.js +0 -2
- package/dashboard/dist/assets/index-D-7mT0ew.js +0 -2
- package/dashboard/dist/assets/index-D-7mT0ew.js.map +0 -1
- package/dashboard/dist/assets/index-DDA7FvqT.js +0 -2
- package/dashboard/dist/assets/index-DDA7FvqT.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-Bg6eJX4Z.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CountdownTimer-BhF3oqS8.js","sources":["../../../shared/form-validation/x-lt-bind.ts","../../../shared/form-validation/x-lt-help.ts","../../src/lib/escalation.ts","../../src/lib/type-color.ts","../../src/components/escalation/EscalationListView.tsx","../../src/components/common/display/CountdownTimer.tsx"],"sourcesContent":["/**\n * x-lt-bind — maps the escalation FORM (flat field values the user edits) to and\n * from the PAYLOAD (the nested JSON the workflow consumes). A form_schema property\n * may declare `x-lt-bind: \"a.b[0].c\"`, the path its value occupies in the payload;\n * a property with no bind sits at its own name at the root (1:1). This module is\n * isomorphic — the dashboard renders forms with it, and the API layer inverts a\n * submitted payload through it to validate against the form contract. One\n * implementation, both sides.\n *\n * mapPayloadToForm — payload → flat form values, to PREFILL/display the form\n * (server-side: to validate a submitted payload)\n * mapFormToPayload — flat form values → payload, the shape submitted/stored\n */\n\ntype PathSeg = { key: string } | { index: number };\n\nconst BLOCKED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n/** Parse a bind path — dot keys with optional `[n]` indices. Rejects pollution keys. */\nexport function parsePath(path: string): PathSeg[] {\n const segs: PathSeg[] = [];\n for (const raw of path.split('.')) {\n const m = raw.match(/^([^[\\]]*)((?:\\[\\d+\\])*)$/);\n if (!m) throw new Error(`invalid x-lt-bind path segment: \"${raw}\"`);\n const [, name, brackets] = m;\n if (name) {\n if (BLOCKED_KEYS.has(name)) throw new Error(`x-lt-bind path may not target \"${name}\"`);\n segs.push({ key: name });\n }\n for (const b of brackets.match(/\\d+/g) ?? []) segs.push({ index: Number(b) });\n }\n if (segs.length === 0) throw new Error(`empty x-lt-bind path: \"${path}\"`);\n return segs;\n}\n\n/** Set `value` at `path` inside `root`, creating intermediate objects/arrays. */\nexport function setDeep(root: Record<string, any>, path: string, value: unknown): void {\n const segs = parsePath(path);\n let node: any = root;\n for (let i = 0; i < segs.length - 1; i++) {\n const seg = segs[i];\n const next = segs[i + 1];\n const childKey = 'key' in seg ? seg.key : seg.index;\n const wantArray = 'index' in next;\n if (node[childKey] == null || typeof node[childKey] !== 'object') {\n node[childKey] = wantArray ? [] : {};\n }\n node = node[childKey];\n }\n const last = segs[segs.length - 1];\n node['key' in last ? last.key : last.index] = value;\n}\n\n/** Read the value at `path` inside `root` (undefined if any segment is missing). */\nexport function getDeep(root: unknown, path: string): unknown {\n let node: any = root;\n for (const seg of parsePath(path)) {\n if (node == null || typeof node !== 'object') return undefined;\n node = node['key' in seg ? seg.key : seg.index];\n }\n return node;\n}\n\n/** The bind path for a form property (its `x-lt-bind`, or the property name). */\nexport function bindPathFor(propName: string, propDef: Record<string, any> | undefined): string {\n const bind = propDef?.['x-lt-bind'];\n return typeof bind === 'string' && bind.length > 0 ? bind : propName;\n}\n\n/**\n * Assemble the payload from the form's flat values. A field absent from\n * `formValues` is omitted (so clearing/deleting a field drops it from the\n * payload). Unknown keys not declared in the schema are dropped. With no schema\n * properties, values pass through unchanged.\n */\nexport function mapFormToPayload(\n formValues: Record<string, any>,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return { ...formValues };\n const payload: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n if (!(name in formValues)) continue;\n setDeep(payload, bindPathFor(name, def as Record<string, any>), formValues[name]);\n }\n return payload;\n}\n\n/**\n * Reverse of {@link mapFormToPayload}: pull each form field's value out of the\n * payload via its bind path, to prefill/display the form. A field whose bound\n * path is missing from the payload is omitted (the caller falls back to the\n * schema default).\n */\nexport function mapPayloadToForm(\n payload: Record<string, any> | null | undefined,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return payload ? { ...payload } : {};\n const form: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n const v = getDeep(payload, bindPathFor(name, def as Record<string, any>));\n if (v !== undefined) form[name] = v;\n }\n return form;\n}\n","/**\n * x-lt-help — the form's guidance content, rendered in the side panel beside\n * the resolve form. A form_schema may declare schema-level `x-lt-help`: a\n * markdown string whose `{{domain.path}}` tokens interpolate values from the\n * escalation surface, so help text can reference the live record:\n *\n * {{escalation.role}} — any column on the escalation row\n * {{metadata.schema_version}} — the row's metadata dict\n * {{envelope.formDefaults.customer.name}} — the workflow-sent input envelope\n * {{payload.category}} — the escalation context payload\n * {{resolver.notes}} — the submitted resolver payload\n *\n * Paths reuse the x-lt-bind syntax (`a.b[0].c`). A missing value renders as an\n * em dash. `x-lt-context` is accepted as the plain-text fallback source when\n * `x-lt-help` is absent.\n */\nimport { getDeep } from './x-lt-bind';\n\n/** The token domains a help template may reference. */\nexport const HELP_DOMAINS = ['escalation', 'metadata', 'envelope', 'payload', 'resolver'] as const;\nexport type HelpDomain = (typeof HELP_DOMAINS)[number];\n\nexport type HelpTokenContext = Partial<Record<HelpDomain, Record<string, unknown> | null>>;\n\nconst TOKEN_PATTERN = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\nconst MISSING_VALUE = '—';\n\nfunction formatTokenValue(value: unknown): string {\n if (value === undefined || value === null) return MISSING_VALUE;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return MISSING_VALUE;\n }\n}\n\n/** Replace every `{{domain.path}}` token with its value from the context. */\nexport function interpolateHelp(template: string, ctx: HelpTokenContext): string {\n return template.replace(TOKEN_PATTERN, (_match, rawPath: string) => {\n const dot = rawPath.indexOf('.');\n const domain = (dot === -1 ? rawPath : rawPath.slice(0, dot)) as HelpDomain;\n if (!HELP_DOMAINS.includes(domain)) return MISSING_VALUE;\n const root = ctx[domain];\n if (dot === -1) return formatTokenValue(root);\n try {\n return formatTokenValue(getDeep(root, rawPath.slice(dot + 1)));\n } catch {\n return MISSING_VALUE;\n }\n });\n}\n\n/** The schema's help source: `x-lt-help` first, `x-lt-context` as fallback. */\nexport function resolveHelpSource(schema: Record<string, unknown> | null | undefined): string | null {\n const help = schema?.['x-lt-help'];\n if (typeof help === 'string' && help.trim().length > 0) return help;\n const context = schema?.['x-lt-context'];\n if (typeof context === 'string' && context.trim().length > 0) return context;\n return null;\n}\n\n/** The schema's help content, interpolated. Null when the schema declares none. */\nexport function buildHelpMarkdown(\n schema: Record<string, unknown> | null | undefined,\n ctx: HelpTokenContext,\n): string | null {\n const source = resolveHelpSource(schema);\n return source ? interpolateHelp(source, ctx) : null;\n}\n\nexport interface HelpStateHint {\n isTerminal: boolean;\n status?: string;\n claimed: boolean;\n claimedByMe: boolean;\n}\n\n/**\n * State-aware guidance shown when the schema carries no help content — the\n * panel always tells the user what this page expects of them right now.\n */\nexport function defaultHelpMarkdown({ isTerminal, status, claimed, claimedByMe }: HelpStateHint): string {\n if (isTerminal) {\n return status === 'cancelled'\n ? 'This escalation was cancelled. The record is shown for reference.'\n : 'This escalation has been resolved. The submitted form is shown for reference.';\n }\n if (claimedByMe) return 'You have claimed this escalation. Fill out the form and submit to resolve it.';\n if (claimed) return 'Another user has claimed this escalation. It unlocks if their claim expires or is released.';\n return 'Claim this escalation to enable the form.';\n}\n","import type { LTEscalationRecord } from '../api/types';\n\nexport function isEffectivelyClaimed(esc: LTEscalationRecord): boolean {\n return !!(\n esc.assigned_to &&\n esc.assigned_until &&\n new Date(esc.assigned_until) > new Date()\n );\n}\n\n/** An ACK escalation has no associated workflow — it's a notification, not a task. */\nexport function isAckEscalation(esc: LTEscalationRecord): boolean {\n return !esc.workflow_type;\n}\n\nexport function isAvailable(esc: LTEscalationRecord): boolean {\n return (\n esc.status === 'pending' &&\n (!esc.assigned_to ||\n !esc.assigned_until ||\n new Date(esc.assigned_until) <= new Date())\n );\n}\n","/**\n * Deterministic color assignment for workflow type names.\n *\n * Maps any string to a consistent color from a curated 24-color palette.\n * The same type name always produces the same color across the entire UI.\n * Uses a simple hash to distribute names evenly across the palette.\n *\n * Each entry provides:\n * text — icon and text color (Tailwind class)\n * bg — subtle background tint (Tailwind class)\n */\n\nconst PALETTE: Array<{ text: string; bg: string }> = [\n { text: 'text-rose-400', bg: 'bg-rose-400/[0.08]' },\n { text: 'text-pink-400', bg: 'bg-pink-400/[0.08]' },\n { text: 'text-fuchsia-400', bg: 'bg-fuchsia-400/[0.08]' },\n { text: 'text-purple-400', bg: 'bg-purple-400/[0.08]' },\n { text: 'text-violet-400', bg: 'bg-violet-400/[0.08]' },\n { text: 'text-indigo-400', bg: 'bg-indigo-400/[0.08]' },\n { text: 'text-blue-400', bg: 'bg-blue-400/[0.08]' },\n { text: 'text-sky-400', bg: 'bg-sky-400/[0.08]' },\n { text: 'text-cyan-400', bg: 'bg-cyan-400/[0.08]' },\n { text: 'text-teal-400', bg: 'bg-teal-400/[0.08]' },\n { text: 'text-emerald-400', bg: 'bg-emerald-400/[0.08]' },\n { text: 'text-green-400', bg: 'bg-green-400/[0.08]' },\n { text: 'text-lime-400', bg: 'bg-lime-400/[0.08]' },\n { text: 'text-yellow-400', bg: 'bg-yellow-400/[0.08]' },\n { text: 'text-amber-400', bg: 'bg-amber-400/[0.08]' },\n { text: 'text-orange-400', bg: 'bg-orange-400/[0.08]' },\n { text: 'text-red-400', bg: 'bg-red-400/[0.08]' },\n { text: 'text-stone-400', bg: 'bg-stone-400/[0.08]' },\n { text: 'text-rose-300', bg: 'bg-rose-300/[0.08]' },\n { text: 'text-violet-300', bg: 'bg-violet-300/[0.08]' },\n { text: 'text-sky-300', bg: 'bg-sky-300/[0.08]' },\n { text: 'text-teal-300', bg: 'bg-teal-300/[0.08]' },\n { text: 'text-amber-300', bg: 'bg-amber-300/[0.08]' },\n { text: 'text-pink-300', bg: 'bg-pink-300/[0.08]' },\n];\n\nfunction hash(str: string): number {\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n h = ((h << 5) - h + str.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nexport function typeColor(typeName: string): { text: string; bg: string } {\n return PALETTE[hash(typeName) % PALETTE.length];\n}\n","import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { interpolateHelp, type HelpTokenContext } from '../../lib/x-lt-help';\nimport { DataTable, type Column as TableColumn } from '../common/data/DataTable';\nimport { ListFilter, Search } from 'lucide-react';\nimport { MarkdownRenderer } from '../common/display/MarkdownRenderer';\nimport { STATUS_DOT_STYLES } from '../common/display/StatusBadge';\nimport { DateValue } from '../common/display/DateValue';\nimport { StickyPagination } from '../common/data/StickyPagination';\nimport { useEscalations, useClaimEscalation } from '../../api/escalations';\nimport { isEffectivelyClaimed } from '../../lib/escalation';\nimport { formatAgoCompact } from '../../lib/format';\nimport { metadataFacetUrl } from '../../lib/facet-url';\nimport { getDeep } from '../../lib/x-lt-bind';\nimport { typeColor } from '../../lib/type-color';\nimport type { LTEscalationRecord } from '../../api/types';\n\n/**\n * EscalationListView — the role-authored rich view of an escalation list, driven\n * by a versioned `list_schema` (x-lt-* markup). The list-page analog of the\n * resolve form: the same `{{domain.path}}` token binding (via interpolateHelp)\n * against each row's context, and MarkdownRenderer for rich bodies.\n *\n * Layouts:\n * active-history — single live item as a card on the left + history column on right\n * active — just the single live item card (no history)\n * facet-table — full pending queue as a table, columns from x-lt-columns\n * facet-board — one card per x-lt-group-by facet value (an entity board:\n * machines, stations), rendered from each group's latest row\n */\n\ninterface CardDef {\n title?: string;\n subtitle?: string;\n body?: string;\n fields?: { label: string; value: string; format?: string }[];\n}\n\ninterface HistoryDef {\n row?: { title?: string; subtitle?: string; meta?: string };\n limit?: number;\n status?: string;\n}\n\nexport interface ColumnDef {\n label: string;\n value: string;\n /** \"age\" renders an ISO timestamp as a compact age with an absolute tooltip. */\n format?: string;\n /**\n * Card-fold behavior when the table folds at narrow widths (same contract\n * as the engineer table): 1 = identity — always visible, forms the card's\n * title line; 2 = folds into the card body as a label/value pair; 3 =\n * dropped in card mode. Undeclared, the first column is the identity and\n * the rest fold.\n */\n priority?: 1 | 2 | 3;\n}\n\ninterface BoardCardDef {\n title?: string;\n /** Status chip — any token (commonly {{escalation.subtype}}). */\n state?: string;\n fields?: { label: string; value: string; format?: string }[];\n}\n\n/**\n * The per-row action button — the queue-working gesture, always available on\n * every layout. Template-driven: the schema author sets the action, its text,\n * and (for claim) the hold time.\n */\nexport interface RowActionDef {\n /** \"claim\" fires a one-click claim then opens the detail page already\n * claimed; \"view\" just opens it. Default \"claim\". */\n action?: 'claim' | 'view';\n /** Button text. Defaults \"Claim\" / \"View\" by action. */\n label?: string;\n /** Claim hold time in minutes. Default 30 (the platform claim default). */\n durationMinutes?: number;\n}\n\ninterface ListSchema {\n 'x-lt-layout'?: string;\n 'x-lt-help'?: string;\n 'x-lt-active'?: CardDef;\n 'x-lt-history'?: HistoryDef;\n 'x-lt-columns'?: ColumnDef[];\n /** facet-board: the \"domain.path\" whose value identifies each entity. */\n 'x-lt-group-by'?: string;\n /** facet-board: the per-entity card definition. */\n 'x-lt-card'?: BoardCardDef;\n /** The per-row action button (claim | view, label, claim duration). */\n 'x-lt-row-action'?: RowActionDef;\n}\n\n/**\n * Repaint-only minute tick so `format: \"age\"` values stay current. Pure\n * re-render — no network. Mounted once at the view root, only when the\n * schema actually uses ages.\n */\nfunction useAgeTick(enabled: boolean): void {\n const [, setTick] = useState(0);\n useEffect(() => {\n if (!enabled) return;\n const t = window.setInterval(() => setTick((n) => n + 1), 60_000);\n return () => window.clearInterval(t);\n }, [enabled]);\n}\n\nfunction schemaUsesAge(schema: ListSchema): boolean {\n return [...(schema['x-lt-columns'] ?? []), ...(schema['x-lt-card']?.fields ?? [])]\n .some((f) => f.format === 'age');\n}\n\n/** Build the token context for one escalation row (payloads are JSON strings). */\nexport function rowContext(e: LTEscalationRecord): HelpTokenContext {\n const parse = (s: string | null | undefined): Record<string, unknown> | null => {\n if (!s) return null;\n try {\n const v = JSON.parse(s);\n return v && typeof v === 'object' ? v : null;\n } catch {\n return null;\n }\n };\n return {\n escalation: e as unknown as Record<string, unknown>,\n metadata: e.metadata ?? null,\n envelope: parse(e.envelope),\n payload: parse(e.escalation_payload),\n resolver: parse(e.resolver_payload),\n };\n}\n\nconst ISO_DATETIME = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nconst EM_DASH = '—';\n\n/**\n * Render an interpolated field value with a little care: `format: \"age\"` turns\n * a timestamp into a compact age (\"12m\", \"3h\") with the absolute time as its\n * tooltip; a full ISO datetime becomes a friendly, hoverable date; an empty\n * value a quiet em dash; anything else plain text. Authors bind tokens; we\n * make the common shapes look right.\n */\nfunction FieldValue({ raw, format }: { raw: string; format?: string }) {\n if (!raw || raw === EM_DASH) return <span className=\"text-text-quaternary\">{EM_DASH}</span>;\n if (format === 'age') {\n const d = new Date(raw);\n if (!Number.isNaN(d.getTime())) {\n return <span title={d.toLocaleString()} className=\"tabular-nums whitespace-nowrap\">{formatAgoCompact(raw)}</span>;\n }\n }\n if (ISO_DATETIME.test(raw)) return <DateValue date={raw} format=\"datetime\" className=\"text-text-primary\" />;\n return <>{raw}</>;\n}\n\nconst DEFAULT_CLAIM_MINUTES = 30;\n\n/** Claim targets pending rows without a live claim window. */\nfunction isClaimable(row: LTEscalationRecord): boolean {\n return row.status === 'pending' && !isEffectivelyClaimed(row);\n}\n\n/**\n * The x-lt-row-action button. `claim` is one click: claim for the template's\n * duration, then open the detail page already claimed — the fast path for\n * working a queue. `view` opens the detail page. Persistent (light accent at\n * rest, saturating on hover); a rejected claim surfaces its message inline.\n */\nfunction RowActionButton({ row, def, onView, prominent, forceView }: {\n row: LTEscalationRecord;\n def?: RowActionDef;\n onView?: () => void;\n /** Hero treatment for the active-card CTA; default is the compact row button. */\n prominent?: boolean;\n /** Render claim templates as view actions (see EscalationListView). */\n forceView?: boolean;\n}) {\n const authored = def?.action ?? 'claim';\n const action = forceView ? 'view' : authored;\n // The authored label describes the authored gesture. When view is forced\n // over a claim template, claim wording would mislead — use the view default.\n const label = authored === action && def?.label\n ? def.label\n : action === 'claim' ? 'Claim' : 'View';\n const claim = useClaimEscalation();\n const [error, setError] = useState('');\n\n if (action === 'claim' && !isClaimable(row)) return null;\n\n const fire = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (action === 'view') {\n onView?.();\n return;\n }\n setError('');\n claim.mutate(\n { id: row.id, durationMinutes: def?.durationMinutes ?? DEFAULT_CLAIM_MINUTES },\n {\n onSuccess: () => onView?.(),\n onError: (err) => setError((err as Error).message),\n },\n );\n };\n\n const classes = prominent\n ? 'btn-primary text-xs shrink-0 disabled:opacity-50'\n : 'px-2 py-0.5 rounded text-2xs font-medium text-accent/70 border border-accent/30 hover:text-accent hover:border-accent/60 hover:bg-accent/5 transition-colors disabled:opacity-40 whitespace-nowrap';\n\n return (\n <span className=\"inline-flex flex-col items-end gap-0.5\">\n <button\n type=\"button\"\n onClick={fire}\n disabled={claim.isPending}\n className={classes}\n data-testid=\"row-action-button\"\n >\n {claim.isPending ? 'Claiming…' : label}\n </button>\n {error && <span className=\"text-2xs text-status-error\" data-testid=\"row-action-error\">{error}</span>}\n </span>\n );\n}\n\nfunction ActiveCard({ esc, card, rowAction, onOpen, forceView }: {\n esc: LTEscalationRecord;\n card: CardDef;\n rowAction?: RowActionDef;\n onOpen?: () => void;\n forceView?: boolean;\n}) {\n const ctx = rowContext(esc);\n const title = card.title ? interpolateHelp(card.title, ctx) : esc.type;\n return (\n <div>\n <div className=\"flex items-start justify-between gap-6\">\n <button onClick={onOpen} className=\"text-left group min-w-0\">\n <h3 className=\"heading-2 group-hover:text-accent transition-colors leading-tight\">\n {title}\n </h3>\n {card.subtitle && (\n <p className=\"text-xs text-text-tertiary mt-1.5\">{interpolateHelp(card.subtitle, ctx)}</p>\n )}\n </button>\n\n {/* The row action — one-click claim (then the detail page opens already\n claimed), or view for read-only templates. */}\n <RowActionButton row={esc} def={rowAction} onView={onOpen} prominent forceView={forceView} />\n </div>\n\n {card.fields && card.fields.length > 0 && (\n <dl className=\"flex flex-wrap gap-x-10 gap-y-4 mt-6\">\n {card.fields.map((f, i) => (\n <div key={i}>\n <dt className=\"text-2xs font-semibold uppercase tracking-widest text-text-tertiary\">{f.label}</dt>\n <dd className=\"text-xs text-text-primary mt-1\"><FieldValue raw={interpolateHelp(f.value, ctx)} /></dd>\n </div>\n ))}\n </dl>\n )}\n\n {card.body && (\n <div className=\"mt-7 pt-6 border-t border-surface-border/50\">\n <MarkdownRenderer content={interpolateHelp(card.body, ctx)} />\n </div>\n )}\n </div>\n );\n}\n\nfunction HistoryColumn({ role, def, onRowClick }: {\n role: string;\n def: HistoryDef;\n onRowClick?: (row: LTEscalationRecord) => void;\n}) {\n const [show, setShow] = useState(false);\n const query = useEscalations({\n role,\n status: def.status ?? 'resolved',\n sort_by: 'resolved_at',\n order: 'desc',\n limit: def.limit ?? 25,\n enabled: show,\n });\n const rows = query.data?.escalations ?? [];\n const total = query.data?.total ?? 0;\n const rowDef = def.row ?? {};\n\n if (!show) {\n return (\n <button\n onClick={() => setShow(true)}\n className=\"text-xs text-accent hover:underline\"\n data-testid=\"load-history\"\n >\n Load full history →\n </button>\n );\n }\n\n if (query.isLoading) {\n return <p className=\"text-xs text-text-tertiary italic\">Loading history…</p>;\n }\n\n if (rows.length === 0) {\n return <p className=\"text-xs text-text-tertiary italic\">No past revisions.</p>;\n }\n\n return (\n <div>\n <div className=\"divide-y divide-surface-border/40\">\n {rows.map((e) => {\n const ctx = rowContext(e);\n return (\n <button\n key={e.id}\n onClick={() => onRowClick?.(e)}\n className=\"w-full text-left py-2.5 group flex items-center gap-3\"\n >\n {/* Status as a bare outlined dot — colour carries the meaning. */}\n <span\n className={`w-1.5 h-1.5 shrink-0 rounded-full dot-ring ${STATUS_DOT_STYLES[e.status] ?? 'bg-status-pending'}`}\n title={e.status}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block text-xs text-text-primary group-hover:text-accent transition-colors truncate\">\n {rowDef.title ? interpolateHelp(rowDef.title, ctx) : e.type}\n </span>\n {rowDef.subtitle && (\n <span className=\"block text-2xs text-text-tertiary truncate\">\n {interpolateHelp(rowDef.subtitle, ctx)}\n </span>\n )}\n </span>\n {rowDef.meta\n ? <span className=\"text-2xs text-text-tertiary shrink-0\">{interpolateHelp(rowDef.meta, ctx)}</span>\n : e.resolved_at && <DateValue date={e.resolved_at} format=\"relative\" className=\"text-2xs text-text-tertiary shrink-0 whitespace-nowrap\" />}\n </button>\n );\n })}\n </div>\n {total > rows.length && (\n <p className=\"text-2xs text-text-quaternary mt-3\">Showing {rows.length} of {total}.</p>\n )}\n </div>\n );\n}\n\n/** Multi-row pending queue as a facet table. Columns defined by x-lt-columns. */\nfunction FacetTable({ schema, rows, role, onRowClick, onAddFacet, forceView }: {\n schema: ListSchema;\n rows: LTEscalationRecord[];\n role: string;\n onRowClick?: (row: LTEscalationRecord) => void;\n /** ⇧ click on a metadata column's filter — merge into the live filter set. */\n onAddFacet?: (key: string, value: unknown) => void;\n forceView?: boolean;\n}) {\n const columnDefs = schema['x-lt-columns'] ?? [];\n const rowAction = schema['x-lt-row-action'];\n\n // The authored columns render through the SAME table the engineer views\n // use: padded cells, sticky header, and the card fold at narrow widths —\n // a table never scrolls horizontally, it folds. Authors steer the fold\n // with `priority` on each column (1 title line, 2 folds, 3 dropped);\n // undeclared, the first column is the identity.\n const columns: TableColumn<LTEscalationRecord>[] = [\n {\n key: '_status',\n label: '',\n priority: 1,\n className: 'w-10',\n render: (row) => (\n <span\n className={`w-1.5 h-1.5 inline-block rounded-full dot-ring ${STATUS_DOT_STYLES[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n ),\n },\n ...columnDefs.map((col, i): TableColumn<LTEscalationRecord> => ({\n key: `col-${i}`,\n label: col.label,\n priority: col.priority ?? (i === 0 ? 1 : 2),\n render: (row) => {\n const ctx = rowContext(row);\n // A column the author bound to a pure metadata value gets the\n // platform's filter/search pair — the same affordance the engineer\n // table's metadata cells and the facet-board fields carry. Filter\n // narrows this role's queue; search spans every role; ⇧ click\n // merges into the live filters.\n const bound = col.value.match(METADATA_TOKEN)?.[1];\n const raw = bound ? row.metadata?.[bound] : undefined;\n const linkable = bound != null && raw !== undefined && raw !== null && raw !== '';\n const display = <FieldValue raw={interpolateHelp(col.value, ctx)} format={col.format} />;\n if (!linkable) return display;\n return (\n <span className=\"inline-flex items-center gap-1 min-w-0 max-w-full\">\n <span className=\"truncate\">{display}</span>\n <span className=\"inline-flex items-center gap-px shrink-0 opacity-50 group-hover/row:opacity-100 transition-opacity\">\n <Link\n to={metadataFacetUrl(bound, raw, role)}\n onClick={(ev) => {\n ev.stopPropagation();\n if (ev.shiftKey && onAddFacet) {\n ev.preventDefault();\n onAddFacet(bound, raw);\n }\n }}\n className=\"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors\"\n title={`Filter ${role}: ${bound} = ${String(raw)}${onAddFacet ? ' · ⇧ click adds to current filters' : ''}`}\n data-testid=\"facet-column-filter\"\n >\n <ListFilter className=\"w-3 h-3\" />\n </Link>\n <Link\n to={metadataFacetUrl(bound, raw)}\n onClick={(ev) => ev.stopPropagation()}\n className=\"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors\"\n title={`Search all: ${bound} = ${String(raw)}`}\n data-testid=\"facet-column-search\"\n >\n <Search className=\"w-3 h-3\" />\n </Link>\n </span>\n </span>\n );\n },\n })),\n {\n key: '_action',\n label: '',\n priority: 1,\n className: 'w-24 text-right',\n render: (row) => (\n <RowActionButton row={row} def={rowAction} onView={() => onRowClick?.(row)} forceView={forceView} />\n ),\n },\n ];\n\n return (\n <DataTable\n columns={columns}\n data={rows}\n layout=\"fixed\"\n keyFn={(row) => row.id}\n onRowClick={onRowClick}\n emptyMessage=\"No pending items.\"\n />\n );\n}\n\nfunction SectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <p className=\"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-3\">{children}</p>\n );\n}\n\n// ── facet-board — one card per entity (machine, station) ─────────────────────\n\ninterface BoardGroup {\n key: string;\n /** The group's identity as stored (native type preserved for the facet URL). */\n rawValue: unknown;\n latest: LTEscalationRecord;\n count: number;\n}\n\n/**\n * Group rows by the resolved x-lt-group-by value; each card renders from the\n * group's most recent row (by created_at). Rows without the facet are skipped —\n * the board reflects the scope, it doesn't invent entities.\n */\nexport function groupBoardRows(rows: LTEscalationRecord[], groupBy: string): BoardGroup[] {\n const dot = groupBy.indexOf('.');\n const facetKey = groupBy.startsWith('metadata.') ? groupBy.slice('metadata.'.length) : null;\n const groups = new Map<string, BoardGroup>();\n for (const row of rows) {\n const ctx = rowContext(row);\n let v: unknown;\n try {\n v = dot === -1\n ? (ctx as unknown as Record<string, unknown>)[groupBy]\n : getDeep((ctx as unknown as Record<string, unknown>)[groupBy.slice(0, dot)], groupBy.slice(dot + 1));\n } catch {\n v = undefined;\n }\n if (v === undefined || v === null || v === '') continue;\n const key = String(v);\n const rawValue = facetKey ? (row.metadata?.[facetKey] ?? v) : v;\n const existing = groups.get(key);\n if (!existing) {\n groups.set(key, { key, rawValue, latest: row, count: 1 });\n } else {\n existing.count += 1;\n if (new Date(row.created_at) > new Date(existing.latest.created_at)) existing.latest = row;\n }\n }\n return [...groups.values()].sort((a, b) => a.key.localeCompare(b.key));\n}\n\n/** A field value token that is a pure metadata binding — facet-linkable. */\nconst METADATA_TOKEN = /^\\{\\{\\s*metadata\\.([a-zA-Z0-9_]+)\\s*\\}\\}$/;\n\nfunction FacetBoard({ schema, rows, role, onOpenDetail, onOpenGroup, onAddFacet, forceView }: {\n schema: ListSchema;\n rows: LTEscalationRecord[];\n role: string;\n forceView?: boolean;\n /** Plain card click — the group's latest row opens in the detail view. */\n onOpenDetail?: (row: LTEscalationRecord) => void;\n /** History affordances — receive a filtered table/timeline deep link. */\n onOpenGroup?: (url: string) => void;\n /** Shift+click — merge one facet into the live filter set (additive). */\n onAddFacet?: (key: string, value: unknown) => void;\n}) {\n const groupBy = schema['x-lt-group-by'];\n const card = schema['x-lt-card'] ?? {};\n const rowAction = schema['x-lt-row-action'];\n\n if (!groupBy) {\n return <p className=\"text-xs text-text-tertiary italic\">facet-board needs an x-lt-group-by path.</p>;\n }\n const facetKey = groupBy.startsWith('metadata.') ? groupBy.slice('metadata.'.length) : null;\n const groups = groupBoardRows(rows, groupBy);\n if (groups.length === 0) {\n return <p className=\"text-xs text-text-tertiary italic\">No entities in scope.</p>;\n }\n\n return (\n <div className=\"grid grid-cols-[repeat(auto-fill,minmax(15rem,1fr))] gap-4\" data-testid=\"facet-board\">\n {groups.map((g) => {\n const ctx = rowContext(g.latest);\n const title = card.title ? interpolateHelp(card.title, ctx) : g.key;\n const state = card.state ? interpolateHelp(card.state, ctx) : (g.latest.subtype || g.latest.status);\n const stateHue = typeColor(state);\n\n const activate = (e: { shiftKey: boolean }) => {\n if (e.shiftKey && facetKey && onAddFacet) {\n onAddFacet(facetKey, g.rawValue);\n return;\n }\n onOpenDetail?.(g.latest);\n };\n\n return (\n <div\n key={g.key}\n role=\"button\"\n tabIndex={0}\n onClick={activate}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); activate(e); }\n }}\n title={facetKey ? 'Open the latest item · ⇧ click to filter the board' : 'Open the latest item'}\n className=\"group/card border-l-2 border-accent/30 bg-surface-sunken/40 rounded-[0.125em] px-4 py-3.5 cursor-pointer transition-colors hover:bg-surface-sunken/70 focus:outline-none focus-visible:ring-1 focus-visible:ring-accent/40\"\n data-testid=\"facet-board-card\"\n >\n <div className=\"flex items-center justify-between gap-2 mb-2.5\">\n <span className=\"text-2xs font-semibold uppercase tracking-wider text-text-secondary truncate\">\n {title}\n </span>\n <span\n className=\"shrink-0 px-1.5 py-0.5 rounded text-2xs font-mono font-medium\"\n style={{ color: stateHue.text, backgroundColor: stateHue.bg }}\n title={state}\n >\n {state}\n </span>\n </div>\n {card.fields && card.fields.length > 0 && (\n <dl className=\"space-y-1\">\n {card.fields.map((f, i) => {\n // Pure metadata bindings get the same hover filter affordance\n // the table's MetadataCell offers; ⇧ click adds instead of replacing.\n const bound = f.value.match(METADATA_TOKEN)?.[1];\n const raw = bound ? g.latest.metadata?.[bound] : undefined;\n const linkable = bound != null && raw !== undefined && raw !== null && raw !== '';\n return (\n <div key={i} className=\"group/frow flex items-baseline justify-between gap-3\">\n <dt className=\"text-2xs uppercase tracking-wider text-text-quaternary shrink-0\">{f.label}</dt>\n <dd className=\"min-w-0 flex items-baseline gap-1 text-2xs text-text-primary\">\n <span className=\"truncate\">\n <FieldValue raw={interpolateHelp(f.value, ctx)} format={f.format} />\n </span>\n {/* Fixed-width trailing slot on EVERY row — linkable rows\n fill it with the filter/search pair the table's\n metadata cells offer — so all values share one right\n rail regardless of linkability. */}\n <span className=\"shrink-0 w-9 self-center flex items-center justify-end gap-px\">\n {linkable && (onOpenGroup || onAddFacet) && (\n <span className=\"flex items-center gap-px opacity-0 group-hover/frow:opacity-100 transition-opacity\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n if (e.shiftKey && onAddFacet) onAddFacet(bound, raw);\n else onOpenGroup?.(metadataFacetUrl(bound, raw, role));\n }}\n className=\"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors\"\n title={`Filter ${role}: ${bound} = ${String(raw)} · ⇧ click adds to current filters`}\n data-testid=\"facet-field-filter\"\n >\n <ListFilter className=\"w-3 h-3\" />\n </button>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onOpenGroup?.(metadataFacetUrl(bound, raw));\n }}\n className=\"p-0.5 rounded text-text-quaternary hover:text-accent transition-colors\"\n title={`Search all: ${bound} = ${String(raw)}`}\n data-testid=\"facet-field-search\"\n >\n <Search className=\"w-3 h-3\" />\n </button>\n </span>\n )}\n </span>\n </dd>\n </div>\n );\n })}\n </dl>\n )}\n\n {(forceView || (rowAction?.action ?? 'claim') === 'view' || isClaimable(g.latest)) && (\n <div className=\"mt-3 flex justify-end\">\n <RowActionButton row={g.latest} def={rowAction} onView={() => onOpenDetail?.(g.latest)} forceView={forceView} />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport function EscalationListView({ role, listSchema, activeEscalations, onRowClick, onOpenGroup, onAddFacet, forceViewAction, total, page, totalPages, pageSize, onPageChange, onPageSizeChange }: {\n role: string;\n listSchema: ListSchema;\n activeEscalations: LTEscalationRecord[];\n onRowClick?: (row: LTEscalationRecord) => void;\n /** facet-board history affordances — receive a filtered deep link. */\n onOpenGroup?: (url: string) => void;\n /** facet-board ⇧ click — merge one facet into the live filter set. */\n onAddFacet?: (key: string, value: unknown) => void;\n /** Render claim row-actions as view actions. For surfaces listing rows the\n * viewer already holds (e.g. My Escalations), where a claim gesture is\n * inapplicable — the button opens the detail page instead. */\n forceViewAction?: boolean;\n total?: number;\n page?: number;\n totalPages?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n}) {\n const layout = listSchema['x-lt-layout'];\n const card = listSchema['x-lt-active'] ?? {};\n const rowAction = listSchema['x-lt-row-action'];\n const active = activeEscalations[0];\n const help = listSchema['x-lt-help'];\n useAgeTick(schemaUsesAge(listSchema));\n\n // The active item is a distinct surface on the page wash — the same card\n // treatment the detail page gives its form sections. The label heads the\n // card; the history column beside it stays a quiet chronicle on the wash.\n const activeBlock = (\n <div className=\"border border-surface-border/60 bg-surface-sunken rounded-[0.25em] p-4\">\n <SectionLabel>Active</SectionLabel>\n {active ? (\n <ActiveCard esc={active} card={card} rowAction={rowAction} onOpen={() => onRowClick?.(active)} forceView={forceViewAction} />\n ) : (\n <p className=\"text-xs text-text-tertiary italic\">No active item right now.</p>\n )}\n </div>\n );\n\n const header = help && active ? (\n <div className=\"mb-8\"><MarkdownRenderer content={interpolateHelp(help, rowContext(active))} /></div>\n ) : help ? (\n <div className=\"mb-8\"><MarkdownRenderer content={help} /></div>\n ) : null;\n\n if (layout === 'facet-table') {\n // The table stands alone — no header text above it. Instructions belong\n // in the form's help surfaces; totals live in the pagination bar.\n const resolvedTotal = total ?? activeEscalations.length;\n return (\n <div>\n <FacetTable schema={listSchema} rows={activeEscalations} role={role} onRowClick={onRowClick} onAddFacet={onAddFacet} forceView={forceViewAction} />\n {page !== undefined && totalPages !== undefined && onPageChange && (\n <StickyPagination\n page={page}\n totalPages={totalPages}\n onPageChange={onPageChange}\n total={resolvedTotal}\n pageSize={pageSize ?? 25}\n onPageSizeChange={onPageSizeChange}\n />\n )}\n </div>\n );\n }\n\n if (layout === 'facet-board') {\n return (\n <div>\n {header}\n <FacetBoard\n schema={listSchema}\n rows={activeEscalations}\n role={role}\n onOpenDetail={onRowClick}\n onOpenGroup={onOpenGroup}\n onAddFacet={onAddFacet}\n forceView={forceViewAction}\n />\n {page !== undefined && totalPages !== undefined && onPageChange && totalPages > 1 && (\n <StickyPagination\n page={page}\n totalPages={totalPages}\n onPageChange={onPageChange}\n total={total ?? activeEscalations.length}\n pageSize={pageSize ?? 25}\n onPageSizeChange={onPageSizeChange}\n />\n )}\n </div>\n );\n }\n\n if (layout === 'active-history') {\n return (\n <div>\n {header}\n <div className=\"grid grid-cols-1 @split:grid-cols-[1.6fr_1fr] gap-8 @split:gap-12 items-start\">\n {activeBlock}\n {/* pt-4 seats the History label on the Active label's optical line\n (the card's own padding provides that inset on the left). */}\n <div className=\"@split:pt-4\">\n <SectionLabel>History</SectionLabel>\n <HistoryColumn role={role} def={listSchema['x-lt-history'] ?? {}} onRowClick={onRowClick} />\n </div>\n </div>\n </div>\n );\n }\n\n // \"active\" (or any non-table layout): just the active card.\n return (\n <div>\n {header}\n {activeBlock}\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { format as fnsFormat } from 'date-fns';\nimport { formatRemaining } from '../../../lib/format';\nimport { DateTooltip } from './DateTooltip';\n\nconst COUNTDOWN_THRESHOLDS = [\n { maxMs: 0, color: 'text-status-error' },\n { maxMs: 5 * 60 * 1000, color: 'text-status-error' },\n { maxMs: 15 * 60 * 1000, color: 'text-status-warning' },\n { maxMs: Infinity, color: 'text-text-secondary' },\n] as const;\n\nfunction countdownColor(remainingMs: number): string {\n if (remainingMs <= 0) return COUNTDOWN_THRESHOLDS[0].color;\n for (const t of COUNTDOWN_THRESHOLDS) {\n if (remainingMs < t.maxMs) return t.color;\n }\n return COUNTDOWN_THRESHOLDS[COUNTDOWN_THRESHOLDS.length - 1].color;\n}\n\nexport function CountdownTimer({ until }: { until: string }) {\n const [remaining, setRemaining] = useState(() => new Date(until).getTime() - Date.now());\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRemaining(new Date(until).getTime() - Date.now());\n }, 1000);\n return () => clearInterval(interval);\n }, [until]);\n\n const options = useMemo(() => {\n const d = new Date(until);\n return [\n { label: 'ms', value: String(Math.max(0, remaining)) },\n { label: 'until', value: d.toISOString() },\n { label: 'local', value: fnsFormat(d, 'MMM d, yyyy h:mm:ss a') },\n ];\n }, [until, remaining]);\n\n return (\n <DateTooltip options={options}>\n <span className={`text-xs font-mono ${countdownColor(remaining)}`}>\n {formatRemaining(remaining)}\n </span>\n </DateTooltip>\n );\n}\n"],"names":["BLOCKED_KEYS","parsePath","path","segs","raw","m","name","brackets","b","setDeep","root","value","node","seg","next","childKey","wantArray","last","getDeep","bindPathFor","propName","propDef","bind","mapFormToPayload","formValues","formSchema","props","payload","def","mapPayloadToForm","form","v","HELP_DOMAINS","TOKEN_PATTERN","MISSING_VALUE","formatTokenValue","interpolateHelp","template","ctx","_match","rawPath","dot","domain","resolveHelpSource","schema","help","context","buildHelpMarkdown","source","defaultHelpMarkdown","isTerminal","status","claimed","claimedByMe","isEffectivelyClaimed","esc","isAckEscalation","PALETTE","hash","str","h","i","typeColor","typeName","useAgeTick","enabled","setTick","useState","useEffect","t","schemaUsesAge","_a","f","rowContext","e","parse","s","ISO_DATETIME","EM_DASH","FieldValue","format","jsx","d","formatAgoCompact","DateValue","DEFAULT_CLAIM_MINUTES","isClaimable","row","RowActionButton","onView","prominent","forceView","authored","action","label","claim","useClaimEscalation","error","setError","fire","err","classes","jsxs","ActiveCard","card","rowAction","onOpen","title","MarkdownRenderer","HistoryColumn","role","onRowClick","show","setShow","query","useEscalations","rows","total","_b","rowDef","STATUS_DOT_STYLES","FacetTable","onAddFacet","columnDefs","columns","col","bound","METADATA_TOKEN","linkable","display","Link","metadataFacetUrl","ev","ListFilter","Search","DataTable","SectionLabel","children","groupBoardRows","groupBy","facetKey","groups","key","rawValue","existing","a","FacetBoard","onOpenDetail","onOpenGroup","g","state","stateHue","activate","EscalationListView","listSchema","activeEscalations","forceViewAction","page","totalPages","pageSize","onPageChange","onPageSizeChange","layout","active","activeBlock","header","resolvedTotal","StickyPagination","COUNTDOWN_THRESHOLDS","countdownColor","remainingMs","CountdownTimer","until","remaining","setRemaining","interval","options","useMemo","fnsFormat","DateTooltip","formatRemaining"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as s,j as n}from"./vendor-query-B2UbickB.js";import{M as p,$ as f}from"./index-CSTwyrwu.js";function D({startDate:r,endDate:o,isLive:e}){const[l,c]=s.useState(Date.now);s.useEffect(()=>{if(!e)return;const u=setInterval(()=>c(Date.now()),1e3);return()=>clearInterval(u)},[e]);const i=new Date(r).getTime(),m=o?new Date(o).getTime():l,t=Math.max(0,m-i),a=p(t),x=s.useMemo(()=>[{label:"ms",value:String(t)},{label:"sec",value:`${(t/1e3).toFixed(3)}s`},{label:"text",value:a}],[t,a]);return n.jsx(f,{options:x,children:n.jsx("span",{className:`text-xs ${e?"text-status-active":"text-text-tertiary"}`,children:a})})}export{D as E};
|
|
2
|
-
//# sourceMappingURL=ElapsedCell-BE_CN5sP.js.map
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{j as e,b as le,c as _e,u as yt,a as u}from"./vendor-query-B2UbickB.js";import{P as Oe}from"./PageHeader-DrbNMGxm.js";import{S as be}from"./StatusBadge-BbqghFMi.js";import{a as Tt,b as bt,c as We,d as jt,e as At,f as Lt}from"./mcp-query-C9kV4sUm.js";import{d as fe,F as $t,J as U,S as vt,e as It,g as Ot,h as Wt}from"./index-CSTwyrwu.js";import{j as Nt,A as Ke,J as Ne,H as we,O as wt,Q as Rt,y as Bt,V as Ft,Y as qt,_ as Et,$ as je,a0 as Re,B as xt,a1 as $e,a2 as mt,o as Dt,p as zt,T as Jt,X as Be,a3 as Qt,g as Yt,a4 as Kt,d as Vt,a5 as Ut,a6 as Ht,a7 as Gt,a8 as kt}from"./vendor-icons-Bg6eJX4Z.js";import{a as Ve,f as ge,e as Fe,L as Se}from"./vendor-react-BpdAFEQc.js";import{b as qe,c as Pe,u as Ue,d as Xt,e as Zt,f as es,g as ts,h as ss,i as as,j as rs,k as ns,l as is,m as cs,a as ls}from"./yaml-workflows-DDclYAID.js";import{c as He,d as os}from"./useEventHooks-B8p56JlB.js";import{T as Ee}from"./TagInput-Bf9dZSG6.js";import{C as ds}from"./CollapsibleSection-D0psvw8i.js";import{u as xs,b as ms}from"./pipelines-CBR68T8R.js";import{a as Qe}from"./workflows-DtnXUL0U.js";import{b as Ge}from"./tasks-DHpWqKMk.js";import{u as us}from"./useYamlActivityEvents-DgpiFXib.js";import{b as ps,e as Ce,m as hs,S as fs}from"./helpers-DzO-OGPe.js";import{R as gs}from"./RunAsSelector-DFv0VNVZ.js";import{T as ys}from"./ToolPill-gA4sXukc.js";import{C as bs}from"./CopyableId-BpB-NvDh.js";import{T as js}from"./TimeAgo-CvslqTB7.js";import{S as vs}from"./SwimlaneTimeline-CA0TKDIi.js";import"./BotPicker-DRv_orzI.js";import"./bots-BXzxybS6.js";import"./StreamMessageDetail-BmBfNSEr.js";function Xe({labels:t,current:s,maxReachable:r,onStepClick:n}){return e.jsx("div",{className:"sticky top-0 z-20 bg-surface/95 backdrop-blur-sm pb-6 pt-1 -mt-1",children:e.jsx("div",{className:"flex items-center gap-3",children:t.map((d,o)=>{const a=o+1,m=a<=r;return e.jsxs("div",{className:"flex items-center gap-2",children:[a>1&&e.jsx("div",{className:`w-8 h-px ${s>=a?"bg-accent":"bg-surface-border"}`}),e.jsx("button",{onClick:()=>m&&n(a),disabled:!m,className:`w-6 h-6 rounded-full text-2xs font-semibold flex items-center justify-center transition-colors ${s===a?"bg-accent text-text-inverse":m?"bg-accent/20 text-accent cursor-pointer hover:bg-accent/30":"bg-surface-sunken text-text-tertiary cursor-default"}`,children:a}),e.jsx("span",{className:`text-xs ${s===a?"text-text-primary font-medium":"text-text-tertiary"}`,children:d})]},a)})})})}const St=["builderJobs"];function Ct(){const t=le();return _e({mutationFn:s=>fe("/insight/build-workflow",{method:"POST",body:JSON.stringify({...s,wait:!1})}),onSuccess:()=>{t.invalidateQueries({queryKey:St,refetchType:"all"}),t.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function Ns(){const t=le();return _e({mutationFn:s=>fe("/insight/build-workflow/refine",{method:"POST",body:JSON.stringify({...s,wait:!1})}),onSuccess:()=>{t.invalidateQueries({queryKey:St,refetchType:"all"})}})}function ws(){const t=le();return _e({mutationFn:s=>fe("/yaml-workflows/direct",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{t.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function _t(t){return yt({queryKey:["builderResult",t],queryFn:()=>fe(`/workflows/${t}/result`),enabled:!!t})}const Ze=["workflowSets"];function ks(t){return yt({queryKey:[...Ze,t],queryFn:()=>fe(`/workflow-sets/${t}`),enabled:!!t})}function Ss(){const t=le();return _e({mutationFn:s=>fe("/workflow-sets",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{t.invalidateQueries({queryKey:Ze,refetchType:"all"})}})}function Cs(){const t=le();return _e({mutationFn:({id:s,...r})=>fe(`/workflow-sets/${s}/add`,{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{t.invalidateQueries({queryKey:Ze,refetchType:"all"}),t.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}const _s=[{icon:Ne,color:"text-accent",title:"Describe",detail:"Write a prompt. The LLM executes tools dynamically to fulfill your request."},{icon:wt,color:"text-status-warning",title:"Discover",detail:"Review the execution trace — which tools were called, what data flowed between them."},{icon:we,color:"text-status-success",title:"Compile",detail:"Successful runs compile into deterministic pipelines. No LLM needed at runtime."}],Ps=[{icon:Ne,color:"text-accent",title:"Describe",detail:"Specify what tools to use, what inputs to accept, and how data should flow between steps."},{icon:we,color:"text-status-warning",title:"Review",detail:"The LLM will create the pipeline (DAG) directly from tool schemas. Review the generated pipeline."},{icon:Nt,color:"text-status-success",title:"Deploy & Test",detail:"Deploy, run with sample inputs, and refine until the pipeline works correctly."}],Ms=[{icon:Ne,color:"text-accent",title:"Specification",detail:"Describe API endpoints, processes, or paste a spec. The system decomposes it into pipeline tools."},{icon:Ke,color:"text-status-warning",title:"Plan & Build",detail:"Review the decomposition, configure the toolset, then build each tool leaf-first."},{icon:we,color:"text-status-success",title:"Deploy & Test",detail:"Deploy the toolset. Test individual tools and the full composition."}];function Ts(){const t=Ve(),[s,r]=u.useState(""),[n,d]=u.useState("discover"),[o,a]=u.useState(!0),m=Tt(),l=bt(),x=Ct(),c=Ss(),p=async i=>{i.preventDefault();const b=s.trim();if(b)if(n==="plan"){const y=`plan-${Date.now().toString(36)}`,h=await c.mutateAsync({name:y,specification:b});r(""),t(`/mcp/queries/${h.planner_workflow_id}?mode=plan&set_id=${h.id}`,{replace:!0})}else if(n==="direct"){const y=await x.mutateAsync({prompt:b});r(""),t(`/mcp/queries/${y.workflow_id}?mode=builder`,{replace:!0})}else{const h=await(o?m:l).mutateAsync({prompt:b});r(""),o?t(`/mcp/queries/${h.workflow_id}?step=2`,{replace:!0}):t(`/workflows/executions/${h.workflow_id}`,{replace:!0})}},f=n==="plan"?c:n==="direct"?x:o?m:l,S=n==="plan"?Ms:n==="discover"?_s:Ps;return e.jsxs("div",{children:[e.jsx(Oe,{title:"Designer",docsHash:"#docs:dashboard.md:mcp-tool-designer"}),e.jsx("p",{className:"text-sm text-text-secondary mb-6 leading-relaxed max-w-xl",children:"Create deterministic MCP tools from natural language. Choose how to get there."}),e.jsxs("div",{className:"flex gap-1 mb-6 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[e.jsxs("button",{onClick:()=>d("discover"),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${n==="discover"?"bg-surface text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:[e.jsx(Nt,{className:"w-3 h-3",strokeWidth:1.5}),"Discover & Compile"]}),e.jsxs("button",{onClick:()=>d("plan"),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${n==="plan"?"bg-surface text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:[e.jsx(Ke,{className:"w-3 h-3",strokeWidth:1.5}),"Build"]})]}),e.jsxs("div",{className:"grid grid-cols-[1fr_240px] gap-6",children:[e.jsxs("form",{onSubmit:p,children:[e.jsxs("div",{className:"rounded-lg border border-surface-border bg-surface-raised overflow-hidden h-full flex flex-col",children:[e.jsxs("div",{className:"flex items-start gap-3 flex-1",children:[e.jsx(Ne,{className:"w-4 h-4 text-accent shrink-0 mt-3.5 ml-4",strokeWidth:1.5}),e.jsx("textarea",{ref:i=>{i&&(i.style.height="auto",i.style.height=Math.min(400,Math.max(160,i.scrollHeight))+"px")},value:s,onChange:i=>{r(i.target.value);const b=i.target;b.style.height="auto",b.style.height=Math.min(400,Math.max(160,b.scrollHeight))+"px"},placeholder:n==="plan"?"Describe the tools you want to build — API specs, process descriptions, or a full PRD. The system will decompose, build, and deploy them as a composable toolset...":"Describe what you want to accomplish. The system will discover and execute the right tools...",className:"flex-1 min-h-[160px] pr-4 py-3 bg-transparent text-sm text-text-primary placeholder:text-text-tertiary resize-none focus:outline-none border-none",autoFocus:!0,onKeyDown:i=>{i.key==="Enter"&&(i.metaKey||i.ctrlKey)&&p(i)}})]}),e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-t border-surface-border bg-surface-sunken/30",children:[n==="plan"?e.jsx("span",{className:"text-2xs text-text-tertiary",children:"Decomposes into composable pipeline tools — builds leaf-first"}):n==="discover"?e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer select-none group",children:[e.jsx("input",{type:"checkbox",checked:o,onChange:i=>a(i.target.checked),className:"w-3.5 h-3.5 rounded border-surface-border text-accent focus:ring-accent/50 bg-surface-sunken cursor-pointer"}),e.jsx("span",{className:"text-2xs text-text-secondary group-hover:text-text-primary transition-colors",children:"Force discovery"}),e.jsx("span",{className:"text-2xs text-text-tertiary",children:o?"— skip compiled pipelines":"— prefer compiled pipelines"})]}):e.jsx("span",{className:"text-2xs text-text-tertiary",children:"LLM builds pipeline from tool schemas — no execution needed"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-2xs text-text-tertiary",children:"Cmd+Enter"}),e.jsx("button",{type:"submit",disabled:!s.trim()||f.isPending,className:"px-4 py-1.5 bg-accent text-text-inverse text-xs font-medium rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:f.isPending?"Starting...":n==="plan"?"Plan":n==="discover"?"Discover":"Build"})]})]})]}),f.isError&&e.jsx("p",{className:"mt-2 text-sm text-status-error",children:f.error.message})]}),e.jsx("div",{className:"space-y-4 pt-1",children:S.map(i=>e.jsxs("div",{className:"flex items-start gap-2.5",children:[e.jsx(i.icon,{className:`w-3.5 h-3.5 mt-0.5 shrink-0 ${i.color}`,strokeWidth:1.5}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-medium text-text-primary",children:i.title}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5 leading-relaxed",children:i.detail})]})]},i.title))})]})]})}function oe({children:t}){return e.jsx("div",{className:"sticky bottom-0 bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-page-x px-page-x pt-3 pb-5 z-20 flex justify-between items-center mt-8",children:t})}const As=[{icon:Bt,label:"Discovering MCP servers and tools",key:"discover"},{icon:Ft,label:"Building graph flow",key:"build"},{icon:qt,label:"Validating workflow structure",key:"validate"}];function Ls({workflowId:t,status:s,builderData:r,onBuilt:n,onNext:d}){var v,k,N,_,L,C;const[o,a]=u.useState(""),[m,l]=u.useState(0),x=Ct(),{data:c}=We(t),p=r==null?void 0:r.clarification_needed,f=(r==null?void 0:r.questions)||[],S=(r==null?void 0:r.tools_identified)||[],i=s==="in_progress",b=s==="completed"&&(r==null?void 0:r.yaml),y=s==="failed"||((v=r==null?void 0:r.title)==null?void 0:v.includes("Failed")),h=(k=c==null?void 0:c.events)==null?void 0:k.find(g=>g.event_type==="workflow_execution_started"),j=Array.isArray((N=h==null?void 0:h.attributes)==null?void 0:N.input)?h.attributes.input[0]:(_=h==null?void 0:h.attributes)==null?void 0:_.input,w=((L=j==null?void 0:j.data)==null?void 0:L.prompt)||((C=j==null?void 0:j.data)==null?void 0:C.question)||null;u.useEffect(()=>{if(!i)return;const $=((c==null?void 0:c.events)||[]).filter(M=>M.event_type==="activity_task_completed"&&!M.is_system).length;$>=2?l(2):$>=1?l(1):l(0)},[i,c==null?void 0:c.events]);const T=async()=>{o.trim()&&(await x.mutateAsync({prompt:(r==null?void 0:r._originalPrompt)||t,answers:o.trim(),prior_questions:f}),n())};return e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Describe"}),e.jsx("p",{className:"text-base text-text-secondary mb-6",children:p?"The builder identified tools but needs more details before constructing the workflow.":i?"Building your workflow — this typically takes 20-40 seconds.":b?"Graph flow ready — input schema and activity manifest generated.":y?"Build failed. Try a more specific prompt or use Discover & Compile mode.":"Workflow build submitted."}),p&&e.jsxs("div",{className:"space-y-4",children:[S.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Tools Identified"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:S.map(g=>e.jsx("span",{className:"px-2 py-0.5 text-xs font-mono bg-accent/10 text-accent rounded",children:g},g))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Questions"}),e.jsx("div",{className:"space-y-2",children:f.map((g,$)=>e.jsxs("div",{className:"flex items-start gap-2 text-sm text-text-secondary",children:[e.jsx(Rt,{className:"w-3.5 h-3.5 text-status-warning shrink-0 mt-0.5",strokeWidth:1.5}),e.jsx("span",{children:g})]},$))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Your Answers"}),e.jsx("textarea",{value:o,onChange:g=>a(g.target.value),placeholder:"Answer each question above...",className:"w-full min-h-[120px] px-3 py-2 bg-surface text-sm text-text-primary placeholder:text-text-tertiary rounded-md border border-surface-border resize-none focus:outline-none focus:ring-1 focus:ring-accent",onKeyDown:g=>{g.key==="Enter"&&(g.metaKey||g.ctrlKey)&&T()}}),e.jsx("div",{className:"flex justify-end mt-2",children:e.jsx("button",{onClick:T,disabled:!o.trim()||x.isPending,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent/10 text-accent rounded-md hover:bg-accent/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:x.isPending?"Submitting...":"Submit Answers & Build"})})]})]}),!p&&e.jsxs("div",{className:"grid grid-cols-[1fr_240px] gap-6",children:[e.jsx("div",{className:"rounded-lg bg-surface-sunken/40 overflow-hidden",children:e.jsxs("div",{className:"flex items-start gap-3 p-4",children:[e.jsx(Ne,{className:"w-4 h-4 text-accent shrink-0 mt-0.5",strokeWidth:1.5}),w?e.jsx("p",{className:"text-sm font-mono text-text-secondary leading-relaxed whitespace-pre-wrap",children:w}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"Loading prompt..."})]})}),e.jsxs("div",{className:"space-y-3 pt-1",children:[As.map((g,$)=>{const M=b||$<m,O=i&&$===m;return e.jsxs("div",{className:"flex items-start gap-2.5",children:[M?e.jsx(Et,{className:"w-3.5 h-3.5 text-status-success shrink-0 mt-0.5",strokeWidth:1.5}):O?e.jsx(je,{className:"w-3.5 h-3.5 text-accent animate-spin shrink-0 mt-0.5",strokeWidth:1.5}):e.jsx(g.icon,{className:"w-3.5 h-3.5 text-text-tertiary/40 shrink-0 mt-0.5",strokeWidth:1.5}),e.jsxs("div",{children:[e.jsx("p",{className:`text-2xs font-medium ${M||O?"text-text-primary":"text-text-tertiary/50"}`,children:g.label}),M&&!i&&e.jsx("p",{className:"text-2xs text-status-success mt-0.5",children:"complete"})]})]},g.key)}),i&&e.jsxs("p",{className:"text-2xs text-text-tertiary pl-6",children:["Elapsed: ",c!=null&&c.duration_ms?`${(c.duration_ms/1e3).toFixed(0)}s`:"..."]}),b&&r.build_attempts>1&&e.jsxs("p",{className:"text-2xs text-text-tertiary pl-6",children:["Built in ",r.build_attempts," attempts"]}),y&&e.jsx("p",{className:"text-2xs text-status-error pl-6",children:(r==null?void 0:r.summary)||"Build failed"})]})]}),e.jsxs(oe,{children:[e.jsx("div",{}),b&&e.jsx("button",{onClick:d,className:"btn-primary text-xs",children:"Next: Profile"})]})]})}function de(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_|_$/g,"")}function Ie(t){return t.toLowerCase().replace(/[^a-z0-9]/g,"").replace(/^[0-9]+/,"")}function $s({builderData:t,resolvedYamlId:s,originalPrompt:r,onBack:n,onCreate:d,onNext:o}){const[a,m]=u.useState(!1),[l,x]=u.useState(de((t==null?void 0:t.name)||"")),[c,p]=u.useState((t==null?void 0:t.description)||""),[f,S]=u.useState(""),[i,b]=u.useState((t==null?void 0:t.tags)||[]),y=ws(),h=qe(),{data:j}=Pe(s||""),w=!!s,T=async()=>{const N=await y.mutateAsync({name:l,description:c,yaml_content:t.yaml,input_schema:t.input_schema,activity_manifest:t.activity_manifest,tags:i,app_id:f});d(N.id)},v=async()=>{s&&(await h.mutateAsync({id:s,name:l,description:c,tags:i}),m(!1))},k=!w||a;return e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Profile"}),e.jsx("p",{className:"text-base text-text-secondary mb-6",children:"Name the MCP server and tool, add tags for discovery, and describe what this pipeline does."}),r&&e.jsxs("div",{className:"mb-6",children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Original Prompt"}),e.jsx("div",{className:"rounded-md bg-surface-sunken/50 px-4 py-3",children:e.jsx("p",{className:"text-xs font-mono text-text-primary leading-relaxed whitespace-pre-wrap",children:r})})]}),e.jsxs("div",{className:"grid grid-cols-[300px_1fr] gap-4 mb-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"MCP Server Name"}),k?e.jsx("input",{value:f,onChange:N=>S(Ie(N.target.value)),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("p",{className:"text-sm text-text-primary py-1.5",children:(j==null?void 0:j.app_id)||f})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"MCP Tool Name"}),k?e.jsx("input",{value:l,onChange:N=>x(de(N.target.value)),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("p",{className:"text-sm text-text-primary py-1.5",children:(j==null?void 0:j.name)||l})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),k?e.jsx(Ee,{tags:i,onChange:b,compact:!0}):e.jsx("div",{className:"flex flex-wrap gap-1.5 py-1",children:((j==null?void 0:j.tags)||i).map(N=>e.jsx("span",{className:"px-2 py-0.5 text-sm bg-surface-raised text-text-primary rounded",children:N},N))})]})]}),e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),w&&!a&&e.jsxs("button",{onClick:()=>m(!0),className:"flex items-center gap-1 text-2xs text-accent hover:text-accent/80 transition-colors",children:[e.jsx(Re,{className:"w-3 h-3",strokeWidth:1.5}),"Edit"]})]}),k?e.jsx("textarea",{value:c,onChange:N=>p(N.target.value),className:"w-full flex-1 min-h-[100px] bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary resize-none focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("p",{className:"text-sm text-text-primary leading-relaxed py-1.5",children:(j==null?void 0:j.description)||c}),a&&e.jsxs("div",{className:"flex justify-end gap-2 mt-2",children:[e.jsx("button",{onClick:()=>m(!1),className:"text-2xs text-text-tertiary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:v,disabled:h.isPending,className:"text-2xs text-accent hover:text-accent/80 font-medium",children:h.isPending?"Saving...":"Save Changes"})]})]})]}),y.isError&&e.jsx("p",{className:"text-xs text-status-error mb-4",children:y.error.message}),e.jsxs(oe,{children:[e.jsx("button",{onClick:n,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),w?e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Deploy"}):e.jsx("button",{onClick:T,disabled:y.isPending||!l.trim(),className:"btn-primary text-xs disabled:opacity-50 disabled:cursor-not-allowed",children:y.isPending?"Creating...":"Create & Save"})]})]})}function ue({icon:t,label:s,onClick:r,disabled:n}){return e.jsxs("button",{type:"button",onClick:r,disabled:n,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent/10 text-accent rounded-md hover:bg-accent/20 transition-colors shrink-0 disabled:opacity-50 disabled:cursor-not-allowed",children:[t&&e.jsx(t,{className:"w-3.5 h-3.5",strokeWidth:1.5}),s]})}const ut={dynamic:{bg:"bg-status-success/10",text:"text-status-success",label:"Dynamic"},fixed:{bg:"bg-surface-sunken",text:"text-text-tertiary",label:"Fixed"},wired:{bg:"bg-blue-500/10",text:"text-blue-500",label:"Wired"}};function Is({classification:t}){const s=ut[t]||ut.fixed;return e.jsx("span",{className:`px-1.5 py-0.5 text-2xs font-medium rounded ${s.bg} ${s.text}`,children:s.label})}function Os({fields:t,onChange:s,editing:r}){const[n,d]=u.useState(null),o=(c,p)=>{const f=t.map((S,i)=>i===c?{...S,...p}:S);s(f)},a=c=>{const p=t[c],f=p.classification==="dynamic"?"fixed":"dynamic",S={classification:f};f==="fixed"&&p.default===void 0&&(S.default=p.type==="string"?"":p.type==="number"?0:p.type==="boolean"?!1:null),o(c,S)},m=c=>{s(t.filter((p,f)=>f!==c))};if(t.length===0)return e.jsx("div",{className:"py-4 text-center",children:e.jsx("p",{className:"text-xs text-text-tertiary",children:"No input fields detected from the execution."})});const l=t.filter(c=>c.classification==="dynamic"),x=t.filter(c=>c.classification==="fixed");return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3 text-2xs text-text-tertiary",children:[e.jsxs("span",{children:[l.length," dynamic (user provides)"]}),e.jsxs("span",{children:[x.length," fixed (defaults from execution)"]})]}),l.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-status-success/70 mb-2",children:"Dynamic Inputs (required at invocation)"}),e.jsx("div",{className:"space-y-1",children:l.map(c=>{const p=t.indexOf(c),f=n===c.key;return e.jsx(pt,{field:c,editing:r,expanded:f,onToggleExpand:()=>d(f?null:c.key),onToggleClassification:()=>a(p),onUpdate:S=>o(p,S),onRemove:()=>m(p)},c.key)})})]}),x.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Fixed Defaults (from execution)"}),e.jsx("div",{className:"space-y-1",children:x.map(c=>{const p=t.indexOf(c),f=n===c.key;return e.jsx(pt,{field:c,editing:r,expanded:f,onToggleExpand:()=>d(f?null:c.key),onToggleClassification:()=>a(p),onUpdate:S=>o(p,S),onRemove:()=>m(p)},c.key)})})]})]})}function pt({field:t,editing:s,expanded:r,onToggleExpand:n,onToggleClassification:d,onUpdate:o,onRemove:a}){return e.jsxs("div",{className:"border border-surface-border rounded-lg overflow-hidden",children:[e.jsxs("button",{type:"button",onClick:n,className:"w-full flex items-center gap-2 px-3 py-2 hover:bg-surface-hover/50 transition-colors",children:[e.jsx("span",{className:"font-mono text-xs text-text-primary",children:t.key}),e.jsx("span",{className:"text-2xs text-text-tertiary",children:t.type}),e.jsx(Is,{classification:t.classification}),t.default!==void 0&&e.jsxs("span",{className:"text-2xs font-mono text-text-tertiary truncate max-w-[120px]",children:["= ",JSON.stringify(t.default)]}),e.jsx("span",{className:"text-2xs text-text-tertiary ml-auto truncate max-w-[150px]",children:t.source_tool}),e.jsx("svg",{className:`w-3 h-3 text-text-tertiary shrink-0 transition-transform ${r?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),r&&e.jsxs("div",{className:"px-3 pb-3 pt-1 border-t border-surface-border/50 space-y-2",children:[e.jsx("p",{className:"text-2xs text-text-tertiary",children:t.description}),s&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),e.jsx("input",{type:"text",value:t.description,onChange:m=>o({description:m.target.value}),className:"input text-2xs w-full mt-0.5"})]}),t.classification==="fixed"&&e.jsxs("div",{children:[e.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Default Value"}),e.jsx("input",{type:"text",value:t.default!==void 0?typeof t.default=="string"?t.default:JSON.stringify(t.default):"",onChange:m=>{let l=m.target.value;if(t.type==="number")l=Number(l)||0;else if(t.type==="boolean")l=l==="true";else try{l=JSON.parse(l)}catch{}o({default:l})},className:"input text-2xs font-mono w-full mt-0.5"})]}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx("button",{type:"button",onClick:d,className:"text-2xs text-accent hover:underline",children:t.classification==="dynamic"?"Make fixed (add default)":"Make dynamic (require input)"}),e.jsx("button",{type:"button",onClick:a,className:"text-2xs text-status-error hover:underline ml-auto",children:"Remove"})]})]})]})]})}const Le="w-3 h-3",De="p-1 rounded text-text-tertiary hover:text-text-primary hover:bg-surface-raised/60 transition-colors duration-150",ze="p-2 rounded text-text-tertiary hover:text-text-primary hover:bg-surface-raised transition-colors duration-150";function Ws({yamlText:t,configEditing:s,yamlDraft:r,setYamlDraft:n,yamlTextareaRef:d}){const[o,a]=u.useState(!1),[m,l]=u.useState(!1),x=u.useRef(null),c=u.useCallback(()=>{navigator.clipboard.writeText(t).then(()=>{l(!0),setTimeout(()=>l(!1),1500)})},[t]);return e.jsxs("div",{children:[e.jsx("h4",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Graph Definition"}),e.jsxs("div",{ref:x,className:"relative",children:[e.jsxs("div",{className:"absolute top-2 right-2 z-10 flex items-center gap-0.5 bg-surface-sunken/90 rounded backdrop-blur-sm",children:[e.jsx("a",{href:"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md",target:"_blank",rel:"noopener noreferrer",className:De,title:"Graph Guide",children:e.jsx(xt,{className:Le})}),e.jsx("button",{onClick:c,className:De,title:"Copy YAML",children:m?e.jsx($e,{className:`${Le} text-status-success`}):e.jsx(mt,{className:Le})}),e.jsx("button",{onClick:()=>a(!0),className:De,title:"Fullscreen",children:e.jsx(Dt,{className:Le})})]}),s?e.jsx("textarea",{ref:d,value:r,onChange:p=>n(p.target.value),className:"w-full p-4 pr-28 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:r.split(`
|
|
2
|
-
`).length+1,style:{fieldSizing:"content"},spellCheck:!1}):e.jsx("pre",{className:"p-4 pr-28 bg-surface-sunken rounded-md text-xs font-mono text-text-secondary overflow-x-auto whitespace-pre",children:t})]}),e.jsxs($t,{open:o,onClose:()=>a(!1),sourceRef:x,children:[e.jsx("div",{className:"sticky top-0 float-right z-10",children:e.jsxs("div",{className:"flex items-center gap-0.5 bg-surface-sunken/80 rounded-md backdrop-blur-sm",children:[e.jsx("a",{href:"https://github.com/hotmeshio/sdk-typescript/blob/main/docs/quickstart.md",target:"_blank",rel:"noopener noreferrer",className:ze,title:"Graph Guide",children:e.jsx(xt,{className:"w-5 h-5"})}),e.jsx("button",{onClick:c,className:ze,title:"Copy YAML",children:m?e.jsx($e,{className:"w-5 h-5 text-status-success"}):e.jsx(mt,{className:"w-5 h-5"})}),e.jsx("button",{onClick:()=>a(!1),className:ze,title:"Close (Esc)",children:e.jsx(zt,{className:"w-5 h-5"})})]})}),s?e.jsx("textarea",{value:r,onChange:p=>n(p.target.value),className:"w-full min-h-[calc(100vh-80px)] p-6 bg-transparent text-sm font-mono text-text-primary leading-relaxed focus:outline-none resize-none",spellCheck:!1,autoFocus:!0}):e.jsx("pre",{className:"text-sm font-mono text-text-secondary leading-relaxed whitespace-pre",children:t})]})]})}function Rs({manifest:t}){return e.jsxs("div",{children:[e.jsx("h4",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-3",children:"Activity Manifest"}),e.jsx("div",{className:"space-y-3",children:t.filter(s=>s.tool_source!=="trigger").map(s=>{const r=s.tool_arguments&&Object.keys(s.tool_arguments).length>0,n=s.input_mappings&&Object.keys(s.input_mappings).length>0;return!r&&!n?null:e.jsxs("div",{className:"bg-surface-sunken rounded-md p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"text-2xs font-mono text-text-tertiary",children:s.activity_id}),e.jsx("span",{className:"text-xs font-medium text-text-primary",children:s.title}),s.mcp_tool_name&&e.jsx("span",{className:"text-2xs font-mono px-1.5 py-0.5 rounded bg-surface-raised text-text-secondary",children:s.mcp_tool_name})]}),n&&e.jsxs("div",{className:r?"mb-3":"",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Runtime Wiring"}),e.jsx("div",{className:"grid gap-1",children:Object.entries(s.input_mappings).map(([d,o])=>e.jsxs("div",{className:"flex items-baseline gap-2 text-xs",children:[e.jsx("span",{className:"font-mono text-text-secondary shrink-0",children:d}),e.jsx("span",{className:"text-text-tertiary shrink-0",children:"←"}),e.jsx("span",{className:"font-mono text-accent/70",children:typeof o=="object"?JSON.stringify(o):String(o)})]},d))})]}),r&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Discovery Reference"}),e.jsx("p",{className:"text-2xs text-text-tertiary mb-1.5",children:"Values from the original execution, stored for context. Runtime values are determined by the wiring above."}),e.jsx("div",{className:"grid gap-1 opacity-60",children:Object.entries(s.tool_arguments).map(([d,o])=>{const a=typeof o=="string"?o:JSON.stringify(o),m=a.length>120;return e.jsxs("div",{className:"flex items-baseline gap-2 text-xs",children:[e.jsxs("span",{className:"font-mono text-text-secondary shrink-0",children:[d,":"]}),m?e.jsx("pre",{className:"font-mono text-text-tertiary whitespace-pre-wrap break-all flex-1",children:a}):e.jsx("span",{className:"font-mono text-text-tertiary truncate",children:a})]},d)})})]})]},s.activity_id)})})]})}function Bs({wf:t,resolvedInputSchema:s,resolvedOutputSchema:r,resolvedYaml:n,configEditing:d,setConfigEditing:o,canEditConfig:a,yamlDraft:m,setYamlDraft:l,inputSchemaDraft:x,setInputSchemaDraft:c,outputSchemaDraft:p,setOutputSchemaDraft:f,inputFieldMetaDraft:S,setInputFieldMetaDraft:i,onSave:b,onCancel:y,updateMutation:h,yamlTextareaRef:j,isCollapsed:w,onToggle:T,schemasGrid:v,unwrapped:k}){var $;const N=S.length>0,[_,L]=u.useState(!1),C=d?m:n??t.yaml_content,g=e.jsxs("div",{className:"space-y-6",children:[!k&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("div",{className:"flex items-center gap-3",children:d&&N&&e.jsx("button",{type:"button",onClick:()=>L(!_),className:"text-2xs text-text-tertiary hover:text-text-primary",children:_?"Visual editor":"Advanced (JSON)"})}),e.jsx("div",{className:"flex items-center gap-3",children:d&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:y,className:"text-2xs text-text-tertiary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:b,disabled:h.isPending||m===t.yaml_content&&x===JSON.stringify(t.input_schema,null,2)&&p===JSON.stringify(t.output_schema,null,2),className:"text-2xs text-accent hover:underline disabled:opacity-40 disabled:no-underline",children:h.isPending?"Saving...":"Save"})]})})]}),k&&d&&N&&e.jsx("div",{children:e.jsx("button",{type:"button",onClick:()=>L(!_),className:"text-2xs text-text-tertiary hover:text-text-primary",children:_?"Visual editor":"Advanced (JSON)"})}),h.error&&e.jsx("p",{className:"text-xs text-status-error",children:h.error.message}),e.jsxs("div",{className:v?"grid grid-cols-1 @split:grid-cols-2 gap-6":"space-y-6",children:[e.jsx("div",{children:d&&N&&!_?e.jsxs(e.Fragment,{children:[e.jsx("h4",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input Schema"}),e.jsx(Os,{fields:S,onChange:i,editing:d})]}):d?e.jsxs(e.Fragment,{children:[e.jsx("h4",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input Schema"}),e.jsx("textarea",{value:x,onChange:M=>c(M.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(x.split(`
|
|
3
|
-
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1})]}):e.jsx(U,{data:s??{},label:"Input Schema"})}),e.jsx("div",{children:d?e.jsxs(e.Fragment,{children:[e.jsx("h4",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Output Schema"}),e.jsx("textarea",{value:p,onChange:M=>f(M.target.value),className:"w-full p-4 bg-surface-sunken rounded-md text-xs font-mono text-text-primary leading-relaxed border border-surface-border focus:border-accent focus:outline-none resize-none overflow-hidden",rows:Math.max(p.split(`
|
|
4
|
-
`).length+1,6),style:{fieldSizing:"content"},spellCheck:!1})]}):e.jsx(U,{data:r??{},label:"Output Schema"})})]}),e.jsx(Ws,{yamlText:C,configEditing:d,yamlDraft:m,setYamlDraft:l,yamlTextareaRef:j}),(($=t.activity_manifest)==null?void 0:$.length)>0&&e.jsx(Rs,{manifest:t.activity_manifest})]});return k?g:e.jsx(ds,{sectionKey:"config",title:"Configuration",isCollapsed:w,onToggle:T,children:g})}const Fs={trigger:{bar:"bg-accent",dot:"bg-accent",hex:"rgb(var(--lt-accent))",label:"Trigger"},mcp:{bar:"bg-status-queued-graphic",dot:"bg-status-queued-graphic",hex:"rgb(var(--lt-status-queued-graphic))",label:"MCP"},db:{bar:"bg-status-queued-graphic",dot:"bg-status-queued-graphic",hex:"rgb(var(--lt-status-queued-graphic))",label:"Database"},llm:{bar:"bg-status-claimed-graphic",dot:"bg-status-claimed-graphic",hex:"rgb(var(--lt-status-claimed-graphic))",label:"LLM"},transform:{bar:"bg-status-success-graphic",dot:"bg-status-success-graphic",hex:"rgb(var(--lt-status-success-graphic))",label:"Transform"},signal:{bar:"bg-status-pending-graphic",dot:"bg-status-pending-graphic",hex:"rgb(var(--lt-status-pending-graphic))",label:"Signal"}};function ht(t){return Fs[t]??{bar:"bg-text-quaternary",dot:"bg-text-quaternary",hex:"rgb(var(--lt-text-quaternary))",label:t}}function Ye(t){return typeof t=="string"?[...t.matchAll(/\{([\w-]+)\./g)].map(s=>s[1]):Array.isArray(t)?t.flatMap(Ye):t&&typeof t=="object"?Object.values(t).flatMap(Ye):[]}function qs(t,s){if(!t)return[];const r=t.indexOf(`${s}:`);if(r===-1)return[];const n=t.slice(r),d=n.indexOf("maps:");if(d===-1)return[];const o=n.slice(d),a=o.match(/\n {6,10}\w+:|^\n {0,8}\w+:/m);return[...(a?o.slice(0,o.indexOf(a[0],1)):o).matchAll(/\{([\w-]+)\./g)].map(l=>l[1])}function Es(t,s){const r=new Set(t.map(d=>d.activity_id)),n=new Map;for(const d of t){const o=d.input_mappings?Object.values(d.input_mappings).flatMap(Ye):[],a=qs(s,d.activity_id),m=new Set([...o,...a]);for(const l of m)if(r.has(l)&&l!==d.activity_id){const x=`${l}->${d.activity_id}`;n.has(x)||n.set(x,{from:l,to:d.activity_id})}}return[...n.values()]}function Ds(t,s){var o;const r=new Map;for(const a of t)r.set(a.activity_id,[]);for(const a of s)(o=r.get(a.to))==null||o.push(a.from);const n=new Map;function d(a,m){if(n.has(a))return n.get(a);if(m.has(a))return 0;m.add(a);const l=r.get(a)??[],x=l.length===0?0:Math.max(...l.map(c=>d(c,m)))+1;return n.set(a,x),x}for(const a of t)d(a.activity_id,new Set);return n}const ye=44,zs=10,Js=24,Qs=14;function Ys({manifest:t,selectedId:s,onSelect:r,yaml:n}){const d=u.useRef(null),[o,a]=u.useState(0);u.useEffect(()=>{const b=d.current;if(!b)return;const y=()=>{const j=Qs*parseFloat(getComputedStyle(document.documentElement).fontSize);a(b.clientWidth-j)};y();const h=new ResizeObserver(y);return h.observe(b),()=>h.disconnect()},[]);const{edges:m,layerMap:l,numLayers:x,sortedEntries:c,rowIndex:p}=u.useMemo(()=>{const b=Es(t,n),y=b.length>0?Ds(t,b):new Map(t.map((v,k)=>[v.activity_id,k])),h=Math.max(1,...Array.from(y.values()))+1,j=t.map((v,k)=>({entry:v,origIdx:k}));j.sort((v,k)=>{const N=y.get(v.entry.activity_id)??0,_=y.get(k.entry.activity_id)??0;return N!==_?N-_:v.origIdx-k.origIdx});const w=j.map(v=>v.entry),T=new Map(w.map((v,k)=>[v.activity_id,k]));return{edges:b,layerMap:y,numLayers:h,sortedEntries:w,rowIndex:T}},[t,n]);if(t.length===0)return e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No activities in manifest"});const f=c.length*ye,S=Math.max(.7/x*100,4),i=[...new Set(t.map(b=>b.tool_source))];return e.jsxs("div",{children:[e.jsx("div",{className:"flex items-center gap-3 mb-3",children:i.map(b=>{const y=ht(b);return e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:`w-2 h-2 rounded-full dot-ring ${y.dot}`}),e.jsx("span",{className:"text-2xs text-text-tertiary",children:y.label})]},b)})}),e.jsxs("div",{className:"flex",children:[e.jsx("div",{className:"w-56 shrink-0"}),e.jsx("div",{className:"flex-1 relative h-5 border-b border-surface-border",children:Array.from({length:x}).map((b,y)=>e.jsx("span",{className:"absolute text-2xs font-mono text-text-tertiary bottom-1 -translate-x-1/2",style:{left:`${(y+.5)/x*100}%`},children:y===0?"entry":`step ${y}`},y))})]}),e.jsxs("div",{ref:d,className:"relative",children:[c.map(b=>{const h=(l.get(b.activity_id)??0)/x*100,j=ht(b.tool_source),w=s===b.activity_id;return e.jsxs("div",{className:`flex items-center border-b border-surface-border cursor-pointer transition-colors ${w?"bg-accent/5":"hover:bg-surface-raised/30"}`,style:{height:ye},onClick:()=>r(w?null:b.activity_id),children:[e.jsxs("div",{className:"w-56 shrink-0 pr-4 flex items-center gap-2",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full dot-ring shrink-0 ${j.dot}`}),e.jsx("p",{className:"text-xs font-mono text-text-secondary truncate",title:b.title,children:b.title})]}),e.jsxs("div",{className:"flex-1 relative h-full",children:[Array.from({length:x+1}).map((T,v)=>e.jsx("div",{className:"absolute top-0 bottom-0 w-px bg-surface-border opacity-30",style:{left:`${v/x*100}%`}},v)),e.jsx("div",{className:`absolute rounded-sm transition-all ${j.bar} ${w?"ring-2 ring-accent ring-offset-1 ring-offset-surface":"hover:brightness-110"}`,style:{left:`calc(${h}% + 4px)`,width:`calc(${S}% - 8px)`,top:zs,height:Js,minWidth:40},children:e.jsx("span",{className:"absolute inset-0 flex items-center px-2 text-2xs font-mono text-text-inverse truncate",children:b.mcp_tool_name??b.tool_source})})]})]},b.activity_id)}),m.length>0&&o>0&&e.jsxs("svg",{className:"absolute top-0 left-56 pointer-events-none overflow-visible",style:{width:o,height:f},children:[e.jsx("defs",{children:e.jsx("marker",{id:"dag-edge-arrow",viewBox:"0 0 10 8",refX:"10",refY:"4",markerWidth:"6",markerHeight:"5",orient:"auto-start-reverse",children:e.jsx("path",{d:"M0 0 L10 4 L0 8 Z",className:"fill-text-quaternary",opacity:"0.6"})})}),m.map((b,y)=>{const h=p.get(b.from)??0,j=p.get(b.to)??0,w=l.get(b.from)??0,T=l.get(b.to)??0,v=o/x,k=Math.max(v*.7-8,40),N=w*v+4+k,_=h*ye+ye/2,L=T*v+4,C=j*ye+ye/2,g=Math.abs(L-N)*.4;return e.jsx("path",{d:`M${N} ${_} C${N+g} ${_}, ${L-g} ${C}, ${L} ${C}`,fill:"none",className:"stroke-text-quaternary",strokeWidth:1.5,opacity:.4,markerEnd:"url(#dag-edge-arrow)"},y)})]})]})]})}function Ks({activityManifest:t,inputSchema:s,outputSchema:r,yamlContent:n,selectedNodeId:d,onNodeSelect:o,wf:a,configEditing:m,setConfigEditing:l,canEditConfig:x,yamlDraft:c,setYamlDraft:p,inputSchemaDraft:f,setInputSchemaDraft:S,outputSchemaDraft:i,setOutputSchemaDraft:b,inputFieldMetaDraft:y,setInputFieldMetaDraft:h,onSave:j,onCancel:w,updateMutation:T,yamlTextareaRef:v}){const[k,N]=u.useState("design");return u.useEffect(()=>{m&&(N("raw"),o(null))},[m,o]),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-1 mb-4",children:[e.jsx("button",{onClick:()=>{N("design")},className:`px-2.5 py-1 text-2xs font-medium rounded transition-colors ${k==="design"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Design"}),e.jsx("button",{onClick:()=>{N("raw"),o(null)},className:`px-2.5 py-1 text-2xs font-medium rounded transition-colors ${k==="raw"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Raw"})]}),k==="design"?e.jsx(Ys,{manifest:t,selectedId:d,onSelect:o,yaml:n}):e.jsx(Bs,{wf:a,resolvedInputSchema:s,resolvedOutputSchema:r,resolvedYaml:n,configEditing:m,setConfigEditing:l,canEditConfig:x,yamlDraft:c,setYamlDraft:p,inputSchemaDraft:f,setInputSchemaDraft:S,outputSchemaDraft:i,setOutputSchemaDraft:b,inputFieldMetaDraft:y,setInputFieldMetaDraft:h,onSave:j,onCancel:w,updateMutation:T,yamlTextareaRef:v,isCollapsed:!1,onToggle:()=>{},schemasGrid:!0,unwrapped:!0})]})}function Vs({entry:t,onClose:s}){var d;const r=t.input_mappings&&Object.keys(t.input_mappings).length>0,n=((d=t.output_fields)==null?void 0:d.length)>0;return e.jsxs("div",{className:"space-y-4 text-xs",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"font-mono font-medium text-sm text-text-primary truncate",children:t.title}),e.jsx("p",{className:"font-mono text-2xs text-text-tertiary mt-0.5 truncate",children:t.activity_id})]}),e.jsx("button",{onClick:s,className:"text-text-tertiary hover:text-text-primary text-2xs shrink-0",children:"Close"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-6 gap-y-2",children:[e.jsx(he,{label:"Type",value:t.type}),e.jsx(he,{label:"Source",value:t.tool_source}),t.mcp_tool_name&&e.jsx(he,{label:"Tool",value:t.mcp_tool_name}),t.mcp_server_id&&e.jsx(he,{label:"Server",value:t.mcp_server_id}),t.model&&e.jsx(he,{label:"Model",value:t.model}),t.topic&&e.jsx(he,{label:"Topic",value:t.topic}),t.hook_topic&&e.jsx(he,{label:"Hook",value:t.hook_topic})]}),r&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Input Mappings"}),e.jsx("div",{className:"grid gap-1",children:Object.entries(t.input_mappings).map(([o,a])=>e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"font-mono text-text-secondary shrink-0",children:o}),e.jsx("span",{className:"text-text-tertiary shrink-0",children:"←"}),e.jsx("span",{className:"font-mono text-accent/70 truncate",children:typeof a=="object"?JSON.stringify(a):String(a)})]},o))})]}),n&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Output Fields"}),e.jsx("p",{className:"font-mono text-text-secondary leading-relaxed",children:t.output_fields.join(", ")})]}),t.prompt_template&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Prompt Template"}),e.jsx("pre",{className:"text-2xs font-mono text-text-secondary whitespace-pre-wrap break-words leading-relaxed max-h-48 overflow-y-auto",children:t.prompt_template})]})]})}function he({label:t,value:s}){return e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:t}),e.jsx("p",{className:"font-mono text-text-primary",children:s})]})}const Je=["draft","active","archived"],Us={draft:"Draft",active:"Active",archived:"Archived"},Hs={draft:{filled:"bg-status-draft border-status-draft",line:"bg-status-draft/30"},active:{filled:"bg-status-success border-status-success",line:"bg-status-success/30"},archived:{filled:"bg-text-tertiary border-text-tertiary",line:"bg-text-tertiary/30"}};function Gs({status:t,sourceWorkflowId:s,contentVersion:r,deployedContentVersion:n,appId:d,appVersion:o,siblingCount:a,onDeploy:m,onArchive:l,onRestore:x,onDelete:c,onRegenerate:p,isPending:f,error:S}){const i=t==="deployed"?"active":t,b=Je.indexOf(i),y=r!=null&&r>(n??0);return e.jsxs("div",{children:[e.jsx(vt,{className:"mb-4",children:"Lifecycle"}),y&&i!=="draft"&&i!=="archived"&&e.jsxs("div",{className:"mb-4 px-3 py-2 rounded-md bg-status-pending/10 border border-status-pending/30",children:[e.jsx("p",{className:"text-2xs font-semibold text-status-pending mb-1",children:"Graph modified"}),e.jsxs("p",{className:"text-2xs text-text-secondary leading-relaxed",children:["v",r," edited since deploy (v",n,"). Redeploy to apply changes."]}),e.jsx("button",{onClick:m,disabled:f,className:"mt-1.5 text-2xs font-medium text-status-pending hover:underline",children:f?"Deploying...":"Deploy now"})]}),e.jsx("div",{className:"space-y-0",children:Je.map((h,j)=>{const w=h===i,T=j<b,v=j>b,k=j===Je.length-1,N=Hs[h];return e.jsxs("div",{className:"flex items-stretch gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center w-5 shrink-0",children:[e.jsx("span",{className:`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${w||T?N.filled:"bg-surface-sunken border-surface-border"}`}),!k&&e.jsx("span",{className:`w-px flex-1 ${T?N.line:"bg-surface-border"}`})]}),e.jsxs("div",{className:`pb-5 ${k?"pb-0":""}`,children:[e.jsx("p",{className:`text-xs font-medium ${w?"text-text-primary":v?"text-text-tertiary":"text-text-secondary"}`,children:Us[h]}),w&&h==="draft"&&e.jsx("div",{className:"mt-2",children:e.jsx("button",{onClick:m,disabled:f,className:"btn-primary text-2xs px-3 py-1",children:f?"Deploying...":"Deploy & Activate"})}),w&&h==="active"&&e.jsx("div",{className:"mt-2",children:e.jsx("button",{onClick:l,disabled:f,className:"text-2xs text-text-tertiary hover:text-status-error",children:"Archive"})}),w&&h==="archived"&&x&&e.jsx("div",{className:"mt-2",children:e.jsx("button",{onClick:x,disabled:f,className:"text-2xs font-medium text-accent hover:text-accent/80",children:f?"Restoring...":"Restore to Draft"})})]})]},h)})}),d&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-surface-border",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"App Namespace"}),e.jsx("p",{className:"text-xs font-mono text-text-primary",children:d}),e.jsx("div",{className:"flex items-center gap-3 mt-1.5",children:o!=null&&e.jsxs("span",{className:"text-2xs text-text-secondary",children:["app v",o," ","→"," ",e.jsxs("span",{className:"text-accent",children:["v",o+1]})," on deploy"]})}),a!=null&&a>1&&e.jsxs("p",{className:"text-2xs text-text-tertiary mt-1",children:[a," tool",a===1?"":"s"," in this namespace"]})]}),r!=null&&e.jsxs("div",{className:"mt-4 pt-4 border-t border-surface-border",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool Content"}),e.jsxs("p",{className:"text-xs font-mono text-text-primary",children:["v",r,n!=null&&e.jsxs("span",{className:"text-text-tertiary ml-1.5",children:["(deployed: v",n,")"]})]})]}),(t==="draft"||t==="archived")&&e.jsx("div",{className:"mt-4 pt-4 border-t border-surface-border",children:e.jsxs("button",{onClick:c,disabled:f,className:"inline-flex items-center gap-1.5 text-2xs text-status-error/70 hover:text-status-error transition-colors hover:underline",children:[e.jsx(Jt,{className:"w-3.5 h-3.5",strokeWidth:1.5}),"Delete Compiled Workflow"]})}),S&&e.jsx("p",{className:"mt-3 text-2xs text-status-error",children:S})]})}function Xs({versionsData:t,searchParams:s,setSearchParams:r,currentVersion:n,viewingVersion:d}){return e.jsxs("div",{children:[e.jsx(vt,{className:"mb-3",children:"Version History"}),e.jsx("div",{className:"space-y-1",children:t.versions.map(o=>{const a=o.version===n,m=d===o.version;return e.jsxs("button",{type:"button",onClick:()=>{const l=new URLSearchParams(s);a?l.delete("version"):l.set("version",String(o.version)),r(l)},className:`w-full text-left px-2 py-1.5 rounded text-xs transition-colors ${m?"bg-accent/10 text-accent":"text-text-secondary hover:bg-surface-sunken hover:text-text-primary"}`,children:[e.jsxs("span",{className:"font-mono font-medium",children:["v",o.version]}),a&&e.jsx("span",{className:"text-text-tertiary ml-1",children:"(current)"}),o.change_summary&&e.jsx("p",{className:"text-2xs text-text-tertiary truncate mt-0.5",children:o.change_summary})]},o.version)})})]})}function Zs({feedbackText:t,setFeedbackText:s,dismissing:r,onClose:n,onRegenerate:d,isPending:o}){return e.jsxs("div",{className:"mb-4 p-4 bg-surface-sunken border border-surface-border rounded-lg overflow-hidden transition-all duration-250 ease-in-out",style:{animation:r?void 0:"fadeIn 300ms ease-out both",opacity:r?0:1,maxHeight:r?"0px":"400px",paddingTop:r?"0px":void 0,paddingBottom:r?"0px":void 0,marginBottom:r?"0px":void 0},children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"What should change?"}),e.jsx("button",{onClick:n,className:"text-text-tertiary hover:text-text-secondary transition-colors",children:e.jsx(Be,{className:"w-3.5 h-3.5"})})]}),e.jsx("textarea",{value:t,onChange:a=>s(a.target.value),placeholder:"E.g.: 'Only url, username, password, and screenshot_dir should be dynamic inputs. The steps array and script are implementation details.'",className:"w-full min-h-[80px] px-3 py-2 bg-surface border border-surface-border rounded-md text-xs text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}),e.jsxs("div",{className:"flex items-center justify-between mt-2",children:[e.jsx("p",{className:"text-2xs text-text-tertiary",children:"This feedback guides the compiler. The current graph definition will be replaced."}),e.jsx("button",{onClick:d,disabled:!t.trim()||o,className:"btn-primary text-xs shrink-0 ml-4",children:o?"Recompiling...":"Recompile Pipeline"})]})]})}function et({yamlId:t,onAdvance:s,onBack:r,onRegenerate:n,regeneratePending:d}){var Y,te,pe,Te;const o=le(),a=u.useRef(null),[m,l]=u.useState(""),[x,c]=u.useState(!1),[p,f]=u.useState(!1),S=()=>{f(!0),setTimeout(()=>{c(!1),f(!1)},250)},{data:i,refetch:b}=Pe(t),{data:y}=Ue(i?{app_id:i.app_id}:{}),h=((Y=y==null?void 0:y.workflows)==null?void 0:Y.length)??0,j=Math.max(...((te=y==null?void 0:y.workflows)==null?void 0:te.map(re=>parseInt(re.app_version||"0",10)))??[0]),{data:w}=Xt(t),T=Zt(),v=es(),k=ts(),N=ss(),_=as(),L=rs(),C=qe(),[g,$]=u.useState(""),[M,O]=u.useState(""),[I,F]=u.useState(""),[se,Q]=u.useState([]),[ae,D]=u.useState(!1),[B,q]=u.useState(null),W=B!==null&&i!=null&&B!==i.content_version,{data:J}=ns(t,W?B:null),H=W&&J?J.yaml_content:i==null?void 0:i.yaml_content,z=W&&J?J.input_schema:i==null?void 0:i.input_schema,G=W&&J?J.output_schema:i==null?void 0:i.output_schema;u.useEffect(()=>{i&&($(i.yaml_content),O(JSON.stringify(i.input_schema,null,2)),F(JSON.stringify(i.output_schema,null,2)),i.input_field_meta&&Q(i.input_field_meta))},[i==null?void 0:i.id,i==null?void 0:i.content_version]);const ie=u.useMemo(()=>{const re=new URLSearchParams;return B!==null&&re.set("version",String(B)),re},[B]),xe=u.useCallback(re=>{const me=re.get("version");q(me?parseInt(me,10):null)},[]),[ne,X]=u.useState(null),P=W&&J?J.activity_manifest:(i==null?void 0:i.activity_manifest)??[],E=u.useMemo(()=>P.find(re=>re.activity_id===ne)??null,[P,ne]),Z=(i==null?void 0:i.status)!=="archived"&&!W,ce=async()=>{if(!i)return;let re,me;try{re=JSON.parse(M)}catch{}try{me=JSON.parse(I)}catch{}await C.mutateAsync({id:i.id,yaml_content:g,...re?{input_schema:re}:{},...me?{output_schema:me}:{}}),D(!1),b()},A=()=>{i&&($(i.yaml_content),O(JSON.stringify(i.input_schema,null,2)),F(JSON.stringify(i.output_schema,null,2)),D(!1))},R=async()=>{i&&(await T.mutateAsync(i.id),await v.mutateAsync(i.id),o.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),o.invalidateQueries({queryKey:["yamlWorkflow"],refetchType:"all"}),b(),s())},V=async()=>{if(n){n(m.trim()),l(""),c(!1);return}try{await L.mutateAsync({id:t,compilation_feedback:m.trim()||void 0}),l(""),c(!1),b()}catch{}};if(!i)return e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Loading workflow..."});const ee=T.isPending||v.isPending||k.isPending||N.isPending||L.isPending||_.isPending||!!d;return e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-[1fr_240px] gap-6",children:[e.jsxs("div",{className:"min-w-0 overflow-hidden",children:[e.jsxs("div",{className:"flex items-start justify-between mb-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Deploy"}),e.jsx("p",{className:"text-base text-text-secondary",children:"Review and edit the workflow definition. Re/deploy when ready."})]}),e.jsx("div",{className:"flex items-center gap-3 shrink-0",children:ae?e.jsxs(e.Fragment,{children:[e.jsx(ue,{icon:Be,label:"Cancel",onClick:()=>{A(),D(!1)}}),e.jsx(ue,{icon:$e,label:C.isPending?"Saving...":"Save",onClick:ce,disabled:C.isPending||g===i.yaml_content&&M===JSON.stringify(i.input_schema,null,2)&&I===JSON.stringify(i.output_schema,null,2)})]}):e.jsxs(e.Fragment,{children:[e.jsx(ue,{icon:Qt,label:"Recompile with Feedback",onClick:()=>{c(!x)}}),e.jsx(ue,{icon:Re,label:"Manual Edit",onClick:()=>{D(!0),c(!1)}})]})})]}),x&&e.jsx(Zs,{feedbackText:m,setFeedbackText:l,dismissing:p,onClose:S,onRegenerate:V,isPending:L.isPending}),L.isError&&e.jsx("div",{className:"mb-4 px-3 py-2 bg-status-error/5 border border-status-error/20 rounded-md",children:e.jsx("p",{className:"text-xs text-status-error",children:((pe=L.error)==null?void 0:pe.message)||"Recompilation failed"})}),W&&e.jsxs("div",{className:"mb-4 px-3 py-2 bg-accent-muted/20 border border-accent-muted/40 rounded-md flex items-center justify-between",children:[e.jsxs("span",{className:"text-xs text-accent",children:["Viewing version ",B]}),e.jsx("button",{onClick:()=>q(null),className:"text-xs text-accent hover:underline",children:"Back to current"})]}),e.jsx(Ks,{yamlContent:H,activityManifest:P,inputSchema:z,outputSchema:G,wf:i,configEditing:ae,setConfigEditing:D,canEditConfig:Z,yamlDraft:g,setYamlDraft:$,inputSchemaDraft:M,setInputSchemaDraft:O,outputSchemaDraft:I,setOutputSchemaDraft:F,inputFieldMetaDraft:se,setInputFieldMetaDraft:Q,onSave:ce,onCancel:A,updateMutation:C,yamlTextareaRef:a,selectedNodeId:ne,onNodeSelect:X}),e.jsxs(oe,{children:[e.jsx("button",{onClick:r,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),i.status==="active"?e.jsx("button",{onClick:s,disabled:x,className:"btn-primary text-xs",children:"Next: Test"}):e.jsx("button",{onClick:R,disabled:ee||x,className:"btn-primary text-xs",children:ee?"Deploying...":"Deploy & Activate"})]})]}),e.jsx("div",{className:"space-y-6",children:e.jsx("div",{className:"sticky top-6",children:E?e.jsx(Vs,{entry:E,onClose:()=>X(null)}):e.jsxs(e.Fragment,{children:[e.jsx(Gs,{status:i.status,sourceWorkflowId:i.source_workflow_id,contentVersion:i.content_version,deployedContentVersion:i.deployed_content_version,appId:i.app_id,appVersion:j,siblingCount:h,onDeploy:R,onArchive:()=>k.mutateAsync(t).then(()=>b()),onRestore:()=>N.mutateAsync(t).then(()=>b()),onDelete:async()=>{await _.mutateAsync(t),o.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),r()},onRegenerate:V,isPending:ee,error:void 0}),(((Te=w==null?void 0:w.versions)==null?void 0:Te.length)??0)>1&&e.jsx(Xs,{versionsData:w,searchParams:ie,setSearchParams:xe,currentVersion:i.content_version,viewingVersion:W?B:null})]})})})]})}const ft={mcp:{border:"border-accent",text:"text-accent",icon:"MCP"},db:{border:"border-accent",text:"text-accent",icon:"DB"},llm:{border:"border-status-claimed",text:"text-status-claimed",icon:"LLM"},transform:{border:"border-status-success",text:"text-status-success",icon:"Map"}};function ea({steps:t,manifest:s,isComplete:r}){const n=s.filter(a=>a.type==="worker"),d=n.length,o=n.map((a,m)=>{const l=t.find(p=>p.activityId===a.activity_id),x=a.tool_source||"mcp",c=ft[x]||ft.mcp;return{activityId:a.activity_id,title:a.title||a.mcp_tool_name||a.activity_id,toolName:a.mcp_tool_name,toolSource:x,colors:c,stepIndex:m,status:(l==null?void 0:l.status)||"pending",error:l==null?void 0:l.error}});return e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-text-secondary mb-4",children:r?`All ${d} steps completed`:`Running step ${o.filter(a=>a.status==="completed").length+1} of ${d}...`}),e.jsx("div",{className:"space-y-0",children:o.map((a,m)=>{const l=m===o.length-1;return e.jsxs("div",{className:"flex items-stretch gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center w-5 shrink-0",children:[e.jsx("span",{className:`w-3 h-3 rounded-full shrink-0 border-2 transition-colors ${a.status==="completed"?"bg-status-success border-status-success":a.status==="running"?`${a.colors.border} bg-transparent animate-pulse`:a.status==="failed"?"bg-status-error border-status-error":"bg-surface-sunken border-surface-border"}`}),!l&&e.jsx("span",{className:`w-px flex-1 transition-colors ${a.status==="completed"?"bg-status-success/30":"bg-surface-border"}`})]}),e.jsxs("div",{className:`pb-4 ${l?"pb-0":""}`,children:[e.jsx("p",{className:`text-xs font-medium ${a.status==="running"?"text-text-primary":a.status==="completed"?"text-text-secondary":a.status==="failed"?"text-status-error":"text-text-tertiary"}`,children:a.title}),e.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[e.jsx("span",{className:`text-2xs font-mono px-1 py-0.5 rounded border ${a.colors.border} ${a.colors.text} bg-transparent`,children:a.colors.icon}),a.toolName&&e.jsx(ys,{name:a.toolName})]}),a.error&&e.jsx("p",{className:"text-2xs text-status-error mt-1",children:a.error})]})]},a.activityId)})}),r&&e.jsx("p",{className:"text-2xs text-text-tertiary mt-3 text-center",children:"Closing..."})]})}function ta({sidebarOpen:t,activeJobId:s,activitySteps:r,activityManifest:n,jobComplete:d,invokeJsonMode:o,setInvokeJsonMode:a,invokeJson:m,setInvokeJson:l,invokeFields:x,setInvokeFields:c,executeAs:p,setExecuteAs:f,invokeError:S,invokePending:i,onInvoke:b,onClose:y}){return!t&&!s?e.jsx("div",{className:"text-center py-8",children:e.jsx("p",{className:"text-xs text-text-tertiary",children:'Click "Run Test" to invoke the compiled pipeline'})}):e.jsx("div",{style:{animation:"fadeIn 300ms ease-out both"},children:s?e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-3",children:"Execution"}),e.jsx(ea,{steps:r,manifest:n??[],isComplete:d})]}):e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Test Inputs"}),e.jsx("button",{onClick:()=>{if(!o)l(JSON.stringify(x,null,2));else try{c(JSON.parse(m))}catch{}a(!o)},className:"text-2xs text-accent hover:underline",children:o?"Form view":"JSON view"})]}),e.jsx(gs,{selected:p,onChange:f}),e.jsx("div",{className:"mt-3",children:o?e.jsx("textarea",{value:m,onChange:h=>l(h.target.value),className:"w-full min-h-[200px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("div",{className:"space-y-3 max-h-[400px] overflow-y-auto",children:Object.entries(x).map(([h,j])=>e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:h}),typeof j=="boolean"?e.jsxs("select",{value:String(j),onChange:w=>c({...x,[h]:w.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):typeof j=="object"?e.jsx("textarea",{value:JSON.stringify(j,null,2),onChange:w=>{try{c({...x,[h]:JSON.parse(w.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("input",{type:typeof j=="number"?"number":"text",value:String(j??""),onChange:w=>c({...x,[h]:typeof j=="number"?Number(w.target.value):w.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"})]},h))})}),S&&e.jsx("p",{className:"mt-2 text-xs text-status-error",children:S}),e.jsxs("div",{className:"flex justify-end gap-3 mt-4",children:[e.jsx("button",{onClick:y,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:b,disabled:i,className:"btn-primary text-xs",children:i?"Starting...":"Invoke"})]})]})})}function ve({children:t}){return e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-widest text-text-tertiary",children:t}),e.jsx("span",{className:"flex-1 border-b border-surface-border"})]})}function Pt(t){const s=new Date(t.created_at),r=s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),n=s.toLocaleDateString([],{month:"short",day:"numeric"}),d=t.status==="completed"||Number(t.status)===0?"completed":t.is_live?"running":"failed";return`${n} ${r} — ${d}`}function sa({jobs:t,selectedRunId:s,onSelectRun:r,deterministicInput:n,deterministicOutput:d,inputSchema:o,runLoading:a,selectedRunExecution:m}){return e.jsxs(e.Fragment,{children:[t.length>0&&s&&e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Pipeline Run"}),e.jsx("select",{value:s,onChange:l=>r(l.target.value),className:"bg-transparent border-none text-2xs text-accent hover:text-accent/80 cursor-pointer focus:outline-none p-0 text-right",children:t.map(l=>e.jsx("option",{value:l.workflow_id,children:Pt(l)},l.workflow_id))})]}),e.jsx(ve,{children:"Input"}),e.jsx("div",{className:"mb-6",children:n?e.jsx(U,{data:n,defaultMode:"tree"}):s&&o?e.jsx(U,{data:o,defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:'No runs yet — click "Run Test" to invoke the pipeline'})}),e.jsx(ve,{children:"Output"}),e.jsxs("div",{className:"mb-6",children:[d?e.jsx(U,{data:d,defaultMode:"tree"}):s&&a?e.jsx("p",{className:"text-xs text-text-tertiary animate-pulse",children:"Loading..."}):s&&m?e.jsx(U,{data:m.result??m,defaultMode:"tree"}):s?e.jsx("p",{className:"text-xs text-text-tertiary animate-pulse",children:"Loading..."}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No runs yet"}),(m==null?void 0:m.duration_ms)!=null&&e.jsxs("p",{className:"text-2xs text-text-tertiary mt-2",children:[(m.duration_ms/1e3).toFixed(1),"s"]})]})]})}function aa({jobs:t,selectedRunId:s,onSelectRun:r,originalEnvelope:n,resolvedPrompt:d,originalOutput:o,originalDurationMs:a,deterministicInput:m,deterministicOutput:l,inputSchema:x,runLoading:c,selectedRunExecution:p}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-8 mb-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Original MCP Query"}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:"Dynamic LLM orchestration"})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Compiled Pipeline Run"}),t.length>0&&s&&e.jsx("select",{value:s,onChange:f=>r(f.target.value),className:"mt-0.5 bg-transparent border-none text-2xs text-accent hover:text-accent/80 cursor-pointer focus:outline-none p-0 text-right direction-rtl",children:t.map(f=>e.jsx("option",{value:f.workflow_id,children:Pt(f)},f.workflow_id))}),!s&&e.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:"No runs yet"})]})]}),e.jsx(ve,{children:"Input"}),e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-2 gap-8 mb-6",children:[e.jsx("div",{children:n?e.jsx(U,{data:n,defaultMode:"tree"}):d?e.jsx("p",{className:"text-xs text-text-primary leading-relaxed px-3 py-2 bg-surface-sunken rounded-md",children:d}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"Loading..."})}),e.jsx("div",{children:m?e.jsx(U,{data:m,defaultMode:"tree"}):s&&x?e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs text-text-tertiary italic mb-1",children:"Stored defaults"}),e.jsx(U,{data:x,defaultMode:"tree"})]}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No runs yet"})})]}),e.jsx(ve,{children:"Output"}),e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-2 gap-8 mb-6",children:[e.jsxs("div",{children:[o?e.jsx(U,{data:o,defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No output"}),a!=null&&e.jsxs("p",{className:"text-2xs text-text-tertiary mt-2",children:[(a/1e3).toFixed(1),"s"]})]}),e.jsxs("div",{children:[l?e.jsx(U,{data:l,defaultMode:"tree"}):s&&c?e.jsx("p",{className:"text-xs text-text-tertiary animate-pulse",children:"Loading..."}):s&&p?e.jsx(U,{data:p.result??p,defaultMode:"tree"}):s?e.jsx("p",{className:"text-xs text-text-tertiary animate-pulse",children:"Loading..."}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No runs yet"}),(p==null?void 0:p.duration_ms)!=null&&e.jsxs("p",{className:"text-2xs text-text-tertiary mt-2",children:[(p.duration_ms/1e3).toFixed(1),"s"]})]})]})]})}function tt({yamlId:t,originalWorkflowId:s,originalResult:r,originalPrompt:n,onBack:d,onAdvance:o,builderMode:a}){var xe,ne,X;const m=le(),[l,x]=ge(),{data:c}=Pe(t),{data:p}=xs({entity:c==null?void 0:c.graph_topic,app_id:(c==null?void 0:c.app_id)||"",limit:10}),f=l.get("run"),S=P=>{x(E=>{const Z=new URLSearchParams(E);return P?Z.set("run",P):Z.delete("run"),Z},{replace:!0})},[i,b]=u.useState(f),y=P=>{b(P),S(P)},{data:h,isLoading:j}=ms(i??"",(c==null?void 0:c.app_id)||""),[w,T]=u.useState(!1),[v,k]=u.useState(!1),[N,_]=u.useState({}),[L,C]=u.useState("{}"),[g,$]=u.useState(""),[M,O]=u.useState(null),I=is(),{steps:F,isComplete:se}=us(M);u.useEffect(()=>{if(c!=null&&c.input_schema){const P=ps(c.input_schema);_(P),C(JSON.stringify(P,null,2))}},[c==null?void 0:c.id]);const Q=(p==null?void 0:p.jobs)??[];u.useEffect(()=>{!i&&!f&&Q.length>0&&y(Q[0].workflow_id)},[Q.length]),u.useEffect(()=>{f&&!i&&b(f)},[f]),u.useEffect(()=>{if(se&&M){const P=M,E=setTimeout(()=>{y(P),O(null),T(!1),m.invalidateQueries({queryKey:["mcpRuns"],refetchType:"all"}),m.invalidateQueries({queryKey:["mcpRunExecution",P],refetchType:"all"})},1200);return()=>clearTimeout(E)}},[se,M]);const ae=async()=>{if(c)try{const P=v?JSON.parse(L):N,E=await I.mutateAsync({id:c.id,data:P,sync:!1,...g?{execute_as:g}:{}});E.job_id&&(O(E.job_id),y(E.job_id))}catch{}},D=()=>{O(null),T(!0)},{data:B}=Qe(a?"":s??""),{data:q}=Ge(a?"":s??""),W=(xe=B==null?void 0:B.result)==null?void 0:xe.data,J=u.useMemo(()=>{if(a||!(q!=null&&q.envelope))return null;try{return typeof q.envelope=="string"?JSON.parse(q.envelope):q.envelope}catch{return null}},[a,q==null?void 0:q.envelope]),H=((ne=J==null?void 0:J.data)==null?void 0:ne.prompt)??n;if(!c)return e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Loading..."});const z=a?null:(W==null?void 0:W.result)??(typeof(W==null?void 0:W.summary)=="string"?Ce(W.summary):null)??(r==null?void 0:r.result)??(typeof(r==null?void 0:r.summary)=="string"?Ce(r.summary):null)??r;let G=null,ie=null;if(h!=null&&h.result){const P=h.result;if(typeof P.response=="string"){const E=P.response.match(/```json\s*([\s\S]*?)```/);if(E)try{G=JSON.parse(E[1].trim())}catch{G=P}else G=Ce(P.response)??P}else G=P}if((X=h==null?void 0:h.events)!=null&&X.length){const P=h.events.find(E=>{var Z;return E.event_type==="activity_task_completed"&&E.is_system&&((Z=E.attributes)==null?void 0:Z.result)&&Object.keys(E.attributes.result).length>0});ie=P?P.attributes.result:null}return e.jsxs("div",{children:[e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-[1fr_400px] gap-8 min-w-0",children:[e.jsxs("div",{className:"min-w-0 overflow-hidden",children:[e.jsxs("div",{className:"flex items-start justify-between mb-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Test"}),e.jsx("p",{className:"text-base text-text-secondary",children:a?"Run the pipeline with test inputs and review the results.":"Run the pipeline with test inputs and compare results against the original execution."})]}),e.jsx(ue,{icon:Yt,label:"Run Test",onClick:D})]}),a?e.jsx(sa,{jobs:Q,selectedRunId:i,onSelectRun:y,deterministicInput:ie,deterministicOutput:G,inputSchema:c.input_schema,runLoading:j,selectedRunExecution:h}):e.jsx(aa,{jobs:Q,selectedRunId:i,onSelectRun:y,originalEnvelope:J,resolvedPrompt:H,originalOutput:z,originalDurationMs:B==null?void 0:B.duration_ms,deterministicInput:ie,deterministicOutput:G,inputSchema:c.input_schema,runLoading:j,selectedRunExecution:h})]}),e.jsx("div",{className:"space-y-6",children:e.jsx("div",{className:"sticky top-6",children:e.jsx(ta,{sidebarOpen:w,activeJobId:M,activitySteps:F,activityManifest:c.activity_manifest,jobComplete:se,invokeJsonMode:v,setInvokeJsonMode:k,invokeJson:L,setInvokeJson:C,invokeFields:N,setInvokeFields:_,executeAs:g,setExecuteAs:$,invokeError:I.isError?I.error.message:void 0,invokePending:I.isPending,onInvoke:ae,onClose:()=>T(!1)})})})]}),e.jsxs(oe,{children:[e.jsx("button",{onClick:d,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),!a&&e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Verify"})]})]})}function ra(){var se,Q,ae,D,B,q,W,J,H;const t=Ve(),{workflowId:s}=Fe(),[r,n]=ge(),[d,o]=u.useState(null),a=Ns();He(s);const{data:m,refetch:l}=_t(s),x=(se=m==null?void 0:m.result)==null?void 0:se.data,c=!!(x!=null&&x.yaml),p=!!(x!=null&&x.clarification_needed),f=!m||!c&&!p&&!((Q=x==null?void 0:x.title)!=null&&Q.includes("Failed")),S=x==null?void 0:x.name,{data:i}=Ue(S?{search:S,limit:1}:{}),b=(D=(ae=i==null?void 0:i.workflows)==null?void 0:ae[0])==null?void 0:D.id,y=d||b||null,{data:h}=Pe(y||""),j=(h==null?void 0:h.status)||"draft",w=j==="deployed"||j==="active",T=["Describe","Profile","Deploy","Test"];let v=1;c&&(v=2),y&&(v=3),w&&(v=4);const k=r.get("step"),[N,_]=u.useState(null),C=N??(k?Math.min(Number(k),v):c?2:1);u.useEffect(()=>{!k&&m&&n({mode:"builder",step:String(C)},{replace:!0})},[m,C]);const g=z=>{z<=v&&(_(z),n({mode:"builder",step:String(z)}))},{data:$}=We(s),M=(B=$==null?void 0:$.events)==null?void 0:B.find(z=>z.event_type==="workflow_execution_started"),O=Array.isArray((q=M==null?void 0:M.attributes)==null?void 0:q.input)?M.attributes.input[0]:(W=M==null?void 0:M.attributes)==null?void 0:W.input,I=((J=O==null?void 0:O.data)==null?void 0:J.prompt)||((H=O==null?void 0:O.data)==null?void 0:H.question)||void 0,F=async z=>{if(!(x!=null&&x.yaml)||!I)return;const G=await a.mutateAsync({prompt:I,prior_yaml:(h==null?void 0:h.yaml_content)||x.yaml,feedback:z,tags:x.tags});t(`/mcp/queries/${G.workflow_id}?mode=builder`,{replace:!0})};return e.jsxs("div",{className:"flex flex-col min-h-[calc(100vh-12rem)]",children:[e.jsx(Oe,{title:"MCP Tool Designer",actions:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-2xs px-2 py-0.5 rounded-full bg-accent/10 text-accent font-medium",children:"Direct Build"}),e.jsx(be,{status:p?"pending":f?"in_progress":c?"completed":"failed"})]})}),e.jsx(Xe,{labels:T,current:C,maxReachable:v,onStepClick:g}),e.jsxs("div",{className:"flex-1 mt-4",children:[C===1&&e.jsx(Ls,{workflowId:s,status:p?"clarification":f?"in_progress":c?"completed":"failed",builderData:x,onBuilt:()=>{l(),_(2)},onNext:()=>g(2)}),C===2&&c&&e.jsx($s,{builderData:x,resolvedYamlId:y,originalPrompt:I,onBack:()=>g(1),onCreate:z=>{o(z),g(3)},onNext:()=>g(3)}),C===3&&y&&e.jsx(et,{yamlId:y,onAdvance:()=>g(4),onBack:()=>g(2),onRegenerate:F,regeneratePending:a.isPending}),C===4&&y&&e.jsx(tt,{yamlId:y,originalWorkflowId:s,originalResult:void 0,originalPrompt:I,onBack:()=>g(3),onAdvance:()=>{},builderMode:!0})]})]})}function na(t){const s="w-4 h-4 shrink-0";return t?t==="active"?e.jsx(Ut,{className:`${s} text-status-success`,strokeWidth:1.5}):t==="deployed"?e.jsx(Ht,{className:`${s} text-accent`,strokeWidth:1.5}):t==="draft"?e.jsx(Gt,{className:`${s} text-accent/75`,strokeWidth:1.5}):e.jsx(je,{className:`${s} text-accent animate-spin`,strokeWidth:1.5}):e.jsx(je,{className:`${s} text-text-tertiary animate-spin`,strokeWidth:1.5})}function ia({plan:t,namespaces:s,yamlStatuses:r,activeWorkflow:n,isAddOpen:d,onSelect:o,onAdd:a}){const m=u.useMemo(()=>{var c;const x={};for(const p of t)(x[c=p.namespace]||(x[c]=[])).push(p);return x},[t]),l=s.length>1;return e.jsxs("nav",{className:"w-56 shrink-0 overflow-y-auto sticky top-0 self-start",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-2",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Pipeline Tools"}),a&&e.jsx("button",{onClick:a,className:`w-6 h-6 flex items-center justify-center rounded-full border transition-all duration-200 ${d?"bg-accent/20 border-accent/40 text-accent rotate-0":"border-accent/30 text-accent/60 hover:bg-accent/10 hover:border-accent/50 hover:text-accent"}`,title:d?"Cancel":"Add additional tools",children:d?e.jsx(Kt,{className:"w-3 h-3",strokeWidth:2}):e.jsx(Vt,{className:"w-3 h-3",strokeWidth:2})})]}),e.jsx("div",{className:"space-y-0.5",children:s.map(x=>e.jsxs("div",{children:[l&&e.jsx("p",{className:"px-3 pt-3 pb-1 text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:x}),(m[x]||[]).map(c=>{const p=n===c.name;return e.jsxs("button",{onClick:()=>o(c.name),className:`w-full flex items-center gap-3 px-3 py-2 rounded-md transition-colors duration-150 ${p?"bg-surface-hover text-text-primary":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[na(r[c.name]),e.jsxs("div",{className:"min-w-0 text-left",children:[e.jsx("span",{className:"text-sm block truncate",children:c.name}),e.jsx("span",{className:"text-2xs text-text-tertiary block truncate",children:c.description})]})]},c.name)})]},x))})]})}function ca({yamlId:t,planItem:s,lockedAppId:r,isSaved:n,onSaved:d,onNavigateDeploy:o}){const{data:a}=Pe(t),m=qe(),[l,x]=u.useState(r||""),[c,p]=u.useState(""),[f,S]=u.useState(""),[i,b]=u.useState([]),[y,h]=u.useState(null),[j,w]=u.useState(!1);u.useEffect(()=>{if(a&&a.id!==y){x(r||a.app_id||"");const _=de(s.name);p(a.name!==_&&a.name?de(a.name):_),S(a.description||s.description||""),b(a.tags||[]),h(a.id),w(!1)}},[a,s,r,y]),u.useEffect(()=>{r&&x(r)},[r]);const T=async()=>{if(!a)return;const _=Ie(l),L=de(c);let C=a.yaml_content||"";const g=C.match(/^\s*-?\s*subscribes:\s*(.+)$/m),$=g?g[1].trim():a.graph_topic;C=C.replace(/^(\s*id:\s*)(.+)$/m,`$1${_}`),C=C.replace(/^(\s*-?\s*subscribes:\s*)(.+)$/m,`$1${L}`),$&&(C=C.replace(new RegExp(`^(\\s*topic:\\s*)${$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*$`,"gm"),`$1${L}`));const M=Math.random().toString(36).slice(2,6),O=[...C.matchAll(/^ {8}(\w+_[a-z0-9]{4}):\s*$/gm)].map(I=>I[1]);for(const I of O){const F=I.replace(/_[a-z0-9]{4}$/,`_${M}`);I!==F&&(C=C.replace(new RegExp(I.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),F))}await m.mutateAsync({id:t,name:L,description:f,tags:i,app_id:_,graph_topic:L,yaml_content:C}),w(!1),d(_)};if(!a)return e.jsx("div",{className:"text-sm text-text-tertiary py-8 text-center",children:"Loading workflow..."});const v=n&&!j,k=!n||j,N=!!r;return e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Profile"}),e.jsxs("p",{className:"text-base text-text-secondary mb-6",children:["Configure the MCP server and tool identity for ",e.jsx("span",{className:"font-medium text-text-primary",children:s.name}),"."]}),e.jsxs("div",{className:"grid grid-cols-[300px_1fr] gap-4 mb-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"MCP Server Name"}),k&&!N?e.jsx("input",{value:l,onChange:_=>x(Ie(_.target.value)),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"lowercase letters only"}):e.jsx("p",{className:"text-sm font-mono text-text-primary py-1.5",children:a.app_id||l}),N&&k&&e.jsx("p",{className:"text-2xs text-text-tertiary mt-1",children:"Locked to match other workflows in this set."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"MCP Tool Name"}),k?e.jsx("input",{value:c,onChange:_=>p(de(_.target.value)),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"snake_case tool name (e.g. take_screenshot)"}):e.jsx("p",{className:"text-sm font-mono text-text-primary py-1.5",children:a.name||c})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),k?e.jsx(Ee,{tags:i,onChange:b,compact:!0}):e.jsx("div",{className:"flex flex-wrap gap-1.5 py-1",children:(a.tags||i).map(_=>e.jsx("span",{className:"px-2 py-0.5 text-sm bg-surface-raised text-text-primary rounded",children:_},_))})]})]}),e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),v&&e.jsxs("button",{onClick:()=>w(!0),className:"flex items-center gap-1 text-2xs text-accent hover:text-accent/80 transition-colors",children:[e.jsx(Re,{className:"w-3 h-3",strokeWidth:1.5}),"Edit"]})]}),k?e.jsx("textarea",{value:f,onChange:_=>S(_.target.value),className:"w-full flex-1 min-h-[100px] bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs font-mono text-text-primary resize-none focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("p",{className:"text-sm text-text-primary leading-relaxed py-1.5",children:a.description||f}),j&&e.jsxs("div",{className:"flex justify-end gap-2 mt-2",children:[e.jsx("button",{onClick:()=>w(!1),className:"text-2xs text-text-tertiary hover:text-text-primary",children:"Cancel"}),e.jsx("button",{onClick:T,disabled:m.isPending,className:"text-2xs text-accent hover:text-accent/80 font-medium",children:m.isPending?"Saving...":"Save Changes"})]})]})]}),m.isError&&e.jsx("p",{className:"text-xs text-status-error mb-4",children:m.error.message}),e.jsx("div",{className:"flex justify-end",children:v?e.jsx("button",{onClick:o,className:"btn-primary text-xs",children:"Next: Deploy"}):j?null:e.jsx("button",{onClick:T,disabled:m.isPending||!c.trim()||!l.trim(),className:"btn-primary text-xs disabled:opacity-50 disabled:cursor-not-allowed",children:m.isPending?"Saving...":"Save Profile"})})]})}function la(t){switch(t){case"leaf":return"Leaf";case"composition":return"Composition";case"router":return"Router";default:return t}}function oa({specification:t,description:s,plan:r,isPlanning:n,isFailed:d,onContinue:o}){return e.jsxs("div",{className:"space-y-6",children:[t&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Specification"}),e.jsx("div",{className:"rounded-md bg-surface-sunken/50 px-4 py-3",children:e.jsx("p",{className:"text-xs font-mono text-text-primary leading-relaxed whitespace-pre-wrap",children:t})})]}),n&&e.jsxs("div",{className:"flex items-center gap-3 py-4",children:[e.jsx(je,{className:"w-4 h-4 text-accent animate-spin"}),e.jsx("span",{className:"text-sm text-text-secondary",children:"Analyzing specification and generating plan..."})]}),d&&e.jsxs("div",{className:"flex items-center gap-3 p-4 rounded-lg border border-status-error/20 bg-status-error/5",children:[e.jsx(kt,{className:"w-4 h-4 text-status-error"}),e.jsx("span",{className:"text-sm text-status-error",children:"Plan generation failed."})]}),r.length>0&&e.jsxs("div",{children:[s&&e.jsx("p",{className:"text-sm text-text-secondary mb-4 leading-relaxed",children:s}),e.jsxs("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:["Planned Workflows (",r.length,")"]}),e.jsx("div",{className:"space-y-2",children:r.map(a=>e.jsxs("div",{className:"px-3 py-2.5 rounded-md bg-surface-raised/50",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs font-medium text-text-primary",children:a.name}),e.jsx("span",{className:"text-2xs px-1.5 py-0.5 rounded bg-surface-sunken text-text-tertiary",children:la(a.role)})]}),e.jsx("p",{className:"text-2xs text-text-secondary mt-1",children:a.description}),a.dependencies.length>0&&e.jsxs("div",{className:"flex items-center gap-1 mt-1",children:[e.jsx(Ke,{className:"w-2.5 h-2.5 text-text-tertiary"}),e.jsx("span",{className:"text-2xs text-text-tertiary",children:a.dependencies.join(", ")})]})]},a.name))})]}),!n&&!d&&r.length>0&&e.jsx("button",{onClick:o,className:"px-4 py-2 bg-accent text-text-inverse text-xs font-medium rounded-md hover:bg-accent/90 transition-colors",children:"Continue to Profile"})]})}function da({isOpen:t,addSubmitted:s,addSpec:r,setAddSpec:n,planCount:d,isPending:o,isError:a,errorMessage:m,onSubmit:l,onCancel:x,onDismiss:c}){return e.jsx("div",{className:"transition-all duration-300 ease-in-out grid",style:{gridTemplateRows:t?"1fr":"0fr",opacity:t?1:0,marginBottom:t?"24px":"0px"},children:e.jsx("div",{className:"overflow-hidden",children:e.jsx("div",{className:"rounded-lg border border-accent/20 bg-gradient-to-b from-accent/[0.04] to-transparent p-5",children:s?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3 py-6 justify-center",children:[e.jsx(je,{className:"w-5 h-5 text-accent animate-spin",strokeWidth:1.5}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-text-primary",children:"Building new tools..."}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-0.5",children:"Watch the sidebar — new tools will appear as they're built."})]})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-2xs text-text-tertiary",children:[d," tool",d===1?"":"s"," in set"]}),e.jsx("button",{onClick:c,className:"text-2xs text-text-tertiary hover:text-text-primary transition-colors",children:"Dismiss"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm font-medium text-text-primary mb-1",children:"Expand this Toolset"}),e.jsx("p",{className:"text-2xs text-text-tertiary mb-4",children:"Describe additional activities you would like to add."}),e.jsx("textarea",{value:r,onChange:p=>{n(p.target.value);const f=p.target;f.style.height="auto",f.style.height=`${Math.max(100,f.scrollHeight)}px`},placeholder:"What else should this set do?",className:"w-full min-h-[100px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-sm font-mono text-text-primary placeholder:text-text-tertiary/50 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",style:{resize:"none",overflow:"hidden"}}),a&&e.jsx("p",{className:"text-xs text-status-error mt-2",children:m}),e.jsxs("div",{className:"flex items-center justify-between mt-3",children:[e.jsxs("span",{className:"text-2xs text-text-tertiary",children:[d," tool",d===1?"":"s"," in set"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:x,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors",children:"Cancel"}),e.jsx("button",{onClick:l,disabled:!r.trim()||o,className:"btn-primary text-xs disabled:opacity-50 disabled:cursor-not-allowed",children:o?"Submitting...":"Add to Set"})]})]})]})})})})}const xa=["Plan","Profile","Deploy","Test"];function ma(t){return t==="completed"?"completed":t==="failed"?"failed":t==="planning"||t==="building"||t==="deploying"?"in_progress":"pending"}function ua(){var E,Z,ce;const{workflowId:t}=Fe(),[s,r]=ge(),n=le();He(t),os(t);const d=s.get("set_id")||void 0,{data:o}=_t(t),a=(E=o==null?void 0:o.result)==null?void 0:E.data,m=d||(a==null?void 0:a.set_id),{data:l}=ks(m),x=(l==null?void 0:l.plan)||[],c=(l==null?void 0:l.namespaces)||[],p=(l==null?void 0:l.status)||"planning",f=u.useMemo(()=>m?{set_id:m,limit:50}:{},[m]),{data:S}=Ue(f),i=(S==null?void 0:S.workflows)||[],b=u.useRef(p);u.useEffect(()=>{b.current!==p&&(b.current=p,n.invalidateQueries({queryKey:["yamlWorkflows"]}))},[p,n]);const y=u.useMemo(()=>{const A={},R=new Set;for(const V of x){const ee=i.find(Y=>!R.has(Y.id)&&(Y.name===V.name||Y.graph_topic===V.name));ee&&(A[V.name]=ee,R.add(ee.id))}if(Object.keys(A).length<x.length){const V=i.filter(Y=>!R.has(Y.id)).sort((Y,te)=>(Y.created_at||"").localeCompare(te.created_at||"")),ee=new Map;for(const Y of V){const te=Y.set_build_order??0;ee.has(te)||ee.set(te,[]),ee.get(te).push(Y)}for(const Y of x){if(A[Y.name])continue;const te=ee.get(Y.build_order);if(te!=null&&te.length){const pe=te.shift();A[Y.name]=pe,R.add(pe.id)}}}return A},[x,i]),h=u.useMemo(()=>{const A={};for(const[R,V]of Object.entries(y))A[R]=V.status;return A},[y]),j=u.useMemo(()=>{const A=i.find(R=>R.app_id);return(A==null?void 0:A.app_id)||null},[i]),w=u.useMemo(()=>{const A=new Set;if(!j)return A;for(const[R,V]of Object.entries(y))V.app_id===j&&A.add(R);return A},[y,j]),T=w.size>0,v=s.get("workflow")||null,k=v&&((Z=y[v])==null?void 0:Z.id)||null,N=x.find(A=>A.name===v)||null,_=p==="planning",L=p==="failed",C=i.some(A=>A.status==="active");let g=1;x.length>0&&(g=2),T&&(g=3),C&&(g=4);const $=Number(s.get("step"))||0,M=$>=1&&$<=4?Math.min($,g):1,O=i.length,I=x.length,F=i.filter(A=>A.status==="active").length,[se,Q]=u.useState(!1),[ae,D]=u.useState(""),B=Cs(),[q,W]=u.useState(!1),J=u.useRef(p);u.useEffect(()=>{q&&J.current!=="completed"&&p==="completed"&&(W(!1),Q(!1),D("")),J.current=p},[p,q]);const H=A=>{const R={mode:"plan"};m&&(R.set_id=m),R.step=A.step??String(M),A.workflow!==void 0?A.workflow&&(R.workflow=A.workflow):v&&(R.workflow=v),r(R)},z=A=>{var V;if(A>g)return;const R=(V=x[0])==null?void 0:V.name;A>=2&&!v&&R?H({step:String(A),workflow:R}):H({step:String(A)})},G=A=>{H({workflow:A})},ie=()=>{n.invalidateQueries({queryKey:["yamlWorkflows"]}),n.invalidateQueries({queryKey:["yamlWorkflow"]})},xe=()=>{H({step:"3"})},ne=async()=>{!m||!ae.trim()||(await B.mutateAsync({id:m,specification:ae.trim()}),W(!0))},X=()=>{Q(!1),D("")},P=()=>{W(!1),Q(!1),D("")};return e.jsxs("div",{className:"flex flex-col min-h-[calc(100vh-12rem)]",children:[e.jsx(Oe,{title:"MCP Tool Designer",actions:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-2xs px-2 py-0.5 rounded-full bg-accent/10 text-accent font-medium",children:"Plan"}),I>0&&e.jsxs("span",{className:"text-2xs text-text-tertiary",children:[O,"/",I," built",F>0&&` | ${F} deployed`]}),e.jsx(be,{status:ma(p)})]})}),e.jsx(Xe,{labels:xa,current:M,maxReachable:g,onStepClick:z}),e.jsxs("div",{className:"flex-1 mt-4",children:[M===1&&e.jsx(oa,{specification:l==null?void 0:l.specification,description:l==null?void 0:l.description,plan:x,isPlanning:_,isFailed:L,onContinue:()=>z(2)}),M>=2&&e.jsxs("div",{className:"flex gap-6 max-h-[calc(100vh-220px)]",children:[e.jsx(ia,{plan:x,namespaces:c,yamlStatuses:h,activeWorkflow:v,isAddOpen:se,onSelect:G,onAdd:()=>Q(!se)}),e.jsxs("div",{className:"flex-1 min-w-0 overflow-y-auto",children:[e.jsx(da,{isOpen:se,addSubmitted:q,addSpec:ae,setAddSpec:D,planCount:x.length,isPending:B.isPending,isError:B.isError,errorMessage:(ce=B.error)==null?void 0:ce.message,onSubmit:ne,onCancel:X,onDismiss:P}),v?k?M===2&&N?e.jsx(ca,{yamlId:k,planItem:N,lockedAppId:j,isSaved:w.has(v),onSaved:ie,onNavigateDeploy:xe}):M===3?e.jsx(et,{yamlId:k,onAdvance:()=>z(4),onBack:()=>z(2)},k):M===4?e.jsx(tt,{yamlId:k,originalWorkflowId:t,originalResult:void 0,originalPrompt:void 0,onBack:()=>z(3),onAdvance:()=>{},builderMode:!0},`test-${k}`):null:e.jsxs("div",{className:"flex items-center gap-3 py-12 justify-center",children:[e.jsx(je,{className:"w-4 h-4 text-accent animate-spin"}),e.jsxs("span",{className:"text-sm text-text-secondary",children:["Building ",v,"..."]})]}):e.jsx("p",{className:"text-sm text-text-tertiary py-12 text-center",children:"Select a pipeline tool from the sidebar."})]})]})]})]})}function pa(){const[t,s]=ge(),r=u.useRef(void 0);if(r.current===void 0){const l=t.get("step");r.current=l?parseInt(l,10):null}const n=u.useRef(r.current!==null),d=t.get("step"),o=n.current&&d?parseInt(d,10):null,a=u.useCallback(l=>{var x;n.current=l!==null,s(c=>{const p=new URLSearchParams(c);return l===null?p.delete("step"):p.set("step",String(l)),p},{replace:!1}),(x=window.scrollTo)==null||x.call(window,{top:0,behavior:"smooth"})},[s]),m=u.useCallback(l=>{s(x=>{const c=new URLSearchParams(x);return c.set("step",String(l)),c},{replace:!0})},[s]);return[o,a,m]}function ha(){var st,at,rt,nt,it,ct,lt,ot,dt;const{workflowId:t}=Fe(),[s,r]=ge(),n=le(),d=u.useRef(s.get("prompt"));u.useEffect(()=>{s.has("prompt")&&r(K=>{const ke=new URLSearchParams(K);return ke.delete("prompt"),ke},{replace:!0})},[]);const[o,a]=u.useState(""),[m,l]=u.useState(""),[x,c]=u.useState(""),[p,f]=u.useState([]),[S,i]=u.useState(!1),[b,y]=u.useState(""),{data:h}=We(t),{data:j}=jt(t),{data:w}=At(t);He(t);const T=cs(),{data:v}=ls(),{data:k}=Qe(t??""),{data:N}=Ge(t??""),_=u.useMemo(()=>{if(!(N!=null&&N.envelope))return null;try{return typeof N.envelope=="string"?JSON.parse(N.envelope):N.envelope}catch{return null}},[N==null?void 0:N.envelope]),L=(st=k==null?void 0:k.result)==null?void 0:st.data,C=hs(h),g=(at=j==null?void 0:j.result)==null?void 0:at.data,$=(g==null?void 0:g.discovery)||{},M=(h==null?void 0:h.events)??[],{data:O}=It(t),I=(rt=O==null?void 0:O.escalations)==null?void 0:rt.find(K=>K.status==="pending"),F=(nt=O==null?void 0:O.escalations)==null?void 0:nt.find(K=>K.status==="resolved"),se=I||F,Q=Ot(),ae=Wt(),D=u.useMemo(()=>{if(!(F!=null&&F.resolver_payload))return null;try{return typeof F.resolver_payload=="string"?JSON.parse(F.resolver_payload):F.resolver_payload}catch{return null}},[F==null?void 0:F.resolver_payload]),B=(it=D==null?void 0:D._lt)==null?void 0:it.triageWorkflowId,{data:q}=Qe((ct=D==null?void 0:D._lt)!=null&&ct.triaged?B??"":""),W=(lt=q==null?void 0:q.result)==null?void 0:lt.data,J=W==null?void 0:W.rerunWorkflowId,H=(ot=j==null?void 0:j.result)==null?void 0:ot.milestones,z=!!(g!=null&&g.rounds_exhausted)||!!(H!=null&&H.some(K=>K.name==="rounds_exhausted")),G=z||!!I,ie=u.useMemo(()=>{var ke;const K=(ke=_==null?void 0:_.data)==null?void 0:ke.prompt;if(K)return K;if(d.current)return d.current;for(const Mt of M){const Ae=Mt.attributes;if(Ae.activity_type==="findCompiledWorkflows"&&Array.isArray(Ae.input)&&typeof Ae.input[0]=="string")return Ae.input[0]}},[_,M]),xe=u.useMemo(()=>(L==null?void 0:L.result)??(typeof(L==null?void 0:L.summary)=="string"?Ce(L.summary):null)??(g==null?void 0:g.result)??(typeof(g==null?void 0:g.summary)=="string"?Ce(g.summary):null)??null,[L,g]),ne=ie||(g==null?void 0:g.title),{data:X}=Lt({prompt:C==="completed"?ne:void 0,resultTitle:g==null?void 0:g.title,resultSummary:g==null?void 0:g.summary}),P=(dt=w==null?void 0:w.workflows)==null?void 0:dt.find(K=>K.status==="active"||K.status==="deployed"||K.status==="draft"),E=u.useMemo(()=>C==="pending"?1:C==="in_progress"?2:g?P?P.status==="draft"||P.status==="deployed"?4:5:2:1,[C,g,P]),[Z,ce,A]=pa(),R=Z??E;u.useEffect(()=>{A(R)},[R,A]);const V=C==="pending"?1:C==="in_progress"||!g||G?2:P?P.status==="draft"?4:P.status==="deployed"?5:6:3,ee=u.useRef(C);u.useEffect(()=>{ee.current==="in_progress"&&C==="completed"&&Z===null&&ce(3),ee.current=C},[C,Z,ce]);const Y=u.useMemo(()=>{const K=[...fs];return(P==null?void 0:P.status)==="active"&&(K[3]="Redeploy"),K},[P==null?void 0:P.status]);X&&!S&&(i(!0),x||c(X.description),p.length===0&&X.tags.length>0&&f(X.tags),!m&&X.tool_name&&l(de(X.tool_name)));const te=de(m),pe=u.useMemo(()=>(v==null?void 0:v.app_ids)??[],[v==null?void 0:v.app_ids]),Te=async()=>{!t||!m.trim()||!o.trim()||(await T.mutateAsync({workflow_id:t,task_queue:"long-tail-system",workflow_name:"mcpQuery",name:m.trim(),description:x.trim()||void 0,app_id:o.trim(),subscribes:te,tags:p,compilation_feedback:b.trim()||void 0}),n.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),ce(4))},re=async()=>{if(!I)return;await Q.mutateAsync({id:I.id,durationMinutes:30});const K=(g==null?void 0:g.diagnosis)||I.description||"";await ae.mutateAsync({id:I.id,resolverPayload:{_lt:{needsTriage:!0},notes:K}})},me=(P==null?void 0:P.status)==="active"?5:4;return{workflowId:t,execution:h,status:C,result:g,discovery:$,events:M,originalEnvelope:_,originalPrompt:ie,originalOutput:xe,originalExecution:k,compiledYaml:P,step:R,maxReachable:V,stepLabels:Y,setManualStep:ce,compileAppId:o,setCompileAppId:a,compileName:m,setCompileName:l,compileDescription:x,setCompileDescription:c,compileTags:p,setCompileTags:f,compileFeedback:b,setCompileFeedback:y,describeData:X,describePrompt:ne,allAppIds:pe,handleCompile:Te,createYaml:T,isUncompilable:G,isRoundsExhausted:z,displayEscalation:se,activeEscalation:I,handleRetryTriage:re,claimMutation:Q,resolveMutation:ae,rerunWorkflowId:J,profileNextStep:me}}function fa({workflowId:t,status:s,discovery:r,execution:n,result:d}){return e.jsx("div",{className:"bg-surface-raised border border-surface-border rounded-md px-6 py-4 mb-6",children:e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-3 gap-x-8",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Run ID"}),e.jsx(bs,{label:"",value:t??null,href:`/workflows/executions/${t}`})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Duration"}),e.jsx("p",{className:"text-xs text-text-primary font-mono",children:(n==null?void 0:n.duration_ms)!=null?`${(n.duration_ms/1e3).toFixed(1)}s`:"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Started"}),e.jsx("p",{className:"text-xs text-text-primary",children:n!=null&&n.start_time?e.jsx(js,{date:n.start_time}):"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Tool Calls"}),e.jsx("p",{className:"text-xs text-text-primary",children:typeof(d==null?void 0:d.tool_calls_made)=="number"?d.tool_calls_made:"—"})]})]})})}function Me({title:t,subtitle:s,actions:r}){return e.jsxs("div",{className:"flex items-start justify-between mb-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:t}),s&&e.jsx("p",{className:"text-base text-text-secondary",children:s})]}),r&&e.jsx("div",{className:"flex items-center gap-3 shrink-0",children:r})]})}function ga({status:t,originalEnvelope:s,originalPrompt:r,originalOutput:n,originalDurationMs:d,resultSummary:o,onNext:a}){return e.jsxs("div",{children:[e.jsx(Me,{title:"Describe",subtitle:"Dynamic LLM-orchestrated execution — the discovery run",icon:Ne,iconClass:"text-accent"}),e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Input"}),s?e.jsx(U,{data:s,defaultMode:"tree"}):r?e.jsx(U,{data:{prompt:r},defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"Loading..."})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Output"}),t!=="completed"&&t!=="failed"?e.jsx("p",{className:"text-sm text-text-secondary animate-pulse",children:"Pending..."}):n?e.jsx(U,{data:n,defaultMode:"tree"}):o?e.jsx(U,{data:{summary:o},defaultMode:"tree"}):e.jsx("p",{className:"text-xs text-text-tertiary italic",children:"No structured output"}),d!=null&&e.jsxs("p",{className:"text-2xs text-text-tertiary mt-2",children:[(d/1e3).toFixed(1),"s"]})]})]}),e.jsxs(oe,{children:[e.jsx("span",{}),e.jsx("button",{onClick:a,disabled:!a,className:"btn-primary text-xs",children:"Next: Timeline"})]})]})}function ya({events:t,onBack:s,onNext:r}){return e.jsxs("div",{children:[e.jsx(Me,{title:"Discover",subtitle:"Activity swimlane showing tool calls and their durations",icon:wt,iconClass:"text-status-warning"}),e.jsx(vs,{events:t}),e.jsxs(oe,{children:[e.jsx("button",{onClick:s,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("button",{onClick:r,disabled:!r,className:"btn-primary text-xs",children:"Next: Compile"})]})]})}function ba({compiledYaml:t,onBack:s,onNext:r}){var S;const n=le(),d=qe(),[o,a]=u.useState(!1),[m,l]=u.useState(t.description||""),[x,c]=u.useState(t.tags||[]),p=async()=>{await d.mutateAsync({id:t.id,description:m.trim(),tags:x}),n.invalidateQueries({queryKey:["yamlWorkflowForSource"],refetchType:"all"}),a(!1)},f=()=>{l(t.description||""),c(t.tags||[]),a(!1)};return e.jsxs("div",{children:[e.jsx(Me,{title:"Compile",subtitle:"Compiled deterministic pipeline — name, tags, and deployment target",icon:we,iconClass:"text-status-success",actions:o?e.jsxs(e.Fragment,{children:[e.jsx(ue,{icon:Be,label:"Cancel",onClick:f}),e.jsx(ue,{icon:$e,label:d.isPending?"Saving...":"Save",onClick:p,disabled:d.isPending})]}):e.jsx(ue,{icon:Re,label:"Edit Profile",onClick:()=>a(!0)})}),e.jsxs("div",{className:"flex gap-6 mb-6",children:[e.jsxs("div",{className:"w-[30%] shrink-0 space-y-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Namespace"}),e.jsx("p",{className:"text-sm text-text-primary",children:t.app_id||"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Tool Name"}),e.jsx("p",{className:"text-sm text-text-primary",children:t.name})]})]}),e.jsxs("div",{className:"flex-1 min-w-0 space-y-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Description"}),o?e.jsx("textarea",{value:m,onChange:i=>l(i.target.value),className:"w-full min-h-[80px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-sm text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}):e.jsx("p",{className:"text-sm text-text-secondary leading-relaxed",children:t.description||"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),o?e.jsx(Ee,{tags:x,onChange:c,placeholder:"Add tags..."}):e.jsx("div",{className:"flex gap-1.5 flex-wrap",children:(t.tags||[]).length>0?t.tags.map(i=>e.jsx("span",{className:"text-2xs px-2 py-0.5 rounded-full bg-surface-sunken text-text-secondary",children:i},i)):e.jsx("span",{className:"text-2xs text-text-tertiary",children:"No tags"})})]}),((S=t.activity_manifest)==null?void 0:S.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Pipeline"}),e.jsx("div",{className:"flex items-center gap-1 flex-wrap",children:t.activity_manifest.filter(i=>i.tool_source!=="trigger").map((i,b,y)=>e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-2xs px-2 py-0.5 rounded bg-surface-sunken font-mono text-text-primary",children:i.mcp_tool_name||i.title}),b<y.length-1&&e.jsx("span",{className:"text-text-tertiary text-2xs",children:"→"})]},b))})]})]})]}),e.jsxs(oe,{children:[e.jsx("button",{onClick:s,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),t.status!=="active"?e.jsx("button",{onClick:r,className:"btn-primary text-xs",children:"Next: Deploy"}):e.jsx("button",{onClick:r,className:"btn-primary text-xs",children:"Next: Test"})]})]})}function ja({originalPrompt:t,compileAppId:s,setCompileAppId:r,compileName:n,setCompileName:d,compileDescription:o,setCompileDescription:a,compileTags:m,setCompileTags:l,describeData:x,describePrompt:c,allAppIds:p,onCompile:f,isCompiling:S,compileError:i,onBack:b}){const[y,h]=u.useState(null),[j,w]=u.useState(!1),T=u.useRef(null),v=i&&i!==y?i:null;u.useEffect(()=>{v&&T.current&&T.current.scrollIntoView({behavior:"smooth",block:"nearest"})},[v]),u.useEffect(()=>{i&&i!==y&&(h(null),w(!1))},[i]);const k=()=>{w(!0),setTimeout(()=>{h(i),w(!1)},250)};return e.jsxs("div",{children:[e.jsx(Me,{title:"Compile",subtitle:"Define the deterministic workflow tool from this execution",icon:we,iconClass:"text-status-success"}),v&&e.jsxs("div",{ref:T,className:"mb-6 rounded-lg border border-status-error/30 bg-status-error/[0.04] px-4 py-3 flex items-start gap-3 overflow-hidden transition-all duration-250 ease-in-out",style:{animation:j?void 0:"fadeIn 300ms ease-out both",opacity:j?0:1,maxHeight:j?"0px":"200px",paddingTop:j?"0px":void 0,paddingBottom:j?"0px":void 0,marginBottom:j?"0px":void 0},children:[e.jsx(kt,{className:"w-4 h-4 text-status-error shrink-0 mt-0.5",strokeWidth:1.5}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-error",children:"Compilation failed"}),e.jsx("p",{className:"text-xs text-text-secondary mt-0.5 leading-relaxed",children:v})]}),e.jsx("button",{onClick:k,className:"text-text-tertiary hover:text-text-secondary transition-colors shrink-0 mt-0.5",children:e.jsx(Be,{className:"w-3.5 h-3.5"})})]}),t&&e.jsxs("div",{className:"mb-6",children:[e.jsx(ve,{children:"Original Query"}),e.jsx("p",{className:"text-xs font-mono text-text-primary leading-relaxed bg-surface-sunken rounded-md px-3 py-2",children:t})]}),e.jsx(ve,{children:"Workflow Configuration"}),e.jsxs("div",{className:"flex gap-6",children:[e.jsxs("div",{className:"w-[30%] shrink-0 space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Namespace *"}),e.jsx("input",{type:"text",value:s,onChange:N=>r(Ie(N.target.value)),className:"input",placeholder:"e.g. longtail"}),p.length>0&&e.jsx("div",{className:"flex gap-1.5 mt-1.5 flex-wrap",children:p.map(N=>e.jsx("button",{type:"button",onClick:()=>r(N),className:`text-2xs px-2 py-0.5 rounded-full transition-colors ${s===N?"bg-accent/20 text-accent":"bg-surface-sunken text-text-tertiary hover:text-text-secondary"}`,children:N},N))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool Name *"}),e.jsx("input",{type:"text",value:n,onChange:N=>d(de(N.target.value)),className:"input",placeholder:"e.g. auth_screenshot_all_nav_pages"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsx(Ee,{tags:m,onChange:l,placeholder:"e.g. browser, screenshots, login"}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-1",children:"Press Enter or comma to add."})]})]}),e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("label",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Description"}),!o&&!x&&c&&e.jsx("span",{className:"text-2xs text-accent animate-pulse",children:"Generating..."})]}),e.jsx("textarea",{value:o,onChange:N=>a(N.target.value),placeholder:"Describe what this workflow does as a reusable tool...",className:"flex-1 min-h-[120px] w-full px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-sm text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"}),e.jsx("p",{className:"text-2xs text-text-tertiary mt-1",children:x?"AI-generated. Edit to refine.":"Describe what this workflow does so future queries can find it."})]})]}),e.jsxs(oe,{children:[e.jsx("button",{onClick:b,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("button",{onClick:f,disabled:!n.trim()||!s.trim()||S,className:"btn-primary text-xs",children:S?"Compiling...":"Compile Pipeline"})]})]})}function va(t){const{compiledYaml:s,isUncompilable:r,onBack:n,onNext:d}=t;return r&&!s?e.jsxs("div",{children:[e.jsx(Me,{title:"Compile",subtitle:"Define the deterministic workflow tool from this execution",icon:we,iconClass:"text-status-success"}),e.jsxs("div",{className:"rounded-md bg-status-warning/5 border border-status-warning/20 px-4 py-3 mb-6",children:[e.jsx("p",{className:"text-xs text-status-warning font-medium",children:"Cannot compile this query"}),e.jsx("p",{className:"text-xs text-text-secondary mt-1",children:"This query did not complete successfully. Resolve the escalation before compiling to a deterministic workflow."})]}),e.jsxs(oe,{children:[e.jsx("button",{onClick:n,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("span",{})]})]}):s?e.jsx(ba,{compiledYaml:s,onBack:n,onNext:d}):e.jsx(ja,{originalPrompt:t.originalPrompt,compileAppId:t.compileAppId,setCompileAppId:t.setCompileAppId,compileName:t.compileName,setCompileName:t.setCompileName,compileDescription:t.compileDescription,setCompileDescription:t.setCompileDescription,compileTags:t.compileTags,setCompileTags:t.setCompileTags,describeData:t.describeData,describePrompt:t.describePrompt,allAppIds:t.allAppIds,onCompile:t.onCompile,isCompiling:t.isCompiling,compileError:t.compileError,onBack:n})}const gt=["Discover","Evaluate","Execute"];function Na(t){if(!(t!=null&&t.length))return{step:0,label:"Starting...",detail:"Initializing query router",path:null};const s=t.find(n=>n.event_type==="child_workflow_execution_started");if(s){const n=s.attributes.child_workflow_id??"",d=n.includes("mcpDeterministic");return t.some(a=>a.event_type==="child_workflow_execution_completed")?{step:3,label:d?"Deterministic complete":"Dynamic complete",detail:d?"Compiled workflow executed successfully":"Dynamic MCP orchestration completed",path:d?"deterministic":"dynamic",childWorkflowId:n}:{step:3,label:d?"Running deterministic workflow":"Running dynamic MCP query",detail:d?"Executing compiled workflow":"LLM agentic orchestration in progress (30–60s)",path:d?"deterministic":"dynamic",childWorkflowId:n}}const r=t.filter(n=>n.category==="activity").map(n=>n.attributes.activity_type??"");return r.some(n=>n==="extractWorkflowInputs")?{step:2,label:"Extracting inputs...",detail:"Preparing structured inputs for compiled workflow",path:null}:r.some(n=>n==="evaluateWorkflowMatch")?{step:2,label:"Evaluating match...",detail:"LLM judge determining best compiled workflow",path:null}:r.some(n=>n==="findCompiledWorkflows")?{step:1,label:"Searching compiled workflows...",detail:"Full-text + tag discovery of candidates",path:null}:{step:0,label:"Starting...",detail:"Initializing query router",path:null}}function wa({events:t,status:s,verifyRunId:r}){const n=Na(t),d=s==="completed"||s==="failed";return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex items-center gap-1",children:gt.map((o,a)=>{const m=a+1,l=n.step>m||d,x=n.step===m&&!d;return e.jsxs("div",{className:"flex items-center gap-1 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[e.jsx("div",{className:`w-5 h-5 rounded-full flex items-center justify-center text-2xs font-medium shrink-0 transition-colors ${l?"bg-status-success/20 text-status-success":x?"bg-accent/20 text-accent animate-pulse":"bg-surface-sunken text-text-tertiary"}`,children:l?e.jsx("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:3,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}):m}),e.jsx("span",{className:`text-2xs font-medium whitespace-nowrap ${l?"text-text-secondary":x?"text-text-primary":"text-text-tertiary"}`,children:o})]}),a<gt.length-1&&e.jsx("div",{className:`h-px flex-1 min-w-4 ${l?"bg-status-success/30":"bg-surface-border"}`})]},o)})}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("p",{className:"text-xs text-text-secondary",children:n.detail}),n.path==="deterministic"&&e.jsx("span",{className:"text-2xs bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:"Deterministic"}),n.path==="dynamic"&&e.jsx("span",{className:"text-2xs bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full",children:"Dynamic"})]}),r&&n.step>=1&&e.jsx(Se,{to:`/workflows/executions/${r}`,className:"text-2xs text-accent hover:underline",children:"View execution tree"})]})}function ka({originalWorkflowId:t,originalPrompt:s,workflowName:r,onBack:n,onGoToDeploy:d}){var L,C;const o=bt(),[a,m]=ge(),[l,x]=u.useState(""),[c,p]=u.useState(!1),f=a.get("verifyRun"),S=g=>{m($=>{const M=new URLSearchParams($);return g?M.set("verifyRun",g):M.delete("verifyRun"),M},{replace:!0})},{data:i}=Ge(t??""),b=u.useMemo(()=>{if(!(i!=null&&i.envelope))return null;try{return typeof i.envelope=="string"?JSON.parse(i.envelope):i.envelope}catch{return null}},[i==null?void 0:i.envelope]),y=((L=b==null?void 0:b.data)==null?void 0:L.prompt)??s;y&&!c&&(p(!0),x(y));const{data:h}=We(f??void 0),{data:j}=jt((h==null?void 0:h.status)==="completed"?f??void 0:void 0),w=h==null?void 0:h.status,T=((C=j==null?void 0:j.result)==null?void 0:C.data)??{},v=T.discovery,k=(v==null?void 0:v.method)==="compiled-workflow",N=f&&w!=="completed"&&w!=="failed",_=async()=>{if(!l.trim())return;const g=await o.mutateAsync({prompt:l.trim()});S(g.workflow_id)};return e.jsxs("div",{children:[e.jsx("h2",{className:"heading-2 mb-1",children:"Verify"}),e.jsxs("p",{className:"text-base text-text-secondary mb-6",children:["Submit the original prompt through the router to verify that",e.jsx("span",{className:"font-mono text-text-primary mx-1",children:r}),"is selected and handles it deterministically."]}),e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-2 gap-8 mb-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Query Prompt"}),e.jsx("p",{className:"text-2xs text-text-tertiary",children:l!==y&&y?e.jsx("button",{onClick:()=>x(y),className:"text-accent hover:underline",children:"Reset to original"}):"Edit and submit to verify"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Result"}),!f&&e.jsx("p",{className:"text-2xs text-text-tertiary italic",children:"Awaiting submission"}),N&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(be,{status:"in_progress"}),e.jsx("span",{className:"text-2xs text-text-secondary animate-pulse",children:"Routing..."})]}),w==="failed"&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(be,{status:"failed"}),e.jsx("span",{className:"text-2xs text-status-error",children:"Failed"})]}),w==="completed"&&e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(be,{status:"completed"}),k?e.jsxs("span",{className:"text-2xs bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:["Deterministic (",((v==null?void 0:v.confidence)*100).toFixed(0),"%)"]}):e.jsx("span",{className:"text-2xs bg-status-pending/10 text-status-pending px-2 py-0.5 rounded-full",children:"Dynamic (no match)"}),(h==null?void 0:h.duration_ms)!=null&&e.jsxs("span",{className:"text-2xs text-text-tertiary",children:[(h.duration_ms/1e3).toFixed(1),"s"]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 @split:grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("textarea",{value:l,onChange:g=>x(g.target.value),className:"w-full min-h-[160px] px-3 py-2 bg-surface-sunken border border-surface-border rounded-md text-sm text-text-primary placeholder:text-text-tertiary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",placeholder:"Type a natural language query..."}),e.jsx("div",{className:"flex justify-end mt-2",children:e.jsxs("button",{onClick:_,disabled:!l.trim()||o.isPending||!!N,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent/10 text-accent rounded-md hover:bg-accent/20 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M3 1.5v9l7.5-4.5z"})}),o.isPending?"Starting...":N?"Running...":f?"Resubmit":"Submit"]})})]}),e.jsxs("div",{children:[!f&&e.jsx("div",{className:"flex items-center justify-center min-h-[160px] text-xs text-text-tertiary italic",children:"Submit a query to see the result"}),N&&e.jsx("div",{className:"min-h-[160px] flex items-start pt-4",children:e.jsx(wa,{events:h==null?void 0:h.events,status:w,verifyRunId:f})}),w==="completed"&&e.jsxs("div",{className:"space-y-3",children:[typeof T.title=="string"&&e.jsx("p",{className:"text-sm text-text-primary",children:T.title}),T.result!=null&&e.jsx(U,{data:T.result,defaultMode:"tree"}),e.jsxs("div",{className:"flex items-center gap-3 pt-1",children:[e.jsx(Se,{to:`/mcp/queries/${f}`,className:"text-2xs text-accent hover:underline",children:"View full details"}),e.jsx("button",{onClick:()=>S(null),className:"text-2xs text-text-tertiary hover:text-text-primary",children:"Clear"})]})]}),w==="failed"&&e.jsx("p",{className:"text-xs text-status-error py-4",children:"Query failed. Try modifying the prompt."})]})]}),e.jsxs(oe,{children:[e.jsx("button",{onClick:n,className:"px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary",children:"Back"}),e.jsx("span",{className:"text-2xs text-text-tertiary",children:"End-to-end verification — modify the prompt and submit to test the full pipeline"})]})]})}function Sa({escalation:t,isRoundsExhausted:s,diagnosis:r,onRetryTriage:n,isRetrying:d,rerunWorkflowId:o}){var S;const a=Ve();if(!t&&!s)return null;const m=(t==null?void 0:t.status)==="pending",l=(t==null?void 0:t.status)==="resolved",x=(()=>{if(!(t!=null&&t.resolver_payload))return null;try{return typeof t.resolver_payload=="string"?JSON.parse(t.resolver_payload):t.resolver_payload}catch{return null}})(),c=((S=x==null?void 0:x._lt)==null?void 0:S.triaged)===!0,p=(()=>{if(!(t!=null&&t.escalation_payload))return null;try{return typeof t.escalation_payload=="string"?JSON.parse(t.escalation_payload):t.escalation_payload}catch{return null}})(),f=p==null?void 0:p.diagnosis;return l&&c?e.jsxs("div",{className:"rounded-md mb-4 border border-status-success/30 bg-surface-raised overflow-hidden",children:[e.jsx("div",{className:"px-4 pt-3 pb-2",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-success",children:o?"This query succeeded after AI triage":"AI triage resolved this query"}),e.jsx("p",{className:"text-xs text-text-secondary mt-1.5 leading-relaxed",children:o?"The original run hit a wall, but AI triage diagnosed the issue and re-ran the query successfully. The successful run is ready to compile into a deterministic workflow.":"The original run hit a wall. AI triage diagnosed the issue and resolved it."})]})]})}),f&&e.jsxs("div",{className:"px-4 py-2 mx-4 mb-2 rounded bg-surface-sunken",children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"What went wrong"}),e.jsx("p",{className:"text-xs text-text-secondary leading-relaxed line-clamp-2",children:f})]}),e.jsx("div",{className:"px-4 py-3 border-t border-surface-border bg-surface-sunken/50",children:e.jsxs("div",{className:"flex items-center gap-3",children:[o&&e.jsxs("button",{onClick:()=>a(`/mcp/queries/${o}`),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 transition-colors",children:["Continue to successful run",e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M4.5 2l4 4-4 4"})})]}),e.jsx("button",{onClick:()=>a("/mcp/queries"),className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-secondary border border-surface-border rounded-md hover:bg-surface-sunken transition-colors",children:"Start fresh"}),e.jsx(Se,{to:`/escalations/detail/${t.id}`,className:"text-2xs text-text-tertiary hover:text-accent hover:underline ml-auto",children:"Details"})]})})]}):l?e.jsx("div",{className:"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-success/30",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-success",children:"Escalation resolved"}),e.jsx("p",{className:"text-xs text-text-tertiary mt-1",children:"This escalation was resolved manually. You can continue to compile."}),e.jsx("div",{className:"flex items-center gap-3 mt-2",children:t&&e.jsx(Se,{to:`/escalations/detail/${t.id}`,className:"text-2xs text-accent hover:underline",children:"View escalation"})})]})]})}):e.jsx("div",{className:"rounded-md px-4 py-3 mb-4 border bg-surface-raised border-status-warning/30",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("svg",{className:"w-4 h-4 mt-0.5 shrink-0 text-status-warning",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsx("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm0 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 4zm0 7a.75.75 0 100-1.5.75.75 0 000 1.5z"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-xs font-medium text-status-warning",children:s?"This query exceeded the maximum tool rounds":"This query has a pending escalation"}),r&&e.jsx("p",{className:"text-xs text-text-secondary mt-1 line-clamp-2",children:r}),e.jsxs("div",{className:"flex items-center gap-3 mt-2",children:[m&&n&&e.jsxs("button",{onClick:n,disabled:d,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:[e.jsx("svg",{className:"w-3 h-3",viewBox:"0 0 12 12",fill:"currentColor",children:e.jsx("path",{d:"M6 0.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zm2 6l-3 1.75v-3.5l3 1.75z"})}),d?"Sending...":"Retry with AI Triage"]}),t&&e.jsx(Se,{to:`/escalations/detail/${t.id}`,className:"text-2xs text-accent hover:underline",children:"View escalation"})]})]})]})})}function Ga(){const{workflowId:t}=Fe(),[s]=ge();return t==="new"?e.jsx(Ts,{}):s.get("mode")==="plan"?e.jsx(ua,{}):s.get("mode")==="builder"?e.jsx(ra,{}):e.jsx(Ca,{})}function Ca(){var s,r,n,d;const t=ha();return e.jsxs("div",{className:"flex flex-col min-h-[calc(100vh-12rem)]",children:[e.jsx(Oe,{title:"MCP Tool Compiler",actions:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(be,{status:t.status}),((s=t.discovery)==null?void 0:s.method)==="compiled-workflow"&&e.jsxs("span",{className:"text-xs bg-status-success/10 text-status-success px-2 py-0.5 rounded-full",children:["Deterministic (",(t.discovery.confidence*100).toFixed(0),"% match)"]})]})}),e.jsx(fa,{workflowId:t.workflowId,status:t.status,discovery:t.discovery,execution:t.execution,result:t.result}),e.jsx(Sa,{escalation:t.displayEscalation,isRoundsExhausted:t.isRoundsExhausted,diagnosis:(r=t.result)==null?void 0:r.diagnosis,onRetryTriage:t.activeEscalation?t.handleRetryTriage:void 0,isRetrying:t.claimMutation.isPending||t.resolveMutation.isPending,rerunWorkflowId:t.rerunWorkflowId}),e.jsx(Xe,{labels:t.stepLabels,current:t.step,maxReachable:t.maxReachable,onStepClick:o=>t.setManualStep(o)}),e.jsxs("div",{className:"flex-1",children:[t.step===1&&e.jsx(ga,{status:t.status,originalEnvelope:t.originalEnvelope,originalPrompt:t.originalPrompt,originalOutput:t.originalOutput,originalDurationMs:(n=t.originalExecution)==null?void 0:n.duration_ms,resultSummary:(d=t.result)==null?void 0:d.summary,onNext:t.maxReachable>=2?()=>t.setManualStep(2):void 0}),t.step===2&&e.jsx(ya,{events:t.events,onBack:()=>t.setManualStep(1),onNext:t.maxReachable>=3?()=>t.setManualStep(3):void 0}),t.step===3&&e.jsx(va,{compiledYaml:t.compiledYaml,originalPrompt:t.originalPrompt,compileAppId:t.compileAppId,setCompileAppId:t.setCompileAppId,compileName:t.compileName,setCompileName:t.setCompileName,compileDescription:t.compileDescription,setCompileDescription:t.setCompileDescription,compileTags:t.compileTags,setCompileTags:t.setCompileTags,describeData:t.describeData,describePrompt:t.describePrompt,allAppIds:t.allAppIds,onCompile:t.handleCompile,isCompiling:t.createYaml.isPending,compileError:t.createYaml.isError?t.createYaml.error.message:void 0,isUncompilable:t.isUncompilable,onBack:()=>t.setManualStep(2),onNext:()=>t.setManualStep(t.profileNextStep)}),t.step===4&&t.compiledYaml&&e.jsx(et,{yamlId:t.compiledYaml.id,onAdvance:()=>t.setManualStep(5),onBack:()=>t.setManualStep(3)}),t.step===5&&t.compiledYaml&&e.jsx(tt,{yamlId:t.compiledYaml.id,originalWorkflowId:t.workflowId,originalResult:t.result,originalPrompt:t.originalPrompt,onBack:()=>t.setManualStep(4),onAdvance:()=>t.setManualStep(6)}),t.step===6&&t.compiledYaml&&e.jsx(ka,{originalWorkflowId:t.workflowId,originalPrompt:t.originalPrompt,workflowName:t.compiledYaml.name,onBack:()=>t.setManualStep(5),onGoToDeploy:()=>t.setManualStep(4)})]})]})}export{Ga as McpQueryDetailPage};
|
|
5
|
-
//# sourceMappingURL=McpQueryDetailPage-D0r2lyZg.js.map
|