@hotmeshio/long-tail 0.4.3 → 0.4.5

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.
Files changed (346) hide show
  1. package/build/api/agent-subscriptions.js +14 -0
  2. package/build/api/settings.js +4 -0
  3. package/build/lib/db/index.d.ts +1 -7
  4. package/build/lib/db/schemas/008_capability_reaction.sql +12 -0
  5. package/build/lib/db/schemas/009_file_topic_category.sql +10 -0
  6. package/build/lib/events/index.d.ts +9 -0
  7. package/build/lib/events/index.js +18 -0
  8. package/build/lib/events/nats.d.ts +15 -1
  9. package/build/lib/events/nats.js +46 -2
  10. package/build/lib/events/publish.d.ts +10 -0
  11. package/build/lib/events/publish.js +28 -0
  12. package/build/modules/config.d.ts +1 -7
  13. package/build/services/agent/index.js +14 -0
  14. package/build/services/agent/subscription-sql.d.ts +3 -3
  15. package/build/services/agent/subscription-sql.js +7 -5
  16. package/build/services/agent/subscriptions.d.ts +3 -1
  17. package/build/services/agent/subscriptions.js +6 -0
  18. package/build/services/agent/trigger-registry.d.ts +2 -0
  19. package/build/services/agent/trigger-registry.js +55 -8
  20. package/build/services/topics/system-topics.js +29 -0
  21. package/build/services/yaml-workflow/deployer.d.ts +1 -1
  22. package/build/services/yaml-workflow/deployer.js +2 -2
  23. package/build/services/yaml-workflow/invoke.d.ts +2 -0
  24. package/build/services/yaml-workflow/invoke.js +5 -1
  25. package/build/start/adapters.js +11 -9
  26. package/build/start/config.js +4 -0
  27. package/build/start/workers.js +15 -3
  28. package/build/system/index.js +16 -0
  29. package/build/system/mcp-servers/file-storage.js +18 -0
  30. package/build/system/workflows/capability-invoke/activities.d.ts +12 -0
  31. package/build/system/workflows/capability-invoke/activities.js +14 -0
  32. package/build/system/workflows/capability-invoke/index.d.ts +14 -0
  33. package/build/system/workflows/capability-invoke/index.js +74 -0
  34. package/build/tsconfig.tsbuildinfo +1 -1
  35. package/build/types/events.d.ts +13 -1
  36. package/build/types/startup.d.ts +7 -0
  37. package/dashboard/dist/assets/AdminDashboard-ntLz5Pro.js +2 -0
  38. package/dashboard/dist/assets/{AdminDashboard-Dr5wTIZT.js.map → AdminDashboard-ntLz5Pro.js.map} +1 -1
  39. package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js +16 -0
  40. package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js.map +1 -0
  41. package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js +4 -0
  42. package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js.map +1 -0
  43. package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js +2 -0
  44. package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js.map +1 -0
  45. package/dashboard/dist/assets/AvailableEscalationsPage-bdPqEzbx.js +2 -0
  46. package/dashboard/dist/assets/{AvailableEscalationsPage-UzjXcO3W.js.map → AvailableEscalationsPage-bdPqEzbx.js.map} +1 -1
  47. package/dashboard/dist/assets/BotPicker-CYfFMpkY.js +2 -0
  48. package/dashboard/dist/assets/{BotPicker-CM-_u73k.js.map → BotPicker-CYfFMpkY.js.map} +1 -1
  49. package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js +2 -0
  50. package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js.map +1 -0
  51. package/dashboard/dist/assets/CollapsibleSection-DU5KAtQ-.js +2 -0
  52. package/dashboard/dist/assets/{CollapsibleSection-CnPKa7df.js.map → CollapsibleSection-DU5KAtQ-.js.map} +1 -1
  53. package/dashboard/dist/assets/ConfirmDeleteModal-_hW5Vc05.js +2 -0
  54. package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-_hW5Vc05.js.map} +1 -1
  55. package/dashboard/dist/assets/CopyableId-DiWqv41D.js +2 -0
  56. package/dashboard/dist/assets/CopyableId-DiWqv41D.js.map +1 -0
  57. package/dashboard/dist/assets/CredentialsPage-CmbwypSF.js +2 -0
  58. package/dashboard/dist/assets/{CredentialsPage-CImIzra4.js.map → CredentialsPage-CmbwypSF.js.map} +1 -1
  59. package/dashboard/dist/assets/CronLabel-nycfAefc.js +2 -0
  60. package/dashboard/dist/assets/CronLabel-nycfAefc.js.map +1 -0
  61. package/dashboard/dist/assets/CustomDurationPicker-gNZRBaHg.js +2 -0
  62. package/dashboard/dist/assets/{CustomDurationPicker-5JzEgS7I.js.map → CustomDurationPicker-gNZRBaHg.js.map} +1 -1
  63. package/dashboard/dist/assets/DataTable-DGerT2ZM.js +2 -0
  64. package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-DGerT2ZM.js.map} +1 -1
  65. package/dashboard/dist/assets/DropZone-vNcqMd05.js +2 -0
  66. package/dashboard/dist/assets/{DropZone-BEW3jBzf.js.map → DropZone-vNcqMd05.js.map} +1 -1
  67. package/dashboard/dist/assets/ElapsedCell-CdvQbtve.js +2 -0
  68. package/dashboard/dist/assets/{ElapsedCell-B79BF5Mj.js.map → ElapsedCell-CdvQbtve.js.map} +1 -1
  69. package/dashboard/dist/assets/EmptyState-DMldv8c5.js +2 -0
  70. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-DMldv8c5.js.map} +1 -1
  71. package/dashboard/dist/assets/EscalationsOverview-BNENCL_2.js +2 -0
  72. package/dashboard/dist/assets/{EscalationsOverview-QvWvbpx3.js.map → EscalationsOverview-BNENCL_2.js.map} +1 -1
  73. package/dashboard/dist/assets/EventTable-BqDAyXyc.js +2 -0
  74. package/dashboard/dist/assets/{EventTable-DAclQwfr.js.map → EventTable-BqDAyXyc.js.map} +1 -1
  75. package/dashboard/dist/assets/EventTopicPill-CnHFBglc.js +2 -0
  76. package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js.map → EventTopicPill-CnHFBglc.js.map} +1 -1
  77. package/dashboard/dist/assets/FilterBar-TYiTtUgv.js +2 -0
  78. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-TYiTtUgv.js.map} +1 -1
  79. package/dashboard/dist/assets/HomePage-fterfLKH.js +2 -0
  80. package/dashboard/dist/assets/{HomePage-DVOi7rR1.js.map → HomePage-fterfLKH.js.map} +1 -1
  81. package/dashboard/dist/assets/ListToolbar-BO5Igi6v.js +2 -0
  82. package/dashboard/dist/assets/{ListToolbar-Bntl2hex.js.map → ListToolbar-BO5Igi6v.js.map} +1 -1
  83. package/dashboard/dist/assets/McpOverview-BQokGg0z.js +2 -0
  84. package/dashboard/dist/assets/{McpOverview-B-xSYPJj.js.map → McpOverview-BQokGg0z.js.map} +1 -1
  85. package/dashboard/dist/assets/McpQueryDetailPage-0WOp2n_j.js +5 -0
  86. package/dashboard/dist/assets/{McpQueryDetailPage-Cq71BzjB.js.map → McpQueryDetailPage-0WOp2n_j.js.map} +1 -1
  87. package/dashboard/dist/assets/McpQueryPage-DUey_h9J.js +2 -0
  88. package/dashboard/dist/assets/{McpQueryPage-Dfz87aZF.js.map → McpQueryPage-DUey_h9J.js.map} +1 -1
  89. package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js +2 -0
  90. package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js.map +1 -0
  91. package/dashboard/dist/assets/McpRunsPage-B3R6KZ61.js +2 -0
  92. package/dashboard/dist/assets/{McpRunsPage-MUYvUYqz.js.map → McpRunsPage-B3R6KZ61.js.map} +1 -1
  93. package/dashboard/dist/assets/Modal-Qe8lW7gQ.js +2 -0
  94. package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-Qe8lW7gQ.js.map} +1 -1
  95. package/dashboard/dist/assets/OperatorDashboard-dldvzjcg.js +2 -0
  96. package/dashboard/dist/assets/{OperatorDashboard-Rih1SZrn.js.map → OperatorDashboard-dldvzjcg.js.map} +1 -1
  97. package/dashboard/dist/assets/PageHeader-DF4BeEm4.js +2 -0
  98. package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js.map → PageHeader-DF4BeEm4.js.map} +1 -1
  99. package/dashboard/dist/assets/PageHeaderWithStats-BQZw6BgA.js +2 -0
  100. package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js.map → PageHeaderWithStats-BQZw6BgA.js.map} +1 -1
  101. package/dashboard/dist/assets/PriorityBadge-DMyB3WLZ.js +2 -0
  102. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-DMyB3WLZ.js.map} +1 -1
  103. package/dashboard/dist/assets/ProcessDetailPage-Beo-QVL-.js +2 -0
  104. package/dashboard/dist/assets/{ProcessDetailPage-BMkWCjqD.js.map → ProcessDetailPage-Beo-QVL-.js.map} +1 -1
  105. package/dashboard/dist/assets/ProcessesListPage-C_ars8gp.js +2 -0
  106. package/dashboard/dist/assets/{ProcessesListPage-vZjUSc7S.js.map → ProcessesListPage-C_ars8gp.js.map} +1 -1
  107. package/dashboard/dist/assets/RolePill-DrBZ7JJj.js +2 -0
  108. package/dashboard/dist/assets/{RolePill-BDzPFQUv.js.map → RolePill-DrBZ7JJj.js.map} +1 -1
  109. package/dashboard/dist/assets/RolesPage-DgSXFFGL.js +2 -0
  110. package/dashboard/dist/assets/{RolesPage-kjeAsj3_.js.map → RolesPage-DgSXFFGL.js.map} +1 -1
  111. package/dashboard/dist/assets/RowActions-QcakGbVA.js +2 -0
  112. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-QcakGbVA.js.map} +1 -1
  113. package/dashboard/dist/assets/RunAsSelector-CYMeZwrM.js +2 -0
  114. package/dashboard/dist/assets/{RunAsSelector-DC4SLtTq.js.map → RunAsSelector-CYMeZwrM.js.map} +1 -1
  115. package/dashboard/dist/assets/ServerName-D5NKD06M.js +2 -0
  116. package/dashboard/dist/assets/{ServerName-CEOFF7UG.js.map → ServerName-D5NKD06M.js.map} +1 -1
  117. package/dashboard/dist/assets/StatCard-PZQmmCHK.js +2 -0
  118. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-PZQmmCHK.js.map} +1 -1
  119. package/dashboard/dist/assets/StatusBadge-ME2R6a7K.js +2 -0
  120. package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-ME2R6a7K.js.map} +1 -1
  121. package/dashboard/dist/assets/StepIndicator-CDDVahOz.js +2 -0
  122. package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CDDVahOz.js.map} +1 -1
  123. package/dashboard/dist/assets/StickyPagination-Ddy93Q5I.js +2 -0
  124. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-Ddy93Q5I.js.map} +1 -1
  125. package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js +2 -0
  126. package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js.map +1 -0
  127. package/dashboard/dist/assets/TagInput-B45Dm3IW.js +2 -0
  128. package/dashboard/dist/assets/{TagInput-VBY0xIwb.js.map → TagInput-B45Dm3IW.js.map} +1 -1
  129. package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js +2 -0
  130. package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js.map +1 -0
  131. package/dashboard/dist/assets/TaskQueuePill-BJRUjVDv.js +2 -0
  132. package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js.map → TaskQueuePill-BJRUjVDv.js.map} +1 -1
  133. package/dashboard/dist/assets/TasksListPage-Czu08px3.js +2 -0
  134. package/dashboard/dist/assets/{TasksListPage-69ZWCaCP.js.map → TasksListPage-Czu08px3.js.map} +1 -1
  135. package/dashboard/dist/assets/TimeAgo-CJ56IUy6.js +2 -0
  136. package/dashboard/dist/assets/{TimeAgo-CttiZG0k.js.map → TimeAgo-CJ56IUy6.js.map} +1 -1
  137. package/dashboard/dist/assets/TimestampCell-QtcYZ9Jx.js +2 -0
  138. package/dashboard/dist/assets/{TimestampCell-CYFbEhqc.js.map → TimestampCell-QtcYZ9Jx.js.map} +1 -1
  139. package/dashboard/dist/assets/ToolPill-DpDv3FwI.js +2 -0
  140. package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js.map → ToolPill-DpDv3FwI.js.map} +1 -1
  141. package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js +2 -0
  142. package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js.map +1 -0
  143. package/dashboard/dist/assets/TopicDetailPage-DwShZbh9.js +9 -0
  144. package/dashboard/dist/assets/{TopicDetailPage-Aq4-6GLl.js.map → TopicDetailPage-DwShZbh9.js.map} +1 -1
  145. package/dashboard/dist/assets/TopicsPage-DKXlpZl_.js +2 -0
  146. package/dashboard/dist/assets/{TopicsPage-BYFKjRY_.js.map → TopicsPage-DKXlpZl_.js.map} +1 -1
  147. package/dashboard/dist/assets/UserName-zlR1so37.js +2 -0
  148. package/dashboard/dist/assets/{UserName-C4_T5-rI.js.map → UserName-zlR1so37.js.map} +1 -1
  149. package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js +2 -0
  150. package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js.map +1 -0
  151. package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js +2 -0
  152. package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js.map +1 -0
  153. package/dashboard/dist/assets/WorkflowsDashboard-BlAPZbQZ.js +2 -0
  154. package/dashboard/dist/assets/{WorkflowsDashboard-_LMWc-OC.js.map → WorkflowsDashboard-BlAPZbQZ.js.map} +1 -1
  155. package/dashboard/dist/assets/WorkflowsOverview-NnPi6rwS.js +2 -0
  156. package/dashboard/dist/assets/{WorkflowsOverview-DFrfw554.js.map → WorkflowsOverview-NnPi6rwS.js.map} +1 -1
  157. package/dashboard/dist/assets/YamlWorkflowsPage-C4mZum6x.js +2 -0
  158. package/dashboard/dist/assets/{YamlWorkflowsPage-CZzGwfol.js.map → YamlWorkflowsPage-C4mZum6x.js.map} +1 -1
  159. package/dashboard/dist/assets/{agents-CsKILVSU.js → agents-B5wvILeV.js} +2 -2
  160. package/dashboard/dist/assets/{agents-CsKILVSU.js.map → agents-B5wvILeV.js.map} +1 -1
  161. package/dashboard/dist/assets/{bots-BzEs6Q9L.js → bots-BPlouRDm.js} +2 -2
  162. package/dashboard/dist/assets/{bots-BzEs6Q9L.js.map → bots-BPlouRDm.js.map} +1 -1
  163. package/dashboard/dist/assets/capabilities-DkvRG09b.js +2 -0
  164. package/dashboard/dist/assets/capabilities-DkvRG09b.js.map +1 -0
  165. package/dashboard/dist/assets/{controlplane-COYEIIAz.js → controlplane-0m_rA-UW.js} +2 -2
  166. package/dashboard/dist/assets/{controlplane-COYEIIAz.js.map → controlplane-0m_rA-UW.js.map} +1 -1
  167. package/dashboard/dist/assets/escalation-CfIAIUg2.js +2 -0
  168. package/dashboard/dist/assets/{escalation-BZjS2202.js.map → escalation-CfIAIUg2.js.map} +1 -1
  169. package/dashboard/dist/assets/escalation-columns-CLIdxlbe.js +2 -0
  170. package/dashboard/dist/assets/{escalation-columns-DtRVmPSB.js.map → escalation-columns-CLIdxlbe.js.map} +1 -1
  171. package/dashboard/dist/assets/helpers-prGqC38M.js +2 -0
  172. package/dashboard/dist/assets/{helpers-BngVEys5.js.map → helpers-prGqC38M.js.map} +1 -1
  173. package/dashboard/dist/assets/index-4T7Z_gQ4.js +281 -0
  174. package/dashboard/dist/assets/index-4T7Z_gQ4.js.map +1 -0
  175. package/dashboard/dist/assets/index-BPxglOYm.css +1 -0
  176. package/dashboard/dist/assets/index-BR3SwTNI.js +2 -0
  177. package/dashboard/dist/assets/{index-COgyD_H2.js.map → index-BR3SwTNI.js.map} +1 -1
  178. package/dashboard/dist/assets/index-BWKIigEk.js +2 -0
  179. package/dashboard/dist/assets/{index-Byp8BDPs.js.map → index-BWKIigEk.js.map} +1 -1
  180. package/dashboard/dist/assets/index-BgVuyWhi.js +15 -0
  181. package/dashboard/dist/assets/{index-DykjJxzr.js.map → index-BgVuyWhi.js.map} +1 -1
  182. package/dashboard/dist/assets/index-C0sDEKdo.js +2 -0
  183. package/dashboard/dist/assets/{index-DxMNiFPS.js.map → index-C0sDEKdo.js.map} +1 -1
  184. package/dashboard/dist/assets/index-C2MJzu6J.js +2 -0
  185. package/dashboard/dist/assets/{index-ByxH4qQ-.js.map → index-C2MJzu6J.js.map} +1 -1
  186. package/dashboard/dist/assets/index-CFoddJDr.js +6 -0
  187. package/dashboard/dist/assets/{index-BCsShN2l.js.map → index-CFoddJDr.js.map} +1 -1
  188. package/dashboard/dist/assets/index-CrMxD5Ib.js +6 -0
  189. package/dashboard/dist/assets/index-CrMxD5Ib.js.map +1 -0
  190. package/dashboard/dist/assets/index-CuY5hPYB.js +2 -0
  191. package/dashboard/dist/assets/{index-Bq5MSkCL.js.map → index-CuY5hPYB.js.map} +1 -1
  192. package/dashboard/dist/assets/index-CwkJBn87.js +2 -0
  193. package/dashboard/dist/assets/{index-R61-yG56.js.map → index-CwkJBn87.js.map} +1 -1
  194. package/dashboard/dist/assets/index-DeL84Cag.js +2 -0
  195. package/dashboard/dist/assets/{index-xgl431mG.js.map → index-DeL84Cag.js.map} +1 -1
  196. package/dashboard/dist/assets/index-DqeLbz6j.js +2 -0
  197. package/dashboard/dist/assets/{index-ABsZZf_U.js.map → index-DqeLbz6j.js.map} +1 -1
  198. package/dashboard/dist/assets/index-P9huxx3-.js +2 -0
  199. package/dashboard/dist/assets/{index-BwivT39P.js.map → index-P9huxx3-.js.map} +1 -1
  200. package/dashboard/dist/assets/{knowledge-DhCbDgy4.js → knowledge-CUZxyRCO.js} +2 -2
  201. package/dashboard/dist/assets/{knowledge-DhCbDgy4.js.map → knowledge-CUZxyRCO.js.map} +1 -1
  202. package/dashboard/dist/assets/{mcp-xh7T0I-f.js → mcp-B5VQPoF3.js} +2 -2
  203. package/dashboard/dist/assets/{mcp-xh7T0I-f.js.map → mcp-B5VQPoF3.js.map} +1 -1
  204. package/dashboard/dist/assets/{mcp-query-il3CfU3U.js → mcp-query-Ba5Zj3yg.js} +2 -2
  205. package/dashboard/dist/assets/{mcp-query-il3CfU3U.js.map → mcp-query-Ba5Zj3yg.js.map} +1 -1
  206. package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js → mcp-runs-CAiEr5Fc.js} +2 -2
  207. package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js.map → mcp-runs-CAiEr5Fc.js.map} +1 -1
  208. package/dashboard/dist/assets/namespaces-sVr5scma.js +2 -0
  209. package/dashboard/dist/assets/{namespaces-BBTvHnRF.js.map → namespaces-sVr5scma.js.map} +1 -1
  210. package/dashboard/dist/assets/{roles-D7bx5FAM.js → roles-E_bA4e0f.js} +2 -2
  211. package/dashboard/dist/assets/{roles-D7bx5FAM.js.map → roles-E_bA4e0f.js.map} +1 -1
  212. package/dashboard/dist/assets/{tasks-BgxRbhVM.js → tasks-CL6Gv8jB.js} +2 -2
  213. package/dashboard/dist/assets/{tasks-BgxRbhVM.js.map → tasks-CL6Gv8jB.js.map} +1 -1
  214. package/dashboard/dist/assets/{topics-CTtCboHe.js → topics-DbtPHERP.js} +2 -2
  215. package/dashboard/dist/assets/{topics-CTtCboHe.js.map → topics-DbtPHERP.js.map} +1 -1
  216. package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js → useCollapsedSections-CGNA5oKV.js} +2 -2
  217. package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js.map → useCollapsedSections-CGNA5oKV.js.map} +1 -1
  218. package/dashboard/dist/assets/useEventHooks-C6c618cj.js +2 -0
  219. package/dashboard/dist/assets/useEventHooks-C6c618cj.js.map +1 -0
  220. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
  221. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
  222. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
  223. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
  224. package/dashboard/dist/assets/{useYamlActivityEvents-CSMX9He5.js → useYamlActivityEvents-eK7kIUdh.js} +2 -2
  225. package/dashboard/dist/assets/{useYamlActivityEvents-CSMX9He5.js.map → useYamlActivityEvents-eK7kIUdh.js.map} +1 -1
  226. package/dashboard/dist/assets/{users-CyF-5WLI.js → users-CCHSIAxt.js} +2 -2
  227. package/dashboard/dist/assets/{users-CyF-5WLI.js.map → users-CCHSIAxt.js.map} +1 -1
  228. package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js → vendor-icons-D8-ZINAH.js} +3 -3
  229. package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js.map → vendor-icons-D8-ZINAH.js.map} +1 -1
  230. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  231. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  232. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  233. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  234. package/dashboard/dist/assets/{workflows-Bf4_w24H.js → workflows-BNbocg_9.js} +2 -2
  235. package/dashboard/dist/assets/{workflows-Bf4_w24H.js.map → workflows-BNbocg_9.js.map} +1 -1
  236. package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js → yaml-workflows-Cu1FUwrc.js} +2 -2
  237. package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js.map → yaml-workflows-Cu1FUwrc.js.map} +1 -1
  238. package/dashboard/dist/index.html +5 -5
  239. package/docs/agents.md +9 -9
  240. package/docs/api/http/agents.md +12 -10
  241. package/docs/api/http/settings.md +4 -0
  242. package/docs/api/sdk/agents.md +4 -2
  243. package/docs/api/sdk/settings.md +2 -1
  244. package/docs/dashboard.md +1 -1
  245. package/package.json +2 -2
  246. package/dashboard/dist/assets/AdminDashboard-Dr5wTIZT.js +0 -2
  247. package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js +0 -13
  248. package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js.map +0 -1
  249. package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js +0 -4
  250. package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js.map +0 -1
  251. package/dashboard/dist/assets/AgentsPage-CvuF8--H.js +0 -2
  252. package/dashboard/dist/assets/AgentsPage-CvuF8--H.js.map +0 -1
  253. package/dashboard/dist/assets/AvailableEscalationsPage-UzjXcO3W.js +0 -2
  254. package/dashboard/dist/assets/BotPicker-CM-_u73k.js +0 -2
  255. package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js +0 -2
  256. package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js.map +0 -1
  257. package/dashboard/dist/assets/CollapsibleSection-CnPKa7df.js +0 -2
  258. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
  259. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
  260. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js.map +0 -1
  261. package/dashboard/dist/assets/CredentialsPage-CImIzra4.js +0 -2
  262. package/dashboard/dist/assets/CronLabel-5HPAmciI.js +0 -2
  263. package/dashboard/dist/assets/CronLabel-5HPAmciI.js.map +0 -1
  264. package/dashboard/dist/assets/CustomDurationPicker-5JzEgS7I.js +0 -2
  265. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
  266. package/dashboard/dist/assets/DropZone-BEW3jBzf.js +0 -2
  267. package/dashboard/dist/assets/ElapsedCell-B79BF5Mj.js +0 -2
  268. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
  269. package/dashboard/dist/assets/EscalationsOverview-QvWvbpx3.js +0 -2
  270. package/dashboard/dist/assets/EventTable-DAclQwfr.js +0 -2
  271. package/dashboard/dist/assets/EventTopicPill-By-6sXDp.js +0 -2
  272. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  273. package/dashboard/dist/assets/HomePage-DVOi7rR1.js +0 -2
  274. package/dashboard/dist/assets/ListToolbar-Bntl2hex.js +0 -2
  275. package/dashboard/dist/assets/McpOverview-B-xSYPJj.js +0 -2
  276. package/dashboard/dist/assets/McpQueryDetailPage-Cq71BzjB.js +0 -5
  277. package/dashboard/dist/assets/McpQueryPage-Dfz87aZF.js +0 -2
  278. package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js +0 -2
  279. package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js.map +0 -1
  280. package/dashboard/dist/assets/McpRunsPage-MUYvUYqz.js +0 -2
  281. package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
  282. package/dashboard/dist/assets/OperatorDashboard-Rih1SZrn.js +0 -2
  283. package/dashboard/dist/assets/PageHeader-Bo0SpcCK.js +0 -2
  284. package/dashboard/dist/assets/PageHeaderWithStats-7K5BdhOj.js +0 -2
  285. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  286. package/dashboard/dist/assets/ProcessDetailPage-BMkWCjqD.js +0 -2
  287. package/dashboard/dist/assets/ProcessesListPage-vZjUSc7S.js +0 -2
  288. package/dashboard/dist/assets/RolePill-BDzPFQUv.js +0 -2
  289. package/dashboard/dist/assets/RolesPage-kjeAsj3_.js +0 -2
  290. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  291. package/dashboard/dist/assets/RunAsSelector-DC4SLtTq.js +0 -2
  292. package/dashboard/dist/assets/ServerName-CEOFF7UG.js +0 -2
  293. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  294. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
  295. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
  296. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  297. package/dashboard/dist/assets/SwimlaneTimeline-MUUXgT3o.js +0 -2
  298. package/dashboard/dist/assets/SwimlaneTimeline-MUUXgT3o.js.map +0 -1
  299. package/dashboard/dist/assets/TagInput-VBY0xIwb.js +0 -2
  300. package/dashboard/dist/assets/TaskDetailPage-C0AlG_2t.js +0 -2
  301. package/dashboard/dist/assets/TaskDetailPage-C0AlG_2t.js.map +0 -1
  302. package/dashboard/dist/assets/TaskQueuePill-DZykFijh.js +0 -2
  303. package/dashboard/dist/assets/TasksListPage-69ZWCaCP.js +0 -2
  304. package/dashboard/dist/assets/TimeAgo-CttiZG0k.js +0 -2
  305. package/dashboard/dist/assets/TimestampCell-CYFbEhqc.js +0 -2
  306. package/dashboard/dist/assets/ToolPill-RP2Tvlrx.js +0 -2
  307. package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js +0 -2
  308. package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js.map +0 -1
  309. package/dashboard/dist/assets/TopicDetailPage-Aq4-6GLl.js +0 -9
  310. package/dashboard/dist/assets/TopicsPage-BYFKjRY_.js +0 -2
  311. package/dashboard/dist/assets/UserName-C4_T5-rI.js +0 -2
  312. package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js +0 -2
  313. package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js.map +0 -1
  314. package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js +0 -2
  315. package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js.map +0 -1
  316. package/dashboard/dist/assets/WorkflowsDashboard-_LMWc-OC.js +0 -2
  317. package/dashboard/dist/assets/WorkflowsOverview-DFrfw554.js +0 -2
  318. package/dashboard/dist/assets/YamlWorkflowsPage-CZzGwfol.js +0 -2
  319. package/dashboard/dist/assets/escalation-BZjS2202.js +0 -2
  320. package/dashboard/dist/assets/escalation-columns-DtRVmPSB.js +0 -2
  321. package/dashboard/dist/assets/helpers-BngVEys5.js +0 -2
  322. package/dashboard/dist/assets/index-ABsZZf_U.js +0 -2
  323. package/dashboard/dist/assets/index-BCsShN2l.js +0 -6
  324. package/dashboard/dist/assets/index-Bq5MSkCL.js +0 -2
  325. package/dashboard/dist/assets/index-BwivT39P.js +0 -2
  326. package/dashboard/dist/assets/index-Byp8BDPs.js +0 -2
  327. package/dashboard/dist/assets/index-ByxH4qQ-.js +0 -2
  328. package/dashboard/dist/assets/index-COgyD_H2.js +0 -2
  329. package/dashboard/dist/assets/index-DXEYynKO.css +0 -1
  330. package/dashboard/dist/assets/index-DcpCR9c_.js +0 -63
  331. package/dashboard/dist/assets/index-DcpCR9c_.js.map +0 -1
  332. package/dashboard/dist/assets/index-DuPY59Yu.js +0 -5
  333. package/dashboard/dist/assets/index-DuPY59Yu.js.map +0 -1
  334. package/dashboard/dist/assets/index-DxMNiFPS.js +0 -2
  335. package/dashboard/dist/assets/index-DykjJxzr.js +0 -15
  336. package/dashboard/dist/assets/index-R61-yG56.js +0 -2
  337. package/dashboard/dist/assets/index-xgl431mG.js +0 -2
  338. package/dashboard/dist/assets/namespaces-BBTvHnRF.js +0 -2
  339. package/dashboard/dist/assets/settings-nt6qyR1S.js +0 -2
  340. package/dashboard/dist/assets/settings-nt6qyR1S.js.map +0 -1
  341. package/dashboard/dist/assets/useEventHooks-CkJOmbF-.js +0 -2
  342. package/dashboard/dist/assets/useEventHooks-CkJOmbF-.js.map +0 -1
  343. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  344. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  345. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
  346. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-BwivT39P.js","sources":["../../src/pages/admin/users/CreateUserModal.tsx","../../src/pages/admin/users/EditUserModal.tsx","../../src/pages/admin/bots/CreateBotModal.tsx","../../src/pages/admin/bots/EditBotModal.tsx","../../src/pages/admin/bots/BotDetailPanel.tsx","../../src/pages/admin/bots/BotsPage.tsx","../../src/pages/admin/users/RolePanel.tsx","../../src/pages/admin/users/AccountTabToggle.tsx","../../src/pages/admin/users/UsersPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateUserModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createUser = useCreateUser();\n const [form, setForm] = useState({\n external_id: '',\n email: '',\n display_name: '',\n password: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ external_id: '', email: '', display_name: '', password: '' });\n }\n\n const handleCreate = () => {\n if (!form.external_id.trim()) return;\n createUser.mutate(\n {\n external_id: form.external_id.trim(),\n email: form.email.trim() || undefined,\n display_name: form.display_name.trim() || undefined,\n password: form.password || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create User\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n External ID (required)\n </label>\n <input\n type=\"text\"\n value={form.external_id}\n onChange={(e) => set('external_id', e.target.value)}\n placeholder=\"e.g., john.doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"John Doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => set('email', e.target.value)}\n placeholder=\"john@example.com\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Password\n </label>\n <input\n type=\"password\"\n value={form.password}\n onChange={(e) => set('password', e.target.value)}\n placeholder=\"Leave blank for no password\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createUser.error && (\n <p className=\"text-xs text-status-error\">{(createUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.external_id.trim() || createUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {createUser.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { LTUserRecord } from '../../../api/types';\n\nexport function EditUserModal({\n open,\n onClose,\n user,\n}: {\n open: boolean;\n onClose: () => void;\n user: LTUserRecord | null;\n}) {\n const updateUser = useUpdateUser();\n const [form, setForm] = useState({\n display_name: '',\n email: '',\n status: 'active' as string,\n });\n\n const [prevUser, setPrevUser] = useState(user);\n if (user !== prevUser) {\n setPrevUser(user);\n if (user) {\n setForm({\n display_name: user.display_name ?? '',\n email: user.email ?? '',\n status: user.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!user) return;\n updateUser.mutate(\n {\n id: user.id,\n display_name: form.display_name.trim() || undefined,\n email: form.email.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${user?.display_name || user?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => setForm((f) => ({ ...f, email: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateUser.error && (\n <p className=\"text-xs text-status-error\">{(updateUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateUser.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useCreateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateBotModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createBot = useCreateBot();\n const [form, setForm] = useState({\n name: '',\n display_name: '',\n description: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ name: '', display_name: '', description: '' });\n }\n\n const handleCreate = () => {\n if (!form.name.trim()) return;\n createBot.mutate(\n {\n name: form.name.trim(),\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Bot\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Name (required)\n </label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value.replace(/\\s+/g, '-').toLowerCase())}\n placeholder=\"e.g., ci-bot\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"CI Bot\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Runs scheduled workflows\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createBot.error && (\n <p className=\"text-xs text-status-error\">{(createBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.name.trim() || createBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {createBot.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { BotRecord } from '../../../api/types';\n\nexport function EditBotModal({\n open,\n onClose,\n bot,\n}: {\n open: boolean;\n onClose: () => void;\n bot: BotRecord | null;\n}) {\n const updateBot = useUpdateBot();\n const [form, setForm] = useState({\n display_name: '',\n description: '',\n status: 'active' as string,\n });\n\n const [prevBot, setPrevBot] = useState(bot);\n if (bot !== prevBot) {\n setPrevBot(bot);\n if (bot) {\n setForm({\n display_name: bot.display_name ?? '',\n description: bot.description ?? '',\n status: bot.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!bot) return;\n updateBot.mutate(\n {\n id: bot.id,\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${bot?.display_name || bot?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => setForm((f) => ({ ...f, description: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateBot.error && (\n <p className=\"text-xs text-status-error\">{(updateBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateBot.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Trash2, Key, Plus, Copy, Check } from 'lucide-react';\nimport {\n useBotApiKeys,\n useCreateBotApiKey,\n useRevokeBotApiKey,\n useAddBotRole,\n useRemoveBotRole,\n} from '../../../api/bots';\nimport { useRoles } from '../../../api/roles';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport type { BotRecord, BotApiKeyRecord, LTRoleType } from '../../../api/types';\n\nfunction ApiKeysSection({ botId }: { botId: string }) {\n const { data } = useBotApiKeys(botId);\n const createKey = useCreateBotApiKey();\n const revokeKey = useRevokeBotApiKey();\n\n const [newKeyName, setNewKeyName] = useState('');\n const [generatedKey, setGeneratedKey] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n const [confirmRevoke, setConfirmRevoke] = useState<BotApiKeyRecord | null>(null);\n\n const keys = data?.keys ?? [];\n\n const handleGenerate = () => {\n if (!newKeyName.trim()) return;\n createKey.mutate(\n { botId, name: newKeyName.trim(), scopes: ['mcp:tool:call'] },\n {\n onSuccess: (result: any) => {\n setGeneratedKey(result.rawKey);\n setNewKeyName('');\n },\n },\n );\n };\n\n const handleCopy = () => {\n if (!generatedKey) return;\n navigator.clipboard.writeText(generatedKey);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleRevoke = () => {\n if (!confirmRevoke) return;\n revokeKey.mutate(\n { botId, keyId: confirmRevoke.id },\n { onSuccess: () => setConfirmRevoke(null) },\n );\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n API Keys\n </p>\n\n {generatedKey && (\n <div className=\"mb-3 p-3 bg-status-success/10 border border-status-success/30 rounded-md\">\n <p className=\"text-[10px] font-semibold text-status-success mb-1\">\n Key generated — copy now, it won't be shown again\n </p>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-[11px] font-mono text-text-primary bg-surface-sunken px-2 py-1 rounded flex-1 overflow-hidden text-ellipsis\">\n {generatedKey}\n </code>\n <button\n onClick={handleCopy}\n className=\"text-text-tertiary hover:text-text-primary shrink-0\"\n title=\"Copy to clipboard\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n </div>\n )}\n\n {keys.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No API keys.</p>\n ) : (\n <div className=\"space-y-1.5 mb-3\">\n {keys.map((k) => (\n <div\n key={k.id}\n className=\"group/key flex items-center justify-between px-2.5 py-1.5 bg-surface-sunken rounded text-xs\"\n >\n <div className=\"flex items-center gap-2\">\n <Key className=\"w-3 h-3 text-text-tertiary\" />\n <span className=\"text-text-primary font-mono\">{k.name}</span>\n {k.last_used_at && (\n <span className=\"text-[10px] text-text-tertiary\">\n used <TimeAgo date={k.last_used_at} />\n </span>\n )}\n </div>\n <button\n onClick={() => setConfirmRevoke(k)}\n className=\"opacity-0 group-hover/key:opacity-100 transition-opacity text-text-tertiary hover:text-status-error\"\n title=\"Revoke key\"\n >\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"Key name...\"\n className=\"input text-xs flex-1 font-mono\"\n />\n <button\n onClick={handleGenerate}\n disabled={!newKeyName.trim() || createKey.isPending}\n className=\"btn-primary text-xs inline-flex items-center gap-1\"\n >\n <Plus className=\"w-3 h-3\" />\n {createKey.isPending ? '...' : 'Generate'}\n </button>\n </div>\n {createKey.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(createKey.error as Error).message}</p>\n )}\n\n <ConfirmDeleteModal\n open={!!confirmRevoke}\n onClose={() => setConfirmRevoke(null)}\n onConfirm={handleRevoke}\n title=\"Revoke API Key\"\n description={\n <>\n Revoke API key{' '}\n <span className=\"font-medium text-text-primary font-mono\">\n {confirmRevoke?.name}\n </span>\n ? This bot will no longer be able to authenticate with this key.\n </>\n }\n isPending={revokeKey.isPending}\n error={revokeKey.error as Error | null}\n />\n </div>\n );\n}\n\nfunction RolesSection({ bot }: { bot: BotRecord }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddBotRole();\n const removeRole = useRemoveBotRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = bot.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!newRole.trim()) return;\n addRole.mutate(\n { botId: bot.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n removeRole.mutate({ botId: bot.id, role });\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n Roles\n </p>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n )}\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n );\n}\n\nexport function BotDetailPanel({ bot }: { bot: BotRecord | null }) {\n if (!bot) {\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-xs text-text-tertiary\">\n Select a bot to manage its API keys and roles.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px] space-y-6\">\n <div>\n <p className=\"text-sm text-text-primary\">{bot.display_name || bot.external_id}</p>\n {bot.description && (\n <p className=\"text-xs text-text-tertiary mt-0.5\">{bot.description}</p>\n )}\n </div>\n\n <ApiKeysSection botId={bot.id} />\n <RolesSection bot={bot} />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useBots, useDeleteBot } from '../../../api/bots';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport type { BotRecord } from '../../../api/types';\nimport { CreateBotModal } from './CreateBotModal';\nimport { EditBotModal } from './EditBotModal';\nimport { BotDetailPanel } from './BotDetailPanel';\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function BotsPage({ embedded = false }: { embedded?: boolean }) {\n const { pagination } = useFilterParams({ filters: {} });\n const deleteBot = useDeleteBot();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingBot, setEditingBot] = useState<BotRecord | null>(null);\n const [selectedBot, setSelectedBot] = useState<BotRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<BotRecord | null>(null);\n\n const { data, isLoading } = useBots({\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const bots = data?.bots ?? [];\n\n const activeBot = useMemo(() => {\n if (!selectedBot) return null;\n return bots.find((b) => b.id === selectedBot.id) ?? selectedBot;\n }, [bots, selectedBot]);\n\n const columns: Column<BotRecord>[] = [\n {\n key: 'display_name',\n label: 'Bot',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.description && (\n <p className=\"text-xs text-text-tertiary\">{row.description}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit bot\"\n onClick={() => setEditingBot(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete bot\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteBot.mutate(confirmDelete.id, {\n onSuccess: () => {\n setConfirmDelete(null);\n if (selectedBot?.id === confirmDelete.id) setSelectedBot(null);\n },\n });\n };\n\n return (\n <div>\n {embedded ? (\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n </div>\n ) : (\n <PageHeader\n title=\"Service Accounts\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n }\n />\n )}\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_360px] gap-6\">\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={bots}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No bots yet\"\n onRowClick={(row) => setSelectedBot(row)}\n activeRowKey={activeBot?.id ?? null}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n <BotDetailPanel bot={activeBot} />\n </div>\n\n <CreateBotModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditBotModal\n open={!!editingBot}\n onClose={() => setEditingBot(null)}\n bot={editingBot}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Bot\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This will also revoke all API keys. This action cannot be undone.\n </>\n }\n isPending={deleteBot.isPending}\n error={deleteBot.error as Error | null}\n />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useRoles } from '../../../api/roles';\nimport { useAddUserRole, useRemoveUserRole } from '../../../api/users';\nimport type { LTUserRecord, LTRoleType } from '../../../api/types';\nimport { RolePill } from '../../../components/common/display/RolePill';\n\nexport function RolePanel({ user }: { user: LTUserRecord | null }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddUserRole();\n const removeRole = useRemoveUserRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = user?.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!user || !newRole.trim()) return;\n addRole.mutate(\n { userId: user.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n if (!user) return;\n removeRole.mutate({ userId: user.id, role });\n };\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Role Membership\n </p>\n\n {!user ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a user to manage their roles.\n </p>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-primary\">{user.display_name || user.external_id}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Member of:</p>\n </div>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Role\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { User, Bot } from 'lucide-react';\n\nexport type AccountTab = 'users' | 'service-accounts';\n\nexport function AccountTabToggle({ active, onChange }: { active: AccountTab; onChange: (t: AccountTab) => void }) {\n const btn = (tab: AccountTab, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(tab)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n active === tab\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('users', <User className=\"w-3.5 h-3.5\" />, 'User Accounts')}\n {btn('service-accounts', <Bot className=\"w-3.5 h-3.5\" />, 'Service Accounts')}\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useUsers, useDeleteUser } from '../../../api/users';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport type { LTUserRecord } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { CreateUserModal } from './CreateUserModal';\nimport { EditUserModal } from './EditUserModal';\nimport { BotsPage } from '../bots/BotsPage';\nimport { RolePanel } from './RolePanel';\nimport { AccountTabToggle, type AccountTab } from './AccountTabToggle';\n\nconst statusOptions = [\n { value: 'active', label: 'Active' },\n { value: 'inactive', label: 'Inactive' },\n { value: 'suspended', label: 'Suspended' },\n];\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function UsersPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const tabParam = searchParams.get('tab');\n const activeTab: AccountTab = tabParam === 'service-accounts' ? 'service-accounts' : 'users';\n\n const handleTabChange = (tab: AccountTab) => {\n if (tab === 'users') {\n setSearchParams({});\n } else {\n setSearchParams({ tab });\n }\n };\n\n return (\n <div>\n <PageHeader\n title=\"Accounts\"\n docsHash=\"#docs:dashboard.md:accounts\"\n actions={<AccountTabToggle active={activeTab} onChange={handleTabChange} />}\n />\n {activeTab === 'users' ? <UserAccountsPanel /> : <BotsPage embedded />}\n </div>\n );\n}\n\nfunction UserAccountsPanel() {\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '' },\n });\n const deleteUser = useDeleteUser();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingUser, setEditingUser] = useState<LTUserRecord | null>(null);\n const [selectedUser, setSelectedUser] = useState<LTUserRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<LTUserRecord | null>(null);\n\n const { data, isLoading } = useUsers({\n status: filters.status || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const users = data?.users ?? [];\n\n const activeUser = useMemo(() => {\n if (!selectedUser) return null;\n return users.find((u) => u.id === selectedUser.id) ?? selectedUser;\n }, [users, selectedUser]);\n\n const columns: Column<LTUserRecord>[] = [\n {\n key: 'display_name',\n label: 'User',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.email && (\n <p className=\"text-xs text-text-tertiary\">{row.email}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit user\"\n onClick={() => setEditingUser(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete user\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteUser.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add User\n </button>\n </div>\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n </FilterBar>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n {/* Left — users table */}\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={users}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No users found\"\n onRowClick={(row) => setSelectedUser(row)}\n activeRowKey={activeUser?.id ?? null}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Right — role management panel */}\n <RolePanel user={activeUser} />\n </div>\n\n <CreateUserModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditUserModal\n open={!!editingUser}\n onClose={() => setEditingUser(null)}\n user={editingUser}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete User\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteUser.isPending}\n error={deleteUser.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateUserModal","open","onClose","createUser","useCreateUser","form","setForm","useState","prevOpen","setPrevOpen","handleCreate","set","field","value","f","jsx","Modal","jsxs","e","EditUserModal","user","updateUser","useUpdateUser","prevUser","setPrevUser","handleSave","CreateBotModal","createBot","useCreateBot","EditBotModal","bot","updateBot","useUpdateBot","prevBot","setPrevBot","ApiKeysSection","botId","data","useBotApiKeys","createKey","useCreateBotApiKey","revokeKey","useRevokeBotApiKey","newKeyName","setNewKeyName","generatedKey","setGeneratedKey","copied","setCopied","confirmRevoke","setConfirmRevoke","keys","handleGenerate","result","handleCopy","handleRevoke","Check","Copy","k","Key","TimeAgo","Trash2","Plus","ConfirmDeleteModal","Fragment","RolesSection","allRolesData","useRoles","addRole","useAddBotRole","removeRole","useRemoveBotRole","newRole","setNewRole","newType","setNewType","allRoles","currentRoles","available","useMemo","assigned","r","handleAdd","handleRemove","role","RolePill","BotDetailPanel","statusDot","BotsPage","embedded","pagination","useFilterParams","deleteBot","useDeleteBot","showCreate","setShowCreate","editingBot","setEditingBot","selectedBot","setSelectedBot","confirmDelete","setConfirmDelete","isLoading","useBots","total","bots","activeBot","b","columns","row","TimestampCell","RowActionGroup","RowAction","Pencil","handleDelete","PageHeader","DataTable","StickyPagination","RolePanel","useAddUserRole","useRemoveUserRole","AccountTabToggle","active","onChange","btn","tab","icon","label","User","Bot","statusOptions","UsersPage","searchParams","setSearchParams","useSearchParams","activeTab","handleTabChange","UserAccountsPanel","filters","setFilter","deleteUser","useDeleteUser","editingUser","setEditingUser","selectedUser","setSelectedUser","useUsers","users","activeUser","FilterBar","FilterSelect","v"],"mappings":"m+BAIO,SAASA,GAAgB,CAC9B,KAAAC,EACA,QAAAC,CACF,EAGG,CACD,MAAMC,EAAaC,EAAA,EACb,CAACC,EAAMC,CAAO,EAAIC,WAAS,CAC/B,YAAa,GACb,MAAO,GACP,aAAc,GACd,SAAU,EAAA,CACX,EAEK,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASN,CAAI,EACzCA,IAASO,IACXC,EAAYR,CAAI,EACZA,GAAMK,EAAQ,CAAE,YAAa,GAAI,MAAO,GAAI,aAAc,GAAI,SAAU,EAAA,CAAI,GAGlF,MAAMI,EAAe,IAAM,CACpBL,EAAK,YAAY,QACtBF,EAAW,OACT,CACE,YAAaE,EAAK,YAAY,KAAA,EAC9B,MAAOA,EAAK,MAAM,KAAA,GAAU,OAC5B,aAAcA,EAAK,aAAa,KAAA,GAAU,OAC1C,SAAUA,EAAK,UAAY,MAAA,EAE7B,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEMS,EAAM,CAACC,EAAeC,IAC1BP,EAASQ,IAAO,CAAE,GAAGA,EAAG,CAACF,CAAK,EAAGC,GAAQ,EAE3C,OACEE,EAAAA,IAACC,GAAM,KAAAf,EAAY,QAAAC,EAAkB,MAAM,cACzC,SAAAe,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,yBAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWa,GAAMP,EAAI,cAAeO,EAAE,OAAO,KAAK,EAClD,YAAY,iBACZ,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,eAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWa,GAAMP,EAAI,eAAgBO,EAAE,OAAO,KAAK,EACnD,YAAY,WACZ,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,QAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,MACZ,SAAWa,GAAMP,EAAI,QAASO,EAAE,OAAO,KAAK,EAC5C,YAAY,mBACZ,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,WAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,WACL,MAAOV,EAAK,SACZ,SAAWa,GAAMP,EAAI,WAAYO,EAAE,OAAO,KAAK,EAC/C,YAAY,8BACZ,UAAU,sBAAA,CAAA,CACZ,EACF,EAECf,EAAW,OACVY,MAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAZ,EAAW,MAAgB,OAAA,CAAQ,EAGhFc,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAF,MAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,SAE5D,EACAa,EAAAA,IAAC,SAAA,CACC,QAASL,EACT,SAAU,CAACL,EAAK,YAAY,KAAA,GAAUF,EAAW,UACjD,UAAU,sBAET,SAAAA,EAAW,UAAY,cAAgB,QAAA,CAAA,CAC1C,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC3GO,SAASgB,GAAc,CAC5B,KAAAlB,EACA,QAAAC,EACA,KAAAkB,CACF,EAIG,CACD,MAAMC,EAAaC,EAAA,EACb,CAACjB,EAAMC,CAAO,EAAIC,WAAS,CAC/B,aAAc,GACd,MAAO,GACP,OAAQ,QAAA,CACT,EAEK,CAACgB,EAAUC,CAAW,EAAIjB,EAAAA,SAASa,CAAI,EACzCA,IAASG,IACXC,EAAYJ,CAAI,EACZA,GACFd,EAAQ,CACN,aAAcc,EAAK,cAAgB,GACnC,MAAOA,EAAK,OAAS,GACrB,OAAQA,EAAK,MAAA,CACd,GAIL,MAAMK,EAAa,IAAM,CAClBL,GACLC,EAAW,OACT,CACE,GAAID,EAAK,GACT,aAAcf,EAAK,aAAa,KAAA,GAAU,OAC1C,MAAOA,EAAK,MAAM,KAAA,GAAU,OAC5B,OAAQA,EAAK,MAAA,EAEf,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEA,OACEa,EAAAA,IAACC,EAAA,CACC,KAAAf,EACA,QAAAC,EACA,MAAO,WAAUkB,GAAA,YAAAA,EAAM,gBAAgBA,GAAA,YAAAA,EAAM,cAAe,EAAE,GAE9D,SAAAH,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,eAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,aAAcI,EAAE,OAAO,OAAQ,EACxE,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,QAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,MACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,MAAOI,EAAE,OAAO,OAAQ,EACjE,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,SAErG,EACAE,EAAAA,KAAC,SAAA,CACC,MAAOZ,EAAK,OACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,OAAQI,EAAE,OAAO,OAAQ,EAClE,UAAU,wBAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,SAAM,EAC7BA,EAAAA,IAAC,SAAA,CAAO,MAAM,WAAW,SAAA,WAAQ,EACjCA,EAAAA,IAAC,SAAA,CAAO,MAAM,YAAY,SAAA,WAAA,CAAS,CAAA,CAAA,CAAA,CACrC,EACF,EAECM,EAAW,OACVN,MAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAM,EAAW,MAAgB,OAAA,CAAQ,EAGhFJ,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAF,MAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,SAE5D,EACAa,EAAAA,IAAC,SAAA,CACC,QAASU,EACT,SAAUJ,EAAW,UACrB,UAAU,sBAET,SAAAA,EAAW,UAAY,YAAc,MAAA,CAAA,CACxC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,CCzGO,SAASK,GAAe,CAC7B,KAAAzB,EACA,QAAAC,CACF,EAGG,CACD,MAAMyB,EAAYC,EAAA,EACZ,CAACvB,EAAMC,CAAO,EAAIC,WAAS,CAC/B,KAAM,GACN,aAAc,GACd,YAAa,EAAA,CACd,EAEK,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASN,CAAI,EACzCA,IAASO,IACXC,EAAYR,CAAI,EACZA,KAAc,CAAE,KAAM,GAAI,aAAc,GAAI,YAAa,GAAI,GAGnE,MAAMS,EAAe,IAAM,CACpBL,EAAK,KAAK,QACfsB,EAAU,OACR,CACE,KAAMtB,EAAK,KAAK,KAAA,EAChB,aAAcA,EAAK,aAAa,KAAA,GAAU,OAC1C,YAAaA,EAAK,YAAY,QAAU,MAAA,EAE1C,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEMS,EAAM,CAACC,EAAeC,IAC1BP,EAASQ,IAAO,CAAE,GAAGA,EAAG,CAACF,CAAK,EAAGC,GAAQ,EAE3C,OACEE,EAAAA,IAACC,GAAM,KAAAf,EAAY,QAAAC,EAAkB,MAAM,aACzC,SAAAe,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,kBAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,KACZ,SAAWa,GAAMP,EAAI,OAAQO,EAAE,OAAO,MAAM,QAAQ,OAAQ,GAAG,EAAE,aAAa,EAC9E,YAAY,eACZ,UAAU,gCAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,eAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWa,GAAMP,EAAI,eAAgBO,EAAE,OAAO,KAAK,EACnD,YAAY,SACZ,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWa,GAAMP,EAAI,cAAeO,EAAE,OAAO,KAAK,EAClD,YAAY,2BACZ,UAAU,sBAAA,CAAA,CACZ,EACF,EAECS,EAAU,OACTZ,MAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAY,EAAU,MAAgB,OAAA,CAAQ,EAG/EV,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAF,MAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,SAE5D,EACAa,EAAAA,IAAC,SAAA,CACC,QAASL,EACT,SAAU,CAACL,EAAK,KAAK,KAAA,GAAUsB,EAAU,UACzC,UAAU,sBAET,SAAAA,EAAU,UAAY,cAAgB,QAAA,CAAA,CACzC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CC7FO,SAASE,GAAa,CAC3B,KAAA5B,EACA,QAAAC,EACA,IAAA4B,CACF,EAIG,CACD,MAAMC,EAAYC,EAAA,EACZ,CAAC3B,EAAMC,CAAO,EAAIC,WAAS,CAC/B,aAAc,GACd,YAAa,GACb,OAAQ,QAAA,CACT,EAEK,CAAC0B,EAASC,CAAU,EAAI3B,EAAAA,SAASuB,CAAG,EACtCA,IAAQG,IACVC,EAAWJ,CAAG,EACVA,GACFxB,EAAQ,CACN,aAAcwB,EAAI,cAAgB,GAClC,YAAaA,EAAI,aAAe,GAChC,OAAQA,EAAI,MAAA,CACb,GAIL,MAAML,EAAa,IAAM,CAClBK,GACLC,EAAU,OACR,CACE,GAAID,EAAI,GACR,aAAczB,EAAK,aAAa,KAAA,GAAU,OAC1C,YAAaA,EAAK,YAAY,KAAA,GAAU,OACxC,OAAQA,EAAK,MAAA,EAEf,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEA,OACEa,EAAAA,IAACC,EAAA,CACC,KAAAf,EACA,QAAAC,EACA,MAAO,WAAU4B,GAAA,YAAAA,EAAK,gBAAgBA,GAAA,YAAAA,EAAK,cAAe,EAAE,GAE5D,SAAAb,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,eAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,aAAcI,EAAE,OAAO,OAAQ,EACxE,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAErG,EACAA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,YAAaI,EAAE,OAAO,OAAQ,EACvE,UAAU,sBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAH,EAAAA,IAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,SAErG,EACAE,EAAAA,KAAC,SAAA,CACC,MAAOZ,EAAK,OACZ,SAAWa,GAAMZ,EAASQ,IAAO,CAAE,GAAGA,EAAG,OAAQI,EAAE,OAAO,OAAQ,EAClE,UAAU,wBAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,SAAM,EAC7BA,EAAAA,IAAC,SAAA,CAAO,MAAM,WAAW,SAAA,WAAQ,EACjCA,EAAAA,IAAC,SAAA,CAAO,MAAM,YAAY,SAAA,WAAA,CAAS,CAAA,CAAA,CAAA,CACrC,EACF,EAECgB,EAAU,OACThB,MAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAgB,EAAU,MAAgB,OAAA,CAAQ,EAG/Ed,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAF,MAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,SAE5D,EACAa,EAAAA,IAAC,SAAA,CACC,QAASU,EACT,SAAUM,EAAU,UACpB,UAAU,sBAET,SAAAA,EAAU,UAAY,YAAc,MAAA,CAAA,CACvC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,CC9FA,SAASI,GAAe,CAAE,MAAAC,GAA4B,CACpD,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAcF,CAAK,EAC9BG,EAAYC,EAAA,EACZC,EAAYC,EAAA,EAEZ,CAACC,EAAYC,CAAa,EAAIrC,EAAAA,SAAS,EAAE,EACzC,CAACsC,EAAcC,CAAe,EAAIvC,EAAAA,SAAwB,IAAI,EAC9D,CAACwC,EAAQC,CAAS,EAAIzC,EAAAA,SAAS,EAAK,EACpC,CAAC0C,EAAeC,CAAgB,EAAI3C,EAAAA,SAAiC,IAAI,EAEzE4C,GAAOd,GAAA,YAAAA,EAAM,OAAQ,CAAA,EAErBe,EAAiB,IAAM,CACtBT,EAAW,QAChBJ,EAAU,OACR,CAAE,MAAAH,EAAO,KAAMO,EAAW,OAAQ,OAAQ,CAAC,eAAe,CAAA,EAC1D,CACE,UAAYU,GAAgB,CAC1BP,EAAgBO,EAAO,MAAM,EAC7BT,EAAc,EAAE,CAClB,CAAA,CACF,CAEJ,EAEMU,EAAa,IAAM,CAClBT,IACL,UAAU,UAAU,UAAUA,CAAY,EAC1CG,EAAU,EAAI,EACd,WAAW,IAAMA,EAAU,EAAK,EAAG,GAAI,EACzC,EAEMO,EAAe,IAAM,CACpBN,GACLR,EAAU,OACR,CAAE,MAAAL,EAAO,MAAOa,EAAc,EAAA,EAC9B,CAAE,UAAW,IAAMC,EAAiB,IAAI,CAAA,CAAE,CAE9C,EAEA,cACG,MAAA,CACC,SAAA,CAAAnC,EAAAA,IAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,WAE3F,EAEC8B,GACC5B,EAAAA,KAAC,MAAA,CAAI,UAAU,2EACb,SAAA,CAAAF,EAAAA,IAAC,IAAA,CAAE,UAAU,qDAAqD,SAAA,oDAElE,EACAE,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAF,EAAAA,IAAC,OAAA,CAAK,UAAU,mHACb,SAAA8B,EACH,EACA9B,EAAAA,IAAC,SAAA,CACC,QAASuC,EACT,UAAU,sDACV,MAAM,oBAEL,SAAAP,QAAUS,GAAA,CAAM,UAAU,kCAAkC,EAAKzC,EAAAA,IAAC0C,GAAA,CAAK,UAAU,aAAA,CAAc,CAAA,CAAA,CAClG,CAAA,CACF,CAAA,EACF,EAGDN,EAAK,SAAW,EACfpC,EAAAA,IAAC,IAAA,CAAE,UAAU,kCAAkC,SAAA,cAAA,CAAY,EAE3DA,MAAC,OAAI,UAAU,mBACZ,SAAAoC,EAAK,IAAKO,GACTzC,EAAAA,KAAC,MAAA,CAEC,UAAU,8FAEV,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAF,EAAAA,IAAC4C,GAAA,CAAI,UAAU,4BAAA,CAA6B,EAC5C5C,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,WAAE,KAAK,EACrD2C,EAAE,cACDzC,OAAC,OAAA,CAAK,UAAU,iCAAiC,SAAA,CAAA,QAC1CF,EAAAA,IAAC6C,EAAA,CAAQ,KAAMF,EAAE,YAAA,CAAc,CAAA,CAAA,CACtC,CAAA,EAEJ,EACA3C,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMmC,EAAiBQ,CAAC,EACjC,UAAU,sGACV,MAAM,aAEN,SAAA3C,EAAAA,IAAC8C,EAAA,CAAO,UAAU,SAAA,CAAU,CAAA,CAAA,CAC9B,CAAA,EAlBKH,EAAE,EAAA,CAoBV,EACH,EAGFzC,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAO4B,EACP,SAAWzB,GAAM0B,EAAc1B,EAAE,OAAO,KAAK,EAC7C,YAAY,cACZ,UAAU,gCAAA,CAAA,EAEZD,EAAAA,KAAC,SAAA,CACC,QAASmC,EACT,SAAU,CAACT,EAAW,KAAA,GAAUJ,EAAU,UAC1C,UAAU,qDAEV,SAAA,CAAAxB,EAAAA,IAAC+C,GAAA,CAAK,UAAU,SAAA,CAAU,EACzBvB,EAAU,UAAY,MAAQ,UAAA,CAAA,CAAA,CACjC,EACF,EACCA,EAAU,OACTxB,MAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAwB,EAAU,MAAgB,OAAA,CAAQ,EAGxFxB,EAAAA,IAACgD,EAAA,CACC,KAAM,CAAC,CAACd,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWK,EACX,MAAM,iBACN,YACEtC,EAAAA,KAAA+C,WAAA,CAAE,SAAA,CAAA,iBACe,IACfjD,EAAAA,IAAC,OAAA,CAAK,UAAU,0CACb,0BAAe,KAClB,EAAO,kEAAA,EAET,EAEF,UAAW0B,EAAU,UACrB,MAAOA,EAAU,KAAA,CAAA,CACnB,EACF,CAEJ,CAEA,SAASwB,GAAa,CAAE,IAAAnC,GAA2B,CACjD,KAAM,CAAE,KAAMoC,CAAA,EAAiBC,EAAA,EACzBC,EAAUC,EAAA,EACVC,EAAaC,EAAA,EACb,CAACC,EAASC,CAAU,EAAIlE,EAAAA,SAAS,EAAE,EACnC,CAACmE,EAASC,CAAU,EAAIpE,EAAAA,SAAqB,QAAQ,EAErDqE,GAAWV,GAAA,YAAAA,EAAc,QAAS,CAAA,EAClCW,EAAe/C,EAAI,OAAS,CAAA,EAE5BgD,EAAYC,EAAAA,QAAQ,IAAM,CAC9B,MAAMC,EAAW,IAAI,IAAIH,EAAa,IAAKI,GAAMA,EAAE,IAAI,CAAC,EACxD,OAAOL,EAAS,OAAQK,GAAM,CAACD,EAAS,IAAIC,CAAC,CAAC,CAChD,EAAG,CAACL,EAAUC,CAAY,CAAC,EAErBK,EAAY,IAAM,CACjBV,EAAQ,QACbJ,EAAQ,OACN,CAAE,MAAOtC,EAAI,GAAI,KAAM0C,EAAQ,KAAA,EAAQ,KAAME,CAAA,EAC7C,CAAE,UAAW,IAAM,CAAED,EAAW,EAAE,EAAGE,EAAW,QAAQ,CAAG,CAAA,CAAE,CAEjE,EAEMQ,EAAgBC,GAAiB,CACrCd,EAAW,OAAO,CAAE,MAAOxC,EAAI,GAAI,KAAAsD,EAAM,CAC3C,EAEA,cACG,MAAA,CACC,SAAA,CAAArE,EAAAA,IAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,QAE3F,EAEC8D,EAAa,SAAW,EACvB9D,EAAAA,IAAC,IAAA,CAAE,UAAU,kCAAkC,SAAA,oBAAA,CAAkB,EAEjEA,MAAC,OAAI,UAAU,4BACZ,SAAA8D,EAAa,IAAKI,GACjBhE,EAAAA,KAAC,OAAA,CAEC,UAAU,0GAEV,SAAA,CAAAF,EAAAA,IAACsE,EAAA,CAAS,KAAMJ,EAAE,IAAA,CAAM,EACxBlE,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAiC,WAAE,KAAK,EACxDA,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMoE,EAAaF,EAAE,IAAI,EAClC,UAAU,sEACV,MAAO,UAAUA,EAAE,IAAI,GACxB,SAAA,GAAA,CAAA,CAED,CAAA,EAXKA,EAAE,IAAA,CAaV,EACH,EAGDH,EAAU,OAAS,GAClB7D,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,MAAOuD,EACP,SAAWtD,GAAMuD,EAAWvD,EAAE,OAAO,KAAK,EAC1C,UAAU,kCAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,GAAG,SAAA,mBAAgB,EAChC+D,EAAU,IAAKG,GACdlE,EAAAA,IAAC,UAAe,MAAOkE,EAAI,SAAAA,CAAA,EAAdA,CAAgB,CAC9B,CAAA,CAAA,CAAA,EAEHhE,EAAAA,KAAC,SAAA,CACC,MAAOyD,EACP,SAAWxD,GAAMyD,EAAWzD,EAAE,OAAO,KAAmB,EACxD,UAAU,sBAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,SAAM,EAC7BA,EAAAA,IAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,QAAK,EAC3BA,EAAAA,IAAC,SAAA,CAAO,MAAM,aAAa,SAAA,YAAA,CAAU,CAAA,CAAA,CAAA,EAEvCA,EAAAA,IAAC,SAAA,CACC,QAASmE,EACT,SAAU,CAACV,GAAWJ,EAAQ,UAC9B,UAAU,sBAET,SAAAA,EAAQ,UAAY,MAAQ,KAAA,CAAA,CAC/B,EACF,EAEDA,EAAQ,OACPrD,MAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAqD,EAAQ,MAAgB,OAAA,CAAQ,CAAA,EAExF,CAEJ,CAEO,SAASkB,GAAe,CAAE,IAAAxD,GAAkC,CACjE,OAAKA,EAWHb,EAAAA,KAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,MAAC,KAAE,UAAU,4BAA6B,SAAAe,EAAI,cAAgBA,EAAI,YAAY,EAC7EA,EAAI,aACHf,EAAAA,IAAC,KAAE,UAAU,oCAAqC,WAAI,WAAA,CAAY,CAAA,EAEtE,EAEAA,EAAAA,IAACoB,GAAA,CAAe,MAAOL,EAAI,EAAA,CAAI,EAC/Bf,MAACkD,IAAa,IAAAnC,CAAA,CAAU,CAAA,EAC1B,EAnBEf,EAAAA,IAAC,OAAI,UAAU,yDACb,eAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gDAAA,CAE1C,CAAA,CACF,CAiBN,CC9PA,MAAMwE,GAAoC,CACxC,OAAQ,oBACR,SAAU,mBACV,UAAW,iBACb,EAEO,SAASC,GAAS,CAAE,SAAAC,EAAW,IAAiC,CACrE,KAAM,CAAE,WAAAC,GAAeC,EAAgB,CAAE,QAAS,CAAA,EAAI,EAChDC,EAAYC,EAAA,EAEZ,CAACC,EAAYC,CAAa,EAAIxF,EAAAA,SAAS,EAAK,EAC5C,CAACyF,EAAYC,CAAa,EAAI1F,EAAAA,SAA2B,IAAI,EAC7D,CAAC2F,EAAaC,CAAc,EAAI5F,EAAAA,SAA2B,IAAI,EAC/D,CAAC6F,EAAeC,CAAgB,EAAI9F,EAAAA,SAA2B,IAAI,EAEnE,CAAE,KAAA8B,EAAM,UAAAiE,CAAA,EAAcC,EAAQ,CAClC,MAAOb,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKc,GAAQnE,GAAA,YAAAA,EAAM,QAAS,EACvBoE,GAAOpE,GAAA,YAAAA,EAAM,OAAQ,CAAA,EAErBqE,EAAY3B,EAAAA,QAAQ,IACnBmB,EACEO,EAAK,KAAME,GAAMA,EAAE,KAAOT,EAAY,EAAE,GAAKA,EAD3B,KAExB,CAACO,EAAMP,CAAW,CAAC,EAEhBU,EAA+B,CACnC,CACE,IAAK,eACL,MAAO,MACP,OAASC,GACP5F,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAF,EAAAA,IAAC,OAAA,CACC,UAAW,iCAAiCwE,GAAUsB,EAAI,MAAM,GAAK,mBAAmB,GACxF,MAAOA,EAAI,MAAA,CAAA,SAEZ,MAAA,CACC,SAAA,CAAA9F,MAAC,KAAE,UAAU,4BACV,SAAA8F,EAAI,cAAgBA,EAAI,YAC3B,EACCA,EAAI,aACH9F,EAAAA,IAAC,KAAE,UAAU,6BAA8B,WAAI,WAAA,CAAY,CAAA,CAAA,CAE/D,CAAA,CAAA,CACF,CAAA,EAGJ,CACE,IAAK,QACL,MAAO,QACP,OAAS8F,GACP9F,EAAAA,IAAC,OAAI,UAAU,uBACX,UAAA8F,EAAI,OAAS,CAAA,GAAI,IAAK5B,SACrBI,EAAA,CAAsB,KAAMJ,EAAE,IAAA,EAAhBA,EAAE,IAAoB,CACtC,CAAA,CACH,CAAA,EAGJ,CACE,IAAK,aACL,MAAO,UACP,OAAS4B,SAASC,EAAA,CAAc,KAAMD,EAAI,WAAY,EACtD,UAAW,MAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACP5F,EAAAA,KAAC8F,EAAA,CACC,SAAA,CAAAhG,EAAAA,IAACiG,EAAA,CACC,KAAMC,EACN,MAAM,WACN,QAAS,IAAMhB,EAAcY,CAAG,CAAA,CAAA,EAElC9F,EAAAA,IAACiG,EAAA,CACC,KAAMnD,EACN,MAAM,aACN,QAAS,IAAMwC,EAAiBQ,CAAG,EACnC,WAAW,4CAAA,CAAA,CACb,EACF,EAEF,UAAW,iBAAA,CACb,EAGIK,EAAe,IAAM,CACpBd,GACLR,EAAU,OAAOQ,EAAc,GAAI,CACjC,UAAW,IAAM,CACfC,EAAiB,IAAI,GACjBH,GAAA,YAAAA,EAAa,MAAOE,EAAc,MAAmB,IAAI,CAC/D,CAAA,CACD,CACH,EAEA,cACG,MAAA,CACE,SAAA,CAAAX,EACC1E,EAAAA,IAAC,MAAA,CAAI,UAAU,wBACb,eAAC,SAAA,CAAO,QAAS,IAAMgF,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,SAAA,CAE5E,EACF,EAEAhF,EAAAA,IAACoG,EAAA,CACC,MAAM,mBACN,QACEpG,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMgF,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,SAAA,CAE5E,CAAA,CAAA,EAKN9E,EAAAA,KAAC,MAAA,CAAI,UAAU,kDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,kBACb,SAAA,CAAAF,EAAAA,IAACqG,EAAA,CACC,QAAAR,EACA,KAAMH,EACN,MAAQI,GAAQA,EAAI,GACpB,UAAAP,EACA,aAAa,cACb,WAAaO,GAAQV,EAAeU,CAAG,EACvC,cAAcH,GAAA,YAAAA,EAAW,KAAM,IAAA,CAAA,EAGjC3F,EAAAA,IAACsG,EAAA,CACC,KAAM3B,EAAW,KACjB,WAAYA,EAAW,WAAWc,CAAK,EACvC,aAAcd,EAAW,QACzB,MAAAc,EACA,SAAUd,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,EAEA3E,EAAAA,IAACuE,GAAA,CAAe,IAAKoB,CAAA,CAAW,CAAA,EAClC,EAEA3F,MAACW,IAAe,KAAMoE,EAAY,QAAS,IAAMC,EAAc,EAAK,EAAG,EAEvEhF,EAAAA,IAACc,GAAA,CACC,KAAM,CAAC,CAACmE,EACR,QAAS,IAAMC,EAAc,IAAI,EACjC,IAAKD,CAAA,CAAA,EAGPjF,EAAAA,IAACgD,EAAA,CACC,KAAM,CAAC,CAACqC,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWa,EACX,MAAM,aACN,YACEjG,EAAAA,KAAA+C,WAAA,CAAE,SAAA,CAAA,SACO,UACN,OAAA,CAAK,UAAU,gCACb,UAAAoC,GAAA,YAAAA,EAAe,gBAAgBA,GAAA,YAAAA,EAAe,aACjD,EAAO,qEAAA,EAET,EAEF,UAAWR,EAAU,UACrB,MAAOA,EAAU,KAAA,CAAA,CACnB,EACF,CAEJ,CCnLO,SAAS0B,GAAU,CAAE,KAAAlG,GAAuC,CACjE,KAAM,CAAE,KAAM8C,CAAA,EAAiBC,EAAA,EACzBC,EAAUmD,EAAA,EACVjD,EAAakD,EAAA,EACb,CAAChD,EAASC,CAAU,EAAIlE,EAAAA,SAAS,EAAE,EACnC,CAACmE,EAASC,CAAU,EAAIpE,EAAAA,SAAqB,QAAQ,EAErDqE,GAAWV,GAAA,YAAAA,EAAc,QAAS,CAAA,EAClCW,GAAezD,GAAA,YAAAA,EAAM,QAAS,CAAA,EAE9B0D,EAAYC,EAAAA,QAAQ,IAAM,CAC9B,MAAMC,EAAW,IAAI,IAAIH,EAAa,IAAKI,GAAMA,EAAE,IAAI,CAAC,EACxD,OAAOL,EAAS,OAAQK,GAAM,CAACD,EAAS,IAAIC,CAAC,CAAC,CAChD,EAAG,CAACL,EAAUC,CAAY,CAAC,EAErBK,EAAY,IAAM,CAClB,CAAC9D,GAAQ,CAACoD,EAAQ,QACtBJ,EAAQ,OACN,CAAE,OAAQhD,EAAK,GAAI,KAAMoD,EAAQ,KAAA,EAAQ,KAAME,CAAA,EAC/C,CAAE,UAAW,IAAM,CAAED,EAAW,EAAE,EAAGE,EAAW,QAAQ,CAAG,CAAA,CAAE,CAEjE,EAEMQ,EAAgBC,GAAiB,CAChChE,GACLkD,EAAW,OAAO,CAAE,OAAQlD,EAAK,GAAI,KAAAgE,EAAM,CAC7C,EAEA,OACEnE,EAAAA,KAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAF,EAAAA,IAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,kBAE3F,EAEEK,EAKAH,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAF,MAAC,KAAE,UAAU,4BAA6B,SAAAK,EAAK,cAAgBA,EAAK,YAAY,EAChFL,EAAAA,IAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,YAAA,CAAU,CAAA,EACjE,EAEC8D,EAAa,SAAW,EACvB9D,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,oBAAA,CAAkB,EAE5DA,MAAC,OAAI,UAAU,uBACZ,SAAA8D,EAAa,IAAKI,GACjBhE,EAAAA,KAAC,OAAA,CAEC,UAAU,0GAEV,SAAA,CAAAF,EAAAA,IAACsE,EAAA,CAAS,KAAMJ,EAAE,IAAA,CAAM,EACxBlE,EAAAA,IAAC,OAAA,CAAK,UAAU,gCAAiC,WAAE,KAAK,EACxDA,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMoE,EAAaF,EAAE,IAAI,EAClC,UAAU,sEACV,MAAO,UAAUA,EAAE,IAAI,GACxB,SAAA,GAAA,CAAA,CAED,CAAA,EAXKA,EAAE,IAAA,CAaV,EACH,EAGDH,EAAU,OAAS,GAClB7D,EAAAA,KAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAF,EAAAA,IAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,WAE3F,EACAE,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CACC,MAAOuD,EACP,SAAWtD,GAAMuD,EAAWvD,EAAE,OAAO,KAAK,EAC1C,UAAU,kCAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,GAAG,SAAA,mBAAgB,EAChC+D,EAAU,IAAKG,GACdlE,EAAAA,IAAC,UAAe,MAAOkE,EAAI,SAAAA,CAAA,EAAdA,CAAgB,CAC9B,CAAA,CAAA,CAAA,EAEHhE,EAAAA,KAAC,SAAA,CACC,MAAOyD,EACP,SAAWxD,GAAMyD,EAAWzD,EAAE,OAAO,KAAmB,EACxD,UAAU,sBAEV,SAAA,CAAAH,EAAAA,IAAC,SAAA,CAAO,MAAM,SAAS,SAAA,SAAM,EAC7BA,EAAAA,IAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,QAAK,EAC3BA,EAAAA,IAAC,SAAA,CAAO,MAAM,aAAa,SAAA,YAAA,CAAU,CAAA,CAAA,CAAA,EAEvCA,EAAAA,IAAC,SAAA,CACC,QAASmE,EACT,SAAU,CAACV,GAAWJ,EAAQ,UAC9B,UAAU,sBAET,SAAAA,EAAQ,UAAY,MAAQ,KAAA,CAAA,CAC/B,EACF,EACCA,EAAQ,OACPrD,MAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAqD,EAAQ,MAAgB,OAAA,CAAQ,CAAA,CAAA,CAExF,CAAA,CAAA,CAEJ,EAvEArD,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,sCAAA,CAE1C,CAqEA,EAEJ,CAEJ,CChHO,SAAS0G,GAAiB,CAAE,OAAAC,EAAQ,SAAAC,GAAuE,CAChH,MAAMC,EAAM,CAACC,EAAiBC,EAAuBC,IACnD9G,EAAAA,KAAC,SAAA,CACC,QAAS,IAAM0G,EAASE,CAAG,EAC3B,UAAW,8EACTH,IAAWG,EACP,uCACA,qEACN,GAEC,SAAA,CAAAC,EACAC,CAAA,CAAA,CAAA,EAIL,OACE9G,EAAAA,KAAC,MAAA,CAAI,UAAU,sDACZ,SAAA,CAAA2G,EAAI,QAAS7G,EAAAA,IAACiH,GAAA,CAAK,UAAU,aAAA,CAAc,EAAI,eAAe,EAC9DJ,EAAI,mBAAoB7G,MAACkH,IAAI,UAAU,aAAA,CAAc,EAAI,kBAAkB,CAAA,EAC9E,CAEJ,CCLA,MAAMC,GAAgB,CACpB,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,WAAY,MAAO,UAAA,EAC5B,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEM3C,GAAoC,CACxC,OAAQ,oBACR,SAAU,mBACV,UAAW,iBACb,EAEO,SAAS4C,IAAY,CAC1B,KAAM,CAACC,EAAcC,CAAe,EAAIC,GAAA,EAElCC,EADWH,EAAa,IAAI,KAAK,IACI,mBAAqB,mBAAqB,QAE/EI,EAAmBX,GAAoB,CAEzCQ,EADER,IAAQ,QACM,CAAA,EAEA,CAAE,IAAAA,EAFA,CAItB,EAEA,cACG,MAAA,CACC,SAAA,CAAA9G,EAAAA,IAACoG,EAAA,CACC,MAAM,WACN,SAAS,8BACT,QAASpG,EAAAA,IAAC0G,GAAA,CAAiB,OAAQc,EAAW,SAAUC,CAAA,CAAiB,CAAA,CAAA,EAE1ED,IAAc,QAAUxH,EAAAA,IAAC0H,GAAA,CAAA,CAAkB,EAAK1H,EAAAA,IAACyE,GAAA,CAAS,SAAQ,EAAA,CAAC,CAAA,EACtE,CAEJ,CAEA,SAASiD,IAAoB,CAC3B,KAAM,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAjD,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,EAAA,CAAG,CACvB,EACKiD,EAAaC,EAAA,EAEb,CAAC/C,EAAYC,CAAa,EAAIxF,EAAAA,SAAS,EAAK,EAC5C,CAACuI,EAAaC,CAAc,EAAIxI,EAAAA,SAA8B,IAAI,EAClE,CAACyI,EAAcC,CAAe,EAAI1I,EAAAA,SAA8B,IAAI,EACpE,CAAC6F,EAAeC,CAAgB,EAAI9F,EAAAA,SAA8B,IAAI,EAEtE,CAAE,KAAA8B,EAAM,UAAAiE,CAAA,EAAc4C,EAAS,CACnC,OAAQR,EAAQ,QAAU,OAC1B,MAAOhD,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKc,GAAQnE,GAAA,YAAAA,EAAM,QAAS,EACvB8G,GAAQ9G,GAAA,YAAAA,EAAM,QAAS,CAAA,EAEvB+G,EAAarE,EAAAA,QAAQ,IACpBiE,EACEG,EAAM,KAAM,GAAM,EAAE,KAAOH,EAAa,EAAE,GAAKA,EAD5B,KAEzB,CAACG,EAAOH,CAAY,CAAC,EAElBpC,EAAkC,CACtC,CACE,IAAK,eACL,MAAO,OACP,OAASC,GACP5F,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAF,EAAAA,IAAC,OAAA,CACC,UAAW,iCAAiCwE,GAAUsB,EAAI,MAAM,GAAK,mBAAmB,GACxF,MAAOA,EAAI,MAAA,CAAA,SAEZ,MAAA,CACC,SAAA,CAAA9F,MAAC,KAAE,UAAU,4BACV,SAAA8F,EAAI,cAAgBA,EAAI,YAC3B,EACCA,EAAI,OACH9F,EAAAA,IAAC,KAAE,UAAU,6BAA8B,WAAI,KAAA,CAAM,CAAA,CAAA,CAEzD,CAAA,CAAA,CACF,CAAA,EAGJ,CACE,IAAK,QACL,MAAO,QACP,OAAS8F,GACP9F,EAAAA,IAAC,OAAI,UAAU,uBACX,UAAA8F,EAAI,OAAS,CAAA,GAAI,IAAK5B,SACrBI,EAAA,CAAsB,KAAMJ,EAAE,IAAA,EAAhBA,EAAE,IAAoB,CACtC,CAAA,CACH,CAAA,EAGJ,CACE,IAAK,aACL,MAAO,UACP,OAAS4B,SAASC,EAAA,CAAc,KAAMD,EAAI,WAAY,EACtD,UAAW,MAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACP5F,EAAAA,KAAC8F,EAAA,CACC,SAAA,CAAAhG,EAAAA,IAACiG,EAAA,CACC,KAAMC,EACN,MAAM,YACN,QAAS,IAAM8B,EAAelC,CAAG,CAAA,CAAA,EAEnC9F,EAAAA,IAACiG,EAAA,CACC,KAAMnD,EACN,MAAM,cACN,QAAS,IAAMwC,EAAiBQ,CAAG,EACnC,WAAW,4CAAA,CAAA,CACb,EACF,EAEF,UAAW,iBAAA,CACb,EAGIK,EAAe,IAAM,CACpBd,GACLwC,EAAW,OAAOxC,EAAc,GAAI,CAClC,UAAW,IAAMC,EAAiB,IAAI,CAAA,CACvC,CACH,EAEA,cACG,MAAA,CACC,SAAA,CAAAtF,EAAAA,IAAC,MAAA,CAAI,UAAU,wBACb,SAAAA,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMgF,EAAc,EAAI,EAAG,UAAU,sBAAsB,oBAE5E,EACF,QAECsD,EAAA,CACC,SAAAtI,EAAAA,IAACuI,EAAA,CACC,MAAM,SACN,MAAOZ,EAAQ,OACf,SAAWa,GAAMZ,EAAU,SAAUY,CAAC,EACtC,QAASrB,EAAA,CAAA,EAEb,EAEAjH,EAAAA,KAAC,MAAA,CAAI,UAAU,kDAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,kBACb,SAAA,CAAAF,EAAAA,IAACqG,EAAA,CACC,QAAAR,EACA,KAAMuC,EACN,MAAQtC,GAAQA,EAAI,GACpB,UAAAP,EACA,aAAa,iBACb,WAAaO,GAAQoC,EAAgBpC,CAAG,EACxC,cAAcuC,GAAA,YAAAA,EAAY,KAAM,IAAA,CAAA,EAGlCrI,EAAAA,IAACsG,EAAA,CACC,KAAM3B,EAAW,KACjB,WAAYA,EAAW,WAAWc,CAAK,EACvC,aAAcd,EAAW,QACzB,MAAAc,EACA,SAAUd,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,EAGA3E,EAAAA,IAACuG,GAAA,CAAU,KAAM8B,CAAA,CAAY,CAAA,EAC/B,EAEArI,MAACf,IAAgB,KAAM8F,EAAY,QAAS,IAAMC,EAAc,EAAK,EAAG,EAExEhF,EAAAA,IAACI,GAAA,CACC,KAAM,CAAC,CAAC2H,EACR,QAAS,IAAMC,EAAe,IAAI,EAClC,KAAMD,CAAA,CAAA,EAGR/H,EAAAA,IAACgD,EAAA,CACC,KAAM,CAAC,CAACqC,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWa,EACX,MAAM,cACN,YACEjG,EAAAA,KAAA+C,WAAA,CAAE,SAAA,CAAA,SACO,UACN,OAAA,CAAK,UAAU,gCACb,UAAAoC,GAAA,YAAAA,EAAe,gBAAgBA,GAAA,YAAAA,EAAe,aACjD,EAAO,iCAAA,EAET,EAEF,UAAWwC,EAAW,UACtB,MAAOA,EAAW,KAAA,CAAA,CACpB,EACF,CAEJ"}
1
+ {"version":3,"file":"index-P9huxx3-.js","sources":["../../src/pages/admin/users/CreateUserModal.tsx","../../src/pages/admin/users/EditUserModal.tsx","../../src/pages/admin/bots/CreateBotModal.tsx","../../src/pages/admin/bots/EditBotModal.tsx","../../src/pages/admin/bots/BotDetailPanel.tsx","../../src/pages/admin/bots/BotsPage.tsx","../../src/pages/admin/users/RolePanel.tsx","../../src/pages/admin/users/AccountTabToggle.tsx","../../src/pages/admin/users/UsersPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateUserModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createUser = useCreateUser();\n const [form, setForm] = useState({\n external_id: '',\n email: '',\n display_name: '',\n password: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ external_id: '', email: '', display_name: '', password: '' });\n }\n\n const handleCreate = () => {\n if (!form.external_id.trim()) return;\n createUser.mutate(\n {\n external_id: form.external_id.trim(),\n email: form.email.trim() || undefined,\n display_name: form.display_name.trim() || undefined,\n password: form.password || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create User\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n External ID (required)\n </label>\n <input\n type=\"text\"\n value={form.external_id}\n onChange={(e) => set('external_id', e.target.value)}\n placeholder=\"e.g., john.doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"John Doe\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => set('email', e.target.value)}\n placeholder=\"john@example.com\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Password\n </label>\n <input\n type=\"password\"\n value={form.password}\n onChange={(e) => set('password', e.target.value)}\n placeholder=\"Leave blank for no password\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createUser.error && (\n <p className=\"text-xs text-status-error\">{(createUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.external_id.trim() || createUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {createUser.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateUser } from '../../../api/users';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { LTUserRecord } from '../../../api/types';\n\nexport function EditUserModal({\n open,\n onClose,\n user,\n}: {\n open: boolean;\n onClose: () => void;\n user: LTUserRecord | null;\n}) {\n const updateUser = useUpdateUser();\n const [form, setForm] = useState({\n display_name: '',\n email: '',\n status: 'active' as string,\n });\n\n const [prevUser, setPrevUser] = useState(user);\n if (user !== prevUser) {\n setPrevUser(user);\n if (user) {\n setForm({\n display_name: user.display_name ?? '',\n email: user.email ?? '',\n status: user.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!user) return;\n updateUser.mutate(\n {\n id: user.id,\n display_name: form.display_name.trim() || undefined,\n email: form.email.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${user?.display_name || user?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Email\n </label>\n <input\n type=\"text\"\n value={form.email}\n onChange={(e) => setForm((f) => ({ ...f, email: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateUser.error && (\n <p className=\"text-xs text-status-error\">{(updateUser.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateUser.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateUser.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useCreateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateBotModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createBot = useCreateBot();\n const [form, setForm] = useState({\n name: '',\n display_name: '',\n description: '',\n });\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) setForm({ name: '', display_name: '', description: '' });\n }\n\n const handleCreate = () => {\n if (!form.name.trim()) return;\n createBot.mutate(\n {\n name: form.name.trim(),\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n },\n { onSuccess: onClose },\n );\n };\n\n const set = (field: string, value: string) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Bot\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Name (required)\n </label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value.replace(/\\s+/g, '-').toLowerCase())}\n placeholder=\"e.g., ci-bot\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => set('display_name', e.target.value)}\n placeholder=\"CI Bot\"\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Runs scheduled workflows\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {createBot.error && (\n <p className=\"text-xs text-status-error\">{(createBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!form.name.trim() || createBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {createBot.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState } from 'react';\nimport { useUpdateBot } from '../../../api/bots';\nimport { Modal } from '../../../components/common/modal/Modal';\nimport type { BotRecord } from '../../../api/types';\n\nexport function EditBotModal({\n open,\n onClose,\n bot,\n}: {\n open: boolean;\n onClose: () => void;\n bot: BotRecord | null;\n}) {\n const updateBot = useUpdateBot();\n const [form, setForm] = useState({\n display_name: '',\n description: '',\n status: 'active' as string,\n });\n\n const [prevBot, setPrevBot] = useState(bot);\n if (bot !== prevBot) {\n setPrevBot(bot);\n if (bot) {\n setForm({\n display_name: bot.display_name ?? '',\n description: bot.description ?? '',\n status: bot.status,\n });\n }\n }\n\n const handleSave = () => {\n if (!bot) return;\n updateBot.mutate(\n {\n id: bot.id,\n display_name: form.display_name.trim() || undefined,\n description: form.description.trim() || undefined,\n status: form.status,\n },\n { onSuccess: onClose },\n );\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={`Edit — ${bot?.display_name || bot?.external_id || ''}`}\n >\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Display Name\n </label>\n <input\n type=\"text\"\n value={form.display_name}\n onChange={(e) => setForm((f) => ({ ...f, display_name: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Description\n </label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => setForm((f) => ({ ...f, description: e.target.value }))}\n className=\"input text-xs w-full\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Status\n </label>\n <select\n value={form.status}\n onChange={(e) => setForm((f) => ({ ...f, status: e.target.value }))}\n className=\"select text-xs w-full\"\n >\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"suspended\">Suspended</option>\n </select>\n </div>\n\n {updateBot.error && (\n <p className=\"text-xs text-status-error\">{(updateBot.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={updateBot.isPending}\n className=\"btn-primary text-xs\"\n >\n {updateBot.isPending ? 'Saving...' : 'Save'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Trash2, Key, Plus, Copy, Check } from 'lucide-react';\nimport {\n useBotApiKeys,\n useCreateBotApiKey,\n useRevokeBotApiKey,\n useAddBotRole,\n useRemoveBotRole,\n} from '../../../api/bots';\nimport { useRoles } from '../../../api/roles';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport type { BotRecord, BotApiKeyRecord, LTRoleType } from '../../../api/types';\n\nfunction ApiKeysSection({ botId }: { botId: string }) {\n const { data } = useBotApiKeys(botId);\n const createKey = useCreateBotApiKey();\n const revokeKey = useRevokeBotApiKey();\n\n const [newKeyName, setNewKeyName] = useState('');\n const [generatedKey, setGeneratedKey] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n const [confirmRevoke, setConfirmRevoke] = useState<BotApiKeyRecord | null>(null);\n\n const keys = data?.keys ?? [];\n\n const handleGenerate = () => {\n if (!newKeyName.trim()) return;\n createKey.mutate(\n { botId, name: newKeyName.trim(), scopes: ['mcp:tool:call'] },\n {\n onSuccess: (result: any) => {\n setGeneratedKey(result.rawKey);\n setNewKeyName('');\n },\n },\n );\n };\n\n const handleCopy = () => {\n if (!generatedKey) return;\n navigator.clipboard.writeText(generatedKey);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleRevoke = () => {\n if (!confirmRevoke) return;\n revokeKey.mutate(\n { botId, keyId: confirmRevoke.id },\n { onSuccess: () => setConfirmRevoke(null) },\n );\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n API Keys\n </p>\n\n {generatedKey && (\n <div className=\"mb-3 p-3 bg-status-success/10 border border-status-success/30 rounded-md\">\n <p className=\"text-[10px] font-semibold text-status-success mb-1\">\n Key generated — copy now, it won't be shown again\n </p>\n <div className=\"flex items-center gap-2\">\n <code className=\"text-[11px] font-mono text-text-primary bg-surface-sunken px-2 py-1 rounded flex-1 overflow-hidden text-ellipsis\">\n {generatedKey}\n </code>\n <button\n onClick={handleCopy}\n className=\"text-text-tertiary hover:text-text-primary shrink-0\"\n title=\"Copy to clipboard\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Copy className=\"w-3.5 h-3.5\" />}\n </button>\n </div>\n </div>\n )}\n\n {keys.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No API keys.</p>\n ) : (\n <div className=\"space-y-1.5 mb-3\">\n {keys.map((k) => (\n <div\n key={k.id}\n className=\"group/key flex items-center justify-between px-2.5 py-1.5 bg-surface-sunken rounded text-xs\"\n >\n <div className=\"flex items-center gap-2\">\n <Key className=\"w-3 h-3 text-text-tertiary\" />\n <span className=\"text-text-primary font-mono\">{k.name}</span>\n {k.last_used_at && (\n <span className=\"text-[10px] text-text-tertiary\">\n used <TimeAgo date={k.last_used_at} />\n </span>\n )}\n </div>\n <button\n onClick={() => setConfirmRevoke(k)}\n className=\"opacity-0 group-hover/key:opacity-100 transition-opacity text-text-tertiary hover:text-status-error\"\n title=\"Revoke key\"\n >\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={newKeyName}\n onChange={(e) => setNewKeyName(e.target.value)}\n placeholder=\"Key name...\"\n className=\"input text-xs flex-1 font-mono\"\n />\n <button\n onClick={handleGenerate}\n disabled={!newKeyName.trim() || createKey.isPending}\n className=\"btn-primary text-xs inline-flex items-center gap-1\"\n >\n <Plus className=\"w-3 h-3\" />\n {createKey.isPending ? '...' : 'Generate'}\n </button>\n </div>\n {createKey.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(createKey.error as Error).message}</p>\n )}\n\n <ConfirmDeleteModal\n open={!!confirmRevoke}\n onClose={() => setConfirmRevoke(null)}\n onConfirm={handleRevoke}\n title=\"Revoke API Key\"\n description={\n <>\n Revoke API key{' '}\n <span className=\"font-medium text-text-primary font-mono\">\n {confirmRevoke?.name}\n </span>\n ? This bot will no longer be able to authenticate with this key.\n </>\n }\n isPending={revokeKey.isPending}\n error={revokeKey.error as Error | null}\n />\n </div>\n );\n}\n\nfunction RolesSection({ bot }: { bot: BotRecord }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddBotRole();\n const removeRole = useRemoveBotRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = bot.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!newRole.trim()) return;\n addRole.mutate(\n { botId: bot.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n removeRole.mutate({ botId: bot.id, role });\n };\n\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3\">\n Roles\n </p>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary mb-3\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2 mb-3\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n )}\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n );\n}\n\nexport function BotDetailPanel({ bot }: { bot: BotRecord | null }) {\n if (!bot) {\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-xs text-text-tertiary\">\n Select a bot to manage its API keys and roles.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px] space-y-6\">\n <div>\n <p className=\"text-sm text-text-primary\">{bot.display_name || bot.external_id}</p>\n {bot.description && (\n <p className=\"text-xs text-text-tertiary mt-0.5\">{bot.description}</p>\n )}\n </div>\n\n <ApiKeysSection botId={bot.id} />\n <RolesSection bot={bot} />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useBots, useDeleteBot } from '../../../api/bots';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport type { BotRecord } from '../../../api/types';\nimport { CreateBotModal } from './CreateBotModal';\nimport { EditBotModal } from './EditBotModal';\nimport { BotDetailPanel } from './BotDetailPanel';\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function BotsPage({ embedded = false }: { embedded?: boolean }) {\n const { pagination } = useFilterParams({ filters: {} });\n const deleteBot = useDeleteBot();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingBot, setEditingBot] = useState<BotRecord | null>(null);\n const [selectedBot, setSelectedBot] = useState<BotRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<BotRecord | null>(null);\n\n const { data, isLoading } = useBots({\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const bots = data?.bots ?? [];\n\n const activeBot = useMemo(() => {\n if (!selectedBot) return null;\n return bots.find((b) => b.id === selectedBot.id) ?? selectedBot;\n }, [bots, selectedBot]);\n\n const columns: Column<BotRecord>[] = [\n {\n key: 'display_name',\n label: 'Bot',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.description && (\n <p className=\"text-xs text-text-tertiary\">{row.description}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit bot\"\n onClick={() => setEditingBot(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete bot\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteBot.mutate(confirmDelete.id, {\n onSuccess: () => {\n setConfirmDelete(null);\n if (selectedBot?.id === confirmDelete.id) setSelectedBot(null);\n },\n });\n };\n\n return (\n <div>\n {embedded ? (\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n </div>\n ) : (\n <PageHeader\n title=\"Service Accounts\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Bot\n </button>\n }\n />\n )}\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_360px] gap-6\">\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={bots}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No bots yet\"\n onRowClick={(row) => setSelectedBot(row)}\n activeRowKey={activeBot?.id ?? null}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n <BotDetailPanel bot={activeBot} />\n </div>\n\n <CreateBotModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditBotModal\n open={!!editingBot}\n onClose={() => setEditingBot(null)}\n bot={editingBot}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Bot\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This will also revoke all API keys. This action cannot be undone.\n </>\n }\n isPending={deleteBot.isPending}\n error={deleteBot.error as Error | null}\n />\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useRoles } from '../../../api/roles';\nimport { useAddUserRole, useRemoveUserRole } from '../../../api/users';\nimport type { LTUserRecord, LTRoleType } from '../../../api/types';\nimport { RolePill } from '../../../components/common/display/RolePill';\n\nexport function RolePanel({ user }: { user: LTUserRecord | null }) {\n const { data: allRolesData } = useRoles();\n const addRole = useAddUserRole();\n const removeRole = useRemoveUserRole();\n const [newRole, setNewRole] = useState('');\n const [newType, setNewType] = useState<LTRoleType>('member');\n\n const allRoles = allRolesData?.roles ?? [];\n const currentRoles = user?.roles ?? [];\n\n const available = useMemo(() => {\n const assigned = new Set(currentRoles.map((r) => r.role));\n return allRoles.filter((r) => !assigned.has(r));\n }, [allRoles, currentRoles]);\n\n const handleAdd = () => {\n if (!user || !newRole.trim()) return;\n addRole.mutate(\n { userId: user.id, role: newRole.trim(), type: newType },\n { onSuccess: () => { setNewRole(''); setNewType('member'); } },\n );\n };\n\n const handleRemove = (role: string) => {\n if (!user) return;\n removeRole.mutate({ userId: user.id, role });\n };\n\n return (\n <div className=\"border-l border-surface-border pl-6 pt-4 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Role Membership\n </p>\n\n {!user ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a user to manage their roles.\n </p>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-primary\">{user.display_name || user.external_id}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Member of:</p>\n </div>\n\n {currentRoles.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">No roles assigned.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {currentRoles.map((r) => (\n <span\n key={r.role}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary\"\n >\n <RolePill role={r.role} />\n <span className=\"text-[9px] text-text-tertiary\">{r.type}</span>\n <button\n onClick={() => handleRemove(r.role)}\n className=\"text-text-tertiary hover:text-status-error transition-colors ml-0.5\"\n title={`Remove ${r.role}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Role\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newRole}\n onChange={(e) => setNewRole(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <select\n value={newType}\n onChange={(e) => setNewType(e.target.value as LTRoleType)}\n className=\"select text-xs w-24\"\n >\n <option value=\"member\">member</option>\n <option value=\"admin\">admin</option>\n <option value=\"superadmin\">superadmin</option>\n </select>\n <button\n onClick={handleAdd}\n disabled={!newRole || addRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {addRole.isPending ? '...' : 'Add'}\n </button>\n </div>\n {addRole.error && (\n <p className=\"text-[10px] text-status-error mt-1\">{(addRole.error as Error).message}</p>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { User, Bot } from 'lucide-react';\n\nexport type AccountTab = 'users' | 'service-accounts';\n\nexport function AccountTabToggle({ active, onChange }: { active: AccountTab; onChange: (t: AccountTab) => void }) {\n const btn = (tab: AccountTab, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(tab)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n active === tab\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('users', <User className=\"w-3.5 h-3.5\" />, 'User Accounts')}\n {btn('service-accounts', <Bot className=\"w-3.5 h-3.5\" />, 'Service Accounts')}\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { useUsers, useDeleteUser } from '../../../api/users';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport type { LTUserRecord } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { CreateUserModal } from './CreateUserModal';\nimport { EditUserModal } from './EditUserModal';\nimport { BotsPage } from '../bots/BotsPage';\nimport { RolePanel } from './RolePanel';\nimport { AccountTabToggle, type AccountTab } from './AccountTabToggle';\n\nconst statusOptions = [\n { value: 'active', label: 'Active' },\n { value: 'inactive', label: 'Inactive' },\n { value: 'suspended', label: 'Suspended' },\n];\n\nconst statusDot: Record<string, string> = {\n active: 'bg-status-success',\n inactive: 'bg-text-tertiary',\n suspended: 'bg-status-error',\n};\n\nexport function UsersPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const tabParam = searchParams.get('tab');\n const activeTab: AccountTab = tabParam === 'service-accounts' ? 'service-accounts' : 'users';\n\n const handleTabChange = (tab: AccountTab) => {\n if (tab === 'users') {\n setSearchParams({});\n } else {\n setSearchParams({ tab });\n }\n };\n\n return (\n <div>\n <PageHeader\n title=\"Accounts\"\n docsHash=\"#docs:dashboard.md:accounts\"\n actions={<AccountTabToggle active={activeTab} onChange={handleTabChange} />}\n />\n {activeTab === 'users' ? <UserAccountsPanel /> : <BotsPage embedded />}\n </div>\n );\n}\n\nfunction UserAccountsPanel() {\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '' },\n });\n const deleteUser = useDeleteUser();\n\n const [showCreate, setShowCreate] = useState(false);\n const [editingUser, setEditingUser] = useState<LTUserRecord | null>(null);\n const [selectedUser, setSelectedUser] = useState<LTUserRecord | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<LTUserRecord | null>(null);\n\n const { data, isLoading } = useUsers({\n status: filters.status || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n const users = data?.users ?? [];\n\n const activeUser = useMemo(() => {\n if (!selectedUser) return null;\n return users.find((u) => u.id === selectedUser.id) ?? selectedUser;\n }, [users, selectedUser]);\n\n const columns: Column<LTUserRecord>[] = [\n {\n key: 'display_name',\n label: 'User',\n render: (row) => (\n <div className=\"flex items-center gap-2.5\">\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${statusDot[row.status] ?? 'bg-status-pending'}`}\n title={row.status}\n />\n <div>\n <p className=\"text-sm text-text-primary\">\n {row.display_name || row.external_id}\n </p>\n {row.email && (\n <p className=\"text-xs text-text-tertiary\">{row.email}</p>\n )}\n </div>\n </div>\n ),\n },\n {\n key: 'roles',\n label: 'Roles',\n render: (row) => (\n <div className=\"flex gap-1 flex-wrap\">\n {(row.roles ?? []).map((r) => (\n <RolePill key={r.role} role={r.role} />\n ))}\n </div>\n ),\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Pencil}\n title=\"Edit user\"\n onClick={() => setEditingUser(row)}\n />\n <RowAction\n icon={Trash2}\n title=\"Delete user\"\n onClick={() => setConfirmDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteUser.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <div className=\"flex justify-end mb-4\">\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add User\n </button>\n </div>\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n </FilterBar>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n {/* Left — users table */}\n <div className=\"overflow-x-clip\">\n <DataTable\n columns={columns}\n data={users}\n keyFn={(row) => row.id}\n isLoading={isLoading}\n emptyMessage=\"No users found\"\n onRowClick={(row) => setSelectedUser(row)}\n activeRowKey={activeUser?.id ?? null}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Right — role management panel */}\n <RolePanel user={activeUser} />\n </div>\n\n <CreateUserModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <EditUserModal\n open={!!editingUser}\n onClose={() => setEditingUser(null)}\n user={editingUser}\n />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete User\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">\n {confirmDelete?.display_name || confirmDelete?.external_id}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteUser.isPending}\n error={deleteUser.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateUserModal","open","onClose","createUser","useCreateUser","form","setForm","useState","prevOpen","setPrevOpen","handleCreate","set","field","value","f","jsxDEV","Modal","e","EditUserModal","user","updateUser","useUpdateUser","prevUser","setPrevUser","handleSave","CreateBotModal","createBot","useCreateBot","EditBotModal","bot","updateBot","useUpdateBot","prevBot","setPrevBot","ApiKeysSection","botId","data","useBotApiKeys","createKey","useCreateBotApiKey","revokeKey","useRevokeBotApiKey","newKeyName","setNewKeyName","generatedKey","setGeneratedKey","copied","setCopied","confirmRevoke","setConfirmRevoke","keys","handleGenerate","result","handleCopy","handleRevoke","Check","Copy","k","Key","TimeAgo","Trash2","Plus","ConfirmDeleteModal","Fragment","RolesSection","allRolesData","useRoles","addRole","useAddBotRole","removeRole","useRemoveBotRole","newRole","setNewRole","newType","setNewType","allRoles","currentRoles","available","useMemo","assigned","r","handleAdd","handleRemove","role","RolePill","BotDetailPanel","statusDot","BotsPage","embedded","pagination","useFilterParams","deleteBot","useDeleteBot","showCreate","setShowCreate","editingBot","setEditingBot","selectedBot","setSelectedBot","confirmDelete","setConfirmDelete","isLoading","useBots","total","bots","activeBot","b","columns","row","TimestampCell","RowActionGroup","RowAction","Pencil","handleDelete","PageHeader","DataTable","StickyPagination","RolePanel","useAddUserRole","useRemoveUserRole","AccountTabToggle","active","onChange","btn","tab","icon","label","User","Bot","statusOptions","UsersPage","searchParams","setSearchParams","useSearchParams","activeTab","handleTabChange","UserAccountsPanel","filters","setFilter","deleteUser","useDeleteUser","editingUser","setEditingUser","selectedUser","setSelectedUser","useUsers","users","activeUser","u","FilterBar","FilterSelect","v"],"mappings":"w+BAIO,SAASA,GAAgB,CAC9B,KAAAC,EACA,QAAAC,CACF,EAGG,CACD,MAAMC,EAAaC,EAAA,EACb,CAACC,EAAMC,CAAO,EAAIC,WAAS,CAC/B,YAAa,GACb,MAAO,GACP,aAAc,GACd,SAAU,EAAA,CACX,EAEK,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASN,CAAI,EACzCA,IAASO,IACXC,EAAYR,CAAI,EACZA,GAAMK,EAAQ,CAAE,YAAa,GAAI,MAAO,GAAI,aAAc,GAAI,SAAU,EAAA,CAAI,GAGlF,MAAMI,EAAe,IAAM,CACpBL,EAAK,YAAY,QACtBF,EAAW,OACT,CACE,YAAaE,EAAK,YAAY,KAAA,EAC9B,MAAOA,EAAK,MAAM,KAAA,GAAU,OAC5B,aAAcA,EAAK,aAAa,KAAA,GAAU,OAC1C,SAAUA,EAAK,UAAY,MAAA,EAE7B,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEMS,EAAM,CAACC,EAAeC,IAC1BP,EAASQ,IAAO,CAAE,GAAGA,EAAG,CAACF,CAAK,EAAGC,GAAQ,EAE3C,OACEE,EAAAA,OAACC,GAAM,KAAAf,EAAY,QAAAC,EAAkB,MAAM,cACzC,SAAAa,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,wBAAA,EAArG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWY,GAAMN,EAAI,cAAeM,EAAE,OAAO,KAAK,EAClD,YAAY,iBACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAAA,EAArG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWY,GAAMN,EAAI,eAAgBM,EAAE,OAAO,KAAK,EACnD,YAAY,WACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,OAAA,EAArG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,MACZ,SAAWY,GAAMN,EAAI,QAASM,EAAE,OAAO,KAAK,EAC5C,YAAY,mBACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,UAAA,EAArG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,WACL,MAAOV,EAAK,SACZ,SAAWY,GAAMN,EAAI,WAAYM,EAAE,OAAO,KAAK,EAC/C,YAAY,8BACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,EAECd,EAAW,OACVY,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAZ,EAAW,MAAgB,OAAA,EAAtE,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8E,EAGhFY,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,UAA5D,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAa,EAAAA,OAAC,SAAA,CACC,QAASL,EACT,SAAU,CAACL,EAAK,YAAY,KAAA,GAAUF,EAAW,UACjD,UAAU,sBAET,SAAAA,EAAW,UAAY,cAAgB,QAAA,EAL1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,CAAA,CAAA,EAjEF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAkEA,CAAA,EAnEF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAoEA,CAEJ,CC3GO,SAASe,GAAc,CAC5B,KAAAjB,EACA,QAAAC,EACA,KAAAiB,CACF,EAIG,CACD,MAAMC,EAAaC,EAAA,EACb,CAAChB,EAAMC,CAAO,EAAIC,WAAS,CAC/B,aAAc,GACd,MAAO,GACP,OAAQ,QAAA,CACT,EAEK,CAACe,EAAUC,CAAW,EAAIhB,EAAAA,SAASY,CAAI,EACzCA,IAASG,IACXC,EAAYJ,CAAI,EACZA,GACFb,EAAQ,CACN,aAAca,EAAK,cAAgB,GACnC,MAAOA,EAAK,OAAS,GACrB,OAAQA,EAAK,MAAA,CACd,GAIL,MAAMK,EAAa,IAAM,CAClBL,GACLC,EAAW,OACT,CACE,GAAID,EAAK,GACT,aAAcd,EAAK,aAAa,KAAA,GAAU,OAC1C,MAAOA,EAAK,MAAM,KAAA,GAAU,OAC5B,OAAQA,EAAK,MAAA,EAEf,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEA,OACEa,EAAAA,OAACC,EAAA,CACC,KAAAf,EACA,QAAAC,EACA,MAAO,WAAUiB,GAAA,YAAAA,EAAM,gBAAgBA,GAAA,YAAAA,EAAM,cAAe,EAAE,GAE9D,SAAAJ,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,aAAcG,EAAE,OAAO,OAAQ,EACxE,UAAU,sBAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,OAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,MACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,MAAOG,EAAE,OAAO,OAAQ,EACjE,UAAU,sBAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,QAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,SAAA,CACC,MAAOV,EAAK,OACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,OAAQG,EAAE,OAAO,OAAQ,EAClE,UAAU,wBAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,SAAS,SAAA,QAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6B,EAC7BA,SAAC,SAAA,CAAO,MAAM,WAAW,SAAA,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiC,EACjCA,SAAC,SAAA,CAAO,MAAM,YAAY,SAAA,WAAA,EAA1B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmC,CAAA,CAAA,EAPrC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAQA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAECK,EAAW,OACVL,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAK,EAAW,MAAgB,OAAA,EAAtE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8E,EAGhFL,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,UAA5D,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAa,EAAAA,OAAC,SAAA,CACC,QAASS,EACT,SAAUJ,EAAW,UACrB,UAAU,sBAET,SAAAA,EAAW,UAAY,YAAc,MAAA,EALxC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,CAAA,CAAA,EArDF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAsDA,CAAA,EA3DF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CA8DJ,CCzGO,SAASK,GAAe,CAC7B,KAAAxB,EACA,QAAAC,CACF,EAGG,CACD,MAAMwB,EAAYC,EAAA,EACZ,CAACtB,EAAMC,CAAO,EAAIC,WAAS,CAC/B,KAAM,GACN,aAAc,GACd,YAAa,EAAA,CACd,EAEK,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASN,CAAI,EACzCA,IAASO,IACXC,EAAYR,CAAI,EACZA,KAAc,CAAE,KAAM,GAAI,aAAc,GAAI,YAAa,GAAI,GAGnE,MAAMS,EAAe,IAAM,CACpBL,EAAK,KAAK,QACfqB,EAAU,OACR,CACE,KAAMrB,EAAK,KAAK,KAAA,EAChB,aAAcA,EAAK,aAAa,KAAA,GAAU,OAC1C,YAAaA,EAAK,YAAY,QAAU,MAAA,EAE1C,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEMS,EAAM,CAACC,EAAeC,IAC1BP,EAASQ,IAAO,CAAE,GAAGA,EAAG,CAACF,CAAK,EAAGC,GAAQ,EAE3C,OACEE,EAAAA,OAACC,GAAM,KAAAf,EAAY,QAAAC,EAAkB,MAAM,aACzC,SAAAa,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,iBAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,KACZ,SAAWY,GAAMN,EAAI,OAAQM,EAAE,OAAO,MAAM,QAAQ,OAAQ,GAAG,EAAE,aAAa,EAC9E,YAAY,eACZ,UAAU,gCAAA,EALZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWY,GAAMN,EAAI,eAAgBM,EAAE,OAAO,KAAK,EACnD,YAAY,SACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,aAAA,EAArG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWY,GAAMN,EAAI,cAAeM,EAAE,OAAO,KAAK,EAClD,YAAY,2BACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,EAECS,EAAU,OACTX,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAW,EAAU,MAAgB,OAAA,EAArE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6E,EAG/EX,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,UAA5D,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAa,EAAAA,OAAC,SAAA,CACC,QAASL,EACT,SAAU,CAACL,EAAK,KAAK,KAAA,GAAUqB,EAAU,UACzC,UAAU,sBAET,SAAAA,EAAU,UAAY,cAAgB,QAAA,EALzC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,CAAA,CAAA,EArDF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAsDA,CAAA,EAvDF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwDA,CAEJ,CC7FO,SAASE,GAAa,CAC3B,KAAA3B,EACA,QAAAC,EACA,IAAA2B,CACF,EAIG,CACD,MAAMC,EAAYC,EAAA,EACZ,CAAC1B,EAAMC,CAAO,EAAIC,WAAS,CAC/B,aAAc,GACd,YAAa,GACb,OAAQ,QAAA,CACT,EAEK,CAACyB,EAASC,CAAU,EAAI1B,EAAAA,SAASsB,CAAG,EACtCA,IAAQG,IACVC,EAAWJ,CAAG,EACVA,GACFvB,EAAQ,CACN,aAAcuB,EAAI,cAAgB,GAClC,YAAaA,EAAI,aAAe,GAChC,OAAQA,EAAI,MAAA,CACb,GAIL,MAAML,EAAa,IAAM,CAClBK,GACLC,EAAU,OACR,CACE,GAAID,EAAI,GACR,aAAcxB,EAAK,aAAa,KAAA,GAAU,OAC1C,YAAaA,EAAK,YAAY,KAAA,GAAU,OACxC,OAAQA,EAAK,MAAA,EAEf,CAAE,UAAWH,CAAA,CAAQ,CAEzB,EAEA,OACEa,EAAAA,OAACC,EAAA,CACC,KAAAf,EACA,QAAAC,EACA,MAAO,WAAU2B,GAAA,YAAAA,EAAK,gBAAgBA,GAAA,YAAAA,EAAK,cAAe,EAAE,GAE5D,SAAAd,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,cAAA,EAArG,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,aACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,aAAcG,EAAE,OAAO,OAAQ,EACxE,UAAU,sBAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,aAAA,EAArG,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOV,EAAK,YACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,YAAaG,EAAE,OAAO,OAAQ,EACvE,UAAU,sBAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,WACC,MAAA,CACC,SAAA,CAAAF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,QAAA,EAArG,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,SAAA,CACC,MAAOV,EAAK,OACZ,SAAWY,GAAMX,EAASQ,IAAO,CAAE,GAAGA,EAAG,OAAQG,EAAE,OAAO,OAAQ,EAClE,UAAU,wBAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,SAAS,SAAA,QAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6B,EAC7BA,SAAC,SAAA,CAAO,MAAM,WAAW,SAAA,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiC,EACjCA,SAAC,SAAA,CAAO,MAAM,YAAY,SAAA,WAAA,EAA1B,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmC,CAAA,CAAA,EAPrC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAQA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAECe,EAAU,OACTf,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAe,EAAU,MAAgB,OAAA,EAArE,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6E,EAG/Ef,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASb,EAAS,UAAU,wBAAwB,SAAA,UAA5D,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAa,EAAAA,OAAC,SAAA,CACC,QAASS,EACT,SAAUM,EAAU,UACpB,UAAU,sBAET,SAAAA,EAAU,UAAY,YAAc,MAAA,EALvC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,CAAA,CAAA,EArDF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAsDA,CAAA,EA3DF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CA8DJ,CC9FA,SAASI,GAAe,CAAE,MAAAC,GAA4B,CACpD,KAAM,CAAE,KAAAC,CAAA,EAASC,EAAcF,CAAK,EAC9BG,EAAYC,EAAA,EACZC,EAAYC,EAAA,EAEZ,CAACC,EAAYC,CAAa,EAAIpC,EAAAA,SAAS,EAAE,EACzC,CAACqC,EAAcC,CAAe,EAAItC,EAAAA,SAAwB,IAAI,EAC9D,CAACuC,EAAQC,CAAS,EAAIxC,EAAAA,SAAS,EAAK,EACpC,CAACyC,EAAeC,CAAgB,EAAI1C,EAAAA,SAAiC,IAAI,EAEzE2C,GAAOd,GAAA,YAAAA,EAAM,OAAQ,CAAA,EAErBe,EAAiB,IAAM,CACtBT,EAAW,QAChBJ,EAAU,OACR,CAAE,MAAAH,EAAO,KAAMO,EAAW,OAAQ,OAAQ,CAAC,eAAe,CAAA,EAC1D,CACE,UAAYU,GAAgB,CAC1BP,EAAgBO,EAAO,MAAM,EAC7BT,EAAc,EAAE,CAClB,CAAA,CACF,CAEJ,EAEMU,EAAa,IAAM,CAClBT,IACL,UAAU,UAAU,UAAUA,CAAY,EAC1CG,EAAU,EAAI,EACd,WAAW,IAAMA,EAAU,EAAK,EAAG,GAAI,EACzC,EAEMO,EAAe,IAAM,CACpBN,GACLR,EAAU,OACR,CAAE,MAAAL,EAAO,MAAOa,EAAc,EAAA,EAC9B,CAAE,UAAW,IAAMC,EAAiB,IAAI,CAAA,CAAE,CAE9C,EAEA,gBACG,MAAA,CACC,SAAA,CAAAlC,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,UAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAEC6B,GACC7B,EAAAA,OAAC,MAAA,CAAI,UAAU,2EACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,qDAAqD,SAAA,mDAAA,EAAlE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,mHACb,SAAA6B,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACA7B,EAAAA,OAAC,SAAA,CACC,QAASsC,EACT,UAAU,sDACV,MAAM,oBAEL,SAAAP,EAAS/B,EAAAA,OAACwC,GAAA,CAAM,UAAU,iCAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmD,EAAKxC,EAAAA,OAACyC,GAAA,CAAK,UAAU,aAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8B,CAAA,EALlG,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAWA,CAAA,CAAA,EAfF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgBA,EAGDN,EAAK,SAAW,WACd,IAAA,CAAE,UAAU,kCAAkC,SAAA,gBAA/C,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA2D,WAE1D,MAAA,CAAI,UAAU,mBACZ,SAAAA,EAAK,IAAKO,GACT1C,EAAAA,OAAC,MAAA,CAEC,UAAU,8FAEV,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC2C,GAAA,CAAI,UAAU,4BAAA,EAAf,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4C,EAC5C3C,SAAC,OAAA,CAAK,UAAU,8BAA+B,WAAE,IAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,EACrD0C,EAAE,cACD1C,SAAC,OAAA,CAAK,UAAU,iCAAiC,SAAA,CAAA,QAC1CA,EAAAA,OAAC4C,EAAA,CAAQ,KAAMF,EAAE,YAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+B,CAAA,CAAA,EADtC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EANJ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAQA,EACA1C,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMkC,EAAiBQ,CAAC,EACjC,UAAU,sGACV,MAAM,aAEN,SAAA1C,EAAAA,OAAC6C,EAAA,CAAO,UAAU,SAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4B,CAAA,EAL9B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAlBKH,EAAE,GADT,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAqBD,CAAA,EAvBH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwBA,EAGF1C,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAO2B,EACP,SAAWzB,GAAM0B,EAAc1B,EAAE,OAAO,KAAK,EAC7C,YAAY,cACZ,UAAU,gCAAA,EALZ,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOAF,EAAAA,OAAC,SAAA,CACC,QAASoC,EACT,SAAU,CAACT,EAAW,KAAA,GAAUJ,EAAU,UAC1C,UAAU,qDAEV,SAAA,CAAAvB,EAAAA,OAAC8C,GAAA,CAAK,UAAU,SAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0B,EACzBvB,EAAU,UAAY,MAAQ,UAAA,CAAA,EANjC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAOA,CAAA,EAfF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAgBA,EACCA,EAAU,OACTvB,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAuB,EAAU,MAAgB,OAAA,EAA9E,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAsF,EAGxFvB,EAAAA,OAAC+C,EAAA,CACC,KAAM,CAAC,CAACd,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWK,EACX,MAAM,iBACN,YACEvC,EAAAA,OAAAgD,WAAA,CAAE,SAAA,CAAA,iBACe,IACfhD,SAAC,OAAA,CAAK,UAAU,0CACb,0BAAe,IAAA,EADlB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAAO,kEAAA,CAAA,EAJT,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAMA,EAEF,UAAWyB,EAAU,UACrB,MAAOA,EAAU,KAAA,EAfnB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAgBA,CAAA,EA5FF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6FA,CAEJ,CAEA,SAASwB,GAAa,CAAE,IAAAnC,GAA2B,CACjD,KAAM,CAAE,KAAMoC,CAAA,EAAiBC,EAAA,EACzBC,EAAUC,EAAA,EACVC,EAAaC,EAAA,EACb,CAACC,EAASC,CAAU,EAAIjE,EAAAA,SAAS,EAAE,EACnC,CAACkE,EAASC,CAAU,EAAInE,EAAAA,SAAqB,QAAQ,EAErDoE,GAAWV,GAAA,YAAAA,EAAc,QAAS,CAAA,EAClCW,EAAe/C,EAAI,OAAS,CAAA,EAE5BgD,EAAYC,EAAAA,QAAQ,IAAM,CAC9B,MAAMC,EAAW,IAAI,IAAIH,EAAa,IAAKI,GAAMA,EAAE,IAAI,CAAC,EACxD,OAAOL,EAAS,OAAQK,GAAM,CAACD,EAAS,IAAIC,CAAC,CAAC,CAChD,EAAG,CAACL,EAAUC,CAAY,CAAC,EAErBK,EAAY,IAAM,CACjBV,EAAQ,QACbJ,EAAQ,OACN,CAAE,MAAOtC,EAAI,GAAI,KAAM0C,EAAQ,KAAA,EAAQ,KAAME,CAAA,EAC7C,CAAE,UAAW,IAAM,CAAED,EAAW,EAAE,EAAGE,EAAW,QAAQ,CAAG,CAAA,CAAE,CAEjE,EAEMQ,EAAgBC,GAAiB,CACrCd,EAAW,OAAO,CAAE,MAAOxC,EAAI,GAAI,KAAAsD,EAAM,CAC3C,EAEA,gBACG,MAAA,CACC,SAAA,CAAApE,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,OAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,EAEC6D,EAAa,SAAW,WACtB,IAAA,CAAE,UAAU,kCAAkC,SAAA,sBAA/C,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAiE,WAEhE,MAAA,CAAI,UAAU,4BACZ,SAAAA,EAAa,IAAKI,GACjBjE,EAAAA,OAAC,OAAA,CAEC,UAAU,0GAEV,SAAA,CAAAA,EAAAA,OAACqE,EAAA,CAAS,KAAMJ,EAAE,IAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EACxBjE,SAAC,OAAA,CAAK,UAAU,gCAAiC,WAAE,IAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,EACxDA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMmE,EAAaF,EAAE,IAAI,EAClC,UAAU,sEACV,MAAO,UAAUA,EAAE,IAAI,GACxB,SAAA,GAAA,EAJD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAXKA,EAAE,KADT,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAcD,CAAA,EAhBH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiBA,EAGDH,EAAU,OAAS,GAClB9D,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,MAAOwD,EACP,SAAWtD,GAAMuD,EAAWvD,EAAE,OAAO,KAAK,EAC1C,UAAU,kCAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,GAAG,SAAA,kBAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,EAChC8D,EAAU,IAAKG,YACb,SAAA,CAAe,MAAOA,EAAI,SAAAA,GAAdA,EAAb,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6B,CAC9B,CAAA,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAUAjE,EAAAA,OAAC,SAAA,CACC,MAAO0D,EACP,SAAWxD,GAAMyD,EAAWzD,EAAE,OAAO,KAAmB,EACxD,UAAU,sBAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,SAAS,SAAA,QAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6B,EAC7BA,SAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,EAC3BA,SAAC,SAAA,CAAO,MAAM,aAAa,SAAA,YAAA,EAA3B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,CAAA,CAAA,EAPvC,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EASAA,EAAAA,OAAC,SAAA,CACC,QAASkE,EACT,SAAU,CAACV,GAAWJ,EAAQ,UAC9B,UAAU,sBAET,SAAAA,EAAQ,UAAY,MAAQ,KAAA,EAL/B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EA1BF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA2BA,EAEDA,EAAQ,OACPpD,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAoD,EAAQ,MAAgB,OAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAoF,CAAA,CAAA,EA3DxF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA6DA,CAEJ,CAEO,SAASkB,GAAe,CAAE,IAAAxD,GAAkC,CACjE,OAAKA,EAWHd,EAAAA,OAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,KAAE,UAAU,4BAA6B,SAAAc,EAAI,cAAgBA,EAAI,aAAlE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA8E,EAC7EA,EAAI,aACHd,SAAC,KAAE,UAAU,oCAAqC,WAAI,aAAtD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkE,CAAA,CAAA,EAHtE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAKA,EAEAA,EAAAA,OAACmB,GAAA,CAAe,MAAOL,EAAI,EAAA,EAA3B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA+B,EAC/Bd,EAAAA,OAACiD,IAAa,IAAAnC,CAAA,EAAd,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAwB,CAAA,CAAA,EAT1B,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAUA,EAnBEd,EAAAA,OAAC,OAAI,UAAU,yDACb,kBAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gDAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,CAiBN,CC9PA,MAAMuE,GAAoC,CACxC,OAAQ,oBACR,SAAU,mBACV,UAAW,iBACb,EAEO,SAASC,GAAS,CAAE,SAAAC,EAAW,IAAiC,CACrE,KAAM,CAAE,WAAAC,GAAeC,EAAgB,CAAE,QAAS,CAAA,EAAI,EAChDC,EAAYC,EAAA,EAEZ,CAACC,EAAYC,CAAa,EAAIvF,EAAAA,SAAS,EAAK,EAC5C,CAACwF,EAAYC,CAAa,EAAIzF,EAAAA,SAA2B,IAAI,EAC7D,CAAC0F,EAAaC,CAAc,EAAI3F,EAAAA,SAA2B,IAAI,EAC/D,CAAC4F,EAAeC,CAAgB,EAAI7F,EAAAA,SAA2B,IAAI,EAEnE,CAAE,KAAA6B,EAAM,UAAAiE,CAAA,EAAcC,EAAQ,CAClC,MAAOb,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKc,GAAQnE,GAAA,YAAAA,EAAM,QAAS,EACvBoE,GAAOpE,GAAA,YAAAA,EAAM,OAAQ,CAAA,EAErBqE,EAAY3B,EAAAA,QAAQ,IACnBmB,EACEO,EAAK,KAAME,GAAMA,EAAE,KAAOT,EAAY,EAAE,GAAKA,EAD3B,KAExB,CAACO,EAAMP,CAAW,CAAC,EAEhBU,EAA+B,CACnC,CACE,IAAK,eACL,MAAO,MACP,OAASC,GACP7F,EAAAA,OAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CACC,UAAW,iCAAiCuE,GAAUsB,EAAI,MAAM,GAAK,mBAAmB,GACxF,MAAOA,EAAI,MAAA,EAFb,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,WAIC,MAAA,CACC,SAAA,CAAA7F,EAAAA,OAAC,KAAE,UAAU,4BACV,SAAA6F,EAAI,cAAgBA,EAAI,aAD3B,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACCA,EAAI,aACH7F,SAAC,KAAE,UAAU,6BAA8B,WAAI,aAA/C,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2D,CAAA,CAAA,EAL/D,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,CAAA,EAGJ,CACE,IAAK,QACL,MAAO,QACP,OAAS6F,GACP7F,EAAAA,OAAC,OAAI,UAAU,uBACX,YAAI,OAAS,CAAA,GAAI,IAAKiE,GACtBjE,SAACqE,EAAA,CAAsB,KAAMJ,EAAE,IAAA,EAAhBA,EAAE,KAAjB,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqC,CACtC,GAHH,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAAA,EAGJ,CACE,IAAK,aACL,MAAO,UACP,OAAS4B,YAASC,EAAA,CAAc,KAAMD,EAAI,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqC,EACtD,UAAW,MAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACP7F,EAAAA,OAAC+F,EAAA,CACC,SAAA,CAAA/F,EAAAA,OAACgG,EAAA,CACC,KAAMC,EACN,MAAM,WACN,QAAS,IAAMhB,EAAcY,CAAG,CAAA,EAHlC,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAKA7F,EAAAA,OAACgG,EAAA,CACC,KAAMnD,EACN,MAAM,aACN,QAAS,IAAMwC,EAAiBQ,CAAG,EACnC,WAAW,4CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAYA,EAEF,UAAW,iBAAA,CACb,EAGIK,EAAe,IAAM,CACpBd,GACLR,EAAU,OAAOQ,EAAc,GAAI,CACjC,UAAW,IAAM,CACfC,EAAiB,IAAI,GACjBH,GAAA,YAAAA,EAAa,MAAOE,EAAc,MAAmB,IAAI,CAC/D,CAAA,CACD,CACH,EAEA,gBACG,MAAA,CACE,SAAA,CAAAX,EACCzE,EAAAA,OAAC,MAAA,CAAI,UAAU,wBACb,SAAAA,SAAC,SAAA,CAAO,QAAS,IAAM+E,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,SAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,EAEA/E,EAAAA,OAACmG,EAAA,CACC,MAAM,mBACN,QACEnG,EAAAA,OAAC,SAAA,CAAO,QAAS,IAAM+E,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,SAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EALJ,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAUF/E,EAAAA,OAAC,MAAA,CAAI,UAAU,kDACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,kBACb,SAAA,CAAAA,EAAAA,OAACoG,EAAA,CACC,QAAAR,EACA,KAAMH,EACN,MAAQI,GAAQA,EAAI,GACpB,UAAAP,EACA,aAAa,cACb,WAAaO,GAAQV,EAAeU,CAAG,EACvC,cAAcH,GAAA,YAAAA,EAAW,KAAM,IAAA,EAPjC,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAUA1F,EAAAA,OAACqG,EAAA,CACC,KAAM3B,EAAW,KACjB,WAAYA,EAAW,WAAWc,CAAK,EACvC,aAAcd,EAAW,QACzB,MAAAc,EACA,SAAUd,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EAlBF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmBA,EAEA1E,EAAAA,OAACsE,GAAA,CAAe,IAAKoB,CAAA,EAArB,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAgC,CAAA,CAAA,EAtBlC,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAuBA,EAEA1F,EAAAA,OAACU,IAAe,KAAMoE,EAAY,QAAS,IAAMC,EAAc,EAAK,GAApE,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAuE,EAEvE/E,EAAAA,OAACa,GAAA,CACC,KAAM,CAAC,CAACmE,EACR,QAAS,IAAMC,EAAc,IAAI,EACjC,IAAKD,CAAA,EAHP,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMAhF,EAAAA,OAAC+C,EAAA,CACC,KAAM,CAAC,CAACqC,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWa,EACX,MAAM,aACN,YACElG,EAAAA,OAAAgD,WAAA,CAAE,SAAA,CAAA,SACO,aACN,OAAA,CAAK,UAAU,gCACb,UAAAoC,GAAA,YAAAA,EAAe,gBAAgBA,GAAA,YAAAA,EAAe,cADjD,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAAO,qEAAA,CAAA,EAJT,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAMA,EAEF,UAAWR,EAAU,UACrB,MAAOA,EAAU,KAAA,EAfnB,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAgBA,CAAA,EAnEF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoEA,CAEJ,CCnLO,SAAS0B,GAAU,CAAE,KAAAlG,GAAuC,CACjE,KAAM,CAAE,KAAM8C,CAAA,EAAiBC,EAAA,EACzBC,EAAUmD,EAAA,EACVjD,EAAakD,EAAA,EACb,CAAChD,EAASC,CAAU,EAAIjE,EAAAA,SAAS,EAAE,EACnC,CAACkE,EAASC,CAAU,EAAInE,EAAAA,SAAqB,QAAQ,EAErDoE,GAAWV,GAAA,YAAAA,EAAc,QAAS,CAAA,EAClCW,GAAezD,GAAA,YAAAA,EAAM,QAAS,CAAA,EAE9B0D,EAAYC,EAAAA,QAAQ,IAAM,CAC9B,MAAMC,EAAW,IAAI,IAAIH,EAAa,IAAKI,GAAMA,EAAE,IAAI,CAAC,EACxD,OAAOL,EAAS,OAAQK,GAAM,CAACD,EAAS,IAAIC,CAAC,CAAC,CAChD,EAAG,CAACL,EAAUC,CAAY,CAAC,EAErBK,EAAY,IAAM,CAClB,CAAC9D,GAAQ,CAACoD,EAAQ,QACtBJ,EAAQ,OACN,CAAE,OAAQhD,EAAK,GAAI,KAAMoD,EAAQ,KAAA,EAAQ,KAAME,CAAA,EAC/C,CAAE,UAAW,IAAM,CAAED,EAAW,EAAE,EAAGE,EAAW,QAAQ,CAAG,CAAA,CAAE,CAEjE,EAEMQ,EAAgBC,GAAiB,CAChChE,GACLkD,EAAW,OAAO,CAAE,OAAQlD,EAAK,GAAI,KAAAgE,EAAM,CAC7C,EAEA,OACEpE,EAAAA,OAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,iBAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAEEI,EAKAJ,SAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,KAAE,UAAU,4BAA6B,SAAAI,EAAK,cAAgBA,EAAK,aAApE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgF,EAChFJ,SAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,YAAA,EAArD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+D,CAAA,CAAA,EAFjE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,EAEC6D,EAAa,SAAW,WACtB,IAAA,CAAE,UAAU,6BAA6B,SAAA,sBAA1C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4D,WAE3D,MAAA,CAAI,UAAU,uBACZ,SAAAA,EAAa,IAAKI,GACjBjE,EAAAA,OAAC,OAAA,CAEC,UAAU,0GAEV,SAAA,CAAAA,EAAAA,OAACqE,EAAA,CAAS,KAAMJ,EAAE,IAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwB,EACxBjE,SAAC,OAAA,CAAK,UAAU,gCAAiC,WAAE,IAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwD,EACxDA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMmE,EAAaF,EAAE,IAAI,EAClC,UAAU,sEACV,MAAO,UAAUA,EAAE,IAAI,GACxB,SAAA,GAAA,EAJD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAXKA,EAAE,KADT,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAcD,CAAA,EAhBH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAiBA,EAGDH,EAAU,OAAS,GAClB9D,EAAAA,OAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,UAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,MAAOwD,EACP,SAAWtD,GAAMuD,EAAWvD,EAAE,OAAO,KAAK,EAC1C,UAAU,kCAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,GAAG,SAAA,kBAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiC,EAChC8D,EAAU,IAAKG,YACb,SAAA,CAAe,MAAOA,EAAI,SAAAA,GAAdA,EAAb,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6B,CAC9B,CAAA,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAUAjE,EAAAA,OAAC,SAAA,CACC,MAAO0D,EACP,SAAWxD,GAAMyD,EAAWzD,EAAE,OAAO,KAAmB,EACxD,UAAU,sBAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,SAAS,SAAA,QAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6B,EAC7BA,SAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2B,EAC3BA,SAAC,SAAA,CAAO,MAAM,aAAa,SAAA,YAAA,EAA3B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqC,CAAA,CAAA,EAPvC,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EASAA,EAAAA,OAAC,SAAA,CACC,QAASkE,EACT,SAAU,CAACV,GAAWJ,EAAQ,UAC9B,UAAU,sBAET,SAAAA,EAAQ,UAAY,MAAQ,KAAA,EAL/B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EA1BF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA2BA,EACCA,EAAQ,OACPpD,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAuC,SAAAoD,EAAQ,MAAgB,OAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoF,CAAA,CAAA,EAjCxF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAmCA,CAAA,CAAA,EAjEJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAmEA,EAvEApD,EAAAA,OAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,sCAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAqEA,CAAA,EA7EJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA+EA,CAEJ,CChHO,SAASyG,GAAiB,CAAE,OAAAC,EAAQ,SAAAC,GAAuE,CAChH,MAAMC,EAAM,CAACC,EAAiBC,EAAuBC,IACnD/G,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM2G,EAASE,CAAG,EAC3B,UAAW,8EACTH,IAAWG,EACP,uCACA,qEACN,GAEC,SAAA,CAAAC,EACAC,CAAA,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,EAAA,aAAA,CAAA,EAAA,IAAA,EAaF,OACE/G,EAAAA,OAAC,MAAA,CAAI,UAAU,sDACZ,SAAA,CAAA4G,EAAI,QAAS5G,EAAAA,OAACgH,GAAA,CAAK,UAAU,aAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8B,EAAI,eAAe,EAC9DJ,EAAI,mBAAoB5G,EAAAA,OAACiH,GAAA,CAAI,UAAU,aAAA,EAAf,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6B,EAAI,kBAAkB,CAAA,CAAA,EAF9E,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ,CCLA,MAAMC,GAAgB,CACpB,CAAE,MAAO,SAAU,MAAO,QAAA,EAC1B,CAAE,MAAO,WAAY,MAAO,UAAA,EAC5B,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEM3C,GAAoC,CACxC,OAAQ,oBACR,SAAU,mBACV,UAAW,iBACb,EAEO,SAAS4C,IAAY,CAC1B,KAAM,CAACC,EAAcC,CAAe,EAAIC,GAAA,EAElCC,EADWH,EAAa,IAAI,KAAK,IACI,mBAAqB,mBAAqB,QAE/EI,EAAmBX,GAAoB,CAEzCQ,EADER,IAAQ,QACM,CAAA,EAEA,CAAE,IAAAA,EAFA,CAItB,EAEA,gBACG,MAAA,CACC,SAAA,CAAA7G,EAAAA,OAACmG,EAAA,CACC,MAAM,WACN,SAAS,8BACT,QAASnG,EAAAA,OAACyG,GAAA,CAAiB,OAAQc,EAAW,SAAUC,CAAA,EAA/C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgE,CAAA,EAH3E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAKCD,IAAc,QAAUvH,EAAAA,OAACyH,GAAA,CAAA,EAAD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmB,EAAKzH,EAAAA,OAACwE,GAAA,CAAS,SAAQ,EAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmB,CAAA,CAAA,EANtE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAOA,CAEJ,CAEA,SAASiD,IAAoB,CAC3B,KAAM,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAjD,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,EAAA,CAAG,CACvB,EACKiD,EAAaC,EAAA,EAEb,CAAC/C,EAAYC,CAAa,EAAIvF,EAAAA,SAAS,EAAK,EAC5C,CAACsI,EAAaC,CAAc,EAAIvI,EAAAA,SAA8B,IAAI,EAClE,CAACwI,EAAcC,CAAe,EAAIzI,EAAAA,SAA8B,IAAI,EACpE,CAAC4F,EAAeC,CAAgB,EAAI7F,EAAAA,SAA8B,IAAI,EAEtE,CAAE,KAAA6B,EAAM,UAAAiE,CAAA,EAAc4C,EAAS,CACnC,OAAQR,EAAQ,QAAU,OAC1B,MAAOhD,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKc,GAAQnE,GAAA,YAAAA,EAAM,QAAS,EACvB8G,GAAQ9G,GAAA,YAAAA,EAAM,QAAS,CAAA,EAEvB+G,EAAarE,EAAAA,QAAQ,IACpBiE,EACEG,EAAM,KAAME,GAAMA,EAAE,KAAOL,EAAa,EAAE,GAAKA,EAD5B,KAEzB,CAACG,EAAOH,CAAY,CAAC,EAElBpC,EAAkC,CACtC,CACE,IAAK,eACL,MAAO,OACP,OAASC,GACP7F,EAAAA,OAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CACC,UAAW,iCAAiCuE,GAAUsB,EAAI,MAAM,GAAK,mBAAmB,GACxF,MAAOA,EAAI,MAAA,EAFb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,WAIC,MAAA,CACC,SAAA,CAAA7F,EAAAA,OAAC,KAAE,UAAU,4BACV,SAAA6F,EAAI,cAAgBA,EAAI,aAD3B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACCA,EAAI,OACH7F,SAAC,KAAE,UAAU,6BAA8B,WAAI,OAA/C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqD,CAAA,CAAA,EALzD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,CAAA,EAGJ,CACE,IAAK,QACL,MAAO,QACP,OAAS6F,GACP7F,EAAAA,OAAC,OAAI,UAAU,uBACX,YAAI,OAAS,CAAA,GAAI,IAAKiE,GACtBjE,SAACqE,EAAA,CAAsB,KAAMJ,EAAE,IAAA,EAAhBA,EAAE,KAAjB,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,CACtC,GAHH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,CAAA,EAGJ,CACE,IAAK,aACL,MAAO,UACP,OAAS4B,YAASC,EAAA,CAAc,KAAMD,EAAI,UAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EACtD,UAAW,MAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACP7F,EAAAA,OAAC+F,EAAA,CACC,SAAA,CAAA/F,EAAAA,OAACgG,EAAA,CACC,KAAMC,EACN,MAAM,YACN,QAAS,IAAM8B,EAAelC,CAAG,CAAA,EAHnC,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAKA7F,EAAAA,OAACgG,EAAA,CACC,KAAMnD,EACN,MAAM,cACN,QAAS,IAAMwC,EAAiBQ,CAAG,EACnC,WAAW,4CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAYA,EAEF,UAAW,iBAAA,CACb,EAGIK,EAAe,IAAM,CACpBd,GACLwC,EAAW,OAAOxC,EAAc,GAAI,CAClC,UAAW,IAAMC,EAAiB,IAAI,CAAA,CACvC,CACH,EAEA,gBACG,MAAA,CACC,SAAA,CAAArF,SAAC,MAAA,CAAI,UAAU,wBACb,SAAAA,EAAAA,OAAC,SAAA,CAAO,QAAS,IAAM+E,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,UAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,WAECuD,EAAA,CACC,SAAAtI,EAAAA,OAACuI,EAAA,CACC,MAAM,SACN,MAAOb,EAAQ,OACf,SAAWc,GAAMb,EAAU,SAAUa,CAAC,EACtC,QAAStB,EAAA,EAJX,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAKA,EANF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,EAEAlH,EAAAA,OAAC,MAAA,CAAI,UAAU,kDAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,kBACb,SAAA,CAAAA,EAAAA,OAACoG,EAAA,CACC,QAAAR,EACA,KAAMuC,EACN,MAAQtC,GAAQA,EAAI,GACpB,UAAAP,EACA,aAAa,iBACb,WAAaO,GAAQoC,EAAgBpC,CAAG,EACxC,cAAcuC,GAAA,YAAAA,EAAY,KAAM,IAAA,EAPlC,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAUApI,EAAAA,OAACqG,EAAA,CACC,KAAM3B,EAAW,KACjB,WAAYA,EAAW,WAAWc,CAAK,EACvC,aAAcd,EAAW,QACzB,MAAAc,EACA,SAAUd,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EAlBF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmBA,EAGA1E,EAAAA,OAACsG,GAAA,CAAU,KAAM8B,CAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA6B,CAAA,CAAA,EAxB/B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAyBA,EAEApI,EAAAA,OAACf,IAAgB,KAAM6F,EAAY,QAAS,IAAMC,EAAc,EAAK,GAArE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAwE,EAExE/E,EAAAA,OAACG,GAAA,CACC,KAAM,CAAC,CAAC2H,EACR,QAAS,IAAMC,EAAe,IAAI,EAClC,KAAMD,CAAA,EAHR,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA9H,EAAAA,OAAC+C,EAAA,CACC,KAAM,CAAC,CAACqC,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWa,EACX,MAAM,cACN,YACElG,EAAAA,OAAAgD,WAAA,CAAE,SAAA,CAAA,SACO,aACN,OAAA,CAAK,UAAU,gCACb,UAAAoC,GAAA,YAAAA,EAAe,gBAAgBA,GAAA,YAAAA,EAAe,cADjD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAAO,iCAAA,CAAA,EAJT,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAMA,EAEF,UAAWwC,EAAW,UACtB,MAAOA,EAAW,KAAA,EAfpB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAgBA,CAAA,EAnEF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoEA,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{u as s,b as t,c as l}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-DcpCR9c_.js";function g(){return s({queryKey:["knowledge","domains"],queryFn:()=>u("/knowledge/domains")})}function f(n,e){var a;const r=new URLSearchParams;r.set("domain",n),(a=e==null?void 0:e.tags)!=null&&a.length&&r.set("tags",e.tags.join(",")),e!=null&&e.search&&r.set("search",e.search),(e==null?void 0:e.limit)!=null&&r.set("limit",String(e.limit)),(e==null?void 0:e.offset)!=null&&r.set("offset",String(e.offset));const i=r.toString();return s({queryKey:["knowledge",n,e==null?void 0:e.tags,e==null?void 0:e.search,e==null?void 0:e.limit,e==null?void 0:e.offset],queryFn:()=>u(`/knowledge/entries?${i}`),enabled:!!n})}function y(n,e){const r=new URLSearchParams;n&&r.set("domain",n),e&&r.set("key",e);const i=r.toString();return s({queryKey:["knowledge",n,e],queryFn:()=>u(`/knowledge/entry?${i}`),enabled:!!n&&!!e})}function m(){const n=t();return l({mutationFn:e=>u("/knowledge/entry",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function w(){const n=t();return l({mutationFn:e=>u("/knowledge/field",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function o(){const n=t();return l({mutationFn:({domain:e,key:r,path:i})=>{const a=new URLSearchParams({domain:e,key:r,path:i});return u(`/knowledge/field?${a}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function S(){const n=t();return l({mutationFn:({domain:e,key:r})=>{const i=new URLSearchParams({domain:e,key:r});return u(`/knowledge/entry?${i}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}export{S as a,m as b,w as c,o as d,g as e,f,y as u};
2
- //# sourceMappingURL=knowledge-DhCbDgy4.js.map
1
+ import{u as s,b as t,c as l}from"./vendor-query-DLp59M9_.js";import{b as u}from"./index-4T7Z_gQ4.js";function g(){return s({queryKey:["knowledge","domains"],queryFn:()=>u("/knowledge/domains")})}function f(n,e){var a;const r=new URLSearchParams;r.set("domain",n),(a=e==null?void 0:e.tags)!=null&&a.length&&r.set("tags",e.tags.join(",")),e!=null&&e.search&&r.set("search",e.search),(e==null?void 0:e.limit)!=null&&r.set("limit",String(e.limit)),(e==null?void 0:e.offset)!=null&&r.set("offset",String(e.offset));const i=r.toString();return s({queryKey:["knowledge",n,e==null?void 0:e.tags,e==null?void 0:e.search,e==null?void 0:e.limit,e==null?void 0:e.offset],queryFn:()=>u(`/knowledge/entries?${i}`),enabled:!!n})}function y(n,e){const r=new URLSearchParams;n&&r.set("domain",n),e&&r.set("key",e);const i=r.toString();return s({queryKey:["knowledge",n,e],queryFn:()=>u(`/knowledge/entry?${i}`),enabled:!!n&&!!e})}function m(){const n=t();return l({mutationFn:e=>u("/knowledge/entry",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function w(){const n=t();return l({mutationFn:e=>u("/knowledge/field",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function o(){const n=t();return l({mutationFn:({domain:e,key:r,path:i})=>{const a=new URLSearchParams({domain:e,key:r,path:i});return u(`/knowledge/field?${a}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function S(){const n=t();return l({mutationFn:({domain:e,key:r})=>{const i=new URLSearchParams({domain:e,key:r});return u(`/knowledge/entry?${i}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}export{S as a,m as b,w as c,o as d,g as e,f,y as u};
2
+ //# sourceMappingURL=knowledge-CUZxyRCO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-DhCbDgy4.js","sources":["../../src/api/knowledge.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface KnowledgeDomain {\n domain: string;\n count: number;\n latest: string;\n}\n\nexport interface KnowledgeEntry {\n id: string;\n domain: string;\n key: string;\n data: Record<string, unknown>;\n tags: string[];\n created_at: string;\n updated_at: string;\n}\n\nexport interface ListDomainsResponse {\n domains: KnowledgeDomain[];\n}\n\nexport interface ListEntriesResponse {\n entries: KnowledgeEntry[];\n total: number;\n}\n\nexport function useListDomains() {\n return useQuery<ListDomainsResponse>({\n queryKey: ['knowledge', 'domains'],\n queryFn: () => apiFetch('/knowledge/domains'),\n });\n}\n\nexport function useListKnowledge(\n domain: string,\n opts?: { tags?: string[]; search?: string; limit?: number; offset?: number },\n) {\n const params = new URLSearchParams();\n params.set('domain', domain);\n if (opts?.tags?.length) params.set('tags', opts.tags.join(','));\n if (opts?.search) params.set('search', opts.search);\n if (opts?.limit != null) params.set('limit', String(opts.limit));\n if (opts?.offset != null) params.set('offset', String(opts.offset));\n const qs = params.toString();\n\n return useQuery<ListEntriesResponse>({\n queryKey: ['knowledge', domain, opts?.tags, opts?.search, opts?.limit, opts?.offset],\n queryFn: () => apiFetch(`/knowledge/entries?${qs}`),\n enabled: !!domain,\n });\n}\n\nexport function useGetKnowledge(domain: string, key: string | null) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n const qs = params.toString();\n\n return useQuery<KnowledgeEntry & { found?: boolean }>({\n queryKey: ['knowledge', domain, key],\n queryFn: () => apiFetch(`/knowledge/entry?${qs}`),\n enabled: !!domain && !!key,\n });\n}\n\nexport function useStoreKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; data: Record<string, unknown>; tags?: string[]; replace?: boolean }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/entry', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useSetKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; path: string; value: unknown; tags?: string[] }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/field', {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useRemoveKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { removed: boolean },\n Error,\n { domain: string; key: string; path: string }\n >({\n mutationFn: ({ domain, key, path }) => {\n const params = new URLSearchParams({ domain, key, path });\n return apiFetch(`/knowledge/field?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useDeleteKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { deleted: boolean; domain: string; key: string },\n Error,\n { domain: string; key: string }\n >({\n mutationFn: ({ domain, key }) => {\n const params = new URLSearchParams({ domain, key });\n return apiFetch(`/knowledge/entry?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n"],"names":["useListDomains","useQuery","apiFetch","useListKnowledge","domain","opts","params","_a","qs","useGetKnowledge","key","useStoreKnowledge","queryClient","useQueryClient","useMutation","body","useSetKnowledgeField","useRemoveKnowledgeField","path","useDeleteKnowledge"],"mappings":"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"}
1
+ {"version":3,"file":"knowledge-CUZxyRCO.js","sources":["../../src/api/knowledge.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface KnowledgeDomain {\n domain: string;\n count: number;\n latest: string;\n}\n\nexport interface KnowledgeEntry {\n id: string;\n domain: string;\n key: string;\n data: Record<string, unknown>;\n tags: string[];\n created_at: string;\n updated_at: string;\n}\n\nexport interface ListDomainsResponse {\n domains: KnowledgeDomain[];\n}\n\nexport interface ListEntriesResponse {\n entries: KnowledgeEntry[];\n total: number;\n}\n\nexport function useListDomains() {\n return useQuery<ListDomainsResponse>({\n queryKey: ['knowledge', 'domains'],\n queryFn: () => apiFetch('/knowledge/domains'),\n });\n}\n\nexport function useListKnowledge(\n domain: string,\n opts?: { tags?: string[]; search?: string; limit?: number; offset?: number },\n) {\n const params = new URLSearchParams();\n params.set('domain', domain);\n if (opts?.tags?.length) params.set('tags', opts.tags.join(','));\n if (opts?.search) params.set('search', opts.search);\n if (opts?.limit != null) params.set('limit', String(opts.limit));\n if (opts?.offset != null) params.set('offset', String(opts.offset));\n const qs = params.toString();\n\n return useQuery<ListEntriesResponse>({\n queryKey: ['knowledge', domain, opts?.tags, opts?.search, opts?.limit, opts?.offset],\n queryFn: () => apiFetch(`/knowledge/entries?${qs}`),\n enabled: !!domain,\n });\n}\n\nexport function useGetKnowledge(domain: string, key: string | null) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n const qs = params.toString();\n\n return useQuery<KnowledgeEntry & { found?: boolean }>({\n queryKey: ['knowledge', domain, key],\n queryFn: () => apiFetch(`/knowledge/entry?${qs}`),\n enabled: !!domain && !!key,\n });\n}\n\nexport function useStoreKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; data: Record<string, unknown>; tags?: string[]; replace?: boolean }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/entry', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useSetKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; path: string; value: unknown; tags?: string[] }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/field', {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useRemoveKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { removed: boolean },\n Error,\n { domain: string; key: string; path: string }\n >({\n mutationFn: ({ domain, key, path }) => {\n const params = new URLSearchParams({ domain, key, path });\n return apiFetch(`/knowledge/field?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useDeleteKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { deleted: boolean; domain: string; key: string },\n Error,\n { domain: string; key: string }\n >({\n mutationFn: ({ domain, key }) => {\n const params = new URLSearchParams({ domain, key });\n return apiFetch(`/knowledge/entry?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n"],"names":["useListDomains","useQuery","apiFetch","useListKnowledge","domain","opts","params","_a","qs","useGetKnowledge","key","useStoreKnowledge","queryClient","useQueryClient","useMutation","body","useSetKnowledgeField","useRemoveKnowledgeField","path","useDeleteKnowledge"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as o,b as u,c as n}from"./vendor-query-B2UbickB.js";import{b as s}from"./index-DcpCR9c_.js";function m(e={}){const r=new URLSearchParams;e.status&&r.set("status",e.status),e.search&&r.set("search",e.search),e.tags&&r.set("tags",e.tags);const t=r.toString();return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers${t?`?${t}`:""}`)})}function y(e){return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers/${e}`),enabled:!!e})}function p(){const e=u();return n({mutationFn:r=>s("/mcp/servers",{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function S(){const e=u();return n({mutationFn:({id:r,...t})=>s(`/mcp/servers/${r}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function v(){return n({mutationFn:e=>s("/mcp/servers/test-connection",{method:"POST",body:JSON.stringify(e)})})}function d(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function q(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/connect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function f(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/disconnect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function h(){return n({mutationFn:({serverId:e,toolName:r,arguments:t,execute_as:c})=>s(`/mcp/servers/${e}/tools/${r}/call`,{method:"POST",body:JSON.stringify({arguments:t,...c?{execute_as:c}:{}})})})}export{q as a,f as b,d as c,v as d,y as e,p as f,S as g,h,m as u};
2
- //# sourceMappingURL=mcp-xh7T0I-f.js.map
1
+ import{u as o,b as u,c as n}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-4T7Z_gQ4.js";function m(e={}){const r=new URLSearchParams;e.status&&r.set("status",e.status),e.search&&r.set("search",e.search),e.tags&&r.set("tags",e.tags);const t=r.toString();return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers${t?`?${t}`:""}`)})}function y(e){return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers/${e}`),enabled:!!e})}function p(){const e=u();return n({mutationFn:r=>s("/mcp/servers",{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function S(){const e=u();return n({mutationFn:({id:r,...t})=>s(`/mcp/servers/${r}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function v(){return n({mutationFn:e=>s("/mcp/servers/test-connection",{method:"POST",body:JSON.stringify(e)})})}function d(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function q(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/connect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function f(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/disconnect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function h(){return n({mutationFn:({serverId:e,toolName:r,arguments:t,execute_as:c})=>s(`/mcp/servers/${e}/tools/${r}/call`,{method:"POST",body:JSON.stringify({arguments:t,...c?{execute_as:c}:{}})})})}export{q as a,f as b,d as c,v as d,y as e,p as f,S as g,h,m as u};
2
+ //# sourceMappingURL=mcp-B5VQPoF3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-xh7T0I-f.js","sources":["../../src/api/mcp.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { McpServerRecord, McpToolManifest } from './types';\n\ninterface McpServerListResponse {\n servers: McpServerRecord[];\n total: number;\n}\n\ninterface McpServerFilters {\n status?: string;\n search?: string;\n tags?: string;\n}\n\nexport function useMcpServers(filters: McpServerFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.tags) params.set('tags', filters.tags);\n const qs = params.toString();\n\n return useQuery<McpServerListResponse>({\n queryKey: ['mcpServers', filters],\n queryFn: () => apiFetch(`/mcp/servers${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useMcpServer(id: string) {\n return useQuery<McpServerRecord>({\n queryKey: ['mcpServers', id],\n queryFn: () => apiFetch(`/mcp/servers/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n transport_type: string;\n transport_config: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch('/mcp/servers', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useUpdateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n name?: string;\n description?: string;\n transport_type?: string;\n transport_config?: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch(`/mcp/servers/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport interface TestConnectionResult {\n success: boolean;\n tools: McpToolManifest[];\n error?: string;\n}\n\nexport function useTestConnection() {\n return useMutation<TestConnectionResult, Error, { transport_type: string; transport_config: Record<string, unknown> }>({\n mutationFn: (data) =>\n apiFetch('/mcp/servers/test-connection', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useConnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/connect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useDisconnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/disconnect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useMcpTools(serverId: string) {\n return useQuery<{ tools: McpToolManifest[] }>({\n queryKey: ['mcpTools', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/tools`),\n enabled: !!serverId,\n });\n}\n\nexport interface CredentialStatus {\n required: string[];\n registered: string[];\n missing: string[];\n}\n\nexport function useCredentialStatus(serverId: string) {\n return useQuery<CredentialStatus>({\n queryKey: ['mcpCredentialStatus', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/credential-status`),\n enabled: !!serverId,\n staleTime: 30_000,\n });\n}\n\nexport function useCallMcpTool() {\n return useMutation({\n mutationFn: ({\n serverId,\n toolName,\n arguments: args,\n execute_as,\n }: {\n serverId: string;\n toolName: string;\n arguments: Record<string, unknown>;\n execute_as?: string;\n }) =>\n apiFetch(`/mcp/servers/${serverId}/tools/${toolName}/call`, {\n method: 'POST',\n body: JSON.stringify({ arguments: args, ...(execute_as ? { execute_as } : {}) }),\n }),\n });\n}\n"],"names":["useMcpServers","filters","params","qs","useQuery","apiFetch","useMcpServer","id","useCreateMcpServer","queryClient","useQueryClient","useMutation","data","useUpdateMcpServer","useTestConnection","useDeleteMcpServer","useConnectMcpServer","useDisconnectMcpServer","useCallMcpTool","serverId","toolName","args","execute_as"],"mappings":"qGAeO,SAASA,EAAcC,EAA4B,GAAI,CAC5D,MAAMC,EAAS,IAAI,gBACfD,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EACjD,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAgC,CACrC,SAAU,CAAC,aAAcH,CAAO,EAChC,QAAS,IAAMI,EAAS,eAAeF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC5D,CACH,CAEO,SAASG,EAAaC,EAAY,CACvC,OAAOH,EAA0B,CAC/B,SAAU,CAAC,aAAcG,CAAE,EAC3B,QAAS,IAAMF,EAAS,gBAAgBE,CAAE,EAAE,EAC5C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXP,EAAS,eAAgB,CACvB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASI,GAAqB,CACnC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAaHP,EAAS,gBAAgBE,CAAE,GAAI,CAC7B,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAQO,SAASK,GAAoB,CAClC,OAAOH,EAAgH,CACrH,WAAaC,GACXP,EAAS,+BAAgC,CACvC,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,GAAI,CAAE,OAAQ,SAAU,EACrD,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASO,GAAsB,CACpC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,WAAY,CAAE,OAAQ,OAAQ,EAC3D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASQ,GAAyB,CACvC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,cAAe,CAAE,OAAQ,OAAQ,EAC9D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAyBO,SAASS,GAAiB,CAC/B,OAAOP,EAAY,CACjB,WAAY,CAAC,CACX,SAAAQ,EACA,SAAAC,EACA,UAAWC,EACX,WAAAC,CAAA,IAOAjB,EAAS,gBAAgBc,CAAQ,UAAUC,CAAQ,QAAS,CAC1D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAChF,CAAA,CACJ,CACH"}
1
+ {"version":3,"file":"mcp-B5VQPoF3.js","sources":["../../src/api/mcp.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { McpServerRecord, McpToolManifest } from './types';\n\ninterface McpServerListResponse {\n servers: McpServerRecord[];\n total: number;\n}\n\ninterface McpServerFilters {\n status?: string;\n search?: string;\n tags?: string;\n}\n\nexport function useMcpServers(filters: McpServerFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.tags) params.set('tags', filters.tags);\n const qs = params.toString();\n\n return useQuery<McpServerListResponse>({\n queryKey: ['mcpServers', filters],\n queryFn: () => apiFetch(`/mcp/servers${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useMcpServer(id: string) {\n return useQuery<McpServerRecord>({\n queryKey: ['mcpServers', id],\n queryFn: () => apiFetch(`/mcp/servers/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n transport_type: string;\n transport_config: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch('/mcp/servers', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useUpdateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n name?: string;\n description?: string;\n transport_type?: string;\n transport_config?: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch(`/mcp/servers/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport interface TestConnectionResult {\n success: boolean;\n tools: McpToolManifest[];\n error?: string;\n}\n\nexport function useTestConnection() {\n return useMutation<TestConnectionResult, Error, { transport_type: string; transport_config: Record<string, unknown> }>({\n mutationFn: (data) =>\n apiFetch('/mcp/servers/test-connection', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useConnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/connect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useDisconnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/disconnect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useMcpTools(serverId: string) {\n return useQuery<{ tools: McpToolManifest[] }>({\n queryKey: ['mcpTools', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/tools`),\n enabled: !!serverId,\n });\n}\n\nexport interface CredentialStatus {\n required: string[];\n registered: string[];\n missing: string[];\n}\n\nexport function useCredentialStatus(serverId: string) {\n return useQuery<CredentialStatus>({\n queryKey: ['mcpCredentialStatus', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/credential-status`),\n enabled: !!serverId,\n staleTime: 30_000,\n });\n}\n\nexport function useCallMcpTool() {\n return useMutation({\n mutationFn: ({\n serverId,\n toolName,\n arguments: args,\n execute_as,\n }: {\n serverId: string;\n toolName: string;\n arguments: Record<string, unknown>;\n execute_as?: string;\n }) =>\n apiFetch(`/mcp/servers/${serverId}/tools/${toolName}/call`, {\n method: 'POST',\n body: JSON.stringify({ arguments: args, ...(execute_as ? { execute_as } : {}) }),\n }),\n });\n}\n"],"names":["useMcpServers","filters","params","qs","useQuery","apiFetch","useMcpServer","id","useCreateMcpServer","queryClient","useQueryClient","useMutation","data","useUpdateMcpServer","useTestConnection","useDeleteMcpServer","useConnectMcpServer","useDisconnectMcpServer","useCallMcpTool","serverId","toolName","args","execute_as"],"mappings":"qGAeO,SAASA,EAAcC,EAA4B,GAAI,CAC5D,MAAMC,EAAS,IAAI,gBACfD,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EACjD,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAgC,CACrC,SAAU,CAAC,aAAcH,CAAO,EAChC,QAAS,IAAMI,EAAS,eAAeF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC5D,CACH,CAEO,SAASG,EAAaC,EAAY,CACvC,OAAOH,EAA0B,CAC/B,SAAU,CAAC,aAAcG,CAAE,EAC3B,QAAS,IAAMF,EAAS,gBAAgBE,CAAE,EAAE,EAC5C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXP,EAAS,eAAgB,CACvB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASI,GAAqB,CACnC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAaHP,EAAS,gBAAgBE,CAAE,GAAI,CAC7B,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAQO,SAASK,GAAoB,CAClC,OAAOH,EAAgH,CACrH,WAAaC,GACXP,EAAS,+BAAgC,CACvC,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,GAAI,CAAE,OAAQ,SAAU,EACrD,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASO,GAAsB,CACpC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,WAAY,CAAE,OAAQ,OAAQ,EAC3D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASQ,GAAyB,CACvC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,cAAe,CAAE,OAAQ,OAAQ,EAC9D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAyBO,SAASS,GAAiB,CAC/B,OAAOP,EAAY,CACjB,WAAY,CAAC,CACX,SAAAQ,EACA,SAAAC,EACA,UAAWC,EACX,WAAAC,CAAA,IAOAjB,EAAS,gBAAgBc,CAAQ,UAAUC,CAAQ,QAAS,CAC1D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAChF,CAAA,CACJ,CACH"}
@@ -1,2 +1,2 @@
1
- import{u as r,b as i,c as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-DcpCR9c_.js";const s=["mcpQueryJobs"];function o(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1,direct:!0})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function a(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function m(e={}){const t=new URLSearchParams;return t.set("entity",e.entity||"mcpQuery,mcpTriage,mcpWorkflowPlanner"),e.limit&&t.set("limit",String(e.limit)),e.offset!==void 0&&t.set("offset",String(e.offset)),e.search&&t.set("search",e.search),e.status&&t.set("status",e.status),t.set("sort_by","created_at"),t.set("order","desc"),r({queryKey:[...s,e],queryFn:()=>u(`/workflow-states/jobs?${t}`)})}function l(e){return r({queryKey:["mcpQueryExecution",e],queryFn:()=>u(`/workflow-states/${e}/execution`),enabled:!!e})}function p(e){return r({queryKey:["mcpQueryResult",e],queryFn:()=>u(`/workflows/${e}/result`),enabled:!!e,retry:2})}function f(e){return r({queryKey:["mcpQueryDescribe",e.prompt],queryFn:()=>u("/insight/mcp-query/describe",{method:"POST",body:JSON.stringify({prompt:e.prompt,result_title:e.resultTitle,result_summary:e.resultSummary})}),enabled:!!e.prompt,staleTime:1/0,gcTime:30*6e4})}function b(e){return r({queryKey:["yamlWorkflowForSource",e],queryFn:()=>u(`/yaml-workflows?source_workflow_id=${e}&limit=5`),enabled:!!e})}export{o as a,a as b,l as c,p as d,b as e,f,m as u};
2
- //# sourceMappingURL=mcp-query-il3CfU3U.js.map
1
+ import{u as r,b as i,c as n}from"./vendor-query-DLp59M9_.js";import{b as u}from"./index-4T7Z_gQ4.js";const s=["mcpQueryJobs"];function o(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1,direct:!0})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function a(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function m(e={}){const t=new URLSearchParams;return t.set("entity",e.entity||"mcpQuery,mcpTriage,mcpWorkflowPlanner"),e.limit&&t.set("limit",String(e.limit)),e.offset!==void 0&&t.set("offset",String(e.offset)),e.search&&t.set("search",e.search),e.status&&t.set("status",e.status),t.set("sort_by","created_at"),t.set("order","desc"),r({queryKey:[...s,e],queryFn:()=>u(`/workflow-states/jobs?${t}`)})}function l(e){return r({queryKey:["mcpQueryExecution",e],queryFn:()=>u(`/workflow-states/${e}/execution`),enabled:!!e})}function p(e){return r({queryKey:["mcpQueryResult",e],queryFn:()=>u(`/workflows/${e}/result`),enabled:!!e,retry:2})}function f(e){return r({queryKey:["mcpQueryDescribe",e.prompt],queryFn:()=>u("/insight/mcp-query/describe",{method:"POST",body:JSON.stringify({prompt:e.prompt,result_title:e.resultTitle,result_summary:e.resultSummary})}),enabled:!!e.prompt,staleTime:1/0,gcTime:30*6e4})}function b(e){return r({queryKey:["yamlWorkflowForSource",e],queryFn:()=>u(`/yaml-workflows?source_workflow_id=${e}&limit=5`),enabled:!!e})}export{o as a,a as b,l as c,p as d,b as e,f,m as u};
2
+ //# sourceMappingURL=mcp-query-Ba5Zj3yg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-query-il3CfU3U.js","sources":["../../src/api/mcp-query.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface McpQuerySubmitResult {\n workflow_id: string;\n status: string;\n prompt: string;\n}\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const MCP_QUERY_JOBS_KEY = ['mcpQueryJobs'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/**\n * Submit a DIRECT mcpQuery (bypasses router — always dynamic MCP orchestration).\n * Used by the MCP Queries list page where the user explicitly wants a new dynamic seed run.\n */\nexport function useSubmitMcpQuery() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false, direct: true }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * Submit via mcpQueryRouter (checks for deterministic match first).\n * Used by the Verify panel (Panel 6) to test end-to-end routing.\n */\nexport function useSubmitMcpQueryRouted() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * List mcpQuery workflow executions (system-level durable workflows).\n * Filters to entity=mcpQuery on the long-tail-system task queue.\n */\nexport function useMcpQueryJobs(filters: {\n limit?: number;\n offset?: number;\n search?: string;\n status?: string;\n entity?: string;\n} = {}) {\n const params = new URLSearchParams();\n params.set('entity', filters.entity || 'mcpQuery,mcpTriage,mcpWorkflowPlanner');\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n params.set('sort_by', 'created_at');\n params.set('order', 'desc');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: [...MCP_QUERY_JOBS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-states/jobs?${params}`),\n });\n}\n\n/**\n * Get execution timeline for an mcpQuery workflow.\n */\nexport function useMcpQueryExecution(workflowId: string | undefined) {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpQueryExecution', workflowId],\n queryFn: () => apiFetch(`/workflow-states/${workflowId}/execution`),\n enabled: !!workflowId,\n });\n}\n\n/**\n * Get the result data from a completed mcpQuery workflow.\n */\nexport function useMcpQueryResult(workflowId: string | undefined) {\n return useQuery<{ workflowId: string; result: { type: string; data: Record<string, unknown> } }>({\n queryKey: ['mcpQueryResult', workflowId],\n queryFn: () => apiFetch(`/workflows/${workflowId}/result`),\n enabled: !!workflowId,\n retry: 2,\n });\n}\n\n/**\n * Generate a workflow description and tags from the original prompt + result.\n * Uses an LLM to produce a concise, catalog-style description.\n */\nexport function useDescribeMcpQuery(params: {\n prompt: string | undefined;\n resultTitle: string | undefined;\n resultSummary: string | undefined;\n}) {\n return useQuery<{ tool_name?: string; description: string; tags: string[] }>({\n queryKey: ['mcpQueryDescribe', params.prompt],\n queryFn: () =>\n apiFetch<{ tool_name?: string; description: string; tags: string[] }>('/insight/mcp-query/describe', {\n method: 'POST',\n body: JSON.stringify({\n prompt: params.prompt,\n result_title: params.resultTitle,\n result_summary: params.resultSummary,\n }),\n }),\n enabled: !!params.prompt,\n staleTime: Infinity,\n gcTime: 30 * 60_000,\n });\n}\n\n/**\n * Find a YAML workflow compiled from a specific mcpQuery execution.\n */\nexport function useYamlWorkflowForSource(sourceWorkflowId: string | undefined) {\n return useQuery<{ workflows: Array<{\n id: string; name: string; status: string; graph_topic: string;\n description?: string; tags?: string[]; app_id?: string;\n input_schema?: Record<string, unknown>;\n activity_manifest?: Array<{\n activity_id: string; title: string; type: string;\n tool_source: string; mcp_tool_name?: string;\n }>;\n original_prompt?: string;\n }> }>({\n queryKey: ['yamlWorkflowForSource', sourceWorkflowId],\n queryFn: () => apiFetch(`/yaml-workflows?source_workflow_id=${sourceWorkflowId}&limit=5`),\n enabled: !!sourceWorkflowId,\n });\n}\n"],"names":["MCP_QUERY_JOBS_KEY","useSubmitMcpQuery","queryClient","useQueryClient","useMutation","params","apiFetch","useSubmitMcpQueryRouted","useMcpQueryJobs","filters","useQuery","useMcpQueryExecution","workflowId","useMcpQueryResult","useDescribeMcpQuery","useYamlWorkflowForSource","sourceWorkflowId"],"mappings":"qGAcO,MAAMA,EAAqB,CAAC,cAAc,EAQ1C,SAASC,GAAoB,CAClC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,OAAQ,EAAA,CAAM,CAAA,CAC9D,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASK,GAA0B,CACxC,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,CAAA,CAChD,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASM,EAAgBC,EAM5B,GAAI,CACN,MAAMJ,EAAS,IAAI,gBACnB,OAAAA,EAAO,IAAI,SAAUI,EAAQ,QAAU,uCAAuC,EAC1EA,EAAQ,OAAOJ,EAAO,IAAI,QAAS,OAAOI,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWJ,EAAO,IAAI,SAAU,OAAOI,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACnDA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACvDJ,EAAO,IAAI,UAAW,YAAY,EAClCA,EAAO,IAAI,QAAS,MAAM,EAEnBK,EAA2C,CAChD,SAAU,CAAC,GAAGV,EAAoBS,CAAO,EACzC,QAAS,IAAMH,EAAS,yBAAyBD,CAAM,EAAE,CAAA,CAC1D,CACH,CAKO,SAASM,EAAqBC,EAAgC,CACnE,OAAOF,EAA4B,CACjC,SAAU,CAAC,oBAAqBE,CAAU,EAC1C,QAAS,IAAMN,EAAS,oBAAoBM,CAAU,YAAY,EAClE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAKO,SAASC,EAAkBD,EAAgC,CAChE,OAAOF,EAA0F,CAC/F,SAAU,CAAC,iBAAkBE,CAAU,EACvC,QAAS,IAAMN,EAAS,cAAcM,CAAU,SAAS,EACzD,QAAS,CAAC,CAACA,EACX,MAAO,CAAA,CACR,CACH,CAMO,SAASE,EAAoBT,EAIjC,CACD,OAAOK,EAAsE,CAC3E,SAAU,CAAC,mBAAoBL,EAAO,MAAM,EAC5C,QAAS,IACPC,EAAsE,8BAA+B,CACnG,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,OAAQD,EAAO,OACf,aAAcA,EAAO,YACrB,eAAgBA,EAAO,aAAA,CACxB,CAAA,CACF,EACH,QAAS,CAAC,CAACA,EAAO,OAClB,UAAW,IACX,OAAQ,GAAK,GAAA,CACd,CACH,CAKO,SAASU,EAAyBC,EAAsC,CAC7E,OAAON,EASD,CACJ,SAAU,CAAC,wBAAyBM,CAAgB,EACpD,QAAS,IAAMV,EAAS,sCAAsCU,CAAgB,UAAU,EACxF,QAAS,CAAC,CAACA,CAAA,CACZ,CACH"}
1
+ {"version":3,"file":"mcp-query-Ba5Zj3yg.js","sources":["../../src/api/mcp-query.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface McpQuerySubmitResult {\n workflow_id: string;\n status: string;\n prompt: string;\n}\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const MCP_QUERY_JOBS_KEY = ['mcpQueryJobs'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/**\n * Submit a DIRECT mcpQuery (bypasses router — always dynamic MCP orchestration).\n * Used by the MCP Queries list page where the user explicitly wants a new dynamic seed run.\n */\nexport function useSubmitMcpQuery() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false, direct: true }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * Submit via mcpQueryRouter (checks for deterministic match first).\n * Used by the Verify panel (Panel 6) to test end-to-end routing.\n */\nexport function useSubmitMcpQueryRouted() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * List mcpQuery workflow executions (system-level durable workflows).\n * Filters to entity=mcpQuery on the long-tail-system task queue.\n */\nexport function useMcpQueryJobs(filters: {\n limit?: number;\n offset?: number;\n search?: string;\n status?: string;\n entity?: string;\n} = {}) {\n const params = new URLSearchParams();\n params.set('entity', filters.entity || 'mcpQuery,mcpTriage,mcpWorkflowPlanner');\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n params.set('sort_by', 'created_at');\n params.set('order', 'desc');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: [...MCP_QUERY_JOBS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-states/jobs?${params}`),\n });\n}\n\n/**\n * Get execution timeline for an mcpQuery workflow.\n */\nexport function useMcpQueryExecution(workflowId: string | undefined) {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpQueryExecution', workflowId],\n queryFn: () => apiFetch(`/workflow-states/${workflowId}/execution`),\n enabled: !!workflowId,\n });\n}\n\n/**\n * Get the result data from a completed mcpQuery workflow.\n */\nexport function useMcpQueryResult(workflowId: string | undefined) {\n return useQuery<{ workflowId: string; result: { type: string; data: Record<string, unknown> } }>({\n queryKey: ['mcpQueryResult', workflowId],\n queryFn: () => apiFetch(`/workflows/${workflowId}/result`),\n enabled: !!workflowId,\n retry: 2,\n });\n}\n\n/**\n * Generate a workflow description and tags from the original prompt + result.\n * Uses an LLM to produce a concise, catalog-style description.\n */\nexport function useDescribeMcpQuery(params: {\n prompt: string | undefined;\n resultTitle: string | undefined;\n resultSummary: string | undefined;\n}) {\n return useQuery<{ tool_name?: string; description: string; tags: string[] }>({\n queryKey: ['mcpQueryDescribe', params.prompt],\n queryFn: () =>\n apiFetch<{ tool_name?: string; description: string; tags: string[] }>('/insight/mcp-query/describe', {\n method: 'POST',\n body: JSON.stringify({\n prompt: params.prompt,\n result_title: params.resultTitle,\n result_summary: params.resultSummary,\n }),\n }),\n enabled: !!params.prompt,\n staleTime: Infinity,\n gcTime: 30 * 60_000,\n });\n}\n\n/**\n * Find a YAML workflow compiled from a specific mcpQuery execution.\n */\nexport function useYamlWorkflowForSource(sourceWorkflowId: string | undefined) {\n return useQuery<{ workflows: Array<{\n id: string; name: string; status: string; graph_topic: string;\n description?: string; tags?: string[]; app_id?: string;\n input_schema?: Record<string, unknown>;\n activity_manifest?: Array<{\n activity_id: string; title: string; type: string;\n tool_source: string; mcp_tool_name?: string;\n }>;\n original_prompt?: string;\n }> }>({\n queryKey: ['yamlWorkflowForSource', sourceWorkflowId],\n queryFn: () => apiFetch(`/yaml-workflows?source_workflow_id=${sourceWorkflowId}&limit=5`),\n enabled: !!sourceWorkflowId,\n });\n}\n"],"names":["MCP_QUERY_JOBS_KEY","useSubmitMcpQuery","queryClient","useQueryClient","useMutation","params","apiFetch","useSubmitMcpQueryRouted","useMcpQueryJobs","filters","useQuery","useMcpQueryExecution","workflowId","useMcpQueryResult","useDescribeMcpQuery","useYamlWorkflowForSource","sourceWorkflowId"],"mappings":"qGAcO,MAAMA,EAAqB,CAAC,cAAc,EAQ1C,SAASC,GAAoB,CAClC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,OAAQ,EAAA,CAAM,CAAA,CAC9D,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASK,GAA0B,CACxC,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,CAAA,CAChD,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASM,EAAgBC,EAM5B,GAAI,CACN,MAAMJ,EAAS,IAAI,gBACnB,OAAAA,EAAO,IAAI,SAAUI,EAAQ,QAAU,uCAAuC,EAC1EA,EAAQ,OAAOJ,EAAO,IAAI,QAAS,OAAOI,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWJ,EAAO,IAAI,SAAU,OAAOI,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACnDA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACvDJ,EAAO,IAAI,UAAW,YAAY,EAClCA,EAAO,IAAI,QAAS,MAAM,EAEnBK,EAA2C,CAChD,SAAU,CAAC,GAAGV,EAAoBS,CAAO,EACzC,QAAS,IAAMH,EAAS,yBAAyBD,CAAM,EAAE,CAAA,CAC1D,CACH,CAKO,SAASM,EAAqBC,EAAgC,CACnE,OAAOF,EAA4B,CACjC,SAAU,CAAC,oBAAqBE,CAAU,EAC1C,QAAS,IAAMN,EAAS,oBAAoBM,CAAU,YAAY,EAClE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAKO,SAASC,EAAkBD,EAAgC,CAChE,OAAOF,EAA0F,CAC/F,SAAU,CAAC,iBAAkBE,CAAU,EACvC,QAAS,IAAMN,EAAS,cAAcM,CAAU,SAAS,EACzD,QAAS,CAAC,CAACA,EACX,MAAO,CAAA,CACR,CACH,CAMO,SAASE,EAAoBT,EAIjC,CACD,OAAOK,EAAsE,CAC3E,SAAU,CAAC,mBAAoBL,EAAO,MAAM,EAC5C,QAAS,IACPC,EAAsE,8BAA+B,CACnG,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,OAAQD,EAAO,OACf,aAAcA,EAAO,YACrB,eAAgBA,EAAO,aAAA,CACxB,CAAA,CACF,EACH,QAAS,CAAC,CAACA,EAAO,OAClB,UAAW,IACX,OAAQ,GAAK,GAAA,CACd,CACH,CAKO,SAASU,EAAyBC,EAAsC,CAC7E,OAAON,EASD,CACJ,SAAU,CAAC,wBAAyBM,CAAgB,EACpD,QAAS,IAAMV,EAAS,sCAAsCU,CAAgB,UAAU,EACxF,QAAS,CAAC,CAACA,CAAA,CACZ,CACH"}
@@ -1,2 +1,2 @@
1
- import{u as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-DcpCR9c_.js";function a(t={}){const e=new URLSearchParams;return t.limit&&e.set("limit",String(t.limit)),t.offset!==void 0&&e.set("offset",String(t.offset)),t.entity&&e.set("entity",t.entity),t.search&&e.set("search",t.search),t.status&&e.set("status",t.status),t.sort_by&&e.set("sort_by",t.sort_by),t.order&&e.set("order",t.order),e.set("app_id",t.app_id||"longtail"),n({queryKey:["mcpRuns",t],queryFn:()=>u(`/mcp-runs?${e}`)})}function o(t="longtail"){return n({queryKey:["mcpEntities",t],queryFn:()=>u(`/mcp-runs/entities?app_id=${t}`)})}function r(t,e="longtail"){return n({queryKey:["mcpRunExecution",t,e],queryFn:()=>u(`/mcp-runs/${t}/execution?app_id=${e}`),enabled:!!t})}export{o as a,r as b,a as u};
2
- //# sourceMappingURL=mcp-runs-4fyRpegc.js.map
1
+ import{u as n}from"./vendor-query-DLp59M9_.js";import{b as u}from"./index-4T7Z_gQ4.js";function a(t={}){const e=new URLSearchParams;return t.limit&&e.set("limit",String(t.limit)),t.offset!==void 0&&e.set("offset",String(t.offset)),t.entity&&e.set("entity",t.entity),t.search&&e.set("search",t.search),t.status&&e.set("status",t.status),t.sort_by&&e.set("sort_by",t.sort_by),t.order&&e.set("order",t.order),e.set("app_id",t.app_id||"longtail"),n({queryKey:["mcpRuns",t],queryFn:()=>u(`/mcp-runs?${e}`)})}function o(t="longtail"){return n({queryKey:["mcpEntities",t],queryFn:()=>u(`/mcp-runs/entities?app_id=${t}`)})}function r(t,e="longtail"){return n({queryKey:["mcpRunExecution",t,e],queryFn:()=>u(`/mcp-runs/${t}/execution?app_id=${e}`),enabled:!!t})}export{o as a,r as b,a as u};
2
+ //# sourceMappingURL=mcp-runs-CAiEr5Fc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-runs-4fyRpegc.js","sources":["../../src/api/mcp-runs.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\ninterface McpRunFilters {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n app_id?: string;\n sort_by?: string;\n order?: string;\n}\n\nexport function useMcpRuns(filters: McpRunFilters = {}) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n params.set('app_id', filters.app_id || 'longtail');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['mcpRuns', filters],\n queryFn: () => apiFetch(`/mcp-runs?${params}`),\n });\n}\n\nexport function useMcpEntities(appId = 'longtail') {\n return useQuery<{ entities: string[] }>({\n queryKey: ['mcpEntities', appId],\n queryFn: () => apiFetch(`/mcp-runs/entities?app_id=${appId}`),\n });\n}\n\nexport function useMcpRunExecution(jobId: string, appId = 'longtail') {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpRunExecution', jobId, appId],\n queryFn: () => apiFetch(`/mcp-runs/${jobId}/execution?app_id=${appId}`),\n enabled: !!jobId,\n });\n}\n"],"names":["useMcpRuns","filters","params","useQuery","apiFetch","useMcpEntities","appId","useMcpRunExecution","jobId"],"mappings":"uFAeO,SAASA,EAAWC,EAAyB,GAAI,CACtD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,OAAOC,EAAO,IAAI,QAASD,EAAQ,KAAK,EACpDC,EAAO,IAAI,SAAUD,EAAQ,QAAU,UAAU,EAE1CE,EAA2C,CAChD,SAAU,CAAC,UAAWF,CAAO,EAC7B,QAAS,IAAMG,EAAS,aAAaF,CAAM,EAAE,CAAA,CAC9C,CACH,CAEO,SAASG,EAAeC,EAAQ,WAAY,CACjD,OAAOH,EAAiC,CACtC,SAAU,CAAC,cAAeG,CAAK,EAC/B,QAAS,IAAMF,EAAS,6BAA6BE,CAAK,EAAE,CAAA,CAC7D,CACH,CAEO,SAASC,EAAmBC,EAAeF,EAAQ,WAAY,CACpE,OAAOH,EAA4B,CACjC,SAAU,CAAC,kBAAmBK,EAAOF,CAAK,EAC1C,QAAS,IAAMF,EAAS,aAAaI,CAAK,qBAAqBF,CAAK,EAAE,EACtE,QAAS,CAAC,CAACE,CAAA,CACZ,CACH"}
1
+ {"version":3,"file":"mcp-runs-CAiEr5Fc.js","sources":["../../src/api/mcp-runs.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\ninterface McpRunFilters {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n app_id?: string;\n sort_by?: string;\n order?: string;\n}\n\nexport function useMcpRuns(filters: McpRunFilters = {}) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n params.set('app_id', filters.app_id || 'longtail');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['mcpRuns', filters],\n queryFn: () => apiFetch(`/mcp-runs?${params}`),\n });\n}\n\nexport function useMcpEntities(appId = 'longtail') {\n return useQuery<{ entities: string[] }>({\n queryKey: ['mcpEntities', appId],\n queryFn: () => apiFetch(`/mcp-runs/entities?app_id=${appId}`),\n });\n}\n\nexport function useMcpRunExecution(jobId: string, appId = 'longtail') {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpRunExecution', jobId, appId],\n queryFn: () => apiFetch(`/mcp-runs/${jobId}/execution?app_id=${appId}`),\n enabled: !!jobId,\n });\n}\n"],"names":["useMcpRuns","filters","params","useQuery","apiFetch","useMcpEntities","appId","useMcpRunExecution","jobId"],"mappings":"uFAeO,SAASA,EAAWC,EAAyB,GAAI,CACtD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,OAAOC,EAAO,IAAI,QAASD,EAAQ,KAAK,EACpDC,EAAO,IAAI,SAAUD,EAAQ,QAAU,UAAU,EAE1CE,EAA2C,CAChD,SAAU,CAAC,UAAWF,CAAO,EAC7B,QAAS,IAAMG,EAAS,aAAaF,CAAM,EAAE,CAAA,CAC9C,CACH,CAEO,SAASG,EAAeC,EAAQ,WAAY,CACjD,OAAOH,EAAiC,CACtC,SAAU,CAAC,cAAeG,CAAK,EAC/B,QAAS,IAAMF,EAAS,6BAA6BE,CAAK,EAAE,CAAA,CAC7D,CACH,CAEO,SAASC,EAAmBC,EAAeF,EAAQ,WAAY,CACpE,OAAOH,EAA4B,CACjC,SAAU,CAAC,kBAAmBK,EAAOF,CAAK,EAC1C,QAAS,IAAMF,EAAS,aAAaI,CAAK,qBAAqBF,CAAK,EAAE,EACtE,QAAS,CAAC,CAACE,CAAA,CACZ,CACH"}
@@ -0,0 +1,2 @@
1
+ import{u as e}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-4T7Z_gQ4.js";function u(){return e({queryKey:["namespaces"],queryFn:()=>s("/namespaces")})}export{u};
2
+ //# sourceMappingURL=namespaces-sVr5scma.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"namespaces-BBTvHnRF.js","sources":["../../src/api/namespaces.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface LTNamespace {\n id: string;\n name: string;\n description: string | null;\n schema_name: string;\n is_default: boolean;\n metadata: Record<string, unknown> | null;\n created_at: string;\n updated_at: string;\n}\n\nexport function useNamespaces() {\n return useQuery<{ namespaces: LTNamespace[] }>({\n queryKey: ['namespaces'],\n queryFn: () => apiFetch('/namespaces'),\n });\n}\n"],"names":["useNamespaces","useQuery","apiFetch"],"mappings":"uFAcO,SAASA,GAAgB,CAC9B,OAAOC,EAAwC,CAC7C,SAAU,CAAC,YAAY,EACvB,QAAS,IAAMC,EAAS,aAAa,CAAA,CACtC,CACH"}
1
+ {"version":3,"file":"namespaces-sVr5scma.js","sources":["../../src/api/namespaces.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface LTNamespace {\n id: string;\n name: string;\n description: string | null;\n schema_name: string;\n is_default: boolean;\n metadata: Record<string, unknown> | null;\n created_at: string;\n updated_at: string;\n}\n\nexport function useNamespaces() {\n return useQuery<{ namespaces: LTNamespace[] }>({\n queryKey: ['namespaces'],\n queryFn: () => apiFetch('/namespaces'),\n });\n}\n"],"names":["useNamespaces","useQuery","apiFetch"],"mappings":"uFAcO,SAASA,GAAgB,CAC9B,OAAOC,EAAwC,CAC7C,SAAU,CAAC,YAAY,EACvB,QAAS,IAAMC,EAAS,aAAa,CAAA,CACtC,CACH"}