@hotmeshio/long-tail 0.4.17 → 0.4.19
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/README.md +0 -2
- package/build/adapters/express.js +4 -0
- package/build/api/auth-sso.d.ts +12 -0
- package/build/api/auth-sso.js +54 -0
- package/build/api/escalations/bulk.js +2 -2
- package/build/api/escalations/claim.js +3 -13
- package/build/api/escalations/create.js +3 -2
- package/build/api/escalations/helpers.d.ts +1 -0
- package/build/api/escalations/helpers.js +6 -4
- package/build/api/escalations/list.d.ts +1 -0
- package/build/api/escalations/list.js +1 -0
- package/build/api/escalations/metadata.js +4 -4
- package/build/api/escalations/single.js +3 -2
- package/build/api/settings.js +6 -1
- package/build/api/topics.d.ts +9 -0
- package/build/api/topics.js +31 -2
- package/build/lib/events/index.d.ts +1 -0
- package/build/lib/events/index.js +4 -0
- package/build/lib/events/nats.d.ts +5 -0
- package/build/lib/events/nats.js +9 -0
- package/build/lib/events/publish.d.ts +12 -9
- package/build/lib/events/publish.js +27 -17
- package/build/modules/auth.d.ts +7 -0
- package/build/modules/auth.js +104 -2
- package/build/modules/sso.d.ts +6 -0
- package/build/modules/sso.js +20 -0
- package/build/routes/auth-sso.d.ts +2 -0
- package/build/routes/auth-sso.js +51 -0
- package/build/routes/bot-accounts.js +1 -1
- package/build/routes/controlplane.js +6 -6
- package/build/routes/escalations/list.js +1 -0
- package/build/routes/index.js +2 -0
- package/build/routes/mcp-endpoint.d.ts +17 -0
- package/build/routes/mcp-endpoint.js +70 -0
- package/build/routes/nats-credentials.js +1 -1
- package/build/routes/roles.js +5 -5
- package/build/routes/topics.js +2 -0
- package/build/routes/users.js +31 -5
- package/build/sdk/index.d.ts +1 -0
- package/build/services/agent/input-mapper.js +17 -1
- package/build/services/escalation/crud.js +14 -1
- package/build/services/escalation/queries.d.ts +1 -0
- package/build/services/escalation/queries.js +7 -0
- package/build/services/mcp/exposure.d.ts +15 -0
- package/build/services/mcp/exposure.js +18 -0
- package/build/services/mcp/external-server.d.ts +15 -0
- package/build/services/mcp/external-server.js +125 -0
- package/build/services/mcp/seed-service-account.d.ts +11 -0
- package/build/services/mcp/seed-service-account.js +77 -0
- package/build/services/role/index.d.ts +1 -1
- package/build/services/role/index.js +2 -2
- package/build/services/topics/system-topics.js +29 -25
- package/build/services/user/index.d.ts +1 -1
- package/build/services/user/index.js +2 -1
- package/build/services/user/rbac.d.ts +11 -0
- package/build/services/user/rbac.js +17 -0
- package/build/services/user/sso-provision.d.ts +19 -0
- package/build/services/user/sso-provision.js +62 -0
- package/build/services/workflow-invocation.js +5 -3
- package/build/start/config.js +6 -0
- package/build/start/server.js +2 -0
- package/build/start/workers.js +15 -0
- package/build/system/index.js +53 -35
- package/build/system/mcp-servers/admin/agent-subscriptions.d.ts +5 -0
- package/build/system/mcp-servers/admin/agent-subscriptions.js +78 -0
- package/build/system/mcp-servers/admin/agents.d.ts +5 -0
- package/build/system/mcp-servers/admin/agents.js +103 -0
- package/build/system/mcp-servers/admin/bot-accounts.d.ts +5 -0
- package/build/system/mcp-servers/admin/bot-accounts.js +126 -0
- package/build/system/mcp-servers/admin/controlplane.d.ts +5 -0
- package/build/system/mcp-servers/admin/controlplane.js +107 -0
- package/build/system/mcp-servers/admin/escalations.js +88 -0
- package/build/system/mcp-servers/admin/exports.d.ts +5 -0
- package/build/system/mcp-servers/admin/exports.js +101 -0
- package/build/system/mcp-servers/admin/index.d.ts +16 -8
- package/build/system/mcp-servers/admin/index.js +36 -21
- package/build/system/mcp-servers/admin/pipelines.d.ts +5 -0
- package/build/system/mcp-servers/admin/pipelines.js +96 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +614 -6
- package/build/system/mcp-servers/admin/schemas.js +239 -1
- package/build/system/mcp-servers/admin/settings.d.ts +5 -0
- package/build/system/mcp-servers/admin/settings.js +53 -0
- package/build/system/mcp-servers/admin/topics.d.ts +5 -0
- package/build/system/mcp-servers/admin/topics.js +101 -0
- package/build/system/seed/tool-manifests-admin.d.ts +5077 -188
- package/build/system/seed/tool-manifests-admin.js +79 -30
- package/build/system/seed/tool-manifests-data.d.ts +20 -0
- package/build/system/seed/tool-manifests-data.js +24 -6
- package/build/system/seed/tool-manifests-escalation.d.ts +5 -0
- package/build/system/seed/tool-manifests-escalation.js +5 -0
- package/build/system/seed/tool-manifests-events.d.ts +4 -0
- package/build/system/seed/tool-manifests-events.js +4 -0
- package/build/system/seed/tool-manifests-knowledge.d.ts +6 -0
- package/build/system/seed/tool-manifests-knowledge.js +7 -0
- package/build/system/seed/tool-manifests-workflows.d.ts +8 -0
- package/build/system/seed/tool-manifests-workflows.js +8 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/auth.d.ts +71 -0
- package/build/types/events.d.ts +17 -6
- package/build/types/index.d.ts +1 -1
- package/build/types/startup.d.ts +22 -1
- package/dashboard/dist/assets/{AdminDashboard-Cfo0mwL2.js → AdminDashboard-BwUGcCxQ.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Cfo0mwL2.js.map → AdminDashboard-BwUGcCxQ.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-DgrYzLwq.js +16 -0
- package/dashboard/dist/assets/AgentConfigPage-DgrYzLwq.js.map +1 -0
- package/dashboard/dist/assets/{AgentDetailPage-3mZA7SOb.js → AgentDetailPage-XJpl7wfJ.js} +4 -4
- package/dashboard/dist/assets/AgentDetailPage-XJpl7wfJ.js.map +1 -0
- package/dashboard/dist/assets/{AgentsPage-CTVocfBb.js → AgentsPage-CGpVG6r8.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-CTVocfBb.js.map → AgentsPage-CGpVG6r8.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-DR1e0TQZ.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-CA9x9o5s.js.map → AvailableEscalationsPage-DR1e0TQZ.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-BKtjl6IL.js +2 -0
- package/dashboard/dist/assets/{BotPicker-BQp_Vs73.js.map → BotPicker-BKtjl6IL.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-wpVtkGeU.js → CapabilitiesPage-kCB8fyOj.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-wpVtkGeU.js.map → CapabilitiesPage-kCB8fyOj.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-2eZMMZiG.js → CollapsibleSection-C3tU61hB.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-2eZMMZiG.js.map → CollapsibleSection-C3tU61hB.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-DJGLssm0.js → CredentialsPage-Dt4nJs_B.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DJGLssm0.js.map → CredentialsPage-Dt4nJs_B.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-BdE6mHyA.js +2 -0
- package/dashboard/dist/assets/CronLabel-BdE6mHyA.js.map +1 -0
- package/dashboard/dist/assets/{CustomDurationPicker-DbyqfK35.js → CustomDurationPicker-B_Yxfb-u.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-DbyqfK35.js.map → CustomDurationPicker-B_Yxfb-u.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-BkfRoUcm.js → DropZone-CptiQ0wc.js} +2 -2
- package/dashboard/dist/assets/{DropZone-BkfRoUcm.js.map → DropZone-CptiQ0wc.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-tcGx5PFI.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BPYm8RA7.js.map → ElapsedCell-tcGx5PFI.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-kYGHfnLf.js → EscalationsOverview-1KO5dXzk.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-kYGHfnLf.js.map → EscalationsOverview-1KO5dXzk.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DSDzJMer.js → EventTable-DnpsQ6Ew.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DSDzJMer.js.map → EventTable-DnpsQ6Ew.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-B2Jgo1J1.js +2 -0
- package/dashboard/dist/assets/HomePage-B2Jgo1J1.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-jrVba7QN.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-DEef1_-T.js.map → ListToolbar-jrVba7QN.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CZFW5qMb.js → McpOverview-BzyxJyc9.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CZFW5qMb.js.map → McpOverview-BzyxJyc9.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-q9xH-QRo.js → McpQueryDetailPage-DXNseeKl.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-q9xH-QRo.js.map → McpQueryDetailPage-DXNseeKl.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-D14466yi.js → McpQueryPage-WZfTY43_.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-D14466yi.js.map → McpQueryPage-WZfTY43_.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-SXyiwc0d.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-aZg057y3.js.map → McpRunsPage-SXyiwc0d.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Cy7ySMXj.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-Cy7ySMXj.js.map +1 -0
- package/dashboard/dist/assets/{PageHeader-CR6TpJG_.js → PageHeader-BuJpMxyu.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-CR6TpJG_.js.map → PageHeader-BuJpMxyu.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-CRcQEAO1.js → PageHeaderWithStats-yD_PTbOl.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-CRcQEAO1.js.map → PageHeaderWithStats-yD_PTbOl.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-DyzNjwu8.js → ProcessDetailPage-DYIfvWyc.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-DyzNjwu8.js.map → ProcessDetailPage-DYIfvWyc.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-CT_3b5Wt.js → ProcessesListPage-DR1RGaMl.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-CT_3b5Wt.js.map → ProcessesListPage-DR1RGaMl.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BC54Vn-U.js → RolePill-SasQKc_B.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BC54Vn-U.js.map → RolePill-SasQKc_B.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-CpRJq-sg.js → RolesPage-pMERxj15.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-CpRJq-sg.js.map → RolesPage-pMERxj15.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-C20rdNsC.js → RunAsSelector-B-ksMoEj.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-C20rdNsC.js.map → RunAsSelector-B-ksMoEj.js.map} +1 -1
- package/dashboard/dist/assets/ServerName-CHspudaC.js +2 -0
- package/dashboard/dist/assets/{ServerName-Q6okiv4f.js.map → ServerName-CHspudaC.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CbFaU4bq.js → SwimlaneTimeline-Cr_K5qpu.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CbFaU4bq.js.map → SwimlaneTimeline-Cr_K5qpu.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-D6l1SPWd.js → TagInput-DvF3j8MA.js} +2 -2
- package/dashboard/dist/assets/{TagInput-D6l1SPWd.js.map → TagInput-DvF3j8MA.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-22cJsFmM.js → TaskDetailPage-BO5p7AEe.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-22cJsFmM.js.map → TaskDetailPage-BO5p7AEe.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-iDBVCEQQ.js → TaskQueuePill-BCQrS2oK.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-iDBVCEQQ.js.map → TaskQueuePill-BCQrS2oK.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-BDmaUIKu.js → TasksListPage-BRg-uFtF.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-BDmaUIKu.js.map → TasksListPage-BRg-uFtF.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-7wqEp87-.js → TimeAgo-BSzN6rAH.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-7wqEp87-.js.map → TimeAgo-BSzN6rAH.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BBCf8zsN.js → TimestampCell-DL6zMNEQ.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BBCf8zsN.js.map → TimestampCell-DL6zMNEQ.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-HcRTggHo.js → ToolPill-1aTqYtzp.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-HcRTggHo.js.map → ToolPill-1aTqYtzp.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-Dosq1cqG.js → ToolTestPanel-fLzNp79U.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-Dosq1cqG.js.map → ToolTestPanel-fLzNp79U.js.map} +1 -1
- package/dashboard/dist/assets/TopicDetailPage-D7gCsPKB.js +9 -0
- package/dashboard/dist/assets/TopicDetailPage-D7gCsPKB.js.map +1 -0
- package/dashboard/dist/assets/{TopicsPage-tVPdz-k0.js → TopicsPage-B3Aa8Haz.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-tVPdz-k0.js.map → TopicsPage-B3Aa8Haz.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DX7IBjFn.js → UserName-BjHIJWgh.js} +2 -2
- package/dashboard/dist/assets/{UserName-DX7IBjFn.js.map → UserName-BjHIJWgh.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BjC0j9_L.js → WorkflowExecutionPage-BQ7AYlQA.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BjC0j9_L.js.map → WorkflowExecutionPage-BQ7AYlQA.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-54px0YiY.js → WorkflowPill-Z-zHRKOK.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-54px0YiY.js.map → WorkflowPill-Z-zHRKOK.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsOverview-DaJRDkNy.js → WorkflowsOverview-B4DUcVxs.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DaJRDkNy.js.map → WorkflowsOverview-B4DUcVxs.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CkpQaUmz.js → YamlWorkflowsPage-CnTNOku0.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CkpQaUmz.js.map → YamlWorkflowsPage-CnTNOku0.js.map} +1 -1
- package/dashboard/dist/assets/{agents-B-P5MlEx.js → agents-CkvQDr9b.js} +2 -2
- package/dashboard/dist/assets/{agents-B-P5MlEx.js.map → agents-CkvQDr9b.js.map} +1 -1
- package/dashboard/dist/assets/{bots-CZz9iVys.js → bots-CzuMCVgU.js} +2 -2
- package/dashboard/dist/assets/{bots-CZz9iVys.js.map → bots-CzuMCVgU.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DrZ8Vw_v.js → capabilities-CbGmS0ty.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DrZ8Vw_v.js.map → capabilities-CbGmS0ty.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-cj-1c-1C.js → controlplane-DGvwkuYx.js} +2 -2
- package/dashboard/dist/assets/{controlplane-cj-1c-1C.js.map → controlplane-DGvwkuYx.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-BEVFyQnE.js → escalation-B7ysVToF.js} +2 -2
- package/dashboard/dist/assets/{escalation-BEVFyQnE.js.map → escalation-B7ysVToF.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-Beox3TXH.js → escalation-columns-CHQEJU1j.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-Beox3TXH.js.map → escalation-columns-CHQEJU1j.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B4gzNq9h.js → helpers-BFOjXa4r.js} +2 -2
- package/dashboard/dist/assets/{helpers-B4gzNq9h.js.map → helpers-BFOjXa4r.js.map} +1 -1
- package/dashboard/dist/assets/index-B9_1AZaG.js +2 -0
- package/dashboard/dist/assets/{index-3n5VREXN.js.map → index-B9_1AZaG.js.map} +1 -1
- package/dashboard/dist/assets/{index-BCQ65lNu.js → index-BFaDxPxA.js} +2 -2
- package/dashboard/dist/assets/{index-BCQ65lNu.js.map → index-BFaDxPxA.js.map} +1 -1
- package/dashboard/dist/assets/index-BduDiGcw.js +15 -0
- package/dashboard/dist/assets/{index-UtAfnStw.js.map → index-BduDiGcw.js.map} +1 -1
- package/dashboard/dist/assets/{index-Bh-PnP17.js → index-BeLphL59.js} +2 -2
- package/dashboard/dist/assets/{index-Bh-PnP17.js.map → index-BeLphL59.js.map} +1 -1
- package/dashboard/dist/assets/index-C--SEsU7.css +1 -0
- package/dashboard/dist/assets/{index-_DfbFHXk.js → index-CRiBkHPb.js} +2 -2
- package/dashboard/dist/assets/{index-_DfbFHXk.js.map → index-CRiBkHPb.js.map} +1 -1
- package/dashboard/dist/assets/{index-DdKbIZNE.js → index-CbrMW-gM.js} +2 -2
- package/dashboard/dist/assets/{index-DdKbIZNE.js.map → index-CbrMW-gM.js.map} +1 -1
- package/dashboard/dist/assets/{index-aJRDh4zW.js → index-CvOGgvzP.js} +2 -2
- package/dashboard/dist/assets/{index-aJRDh4zW.js.map → index-CvOGgvzP.js.map} +1 -1
- package/dashboard/dist/assets/{index-D1MywQ2z.js → index-DDlrQeTj.js} +2 -2
- package/dashboard/dist/assets/{index-D1MywQ2z.js.map → index-DDlrQeTj.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYXiz05a.js → index-DQHmfTPo.js} +2 -2
- package/dashboard/dist/assets/{index-BYXiz05a.js.map → index-DQHmfTPo.js.map} +1 -1
- package/dashboard/dist/assets/{index-BpN31nuC.js → index-_BRA9uFL.js} +25 -25
- package/dashboard/dist/assets/index-_BRA9uFL.js.map +1 -0
- package/dashboard/dist/assets/index-a98qWLB-.js +2 -0
- package/dashboard/dist/assets/index-a98qWLB-.js.map +1 -0
- package/dashboard/dist/assets/index-l_8R6U4r.js +6 -0
- package/dashboard/dist/assets/index-l_8R6U4r.js.map +1 -0
- package/dashboard/dist/assets/{index-D4KGadbW.js → index-v0OQpgXS.js} +2 -2
- package/dashboard/dist/assets/{index-D4KGadbW.js.map → index-v0OQpgXS.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DhtKWMON.js → knowledge-BlF8UMrk.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DhtKWMON.js.map → knowledge-BlF8UMrk.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BXN7-wGF.js → mcp-MtXuky8q.js} +2 -2
- package/dashboard/dist/assets/{mcp-BXN7-wGF.js.map → mcp-MtXuky8q.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BIJP4mQJ.js → mcp-query-DQ-J1Q0K.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BIJP4mQJ.js.map → mcp-query-DQ-J1Q0K.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-ne_yDQZX.js → namespaces-DtsT_GoV.js} +2 -2
- package/dashboard/dist/assets/{namespaces-ne_yDQZX.js.map → namespaces-DtsT_GoV.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-Bcz62DoS.js → pipelines-BjlCm9VH.js} +2 -2
- package/dashboard/dist/assets/{pipelines-Bcz62DoS.js.map → pipelines-BjlCm9VH.js.map} +1 -1
- package/dashboard/dist/assets/{roles-De2CzGCy.js → roles-D-LhJ82d.js} +2 -2
- package/dashboard/dist/assets/{roles-De2CzGCy.js.map → roles-D-LhJ82d.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-4yL5EfxI.js → tasks-BrP_8uEN.js} +2 -2
- package/dashboard/dist/assets/{tasks-4yL5EfxI.js.map → tasks-BrP_8uEN.js.map} +1 -1
- package/dashboard/dist/assets/topics-DUk-zX5D.js +2 -0
- package/dashboard/dist/assets/{topics-DDKHpRwP.js.map → topics-DUk-zX5D.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-XNNzwADV.js +2 -0
- package/dashboard/dist/assets/useEventHooks-XNNzwADV.js.map +1 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-Dv6GhDkh.js → useYamlActivityEvents-DANQ5jIY.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Dv6GhDkh.js.map → useYamlActivityEvents-DANQ5jIY.js.map} +1 -1
- package/dashboard/dist/assets/{users-pSMWP58G.js → users-vj0JgOkA.js} +2 -2
- package/dashboard/dist/assets/{users-pSMWP58G.js.map → users-vj0JgOkA.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CrrAvF2g.js → vendor-icons-Doy0g69_.js} +116 -111
- package/dashboard/dist/assets/vendor-icons-Doy0g69_.js.map +1 -0
- package/dashboard/dist/assets/{workflows-COYPOe2I.js → workflows-CmqgGPzI.js} +2 -2
- package/dashboard/dist/assets/{workflows-COYPOe2I.js.map → workflows-CmqgGPzI.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-1dF3ig6u.js → yaml-workflows-DNFyjBXH.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-1dF3ig6u.js.map → yaml-workflows-DNFyjBXH.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/controlplane.md +1 -1
- package/docs/api/http/mcp-endpoint.md +133 -0
- package/docs/api/http/roles.md +46 -0
- package/docs/api/http/service-accounts.md +15 -0
- package/docs/api/http/settings.md +6 -0
- package/docs/api/mcp/admin.md +1187 -0
- package/docs/api/mcp/claude-code.md +47 -0
- package/docs/api/mcp/docs.md +54 -0
- package/docs/api/mcp/events.md +80 -0
- package/docs/api/mcp/file-storage.md +76 -0
- package/docs/api/mcp/http-fetch.md +64 -0
- package/docs/api/mcp/human-queue.md +101 -0
- package/docs/api/mcp/index.md +52 -0
- package/docs/api/mcp/knowledge.md +125 -0
- package/docs/api/mcp/oauth.md +62 -0
- package/docs/api/mcp/schema-exchange.md +56 -0
- package/docs/api/mcp/translation.md +28 -0
- package/docs/api/mcp/vision.md +46 -0
- package/docs/api/sdk/settings.md +3 -1
- package/docs/auth.md +109 -0
- package/docs/dashboard.md +1 -1
- package/package.json +1 -1
- package/build/system/mcp-servers/playwright/browser-lifecycle.d.ts +0 -26
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +0 -125
- package/build/system/mcp-servers/playwright/index.d.ts +0 -25
- package/build/system/mcp-servers/playwright/index.js +0 -42
- package/build/system/mcp-servers/playwright/schemas.d.ts +0 -394
- package/build/system/mcp-servers/playwright/schemas.js +0 -90
- package/build/system/mcp-servers/playwright/tools-atomic.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-atomic.js +0 -9
- package/build/system/mcp-servers/playwright/tools-navigation.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-navigation.js +0 -153
- package/build/system/mcp-servers/playwright/tools-page-interaction.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-page-interaction.js +0 -162
- package/build/system/mcp-servers/playwright/tools-run-script.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-run-script.js +0 -207
- package/build/system/mcp-servers/playwright/types.d.ts +0 -8
- package/build/system/mcp-servers/playwright/types.js +0 -30
- package/build/system/mcp-servers/playwright/vision-helper.d.ts +0 -12
- package/build/system/mcp-servers/playwright/vision-helper.js +0 -81
- package/build/system/mcp-servers/playwright-cli/helpers.d.ts +0 -11
- package/build/system/mcp-servers/playwright-cli/helpers.js +0 -20
- package/build/system/mcp-servers/playwright-cli/index.d.ts +0 -4
- package/build/system/mcp-servers/playwright-cli/index.js +0 -15
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +0 -219
- package/build/system/mcp-servers/playwright-cli/schemas.js +0 -75
- package/build/system/mcp-servers/playwright-cli/tools-auth.d.ts +0 -2
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +0 -183
- package/build/system/mcp-servers/playwright-cli/tools-capture.d.ts +0 -2
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +0 -273
- package/build/system/seed/tool-manifests-browser.d.ts +0 -577
- package/build/system/seed/tool-manifests-browser.js +0 -158
- package/dashboard/dist/assets/AgentConfigPage-DBtvb2x5.js +0 -16
- package/dashboard/dist/assets/AgentConfigPage-DBtvb2x5.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-3mZA7SOb.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-CA9x9o5s.js +0 -2
- package/dashboard/dist/assets/BotPicker-BQp_Vs73.js +0 -2
- package/dashboard/dist/assets/CronLabel-DY8VdTS9.js +0 -2
- package/dashboard/dist/assets/CronLabel-DY8VdTS9.js.map +0 -1
- package/dashboard/dist/assets/ElapsedCell-BPYm8RA7.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-CCWCs07y.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-CCWCs07y.js.map +0 -1
- package/dashboard/dist/assets/HomePage-CwRebzmO.js +0 -2
- package/dashboard/dist/assets/HomePage-CwRebzmO.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-DEef1_-T.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-X0sfRFTk.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-X0sfRFTk.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-aZg057y3.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-iZEHnndU.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-iZEHnndU.js.map +0 -1
- package/dashboard/dist/assets/ServerName-Q6okiv4f.js +0 -2
- package/dashboard/dist/assets/TopicDetailPage-DW97-YHQ.js +0 -9
- package/dashboard/dist/assets/TopicDetailPage-DW97-YHQ.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-eCH4gpAk.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-eCH4gpAk.js.map +0 -1
- package/dashboard/dist/assets/index-3n5VREXN.js +0 -2
- package/dashboard/dist/assets/index-BAXzN-QB.js +0 -6
- package/dashboard/dist/assets/index-BAXzN-QB.js.map +0 -1
- package/dashboard/dist/assets/index-BpN31nuC.js.map +0 -1
- package/dashboard/dist/assets/index-C37LMzJa.css +0 -1
- package/dashboard/dist/assets/index-C5dHozmW.js +0 -2
- package/dashboard/dist/assets/index-C5dHozmW.js.map +0 -1
- package/dashboard/dist/assets/index-UtAfnStw.js +0 -15
- package/dashboard/dist/assets/topics-DDKHpRwP.js +0 -2
- package/dashboard/dist/assets/useEventHooks-NzIyvoGY.js +0 -2
- package/dashboard/dist/assets/useEventHooks-NzIyvoGY.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-CrrAvF2g.js.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Schema Exchange
|
|
2
|
+
|
|
3
|
+
Schema-driven data exchange with external service endpoints. Validates requests and responses against JSON Schema.
|
|
4
|
+
|
|
5
|
+
| Property | Value |
|
|
6
|
+
|----------|-------|
|
|
7
|
+
| Server ID | `long-tail-schema-exchange` |
|
|
8
|
+
| Category | Data |
|
|
9
|
+
| AI required | No |
|
|
10
|
+
| Credential providers | — |
|
|
11
|
+
|
|
12
|
+
## Compile Hints
|
|
13
|
+
|
|
14
|
+
Validates requests before sending and responses after receiving. Embed request_schema and response_schema as STATIC values. Exchange output: { status, data, headers, elapsed_ms, validated }. API response is in .data field. For auth, prefer credential_provider over manual token wiring.
|
|
15
|
+
|
|
16
|
+
## Tools
|
|
17
|
+
|
|
18
|
+
### exchange
|
|
19
|
+
|
|
20
|
+
Exchange data with an external service endpoint under schema enforcement. Validates request body against request_schema before sending and response body against response_schema after receiving.
|
|
21
|
+
|
|
22
|
+
| | |
|
|
23
|
+
|---|---|
|
|
24
|
+
| Read-safe | No |
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
|
|
28
|
+
| Field | Type | Required | Description |
|
|
29
|
+
|-------|------|----------|-------------|
|
|
30
|
+
| endpoint | string | Yes | Service endpoint URL |
|
|
31
|
+
| method | string | Yes | HTTP method: GET, POST, PUT, DELETE, PATCH |
|
|
32
|
+
| headers | object | No | Request headers |
|
|
33
|
+
| query | object | No | Query parameters |
|
|
34
|
+
| body | any | No | Request body (validated against request_schema if provided) |
|
|
35
|
+
| request_schema | object | No | JSON Schema for request body validation |
|
|
36
|
+
| response_schema | object | No | JSON Schema for response body validation |
|
|
37
|
+
| timeout_ms | number | No | Request timeout in milliseconds |
|
|
38
|
+
| credential_provider | string | No | Credential provider name — resolves auth from the connection store automatically |
|
|
39
|
+
| credential_label | string | No | Credential label for multi-credential accounts |
|
|
40
|
+
| auth_scheme | string | No | Auth scheme (default: Bearer) |
|
|
41
|
+
| auth_header | string | No | Header name for credential (default: Authorization) |
|
|
42
|
+
|
|
43
|
+
### validate_schema
|
|
44
|
+
|
|
45
|
+
Validate any value against a JSON Schema without making a network call. Useful for pre-validation, testing, and transform verification.
|
|
46
|
+
|
|
47
|
+
| | |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Read-safe | Yes |
|
|
50
|
+
|
|
51
|
+
**Parameters:**
|
|
52
|
+
|
|
53
|
+
| Field | Type | Required | Description |
|
|
54
|
+
|-------|------|----------|-------------|
|
|
55
|
+
| data | any | Yes | The value to validate |
|
|
56
|
+
| schema | object | Yes | JSON Schema to validate against |
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Translation
|
|
2
|
+
|
|
3
|
+
Text translation using LLM. Translates content between languages with automatic source language detection.
|
|
4
|
+
|
|
5
|
+
| Property | Value |
|
|
6
|
+
|----------|-------|
|
|
7
|
+
| Server ID | `long-tail-translation` |
|
|
8
|
+
| Category | Analysis |
|
|
9
|
+
| AI required | Yes |
|
|
10
|
+
| Credential providers | anthropic |
|
|
11
|
+
|
|
12
|
+
## Tools
|
|
13
|
+
|
|
14
|
+
### translate_content
|
|
15
|
+
|
|
16
|
+
Translate content to target language.
|
|
17
|
+
|
|
18
|
+
| | |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Read-safe | Yes |
|
|
21
|
+
|
|
22
|
+
**Parameters:**
|
|
23
|
+
|
|
24
|
+
| Field | Type | Required | Description |
|
|
25
|
+
|-------|------|----------|-------------|
|
|
26
|
+
| content | string | Yes | The content to translate. |
|
|
27
|
+
| target_language | string | Yes | Target language for the translation. |
|
|
28
|
+
| source_language | string | No | Source language. Auto-detected if omitted. |
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Vision
|
|
2
|
+
|
|
3
|
+
Image analysis and description using LLM vision. Analyzes images to extract structured data, text content, and descriptions.
|
|
4
|
+
|
|
5
|
+
| Property | Value |
|
|
6
|
+
|----------|-------|
|
|
7
|
+
| Server ID | `long-tail-vision` |
|
|
8
|
+
| Category | Analysis |
|
|
9
|
+
| AI required | Yes |
|
|
10
|
+
| Credential providers | anthropic |
|
|
11
|
+
|
|
12
|
+
## Compile Hints
|
|
13
|
+
|
|
14
|
+
Vision tools process one image at a time. The argument name is `image` (NOT `image_path`). It accepts a storage path, data URI, or https:// URL. Vision tools do NOT use browser sessions. Do NOT wire page_id or _handle to vision tools. analyze_image output fields: description (string), text_content (string), objects (array).
|
|
15
|
+
|
|
16
|
+
## Tools
|
|
17
|
+
|
|
18
|
+
### analyze_image
|
|
19
|
+
|
|
20
|
+
Analyze an image and extract structured data.
|
|
21
|
+
|
|
22
|
+
| | |
|
|
23
|
+
|---|---|
|
|
24
|
+
| Read-safe | Yes |
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
|
|
28
|
+
| Field | Type | Required | Description |
|
|
29
|
+
|-------|------|----------|-------------|
|
|
30
|
+
| image | string | Yes | Image source: storage path, data URI, or https:// URL. |
|
|
31
|
+
| prompt | string | No | Optional prompt to guide the analysis. |
|
|
32
|
+
|
|
33
|
+
### describe_image
|
|
34
|
+
|
|
35
|
+
Generate a detailed description of an image.
|
|
36
|
+
|
|
37
|
+
| | |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Read-safe | Yes |
|
|
40
|
+
|
|
41
|
+
**Parameters:**
|
|
42
|
+
|
|
43
|
+
| Field | Type | Required | Description |
|
|
44
|
+
|-------|------|----------|-------------|
|
|
45
|
+
| image | string | Yes | Image source: storage path, data URI, or https:// URL. |
|
|
46
|
+
| context | string | No | Optional context to guide the description. |
|
package/docs/api/sdk/settings.md
CHANGED
|
@@ -12,7 +12,7 @@ const result = await lt.settings.get();
|
|
|
12
12
|
|
|
13
13
|
**Parameters:** None
|
|
14
14
|
|
|
15
|
-
**Returns:** `LTApiResult<{ telemetry, escalation, events, ai }>`
|
|
15
|
+
**Returns:** `LTApiResult<{ telemetry, escalation, events, auth, ai }>`
|
|
16
16
|
|
|
17
17
|
| Field | Type | Description |
|
|
18
18
|
|-------|------|-------------|
|
|
@@ -21,6 +21,8 @@ const result = await lt.settings.get();
|
|
|
21
21
|
| `events.transport` | `'socketio' \| 'nats' \| 'none'` | Dashboard event transport (default: `socketio`; `nats` when `EVENT_TRANSPORT=nats`) |
|
|
22
22
|
| `events.natsWsUrl` | `string \| null` | NATS WebSocket URL (present when NATS adapter registered) |
|
|
23
23
|
| `events.natsToken` | `string \| null` | NATS auth token (present when NATS adapter registered) |
|
|
24
|
+
| `auth.sso` | `boolean` | Whether SSO is configured for embedded deployments |
|
|
25
|
+
| `auth.ssoLogoutUrl` | `string \| null` | Host logout URL (redirected to on dashboard sign out) |
|
|
24
26
|
| `ai.enabled` | `boolean` | Whether an LLM API key is configured |
|
|
25
27
|
|
|
26
28
|
**Auth:** Not required
|
package/docs/auth.md
CHANGED
|
@@ -136,6 +136,115 @@ await start({
|
|
|
136
136
|
|
|
137
137
|
This adapter grants admin access to every request. Restrict its use to local environments.
|
|
138
138
|
|
|
139
|
+
## SSO for Embedded Deployments
|
|
140
|
+
|
|
141
|
+
When Long Tail is mounted inside a host application (NestJS, Express, Rails, etc.) at a subpath, users authenticate with the host — not with Long Tail. The host's middleware validates cookies, headers, or session tokens before requests reach Long Tail's routes. SSO integration tells Long Tail how to extract that identity and transparently provision matching users.
|
|
142
|
+
|
|
143
|
+
### How It Works
|
|
144
|
+
|
|
145
|
+
1. User authenticates with the host application (via OIDC, SAML, cookies, etc.)
|
|
146
|
+
2. Host middleware validates identity and attaches user context to the request
|
|
147
|
+
3. Dashboard loads, detects SSO is enabled via `/api/settings`
|
|
148
|
+
4. Dashboard calls `POST /api/auth/sso` — host cookies are sent automatically
|
|
149
|
+
5. Long Tail calls `sso.resolve(req)`, extracts the host identity, and JIT provisions a user in `lt_users`
|
|
150
|
+
6. Long Tail returns its own JWT — the dashboard stores it for subsequent API calls
|
|
151
|
+
7. All downstream RBAC, escalation claims, and audit trails use the provisioned `lt_users.id`
|
|
152
|
+
|
|
153
|
+
### Configuration
|
|
154
|
+
|
|
155
|
+
The host provides a single `resolve` function. Long Tail handles provisioning, role mapping, JWT issuance, and dashboard awareness.
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { start } from '@hotmeshio/long-tail';
|
|
159
|
+
|
|
160
|
+
await start({
|
|
161
|
+
database: { connectionString: process.env.DATABASE_URL },
|
|
162
|
+
server: { enabled: false }, // host owns the HTTP server
|
|
163
|
+
|
|
164
|
+
auth: {
|
|
165
|
+
secret: process.env.JWT_SECRET,
|
|
166
|
+
sso: {
|
|
167
|
+
// Extract identity from the host's already-validated request.
|
|
168
|
+
// req.user is set by the host's auth middleware before Long Tail sees it.
|
|
169
|
+
resolve: (req) => {
|
|
170
|
+
const user = (req as any).user;
|
|
171
|
+
if (!user) return null;
|
|
172
|
+
return {
|
|
173
|
+
externalId: user.id, // stable identifier → lt_users.external_id
|
|
174
|
+
displayName: user.displayName,
|
|
175
|
+
email: user.email,
|
|
176
|
+
roles: ['operator', 'reviewer'],
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
// Optional: map host role names to LT role names.
|
|
181
|
+
// Unmapped roles are ignored. Omit to pass roles through as-is.
|
|
182
|
+
roleMap: {
|
|
183
|
+
admin: 'superadmin',
|
|
184
|
+
operator: 'station-operator',
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
// Optional: default role type for provisioned users (default: 'member')
|
|
188
|
+
defaultRoleType: 'member',
|
|
189
|
+
|
|
190
|
+
// Optional: redirect here when user logs out of LT dashboard
|
|
191
|
+
logoutUrl: '/auth/logout',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### SSOIdentity
|
|
198
|
+
|
|
199
|
+
The `resolve` function returns an `SSOIdentity` or `null`:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
interface SSOIdentity {
|
|
203
|
+
externalId: string; // mapped to lt_users.external_id
|
|
204
|
+
displayName?: string; // lt_users.display_name
|
|
205
|
+
email?: string; // lt_users.email
|
|
206
|
+
roles?: string[]; // mapped to lt_user_roles via roleMap
|
|
207
|
+
metadata?: Record<string, any>; // lt_users.metadata (JSONB)
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### JIT Provisioning
|
|
212
|
+
|
|
213
|
+
On first contact, Long Tail creates a `lt_users` record with the resolved identity. On subsequent contacts, it syncs any new roles. The internal `lt_users.id` (UUID) is used for all RBAC, escalation claims, and audit trails — the host's external ID is stored in `lt_users.external_id` as a stable lookup key.
|
|
214
|
+
|
|
215
|
+
### Token Exchange
|
|
216
|
+
|
|
217
|
+
`POST /api/auth/sso` is a public endpoint (no Bearer required). It calls `sso.resolve(req)`, provisions the user, and returns an LT JWT. The dashboard calls this automatically when `auth.sso` is `true` in settings.
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
POST /api/auth/sso
|
|
221
|
+
|
|
222
|
+
Response 200:
|
|
223
|
+
{
|
|
224
|
+
"token": "<jwt>",
|
|
225
|
+
"user": {
|
|
226
|
+
"id": "lt-uuid",
|
|
227
|
+
"external_id": "host-user-id",
|
|
228
|
+
"display_name": "Jane Doe",
|
|
229
|
+
"roles": [{ "role": "operator", "type": "member" }]
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### requireAuth Fallback
|
|
235
|
+
|
|
236
|
+
When SSO is configured and a request arrives without a Bearer token, `requireAuth` calls `sso.resolve(req)` as a fallback. This allows direct API calls from the host backend (which forward cookies but not Bearer tokens) to authenticate without an explicit exchange. The dashboard always uses Bearer after the initial exchange.
|
|
237
|
+
|
|
238
|
+
### Role Mapping
|
|
239
|
+
|
|
240
|
+
Roles are resolved once during the token exchange (not per-request) and baked into the JWT — the same pattern as the built-in login. When the host system changes a user's roles, the new roles take effect on the next token refresh.
|
|
241
|
+
|
|
242
|
+
If `roleMap` is provided, only mapped roles are assigned. If omitted, host role names are passed through directly as LT role names. Roles named `superadmin` or `admin` are assigned the corresponding role type; all others default to `member`.
|
|
243
|
+
|
|
244
|
+
### Standalone Deployments
|
|
245
|
+
|
|
246
|
+
When `auth.sso` is not configured, nothing changes. The login page, OAuth providers, service accounts, and JWT auth all work exactly as before. SSO is purely additive.
|
|
247
|
+
|
|
139
248
|
## Service Account Authentication
|
|
140
249
|
|
|
141
250
|
Service accounts are named identities that authenticate with API keys instead of passwords or OAuth. They share the same RBAC system as human users — same roles, same delegation tokens, same credential storage.
|
package/docs/dashboard.md
CHANGED
package/package.json
CHANGED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type Browser, type Page } from 'playwright';
|
|
2
|
-
import type { PlaywrightHandle } from './types';
|
|
3
|
-
export declare const pages: Map<string, Page>;
|
|
4
|
-
/** Allocate a unique page ID (shared across both playwright servers). */
|
|
5
|
-
export declare function allocatePageId(): string;
|
|
6
|
-
export declare function ensureBrowser(): Promise<Browser>;
|
|
7
|
-
/**
|
|
8
|
-
* Resolve a page from either a local `page_id`, a `_handle`, or "most recent".
|
|
9
|
-
* Handles cross-container reconnection via CDP when needed.
|
|
10
|
-
*/
|
|
11
|
-
export declare function resolvePage(args: {
|
|
12
|
-
page_id?: string;
|
|
13
|
-
_handle?: PlaywrightHandle;
|
|
14
|
-
}): Promise<{
|
|
15
|
-
page: Page;
|
|
16
|
-
pageId: string;
|
|
17
|
-
}>;
|
|
18
|
-
/**
|
|
19
|
-
* Build a _handle for a page. Includes CDP endpoint when available
|
|
20
|
-
* (for cross-container access in distributed deployments).
|
|
21
|
-
*/
|
|
22
|
-
export declare function buildHandle(pageId: string): PlaywrightHandle;
|
|
23
|
-
/**
|
|
24
|
-
* Shut down the shared browser and release all pages.
|
|
25
|
-
*/
|
|
26
|
-
export declare function stopPlaywrightServer(): Promise<void>;
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pages = void 0;
|
|
4
|
-
exports.allocatePageId = allocatePageId;
|
|
5
|
-
exports.ensureBrowser = ensureBrowser;
|
|
6
|
-
exports.resolvePage = resolvePage;
|
|
7
|
-
exports.buildHandle = buildHandle;
|
|
8
|
-
exports.stopPlaywrightServer = stopPlaywrightServer;
|
|
9
|
-
const playwright_1 = require("playwright");
|
|
10
|
-
const logger_1 = require("../../../lib/logger");
|
|
11
|
-
const types_1 = require("./types");
|
|
12
|
-
// ── Browser lifecycle ────────────────────────────────────────────────────────
|
|
13
|
-
// Shared browser instance across tool calls within a single server lifetime.
|
|
14
|
-
// Lazy-launched on first use, cleaned up via stopPlaywrightServer().
|
|
15
|
-
let browser = null;
|
|
16
|
-
exports.pages = new Map();
|
|
17
|
-
let pageCounter = 0;
|
|
18
|
-
/** Remote browsers connected via CDP — cached to avoid reconnecting per call. */
|
|
19
|
-
const remoteBrowsers = new Map();
|
|
20
|
-
/** Allocate a unique page ID (shared across both playwright servers). */
|
|
21
|
-
function allocatePageId() {
|
|
22
|
-
return `page_${++pageCounter}`;
|
|
23
|
-
}
|
|
24
|
-
async function ensureBrowser() {
|
|
25
|
-
if (!browser || !browser.isConnected()) {
|
|
26
|
-
browser = await playwright_1.chromium.launch({ headless: true });
|
|
27
|
-
logger_1.loggerRegistry.info('[lt-mcp:playwright] browser launched');
|
|
28
|
-
}
|
|
29
|
-
return browser;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Resolve a page from either a local `page_id`, a `_handle`, or "most recent".
|
|
33
|
-
* Handles cross-container reconnection via CDP when needed.
|
|
34
|
-
*/
|
|
35
|
-
async function resolvePage(args) {
|
|
36
|
-
// 1. Try local pages Map (fast path — same container)
|
|
37
|
-
const localId = args._handle?.page_id || args.page_id;
|
|
38
|
-
if (localId) {
|
|
39
|
-
const local = exports.pages.get(localId);
|
|
40
|
-
if (local)
|
|
41
|
-
return { page: local, pageId: localId };
|
|
42
|
-
}
|
|
43
|
-
// 2. Try CDP reconnection via handle (cross-container)
|
|
44
|
-
if (args._handle?.cdp_endpoint) {
|
|
45
|
-
const cdp = args._handle.cdp_endpoint;
|
|
46
|
-
let remoteBrowser = remoteBrowsers.get(cdp);
|
|
47
|
-
if (!remoteBrowser || !remoteBrowser.isConnected()) {
|
|
48
|
-
try {
|
|
49
|
-
remoteBrowser = await playwright_1.chromium.connectOverCDP(cdp);
|
|
50
|
-
remoteBrowsers.set(cdp, remoteBrowser);
|
|
51
|
-
logger_1.loggerRegistry.info(`[lt-mcp:playwright] connected to remote browser: ${cdp}`);
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
throw Object.assign(new Error(`Cannot reach browser at ${cdp}`), { code: types_1.SESSION_UNREACHABLE, cdp_endpoint: cdp });
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Find the page — for now, use the first page in the default context
|
|
58
|
-
const contexts = remoteBrowser.contexts();
|
|
59
|
-
const ctx = contexts[0] || await remoteBrowser.newContext();
|
|
60
|
-
const remotePages = ctx.pages();
|
|
61
|
-
if (remotePages.length > 0) {
|
|
62
|
-
const page = remotePages[remotePages.length - 1];
|
|
63
|
-
const id = args._handle.page_id || `remote_${++pageCounter}`;
|
|
64
|
-
exports.pages.set(id, page);
|
|
65
|
-
return { page, pageId: id };
|
|
66
|
-
}
|
|
67
|
-
throw Object.assign(new Error(`No pages found on remote browser at ${cdp}`), { code: types_1.SESSION_NOT_FOUND, cdp_endpoint: cdp });
|
|
68
|
-
}
|
|
69
|
-
// 3. If a specific page_id was requested but not found, throw structured error
|
|
70
|
-
if (localId) {
|
|
71
|
-
throw Object.assign(new Error(`Page ${localId} not found`), { code: types_1.SESSION_NOT_FOUND, page_id: localId });
|
|
72
|
-
}
|
|
73
|
-
// 4. Fall back to most recent local page
|
|
74
|
-
const entries = Array.from(exports.pages.entries());
|
|
75
|
-
if (entries.length === 0) {
|
|
76
|
-
throw Object.assign(new Error('No pages open. Navigate to a URL first, or pass a _handle.'), { code: types_1.SESSION_NOT_FOUND });
|
|
77
|
-
}
|
|
78
|
-
return { page: entries[entries.length - 1][1], pageId: entries[entries.length - 1][0] };
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Build a _handle for a page. Includes CDP endpoint when available
|
|
82
|
-
* (for cross-container access in distributed deployments).
|
|
83
|
-
*/
|
|
84
|
-
function buildHandle(pageId) {
|
|
85
|
-
const handle = {
|
|
86
|
-
type: 'playwright_page',
|
|
87
|
-
page_id: pageId,
|
|
88
|
-
};
|
|
89
|
-
// Include CDP endpoint if browser exposes one (e.g., launchServer or remote)
|
|
90
|
-
if (browser && typeof browser.wsEndpoint === 'function') {
|
|
91
|
-
try {
|
|
92
|
-
handle.cdp_endpoint = browser.wsEndpoint();
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
// Not available — single-process mode, local pages Map suffices
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return handle;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Shut down the shared browser and release all pages.
|
|
102
|
-
*/
|
|
103
|
-
async function stopPlaywrightServer() {
|
|
104
|
-
for (const [id, page] of exports.pages) {
|
|
105
|
-
try {
|
|
106
|
-
await page.close();
|
|
107
|
-
}
|
|
108
|
-
catch { /* ignore */ }
|
|
109
|
-
exports.pages.delete(id);
|
|
110
|
-
}
|
|
111
|
-
// Close remote browsers
|
|
112
|
-
for (const [endpoint, rb] of remoteBrowsers) {
|
|
113
|
-
try {
|
|
114
|
-
await rb.close();
|
|
115
|
-
}
|
|
116
|
-
catch { /* ignore */ }
|
|
117
|
-
remoteBrowsers.delete(endpoint);
|
|
118
|
-
}
|
|
119
|
-
if (browser) {
|
|
120
|
-
await browser.close();
|
|
121
|
-
browser = null;
|
|
122
|
-
}
|
|
123
|
-
pageCounter = 0;
|
|
124
|
-
logger_1.loggerRegistry.info('[lt-mcp:playwright] browser closed');
|
|
125
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
export { pages, allocatePageId, ensureBrowser, buildHandle, stopPlaywrightServer } from './browser-lifecycle';
|
|
3
|
-
export type { PlaywrightHandle } from './types';
|
|
4
|
-
/**
|
|
5
|
-
* Create a Playwright Browser MCP server.
|
|
6
|
-
*
|
|
7
|
-
* Provides 9 tools for browser automation:
|
|
8
|
-
* navigate, screenshot, click, fill, wait_for, evaluate, run_script, list_pages, close_page
|
|
9
|
-
*
|
|
10
|
-
* All page-scoped tools participate in the _handle convention:
|
|
11
|
-
* - navigate returns a _handle in its result
|
|
12
|
-
* - All other tools accept _handle to locate the page across activities
|
|
13
|
-
* - Fast path: local pages Map (same container)
|
|
14
|
-
* - Slow path: CDP reconnection (different container)
|
|
15
|
-
*
|
|
16
|
-
* `run_script` is the preferred tool for YAML workflows — it executes a
|
|
17
|
-
* multi-step browser script in a single activity, avoiding cross-activity
|
|
18
|
-
* session issues entirely.
|
|
19
|
-
*
|
|
20
|
-
* Returns a fresh McpServer instance each time. The browser is shared
|
|
21
|
-
* and lazy-launched on first tool call.
|
|
22
|
-
*/
|
|
23
|
-
export declare function createPlaywrightServer(options?: {
|
|
24
|
-
name?: string;
|
|
25
|
-
}): Promise<McpServer>;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stopPlaywrightServer = exports.buildHandle = exports.ensureBrowser = exports.allocatePageId = exports.pages = void 0;
|
|
4
|
-
exports.createPlaywrightServer = createPlaywrightServer;
|
|
5
|
-
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
6
|
-
const logger_1 = require("../../../lib/logger");
|
|
7
|
-
const tools_atomic_1 = require("./tools-atomic");
|
|
8
|
-
const tools_run_script_1 = require("./tools-run-script");
|
|
9
|
-
// Re-export public API consumed by playwright-cli.ts and system/index.ts
|
|
10
|
-
var browser_lifecycle_1 = require("./browser-lifecycle");
|
|
11
|
-
Object.defineProperty(exports, "pages", { enumerable: true, get: function () { return browser_lifecycle_1.pages; } });
|
|
12
|
-
Object.defineProperty(exports, "allocatePageId", { enumerable: true, get: function () { return browser_lifecycle_1.allocatePageId; } });
|
|
13
|
-
Object.defineProperty(exports, "ensureBrowser", { enumerable: true, get: function () { return browser_lifecycle_1.ensureBrowser; } });
|
|
14
|
-
Object.defineProperty(exports, "buildHandle", { enumerable: true, get: function () { return browser_lifecycle_1.buildHandle; } });
|
|
15
|
-
Object.defineProperty(exports, "stopPlaywrightServer", { enumerable: true, get: function () { return browser_lifecycle_1.stopPlaywrightServer; } });
|
|
16
|
-
/**
|
|
17
|
-
* Create a Playwright Browser MCP server.
|
|
18
|
-
*
|
|
19
|
-
* Provides 9 tools for browser automation:
|
|
20
|
-
* navigate, screenshot, click, fill, wait_for, evaluate, run_script, list_pages, close_page
|
|
21
|
-
*
|
|
22
|
-
* All page-scoped tools participate in the _handle convention:
|
|
23
|
-
* - navigate returns a _handle in its result
|
|
24
|
-
* - All other tools accept _handle to locate the page across activities
|
|
25
|
-
* - Fast path: local pages Map (same container)
|
|
26
|
-
* - Slow path: CDP reconnection (different container)
|
|
27
|
-
*
|
|
28
|
-
* `run_script` is the preferred tool for YAML workflows — it executes a
|
|
29
|
-
* multi-step browser script in a single activity, avoiding cross-activity
|
|
30
|
-
* session issues entirely.
|
|
31
|
-
*
|
|
32
|
-
* Returns a fresh McpServer instance each time. The browser is shared
|
|
33
|
-
* and lazy-launched on first tool call.
|
|
34
|
-
*/
|
|
35
|
-
async function createPlaywrightServer(options) {
|
|
36
|
-
const name = options?.name || 'long-tail-playwright';
|
|
37
|
-
const instance = new mcp_js_1.McpServer({ name, version: '1.0.0' });
|
|
38
|
-
(0, tools_atomic_1.registerAtomicTools)(instance);
|
|
39
|
-
(0, tools_run_script_1.registerRunScript)(instance);
|
|
40
|
-
logger_1.loggerRegistry.info(`[lt-mcp:playwright] ${name} ready (9 tools registered)`);
|
|
41
|
-
return instance;
|
|
42
|
-
}
|