@hotmeshio/long-tail 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/api/files.d.ts +13 -0
- package/build/api/files.js +44 -0
- package/build/api/mcp-runs.d.ts +2 -0
- package/build/api/mcp-runs.js +2 -0
- package/build/api/workflow-sets.d.ts +11 -0
- package/build/api/workflow-sets.js +62 -0
- package/build/api/yaml-workflows.d.ts +9 -0
- package/build/api/yaml-workflows.js +40 -11
- package/build/examples/seed.js +50 -0
- package/build/lib/db/schemas/001_schema.sql +281 -106
- package/build/lib/db/schemas/002_seed.sql +56 -39
- package/build/lib/storage/local.d.ts +15 -0
- package/build/lib/storage/local.js +63 -0
- package/build/lib/storage/mime.d.ts +4 -0
- package/build/lib/storage/mime.js +31 -0
- package/build/lib/storage/s3.d.ts +16 -0
- package/build/lib/storage/s3.js +70 -0
- package/build/lib/storage/types.d.ts +18 -0
- package/build/modules/utils.d.ts +73 -0
- package/build/modules/utils.js +84 -0
- package/build/routes/file-browser.d.ts +2 -0
- package/build/routes/file-browser.js +112 -0
- package/build/routes/files.js +25 -17
- package/build/routes/index.js +2 -0
- package/build/routes/mcp-runs.js +2 -0
- package/build/routes/workflow-sets.js +9 -0
- package/build/routes/yaml-workflows/deployment.js +8 -0
- package/build/services/insight/index.d.ts +13 -0
- package/build/services/insight/index.js +4 -7
- package/build/services/insight/prompts.d.ts +1 -1
- package/build/services/insight/prompts.js +1 -1
- package/build/services/mcp/server.js +31 -0
- package/build/services/mcp-runs/queries.d.ts +2 -0
- package/build/services/mcp-runs/queries.js +11 -1
- package/build/services/mcp-runs/sql.d.ts +1 -1
- package/build/services/mcp-runs/sql.js +2 -2
- package/build/services/workflow-sets/db.d.ts +1 -0
- package/build/services/workflow-sets/db.js +6 -0
- package/build/services/workflow-sets/index.d.ts +1 -1
- package/build/services/workflow-sets/index.js +2 -1
- package/build/services/workflow-sets/sql.d.ts +1 -0
- package/build/services/workflow-sets/sql.js +6 -1
- package/build/services/yaml-workflow/db.d.ts +12 -0
- package/build/services/yaml-workflow/db.js +18 -0
- package/build/services/yaml-workflow/generator.js +4 -4
- package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
- package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
- package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
- package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
- package/build/services/yaml-workflow/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +10 -3
- package/build/system/activities/schema-exchange.d.ts +50 -0
- package/build/system/activities/schema-exchange.js +210 -0
- package/build/system/activities/sql.d.ts +1 -1
- package/build/system/activities/sql.js +12 -1
- package/build/system/index.js +1 -0
- package/build/system/mcp-servers/human-queue.js +31 -0
- package/build/system/mcp-servers/knowledge.js +35 -6
- package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
- package/build/system/mcp-servers/schema-exchange.js +93 -0
- package/build/system/seed/server-definitions.d.ts +112 -1
- package/build/system/seed/server-definitions.js +37 -0
- package/build/system/seed/tool-manifests-data.d.ts +87 -0
- package/build/system/seed/tool-manifests-data.js +37 -1
- package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
- package/build/system/seed/tool-manifests-knowledge.js +6 -5
- package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +3 -3
- package/build/system/workflows/mcp-workflow-planner/index.js +39 -5
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-Cngijp4Q.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-Cngijp4Q.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js → AvailableEscalationsPage-CpBfGV1h.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js.map → AvailableEscalationsPage-CpBfGV1h.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-B8Uvw9Si.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-B8Uvw9Si.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-DiFPuWOY.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-DiFPuWOY.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-CpXG9uyu.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-CpXG9uyu.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DKsTR9lK.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DKsTR9lK.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-DlS7Kf40.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-DlS7Kf40.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-B-9eW3pm.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-B-9eW3pm.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DkOokbtL.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DkOokbtL.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-DVtHqM-5.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-DVtHqM-5.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-C7KIMIbE.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-C7KIMIbE.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-BMKBlkPx.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-BMKBlkPx.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BYZ5OVdQ.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BYZ5OVdQ.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-C5r3n6YO.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-C5r3n6YO.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-BGUajIsW.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-BGUajIsW.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-B_kJYHea.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-B_kJYHea.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-BgAq_bQg.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-BgAq_bQg.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js.map +1 -0
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-E1yRnCeW.js} +2 -2
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-E1yRnCeW.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-C8MSTzey.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-C8MSTzey.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-Cm5HBQF_.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-Cm5HBQF_.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-CNmWJFSN.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-CNmWJFSN.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-HSI4RVhs.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-HSI4RVhs.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-Dln8622H.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-Dln8622H.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-bIsd9N_h.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-bIsd9N_h.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-BVUp2bF0.js} +2 -2
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-BVUp2bF0.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-kH-Njt25.js +2 -0
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-kH-Njt25.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DbUJPfaW.js} +2 -2
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DbUJPfaW.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-Bs3JbyAz.js} +2 -2
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-Bs3JbyAz.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-CakDdsCw.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-CakDdsCw.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Cd_SG_yA.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Cd_SG_yA.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-Bz0C18nC.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-Bz0C18nC.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js → SwimlaneTimeline-Cfe-xQRX.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js.map → SwimlaneTimeline-Cfe-xQRX.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-ClFhXG-U.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-ClFhXG-U.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-SuMBdARt.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-SuMBdARt.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-lJR1JW_W.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-lJR1JW_W.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-Dkq1Vtbt.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-Dkq1Vtbt.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-DgfDZ1pl.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-DgfDZ1pl.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-MpHZ1hMD.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-MpHZ1hMD.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-DqsosA4B.js} +2 -2
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-DqsosA4B.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CVlg38C3.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CVlg38C3.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-Ugzbs8mV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-Ugzbs8mV.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-CIp_lTNl.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-CIp_lTNl.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +1 -0
- package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-DPfUpVqI.js} +2 -2
- package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-DPfUpVqI.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-RrCDbMC3.js} +2 -2
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-RrCDbMC3.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-CDGa9wsD.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-CDGa9wsD.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-ZSKqdkdS.js} +2 -2
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-ZSKqdkdS.js.map} +1 -1
- package/dashboard/dist/assets/helpers-rMEcLwKs.js +2 -0
- package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +1 -0
- package/dashboard/dist/assets/{index-DDYFpi4l.js → index-ABcJHHlN.js} +2 -2
- package/dashboard/dist/assets/{index-DDYFpi4l.js.map → index-ABcJHHlN.js.map} +1 -1
- package/dashboard/dist/assets/{index-D1wVX50Z.js → index-B91h_jZ0.js} +2 -2
- package/dashboard/dist/assets/{index-D1wVX50Z.js.map → index-B91h_jZ0.js.map} +1 -1
- package/dashboard/dist/assets/{index-BcR6PfpY.js → index-BbI2dzhJ.js} +2 -2
- package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-BbI2dzhJ.js.map} +1 -1
- package/dashboard/dist/assets/{index-BizfauqT.js → index-BmVCyB6C.js} +4 -4
- package/dashboard/dist/assets/{index-BizfauqT.js.map → index-BmVCyB6C.js.map} +1 -1
- package/dashboard/dist/assets/index-C1E5GTs9.js +2 -0
- package/dashboard/dist/assets/index-C1E5GTs9.js.map +1 -0
- package/dashboard/dist/assets/{index-Cf60K3x9.js → index-C90ZPzXk.js} +2 -2
- package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-C90ZPzXk.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYZX9tOb.js → index-Cmgrk7PQ.js} +58 -58
- package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +1 -0
- package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-DNytWfSZ.js} +2 -2
- package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-DNytWfSZ.js.map} +1 -1
- package/dashboard/dist/assets/index-DX6zxr6t.js +2 -0
- package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-DX6zxr6t.js.map} +1 -1
- package/dashboard/dist/assets/index-DeX-ezqf.css +1 -0
- package/dashboard/dist/assets/index-K40Qw1tk.js +2 -0
- package/dashboard/dist/assets/{index-Di12t56M.js.map → index-K40Qw1tk.js.map} +1 -1
- package/dashboard/dist/assets/{index-BUK3qR-1.js → index-lCyNr5Xk.js} +2 -2
- package/dashboard/dist/assets/{index-BUK3qR-1.js.map → index-lCyNr5Xk.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-CNE44TSp.js} +2 -2
- package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-CNE44TSp.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-RQX0uN-5.js +2 -0
- package/dashboard/dist/assets/mcp-query-RQX0uN-5.js.map +1 -0
- package/dashboard/dist/assets/mcp-runs-0w40bdz-.js +2 -0
- package/dashboard/dist/assets/mcp-runs-0w40bdz-.js.map +1 -0
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-BbmdXuPp.js} +2 -2
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-BbmdXuPp.js.map} +1 -1
- package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-DoHYlhWH.js} +2 -2
- package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-DoHYlhWH.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-BAiJiCHS.js} +2 -2
- package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-BAiJiCHS.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CvroqHtm.js} +2 -2
- package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CvroqHtm.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js → useEventHooks-BHMbzR_y.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BHMbzR_y.js.map} +1 -1
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +2 -0
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js.map +1 -0
- package/dashboard/dist/assets/{users-CFcxB4v6.js → users-CxIMy_xw.js} +2 -2
- package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-CxIMy_xw.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-AFGxSeQS.js} +132 -82
- package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-yR9yais7.js} +2 -2
- package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-yR9yais7.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js.map +1 -0
- package/dashboard/dist/index.html +3 -3
- package/docs/schema-exchange.md +173 -0
- package/docs/self-test.md +106 -0
- package/package.json +4 -2
- package/build/lib/db/schemas/003_workflow_discovery.sql +0 -39
- package/build/lib/db/schemas/004_query_router.sql +0 -38
- package/build/lib/db/schemas/004_workflow_sets.sql +0 -29
- package/build/lib/db/schemas/005_triage_router.sql +0 -37
- package/build/lib/db/schemas/005_unique_graph_topic.sql +0 -7
- package/build/lib/db/schemas/006_oauth.sql +0 -50
- package/build/lib/db/schemas/007_security.sql +0 -27
- package/build/lib/db/schemas/008_bot_accounts.sql +0 -30
- package/build/lib/db/schemas/009_audit_trail.sql +0 -7
- package/build/lib/db/schemas/010_credential_providers.sql +0 -4
- package/build/lib/db/schemas/011_system_workflow_configs.sql +0 -37
- package/build/lib/db/schemas/012_drop_modality.sql +0 -6
- package/build/lib/db/schemas/013_execute_as.sql +0 -9
- package/build/lib/db/schemas/014_ephemeral_credentials.sql +0 -16
- package/build/lib/db/schemas/015_knowledge.sql +0 -23
- package/build/lib/db/schemas/016_streamable_http.sql +0 -7
- package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
- package/dashboard/dist/assets/RolesPage-SMedMuqa.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
- package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
- package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
- package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
- package/dashboard/dist/assets/index-Di12t56M.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
|
@@ -44,6 +44,19 @@ export interface WorkflowPlannerInput {
|
|
|
44
44
|
setId: string;
|
|
45
45
|
wait?: boolean;
|
|
46
46
|
userId?: string;
|
|
47
|
+
/** When adding to an existing set, pass the current plan items so the planner avoids duplicates. */
|
|
48
|
+
existingPlan?: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
description: string;
|
|
51
|
+
namespace: string;
|
|
52
|
+
}>;
|
|
53
|
+
/** Sibling schemas from already-built workflows for composition context. */
|
|
54
|
+
existingSchemas?: Array<{
|
|
55
|
+
name: string;
|
|
56
|
+
input_schema: Record<string, unknown>;
|
|
57
|
+
output_schema: Record<string, unknown>;
|
|
58
|
+
graph_topic: string;
|
|
59
|
+
}>;
|
|
47
60
|
}
|
|
48
61
|
export declare function startWorkflowPlanner(input: WorkflowPlannerInput): Promise<McpQueryResult>;
|
|
49
62
|
export declare function describeWorkflow(input: DescribeInput): Promise<DescribeResult>;
|
|
@@ -11,6 +11,7 @@ exports.describeWorkflow = describeWorkflow;
|
|
|
11
11
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
12
12
|
const db_1 = require("../../lib/db");
|
|
13
13
|
const defaults_1 = require("../../modules/defaults");
|
|
14
|
+
const utils_1 = require("../../modules/utils");
|
|
14
15
|
const llm_1 = require("../llm");
|
|
15
16
|
const prompts_1 = require("./prompts");
|
|
16
17
|
// ── MCP query invocation ─────────────────────────────────────────────────────
|
|
@@ -76,13 +77,13 @@ async function startWorkflowBuilder(input) {
|
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
79
|
async function startWorkflowPlanner(input) {
|
|
79
|
-
const { specification, setId, wait = true, userId } = input;
|
|
80
|
+
const { specification, setId, wait = true, userId, existingPlan, existingSchemas } = input;
|
|
80
81
|
const startTime = Date.now();
|
|
81
82
|
const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
|
|
82
83
|
const workflowId = `wf-planner-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
83
84
|
const handle = await client.workflow.start({
|
|
84
85
|
args: [{
|
|
85
|
-
data: { specification, setId },
|
|
86
|
+
data: { specification, setId, existingPlan, existingSchemas },
|
|
86
87
|
metadata: { source: 'dashboard' },
|
|
87
88
|
lt: { userId },
|
|
88
89
|
}],
|
|
@@ -126,11 +127,7 @@ async function describeWorkflow(input) {
|
|
|
126
127
|
const raw = response.content || '{}';
|
|
127
128
|
const cleaned = raw.replace(/^```(?:json)?\s*/m, '').replace(/\s*```$/m, '').trim();
|
|
128
129
|
const parsed = JSON.parse(cleaned);
|
|
129
|
-
const toolName = (parsed.tool_name || '')
|
|
130
|
-
.toLowerCase()
|
|
131
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
132
|
-
.replace(/^-|-$/g, '')
|
|
133
|
-
.slice(0, 60);
|
|
130
|
+
const toolName = (0, utils_1.sanitizeToolName)(parsed.tool_name || '').slice(0, 60);
|
|
134
131
|
return {
|
|
135
132
|
tool_name: toolName || undefined,
|
|
136
133
|
description: parsed.description || prompt,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Externalized LLM prompt constants for the insight service.
|
|
3
3
|
*/
|
|
4
|
-
export declare const DESCRIBE_WORKFLOW_SYSTEM_PROMPT = "You generate concise workflow descriptions, tool names, and discovery tags.\n\nGiven a user's original query and the execution result, produce:\n1. A short, descriptive tool name
|
|
4
|
+
export declare const DESCRIBE_WORKFLOW_SYSTEM_PROMPT = "You generate concise workflow descriptions, tool names, and discovery tags.\n\nGiven a user's original query and the execution result, produce:\n1. A short, descriptive tool name in snake_case (e.g. \"screenshot_all_nav_pages\", \"fetch_order_status\", \"translate_content\"). Only lowercase letters, digits, and underscores. The name should describe what the workflow does, not be generic like \"query_complete\".\n2. A clear, reusable description of what this workflow does (not what the user asked, but what the workflow accomplishes as a reusable tool). Write it as if describing a tool in a catalog. 2-3 sentences max.\n3. Discovery tags \u2014 lowercase keywords that help find this workflow when similar future queries are made.\n\nReturn ONLY a JSON object:\n{ \"tool_name\": \"...\", \"description\": \"...\", \"tags\": [\"tag1\", \"tag2\", ...] }";
|
|
@@ -7,7 +7,7 @@ exports.DESCRIBE_WORKFLOW_SYSTEM_PROMPT = void 0;
|
|
|
7
7
|
exports.DESCRIBE_WORKFLOW_SYSTEM_PROMPT = `You generate concise workflow descriptions, tool names, and discovery tags.
|
|
8
8
|
|
|
9
9
|
Given a user's original query and the execution result, produce:
|
|
10
|
-
1. A short, descriptive tool name
|
|
10
|
+
1. A short, descriptive tool name in snake_case (e.g. "screenshot_all_nav_pages", "fetch_order_status", "translate_content"). Only lowercase letters, digits, and underscores. The name should describe what the workflow does, not be generic like "query_complete".
|
|
11
11
|
2. A clear, reusable description of what this workflow does (not what the user asked, but what the workflow accomplishes as a reusable tool). Write it as if describing a tool in a catalog. 2-3 sentences max.
|
|
12
12
|
3. Discovery tags — lowercase keywords that help find this workflow when similar future queries are made.
|
|
13
13
|
|
|
@@ -64,6 +64,10 @@ const claimAndResolveSchema = zod_1.z.object({
|
|
|
64
64
|
resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
|
|
65
65
|
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
66
66
|
});
|
|
67
|
+
const resolveEscalationSchema = zod_1.z.object({
|
|
68
|
+
escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
|
|
69
|
+
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
70
|
+
});
|
|
67
71
|
const escalateAndWaitSchema = zod_1.z.object({
|
|
68
72
|
role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
|
|
69
73
|
message: zod_1.z.string().describe('Description of what input is needed from the human'),
|
|
@@ -218,6 +222,33 @@ async function createHumanQueueServer(options) {
|
|
|
218
222
|
}],
|
|
219
223
|
};
|
|
220
224
|
});
|
|
225
|
+
// ── resolve_escalation ──────────────────────────────────────────────
|
|
226
|
+
server.registerTool('resolve_escalation', {
|
|
227
|
+
title: 'Resolve Escalation',
|
|
228
|
+
description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
|
|
229
|
+
inputSchema: resolveEscalationSchema,
|
|
230
|
+
}, async (args) => {
|
|
231
|
+
const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
|
|
232
|
+
if (!resolved) {
|
|
233
|
+
return {
|
|
234
|
+
content: [{
|
|
235
|
+
type: 'text',
|
|
236
|
+
text: JSON.stringify({ error: 'Failed to resolve escalation' }),
|
|
237
|
+
}],
|
|
238
|
+
isError: true,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
content: [{
|
|
243
|
+
type: 'text',
|
|
244
|
+
text: JSON.stringify({
|
|
245
|
+
escalation_id: resolved.id,
|
|
246
|
+
status: resolved.status,
|
|
247
|
+
resolved_at: resolved.resolved_at,
|
|
248
|
+
}),
|
|
249
|
+
}],
|
|
250
|
+
};
|
|
251
|
+
});
|
|
221
252
|
// ── escalate_and_wait ──────────────────────────────────────────────
|
|
222
253
|
server.registerTool('escalate_and_wait', {
|
|
223
254
|
title: 'Escalate and Wait',
|
|
@@ -5,6 +5,15 @@ exports.listJobs = listJobs;
|
|
|
5
5
|
const db_1 = require("../../lib/db");
|
|
6
6
|
const hotmesh_utils_1 = require("../hotmesh-utils");
|
|
7
7
|
const sql_1 = require("./sql");
|
|
8
|
+
const SORTABLE_COLUMNS = new Set(['created_at', 'updated_at', 'entity', 'status']);
|
|
9
|
+
function buildOrderBy(sortBy, order) {
|
|
10
|
+
if (!sortBy || !SORTABLE_COLUMNS.has(sortBy)) {
|
|
11
|
+
return '(CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC';
|
|
12
|
+
}
|
|
13
|
+
const dir = order === 'asc' ? 'ASC' : 'DESC';
|
|
14
|
+
const col = sortBy === 'status' ? '(CASE WHEN j.status > 0 THEN 0 WHEN j.status = 0 THEN 1 ELSE 2 END)' : `j.${sortBy}`;
|
|
15
|
+
return `${col} ${dir}`;
|
|
16
|
+
}
|
|
8
17
|
/**
|
|
9
18
|
* Return distinct entity names from job runs + yaml workflow graph_topics.
|
|
10
19
|
*/
|
|
@@ -55,9 +64,10 @@ async function listJobs(params) {
|
|
|
55
64
|
}
|
|
56
65
|
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
57
66
|
const keyPrefix = `hmsh:${appId}:j:`;
|
|
67
|
+
const orderBy = buildOrderBy(params.sort_by, params.order);
|
|
58
68
|
const [countResult, dataResult] = await Promise.all([
|
|
59
69
|
pool.query((0, sql_1.COUNT_JOBS)(schema, where), values),
|
|
60
|
-
pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx
|
|
70
|
+
pool.query((0, sql_1.LIST_JOBS)(schema, appId, where, idx++, idx++, orderBy), [...values, limit, offset]),
|
|
61
71
|
]);
|
|
62
72
|
const jobs = dataResult.rows.map((row) => ({
|
|
63
73
|
workflow_id: row.key.startsWith(keyPrefix) ? row.key.slice(keyPrefix.length) : row.key,
|
|
@@ -4,4 +4,4 @@ export declare const ACTIVE_GRAPH_TOPICS = "SELECT DISTINCT graph_topic FROM lt_
|
|
|
4
4
|
export declare const COUNT_JOBS: (schema: string, where: string) => string;
|
|
5
5
|
export declare const GET_JOB: (schema: string) => string;
|
|
6
6
|
export declare const GET_JOB_ATTRIBUTES: (schema: string) => string;
|
|
7
|
-
export declare const LIST_JOBS: (schema: string, appId: string, where: string, limitIdx: number, offsetIdx: number) => string;
|
|
7
|
+
export declare const LIST_JOBS: (schema: string, appId: string, where: string, limitIdx: number, offsetIdx: number, orderBy?: string) => string;
|
|
@@ -18,7 +18,7 @@ exports.GET_JOB = GET_JOB;
|
|
|
18
18
|
const GET_JOB_ATTRIBUTES = (schema) => `SELECT symbol, dimension, value FROM ${schema}.jobs_attributes WHERE job_id = $1 ORDER BY symbol, dimension`;
|
|
19
19
|
exports.GET_JOB_ATTRIBUTES = GET_JOB_ATTRIBUTES;
|
|
20
20
|
// ─── Queries (queries.ts) ───────────────────────────────────────────────────
|
|
21
|
-
const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbols AS (
|
|
21
|
+
const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx, orderBy) => `WITH ju_symbols AS (
|
|
22
22
|
SELECT value FROM ${schema}.symbols
|
|
23
23
|
WHERE key LIKE 'keys:%' AND field = 'metadata/ju'
|
|
24
24
|
)
|
|
@@ -33,6 +33,6 @@ const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbol
|
|
|
33
33
|
AND ju.symbol IN (SELECT value FROM ju_symbols)
|
|
34
34
|
AND (ju.dimension IS NULL OR ju.dimension = '')
|
|
35
35
|
${where}
|
|
36
|
-
ORDER BY (CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC
|
|
36
|
+
ORDER BY ${orderBy || '(CASE WHEN j.status > 0 THEN 0 ELSE 1 END), j.created_at DESC'}
|
|
37
37
|
LIMIT $${limitIdx} OFFSET $${offsetIdx}`;
|
|
38
38
|
exports.LIST_JOBS = LIST_JOBS;
|
|
@@ -2,6 +2,7 @@ import type { LTWorkflowSetRecord, LTWorkflowSetStatus, CreateWorkflowSetInput,
|
|
|
2
2
|
export declare function createWorkflowSet(input: CreateWorkflowSetInput): Promise<LTWorkflowSetRecord>;
|
|
3
3
|
export declare function getWorkflowSet(id: string): Promise<LTWorkflowSetRecord | null>;
|
|
4
4
|
export declare function updateWorkflowSetPlan(id: string, plan: PlanItem[], namespaces: string[]): Promise<LTWorkflowSetRecord | null>;
|
|
5
|
+
export declare function appendWorkflowSetSpecification(id: string, specification: string): Promise<LTWorkflowSetRecord | null>;
|
|
5
6
|
export declare function updateWorkflowSetStatus(id: string, status: LTWorkflowSetStatus): Promise<LTWorkflowSetRecord | null>;
|
|
6
7
|
export declare function updateWorkflowSetSourceWorkflow(id: string, sourceWorkflowId: string): Promise<void>;
|
|
7
8
|
export declare function deleteWorkflowSet(id: string): Promise<boolean>;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createWorkflowSet = createWorkflowSet;
|
|
4
4
|
exports.getWorkflowSet = getWorkflowSet;
|
|
5
5
|
exports.updateWorkflowSetPlan = updateWorkflowSetPlan;
|
|
6
|
+
exports.appendWorkflowSetSpecification = appendWorkflowSetSpecification;
|
|
6
7
|
exports.updateWorkflowSetStatus = updateWorkflowSetStatus;
|
|
7
8
|
exports.updateWorkflowSetSourceWorkflow = updateWorkflowSetSourceWorkflow;
|
|
8
9
|
exports.deleteWorkflowSet = deleteWorkflowSet;
|
|
@@ -36,6 +37,11 @@ async function updateWorkflowSetPlan(id, plan, namespaces) {
|
|
|
36
37
|
]);
|
|
37
38
|
return rows[0] || null;
|
|
38
39
|
}
|
|
40
|
+
async function appendWorkflowSetSpecification(id, specification) {
|
|
41
|
+
const pool = (0, db_1.getPool)();
|
|
42
|
+
const { rows } = await pool.query(sql_1.APPEND_WORKFLOW_SET_SPECIFICATION, [id, specification]);
|
|
43
|
+
return rows[0] || null;
|
|
44
|
+
}
|
|
39
45
|
async function updateWorkflowSetStatus(id, status) {
|
|
40
46
|
const pool = (0, db_1.getPool)();
|
|
41
47
|
const { rows } = await pool.query(sql_1.UPDATE_WORKFLOW_SET_STATUS, [id, status]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createWorkflowSet, getWorkflowSet, updateWorkflowSetPlan, updateWorkflowSetStatus, updateWorkflowSetSourceWorkflow, deleteWorkflowSet, listWorkflowSets, } from './db';
|
|
1
|
+
export { createWorkflowSet, getWorkflowSet, updateWorkflowSetPlan, updateWorkflowSetStatus, updateWorkflowSetSourceWorkflow, appendWorkflowSetSpecification, deleteWorkflowSet, listWorkflowSets, } from './db';
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listWorkflowSets = exports.deleteWorkflowSet = exports.updateWorkflowSetSourceWorkflow = exports.updateWorkflowSetStatus = exports.updateWorkflowSetPlan = exports.getWorkflowSet = exports.createWorkflowSet = void 0;
|
|
3
|
+
exports.listWorkflowSets = exports.deleteWorkflowSet = exports.appendWorkflowSetSpecification = exports.updateWorkflowSetSourceWorkflow = exports.updateWorkflowSetStatus = exports.updateWorkflowSetPlan = exports.getWorkflowSet = exports.createWorkflowSet = void 0;
|
|
4
4
|
var db_1 = require("./db");
|
|
5
5
|
Object.defineProperty(exports, "createWorkflowSet", { enumerable: true, get: function () { return db_1.createWorkflowSet; } });
|
|
6
6
|
Object.defineProperty(exports, "getWorkflowSet", { enumerable: true, get: function () { return db_1.getWorkflowSet; } });
|
|
7
7
|
Object.defineProperty(exports, "updateWorkflowSetPlan", { enumerable: true, get: function () { return db_1.updateWorkflowSetPlan; } });
|
|
8
8
|
Object.defineProperty(exports, "updateWorkflowSetStatus", { enumerable: true, get: function () { return db_1.updateWorkflowSetStatus; } });
|
|
9
9
|
Object.defineProperty(exports, "updateWorkflowSetSourceWorkflow", { enumerable: true, get: function () { return db_1.updateWorkflowSetSourceWorkflow; } });
|
|
10
|
+
Object.defineProperty(exports, "appendWorkflowSetSpecification", { enumerable: true, get: function () { return db_1.appendWorkflowSetSpecification; } });
|
|
10
11
|
Object.defineProperty(exports, "deleteWorkflowSet", { enumerable: true, get: function () { return db_1.deleteWorkflowSet; } });
|
|
11
12
|
Object.defineProperty(exports, "listWorkflowSets", { enumerable: true, get: function () { return db_1.listWorkflowSets; } });
|
|
@@ -2,5 +2,6 @@ export declare const CREATE_WORKFLOW_SET = "\n INSERT INTO lt_workflow_sets (na
|
|
|
2
2
|
export declare const GET_WORKFLOW_SET = "\n SELECT * FROM lt_workflow_sets WHERE id = $1";
|
|
3
3
|
export declare const UPDATE_WORKFLOW_SET_PLAN = "\n UPDATE lt_workflow_sets\n SET plan = $2, namespaces = $3, status = 'planned', updated_at = NOW()\n WHERE id = $1\n RETURNING *";
|
|
4
4
|
export declare const UPDATE_WORKFLOW_SET_STATUS = "\n UPDATE lt_workflow_sets\n SET status = $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *";
|
|
5
|
+
export declare const APPEND_WORKFLOW_SET_SPECIFICATION = "\n UPDATE lt_workflow_sets\n SET specification = specification || E'\\n\\n---\\n\\n' || $2, updated_at = NOW()\n WHERE id = $1\n RETURNING *";
|
|
5
6
|
export declare const DELETE_WORKFLOW_SET = "\n DELETE FROM lt_workflow_sets WHERE id = $1";
|
|
6
7
|
export declare const LIST_WORKFLOW_SETS_BASE = "\n SELECT * FROM lt_workflow_sets";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── Workflow set CRUD ──────────────────────────────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.LIST_WORKFLOW_SETS_BASE = exports.DELETE_WORKFLOW_SET = exports.UPDATE_WORKFLOW_SET_STATUS = exports.UPDATE_WORKFLOW_SET_PLAN = exports.GET_WORKFLOW_SET = exports.CREATE_WORKFLOW_SET = void 0;
|
|
4
|
+
exports.LIST_WORKFLOW_SETS_BASE = exports.DELETE_WORKFLOW_SET = exports.APPEND_WORKFLOW_SET_SPECIFICATION = exports.UPDATE_WORKFLOW_SET_STATUS = exports.UPDATE_WORKFLOW_SET_PLAN = exports.GET_WORKFLOW_SET = exports.CREATE_WORKFLOW_SET = void 0;
|
|
5
5
|
exports.CREATE_WORKFLOW_SET = `
|
|
6
6
|
INSERT INTO lt_workflow_sets (name, description, specification, plan, namespaces, source_workflow_id)
|
|
7
7
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
@@ -18,6 +18,11 @@ exports.UPDATE_WORKFLOW_SET_STATUS = `
|
|
|
18
18
|
SET status = $2, updated_at = NOW()
|
|
19
19
|
WHERE id = $1
|
|
20
20
|
RETURNING *`;
|
|
21
|
+
exports.APPEND_WORKFLOW_SET_SPECIFICATION = `
|
|
22
|
+
UPDATE lt_workflow_sets
|
|
23
|
+
SET specification = specification || E'\\n\\n---\\n\\n' || $2, updated_at = NOW()
|
|
24
|
+
WHERE id = $1
|
|
25
|
+
RETURNING *`;
|
|
21
26
|
exports.DELETE_WORKFLOW_SET = `
|
|
22
27
|
DELETE FROM lt_workflow_sets WHERE id = $1`;
|
|
23
28
|
exports.LIST_WORKFLOW_SETS_BASE = `
|
|
@@ -21,6 +21,18 @@ export declare function discoverWorkflows(prompt: string, tags: string[], catego
|
|
|
21
21
|
})[]>;
|
|
22
22
|
export declare function getActiveYamlWorkflows(): Promise<LTYamlWorkflowRecord[]>;
|
|
23
23
|
export declare function listYamlWorkflowsByAppId(appId: string): Promise<LTYamlWorkflowRecord[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Return the next app-level version for a namespace.
|
|
26
|
+
*
|
|
27
|
+
* Each deploy of an app (namespace) must use a strictly increasing integer
|
|
28
|
+
* version. This queries the current max across all non-archived workflows
|
|
29
|
+
* in the namespace and returns max + 1.
|
|
30
|
+
*
|
|
31
|
+
* A new namespace with no workflows returns '1'.
|
|
32
|
+
* An existing namespace with one active tool at v1 returns '2' when a
|
|
33
|
+
* second tool is added — even though that second tool is "version 1" of itself.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getNextAppVersion(appId: string): Promise<string>;
|
|
24
36
|
export declare function getDistinctAppIds(): Promise<string[]>;
|
|
25
37
|
export declare function createVersionSnapshot(workflowId: string, version: number, yamlContent: string, activityManifest: ActivityManifestEntry[] | unknown, inputSchema: Record<string, unknown> | unknown, outputSchema: Record<string, unknown> | unknown, inputFieldMeta?: unknown, changeSummary?: string): Promise<LTYamlWorkflowVersionRecord>;
|
|
26
38
|
export declare function getVersionHistory(workflowId: string, limit?: number, offset?: number): Promise<{
|
|
@@ -11,6 +11,7 @@ exports.deleteYamlWorkflow = deleteYamlWorkflow;
|
|
|
11
11
|
exports.discoverWorkflows = discoverWorkflows;
|
|
12
12
|
exports.getActiveYamlWorkflows = getActiveYamlWorkflows;
|
|
13
13
|
exports.listYamlWorkflowsByAppId = listYamlWorkflowsByAppId;
|
|
14
|
+
exports.getNextAppVersion = getNextAppVersion;
|
|
14
15
|
exports.getDistinctAppIds = getDistinctAppIds;
|
|
15
16
|
exports.createVersionSnapshot = createVersionSnapshot;
|
|
16
17
|
exports.getVersionHistory = getVersionHistory;
|
|
@@ -172,6 +173,23 @@ async function listYamlWorkflowsByAppId(appId) {
|
|
|
172
173
|
const { rows } = await pool.query(sql_1.LIST_BY_APP_ID, [appId]);
|
|
173
174
|
return rows;
|
|
174
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Return the next app-level version for a namespace.
|
|
178
|
+
*
|
|
179
|
+
* Each deploy of an app (namespace) must use a strictly increasing integer
|
|
180
|
+
* version. This queries the current max across all non-archived workflows
|
|
181
|
+
* in the namespace and returns max + 1.
|
|
182
|
+
*
|
|
183
|
+
* A new namespace with no workflows returns '1'.
|
|
184
|
+
* An existing namespace with one active tool at v1 returns '2' when a
|
|
185
|
+
* second tool is added — even though that second tool is "version 1" of itself.
|
|
186
|
+
*/
|
|
187
|
+
async function getNextAppVersion(appId) {
|
|
188
|
+
const pool = (0, db_1.getPool)();
|
|
189
|
+
const { rows } = await pool.query(sql_1.GET_MAX_APP_VERSION, [appId]);
|
|
190
|
+
const max = parseInt(rows[0]?.max_version ?? '0', 10);
|
|
191
|
+
return String(max + 1);
|
|
192
|
+
}
|
|
175
193
|
async function getDistinctAppIds() {
|
|
176
194
|
const pool = (0, db_1.getPool)();
|
|
177
195
|
const { rows } = await pool.query(sql_1.GET_DISTINCT_APP_IDS);
|
|
@@ -50,10 +50,10 @@ const analyze_1 = require("./pipeline/analyze");
|
|
|
50
50
|
const compile_1 = require("./pipeline/compile");
|
|
51
51
|
const build_1 = require("./pipeline/build");
|
|
52
52
|
const validate_1 = require("./pipeline/validate");
|
|
53
|
-
const
|
|
53
|
+
const utils_1 = require("../../modules/utils");
|
|
54
54
|
// Re-exports for backward compatibility
|
|
55
|
-
var
|
|
56
|
-
Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return
|
|
55
|
+
var build_2 = require("./pipeline/build");
|
|
56
|
+
Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return build_2.capToolArguments; } });
|
|
57
57
|
/**
|
|
58
58
|
* Generate a HotMesh YAML workflow from a completed execution's tool call sequence.
|
|
59
59
|
*
|
|
@@ -63,7 +63,7 @@ Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: func
|
|
|
63
63
|
*/
|
|
64
64
|
async function generateYamlFromExecution(options) {
|
|
65
65
|
const appId = options.appId || 'longtail';
|
|
66
|
-
const graphTopic =
|
|
66
|
+
const graphTopic = (0, utils_1.sanitizeToolName)(options.subscribes || options.name);
|
|
67
67
|
// 1. Export the execution to get events
|
|
68
68
|
const execution = await (0, index_1.exportWorkflowExecution)(options.workflowId, options.taskQueue, options.workflowName);
|
|
69
69
|
// 2. Initialize pipeline context
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* Falls back to mechanical heuristics when no plan is available.
|
|
7
7
|
*/
|
|
8
8
|
import type { PipelineContext } from '../../types';
|
|
9
|
-
export { capToolArguments
|
|
9
|
+
export { capToolArguments } from './utils';
|
|
10
|
+
export { sanitizeToolName } from '../../../../modules/utils';
|
|
10
11
|
/**
|
|
11
12
|
* Build pipeline stage: construct the HotMesh YAML DAG.
|
|
12
13
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Falls back to mechanical heuristics when no plan is available.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
10
|
+
exports.sanitizeToolName = exports.capToolArguments = void 0;
|
|
11
11
|
exports.build = build;
|
|
12
12
|
const input_analyzer_1 = require("../../input-analyzer");
|
|
13
13
|
const utils_1 = require("./utils");
|
|
@@ -17,7 +17,8 @@ const dag_1 = require("./dag");
|
|
|
17
17
|
// Re-export public utilities used by other modules
|
|
18
18
|
var utils_2 = require("./utils");
|
|
19
19
|
Object.defineProperty(exports, "capToolArguments", { enumerable: true, get: function () { return utils_2.capToolArguments; } });
|
|
20
|
-
|
|
20
|
+
var utils_3 = require("../../../../modules/utils");
|
|
21
|
+
Object.defineProperty(exports, "sanitizeToolName", { enumerable: true, get: function () { return utils_3.sanitizeToolName; } });
|
|
21
22
|
/**
|
|
22
23
|
* Build pipeline stage: construct the HotMesh YAML DAG.
|
|
23
24
|
*
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
export declare function keysRelated(a: string, b: string): boolean;
|
|
9
9
|
/** Cap `limit` in tool arguments to avoid sending huge payloads to downstream LLM steps. */
|
|
10
10
|
export declare function capToolArguments(args: Record<string, unknown>): Record<string, unknown>;
|
|
11
|
-
/** Sanitize a name for use in HotMesh app IDs and topics. */
|
|
12
|
-
export declare function sanitizeName(name: string): string;
|
|
13
11
|
/** Convert a snake_case/camelCase field name to a readable label. */
|
|
14
12
|
export declare function humanize(name: string): string;
|
|
15
13
|
/**
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.keysRelated = keysRelated;
|
|
7
7
|
exports.capToolArguments = capToolArguments;
|
|
8
|
-
exports.sanitizeName = sanitizeName;
|
|
9
8
|
exports.humanize = humanize;
|
|
10
9
|
exports.inferSchema = inferSchema;
|
|
11
10
|
exports.buildInputMappings = buildInputMappings;
|
|
@@ -35,13 +34,6 @@ function capToolArguments(args) {
|
|
|
35
34
|
}
|
|
36
35
|
return capped;
|
|
37
36
|
}
|
|
38
|
-
/** Sanitize a name for use in HotMesh app IDs and topics. */
|
|
39
|
-
function sanitizeName(name) {
|
|
40
|
-
return name
|
|
41
|
-
.toLowerCase()
|
|
42
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
43
|
-
.replace(/^-|-$/g, '');
|
|
44
|
-
}
|
|
45
37
|
/** Convert a snake_case/camelCase field name to a readable label. */
|
|
46
38
|
function humanize(name) {
|
|
47
39
|
return name
|
|
@@ -6,7 +6,8 @@ export declare const UPDATE_YAML_WORKFLOW_VERSION = "\n UPDATE lt_yaml_workflow
|
|
|
6
6
|
export declare const DELETE_YAML_WORKFLOW = "\n DELETE FROM lt_yaml_workflows WHERE id = $1";
|
|
7
7
|
export declare const GET_ACTIVE_YAML_WORKFLOWS = "\n SELECT * FROM lt_yaml_workflows\n WHERE status = 'active'\n ORDER BY name";
|
|
8
8
|
export declare const LIST_BY_APP_ID = "\n SELECT * FROM lt_yaml_workflows\n WHERE app_id = $1 AND status != 'archived'\n ORDER BY name";
|
|
9
|
-
export declare const
|
|
9
|
+
export declare const GET_MAX_APP_VERSION = "\n SELECT COALESCE(MAX(CAST(app_version AS INTEGER)), 0) AS max_version\n FROM lt_yaml_workflows\n WHERE app_id = $1 AND status != 'archived'";
|
|
10
|
+
export declare const GET_DISTINCT_APP_IDS = "\n SELECT DISTINCT app_id FROM (\n SELECT app_id FROM lt_yaml_workflows WHERE status != 'archived'\n UNION\n SELECT app_id FROM hmsh_applications WHERE active = true\n ) all_apps\n ORDER BY app_id";
|
|
10
11
|
export declare const MARK_CONTENT_DEPLOYED = "\n UPDATE lt_yaml_workflows\n SET deployed_content_version = content_version\n WHERE id = $1";
|
|
11
12
|
export declare const MARK_APP_ID_CONTENT_DEPLOYED = "\n UPDATE lt_yaml_workflows\n SET deployed_content_version = content_version\n WHERE app_id = $1 AND status != 'archived'";
|
|
12
13
|
export declare const CREATE_VERSION_SNAPSHOT = "\n INSERT INTO lt_yaml_workflow_versions\n (workflow_id, version, yaml_content, activity_manifest, input_schema, output_schema, input_field_meta, change_summary)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (workflow_id, version) DO NOTHING\n RETURNING *";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── YAML workflow CRUD ─────────────────────────────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.FIND_BY_TAGS_ALL = exports.FIND_BY_TAGS_ANY = exports.GET_CRON_SCHEDULED_WORKFLOWS = exports.CLEAR_CRON_SCHEDULE = exports.UPDATE_CRON_SCHEDULE = exports.UPDATE_STATUS_SUFFIX = exports.UPDATE_STATUS_BASE = exports.GET_VERSION_SNAPSHOT = exports.DISCOVER_WORKFLOWS = exports.LIST_VERSIONS = exports.COUNT_VERSIONS = exports.CREATE_VERSION_SNAPSHOT = exports.MARK_APP_ID_CONTENT_DEPLOYED = exports.MARK_CONTENT_DEPLOYED = exports.GET_DISTINCT_APP_IDS = exports.LIST_BY_APP_ID = exports.GET_ACTIVE_YAML_WORKFLOWS = exports.DELETE_YAML_WORKFLOW = exports.UPDATE_YAML_WORKFLOW_VERSION = exports.GET_YAML_WORKFLOW_BY_NAME = exports.GET_YAML_WORKFLOW = exports.CHECK_TOPIC_UNIQUE = exports.CREATE_YAML_WORKFLOW = void 0;
|
|
4
|
+
exports.FIND_BY_TAGS_ALL = exports.FIND_BY_TAGS_ANY = exports.GET_CRON_SCHEDULED_WORKFLOWS = exports.CLEAR_CRON_SCHEDULE = exports.UPDATE_CRON_SCHEDULE = exports.UPDATE_STATUS_SUFFIX = exports.UPDATE_STATUS_BASE = exports.GET_VERSION_SNAPSHOT = exports.DISCOVER_WORKFLOWS = exports.LIST_VERSIONS = exports.COUNT_VERSIONS = exports.CREATE_VERSION_SNAPSHOT = exports.MARK_APP_ID_CONTENT_DEPLOYED = exports.MARK_CONTENT_DEPLOYED = exports.GET_DISTINCT_APP_IDS = exports.GET_MAX_APP_VERSION = exports.LIST_BY_APP_ID = exports.GET_ACTIVE_YAML_WORKFLOWS = exports.DELETE_YAML_WORKFLOW = exports.UPDATE_YAML_WORKFLOW_VERSION = exports.GET_YAML_WORKFLOW_BY_NAME = exports.GET_YAML_WORKFLOW = exports.CHECK_TOPIC_UNIQUE = exports.CREATE_YAML_WORKFLOW = void 0;
|
|
5
5
|
exports.CREATE_YAML_WORKFLOW = `
|
|
6
6
|
INSERT INTO lt_yaml_workflows
|
|
7
7
|
(name, description, app_id, app_version, source_workflow_id,
|
|
@@ -32,9 +32,16 @@ exports.LIST_BY_APP_ID = `
|
|
|
32
32
|
SELECT * FROM lt_yaml_workflows
|
|
33
33
|
WHERE app_id = $1 AND status != 'archived'
|
|
34
34
|
ORDER BY name`;
|
|
35
|
+
exports.GET_MAX_APP_VERSION = `
|
|
36
|
+
SELECT COALESCE(MAX(CAST(app_version AS INTEGER)), 0) AS max_version
|
|
37
|
+
FROM lt_yaml_workflows
|
|
38
|
+
WHERE app_id = $1 AND status != 'archived'`;
|
|
35
39
|
exports.GET_DISTINCT_APP_IDS = `
|
|
36
|
-
SELECT DISTINCT app_id FROM
|
|
37
|
-
|
|
40
|
+
SELECT DISTINCT app_id FROM (
|
|
41
|
+
SELECT app_id FROM lt_yaml_workflows WHERE status != 'archived'
|
|
42
|
+
UNION
|
|
43
|
+
SELECT app_id FROM hmsh_applications WHERE active = true
|
|
44
|
+
) all_apps
|
|
38
45
|
ORDER BY app_id`;
|
|
39
46
|
exports.MARK_CONTENT_DEPLOYED = `
|
|
40
47
|
UPDATE lt_yaml_workflows
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-driven data exchange with external service endpoints.
|
|
3
|
+
*
|
|
4
|
+
* Three pillars: endpoint + schema + identity.
|
|
5
|
+
* Transport (fetch, Playwright, gRPC) is an implementation detail.
|
|
6
|
+
* The value is schema enforcement and credential resolution —
|
|
7
|
+
* validating both sides of the exchange and resolving auth from
|
|
8
|
+
* the connection store at the last mile.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Validate data against a JSON Schema.
|
|
12
|
+
*
|
|
13
|
+
* Returns a list of human-readable error strings (empty when valid).
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateSchema(data: unknown, schema: Record<string, unknown>): {
|
|
16
|
+
valid: boolean;
|
|
17
|
+
errors: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Exchange data with an external service endpoint under schema enforcement.
|
|
21
|
+
*
|
|
22
|
+
* 1. If request_schema provided, validate body before sending.
|
|
23
|
+
* On failure: return immediately (never send the request).
|
|
24
|
+
* 2. Make the HTTP call (transport layer — currently Node.js fetch).
|
|
25
|
+
* 3. Parse response body (JSON auto-detect).
|
|
26
|
+
* 4. If response_schema provided, validate response after receiving.
|
|
27
|
+
* 5. Return result with validated flag and any validation_errors.
|
|
28
|
+
*/
|
|
29
|
+
export declare function exchange(args: {
|
|
30
|
+
endpoint?: string;
|
|
31
|
+
url?: string;
|
|
32
|
+
method: string;
|
|
33
|
+
headers?: Record<string, string>;
|
|
34
|
+
query?: Record<string, string>;
|
|
35
|
+
body?: unknown;
|
|
36
|
+
request_schema?: Record<string, unknown>;
|
|
37
|
+
response_schema?: Record<string, unknown>;
|
|
38
|
+
timeout_ms?: number;
|
|
39
|
+
credential_provider?: string;
|
|
40
|
+
credential_label?: string;
|
|
41
|
+
auth_scheme?: string;
|
|
42
|
+
auth_header?: string;
|
|
43
|
+
}): Promise<{
|
|
44
|
+
status: number;
|
|
45
|
+
data: unknown;
|
|
46
|
+
headers: Record<string, string>;
|
|
47
|
+
elapsed_ms: number;
|
|
48
|
+
validated: boolean;
|
|
49
|
+
validation_errors: string[];
|
|
50
|
+
}>;
|