@hotmeshio/long-tail 0.1.13 → 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/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/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-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/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 +3 -1
- 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
|
@@ -2931,10 +2931,13 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
2931
2931
|
type: string;
|
|
2932
2932
|
description: string;
|
|
2933
2933
|
};
|
|
2934
|
-
|
|
2934
|
+
field: {
|
|
2935
2935
|
type: string;
|
|
2936
2936
|
description: string;
|
|
2937
2937
|
};
|
|
2938
|
+
data: {
|
|
2939
|
+
description: string;
|
|
2940
|
+
};
|
|
2938
2941
|
tags: {
|
|
2939
2942
|
type: string;
|
|
2940
2943
|
items: {
|
|
@@ -2964,6 +2967,7 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
2964
2967
|
type: string;
|
|
2965
2968
|
description: string;
|
|
2966
2969
|
};
|
|
2970
|
+
field?: undefined;
|
|
2967
2971
|
data?: undefined;
|
|
2968
2972
|
tags?: undefined;
|
|
2969
2973
|
query?: undefined;
|
|
@@ -3000,6 +3004,7 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
3000
3004
|
description: string;
|
|
3001
3005
|
};
|
|
3002
3006
|
key?: undefined;
|
|
3007
|
+
field?: undefined;
|
|
3003
3008
|
data?: undefined;
|
|
3004
3009
|
offset?: undefined;
|
|
3005
3010
|
path?: undefined;
|
|
@@ -3033,6 +3038,7 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
3033
3038
|
description: string;
|
|
3034
3039
|
};
|
|
3035
3040
|
key?: undefined;
|
|
3041
|
+
field?: undefined;
|
|
3036
3042
|
data?: undefined;
|
|
3037
3043
|
query?: undefined;
|
|
3038
3044
|
path?: undefined;
|
|
@@ -3048,6 +3054,7 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
3048
3054
|
properties: {
|
|
3049
3055
|
domain?: undefined;
|
|
3050
3056
|
key?: undefined;
|
|
3057
|
+
field?: undefined;
|
|
3051
3058
|
data?: undefined;
|
|
3052
3059
|
tags?: undefined;
|
|
3053
3060
|
query?: undefined;
|
|
@@ -3079,6 +3086,7 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
3079
3086
|
value: {
|
|
3080
3087
|
description: string;
|
|
3081
3088
|
};
|
|
3089
|
+
field?: undefined;
|
|
3082
3090
|
data?: undefined;
|
|
3083
3091
|
tags?: undefined;
|
|
3084
3092
|
query?: undefined;
|
|
@@ -3096,4 +3104,107 @@ export declare const SEED_MCP_SERVERS: ({
|
|
|
3096
3104
|
tags: string[];
|
|
3097
3105
|
compile_hints: string;
|
|
3098
3106
|
credential_providers: never[];
|
|
3107
|
+
} | {
|
|
3108
|
+
name: string;
|
|
3109
|
+
description: string;
|
|
3110
|
+
transport_type: string;
|
|
3111
|
+
transport_config: {
|
|
3112
|
+
builtin: boolean;
|
|
3113
|
+
process: string;
|
|
3114
|
+
};
|
|
3115
|
+
tool_manifest: ({
|
|
3116
|
+
name: string;
|
|
3117
|
+
description: string;
|
|
3118
|
+
inputSchema: {
|
|
3119
|
+
type: string;
|
|
3120
|
+
properties: {
|
|
3121
|
+
endpoint: {
|
|
3122
|
+
type: string;
|
|
3123
|
+
description: string;
|
|
3124
|
+
};
|
|
3125
|
+
method: {
|
|
3126
|
+
type: string;
|
|
3127
|
+
description: string;
|
|
3128
|
+
};
|
|
3129
|
+
headers: {
|
|
3130
|
+
type: string;
|
|
3131
|
+
description: string;
|
|
3132
|
+
};
|
|
3133
|
+
query: {
|
|
3134
|
+
type: string;
|
|
3135
|
+
description: string;
|
|
3136
|
+
};
|
|
3137
|
+
body: {
|
|
3138
|
+
description: string;
|
|
3139
|
+
};
|
|
3140
|
+
request_schema: {
|
|
3141
|
+
type: string;
|
|
3142
|
+
description: string;
|
|
3143
|
+
};
|
|
3144
|
+
response_schema: {
|
|
3145
|
+
type: string;
|
|
3146
|
+
description: string;
|
|
3147
|
+
};
|
|
3148
|
+
timeout_ms: {
|
|
3149
|
+
type: string;
|
|
3150
|
+
description: string;
|
|
3151
|
+
};
|
|
3152
|
+
credential_provider: {
|
|
3153
|
+
type: string;
|
|
3154
|
+
description: string;
|
|
3155
|
+
};
|
|
3156
|
+
credential_label: {
|
|
3157
|
+
type: string;
|
|
3158
|
+
description: string;
|
|
3159
|
+
};
|
|
3160
|
+
auth_scheme: {
|
|
3161
|
+
type: string;
|
|
3162
|
+
description: string;
|
|
3163
|
+
};
|
|
3164
|
+
auth_header: {
|
|
3165
|
+
type: string;
|
|
3166
|
+
description: string;
|
|
3167
|
+
};
|
|
3168
|
+
data?: undefined;
|
|
3169
|
+
schema?: undefined;
|
|
3170
|
+
};
|
|
3171
|
+
required: string[];
|
|
3172
|
+
};
|
|
3173
|
+
} | {
|
|
3174
|
+
name: string;
|
|
3175
|
+
description: string;
|
|
3176
|
+
inputSchema: {
|
|
3177
|
+
type: string;
|
|
3178
|
+
properties: {
|
|
3179
|
+
data: {
|
|
3180
|
+
description: string;
|
|
3181
|
+
};
|
|
3182
|
+
schema: {
|
|
3183
|
+
type: string;
|
|
3184
|
+
description: string;
|
|
3185
|
+
};
|
|
3186
|
+
endpoint?: undefined;
|
|
3187
|
+
method?: undefined;
|
|
3188
|
+
headers?: undefined;
|
|
3189
|
+
query?: undefined;
|
|
3190
|
+
body?: undefined;
|
|
3191
|
+
request_schema?: undefined;
|
|
3192
|
+
response_schema?: undefined;
|
|
3193
|
+
timeout_ms?: undefined;
|
|
3194
|
+
credential_provider?: undefined;
|
|
3195
|
+
credential_label?: undefined;
|
|
3196
|
+
auth_scheme?: undefined;
|
|
3197
|
+
auth_header?: undefined;
|
|
3198
|
+
};
|
|
3199
|
+
required: string[];
|
|
3200
|
+
};
|
|
3201
|
+
})[];
|
|
3202
|
+
metadata: {
|
|
3203
|
+
builtin: boolean;
|
|
3204
|
+
category: string;
|
|
3205
|
+
level?: undefined;
|
|
3206
|
+
};
|
|
3207
|
+
tags: string[];
|
|
3208
|
+
compile_hints: string;
|
|
3209
|
+
credential_providers: never[];
|
|
3099
3210
|
})[];
|
|
@@ -192,4 +192,41 @@ exports.SEED_MCP_SERVERS = [
|
|
|
192
192
|
'list_domains returns all domains with counts, useful for discovering what knowledge exists.',
|
|
193
193
|
credential_providers: [],
|
|
194
194
|
},
|
|
195
|
+
{
|
|
196
|
+
name: 'long-tail-schema-exchange',
|
|
197
|
+
description: 'Schema-driven data exchange with external service endpoints. Validates requests and responses ' +
|
|
198
|
+
'against JSON Schema. Transport is an implementation detail — the principle is endpoint + schema + ' +
|
|
199
|
+
'validated exchange. Use this as the building block for wrapping any external API.',
|
|
200
|
+
transport_type: 'stdio',
|
|
201
|
+
transport_config: { builtin: true, process: 'in-memory' },
|
|
202
|
+
tool_manifest: tool_manifests_data_1.SCHEMA_EXCHANGE_TOOLS,
|
|
203
|
+
metadata: { builtin: true, category: 'data' },
|
|
204
|
+
tags: ['api', 'schema', 'exchange', 'validation', 'fetch'],
|
|
205
|
+
compile_hints: 'Schema-driven data exchange for external API endpoints. Validates requests before sending and responses after receiving against JSON Schema. ' +
|
|
206
|
+
'When building a workflow that calls an external API endpoint, use exchange as the worker activity. ' +
|
|
207
|
+
'Embed request_schema and response_schema as STATIC values in input.maps (not dynamic inputs — schemas are fixed per endpoint). ' +
|
|
208
|
+
'Build the endpoint URL using @pipe concat for template variables. Use "url" for the endpoint field name. ' +
|
|
209
|
+
'CRITICAL — Authorization headers: when the trigger provides a token and you need to build "Bearer {token}", use this EXACT YAML structure for the headers field in input.maps:\n' +
|
|
210
|
+
' headers:\n' +
|
|
211
|
+
' Authorization:\n' +
|
|
212
|
+
' \'@pipe\':\n' +
|
|
213
|
+
' - [\'Bearer \', \'{trigger_XXXX.output.data.token}\']\n' +
|
|
214
|
+
' - [\'{@string.concat}\']\n' +
|
|
215
|
+
'NEVER nest @pipe inside @pipe for headers. NEVER use @object.fromEntries for headers. The headers field is a plain object — each header name is a key, and its value can be a static string or a single @pipe expression. ' +
|
|
216
|
+
'The trigger input_schema should reflect the endpoint\'s dynamic parameters (IDs, search terms, pagination) plus base_url and credentials. ' +
|
|
217
|
+
'CRITICAL — exchange output structure: the exchange tool returns { status, data, headers, elapsed_ms, validated, validation_errors }. ' +
|
|
218
|
+
'The actual API response body is inside the "data" field. So to reference a response field like "token", ' +
|
|
219
|
+
'use {activity.output.data.data.token} (NOT {activity.output.data.token}). ' +
|
|
220
|
+
'The double .data is because HotMesh wraps activity output in .output.data, and the exchange tool puts the API response in its own .data field. ' +
|
|
221
|
+
'For job.maps on the last activity: job.maps.token: \'{exchange_xxxx.output.data.data.token}\'. ' +
|
|
222
|
+
'Also surface validated and status: job.maps.validated: \'{exchange_xxxx.output.data.validated}\', job.maps.status: \'{exchange_xxxx.output.data.status}\'. ' +
|
|
223
|
+
'response_schema enables self-testing: schedule the compiled tool on cron against a dev/staging server — if validation fails, the API schema changed. ' +
|
|
224
|
+
'request_schema prevents malformed requests from ever leaving the system. ' +
|
|
225
|
+
'Both schemas are optional — use response_schema alone for read endpoints, both for write endpoints, neither for exploratory calls. ' +
|
|
226
|
+
'For authentication, prefer credential_provider over manually wiring tokens in headers. ' +
|
|
227
|
+
'Set credential_provider to the provider name registered in the connection store (e.g. "stripe", "epic", "google"). ' +
|
|
228
|
+
'The tool resolves the credential from the calling principal\'s stored connections at the last mile — no token input needed, auto-refreshes expired tokens. ' +
|
|
229
|
+
'Use auth_scheme for non-Bearer schemes (e.g. "Basic", "Token") and auth_header for APIs that use X-API-Key instead of Authorization.',
|
|
230
|
+
credential_providers: [],
|
|
231
|
+
},
|
|
195
232
|
];
|
|
@@ -284,6 +284,93 @@ export declare const HTTP_FETCH_TOOLS: ({
|
|
|
284
284
|
required: string[];
|
|
285
285
|
};
|
|
286
286
|
})[];
|
|
287
|
+
export declare const SCHEMA_EXCHANGE_TOOLS: ({
|
|
288
|
+
name: string;
|
|
289
|
+
description: string;
|
|
290
|
+
inputSchema: {
|
|
291
|
+
type: string;
|
|
292
|
+
properties: {
|
|
293
|
+
endpoint: {
|
|
294
|
+
type: string;
|
|
295
|
+
description: string;
|
|
296
|
+
};
|
|
297
|
+
method: {
|
|
298
|
+
type: string;
|
|
299
|
+
description: string;
|
|
300
|
+
};
|
|
301
|
+
headers: {
|
|
302
|
+
type: string;
|
|
303
|
+
description: string;
|
|
304
|
+
};
|
|
305
|
+
query: {
|
|
306
|
+
type: string;
|
|
307
|
+
description: string;
|
|
308
|
+
};
|
|
309
|
+
body: {
|
|
310
|
+
description: string;
|
|
311
|
+
};
|
|
312
|
+
request_schema: {
|
|
313
|
+
type: string;
|
|
314
|
+
description: string;
|
|
315
|
+
};
|
|
316
|
+
response_schema: {
|
|
317
|
+
type: string;
|
|
318
|
+
description: string;
|
|
319
|
+
};
|
|
320
|
+
timeout_ms: {
|
|
321
|
+
type: string;
|
|
322
|
+
description: string;
|
|
323
|
+
};
|
|
324
|
+
credential_provider: {
|
|
325
|
+
type: string;
|
|
326
|
+
description: string;
|
|
327
|
+
};
|
|
328
|
+
credential_label: {
|
|
329
|
+
type: string;
|
|
330
|
+
description: string;
|
|
331
|
+
};
|
|
332
|
+
auth_scheme: {
|
|
333
|
+
type: string;
|
|
334
|
+
description: string;
|
|
335
|
+
};
|
|
336
|
+
auth_header: {
|
|
337
|
+
type: string;
|
|
338
|
+
description: string;
|
|
339
|
+
};
|
|
340
|
+
data?: undefined;
|
|
341
|
+
schema?: undefined;
|
|
342
|
+
};
|
|
343
|
+
required: string[];
|
|
344
|
+
};
|
|
345
|
+
} | {
|
|
346
|
+
name: string;
|
|
347
|
+
description: string;
|
|
348
|
+
inputSchema: {
|
|
349
|
+
type: string;
|
|
350
|
+
properties: {
|
|
351
|
+
data: {
|
|
352
|
+
description: string;
|
|
353
|
+
};
|
|
354
|
+
schema: {
|
|
355
|
+
type: string;
|
|
356
|
+
description: string;
|
|
357
|
+
};
|
|
358
|
+
endpoint?: undefined;
|
|
359
|
+
method?: undefined;
|
|
360
|
+
headers?: undefined;
|
|
361
|
+
query?: undefined;
|
|
362
|
+
body?: undefined;
|
|
363
|
+
request_schema?: undefined;
|
|
364
|
+
response_schema?: undefined;
|
|
365
|
+
timeout_ms?: undefined;
|
|
366
|
+
credential_provider?: undefined;
|
|
367
|
+
credential_label?: undefined;
|
|
368
|
+
auth_scheme?: undefined;
|
|
369
|
+
auth_header?: undefined;
|
|
370
|
+
};
|
|
371
|
+
required: string[];
|
|
372
|
+
};
|
|
373
|
+
})[];
|
|
287
374
|
export declare const DOCS_TOOLS: ({
|
|
288
375
|
name: string;
|
|
289
376
|
description: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ── Data, storage, HTTP, and OAuth tool manifests ───────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.OAUTH_TOOLS = exports.DOCS_TOOLS = exports.HTTP_FETCH_TOOLS = exports.FILE_STORAGE_TOOLS = exports.DB_QUERY_TOOLS = exports.VISION_ANALYSIS_TOOLS = exports.TRANSLATION_TOOLS = void 0;
|
|
4
|
+
exports.OAUTH_TOOLS = exports.DOCS_TOOLS = exports.SCHEMA_EXCHANGE_TOOLS = exports.HTTP_FETCH_TOOLS = exports.FILE_STORAGE_TOOLS = exports.DB_QUERY_TOOLS = exports.VISION_ANALYSIS_TOOLS = exports.TRANSLATION_TOOLS = void 0;
|
|
5
5
|
exports.TRANSLATION_TOOLS = [
|
|
6
6
|
{
|
|
7
7
|
name: 'translate_content',
|
|
@@ -141,6 +141,42 @@ exports.HTTP_FETCH_TOOLS = [
|
|
|
141
141
|
},
|
|
142
142
|
},
|
|
143
143
|
];
|
|
144
|
+
exports.SCHEMA_EXCHANGE_TOOLS = [
|
|
145
|
+
{
|
|
146
|
+
name: 'exchange',
|
|
147
|
+
description: 'Exchange data with an external service endpoint under schema enforcement. Validates request body against request_schema before sending and response body against response_schema after receiving. Transport is hidden — the principle is endpoint + schema + validated exchange.',
|
|
148
|
+
inputSchema: {
|
|
149
|
+
type: 'object',
|
|
150
|
+
properties: {
|
|
151
|
+
endpoint: { type: 'string', description: 'Service endpoint URL' },
|
|
152
|
+
method: { type: 'string', description: 'HTTP method: GET, POST, PUT, DELETE, PATCH' },
|
|
153
|
+
headers: { type: 'object', description: 'Request headers' },
|
|
154
|
+
query: { type: 'object', description: 'Query parameters' },
|
|
155
|
+
body: { description: 'Request body (validated against request_schema if provided)' },
|
|
156
|
+
request_schema: { type: 'object', description: 'JSON Schema for request body validation' },
|
|
157
|
+
response_schema: { type: 'object', description: 'JSON Schema for response body validation' },
|
|
158
|
+
timeout_ms: { type: 'number', description: 'Request timeout in milliseconds' },
|
|
159
|
+
credential_provider: { type: 'string', description: 'Credential provider name — resolves auth from the connection store automatically' },
|
|
160
|
+
credential_label: { type: 'string', description: 'Credential label for multi-credential accounts' },
|
|
161
|
+
auth_scheme: { type: 'string', description: 'Auth scheme (default: Bearer)' },
|
|
162
|
+
auth_header: { type: 'string', description: 'Header name for credential (default: Authorization)' },
|
|
163
|
+
},
|
|
164
|
+
required: ['endpoint', 'method'],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: 'validate_schema',
|
|
169
|
+
description: 'Validate any value against a JSON Schema without making a network call. Useful for pre-validation, testing, and transform verification.',
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: 'object',
|
|
172
|
+
properties: {
|
|
173
|
+
data: { description: 'The value to validate' },
|
|
174
|
+
schema: { type: 'object', description: 'JSON Schema to validate against' },
|
|
175
|
+
},
|
|
176
|
+
required: ['data', 'schema'],
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
];
|
|
144
180
|
exports.DOCS_TOOLS = [
|
|
145
181
|
{
|
|
146
182
|
name: 'list_docs',
|
|
@@ -12,10 +12,13 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
12
12
|
type: string;
|
|
13
13
|
description: string;
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
field: {
|
|
16
16
|
type: string;
|
|
17
17
|
description: string;
|
|
18
18
|
};
|
|
19
|
+
data: {
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
19
22
|
tags: {
|
|
20
23
|
type: string;
|
|
21
24
|
items: {
|
|
@@ -45,6 +48,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
45
48
|
type: string;
|
|
46
49
|
description: string;
|
|
47
50
|
};
|
|
51
|
+
field?: undefined;
|
|
48
52
|
data?: undefined;
|
|
49
53
|
tags?: undefined;
|
|
50
54
|
query?: undefined;
|
|
@@ -81,6 +85,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
81
85
|
description: string;
|
|
82
86
|
};
|
|
83
87
|
key?: undefined;
|
|
88
|
+
field?: undefined;
|
|
84
89
|
data?: undefined;
|
|
85
90
|
offset?: undefined;
|
|
86
91
|
path?: undefined;
|
|
@@ -114,6 +119,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
114
119
|
description: string;
|
|
115
120
|
};
|
|
116
121
|
key?: undefined;
|
|
122
|
+
field?: undefined;
|
|
117
123
|
data?: undefined;
|
|
118
124
|
query?: undefined;
|
|
119
125
|
path?: undefined;
|
|
@@ -129,6 +135,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
129
135
|
properties: {
|
|
130
136
|
domain?: undefined;
|
|
131
137
|
key?: undefined;
|
|
138
|
+
field?: undefined;
|
|
132
139
|
data?: undefined;
|
|
133
140
|
tags?: undefined;
|
|
134
141
|
query?: undefined;
|
|
@@ -160,6 +167,7 @@ export declare const KNOWLEDGE_TOOLS: ({
|
|
|
160
167
|
value: {
|
|
161
168
|
description: string;
|
|
162
169
|
};
|
|
170
|
+
field?: undefined;
|
|
163
171
|
data?: undefined;
|
|
164
172
|
tags?: undefined;
|
|
165
173
|
query?: undefined;
|
|
@@ -5,14 +5,15 @@ exports.KNOWLEDGE_TOOLS = void 0;
|
|
|
5
5
|
exports.KNOWLEDGE_TOOLS = [
|
|
6
6
|
{
|
|
7
7
|
name: 'store_knowledge',
|
|
8
|
-
description: 'Store
|
|
8
|
+
description: 'Store a value in a 3-level additive hierarchy: domain > key > field. Upserts by domain+key — fields accumulate across calls. Same domain+key+field overwrites that field. When field is provided, data can be any type. When omitted, data must be an object.',
|
|
9
9
|
inputSchema: {
|
|
10
10
|
type: 'object',
|
|
11
11
|
properties: {
|
|
12
|
-
domain: { type: 'string', description: '
|
|
13
|
-
key: { type: 'string', description: '
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
domain: { type: 'string', description: 'Top level — groups entries by namespace (e.g. "screenshots", "config")' },
|
|
13
|
+
key: { type: 'string', description: 'Second level — unique identifier within domain (e.g. "homepage")' },
|
|
14
|
+
field: { type: 'string', description: 'Third level (leaf) — names a specific field. Different fields accumulate; same field overwrites.' },
|
|
15
|
+
data: { description: 'The value to store. Any type when field is provided; must be an object when field is omitted.' },
|
|
16
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Categorization tags (unioned on upsert)' },
|
|
16
17
|
},
|
|
17
18
|
required: ['domain', 'key', 'data'],
|
|
18
19
|
},
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* The system prompt teaches the LLM how to construct HotMesh YAML DAGs
|
|
5
5
|
* directly from tool schemas — no execution trace needed.
|
|
6
6
|
*/
|
|
7
|
-
export declare function BUILDER_SYSTEM_PROMPT(toolInventory: string): string;
|
|
7
|
+
export declare function BUILDER_SYSTEM_PROMPT(toolInventory: string, activitySuffix?: string): string;
|
|
8
8
|
export declare const REFINE_PROMPT = "The workflow was tested and produced errors or incorrect results. Review the execution trace below and fix the YAML.\n\nCommon issues:\n- Missing .png extension on screenshot paths\n- Field name mismatch between output and input (e.g., producer outputs \"path\" but consumer expects \"image\")\n- Missing _scope or workflowName in input.maps\n- Wrong activity ID references in mappings\n- Missing job.maps on the final activity\n\nReturn the same JSON format as before with corrected yaml, activity_manifest, etc.";
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.REFINE_PROMPT = void 0;
|
|
10
10
|
exports.BUILDER_SYSTEM_PROMPT = BUILDER_SYSTEM_PROMPT;
|
|
11
|
-
function BUILDER_SYSTEM_PROMPT(toolInventory) {
|
|
11
|
+
function BUILDER_SYSTEM_PROMPT(toolInventory, activitySuffix) {
|
|
12
|
+
const suffix = activitySuffix || Math.random().toString(36).slice(2, 6);
|
|
12
13
|
return `You are a HotMesh workflow builder. Given a natural language description and a set of available MCP tools, you construct a deterministic YAML DAG workflow.
|
|
13
14
|
|
|
14
15
|
You do NOT execute tools. You reason about their input/output schemas and build the YAML declaratively.
|
|
@@ -45,7 +46,7 @@ app:
|
|
|
45
46
|
### trigger
|
|
46
47
|
Entry point. Receives user input. Always the first activity.
|
|
47
48
|
\`\`\`yaml
|
|
48
|
-
|
|
49
|
+
trigger_${suffix}:
|
|
49
50
|
title: Trigger
|
|
50
51
|
type: trigger
|
|
51
52
|
output:
|
|
@@ -56,7 +57,7 @@ trigger_x8kf:
|
|
|
56
57
|
### worker
|
|
57
58
|
Executes an MCP tool. Receives data via input.maps, produces output. Same suffix as the trigger.
|
|
58
59
|
\`\`\`yaml
|
|
59
|
-
|
|
60
|
+
capture_${suffix}:
|
|
60
61
|
title: Capture Page
|
|
61
62
|
type: worker
|
|
62
63
|
topic: <same as subscribes>
|
|
@@ -64,10 +65,10 @@ capture_x8kf:
|
|
|
64
65
|
schema:
|
|
65
66
|
type: object
|
|
66
67
|
maps:
|
|
67
|
-
url: '{
|
|
68
|
+
url: '{trigger_${suffix}.output.data.url}'
|
|
68
69
|
screenshot_path:
|
|
69
70
|
'@pipe':
|
|
70
|
-
- ['{
|
|
71
|
+
- ['{trigger_${suffix}.output.data.slug}', '.png']
|
|
71
72
|
- ['{@string.concat}']
|
|
72
73
|
workflowName: capture_page
|
|
73
74
|
output:
|
|
@@ -150,7 +151,7 @@ Sub-pipes must be ROW-LEVEL entries in the parent pipe array — each is a separ
|
|
|
150
151
|
dated_key:
|
|
151
152
|
'@pipe':
|
|
152
153
|
- '@pipe':
|
|
153
|
-
- ['{
|
|
154
|
+
- ['{trigger_${suffix}.output.data.slug}', '-']
|
|
154
155
|
- ['{@string.concat}']
|
|
155
156
|
- '@pipe':
|
|
156
157
|
- ['{@date.now}']
|
|
@@ -168,7 +169,7 @@ CRITICAL RULES for nested @pipe:
|
|
|
168
169
|
path:
|
|
169
170
|
'@pipe':
|
|
170
171
|
- '@pipe':
|
|
171
|
-
- ['{
|
|
172
|
+
- ['{trigger_${suffix}.output.data.domain}', '/', '{trigger_${suffix}.output.data.key}', '/']
|
|
172
173
|
- ['{@string.concat}']
|
|
173
174
|
- '@pipe':
|
|
174
175
|
- ['{@date.now}']
|
|
@@ -203,29 +204,29 @@ IMPORTANT: A bare array like \`['.png']\` as a row after sub-pipes will CRASH
|
|
|
203
204
|
|
|
204
205
|
1. **Trigger first**: Every workflow starts with a trigger activity
|
|
205
206
|
2. **Worker per tool**: Each MCP tool call is a worker activity
|
|
206
|
-
3. **Collision-proof activity IDs**: Multiple workflows share the same app namespace. Activity IDs MUST be globally unique within the app. Use a descriptive name with a shared 4-char random suffix appended to every activity in the flow: \`
|
|
207
|
+
3. **Collision-proof activity IDs**: Multiple workflows share the same app namespace. Activity IDs MUST be globally unique within the app. Use a descriptive name with a shared 4-char random suffix appended to every activity in the flow: \`trigger_${suffix}\`, \`capture_${suffix}\`, \`analyze_${suffix}\`, \`store_${suffix}\`. The suffix is the same for all activities in one workflow but unique across workflows. NEVER use bare names like \`trigger\`, \`capture\`, \`analyze\` — they WILL collide with other workflows in the same app.
|
|
207
208
|
4. **workflowName**: Every worker MUST have \`workflowName: '<tool_name>'\` in its input.maps — this routes to the correct MCP tool handler
|
|
208
209
|
5. **mcp_server_id**: In the activity_manifest, use the exact hyphenated server name from the inventory (e.g., "long-tail-vision"), NOT the underscored tool prefix (e.g., "long_tail_vision")
|
|
209
|
-
6. **_scope threading**: Every worker MUST have \`_scope: '{
|
|
210
|
+
6. **_scope threading**: Every worker MUST have \`_scope: '{trigger_${suffix}.output.data._scope}'\` (using YOUR trigger's ID) for IAM context
|
|
210
211
|
7. **Wire outputs forward**: Use \`{prevActivity.output.data.fieldName}\` to pass data between steps
|
|
211
212
|
8. **Use @pipe for transforms**: When a value needs runtime computation (date stamp, string concat, slugify), use @pipe — never hardcode computed values
|
|
212
|
-
9. **Simple fields stay simple**: If a field just passes a trigger value through (domain, key, url), use a plain reference like \`'{
|
|
213
|
+
9. **Simple fields stay simple**: If a field just passes a trigger value through (domain, key, url), use a plain reference like \`'{trigger_${suffix}.output.data.domain}'\` — NEVER wrap it in @pipe. Only use @pipe when actual transformation is needed.
|
|
213
214
|
10. **File extensions**: Screenshot paths MUST include .png extension. Use @pipe concat if deriving from a slug
|
|
214
215
|
11. **job.maps on last activity**: The final activity should have job.maps to promote output fields to the workflow result
|
|
215
216
|
12. **Linear transitions**: Chain activities with transitions unless branching or iteration is needed
|
|
216
217
|
13. **Conditional transitions**: For branching, use multi-target transitions with conditions:
|
|
217
218
|
\`\`\`yaml
|
|
218
219
|
transitions:
|
|
219
|
-
|
|
220
|
-
- to:
|
|
220
|
+
check_${suffix}:
|
|
221
|
+
- to: handle_error_${suffix}
|
|
221
222
|
conditions:
|
|
222
223
|
code: 500
|
|
223
|
-
- to:
|
|
224
|
+
- to: proceed_${suffix}
|
|
224
225
|
\`\`\`
|
|
225
226
|
Conditions can match on \`code\` (HTTP status) or \`match\` (field comparisons). The first matching condition wins; the last entry (no conditions) is the default.
|
|
226
227
|
14. **Trigger stats for idempotency**: Use \`stats.id\` and \`stats.key\` on the trigger when the workflow needs custom job IDs or indexed lookups:
|
|
227
228
|
\`\`\`yaml
|
|
228
|
-
|
|
229
|
+
trigger_${suffix}:
|
|
229
230
|
type: trigger
|
|
230
231
|
stats:
|
|
231
232
|
id: '{$self.input.data.workflowId}'
|
|
@@ -234,11 +235,11 @@ trigger_x8kf:
|
|
|
234
235
|
|
|
235
236
|
## Activity Manifest
|
|
236
237
|
|
|
237
|
-
Along with the YAML, produce an activity_manifest array describing each activity. Note how all activity IDs share the same random suffix (\`
|
|
238
|
+
Along with the YAML, produce an activity_manifest array describing each activity. Note how all activity IDs share the same random suffix (\`_${suffix}\`) for collision-proofing while remaining human-readable:
|
|
238
239
|
\`\`\`json
|
|
239
240
|
[
|
|
240
241
|
{
|
|
241
|
-
"activity_id": "
|
|
242
|
+
"activity_id": "trigger_${suffix}",
|
|
242
243
|
"title": "Trigger",
|
|
243
244
|
"type": "trigger",
|
|
244
245
|
"tool_source": "trigger",
|
|
@@ -247,7 +248,7 @@ Along with the YAML, produce an activity_manifest array describing each activity
|
|
|
247
248
|
"output_fields": ["url", "slug"]
|
|
248
249
|
},
|
|
249
250
|
{
|
|
250
|
-
"activity_id": "
|
|
251
|
+
"activity_id": "capture_${suffix}",
|
|
251
252
|
"title": "Capture Page",
|
|
252
253
|
"type": "worker",
|
|
253
254
|
"tool_source": "mcp",
|
|
@@ -256,7 +257,7 @@ Along with the YAML, produce an activity_manifest array describing each activity
|
|
|
256
257
|
"mcp_server_id": "long-tail-playwright-cli",
|
|
257
258
|
"mcp_tool_name": "capture_page",
|
|
258
259
|
"tool_arguments": {},
|
|
259
|
-
"input_mappings": { "url": "{
|
|
260
|
+
"input_mappings": { "url": "{trigger_${suffix}.output.data.url}" },
|
|
260
261
|
"output_fields": ["page_id", "path", "url", "title"]
|
|
261
262
|
}
|
|
262
263
|
]
|
|
@@ -290,11 +291,11 @@ When the user provides answers to your questions, build the workflow immediately
|
|
|
290
291
|
|
|
291
292
|
## Output Format
|
|
292
293
|
|
|
293
|
-
CRITICAL: The "name" field MUST match the "subscribes" topic in the YAML exactly. Use
|
|
294
|
+
CRITICAL: The "name" field MUST match the "subscribes" topic in the YAML exactly. Use snake_case (e.g. "screenshot_analyze_store", "capture_page", "daily_report"). Only lowercase letters, digits, and underscores. The name and subscribes topic MUST be identical.
|
|
294
295
|
|
|
295
296
|
Return a JSON object (no markdown fences):
|
|
296
297
|
{
|
|
297
|
-
"name": "
|
|
298
|
+
"name": "screenshot_analyze_store",
|
|
298
299
|
"description": "What this workflow does",
|
|
299
300
|
"yaml": "<the complete YAML string>",
|
|
300
301
|
"input_schema": { <JSON Schema for trigger inputs> },
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* These are side-effect functions that update the database.
|
|
4
4
|
*/
|
|
5
5
|
import type { PlanItem, LTWorkflowSetStatus } from '../../../../types/workflow-set';
|
|
6
|
-
export declare function persistPlan(setId: string, planItems: PlanItem[]): Promise<void>;
|
|
6
|
+
export declare function persistPlan(setId: string, planItems: PlanItem[], namespaces?: string[]): Promise<void>;
|
|
7
7
|
export interface BuiltWorkflowData {
|
|
8
8
|
name: string;
|
|
9
9
|
description: string;
|
|
@@ -12,9 +12,9 @@ const workflow_sets_1 = require("../../../../services/workflow-sets");
|
|
|
12
12
|
const db_1 = require("../../../../services/yaml-workflow/db");
|
|
13
13
|
const deployer_1 = require("../../../../services/yaml-workflow/deployer");
|
|
14
14
|
const workers_1 = require("../../../../services/yaml-workflow/workers");
|
|
15
|
-
async function persistPlan(setId, planItems) {
|
|
16
|
-
const
|
|
17
|
-
await (0, workflow_sets_1.updateWorkflowSetPlan)(setId, planItems,
|
|
15
|
+
async function persistPlan(setId, planItems, namespaces) {
|
|
16
|
+
const ns = namespaces || [...new Set(planItems.map(w => w.namespace))];
|
|
17
|
+
await (0, workflow_sets_1.updateWorkflowSetPlan)(setId, planItems, ns);
|
|
18
18
|
}
|
|
19
19
|
async function persistBuiltWorkflow(setId, planItem, builderOutput) {
|
|
20
20
|
const input = {
|
|
@@ -51,14 +51,48 @@ const { generatePlan, persistPlan, persistBuiltWorkflow, updateSetStatus, deploy
|
|
|
51
51
|
* and deploys the resulting set.
|
|
52
52
|
*/
|
|
53
53
|
async function mcpWorkflowPlanner(envelope) {
|
|
54
|
-
const { specification, setId } = envelope.data;
|
|
54
|
+
const { specification, setId, existingPlan, existingSchemas, } = envelope.data;
|
|
55
|
+
const isAddition = !!existingPlan?.length;
|
|
55
56
|
// 1. Generate plan from specification
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// When adding to an existing set, tell the planner what already exists
|
|
58
|
+
let planSpec = specification;
|
|
59
|
+
if (isAddition) {
|
|
60
|
+
const existingNames = existingPlan.map(p => `- ${p.name} [${p.namespace}]: ${p.description}`).join('\n');
|
|
61
|
+
const namespaces = [...new Set(existingPlan.map(p => p.namespace))];
|
|
62
|
+
planSpec = `${specification}\n\n## Existing workflows in this set (do NOT recreate these):\n${existingNames}\n\n## Namespace constraint\nNew workflows MUST use namespace "${namespaces[0]}". This set already uses this namespace and all tools must be co-located.`;
|
|
63
|
+
}
|
|
64
|
+
const planResult = await generatePlan(planSpec);
|
|
65
|
+
// 2. Offset build_order for additions so new items sort after existing ones
|
|
66
|
+
const buildOrderOffset = isAddition
|
|
67
|
+
? Math.max(...existingPlan.map((_, i) => i), 0) + 1
|
|
68
|
+
: 0;
|
|
69
|
+
if (isAddition) {
|
|
70
|
+
for (const item of planResult.workflows) {
|
|
71
|
+
item.build_order += buildOrderOffset;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 2b. Persist plan — append to existing plan for additions
|
|
75
|
+
if (isAddition) {
|
|
76
|
+
// Fetch current plan from the set and merge
|
|
77
|
+
const { getWorkflowSet } = await Promise.resolve().then(() => __importStar(require('../../../services/workflow-sets')));
|
|
78
|
+
const currentSet = await getWorkflowSet(setId);
|
|
79
|
+
const mergedPlan = [...(currentSet?.plan || []), ...planResult.workflows];
|
|
80
|
+
const mergedNamespaces = [...new Set([
|
|
81
|
+
...(currentSet?.namespaces || []),
|
|
82
|
+
...planResult.workflows.map(w => w.namespace),
|
|
83
|
+
])];
|
|
84
|
+
await persistPlan(setId, mergedPlan, mergedNamespaces);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
await persistPlan(setId, planResult.workflows);
|
|
88
|
+
}
|
|
59
89
|
// 3. Build each workflow in dependency order (leaf-first)
|
|
60
90
|
await updateSetStatus(setId, 'building');
|
|
61
|
-
|
|
91
|
+
// Seed sibling schemas with existing workflows when adding to a set
|
|
92
|
+
const builtWorkflows = (existingSchemas || []).map(s => ({
|
|
93
|
+
...s,
|
|
94
|
+
id: '',
|
|
95
|
+
}));
|
|
62
96
|
for (const planItem of planResult.workflows) {
|
|
63
97
|
// Build context for the builder: sibling schemas for composition wiring
|
|
64
98
|
const siblingSchemas = builtWorkflows.map(w => ({
|