@hotmeshio/long-tail 0.1.21 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/agent-subscriptions.d.ts +15 -0
- package/build/api/agent-subscriptions.js +82 -0
- package/build/api/agents.d.ts +21 -0
- package/build/api/agents.js +100 -0
- package/build/api/capabilities.d.ts +2 -0
- package/build/api/capabilities.js +76 -0
- package/build/index.d.ts +2 -2
- package/build/index.js +5 -2
- package/build/lib/db/schemas/003_agents.sql +46 -0
- package/build/lib/db/schemas/004_agent_subscriptions.sql +38 -0
- package/build/lib/db/schemas/005_server_category.sql +6 -0
- package/build/lib/db/schemas/006_agent_sub_unique.sql +9 -0
- package/build/lib/events/callback.d.ts +4 -18
- package/build/lib/events/callback.js +8 -45
- package/build/lib/events/matching.d.ts +13 -0
- package/build/lib/events/matching.js +31 -0
- package/build/lib/events/publish.d.ts +20 -0
- package/build/lib/events/publish.js +33 -0
- package/build/routes/agents.d.ts +2 -0
- package/build/routes/agents.js +130 -0
- package/build/routes/capabilities.d.ts +2 -0
- package/build/routes/capabilities.js +47 -0
- package/build/routes/index.js +4 -0
- package/build/sdk/index.d.ts +13 -0
- package/build/sdk/index.js +14 -0
- package/build/services/agent/index.d.ts +32 -0
- package/build/services/agent/index.js +195 -0
- package/build/services/agent/input-mapper.d.ts +18 -0
- package/build/services/agent/input-mapper.js +51 -0
- package/build/services/agent/sql.d.ts +10 -0
- package/build/services/agent/sql.js +70 -0
- package/build/services/agent/subscription-sql.d.ts +7 -0
- package/build/services/agent/subscription-sql.js +49 -0
- package/build/services/agent/subscriptions.d.ts +30 -0
- package/build/services/agent/subscriptions.js +82 -0
- package/build/services/agent/trigger-registry.d.ts +45 -0
- package/build/services/agent/trigger-registry.js +232 -0
- package/build/services/cron/index.d.ts +17 -1
- package/build/services/cron/index.js +152 -4
- package/build/services/insight/index.js +11 -6
- package/build/services/mcp/db.d.ts +1 -0
- package/build/services/mcp/db.js +1 -0
- package/build/services/mcp/sql.d.ts +1 -1
- package/build/services/mcp/sql.js +2 -2
- package/build/start/workers.js +67 -0
- package/build/system/activities/knowledge.js +9 -2
- package/build/system/index.d.ts +2 -1
- package/build/system/index.js +93 -1
- package/build/system/mcp-servers/events.d.ts +5 -0
- package/build/system/mcp-servers/events.js +104 -0
- package/build/system/mcp-servers/playwright/schemas.d.ts +6 -6
- package/build/system/seed/tool-manifests-events.d.ts +37 -0
- package/build/system/seed/tool-manifests-events.js +30 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/agent.d.ts +72 -0
- package/build/types/agent.js +6 -0
- package/build/types/events.d.ts +7 -1
- package/build/types/index.d.ts +2 -1
- package/build/types/mcp.d.ts +2 -0
- package/build/types/startup.d.ts +37 -0
- package/dashboard/dist/assets/{AdminDashboard-CsTOErp1.js → AdminDashboard-DThDjhN5.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-CsTOErp1.js.map → AdminDashboard-DThDjhN5.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js +13 -0
- package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js.map +1 -0
- package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage-pKfjHe4u.js +2 -0
- package/dashboard/dist/assets/AgentsPage-pKfjHe4u.js.map +1 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-BqQA3IJp.js → AvailableEscalationsPage-BFzHVnPh.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-BqQA3IJp.js.map → AvailableEscalationsPage-BFzHVnPh.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-Zxf7Npew.js +2 -0
- package/dashboard/dist/assets/BotPicker-Zxf7Npew.js.map +1 -0
- package/dashboard/dist/assets/CapabilitiesPage-6zOJ12cB.js +2 -0
- package/dashboard/dist/assets/CapabilitiesPage-6zOJ12cB.js.map +1 -0
- package/dashboard/dist/assets/{CollapsibleSection-CRtHQsAv.js → CollapsibleSection-DvBx4tmw.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-CRtHQsAv.js.map → CollapsibleSection-DvBx4tmw.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-C7XT1bnO.js → CredentialsPage-C5f-Bg-o.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-C7XT1bnO.js.map → CredentialsPage-C5f-Bg-o.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-CAVTt5AG.js +2 -0
- package/dashboard/dist/assets/CronLabel-CAVTt5AG.js.map +1 -0
- package/dashboard/dist/assets/{CustomDurationPicker-BABUv1V2.js → CustomDurationPicker-Bk7D38y7.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-BABUv1V2.js.map → CustomDurationPicker-Bk7D38y7.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-D3-wSEf0.js → DataTable-D9yuBv0w.js} +2 -2
- package/dashboard/dist/assets/{DataTable-D3-wSEf0.js.map → DataTable-D9yuBv0w.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-DHKmMqRA.js → DropZone-2mGyDo1P.js} +2 -2
- package/dashboard/dist/assets/{DropZone-DHKmMqRA.js.map → DropZone-2mGyDo1P.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-DrJif03B.js → ElapsedCell-BpJjG1s-.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-DrJif03B.js.map → ElapsedCell-BpJjG1s-.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-H6CwfeR-.js → EscalationsOverview-DPNd1vjF.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-H6CwfeR-.js.map → EscalationsOverview-DPNd1vjF.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-Dh3_9DAY.js → EventTable-BoP8KC3M.js} +2 -2
- package/dashboard/dist/assets/{EventTable-Dh3_9DAY.js.map → EventTable-BoP8KC3M.js.map} +1 -1
- package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +2 -0
- package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js.map +1 -0
- package/dashboard/dist/assets/HomePage-h8I5ZolJ.js +2 -0
- package/dashboard/dist/assets/HomePage-h8I5ZolJ.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-BaYIIsAt.js +2 -0
- package/dashboard/dist/assets/ListToolbar-BaYIIsAt.js.map +1 -0
- package/dashboard/dist/assets/{McpOverview-ChLa6Gl7.js → McpOverview-BhZ3lSO6.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-ChLa6Gl7.js.map → McpOverview-BhZ3lSO6.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-DVgcKa61.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-DVgcKa61.js.map +1 -0
- package/dashboard/dist/assets/{McpQueryPage-D2DmDFPu.js → McpQueryPage-CTWOBqKT.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-D2DmDFPu.js.map → McpQueryPage-CTWOBqKT.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-ERVuNEEK.js → McpRunDetailPage-CIpZJWRB.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-ERVuNEEK.js.map → McpRunDetailPage-CIpZJWRB.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-B3zpzPBf.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-B3zpzPBf.js.map +1 -0
- package/dashboard/dist/assets/{OperatorDashboard-CJm_BTPU.js → OperatorDashboard-l2hVlIF3.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-CJm_BTPU.js.map → OperatorDashboard-l2hVlIF3.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-B-SN5GZ2.js → PageHeader-DLjHNYHX.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-B-SN5GZ2.js.map → PageHeader-DLjHNYHX.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BZ3AGT5s.js → PageHeaderWithStats-Oljg3n4j.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BZ3AGT5s.js.map → PageHeaderWithStats-Oljg3n4j.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-vfnCDyQK.js → ProcessDetailPage-BJ1rhK9_.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-vfnCDyQK.js.map → ProcessDetailPage-BJ1rhK9_.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DcAN6AJK.js → ProcessesListPage-IQKk_qkn.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DcAN6AJK.js.map → ProcessesListPage-IQKk_qkn.js.map} +1 -1
- package/dashboard/dist/assets/RolePill-Bp10-WfX.js +2 -0
- package/dashboard/dist/assets/RolePill-Bp10-WfX.js.map +1 -0
- package/dashboard/dist/assets/{RolesPage-DYSt2aAr.js → RolesPage-Dwcirtze.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-DYSt2aAr.js.map → RolesPage-Dwcirtze.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-D4Fu8LVG.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-D4Fu8LVG.js.map +1 -0
- package/dashboard/dist/assets/ServerName-C9lUCFYb.js +2 -0
- package/dashboard/dist/assets/ServerName-C9lUCFYb.js.map +1 -0
- package/dashboard/dist/assets/SwimlaneTimeline-DQqgvwmC.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-DQqgvwmC.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-DftaRHDV.js → TagInput-Dkljw_WI.js} +2 -2
- package/dashboard/dist/assets/{TagInput-DftaRHDV.js.map → TagInput-Dkljw_WI.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BoA-cfwW.js → TaskDetailPage-AHBMSHAA.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BoA-cfwW.js.map → TaskDetailPage-AHBMSHAA.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Ce8KlXtR.js → TaskQueuePill-DPwm25Cc.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Ce8KlXtR.js.map → TaskQueuePill-DPwm25Cc.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-g6XIbhju.js → TasksListPage-CnJdTsoX.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-g6XIbhju.js.map → TasksListPage-CnJdTsoX.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BihIwEbB.js → TimeAgo-C3A1r1Cv.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BihIwEbB.js.map → TimeAgo-C3A1r1Cv.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-GOFcvE-i.js → TimestampCell-DPfLR6bZ.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-GOFcvE-i.js.map → TimestampCell-DPfLR6bZ.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +2 -0
- package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js.map +1 -0
- package/dashboard/dist/assets/ToolTestPanel-CwZ9zkD-.js +2 -0
- package/dashboard/dist/assets/ToolTestPanel-CwZ9zkD-.js.map +1 -0
- package/dashboard/dist/assets/{UserName-CmMVt4vS.js → UserName-ClO0a6Ar.js} +2 -2
- package/dashboard/dist/assets/{UserName-CmMVt4vS.js.map → UserName-ClO0a6Ar.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-soRFz_30.js → WorkflowExecutionPage-B-2aHAHK.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-soRFz_30.js.map → WorkflowExecutionPage-B-2aHAHK.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-DUDDyBsj.js → WorkflowPill-BbgVTGgI.js} +2 -2
- package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-NtiQKl_i.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-NtiQKl_i.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsOverview-z3Ztiz1y.js → WorkflowsOverview-BQip_pvL.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-z3Ztiz1y.js.map → WorkflowsOverview-BQip_pvL.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js.map +1 -0
- package/dashboard/dist/assets/agents-5APoyRH8.js +2 -0
- package/dashboard/dist/assets/agents-5APoyRH8.js.map +1 -0
- package/dashboard/dist/assets/{bots-BZPXDh_y.js → bots-BoDH-pS7.js} +2 -2
- package/dashboard/dist/assets/{bots-BZPXDh_y.js.map → bots-BoDH-pS7.js.map} +1 -1
- package/dashboard/dist/assets/controlplane-D4NhQux3.js +2 -0
- package/dashboard/dist/assets/controlplane-D4NhQux3.js.map +1 -0
- package/dashboard/dist/assets/{escalation-DBUIq1Z4.js → escalation-BD2wtAt2.js} +2 -2
- package/dashboard/dist/assets/{escalation-DBUIq1Z4.js.map → escalation-BD2wtAt2.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-DjHcNgjo.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-DL4zsR8Y.js.map → escalation-columns-DjHcNgjo.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-D50KFFkI.js → helpers-D1ZPA4kI.js} +2 -2
- package/dashboard/dist/assets/{helpers-D50KFFkI.js.map → helpers-D1ZPA4kI.js.map} +1 -1
- package/dashboard/dist/assets/index-B-Z9TisY.js +2 -0
- package/dashboard/dist/assets/index-B-Z9TisY.js.map +1 -0
- package/dashboard/dist/assets/index-B6vQeWwf.js +6 -0
- package/dashboard/dist/assets/index-B6vQeWwf.js.map +1 -0
- package/dashboard/dist/assets/{index-D9_hZmsW.js → index-BD2vW8MG.js} +3 -3
- package/dashboard/dist/assets/{index-D9_hZmsW.js.map → index-BD2vW8MG.js.map} +1 -1
- package/dashboard/dist/assets/index-BciXgS35.css +1 -0
- package/dashboard/dist/assets/index-BgJR7kwH.js +2 -0
- package/dashboard/dist/assets/index-BgJR7kwH.js.map +1 -0
- package/dashboard/dist/assets/index-D9qswqDQ.js +2 -0
- package/dashboard/dist/assets/{index-BpoHVMV7.js.map → index-D9qswqDQ.js.map} +1 -1
- package/dashboard/dist/assets/index-DC7f6rWu.js +2 -0
- package/dashboard/dist/assets/{index-CEnDYJOO.js.map → index-DC7f6rWu.js.map} +1 -1
- package/dashboard/dist/assets/{index-B-jzKfuv.js → index-Zn5XforP.js} +2 -2
- package/dashboard/dist/assets/{index-B-jzKfuv.js.map → index-Zn5XforP.js.map} +1 -1
- package/dashboard/dist/assets/index-_5qNyf9o.js +2 -0
- package/dashboard/dist/assets/index-_5qNyf9o.js.map +1 -0
- package/dashboard/dist/assets/index-_dKxJhey.js +2 -0
- package/dashboard/dist/assets/{index-DzICLMI7.js.map → index-_dKxJhey.js.map} +1 -1
- package/dashboard/dist/assets/index-jp94-YlF.js +2 -0
- package/dashboard/dist/assets/index-jp94-YlF.js.map +1 -0
- package/dashboard/dist/assets/{index-BUjxYyxc.js → index-oGYUhkFa.js} +27 -27
- package/dashboard/dist/assets/index-oGYUhkFa.js.map +1 -0
- package/dashboard/dist/assets/index-qdYsS9h2.js +15 -0
- package/dashboard/dist/assets/index-qdYsS9h2.js.map +1 -0
- package/dashboard/dist/assets/knowledge-DsAU_TGL.js +2 -0
- package/dashboard/dist/assets/knowledge-DsAU_TGL.js.map +1 -0
- package/dashboard/dist/assets/{mcp-D0GrHRFe.js → mcp-CA3OeIyH.js} +2 -2
- package/dashboard/dist/assets/{mcp-D0GrHRFe.js.map → mcp-CA3OeIyH.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-DC5woQn5.js → mcp-query-BgmTDc7h.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-DC5woQn5.js.map → mcp-query-BgmTDc7h.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-CsoVQoPB.js → mcp-runs-C-FK2SyD.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-CsoVQoPB.js.map → mcp-runs-C-FK2SyD.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-unpIb4gX.js → namespaces-B8KNk0Jb.js} +2 -2
- package/dashboard/dist/assets/{namespaces-unpIb4gX.js.map → namespaces-B8KNk0Jb.js.map} +1 -1
- package/dashboard/dist/assets/{roles--kBaFljg.js → roles-BAPy1LU_.js} +2 -2
- package/dashboard/dist/assets/{roles--kBaFljg.js.map → roles-BAPy1LU_.js.map} +1 -1
- package/dashboard/dist/assets/{settings-B96YkawY.js → settings-Da0QSQDH.js} +2 -2
- package/dashboard/dist/assets/{settings-B96YkawY.js.map → settings-Da0QSQDH.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-D_1NCfOZ.js → tasks-BHlTusW0.js} +2 -2
- package/dashboard/dist/assets/{tasks-D_1NCfOZ.js.map → tasks-BHlTusW0.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-DBMdj9vw.js +2 -0
- package/dashboard/dist/assets/useEventHooks-DBMdj9vw.js.map +1 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-D3RQjfzo.js → useYamlActivityEvents-BH_ynR_L.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-D3RQjfzo.js.map → useYamlActivityEvents-BH_ynR_L.js.map} +1 -1
- package/dashboard/dist/assets/{users-e2oatvoj.js → users-C9K2cMyb.js} +2 -2
- package/dashboard/dist/assets/{users-e2oatvoj.js.map → users-C9K2cMyb.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BkK55L-1.js → vendor-icons-E6836lXZ.js} +140 -95
- package/dashboard/dist/assets/vendor-icons-E6836lXZ.js.map +1 -0
- package/dashboard/dist/assets/workflows-B2rsLjoh.js +2 -0
- package/dashboard/dist/assets/workflows-B2rsLjoh.js.map +1 -0
- package/dashboard/dist/assets/{yaml-workflows-CAKU7LUu.js → yaml-workflows-BLiTvQM2.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-CAKU7LUu.js.map → yaml-workflows-BLiTvQM2.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/agents.md +160 -0
- package/docs/api/http/agents.md +201 -0
- package/docs/api/sdk/agents.md +138 -0
- package/docs/story.md +101 -78
- package/package.json +3 -3
- package/dashboard/dist/assets/BotPicker-C2xR1xay.js +0 -2
- package/dashboard/dist/assets/BotPicker-C2xR1xay.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +0 -2
- package/dashboard/dist/assets/ListToolbar-CyEkulVR.js.map +0 -1
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +0 -1
- package/dashboard/dist/assets/RolePill-BhVC0cc3.js +0 -2
- package/dashboard/dist/assets/RolePill-BhVC0cc3.js.map +0 -1
- package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js.map +0 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +0 -2
- package/dashboard/dist/assets/index-B-ioA6yv.js +0 -2
- package/dashboard/dist/assets/index-B-ioA6yv.js.map +0 -1
- package/dashboard/dist/assets/index-BMpoMc4A.js +0 -2
- package/dashboard/dist/assets/index-BMpoMc4A.js.map +0 -1
- package/dashboard/dist/assets/index-BU04qgJt.js +0 -15
- package/dashboard/dist/assets/index-BU04qgJt.js.map +0 -1
- package/dashboard/dist/assets/index-BUjxYyxc.js.map +0 -1
- package/dashboard/dist/assets/index-BpoHVMV7.js +0 -2
- package/dashboard/dist/assets/index-CEnDYJOO.js +0 -2
- package/dashboard/dist/assets/index-CbuH92vk.js +0 -6
- package/dashboard/dist/assets/index-CbuH92vk.js.map +0 -1
- package/dashboard/dist/assets/index-DrouIN-M.js +0 -2
- package/dashboard/dist/assets/index-DrouIN-M.js.map +0 -1
- package/dashboard/dist/assets/index-DzICLMI7.js +0 -2
- package/dashboard/dist/assets/index-efS5gKpv.css +0 -1
- package/dashboard/dist/assets/index-qT78AZDq.js +0 -2
- package/dashboard/dist/assets/index-qT78AZDq.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-BPjEkCpD.js +0 -2
- package/dashboard/dist/assets/useEventHooks-BPjEkCpD.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +0 -1
- package/dashboard/dist/assets/workflows-D6diL54s.js +0 -2
- package/dashboard/dist/assets/workflows-D6diL54s.js.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LTApiResult } from '../types/sdk';
|
|
2
|
+
export declare function listSubscriptions(input: {
|
|
3
|
+
agentId: string;
|
|
4
|
+
}): Promise<LTApiResult>;
|
|
5
|
+
export declare function createSubscription(input: {
|
|
6
|
+
agentId: string;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}): Promise<LTApiResult>;
|
|
9
|
+
export declare function updateSubscription(input: {
|
|
10
|
+
id: string;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}): Promise<LTApiResult>;
|
|
13
|
+
export declare function deleteSubscription(input: {
|
|
14
|
+
id: string;
|
|
15
|
+
}): Promise<LTApiResult>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listSubscriptions = listSubscriptions;
|
|
37
|
+
exports.createSubscription = createSubscription;
|
|
38
|
+
exports.updateSubscription = updateSubscription;
|
|
39
|
+
exports.deleteSubscription = deleteSubscription;
|
|
40
|
+
const subService = __importStar(require("../services/agent/subscriptions"));
|
|
41
|
+
async function listSubscriptions(input) {
|
|
42
|
+
try {
|
|
43
|
+
const subs = await subService.listSubscriptions(input.agentId);
|
|
44
|
+
return { status: 200, data: { subscriptions: subs } };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return { status: 500, error: err.message };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function createSubscription(input) {
|
|
51
|
+
try {
|
|
52
|
+
const { agentId, ...data } = input;
|
|
53
|
+
const sub = await subService.createSubscription(agentId, data);
|
|
54
|
+
return { status: 201, data: sub };
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return { status: 500, error: err.message };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function updateSubscription(input) {
|
|
61
|
+
try {
|
|
62
|
+
const { id, ...data } = input;
|
|
63
|
+
const sub = await subService.updateSubscription(id, data);
|
|
64
|
+
if (!sub)
|
|
65
|
+
return { status: 404, error: 'Subscription not found' };
|
|
66
|
+
return { status: 200, data: sub };
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return { status: 500, error: err.message };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function deleteSubscription(input) {
|
|
73
|
+
try {
|
|
74
|
+
const deleted = await subService.deleteSubscription(input.id);
|
|
75
|
+
if (!deleted)
|
|
76
|
+
return { status: 404, error: 'Subscription not found' };
|
|
77
|
+
return { status: 200, data: { deleted: true } };
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
return { status: 500, error: err.message };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LTApiResult, LTApiAuth } from '../types/sdk';
|
|
2
|
+
export declare function listAgents(input: {
|
|
3
|
+
status?: string;
|
|
4
|
+
knowledge_domain?: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
offset?: number;
|
|
7
|
+
}): Promise<LTApiResult>;
|
|
8
|
+
export declare function getAgent(input: {
|
|
9
|
+
id: string;
|
|
10
|
+
}): Promise<LTApiResult>;
|
|
11
|
+
export declare function createAgent(input: {
|
|
12
|
+
name: string;
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}, _auth?: LTApiAuth): Promise<LTApiResult>;
|
|
15
|
+
export declare function updateAgent(input: {
|
|
16
|
+
id: string;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}): Promise<LTApiResult>;
|
|
19
|
+
export declare function deleteAgent(input: {
|
|
20
|
+
id: string;
|
|
21
|
+
}): Promise<LTApiResult>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listAgents = listAgents;
|
|
37
|
+
exports.getAgent = getAgent;
|
|
38
|
+
exports.createAgent = createAgent;
|
|
39
|
+
exports.updateAgent = updateAgent;
|
|
40
|
+
exports.deleteAgent = deleteAgent;
|
|
41
|
+
const agentService = __importStar(require("../services/agent"));
|
|
42
|
+
async function listAgents(input) {
|
|
43
|
+
try {
|
|
44
|
+
const result = await agentService.listAgents(input);
|
|
45
|
+
return { status: 200, data: result };
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return { status: 500, error: err.message };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async function getAgent(input) {
|
|
52
|
+
try {
|
|
53
|
+
const agent = await agentService.getAgent(input.id);
|
|
54
|
+
if (!agent) {
|
|
55
|
+
return { status: 404, error: 'Agent not found' };
|
|
56
|
+
}
|
|
57
|
+
const stats = await agentService.getAgentStats(agent);
|
|
58
|
+
return { status: 200, data: { ...agent, stats } };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return { status: 500, error: err.message };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function createAgent(input, _auth) {
|
|
65
|
+
try {
|
|
66
|
+
const agent = await agentService.createAgent(input);
|
|
67
|
+
return { status: 201, data: agent };
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err.code === '23505') {
|
|
71
|
+
return { status: 409, error: `Agent "${input.name}" already exists` };
|
|
72
|
+
}
|
|
73
|
+
return { status: 500, error: err.message };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function updateAgent(input) {
|
|
77
|
+
try {
|
|
78
|
+
const { id, ...data } = input;
|
|
79
|
+
const agent = await agentService.updateAgent(id, data);
|
|
80
|
+
if (!agent) {
|
|
81
|
+
return { status: 404, error: 'Agent not found' };
|
|
82
|
+
}
|
|
83
|
+
return { status: 200, data: agent };
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return { status: 500, error: err.message };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function deleteAgent(input) {
|
|
90
|
+
try {
|
|
91
|
+
const deleted = await agentService.deleteAgent(input.id);
|
|
92
|
+
if (!deleted) {
|
|
93
|
+
return { status: 404, error: 'Agent not found' };
|
|
94
|
+
}
|
|
95
|
+
return { status: 200, data: { deleted: true } };
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return { status: 500, error: err.message };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listCapabilities = listCapabilities;
|
|
4
|
+
const db_1 = require("../lib/db");
|
|
5
|
+
const LIST_SERVERS_WITH_TOOLS = `
|
|
6
|
+
SELECT id, name, description, tags, tool_manifest, compile_hints, category
|
|
7
|
+
FROM lt_mcp_servers
|
|
8
|
+
WHERE status IN ('registered', 'connected')
|
|
9
|
+
AND tool_manifest IS NOT NULL
|
|
10
|
+
ORDER BY name
|
|
11
|
+
`;
|
|
12
|
+
/**
|
|
13
|
+
* Fallback tag-to-category mapping for servers that don't have an explicit category.
|
|
14
|
+
*/
|
|
15
|
+
const TAG_FALLBACK = {
|
|
16
|
+
'escalation': 'Automation',
|
|
17
|
+
'browser-automation': 'Automation',
|
|
18
|
+
'translation': 'Analysis',
|
|
19
|
+
'vision': 'Analysis',
|
|
20
|
+
'gmail': 'Communication',
|
|
21
|
+
'email': 'Communication',
|
|
22
|
+
'messaging': 'Communication',
|
|
23
|
+
'storage': 'Data',
|
|
24
|
+
'knowledge': 'Data',
|
|
25
|
+
'http': 'Data',
|
|
26
|
+
'api': 'Data',
|
|
27
|
+
'authentication': 'System',
|
|
28
|
+
'admin': 'System',
|
|
29
|
+
'documentation': 'Reference',
|
|
30
|
+
'development': 'Development',
|
|
31
|
+
};
|
|
32
|
+
const CATEGORY_ORDER = ['Communication', 'Analysis', 'Media', 'Data', 'Automation', 'Development', 'System', 'Reference', 'Other'];
|
|
33
|
+
function resolveCategory(server) {
|
|
34
|
+
if (server.category)
|
|
35
|
+
return server.category;
|
|
36
|
+
for (const tag of server.tags ?? []) {
|
|
37
|
+
const cat = TAG_FALLBACK[tag];
|
|
38
|
+
if (cat)
|
|
39
|
+
return cat;
|
|
40
|
+
}
|
|
41
|
+
return 'Other';
|
|
42
|
+
}
|
|
43
|
+
async function listCapabilities() {
|
|
44
|
+
try {
|
|
45
|
+
const pool = (0, db_1.getPool)();
|
|
46
|
+
const { rows } = await pool.query(LIST_SERVERS_WITH_TOOLS);
|
|
47
|
+
const categoryMap = new Map();
|
|
48
|
+
for (const server of rows) {
|
|
49
|
+
const category = resolveCategory(server);
|
|
50
|
+
const tools = (server.tool_manifest || []);
|
|
51
|
+
if (!categoryMap.has(category)) {
|
|
52
|
+
categoryMap.set(category, []);
|
|
53
|
+
}
|
|
54
|
+
for (const tool of tools) {
|
|
55
|
+
categoryMap.get(category).push({
|
|
56
|
+
name: tool.name,
|
|
57
|
+
description: tool.description || '',
|
|
58
|
+
inputSchema: tool.inputSchema || {},
|
|
59
|
+
serverName: server.name,
|
|
60
|
+
serverId: server.id,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const categories = CATEGORY_ORDER
|
|
65
|
+
.filter((name) => categoryMap.has(name))
|
|
66
|
+
.map((name) => ({
|
|
67
|
+
name,
|
|
68
|
+
tools: categoryMap.get(name).sort((a, b) => a.name.localeCompare(b.name)),
|
|
69
|
+
}));
|
|
70
|
+
const totalTools = categories.reduce((sum, c) => sum + c.tools.length, 0);
|
|
71
|
+
return { status: 200, data: { categories, totalTools } };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return { status: 500, error: err.message };
|
|
75
|
+
}
|
|
76
|
+
}
|
package/build/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export { eventRegistry } from './lib/events';
|
|
|
15
15
|
export { NatsEventAdapter } from './lib/events/nats';
|
|
16
16
|
export { InMemoryEventAdapter } from './lib/events/memory';
|
|
17
17
|
export { SocketIOEventAdapter, type SocketIOAuthenticator } from './lib/events/socketio';
|
|
18
|
-
export { publishMilestoneEvent, publishTaskEvent, publishEscalationEvent, publishWorkflowEvent } from './lib/events/publish';
|
|
18
|
+
export { publishMilestoneEvent, publishTaskEvent, publishEscalationEvent, publishWorkflowEvent, publishAgentEvent, publishKnowledgeEvent } from './lib/events/publish';
|
|
19
19
|
export { telemetryRegistry } from './lib/telemetry';
|
|
20
20
|
export { HoneycombTelemetryAdapter } from './lib/telemetry/honeycomb';
|
|
21
21
|
export { loggerRegistry } from './lib/logger';
|
|
@@ -35,7 +35,7 @@ export { McpEscalationStrategy } from './services/escalation-strategy/mcp';
|
|
|
35
35
|
export { getActivityIdentity } from './services/iam/activity';
|
|
36
36
|
export { getToolContext } from './services/iam/context';
|
|
37
37
|
export { registerMcpTool } from './services/mcp/register-tool';
|
|
38
|
-
export { getSystemWorkers, builtinMcpServerFactories } from './system';
|
|
38
|
+
export { getSystemWorkers, getSystemAgents, builtinMcpServerFactories } from './system';
|
|
39
39
|
export { CallbackEventAdapter } from './lib/events/callback';
|
|
40
40
|
export { createClient } from './sdk';
|
|
41
41
|
export { getFreshAccessToken, listOAuthConnections } from './services/oauth';
|
package/build/index.js
CHANGED
|
@@ -36,8 +36,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
40
|
-
exports.api = exports.KnowledgeApi = exports.resolveCredential = exports.mimeFromPath = void 0;
|
|
39
|
+
exports.createClient = exports.CallbackEventAdapter = exports.builtinMcpServerFactories = exports.getSystemAgents = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishKnowledgeEvent = exports.publishAgentEvent = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.conditionLT = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
|
|
40
|
+
exports.api = exports.KnowledgeApi = exports.resolveCredential = exports.mimeFromPath = exports.getStorageBackend = exports.listOAuthConnections = exports.getFreshAccessToken = void 0;
|
|
41
41
|
const config_1 = require("./modules/config");
|
|
42
42
|
const logger_1 = require("./lib/logger");
|
|
43
43
|
const start_1 = require("./start");
|
|
@@ -79,6 +79,8 @@ Object.defineProperty(exports, "publishMilestoneEvent", { enumerable: true, get:
|
|
|
79
79
|
Object.defineProperty(exports, "publishTaskEvent", { enumerable: true, get: function () { return publish_1.publishTaskEvent; } });
|
|
80
80
|
Object.defineProperty(exports, "publishEscalationEvent", { enumerable: true, get: function () { return publish_1.publishEscalationEvent; } });
|
|
81
81
|
Object.defineProperty(exports, "publishWorkflowEvent", { enumerable: true, get: function () { return publish_1.publishWorkflowEvent; } });
|
|
82
|
+
Object.defineProperty(exports, "publishAgentEvent", { enumerable: true, get: function () { return publish_1.publishAgentEvent; } });
|
|
83
|
+
Object.defineProperty(exports, "publishKnowledgeEvent", { enumerable: true, get: function () { return publish_1.publishKnowledgeEvent; } });
|
|
82
84
|
var telemetry_1 = require("./lib/telemetry");
|
|
83
85
|
Object.defineProperty(exports, "telemetryRegistry", { enumerable: true, get: function () { return telemetry_1.telemetryRegistry; } });
|
|
84
86
|
var honeycomb_1 = require("./lib/telemetry/honeycomb");
|
|
@@ -114,6 +116,7 @@ var register_tool_1 = require("./services/mcp/register-tool");
|
|
|
114
116
|
Object.defineProperty(exports, "registerMcpTool", { enumerable: true, get: function () { return register_tool_1.registerMcpTool; } });
|
|
115
117
|
var system_1 = require("./system");
|
|
116
118
|
Object.defineProperty(exports, "getSystemWorkers", { enumerable: true, get: function () { return system_1.getSystemWorkers; } });
|
|
119
|
+
Object.defineProperty(exports, "getSystemAgents", { enumerable: true, get: function () { return system_1.getSystemAgents; } });
|
|
117
120
|
Object.defineProperty(exports, "builtinMcpServerFactories", { enumerable: true, get: function () { return system_1.builtinMcpServerFactories; } });
|
|
118
121
|
var callback_1 = require("./lib/events/callback");
|
|
119
122
|
Object.defineProperty(exports, "CallbackEventAdapter", { enumerable: true, get: function () { return callback_1.CallbackEventAdapter; } });
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
-- Long Tail: Agent data model
|
|
2
|
+
-- Agents are autonomous personas that compose identity, memory, capabilities,
|
|
3
|
+
-- behaviors, and goals atop existing primitives.
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS lt_agents (
|
|
6
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
7
|
+
name TEXT UNIQUE NOT NULL,
|
|
8
|
+
description TEXT,
|
|
9
|
+
status TEXT NOT NULL DEFAULT 'inactive'
|
|
10
|
+
CHECK (status IN ('inactive', 'active', 'paused', 'error')),
|
|
11
|
+
|
|
12
|
+
-- Identity: links to a service account (bot user)
|
|
13
|
+
user_id UUID REFERENCES lt_users(id) ON DELETE SET NULL,
|
|
14
|
+
|
|
15
|
+
-- Memory: knowledge domain this agent owns
|
|
16
|
+
knowledge_domain TEXT,
|
|
17
|
+
|
|
18
|
+
-- Capabilities: which MCP servers/tools it can use
|
|
19
|
+
capabilities JSONB NOT NULL DEFAULT '[]'::JSONB,
|
|
20
|
+
|
|
21
|
+
-- Behaviors: triggers, schedules, escalation patterns
|
|
22
|
+
behaviors JSONB NOT NULL DEFAULT '{}'::JSONB,
|
|
23
|
+
|
|
24
|
+
-- Goals and guardrails (natural language)
|
|
25
|
+
goals TEXT,
|
|
26
|
+
rules TEXT,
|
|
27
|
+
|
|
28
|
+
-- Workflow bindings (soft references)
|
|
29
|
+
workflow_type TEXT,
|
|
30
|
+
pipeline_id UUID,
|
|
31
|
+
|
|
32
|
+
-- Metadata
|
|
33
|
+
metadata JSONB NOT NULL DEFAULT '{}'::JSONB,
|
|
34
|
+
last_run_at TIMESTAMPTZ,
|
|
35
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
36
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agents_status ON lt_agents (status);
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agents_user_id ON lt_agents (user_id);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agents_knowledge_domain ON lt_agents (knowledge_domain);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agents_capabilities ON lt_agents USING GIN (capabilities);
|
|
43
|
+
|
|
44
|
+
CREATE OR REPLACE TRIGGER trg_lt_agents_updated_at
|
|
45
|
+
BEFORE UPDATE ON lt_agents
|
|
46
|
+
FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- Agent event subscriptions — reactive wiring from events to workflows.
|
|
2
|
+
-- Each row maps a topic pattern to a workflow reaction for a specific agent.
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS lt_agent_subscriptions (
|
|
5
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
6
|
+
agent_id UUID NOT NULL REFERENCES lt_agents(id) ON DELETE CASCADE,
|
|
7
|
+
|
|
8
|
+
-- What to listen for
|
|
9
|
+
topic TEXT NOT NULL,
|
|
10
|
+
filter JSONB,
|
|
11
|
+
|
|
12
|
+
-- How to react
|
|
13
|
+
reaction_type TEXT NOT NULL CHECK (reaction_type IN ('durable', 'pipeline', 'mcp_query')),
|
|
14
|
+
workflow_type TEXT,
|
|
15
|
+
pipeline_id UUID,
|
|
16
|
+
mcp_prompt TEXT,
|
|
17
|
+
|
|
18
|
+
-- Input mapping: transform event payload → workflow envelope
|
|
19
|
+
input_mapping JSONB NOT NULL DEFAULT '{}'::JSONB,
|
|
20
|
+
|
|
21
|
+
-- Identity for the reaction execution
|
|
22
|
+
execute_as TEXT,
|
|
23
|
+
|
|
24
|
+
enabled BOOLEAN NOT NULL DEFAULT true,
|
|
25
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
26
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agent_subs_agent ON lt_agent_subscriptions (agent_id);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agent_subs_topic ON lt_agent_subscriptions (topic);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agent_subs_enabled ON lt_agent_subscriptions (enabled) WHERE enabled = true;
|
|
32
|
+
|
|
33
|
+
CREATE OR REPLACE TRIGGER trg_lt_agent_subs_updated_at
|
|
34
|
+
BEFORE UPDATE ON lt_agent_subscriptions
|
|
35
|
+
FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
|
|
36
|
+
|
|
37
|
+
-- Add GIN index on agent behaviors for efficient trigger queries
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_lt_agents_behaviors ON lt_agents USING GIN (behaviors);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Add category column to MCP servers for capability grouping.
|
|
2
|
+
-- Replaces the tag-derived category mapping with an explicit, configurable value.
|
|
3
|
+
|
|
4
|
+
ALTER TABLE lt_mcp_servers ADD COLUMN IF NOT EXISTS category TEXT;
|
|
5
|
+
|
|
6
|
+
CREATE INDEX IF NOT EXISTS idx_lt_mcp_servers_category ON lt_mcp_servers (category) WHERE category IS NOT NULL;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- Add unique constraint on (agent_id, topic) for idempotent subscription seeding.
|
|
2
|
+
-- Two containers inserting the same subscription simultaneously: one wins, other is a no-op.
|
|
3
|
+
|
|
4
|
+
DO $$ BEGIN
|
|
5
|
+
ALTER TABLE lt_agent_subscriptions
|
|
6
|
+
ADD CONSTRAINT uq_agent_sub_topic UNIQUE (agent_id, topic);
|
|
7
|
+
EXCEPTION
|
|
8
|
+
WHEN duplicate_object THEN NULL;
|
|
9
|
+
END $$;
|
|
@@ -7,25 +7,11 @@ type EventCallback = (event: LTEvent) => void;
|
|
|
7
7
|
* SDK callers subscribe with `.on()` and receive events as direct
|
|
8
8
|
* function calls — no network transport, no serialization overhead.
|
|
9
9
|
*
|
|
10
|
-
* Supports:
|
|
11
|
-
* - Exact
|
|
12
|
-
* -
|
|
10
|
+
* Supports NATS-style pattern matching:
|
|
11
|
+
* - Exact: `on('task.created', cb)`
|
|
12
|
+
* - Single-token wildcard: `on('task.*', cb)` — matches task.created, task.failed, etc.
|
|
13
|
+
* - Multi-token wildcard: `on('app.epic.>', cb)` — matches app.epic.apis.createorder.error
|
|
13
14
|
* - Global wildcard: `on('*', cb)` — matches every event
|
|
14
|
-
*
|
|
15
|
-
* Usage:
|
|
16
|
-
* ```typescript
|
|
17
|
-
* import { CallbackEventAdapter } from '@hotmeshio/long-tail';
|
|
18
|
-
* import { eventRegistry } from '@hotmeshio/long-tail';
|
|
19
|
-
*
|
|
20
|
-
* const adapter = new CallbackEventAdapter();
|
|
21
|
-
* eventRegistry.register(adapter);
|
|
22
|
-
*
|
|
23
|
-
* const unsub = adapter.on('escalation.claimed', (event) => {
|
|
24
|
-
* console.log('claimed:', event.escalationId);
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* // Later: unsub() to remove the listener
|
|
28
|
-
* ```
|
|
29
15
|
*/
|
|
30
16
|
export declare class CallbackEventAdapter implements LTEventAdapter {
|
|
31
17
|
private listeners;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CallbackEventAdapter = void 0;
|
|
4
4
|
const logger_1 = require("../logger");
|
|
5
|
+
const matching_1 = require("./matching");
|
|
5
6
|
/**
|
|
6
7
|
* In-process event adapter that delivers events via registered callbacks.
|
|
7
8
|
*
|
|
@@ -9,25 +10,11 @@ const logger_1 = require("../logger");
|
|
|
9
10
|
* SDK callers subscribe with `.on()` and receive events as direct
|
|
10
11
|
* function calls — no network transport, no serialization overhead.
|
|
11
12
|
*
|
|
12
|
-
* Supports:
|
|
13
|
-
* - Exact
|
|
14
|
-
* -
|
|
13
|
+
* Supports NATS-style pattern matching:
|
|
14
|
+
* - Exact: `on('task.created', cb)`
|
|
15
|
+
* - Single-token wildcard: `on('task.*', cb)` — matches task.created, task.failed, etc.
|
|
16
|
+
* - Multi-token wildcard: `on('app.epic.>', cb)` — matches app.epic.apis.createorder.error
|
|
15
17
|
* - Global wildcard: `on('*', cb)` — matches every event
|
|
16
|
-
*
|
|
17
|
-
* Usage:
|
|
18
|
-
* ```typescript
|
|
19
|
-
* import { CallbackEventAdapter } from '@hotmeshio/long-tail';
|
|
20
|
-
* import { eventRegistry } from '@hotmeshio/long-tail';
|
|
21
|
-
*
|
|
22
|
-
* const adapter = new CallbackEventAdapter();
|
|
23
|
-
* eventRegistry.register(adapter);
|
|
24
|
-
*
|
|
25
|
-
* const unsub = adapter.on('escalation.claimed', (event) => {
|
|
26
|
-
* console.log('claimed:', event.escalationId);
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* // Later: unsub() to remove the listener
|
|
30
|
-
* ```
|
|
31
18
|
*/
|
|
32
19
|
class CallbackEventAdapter {
|
|
33
20
|
constructor() {
|
|
@@ -55,23 +42,9 @@ class CallbackEventAdapter {
|
|
|
55
42
|
logger_1.loggerRegistry.info('[lt-events:callback] adapter connected');
|
|
56
43
|
}
|
|
57
44
|
async publish(event) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
for (const cb of exact) {
|
|
62
|
-
try {
|
|
63
|
-
cb(event);
|
|
64
|
-
}
|
|
65
|
-
catch { /* fire-and-forget */ }
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Category wildcard listeners (e.g. 'task.*' matches 'task.created')
|
|
69
|
-
const dotIdx = event.type.indexOf('.');
|
|
70
|
-
if (dotIdx > 0) {
|
|
71
|
-
const category = event.type.slice(0, dotIdx) + '.*';
|
|
72
|
-
const catListeners = this.listeners.get(category);
|
|
73
|
-
if (catListeners) {
|
|
74
|
-
for (const cb of catListeners) {
|
|
45
|
+
for (const [pattern, callbacks] of this.listeners) {
|
|
46
|
+
if ((0, matching_1.subjectMatchesPattern)(event.type, pattern)) {
|
|
47
|
+
for (const cb of callbacks) {
|
|
75
48
|
try {
|
|
76
49
|
cb(event);
|
|
77
50
|
}
|
|
@@ -79,16 +52,6 @@ class CallbackEventAdapter {
|
|
|
79
52
|
}
|
|
80
53
|
}
|
|
81
54
|
}
|
|
82
|
-
// Global wildcard listeners
|
|
83
|
-
const global = this.listeners.get('*');
|
|
84
|
-
if (global) {
|
|
85
|
-
for (const cb of global) {
|
|
86
|
-
try {
|
|
87
|
-
cb(event);
|
|
88
|
-
}
|
|
89
|
-
catch { /* fire-and-forget */ }
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
55
|
}
|
|
93
56
|
async disconnect() {
|
|
94
57
|
this.listeners.clear();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Match a dot-delimited subject against a pattern with NATS-style wildcards.
|
|
3
|
+
*
|
|
4
|
+
* - `*` matches exactly one token
|
|
5
|
+
* - `>` matches one or more remaining tokens (must be last segment)
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* - `task.created` matches `task.*`
|
|
9
|
+
* - `app.epic.apis.createorder.error` matches `app.epic.apis.*.error`
|
|
10
|
+
* - `app.epic.apis.createorder.error` matches `app.epic.>`
|
|
11
|
+
* - `app.epic.apis.createorder.error` does NOT match `app.vendor.>`
|
|
12
|
+
*/
|
|
13
|
+
export declare function subjectMatchesPattern(subject: string, pattern: string): boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subjectMatchesPattern = subjectMatchesPattern;
|
|
4
|
+
/**
|
|
5
|
+
* Match a dot-delimited subject against a pattern with NATS-style wildcards.
|
|
6
|
+
*
|
|
7
|
+
* - `*` matches exactly one token
|
|
8
|
+
* - `>` matches one or more remaining tokens (must be last segment)
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* - `task.created` matches `task.*`
|
|
12
|
+
* - `app.epic.apis.createorder.error` matches `app.epic.apis.*.error`
|
|
13
|
+
* - `app.epic.apis.createorder.error` matches `app.epic.>`
|
|
14
|
+
* - `app.epic.apis.createorder.error` does NOT match `app.vendor.>`
|
|
15
|
+
*/
|
|
16
|
+
function subjectMatchesPattern(subject, pattern) {
|
|
17
|
+
if (pattern === '*')
|
|
18
|
+
return true;
|
|
19
|
+
const subjectTokens = subject.split('.');
|
|
20
|
+
const patternTokens = pattern.split('.');
|
|
21
|
+
for (let i = 0; i < patternTokens.length; i++) {
|
|
22
|
+
const pt = patternTokens[i];
|
|
23
|
+
if (pt === '>')
|
|
24
|
+
return true;
|
|
25
|
+
if (i >= subjectTokens.length)
|
|
26
|
+
return false;
|
|
27
|
+
if (pt !== '*' && pt !== subjectTokens[i])
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return subjectTokens.length === patternTokens.length;
|
|
31
|
+
}
|
|
@@ -56,6 +56,26 @@ export declare function publishActivityEvent(params: {
|
|
|
56
56
|
activityName: string;
|
|
57
57
|
data?: Record<string, any>;
|
|
58
58
|
}): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Publish a knowledge lifecycle event (stored, deleted).
|
|
61
|
+
* Lightweight — no workflow context required since knowledge writes
|
|
62
|
+
* happen both inside and outside workflows.
|
|
63
|
+
*/
|
|
64
|
+
export declare function publishKnowledgeEvent(params: {
|
|
65
|
+
type: 'knowledge.stored' | 'knowledge.deleted';
|
|
66
|
+
domain: string;
|
|
67
|
+
key: string;
|
|
68
|
+
}): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Publish an agent lifecycle event.
|
|
71
|
+
*/
|
|
72
|
+
export declare function publishAgentEvent(params: {
|
|
73
|
+
type: 'agent.started' | 'agent.completed' | 'agent.failed' | 'agent.status_changed';
|
|
74
|
+
agentId: string;
|
|
75
|
+
agentName: string;
|
|
76
|
+
status?: string;
|
|
77
|
+
data?: Record<string, any>;
|
|
78
|
+
}): Promise<void>;
|
|
59
79
|
/**
|
|
60
80
|
* Publish a workflow lifecycle event (started, completed, failed).
|
|
61
81
|
*/
|