@hotmeshio/long-tail 0.1.16 → 0.1.17
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/escalations/resolve.js +1 -0
- package/build/api/files.d.ts +4 -0
- package/build/api/files.js +14 -0
- package/build/api/workflows/config.js +5 -0
- package/build/index.d.ts +0 -1
- package/build/index.js +1 -4
- package/build/lib/db/schemas/002_seed.sql +3 -81
- package/build/lib/storage/mime.js +20 -0
- package/build/routes/file-browser.js +30 -0
- package/build/routes/files.js +20 -18
- package/build/services/config/sql.d.ts +3 -0
- package/build/services/config/sql.js +15 -1
- package/build/services/config/write.d.ts +6 -0
- package/build/services/config/write.js +64 -0
- package/build/services/cron/index.d.ts +5 -0
- package/build/services/cron/index.js +30 -0
- package/build/services/insight/index.js +3 -0
- package/build/services/interceptor/activities/task.d.ts +1 -0
- package/build/services/interceptor/activities/task.js +2 -1
- package/build/services/interceptor/activities/workflow.js +1 -0
- package/build/services/interceptor/index.js +4 -4
- package/build/services/interceptor/lifecycle.js +1 -1
- package/build/services/mcp/db.d.ts +17 -0
- package/build/services/mcp/db.js +50 -0
- package/build/services/mcp/sql.d.ts +4 -1
- package/build/services/mcp/sql.js +9 -2
- package/build/services/oauth/index.js +4 -1
- package/build/services/oauth/providers/google.js +7 -2
- package/build/services/orchestrator/index.js +5 -0
- package/build/services/task/crud.js +1 -0
- package/build/services/task/sql.d.ts +1 -1
- package/build/services/task/sql.js +2 -2
- package/build/services/task/types.d.ts +2 -0
- package/build/services/workers/registry.js +3 -1
- package/build/services/workflow-invocation.js +8 -1
- package/build/start/workers.d.ts +2 -1
- package/build/start/workers.js +66 -6
- package/build/system/index.d.ts +12 -10
- package/build/system/index.js +240 -67
- package/build/system/mcp-servers/playwright/schemas.d.ts +12 -12
- package/build/system/seed/index.d.ts +0 -7
- package/build/system/seed/index.js +5 -46
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/startup.d.ts +59 -2
- package/dashboard/dist/assets/AdminDashboard-CsTOErp1.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-Bprul9Eb.js.map → AdminDashboard-CsTOErp1.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BqQA3IJp.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-H_z5mC10.js.map → AvailableEscalationsPage-BqQA3IJp.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-C2xR1xay.js +2 -0
- package/dashboard/dist/assets/{BotPicker-DcvILNUf.js.map → BotPicker-C2xR1xay.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-CRtHQsAv.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-BWPbzgEe.js.map → CollapsibleSection-CRtHQsAv.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-Cy6KVLfC.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CRED8hvk.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js +2 -0
- package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-BABUv1V2.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-eOk2EqQ5.js.map → CustomDurationPicker-BABUv1V2.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-D3-wSEf0.js +2 -0
- package/dashboard/dist/assets/{DataTable-bd2PTBJd.js.map → DataTable-D3-wSEf0.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-DHKmMqRA.js +2 -0
- package/dashboard/dist/assets/DropZone-DHKmMqRA.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-DrJif03B.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BGo8vyus.js.map → ElapsedCell-DrJif03B.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js.map +1 -0
- package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js +2 -0
- package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js.map +1 -0
- package/dashboard/dist/assets/EventTable-Dh3_9DAY.js +2 -0
- package/dashboard/dist/assets/{EventTable-CmFhswLW.js.map → EventTable-Dh3_9DAY.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
- package/dashboard/dist/assets/{FilterBar-BQNzsd3A.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-OWOn-HiC.js.map → ListToolbar-CyEkulVR.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-ChLa6Gl7.js +2 -0
- package/dashboard/dist/assets/{McpOverview-OkEzvClD.js.map → McpOverview-ChLa6Gl7.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-ERVuNEEK.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-DMeiG4i_.js.map → McpRunDetailPage-ERVuNEEK.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +1 -0
- package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
- package/dashboard/dist/assets/{Modal-Dir9Rlnx.js.map → Modal-DEODGeqx.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-CJm_BTPU.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-OqWC6Azy.js.map → OperatorDashboard-CJm_BTPU.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js +2 -0
- package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-C7D5d_HY.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-vfnCDyQK.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-DZIP6grw.js.map → ProcessDetailPage-vfnCDyQK.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js.map +1 -0
- package/dashboard/dist/assets/RolePill-BhVC0cc3.js +2 -0
- package/dashboard/dist/assets/{RolePill-D6nMxMvp.js.map → RolePill-BhVC0cc3.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DYSt2aAr.js +2 -0
- package/dashboard/dist/assets/RolesPage-DYSt2aAr.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
- package/dashboard/dist/assets/{RowActions-JqgAB0p3.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-KAlKtitB.js.map → RunAsSelector-CD7_Dmb0.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
- package/dashboard/dist/assets/{StatCard-B-WLhOaH.js.map → StatCard-DlgF0CJC.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js.map +1 -0
- package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
- package/dashboard/dist/assets/{StepIndicator-D9Xvdf18.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-CJHMzYJj.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +1 -0
- package/dashboard/dist/assets/TagInput-DftaRHDV.js +2 -0
- package/dashboard/dist/assets/{TagInput-DcPnUnSJ.js.map → TagInput-DftaRHDV.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js +2 -0
- package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js.map +1 -0
- package/dashboard/dist/assets/TasksListPage-g6XIbhju.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-DeewV4Gp.js.map → TasksListPage-g6XIbhju.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-BihIwEbB.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-DJZq-e4R.js.map → TimeAgo-BihIwEbB.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-GOFcvE-i.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-Dx5uwGfS.js.map → TimestampCell-GOFcvE-i.js.map} +1 -1
- package/dashboard/dist/assets/UserName-CmMVt4vS.js +2 -0
- package/dashboard/dist/assets/{UserName-CnGk7MgL.js.map → UserName-CmMVt4vS.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-soRFz_30.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-CPQ0fIwf.js.map → WorkflowExecutionPage-soRFz_30.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-BrD5d1AG.js.map → WorkflowPill-DUDDyBsj.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-z3Ztiz1y.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-lBp2E6rN.js.map → WorkflowsOverview-z3Ztiz1y.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +1 -0
- package/dashboard/dist/assets/{bots-fc_O_YIq.js → bots-BZPXDh_y.js} +2 -2
- package/dashboard/dist/assets/{bots-fc_O_YIq.js.map → bots-BZPXDh_y.js.map} +1 -1
- package/dashboard/dist/assets/escalation-DBUIq1Z4.js +2 -0
- package/dashboard/dist/assets/{escalation-BYhLYHBz.js.map → escalation-DBUIq1Z4.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-DjJyuC1g.js.map → escalation-columns-DL4zsR8Y.js.map} +1 -1
- package/dashboard/dist/assets/helpers-D50KFFkI.js +2 -0
- package/dashboard/dist/assets/{helpers-CQG3Rh2y.js.map → helpers-D50KFFkI.js.map} +1 -1
- package/dashboard/dist/assets/index-B-ioA6yv.js +2 -0
- package/dashboard/dist/assets/index-B-ioA6yv.js.map +1 -0
- package/dashboard/dist/assets/index-B-jzKfuv.js +2 -0
- package/dashboard/dist/assets/index-B-jzKfuv.js.map +1 -0
- package/dashboard/dist/assets/index-BMpoMc4A.js +2 -0
- package/dashboard/dist/assets/{index-D51PaQZY.js.map → index-BMpoMc4A.js.map} +1 -1
- package/dashboard/dist/assets/index-BU04qgJt.js +15 -0
- package/dashboard/dist/assets/index-BU04qgJt.js.map +1 -0
- package/dashboard/dist/assets/index-BUjxYyxc.js +63 -0
- package/dashboard/dist/assets/index-BUjxYyxc.js.map +1 -0
- package/dashboard/dist/assets/index-BpoHVMV7.js +2 -0
- package/dashboard/dist/assets/index-BpoHVMV7.js.map +1 -0
- package/dashboard/dist/assets/index-CEnDYJOO.js +2 -0
- package/dashboard/dist/assets/index-CEnDYJOO.js.map +1 -0
- package/dashboard/dist/assets/index-CbuH92vk.js +6 -0
- package/dashboard/dist/assets/index-CbuH92vk.js.map +1 -0
- package/dashboard/dist/assets/index-D9_hZmsW.js +5 -0
- package/dashboard/dist/assets/{index-KYpLvJKB.js.map → index-D9_hZmsW.js.map} +1 -1
- package/dashboard/dist/assets/index-DrouIN-M.js +2 -0
- package/dashboard/dist/assets/{index-DR4qQvlW.js.map → index-DrouIN-M.js.map} +1 -1
- package/dashboard/dist/assets/index-DzICLMI7.js +2 -0
- package/dashboard/dist/assets/{index-DNtXXy1o.js.map → index-DzICLMI7.js.map} +1 -1
- package/dashboard/dist/assets/index-efS5gKpv.css +1 -0
- package/dashboard/dist/assets/index-qT78AZDq.js +2 -0
- package/dashboard/dist/assets/index-qT78AZDq.js.map +1 -0
- package/dashboard/dist/assets/mcp-D0GrHRFe.js +2 -0
- package/dashboard/dist/assets/{mcp-D2XfRh8v.js.map → mcp-D0GrHRFe.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js → mcp-query-DC5woQn5.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js.map → mcp-query-DC5woQn5.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js → mcp-runs-CsoVQoPB.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js.map → mcp-runs-CsoVQoPB.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-unpIb4gX.js +2 -0
- package/dashboard/dist/assets/{namespaces-BwMljx6f.js.map → namespaces-unpIb4gX.js.map} +1 -1
- package/dashboard/dist/assets/{roles-Bd_sTV6I.js → roles--kBaFljg.js} +2 -2
- package/dashboard/dist/assets/{roles-Bd_sTV6I.js.map → roles--kBaFljg.js.map} +1 -1
- package/dashboard/dist/assets/settings-B96YkawY.js +2 -0
- package/dashboard/dist/assets/{settings-BCb8eFyA.js.map → settings-B96YkawY.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-Bq54qGGq.js → tasks-D_1NCfOZ.js} +2 -2
- package/dashboard/dist/assets/{tasks-Bq54qGGq.js.map → tasks-D_1NCfOZ.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-BTbGf536.js → useEventHooks-BPjEkCpD.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-BTbGf536.js.map → useEventHooks-BPjEkCpD.js.map} +1 -1
- package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
- package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js → useYamlActivityEvents-D3RQjfzo.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js.map → useYamlActivityEvents-D3RQjfzo.js.map} +1 -1
- package/dashboard/dist/assets/{users-BTBhafGc.js → users-e2oatvoj.js} +2 -2
- package/dashboard/dist/assets/{users-BTBhafGc.js.map → users-e2oatvoj.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CWl44VA6.js → vendor-icons-BkK55L-1.js} +103 -88
- package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
- package/dashboard/dist/assets/{workflows-BkzA4ahe.js → workflows-D6diL54s.js} +2 -2
- package/dashboard/dist/assets/{workflows-BkzA4ahe.js.map → workflows-D6diL54s.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js → yaml-workflows-CAKU7LUu.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js.map → yaml-workflows-CAKU7LUu.js.map} +1 -1
- package/dashboard/dist/index.html +5 -5
- package/docs/dashboard.md +233 -65
- package/package.json +3 -2
- package/build/examples/external-mcp-server/server.d.ts +0 -17
- package/build/examples/external-mcp-server/server.js +0 -116
- package/build/examples/index.d.ts +0 -2
- package/build/examples/index.js +0 -7
- package/build/examples/seed-data.d.ts +0 -55
- package/build/examples/seed-data.js +0 -161
- package/build/examples/seed.d.ts +0 -5
- package/build/examples/seed.js +0 -132
- package/build/examples/types/envelopes.d.ts +0 -69
- package/build/examples/types/envelopes.js +0 -8
- package/build/examples/types/index.d.ts +0 -10
- package/build/examples/types/index.js +0 -9
- package/build/examples/types/resolvers.d.ts +0 -27
- package/build/examples/types/resolvers.js +0 -9
- package/build/examples/workers.d.ts +0 -10
- package/build/examples/workers.js +0 -59
- package/build/examples/workflows/assembly-line/activities.d.ts +0 -28
- package/build/examples/workflows/assembly-line/activities.js +0 -53
- package/build/examples/workflows/assembly-line/index.d.ts +0 -17
- package/build/examples/workflows/assembly-line/index.js +0 -60
- package/build/examples/workflows/assembly-line/iterator.d.ts +0 -12
- package/build/examples/workflows/assembly-line/iterator.js +0 -54
- package/build/examples/workflows/assembly-line/reverter.d.ts +0 -18
- package/build/examples/workflows/assembly-line/reverter.js +0 -89
- package/build/examples/workflows/assembly-line/types.d.ts +0 -25
- package/build/examples/workflows/assembly-line/types.js +0 -8
- package/build/examples/workflows/assembly-line/worker.d.ts +0 -13
- package/build/examples/workflows/assembly-line/worker.js +0 -81
- package/build/examples/workflows/basic-echo/activities.d.ts +0 -20
- package/build/examples/workflows/basic-echo/activities.js +0 -55
- package/build/examples/workflows/basic-echo/index.d.ts +0 -14
- package/build/examples/workflows/basic-echo/index.js +0 -66
- package/build/examples/workflows/basic-signal/activities.d.ts +0 -17
- package/build/examples/workflows/basic-signal/activities.js +0 -18
- package/build/examples/workflows/basic-signal/index.d.ts +0 -17
- package/build/examples/workflows/basic-signal/index.js +0 -116
- package/build/examples/workflows/kitchen-sink/activities.d.ts +0 -40
- package/build/examples/workflows/kitchen-sink/activities.js +0 -46
- package/build/examples/workflows/kitchen-sink/index.d.ts +0 -22
- package/build/examples/workflows/kitchen-sink/index.js +0 -123
- package/build/examples/workflows/review-content/activities.d.ts +0 -10
- package/build/examples/workflows/review-content/activities.js +0 -44
- package/build/examples/workflows/review-content/index.d.ts +0 -10
- package/build/examples/workflows/review-content/index.js +0 -95
- package/build/examples/workflows/review-content/types.d.ts +0 -28
- package/build/examples/workflows/review-content/types.js +0 -2
- package/build/lib/db/schemas/schemas/001_schema.sql +0 -485
- package/build/lib/db/schemas/schemas/002_seed.sql +0 -92
- package/build/system/seed/server-definitions.d.ts +0 -3210
- package/build/system/seed/server-definitions.js +0 -232
- package/dashboard/dist/assets/AdminDashboard-Bprul9Eb.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +0 -2
- package/dashboard/dist/assets/BotPicker-DcvILNUf.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-BWPbzgEe.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-Cy6KVLfC.js +0 -2
- package/dashboard/dist/assets/CopyableId-CRED8hvk.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js.map +0 -1
- package/dashboard/dist/assets/CustomDurationPicker-eOk2EqQ5.js +0 -2
- package/dashboard/dist/assets/DataTable-bd2PTBJd.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-BGo8vyus.js +0 -2
- package/dashboard/dist/assets/EmptyState-BygtU-Rh.js +0 -2
- package/dashboard/dist/assets/EmptyState-BygtU-Rh.js.map +0 -1
- package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js.map +0 -1
- package/dashboard/dist/assets/EventTable-CmFhswLW.js +0 -2
- package/dashboard/dist/assets/FilterBar-BQNzsd3A.js +0 -2
- package/dashboard/dist/assets/ListToolbar-OWOn-HiC.js +0 -2
- package/dashboard/dist/assets/McpOverview-OkEzvClD.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-DMeiG4i_.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js.map +0 -1
- package/dashboard/dist/assets/Modal-Dir9Rlnx.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-OqWC6Azy.js +0 -2
- package/dashboard/dist/assets/PageHeader-FJIemmrC.js +0 -2
- package/dashboard/dist/assets/PageHeader-FJIemmrC.js.map +0 -1
- package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-C7D5d_HY.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-DZIP6grw.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js.map +0 -1
- package/dashboard/dist/assets/RolePill-D6nMxMvp.js +0 -2
- package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +0 -2
- package/dashboard/dist/assets/RolesPage-CwLnJFhy.js.map +0 -1
- package/dashboard/dist/assets/RowActions-JqgAB0p3.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +0 -2
- package/dashboard/dist/assets/StatCard-B-WLhOaH.js +0 -2
- package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js +0 -2
- package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js.map +0 -1
- package/dashboard/dist/assets/StepIndicator-D9Xvdf18.js +0 -2
- package/dashboard/dist/assets/StickyPagination-CJHMzYJj.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +0 -1
- package/dashboard/dist/assets/TagInput-DcPnUnSJ.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js +0 -2
- package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js.map +0 -1
- package/dashboard/dist/assets/TasksListPage-DeewV4Gp.js +0 -2
- package/dashboard/dist/assets/TimeAgo-DJZq-e4R.js +0 -2
- package/dashboard/dist/assets/TimestampCell-Dx5uwGfS.js +0 -2
- package/dashboard/dist/assets/UserName-CnGk7MgL.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-CPQ0fIwf.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-BrD5d1AG.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-lBp2E6rN.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +0 -1
- package/dashboard/dist/assets/escalation-BYhLYHBz.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DjJyuC1g.js +0 -2
- package/dashboard/dist/assets/helpers-CQG3Rh2y.js +0 -2
- package/dashboard/dist/assets/index-2nBhR7Dg.js +0 -2
- package/dashboard/dist/assets/index-2nBhR7Dg.js.map +0 -1
- package/dashboard/dist/assets/index-4IUoh_hd.js +0 -2
- package/dashboard/dist/assets/index-4IUoh_hd.js.map +0 -1
- package/dashboard/dist/assets/index-B2CqPzLK.js +0 -2
- package/dashboard/dist/assets/index-B2CqPzLK.js.map +0 -1
- package/dashboard/dist/assets/index-B78xalb4.js +0 -2
- package/dashboard/dist/assets/index-B78xalb4.js.map +0 -1
- package/dashboard/dist/assets/index-BI8r69O_.js +0 -2
- package/dashboard/dist/assets/index-BI8r69O_.js.map +0 -1
- package/dashboard/dist/assets/index-C5TUqJu0.css +0 -1
- package/dashboard/dist/assets/index-CUqCBBZG.js +0 -6
- package/dashboard/dist/assets/index-CUqCBBZG.js.map +0 -1
- package/dashboard/dist/assets/index-D51PaQZY.js +0 -2
- package/dashboard/dist/assets/index-DNtXXy1o.js +0 -2
- package/dashboard/dist/assets/index-DR4qQvlW.js +0 -2
- package/dashboard/dist/assets/index-Dh0PCbR-.js +0 -15
- package/dashboard/dist/assets/index-Dh0PCbR-.js.map +0 -1
- package/dashboard/dist/assets/index-KYpLvJKB.js +0 -5
- package/dashboard/dist/assets/index-sNrqYt0Q.js +0 -281
- package/dashboard/dist/assets/index-sNrqYt0Q.js.map +0 -1
- package/dashboard/dist/assets/mcp-D2XfRh8v.js +0 -2
- package/dashboard/dist/assets/namespaces-BwMljx6f.js +0 -2
- package/dashboard/dist/assets/settings-BCb8eFyA.js +0 -2
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
package/build/services/mcp/db.js
CHANGED
|
@@ -9,7 +9,10 @@ exports.updateMcpServerStatus = updateMcpServerStatus;
|
|
|
9
9
|
exports.listMcpServers = listMcpServers;
|
|
10
10
|
exports.getAutoConnectServers = getAutoConnectServers;
|
|
11
11
|
exports.findServersByTags = findServersByTags;
|
|
12
|
+
exports.seedMcpServer = seedMcpServer;
|
|
13
|
+
exports.cleanStaleBuiltinServers = cleanStaleBuiltinServers;
|
|
12
14
|
const db_1 = require("../../lib/db");
|
|
15
|
+
const logger_1 = require("../../lib/logger");
|
|
13
16
|
const sql_1 = require("./sql");
|
|
14
17
|
async function createMcpServer(input) {
|
|
15
18
|
const pool = (0, db_1.getPool)();
|
|
@@ -149,3 +152,50 @@ async function findServersByTags(tags, match = 'any') {
|
|
|
149
152
|
const { rows } = await pool.query(`SELECT * FROM lt_mcp_servers WHERE tags ${operator} $1::text[] ORDER BY name`, [tags]);
|
|
150
153
|
return rows;
|
|
151
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Seed an MCP server at startup (insert-if-absent).
|
|
157
|
+
* DB is the source of truth — if the row already exists, log drift warnings
|
|
158
|
+
* but do not overwrite. Returns true if inserted, false if already existed.
|
|
159
|
+
*/
|
|
160
|
+
async function seedMcpServer(input) {
|
|
161
|
+
const pool = (0, db_1.getPool)();
|
|
162
|
+
const { rowCount } = await pool.query(sql_1.SEED_MCP_SERVER, [
|
|
163
|
+
input.name,
|
|
164
|
+
input.description || null,
|
|
165
|
+
'stdio',
|
|
166
|
+
JSON.stringify({ builtin: true, process: 'in-memory' }),
|
|
167
|
+
JSON.stringify(input.toolManifest || []),
|
|
168
|
+
JSON.stringify({ builtin: true }),
|
|
169
|
+
input.tags || [],
|
|
170
|
+
input.compileHints || null,
|
|
171
|
+
input.credentialProviders || [],
|
|
172
|
+
]);
|
|
173
|
+
const inserted = (rowCount ?? 0) > 0;
|
|
174
|
+
if (!inserted) {
|
|
175
|
+
// Drift detection
|
|
176
|
+
const existing = await getMcpServerByName(input.name);
|
|
177
|
+
if (existing) {
|
|
178
|
+
const drifts = [];
|
|
179
|
+
if (input.description && existing.description !== input.description)
|
|
180
|
+
drifts.push('description');
|
|
181
|
+
if (input.compileHints && existing.compile_hints !== input.compileHints)
|
|
182
|
+
drifts.push('compile_hints');
|
|
183
|
+
if (JSON.stringify(input.tags || []) !== JSON.stringify(existing.tags || []))
|
|
184
|
+
drifts.push('tags');
|
|
185
|
+
if (drifts.length) {
|
|
186
|
+
logger_1.loggerRegistry.warn(`[long-tail] MCP server drift: ${input.name} — ${drifts.join(', ')} differ between code and DB`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return inserted;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Remove builtin MCP servers that are no longer declared in factory config.
|
|
194
|
+
*/
|
|
195
|
+
async function cleanStaleBuiltinServers(activeNames) {
|
|
196
|
+
const pool = (0, db_1.getPool)();
|
|
197
|
+
const { rows } = await pool.query(sql_1.DELETE_STALE_BUILTIN_SERVERS, [activeNames]);
|
|
198
|
+
for (const row of rows) {
|
|
199
|
+
logger_1.loggerRegistry.info(`[long-tail] removed stale builtin MCP server: ${row.name}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
@@ -15,4 +15,7 @@ export declare const HEALTH_COMPILED_WORKFLOWS = "\n SELECT\n COUNT(*)::int
|
|
|
15
15
|
export declare const HEALTH_WORKFLOW_CONFIGS = "\n SELECT workflow_type, task_queue, description\n FROM lt_config_workflows ORDER BY workflow_type";
|
|
16
16
|
export declare const HEALTH_DURABLE_WORKFLOWS = "\n SELECT\n COALESCE(entity, '_internal') AS entity,\n COUNT(*)::int AS total,\n COUNT(*) FILTER (WHERE status = 0)::int AS active,\n COUNT(*) FILTER (WHERE status = 1)::int AS completed\n FROM durable.jobs\n WHERE entity IS NOT NULL AND entity != ''\n GROUP BY entity\n ORDER BY entity";
|
|
17
17
|
export declare const DELETE_STALE_BUILTIN_SERVERS = "\n DELETE FROM lt_mcp_servers\n WHERE (metadata->>'builtin')::boolean = true\n AND name != ALL($1)\n RETURNING name";
|
|
18
|
-
|
|
18
|
+
/** Upsert — used by dashboard/API writes (overwrites intentionally). */
|
|
19
|
+
export declare const UPSERT_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)\n VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())\n ON CONFLICT (name) DO UPDATE SET\n tool_manifest = EXCLUDED.tool_manifest,\n metadata = EXCLUDED.metadata,\n description = EXCLUDED.description,\n tags = EXCLUDED.tags,\n compile_hints = EXCLUDED.compile_hints,\n credential_providers = EXCLUDED.credential_providers,\n status = 'connected',\n last_connected_at = NOW()";
|
|
20
|
+
/** Seed — insert-if-absent. DB is source of truth after first boot. */
|
|
21
|
+
export declare const SEED_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)\n VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())\n ON CONFLICT (name) DO NOTHING";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── MCP server CRUD ────────────────────────────────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.SEED_MCP_SERVER = exports.DELETE_STALE_BUILTIN_SERVERS = exports.HEALTH_DURABLE_WORKFLOWS = exports.HEALTH_WORKFLOW_CONFIGS = exports.HEALTH_COMPILED_WORKFLOWS = exports.HEALTH_MCP_SERVER_LIST = exports.HEALTH_MCP_SERVERS = exports.HEALTH_RECENT_ACTIVITY = exports.HEALTH_ACTIVE_WORKFLOW_TYPES = exports.HEALTH_ESCALATION_COUNTS = exports.HEALTH_TASK_COUNTS = exports.GET_AUTO_CONNECT_SERVERS = exports.UPDATE_STATUS = exports.UPDATE_STATUS_CONNECTED = exports.DELETE_MCP_SERVER = exports.GET_MCP_SERVER_BY_NAME = exports.GET_MCP_SERVER = exports.CREATE_MCP_SERVER = void 0;
|
|
4
|
+
exports.SEED_MCP_SERVER = exports.UPSERT_MCP_SERVER = exports.DELETE_STALE_BUILTIN_SERVERS = exports.HEALTH_DURABLE_WORKFLOWS = exports.HEALTH_WORKFLOW_CONFIGS = exports.HEALTH_COMPILED_WORKFLOWS = exports.HEALTH_MCP_SERVER_LIST = exports.HEALTH_MCP_SERVERS = exports.HEALTH_RECENT_ACTIVITY = exports.HEALTH_ACTIVE_WORKFLOW_TYPES = exports.HEALTH_ESCALATION_COUNTS = exports.HEALTH_TASK_COUNTS = exports.GET_AUTO_CONNECT_SERVERS = exports.UPDATE_STATUS = exports.UPDATE_STATUS_CONNECTED = exports.DELETE_MCP_SERVER = exports.GET_MCP_SERVER_BY_NAME = exports.GET_MCP_SERVER = exports.CREATE_MCP_SERVER = void 0;
|
|
5
5
|
exports.CREATE_MCP_SERVER = `
|
|
6
6
|
INSERT INTO lt_mcp_servers
|
|
7
7
|
(name, description, transport_type, transport_config, auto_connect, metadata, tags, compile_hints, credential_providers)
|
|
@@ -77,7 +77,8 @@ exports.DELETE_STALE_BUILTIN_SERVERS = `
|
|
|
77
77
|
WHERE (metadata->>'builtin')::boolean = true
|
|
78
78
|
AND name != ALL($1)
|
|
79
79
|
RETURNING name`;
|
|
80
|
-
|
|
80
|
+
/** Upsert — used by dashboard/API writes (overwrites intentionally). */
|
|
81
|
+
exports.UPSERT_MCP_SERVER = `
|
|
81
82
|
INSERT INTO lt_mcp_servers
|
|
82
83
|
(name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)
|
|
83
84
|
VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())
|
|
@@ -90,3 +91,9 @@ exports.SEED_MCP_SERVER = `
|
|
|
90
91
|
credential_providers = EXCLUDED.credential_providers,
|
|
91
92
|
status = 'connected',
|
|
92
93
|
last_connected_at = NOW()`;
|
|
94
|
+
/** Seed — insert-if-absent. DB is source of truth after first boot. */
|
|
95
|
+
exports.SEED_MCP_SERVER = `
|
|
96
|
+
INSERT INTO lt_mcp_servers
|
|
97
|
+
(name, description, transport_type, transport_config, auto_connect, status, tool_manifest, metadata, tags, compile_hints, credential_providers, last_connected_at)
|
|
98
|
+
VALUES ($1, $2, $3, $4, true, 'connected', $5, $6, $7, $8, $9, NOW())
|
|
99
|
+
ON CONFLICT (name) DO NOTHING`;
|
|
@@ -57,11 +57,14 @@ function initializeOAuth(config) {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
// Auto-detect providers from environment variables
|
|
60
|
+
const port = process.env.PORT || '3000';
|
|
61
|
+
const baseUrl = process.env.BASE_URL || `http://localhost:${port}`;
|
|
60
62
|
for (const { provider, idVar, secretVar } of ENV_PROVIDERS) {
|
|
61
63
|
const clientId = process.env[idVar];
|
|
62
64
|
const clientSecret = process.env[secretVar];
|
|
63
65
|
if (clientId && clientSecret && !(0, providers_1.getProvider)(provider)) {
|
|
64
|
-
|
|
66
|
+
const redirectUri = `${baseUrl}/api/auth/oauth/${provider}/callback`;
|
|
67
|
+
(0, providers_1.registerProvider)({ provider, clientId, clientSecret, scopes: [], redirectUri });
|
|
65
68
|
}
|
|
66
69
|
}
|
|
67
70
|
// Register built-in credential providers (API key paste flow, no real OAuth)
|
|
@@ -48,8 +48,13 @@ function createGoogleHandler(cfg) {
|
|
|
48
48
|
config: cfg,
|
|
49
49
|
async createAuthorizationURL(state, codeVerifier) {
|
|
50
50
|
const google = await getClient();
|
|
51
|
-
const scopes = cfg.scopes.length > 0
|
|
52
|
-
|
|
51
|
+
const scopes = cfg.scopes.length > 0
|
|
52
|
+
? cfg.scopes
|
|
53
|
+
: ['openid', 'email', 'profile', 'https://www.googleapis.com/auth/gmail.readonly'];
|
|
54
|
+
const url = google.createAuthorizationURL(state, codeVerifier, scopes);
|
|
55
|
+
url.searchParams.set('access_type', 'offline');
|
|
56
|
+
url.searchParams.set('prompt', 'consent');
|
|
57
|
+
return url;
|
|
53
58
|
},
|
|
54
59
|
async validateAuthorizationCode(code, codeVerifier) {
|
|
55
60
|
const google = await getClient();
|
|
@@ -131,6 +131,10 @@ async function executeLT(options) {
|
|
|
131
131
|
if (envelope) {
|
|
132
132
|
const userId = envelope.lt?.userId || orchCtx?.userId;
|
|
133
133
|
envelope.lt = { ...envelope.lt, taskId, originId, parentId, userId };
|
|
134
|
+
// Propagate certified flag from parent to child
|
|
135
|
+
if (envelope0?.metadata?.certified === true && envelope.metadata) {
|
|
136
|
+
envelope.metadata.certified = true;
|
|
137
|
+
}
|
|
134
138
|
}
|
|
135
139
|
// 5. Start child workflow (fire-and-forget — only the start is awaited)
|
|
136
140
|
await hotmesh_1.Durable.workflow.startChild({
|
|
@@ -140,6 +144,7 @@ async function executeLT(options) {
|
|
|
140
144
|
workflowId: childWorkflowId,
|
|
141
145
|
expire: expire || defaults_1.JOB_EXPIRE_SECS,
|
|
142
146
|
entity: workflowName,
|
|
147
|
+
signalIn: false,
|
|
143
148
|
});
|
|
144
149
|
// 6. Wait for the child's interceptor to signal back with the result
|
|
145
150
|
const result = await hotmesh_1.Durable.workflow.condition(signalId);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CREATE_TASK = "\n INSERT INTO lt_tasks\n (workflow_id, workflow_type, lt_type, task_queue, signal_id,\n parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,\n trace_id, span_id, initiated_by, principal_type, executing_as)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)\n RETURNING *";
|
|
1
|
+
export declare const CREATE_TASK = "\n INSERT INTO lt_tasks\n (workflow_id, workflow_type, lt_type, task_queue, signal_id,\n parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,\n trace_id, span_id, initiated_by, principal_type, executing_as, status)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, COALESCE($17, 'pending'))\n RETURNING *";
|
|
2
2
|
export declare const APPEND_MILESTONES = "\n UPDATE lt_tasks\n SET milestones = milestones || $1::jsonb\n WHERE id = $2\n RETURNING *";
|
|
3
3
|
export declare const GET_TASK = "SELECT * FROM lt_tasks WHERE id = $1";
|
|
4
4
|
export declare const GET_TASK_BY_SIGNAL_ID = "SELECT * FROM lt_tasks WHERE signal_id = $1";
|
|
@@ -11,8 +11,8 @@ exports.CREATE_TASK = `
|
|
|
11
11
|
INSERT INTO lt_tasks
|
|
12
12
|
(workflow_id, workflow_type, lt_type, task_queue, signal_id,
|
|
13
13
|
parent_workflow_id, origin_id, parent_id, envelope, metadata, priority,
|
|
14
|
-
trace_id, span_id, initiated_by, principal_type, executing_as)
|
|
15
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
|
14
|
+
trace_id, span_id, initiated_by, principal_type, executing_as, status)
|
|
15
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, COALESCE($17, 'pending'))
|
|
16
16
|
RETURNING *`;
|
|
17
17
|
exports.APPEND_MILESTONES = `
|
|
18
18
|
UPDATE lt_tasks
|
|
@@ -23,6 +23,8 @@ export interface CreateTaskInput {
|
|
|
23
23
|
principal_type?: string;
|
|
24
24
|
/** Executing principal (bot external_id) when proxy invocation is used. */
|
|
25
25
|
executing_as?: string;
|
|
26
|
+
/** Initial status. Default: 'pending'. */
|
|
27
|
+
status?: string;
|
|
26
28
|
}
|
|
27
29
|
export interface UpdateTaskInput {
|
|
28
30
|
status?: LTTaskStatus;
|
|
@@ -17,10 +17,12 @@ function getRegisteredWorkers() {
|
|
|
17
17
|
/** System workflows excluded from the overview by default. */
|
|
18
18
|
exports.SYSTEM_WORKFLOWS = new Set([
|
|
19
19
|
'mcpQuery',
|
|
20
|
-
'mcpDeterministic',
|
|
21
20
|
'mcpQueryRouter',
|
|
21
|
+
'mcpDeterministic',
|
|
22
22
|
'mcpTriage',
|
|
23
23
|
'mcpTriageRouter',
|
|
24
24
|
'mcpTriageDeterministic',
|
|
25
|
+
'mcpWorkflowBuilder',
|
|
26
|
+
'mcpWorkflowPlanner',
|
|
25
27
|
'insightQuery',
|
|
26
28
|
]);
|
|
@@ -91,7 +91,13 @@ async function invokeWorkflow(input) {
|
|
|
91
91
|
}
|
|
92
92
|
// 4. Resolve principals and build envelope
|
|
93
93
|
const wfConfig = await configService.getWorkflowConfig(workflowType);
|
|
94
|
-
const
|
|
94
|
+
const isCertified = !!(wfConfig &&
|
|
95
|
+
((wfConfig.roles?.length ?? 0) > 0 || (wfConfig.consumes?.length ?? 0) > 0));
|
|
96
|
+
const resolvedMetadata = { ...(metadata ?? {}) };
|
|
97
|
+
if (isCertified && resolvedMetadata.certified !== false) {
|
|
98
|
+
resolvedMetadata.certified = true;
|
|
99
|
+
}
|
|
100
|
+
const envelope = await buildEnvelope(data, resolvedMetadata, auth.userId, executeAsOverride, wfConfig?.execute_as ?? undefined);
|
|
95
101
|
// 5. Start workflow — caller options pass through to Durable client
|
|
96
102
|
const client = (0, workers_1.createClient)();
|
|
97
103
|
const callerOpts = input.options ?? {};
|
|
@@ -104,6 +110,7 @@ async function invokeWorkflow(input) {
|
|
|
104
110
|
workflowId,
|
|
105
111
|
expire: callerOpts.expire ?? defaults_1.JOB_EXPIRE_SECS,
|
|
106
112
|
entity: callerOpts.entity ?? workflowType,
|
|
113
|
+
signalIn: false,
|
|
107
114
|
});
|
|
108
115
|
return { workflowId };
|
|
109
116
|
}
|
package/build/start/workers.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LTStartConfig } from '../types/startup';
|
|
1
|
+
import type { LTStartConfig, LTWorkerConfig } from '../types/startup';
|
|
2
2
|
type WorkerEntry = {
|
|
3
3
|
taskQueue: string;
|
|
4
4
|
workflow: (...args: any[]) => any;
|
|
@@ -6,6 +6,7 @@ type WorkerEntry = {
|
|
|
6
6
|
readonly?: boolean;
|
|
7
7
|
retry?: Record<string, unknown>;
|
|
8
8
|
};
|
|
9
|
+
config?: LTWorkerConfig;
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
11
12
|
* Build the connection descriptor used by HotMesh / Durable.
|
package/build/start/workers.js
CHANGED
|
@@ -132,6 +132,39 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
132
132
|
(0, registry_1.registerWorker)(w.workflow.name, w.taskQueue);
|
|
133
133
|
}
|
|
134
134
|
logger_1.loggerRegistry.info(`[long-tail] workers started on queues: ${workers.map((w) => w.taskQueue).join(', ')}`);
|
|
135
|
+
// Seed workflow configs (insert-if-absent — DB is source of truth)
|
|
136
|
+
const workersWithConfig = workers.filter((w) => w.config);
|
|
137
|
+
if (workersWithConfig.length) {
|
|
138
|
+
const { seedWorkflowConfig } = await Promise.resolve().then(() => __importStar(require('../services/config/write')));
|
|
139
|
+
const { ltConfig } = await Promise.resolve().then(() => __importStar(require('../modules/ltconfig')));
|
|
140
|
+
for (const w of workersWithConfig) {
|
|
141
|
+
const workflowType = w.workflow.name;
|
|
142
|
+
const c = w.config;
|
|
143
|
+
try {
|
|
144
|
+
const inserted = await seedWorkflowConfig({
|
|
145
|
+
workflow_type: workflowType,
|
|
146
|
+
task_queue: w.taskQueue,
|
|
147
|
+
invocable: c.invocable ?? false,
|
|
148
|
+
default_role: c.defaultRole ?? 'reviewer',
|
|
149
|
+
description: c.description ?? null,
|
|
150
|
+
roles: c.roles ?? [],
|
|
151
|
+
invocation_roles: c.invocationRoles ?? [],
|
|
152
|
+
consumes: c.consumes ?? [],
|
|
153
|
+
tool_tags: c.toolTags ?? [],
|
|
154
|
+
envelope_schema: c.envelopeSchema ?? null,
|
|
155
|
+
resolver_schema: c.resolverSchema ?? null,
|
|
156
|
+
cron_schedule: c.cronSchedule ?? null,
|
|
157
|
+
execute_as: c.executeAs ?? null,
|
|
158
|
+
});
|
|
159
|
+
if (inserted)
|
|
160
|
+
logger_1.loggerRegistry.info(`[long-tail] config seeded: ${workflowType}`);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
logger_1.loggerRegistry.warn(`[long-tail] config seed failed for ${workflowType}: ${err.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
ltConfig.invalidate();
|
|
167
|
+
}
|
|
135
168
|
// Start maintenance cron
|
|
136
169
|
if (maintenance_1.maintenanceRegistry.hasConfig) {
|
|
137
170
|
await maintenance_1.maintenanceRegistry.connect();
|
|
@@ -145,15 +178,45 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
145
178
|
logger_1.loggerRegistry.info('[long-tail] MCP adapter connected');
|
|
146
179
|
}
|
|
147
180
|
// Register MCP server factories: built-in (from system/) + user-provided
|
|
181
|
+
// Both system and user factories can carry inline config for DB seeding.
|
|
148
182
|
const { registerBuiltinServer } = await Promise.resolve().then(() => __importStar(require('../services/mcp/client')));
|
|
183
|
+
const { seedMcpServer, cleanStaleBuiltinServers } = await Promise.resolve().then(() => __importStar(require('../services/mcp/db')));
|
|
184
|
+
const userFactories = startConfig.mcp?.serverFactories ?? {};
|
|
185
|
+
// Resolve user factories — plain function or { factory, config }
|
|
186
|
+
const resolvedUserFactories = {};
|
|
187
|
+
for (const [name, entry] of Object.entries(userFactories)) {
|
|
188
|
+
if (typeof entry === 'function') {
|
|
189
|
+
resolvedUserFactories[name] = { factory: entry };
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
resolvedUserFactories[name] = entry;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Merge system (always have config) + user factories
|
|
149
196
|
const allFactories = {
|
|
150
197
|
...builtinMcpServerFactories,
|
|
151
|
-
...
|
|
198
|
+
...resolvedUserFactories,
|
|
152
199
|
};
|
|
153
|
-
|
|
154
|
-
|
|
200
|
+
// 1. Register all factories (runtime — always applied)
|
|
201
|
+
for (const [name, entry] of Object.entries(allFactories)) {
|
|
202
|
+
registerBuiltinServer(name, entry.factory);
|
|
155
203
|
}
|
|
156
204
|
logger_1.loggerRegistry.info(`[long-tail] ${Object.keys(allFactories).length} MCP server factories registered`);
|
|
205
|
+
// 2. Seed MCP server configs (insert-if-absent + drift log)
|
|
206
|
+
for (const [name, entry] of Object.entries(allFactories)) {
|
|
207
|
+
if (entry.config) {
|
|
208
|
+
try {
|
|
209
|
+
const inserted = await seedMcpServer({ name, ...entry.config });
|
|
210
|
+
if (inserted)
|
|
211
|
+
logger_1.loggerRegistry.info(`[long-tail] MCP server seeded: ${name}`);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
logger_1.loggerRegistry.warn(`[long-tail] MCP server seed failed for ${name}: ${err.message}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// 3. Clean stale builtin servers no longer in factory list
|
|
219
|
+
await cleanStaleBuiltinServers(Object.keys(allFactories));
|
|
157
220
|
// Register workers for active YAML (deterministic) workflows
|
|
158
221
|
await yamlWorkflowWorkers.registerAllActiveWorkers();
|
|
159
222
|
}
|
|
@@ -163,9 +226,6 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
163
226
|
await events_1.eventRegistry.connect();
|
|
164
227
|
logger_1.loggerRegistry.info('[long-tail] event adapters connected');
|
|
165
228
|
}
|
|
166
|
-
// Seed system MCP servers (always)
|
|
167
|
-
const { seedSystemMcpServers } = await Promise.resolve().then(() => __importStar(require('../system/seed')));
|
|
168
|
-
await seedSystemMcpServers();
|
|
169
229
|
// Ensure system bot account exists for cron/system-initiated workflows
|
|
170
230
|
const { ensureSystemBot } = await Promise.resolve().then(() => __importStar(require('../services/iam/bots')));
|
|
171
231
|
await ensureSystemBot().catch((err) => logger_1.loggerRegistry.warn(`[long-tail] system bot seed error: ${err.message}`));
|
package/build/system/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System workers and built-in MCP server factories.
|
|
3
3
|
*
|
|
4
|
-
* All
|
|
5
|
-
*
|
|
4
|
+
* All declarations carry inline `config` that seeds the DB on first boot.
|
|
5
|
+
* DB is the source of truth after seeding — startup never overwrites.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
import type { LTWorkerConfig, LTMcpServerConfig } from '../types/startup';
|
|
8
|
+
export type SystemWorkerEntry = {
|
|
8
9
|
taskQueue: string;
|
|
9
10
|
workflow: (...args: any[]) => any;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
config?: LTWorkerConfig;
|
|
12
|
+
};
|
|
13
|
+
export declare function getSystemWorkers(): SystemWorkerEntry[];
|
|
14
|
+
export type McpServerFactoryEntry = {
|
|
15
|
+
factory: () => Promise<any>;
|
|
16
|
+
config: LTMcpServerConfig;
|
|
17
|
+
};
|
|
18
|
+
export declare const builtinMcpServerFactories: Record<string, McpServerFactoryEntry>;
|