@hotmeshio/long-tail 0.9.6 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -93
- package/build/api/escalations/helpers.d.ts +27 -0
- package/build/api/escalations/helpers.js +34 -0
- package/build/api/escalations/list.d.ts +2 -0
- package/build/api/escalations/list.js +13 -3
- package/build/api/escalations/resolve.js +16 -4
- package/build/routes/escalations/list.js +2 -0
- package/build/services/escalation/crud.d.ts +1 -1
- package/build/services/escalation/crud.js +6 -2
- package/build/services/escalation/facet-sql.d.ts +8 -1
- package/build/services/escalation/facet-sql.js +29 -1
- package/build/types/facets.d.ts +9 -0
- package/dashboard/dist/assets/{AdminDashboard-DXFIKXO3.js → AdminDashboard-DQS74RL0.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DXFIKXO3.js.map → AdminDashboard-DQS74RL0.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-CQE1mfjk.js → AgentConfigPage-CSMCrFR4.js} +7 -7
- package/dashboard/dist/assets/{AgentConfigPage-CQE1mfjk.js.map → AgentConfigPage-CSMCrFR4.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-DM59ozP_.js → AgentDetailPage-CDiopQ7D.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-DM59ozP_.js.map → AgentDetailPage-CDiopQ7D.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-DSK2uXI5.js → AgentsPage-CyUXe9n4.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-DSK2uXI5.js.map → AgentsPage-CyUXe9n4.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-AiuiLcz-.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-AiuiLcz-.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-BuCGvEed.js +2 -0
- package/dashboard/dist/assets/BotPicker-BuCGvEed.js.map +1 -0
- package/dashboard/dist/assets/CapabilitiesPage-nTv4STcG.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-DFQryGBj.js.map → CapabilitiesPage-nTv4STcG.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-B7-d5O_x.js → CollapsibleSection-CkOks9Cf.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-B7-d5O_x.js.map → CollapsibleSection-CkOks9Cf.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-D9_1b4MW.js → ConfirmDeleteModal-C0x0HcHX.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-D9_1b4MW.js.map → ConfirmDeleteModal-C0x0HcHX.js.map} +1 -1
- package/dashboard/dist/assets/CountdownTimer-DdKL8Ryt.js +2 -0
- package/dashboard/dist/assets/CountdownTimer-DdKL8Ryt.js.map +1 -0
- package/dashboard/dist/assets/CredentialsPage-BwA7k9Cb.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-BWVgxRpZ.js.map → CredentialsPage-BwA7k9Cb.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-DNnyNqXH.js → CronLabel-jC_i-Lh9.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-DNnyNqXH.js.map → CronLabel-jC_i-Lh9.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-SNsQZL_U.js → CustomDurationPicker-F6bR2Q5A.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-SNsQZL_U.js.map → CustomDurationPicker-F6bR2Q5A.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-C1TpkVQG.js → DropZone-zxH-9B8c.js} +2 -2
- package/dashboard/dist/assets/{DropZone-C1TpkVQG.js.map → DropZone-zxH-9B8c.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-C4r0IvUt.js → ElapsedCell-DZ3RTZFc.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-C4r0IvUt.js.map → ElapsedCell-DZ3RTZFc.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-D8Ec8Zhj.js → EscalationListSchemaPage-CaMydHIO.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-D8Ec8Zhj.js.map → EscalationListSchemaPage-CaMydHIO.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-BmEv7qU2.js → EscalationSchemaPage-BlMx2WE6.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-BmEv7qU2.js.map → EscalationSchemaPage-BlMx2WE6.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DkIy025e.js → EscalationsOverview-DcMkbiSo.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DkIy025e.js.map → EscalationsOverview-DcMkbiSo.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-Co4RYeKO.js → EventTable-CuZ2Q_wH.js} +2 -2
- package/dashboard/dist/assets/{EventTable-Co4RYeKO.js.map → EventTable-CuZ2Q_wH.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-B5Vk5tBF.js +2 -0
- package/dashboard/dist/assets/FilterBar-B5Vk5tBF.js.map +1 -0
- package/dashboard/dist/assets/{GraphInvokePage-b7ukMy0z.js → GraphInvokePage-CXElQqcV.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-b7ukMy0z.js.map → GraphInvokePage-CXElQqcV.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-DcWfjZA-.js +2 -0
- package/dashboard/dist/assets/HomePage-DcWfjZA-.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-Dmd1UiM-.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-DDG6DXVF.js.map → ListToolbar-Dmd1UiM-.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-P2o3b3mi.js → McpOverview-Cul2LFEw.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-P2o3b3mi.js.map → McpOverview-Cul2LFEw.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-C2CeBLb0.js → McpQueryDetailPage-BVlQ0WBa.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-C2CeBLb0.js.map → McpQueryDetailPage-BVlQ0WBa.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-D_N-3lp0.js → McpQueryPage-B7PmO_V-.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-D_N-3lp0.js.map → McpQueryPage-B7PmO_V-.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-uDw3MWR_.js → McpRunDetailPage-B1RhxxlU.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-uDw3MWR_.js.map → McpRunDetailPage-B1RhxxlU.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-CDTUxghb.js → McpRunsPage-DlSrpxiv.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-CDTUxghb.js.map → McpRunsPage-DlSrpxiv.js.map} +1 -1
- package/dashboard/dist/assets/Modal-D4afnAjc.js +2 -0
- package/dashboard/dist/assets/Modal-D4afnAjc.js.map +1 -0
- package/dashboard/dist/assets/{NamespacePill--ikKtMvx.js → NamespacePill-BQNMfY0m.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill--ikKtMvx.js.map → NamespacePill-BQNMfY0m.js.map} +1 -1
- package/dashboard/dist/assets/OperationsPage-vm_ByX41.js +2 -0
- package/dashboard/dist/assets/OperationsPage-vm_ByX41.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-zviIxH-0.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-CVRD8nQH.js.map → OperatorDashboard-zviIxH-0.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-CiFhzGc0.js → PageHeader-BIY1YvKR.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-CiFhzGc0.js.map → PageHeader-BIY1YvKR.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-_zOnWAhq.js → PageHeaderWithStats-TUyglVW0.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-_zOnWAhq.js.map → PageHeaderWithStats-TUyglVW0.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-Dt6PAK04.js → ProcessDetailPage-txiMHbMI.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-Dt6PAK04.js.map → ProcessDetailPage-txiMHbMI.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-CMkjASgs.js → ProcessesListPage-CRttlU3L.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-CMkjASgs.js.map → ProcessesListPage-CRttlU3L.js.map} +1 -1
- package/dashboard/dist/assets/RoleDetailPage-DBIl_mhK.js +8 -0
- package/dashboard/dist/assets/RoleDetailPage-DBIl_mhK.js.map +1 -0
- package/dashboard/dist/assets/RolePill-4LO_CuO3.js +2 -0
- package/dashboard/dist/assets/RolePill-4LO_CuO3.js.map +1 -0
- package/dashboard/dist/assets/RolesPage-DzrSv6m-.js +2 -0
- package/dashboard/dist/assets/{RolesPage-DtHIjDss.js.map → RolesPage-DzrSv6m-.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CiLjlmIE.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-C198CpFs.js.map → RunAsSelector-CiLjlmIE.js.map} +1 -1
- package/dashboard/dist/assets/{SlidePanel-BcWKelpn.js → SlidePanel-DK4sWXmp.js} +2 -2
- package/dashboard/dist/assets/{SlidePanel-BcWKelpn.js.map → SlidePanel-DK4sWXmp.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-Di6b2GDE.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-eZ6WhMrL.js.map → StickyPagination-Di6b2GDE.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-7xq_dddO.js → StreamMessageDetail-BbkU45X_.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-7xq_dddO.js.map → StreamMessageDetail-BbkU45X_.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-Yg5QT0nI.js → SwimlaneTimeline-BzsvdstG.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-Yg5QT0nI.js.map → SwimlaneTimeline-BzsvdstG.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-BaFJCq9A.js → TagInput-CK-JhBG2.js} +2 -2
- package/dashboard/dist/assets/{TagInput-BaFJCq9A.js.map → TagInput-CK-JhBG2.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-Wc3AFnqs.js → TaskDetailPage-Biikk9o_.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-Wc3AFnqs.js.map → TaskDetailPage-Biikk9o_.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-D9e16qkU.js → TaskQueuePill-C_Vo2Clc.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-D9e16qkU.js.map → TaskQueuePill-C_Vo2Clc.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-V-1J_B_L.js → TasksListPage-t9WAft9-.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-V-1J_B_L.js.map → TasksListPage-t9WAft9-.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-XdHghs5F.js → TimeAgo-I7X6jdne.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-XdHghs5F.js.map → TimeAgo-I7X6jdne.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BrzctPWT.js → TimestampCell-Cex9nr0t.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BrzctPWT.js.map → TimestampCell-Cex9nr0t.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-BCi101Jh.js +2 -0
- package/dashboard/dist/assets/{ToolPill-Enc3nyic.js.map → ToolPill-BCi101Jh.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-CGfGUsaq.js → ToolTestPanel--MGaDY-1.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-CGfGUsaq.js.map → ToolTestPanel--MGaDY-1.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-CcAgD2k5.js → TopicDetailPage-B8pHHweA.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-CcAgD2k5.js.map → TopicDetailPage-B8pHHweA.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-BOQG7s4P.js → TopicsPage-tiOEQz2m.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-BOQG7s4P.js.map → TopicsPage-tiOEQz2m.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BzxR0Ihp.js → UserName-Cdhyuv5K.js} +2 -2
- package/dashboard/dist/assets/{UserName-BzxR0Ihp.js.map → UserName-Cdhyuv5K.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-hRsDMByj.js → WorkflowExecutionPage-DD1BKj5k.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-hRsDMByj.js.map → WorkflowExecutionPage-DD1BKj5k.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-DHxrAkp3.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-S6VV2Eax.js.map → WorkflowPill-DHxrAkp3.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-ky0ulsUe.js → WorkflowsDashboard-BeWjDHYW.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-ky0ulsUe.js.map → WorkflowsDashboard-BeWjDHYW.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CzRJUV58.js → WorkflowsOverview-CkI-Pmj7.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CzRJUV58.js.map → WorkflowsOverview-CkI-Pmj7.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-Beqzy9Ph.js → YamlWorkflowDetailPage-BQnO8-PQ.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-Beqzy9Ph.js.map → YamlWorkflowDetailPage-BQnO8-PQ.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-BzBUU2ug.js → YamlWorkflowsPage-DjmNTQ5r.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-BzBUU2ug.js.map → YamlWorkflowsPage-DjmNTQ5r.js.map} +1 -1
- package/dashboard/dist/assets/{agents-Dlu4m6jy.js → agents-2DaoprdB.js} +2 -2
- package/dashboard/dist/assets/{agents-Dlu4m6jy.js.map → agents-2DaoprdB.js.map} +1 -1
- package/dashboard/dist/assets/{bots-C4G5U-6Q.js → bots-BdwLwMUg.js} +2 -2
- package/dashboard/dist/assets/{bots-C4G5U-6Q.js.map → bots-BdwLwMUg.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-BSFP_boq.js → capabilities-BsuFeK9J.js} +2 -2
- package/dashboard/dist/assets/{capabilities-BSFP_boq.js.map → capabilities-BsuFeK9J.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-qCqoP2ZV.js → controlplane-CxKOrcFO.js} +2 -2
- package/dashboard/dist/assets/{controlplane-qCqoP2ZV.js.map → controlplane-CxKOrcFO.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-y5SQ2Ulh.js +2 -0
- package/dashboard/dist/assets/escalation-columns-y5SQ2Ulh.js.map +1 -0
- package/dashboard/dist/assets/index-BC1NxetR.js +2 -0
- package/dashboard/dist/assets/{index-C0KklOM4.js.map → index-BC1NxetR.js.map} +1 -1
- package/dashboard/dist/assets/index-BVZINC_p.js +2 -0
- package/dashboard/dist/assets/{index-QL26JxBF.js.map → index-BVZINC_p.js.map} +1 -1
- package/dashboard/dist/assets/{index-CGVqW6MI.js → index-BXbt5NHG.js} +2 -2
- package/dashboard/dist/assets/{index-CGVqW6MI.js.map → index-BXbt5NHG.js.map} +1 -1
- package/dashboard/dist/assets/{index-CuC_mNNA.js → index-BYEkfaUq.js} +2 -2
- package/dashboard/dist/assets/{index-CuC_mNNA.js.map → index-BYEkfaUq.js.map} +1 -1
- package/dashboard/dist/assets/index-B_68lp-B.js +5 -0
- package/dashboard/dist/assets/index-B_68lp-B.js.map +1 -0
- package/dashboard/dist/assets/index-BeivyVtT.css +1 -0
- package/dashboard/dist/assets/{index-DUhettdV.js → index-CRBXgMsh.js} +2 -2
- package/dashboard/dist/assets/{index-DUhettdV.js.map → index-CRBXgMsh.js.map} +1 -1
- package/dashboard/dist/assets/{index-BObWYPxd.js → index-Cfq3UKd8.js} +2 -2
- package/dashboard/dist/assets/{index-BObWYPxd.js.map → index-Cfq3UKd8.js.map} +1 -1
- package/dashboard/dist/assets/{index-D_FNaSoe.js → index-DJ5nhcGB.js} +2 -2
- package/dashboard/dist/assets/{index-D_FNaSoe.js.map → index-DJ5nhcGB.js.map} +1 -1
- package/dashboard/dist/assets/{index-DCTWUswT.js → index-DVLBkcoD.js} +4 -4
- package/dashboard/dist/assets/index-DVLBkcoD.js.map +1 -0
- package/dashboard/dist/assets/index-DjI2AUbn.js +5 -0
- package/dashboard/dist/assets/{index-DWSNtg28.js.map → index-DjI2AUbn.js.map} +1 -1
- package/dashboard/dist/assets/{index-Dzhn5MDY.js → index-DyS2DHqy.js} +2 -2
- package/dashboard/dist/assets/{index-Dzhn5MDY.js.map → index-DyS2DHqy.js.map} +1 -1
- package/dashboard/dist/assets/index-H6Vp-gPG.js +2 -0
- package/dashboard/dist/assets/{index-BtEWQNcP.js.map → index-H6Vp-gPG.js.map} +1 -1
- package/dashboard/dist/assets/index-YPLTjeli.js +63 -0
- package/dashboard/dist/assets/index-YPLTjeli.js.map +1 -0
- package/dashboard/dist/assets/{knowledge-CTdgLX5j.js → knowledge-CLnYcq0Y.js} +2 -2
- package/dashboard/dist/assets/{knowledge-CTdgLX5j.js.map → knowledge-CLnYcq0Y.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BEsMr678.js → mcp-C1-iXkg7.js} +2 -2
- package/dashboard/dist/assets/{mcp-BEsMr678.js.map → mcp-C1-iXkg7.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CmamHKIR.js → mcp-query-DcyDxuGY.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CmamHKIR.js.map → mcp-query-DcyDxuGY.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-taOXA2-y.js → pipelines-BvG5D6bV.js} +2 -2
- package/dashboard/dist/assets/{pipelines-taOXA2-y.js.map → pipelines-BvG5D6bV.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-DEaDdyBh.js → tasks-qwh8q5q7.js} +2 -2
- package/dashboard/dist/assets/{tasks-DEaDdyBh.js.map → tasks-qwh8q5q7.js.map} +1 -1
- package/dashboard/dist/assets/{topics-2qRx68Ft.js → topics-MLKKA-Ql.js} +2 -2
- package/dashboard/dist/assets/{topics-2qRx68Ft.js.map → topics-MLKKA-Ql.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-oXjfKrbI.js → useEventHooks-B8uNFB-l.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-oXjfKrbI.js.map → useEventHooks-B8uNFB-l.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-YdT1Zouk.js → useNamespace-DjZmztJM.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-YdT1Zouk.js.map → useNamespace-DjZmztJM.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-Bt-RZ7Zl.js → useYamlActivityEvents-DIvK20uI.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Bt-RZ7Zl.js.map → useYamlActivityEvents-DIvK20uI.js.map} +1 -1
- package/dashboard/dist/assets/{users-DbX5JZ_w.js → users-CVjajeDg.js} +2 -2
- package/dashboard/dist/assets/{users-DbX5JZ_w.js.map → users-CVjajeDg.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-DPmIjhZB.js → vendor-icons-Qk9qLjF_.js} +131 -126
- package/dashboard/dist/assets/vendor-icons-Qk9qLjF_.js.map +1 -0
- package/dashboard/dist/assets/{workflows-acMcPTC5.js → workflows-BziTcJNq.js} +2 -2
- package/dashboard/dist/assets/{workflows-acMcPTC5.js.map → workflows-BziTcJNq.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-D6kzrMYx.js → yaml-workflows-Dr-ZcE_0.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-D6kzrMYx.js.map → yaml-workflows-Dr-ZcE_0.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/dashboard.md +2 -2
- package/docs/faceted-routing.md +9 -0
- package/docs/hitl/escalation.md +206 -0
- package/docs/hitl/form.md +162 -0
- package/docs/hitl/iframe.md +170 -0
- package/docs/hitl/resolution.md +166 -0
- package/docs/hitl/roles.md +72 -0
- package/docs/hitl/x-lt-layout.md +167 -0
- package/docs/hitl/x-lt-list-schema.md +75 -0
- package/docs/hitl/x-lt-show-if.md +128 -0
- package/docs/hitl/x-lt-validation.md +168 -0
- package/docs/hitl/x-lt-widget.md +152 -0
- package/docs/hitl-guide.md +83 -1315
- package/docs/iam.md +1 -1
- package/package.json +2 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BVgMtftp.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BVgMtftp.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-DJ0YYKZA.js +0 -2
- package/dashboard/dist/assets/BotPicker-DJ0YYKZA.js.map +0 -1
- package/dashboard/dist/assets/CapabilitiesPage-DFQryGBj.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-BTJmh4Xw.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-BTJmh4Xw.js.map +0 -1
- package/dashboard/dist/assets/CredentialsPage-BWVgxRpZ.js +0 -2
- package/dashboard/dist/assets/FilterBar-DDIn8TOs.js +0 -2
- package/dashboard/dist/assets/FilterBar-DDIn8TOs.js.map +0 -1
- package/dashboard/dist/assets/HomePage-K0U3yMdU.js +0 -2
- package/dashboard/dist/assets/HomePage-K0U3yMdU.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-DDG6DXVF.js +0 -2
- package/dashboard/dist/assets/Modal-CSrxpXeM.js +0 -2
- package/dashboard/dist/assets/Modal-CSrxpXeM.js.map +0 -1
- package/dashboard/dist/assets/OperationsPage-Daah4pNk.js +0 -2
- package/dashboard/dist/assets/OperationsPage-Daah4pNk.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-CVRD8nQH.js +0 -2
- package/dashboard/dist/assets/RoleDetailPage-6H1AY6sK.js +0 -8
- package/dashboard/dist/assets/RoleDetailPage-6H1AY6sK.js.map +0 -1
- package/dashboard/dist/assets/RolePill-CUIJSgRq.js +0 -2
- package/dashboard/dist/assets/RolePill-CUIJSgRq.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-DtHIjDss.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-C198CpFs.js +0 -2
- package/dashboard/dist/assets/StickyPagination-eZ6WhMrL.js +0 -2
- package/dashboard/dist/assets/ToolPill-Enc3nyic.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-S6VV2Eax.js +0 -2
- package/dashboard/dist/assets/escalation-columns-Ck7ZOd7Z.js +0 -2
- package/dashboard/dist/assets/escalation-columns-Ck7ZOd7Z.js.map +0 -1
- package/dashboard/dist/assets/index-BtEWQNcP.js +0 -2
- package/dashboard/dist/assets/index-C0KklOM4.js +0 -2
- package/dashboard/dist/assets/index-CY3hpJR-.js +0 -5
- package/dashboard/dist/assets/index-CY3hpJR-.js.map +0 -1
- package/dashboard/dist/assets/index-DCTWUswT.js.map +0 -1
- package/dashboard/dist/assets/index-DWSNtg28.js +0 -5
- package/dashboard/dist/assets/index-DcQiD6OF.js +0 -63
- package/dashboard/dist/assets/index-DcQiD6OF.js.map +0 -1
- package/dashboard/dist/assets/index-QL26JxBF.js +0 -2
- package/dashboard/dist/assets/index-waKF7bKZ.css +0 -1
- package/dashboard/dist/assets/roles-BiUJAsVM.js +0 -2
- package/dashboard/dist/assets/roles-BiUJAsVM.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-DPmIjhZB.js.map +0 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Pre-Submission Validation
|
|
2
|
+
|
|
3
|
+
The form runs a full validation pass before any submit is accepted. Every visible field is checked in sequence; the first failure displays an inline error and the submit is blocked. The right-side panel opens automatically with a tabular breakdown of all errors; clicking any error item scrolls to and focuses the corresponding field.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Required
|
|
8
|
+
|
|
9
|
+
Fields listed in the schema's `required` array block submission when empty. A red asterisk marks required fields. Required validation is skipped for fields hidden by `x-lt-showIf` at submission time.
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"required": ["approved", "reference_code"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"approved": { "type": "boolean" },
|
|
16
|
+
"reference_code": { "type": "string" }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Format Guards
|
|
24
|
+
|
|
25
|
+
`"format": "email"` and `"format": "uri"` are enforced before submission:
|
|
26
|
+
|
|
27
|
+
| Format | Guard |
|
|
28
|
+
|--------|-------|
|
|
29
|
+
| `"email"` | Must match `user@host.tld` |
|
|
30
|
+
| `"uri"` | Must start with `https://` or `http://` |
|
|
31
|
+
|
|
32
|
+
Format errors appear inline beneath the field as soon as the field is blurred.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## String Length Bounds
|
|
37
|
+
|
|
38
|
+
| Keyword | Source | Type |
|
|
39
|
+
|---------|--------|------|
|
|
40
|
+
| `minLength` | JSON Schema standard | Static integer |
|
|
41
|
+
| `maxLength` | JSON Schema standard | Static integer |
|
|
42
|
+
| `x-lt-min-length` | Long-tail extension | `"domain.path"` resolved at submission time |
|
|
43
|
+
| `x-lt-max-length` | Long-tail extension | `"domain.path"` resolved at submission time |
|
|
44
|
+
|
|
45
|
+
Static and dynamic bounds compose: if both `minLength` and `x-lt-min-length` are present, the static value is used (the dynamic path is a fallback only when no static value is set).
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"properties": {
|
|
50
|
+
"reference_code": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"minLength": 3
|
|
53
|
+
},
|
|
54
|
+
"notes": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"format": "textarea",
|
|
57
|
+
"x-lt-max-length": "envelope.max_notes_length"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
When `envelope.max_notes_length` is `500`, the notes field blocks submission once the input exceeds 500 characters. The error reads `Maximum 500 characters (534 entered)`. Textarea fields with a `maxLength` or `x-lt-max-length` bound also show a live `X / N` character counter as you type — the counter turns red when the limit is exceeded, before the form is submitted.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Numeric Bounds
|
|
68
|
+
|
|
69
|
+
| Keyword | Source | Type |
|
|
70
|
+
|---------|--------|------|
|
|
71
|
+
| `minimum` | JSON Schema standard | Static number |
|
|
72
|
+
| `maximum` | JSON Schema standard | Static number |
|
|
73
|
+
| `exclusiveMinimum` | JSON Schema standard | Static number |
|
|
74
|
+
| `exclusiveMaximum` | JSON Schema standard | Static number |
|
|
75
|
+
| `x-lt-minimum` | Long-tail extension | `"domain.path"` resolved at submission time |
|
|
76
|
+
| `x-lt-maximum` | Long-tail extension | `"domain.path"` resolved at submission time |
|
|
77
|
+
|
|
78
|
+
Static and dynamic bounds compose: if both `minimum` and `x-lt-minimum` are present, the static value is used.
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"properties": {
|
|
83
|
+
"score": {
|
|
84
|
+
"type": "number",
|
|
85
|
+
"maximum": 100,
|
|
86
|
+
"x-lt-minimum": "envelope.min_score"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
When `envelope.min_score` is `60`, submitting a score of `45` blocks with "Minimum value is 60".
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Pattern Guard
|
|
97
|
+
|
|
98
|
+
Apply a regular expression guard with `pattern`. If the input does not match, the field blocks submission. Provide `x-lt-pattern-error` for a human-readable error message; otherwise the generic "Invalid format" is shown.
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"properties": {
|
|
103
|
+
"reference_code": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"pattern": "^[A-Z0-9][A-Z0-9-]*[A-Z0-9]$|^[A-Z0-9]$",
|
|
106
|
+
"x-lt-pattern-error": "Use uppercase letters, digits, and dashes (e.g. QA-2024-001)"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Dynamic Bounds — `"domain.path"` Resolution
|
|
115
|
+
|
|
116
|
+
`x-lt-minimum`, `x-lt-maximum`, `x-lt-min-length`, and `x-lt-max-length` all accept a `"domain.path"` string. The value is resolved from the escalation context at the moment of submission — the same domain/path convention as `x-lt-showIf` and `x-lt-help` tokens.
|
|
117
|
+
|
|
118
|
+
| Domain | Resolves against |
|
|
119
|
+
|--------|-----------------|
|
|
120
|
+
| `envelope` | The workflow-sent input envelope |
|
|
121
|
+
| `metadata` | The row's metadata dict |
|
|
122
|
+
| `payload` | The escalation context payload |
|
|
123
|
+
| `escalation` | Top-level escalation row fields |
|
|
124
|
+
|
|
125
|
+
The path is dot-separated, with optional `[n]` array indices. A missing or non-numeric value at the path means the bound is not enforced for that submission.
|
|
126
|
+
|
|
127
|
+
**Workflow side — passing the bound in the envelope:**
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const decision = await conditionLT<{ score: number; notes: string }>(signalId, {
|
|
131
|
+
role: 'quality-reviewer',
|
|
132
|
+
envelope: {
|
|
133
|
+
min_score: 60,
|
|
134
|
+
max_notes_length: 500,
|
|
135
|
+
},
|
|
136
|
+
metadata: {
|
|
137
|
+
form_schema: {
|
|
138
|
+
properties: {
|
|
139
|
+
score: { type: 'number', maximum: 100, 'x-lt-minimum': 'envelope.min_score' },
|
|
140
|
+
notes: { type: 'string', 'x-lt-max-length': 'envelope.max_notes_length' },
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Error Panel
|
|
150
|
+
|
|
151
|
+
When the pre-submission pass finds errors, the right-side panel opens automatically on the Errors view. The panel shows a numbered list of issues — field name and message — and each entry is a button: clicking it scrolls the form to the field and focuses it. The panel icon shows a `!` badge when errors are active.
|
|
152
|
+
|
|
153
|
+
The error panel updates in real-time as fields are corrected — fixing a field removes its entry from the panel immediately, without requiring another submit attempt. The panel clears entirely once all issues are resolved.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Reference Example
|
|
158
|
+
|
|
159
|
+
`examples/workflows/constraint-form/` is the canonical reference for all constraint guards:
|
|
160
|
+
|
|
161
|
+
- `approved` — boolean toggle
|
|
162
|
+
- `rejection_reason` — hidden required field (`x-lt-showIf: '!resolver.approved'`)
|
|
163
|
+
- `reference_code` — `pattern` + `minLength` + `x-lt-pattern-error`
|
|
164
|
+
- `score` — `maximum: 100` + `x-lt-minimum: 'envelope.min_score'`
|
|
165
|
+
- `notes` — `x-lt-max-length: 'envelope.max_notes_length'`
|
|
166
|
+
- `checks` — checklist widget with `x-lt-source: 'envelope.checklist_items'`
|
|
167
|
+
|
|
168
|
+
The `quality-reviewer` role is seeded with two test escalations that carry different `min_score` and `max_notes_length` values so every dynamic bound is exercisable without code changes.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Custom Widgets (`x-lt-widget`)
|
|
2
|
+
|
|
3
|
+
For rich inputs beyond standard HTML types, set `x-lt-widget` on any field:
|
|
4
|
+
|
|
5
|
+
| Widget | Description |
|
|
6
|
+
|--------|------------|
|
|
7
|
+
| `"file-upload"` | File picker with drag-and-drop. Stores a base64 data URL. Use `accept` to filter file types. |
|
|
8
|
+
| `"code-editor"` | Monospace textarea with tab-key support. Use `x-lt-language` for the syntax hint. |
|
|
9
|
+
| `"signature"` | HTML5 Canvas drawing pad. Outputs a PNG data URL. |
|
|
10
|
+
| `"rich-text"` | Tall textarea for formatted text input. |
|
|
11
|
+
| `"markdown"` | Markdown source rendered with headings, tables, lists, code blocks. Editable by default; set `readOnly: true` for a pure content block. |
|
|
12
|
+
| `"checklist"` | Dynamic labeled checkboxes driven by runtime data. Items come from a `"domain.path"` declared in `x-lt-source`. |
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## File Upload
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"properties": {
|
|
21
|
+
"screenshot": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"x-lt-widget": "file-upload",
|
|
24
|
+
"accept": "image/*",
|
|
25
|
+
"description": "Upload a screenshot of the issue"
|
|
26
|
+
},
|
|
27
|
+
"signed_form": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"x-lt-widget": "file-upload",
|
|
30
|
+
"accept": ".pdf",
|
|
31
|
+
"description": "Signed authorization form (PDF)"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The submitted value is a base64 data URL (`data:image/png;base64,...`). `accept` follows the HTML `<input accept>` syntax.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Code Editor
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"properties": {
|
|
46
|
+
"fix_script": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"x-lt-widget": "code-editor",
|
|
49
|
+
"x-lt-language": "sql",
|
|
50
|
+
"description": "SQL migration to apply"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`x-lt-language` is a display hint only — the editor does not enforce syntax.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Signature
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"properties": {
|
|
65
|
+
"signature": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"x-lt-widget": "signature",
|
|
68
|
+
"description": "Sign to confirm"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The submitted value is a PNG data URL of the canvas drawing.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Markdown
|
|
79
|
+
|
|
80
|
+
Without `readOnly`, the field is a markdown editor — the resolver writes source in a Write/Preview toggle and the submitted value is the markdown text.
|
|
81
|
+
|
|
82
|
+
With `readOnly: true`, the field is a rendered content block. The markdown in its `default` displays as HTML inside the form — headings, tables, checklists, callouts. The versioned schema carries the page source itself, so review instructions and SOPs version with the form they belong to.
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"properties": {
|
|
87
|
+
"review_guide": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"readOnly": true,
|
|
90
|
+
"x-lt-widget": "markdown",
|
|
91
|
+
"x-lt-span": 2,
|
|
92
|
+
"default": "### Review checklist\n\n1. Confirm the **legal name** matches.\n2. Send a test message before approving.\n\n> Escalate non-standard contract language to legal."
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Checklist (`x-lt-source`)
|
|
101
|
+
|
|
102
|
+
A dynamic list of labeled checkboxes driven by runtime data in the escalation context. The item definitions come from a domain path declared in `x-lt-source` — the form schema itself never changes as item count or labels vary across escalations.
|
|
103
|
+
|
|
104
|
+
The field type must be `"object"`. The submitted value is `Record<string, boolean>` keyed by item id (e.g. `{ "step_0": true, "step_1": false }`).
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"properties": {
|
|
109
|
+
"checks": {
|
|
110
|
+
"type": "object",
|
|
111
|
+
"description": "Work through each step and check it off.",
|
|
112
|
+
"x-lt-widget": "checklist",
|
|
113
|
+
"x-lt-source": "envelope.checklist_items"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"required": ["checks"]
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
`x-lt-source` uses the `"domain.path"` convention (same as `x-lt-showIf` and `x-lt-help` tokens). The renderer expects an array of `{ id: string; label: string; required?: boolean }` objects at that path.
|
|
121
|
+
|
|
122
|
+
- `"envelope"` — for item definitions that are render data only (no query cost). The workflow puts them in `conditionLT`'s `envelope` parameter.
|
|
123
|
+
- `"metadata"` — only when items need to be GIN-indexed and searchable as facets. Adds index cost.
|
|
124
|
+
|
|
125
|
+
Marking an item `required: true` flags it with an asterisk in the UI. A `required` checklist field is blocked from submission until at least one item is checked. When no items are checked after a submission attempt, every unchecked item that is individually required (or all unchecked items when the field itself is required) highlights in red. Once any item is checked — satisfying the group requirement — all per-item highlights clear.
|
|
126
|
+
|
|
127
|
+
**Workflow side:**
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const checklistItems = [
|
|
131
|
+
{ id: 'doc', label: 'All supporting documentation is attached', required: true },
|
|
132
|
+
{ id: 'contact', label: 'Contact details have been verified', required: true },
|
|
133
|
+
{ id: 'photos', label: 'Before/after photos are present', required: false },
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const decision = await conditionLT<{ checks: Record<string, boolean> }>(signalId, {
|
|
137
|
+
role: 'checklist-operator',
|
|
138
|
+
envelope: {
|
|
139
|
+
checklist_items: checklistItems,
|
|
140
|
+
formDefaults: {
|
|
141
|
+
// Pre-populate all checkboxes as unchecked
|
|
142
|
+
checks: Object.fromEntries(checklistItems.map((i) => [i.id, false])),
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const allConfirmed = Object.values(decision.checks).every(Boolean);
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Pre-populating `formDefaults.checks` opens the form with every checkbox unchecked rather than indeterminate.
|
|
151
|
+
|
|
152
|
+
The `examples/workflows/checklist-confirmation/` and `examples/workflows/constraint-form/` workflows are complete references.
|