@hotmeshio/long-tail 0.2.10 → 0.3.1

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 (241) hide show
  1. package/build/api/topics.d.ts +22 -0
  2. package/build/api/topics.js +104 -0
  3. package/build/index.d.ts +3 -1
  4. package/build/index.js +7 -2
  5. package/build/lib/db/schemas/007_topic_catalog.sql +27 -0
  6. package/build/routes/index.js +2 -0
  7. package/build/routes/topics.d.ts +2 -0
  8. package/build/routes/topics.js +90 -0
  9. package/build/services/topics/index.d.ts +77 -0
  10. package/build/services/topics/index.js +116 -0
  11. package/build/services/topics/sql.d.ts +10 -0
  12. package/build/services/topics/sql.js +80 -0
  13. package/build/services/topics/system-topics.d.ts +11 -0
  14. package/build/services/topics/system-topics.js +270 -0
  15. package/build/start/workers.js +5 -0
  16. package/build/system/mcp-servers/events.js +73 -1
  17. package/build/system/seed/tool-manifests-events.d.ts +75 -0
  18. package/build/system/seed/tool-manifests-events.js +27 -0
  19. package/build/tsconfig.tsbuildinfo +1 -1
  20. package/build/types/index.d.ts +2 -2
  21. package/build/types/startup.d.ts +27 -0
  22. package/dashboard/dist/assets/AdminDashboard-CbeSejVX.js +2 -0
  23. package/dashboard/dist/assets/{AdminDashboard-45Ya2uzl.js.map → AdminDashboard-CbeSejVX.js.map} +1 -1
  24. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js +13 -0
  25. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +1 -0
  26. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +4 -0
  27. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js.map +1 -0
  28. package/dashboard/dist/assets/{AgentsPage--I4d5y9J.js → AgentsPage-Bz61Nl-x.js} +2 -2
  29. package/dashboard/dist/assets/{AgentsPage--I4d5y9J.js.map → AgentsPage-Bz61Nl-x.js.map} +1 -1
  30. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +2 -0
  31. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js.map +1 -0
  32. package/dashboard/dist/assets/{BotPicker-DgbzCesR.js → BotPicker-kKBifD1w.js} +2 -2
  33. package/dashboard/dist/assets/{BotPicker-DgbzCesR.js.map → BotPicker-kKBifD1w.js.map} +1 -1
  34. package/dashboard/dist/assets/{CapabilitiesPage-B2S8_Gsc.js → CapabilitiesPage-Ch5qY0I7.js} +2 -2
  35. package/dashboard/dist/assets/{CapabilitiesPage-B2S8_Gsc.js.map → CapabilitiesPage-Ch5qY0I7.js.map} +1 -1
  36. package/dashboard/dist/assets/{CollapsibleSection-4Eo3b5ha.js → CollapsibleSection-kYTBL7dT.js} +2 -2
  37. package/dashboard/dist/assets/{CollapsibleSection-4Eo3b5ha.js.map → CollapsibleSection-kYTBL7dT.js.map} +1 -1
  38. package/dashboard/dist/assets/{ConfirmDeleteModal-Bac7RmDD.js → ConfirmDeleteModal-CcaAapMl.js} +2 -2
  39. package/dashboard/dist/assets/{ConfirmDeleteModal-Bac7RmDD.js.map → ConfirmDeleteModal-CcaAapMl.js.map} +1 -1
  40. package/dashboard/dist/assets/{CopyableId-BhwdwAJN.js → CopyableId-B4CL12pv.js} +2 -2
  41. package/dashboard/dist/assets/{CopyableId-BhwdwAJN.js.map → CopyableId-B4CL12pv.js.map} +1 -1
  42. package/dashboard/dist/assets/{CredentialsPage-CSEBaYx1.js → CredentialsPage-D1VAlwid.js} +2 -2
  43. package/dashboard/dist/assets/{CredentialsPage-CSEBaYx1.js.map → CredentialsPage-D1VAlwid.js.map} +1 -1
  44. package/dashboard/dist/assets/{CronLabel-DV2v2FlP.js → CronLabel-DRmO5rH0.js} +2 -2
  45. package/dashboard/dist/assets/{CronLabel-DV2v2FlP.js.map → CronLabel-DRmO5rH0.js.map} +1 -1
  46. package/dashboard/dist/assets/CustomDurationPicker-C06QDDir.js +2 -0
  47. package/dashboard/dist/assets/{CustomDurationPicker-B_Oxq_nK.js.map → CustomDurationPicker-C06QDDir.js.map} +1 -1
  48. package/dashboard/dist/assets/{DataTable-etck0Zmp.js → DataTable-J5R6mepB.js} +2 -2
  49. package/dashboard/dist/assets/{DataTable-etck0Zmp.js.map → DataTable-J5R6mepB.js.map} +1 -1
  50. package/dashboard/dist/assets/{DropZone-BDpzHWsI.js → DropZone-DwNj3GiG.js} +2 -2
  51. package/dashboard/dist/assets/{DropZone-BDpzHWsI.js.map → DropZone-DwNj3GiG.js.map} +1 -1
  52. package/dashboard/dist/assets/{ElapsedCell-D35Z-HSJ.js → ElapsedCell-ChyMzl9n.js} +2 -2
  53. package/dashboard/dist/assets/{ElapsedCell-D35Z-HSJ.js.map → ElapsedCell-ChyMzl9n.js.map} +1 -1
  54. package/dashboard/dist/assets/{EmptyState-Bk3_P-b8.js → EmptyState-BXGvOADa.js} +2 -2
  55. package/dashboard/dist/assets/{EmptyState-Bk3_P-b8.js.map → EmptyState-BXGvOADa.js.map} +1 -1
  56. package/dashboard/dist/assets/{EscalationsOverview-Bt6gGFW4.js → EscalationsOverview-DM6zmE4g.js} +2 -2
  57. package/dashboard/dist/assets/{EscalationsOverview-Bt6gGFW4.js.map → EscalationsOverview-DM6zmE4g.js.map} +1 -1
  58. package/dashboard/dist/assets/{EventTable-BMk93q8A.js → EventTable-CvJ98E8s.js} +2 -2
  59. package/dashboard/dist/assets/{EventTable-BMk93q8A.js.map → EventTable-CvJ98E8s.js.map} +1 -1
  60. package/dashboard/dist/assets/{EventTopicPill-9LcMnLF0.js → EventTopicPill-CB_rIGlL.js} +2 -2
  61. package/dashboard/dist/assets/{EventTopicPill-9LcMnLF0.js.map → EventTopicPill-CB_rIGlL.js.map} +1 -1
  62. package/dashboard/dist/assets/{FilterBar-CZGTOMoo.js → FilterBar-Bdssa-Xn.js} +2 -2
  63. package/dashboard/dist/assets/{FilterBar-CZGTOMoo.js.map → FilterBar-Bdssa-Xn.js.map} +1 -1
  64. package/dashboard/dist/assets/{HomePage-Dtk7mgmf.js → HomePage-BuZkdXZt.js} +2 -2
  65. package/dashboard/dist/assets/{HomePage-Dtk7mgmf.js.map → HomePage-BuZkdXZt.js.map} +1 -1
  66. package/dashboard/dist/assets/{ListToolbar-CJEzypCM.js → ListToolbar-jy8NL6ll.js} +2 -2
  67. package/dashboard/dist/assets/{ListToolbar-CJEzypCM.js.map → ListToolbar-jy8NL6ll.js.map} +1 -1
  68. package/dashboard/dist/assets/{McpOverview-ChUa4l3t.js → McpOverview-xkaKuHbX.js} +2 -2
  69. package/dashboard/dist/assets/{McpOverview-ChUa4l3t.js.map → McpOverview-xkaKuHbX.js.map} +1 -1
  70. package/dashboard/dist/assets/{McpQueryDetailPage-04CTIN0v.js → McpQueryDetailPage-D5ICn6cR.js} +2 -2
  71. package/dashboard/dist/assets/{McpQueryDetailPage-04CTIN0v.js.map → McpQueryDetailPage-D5ICn6cR.js.map} +1 -1
  72. package/dashboard/dist/assets/{McpQueryPage-DFnHFdbr.js → McpQueryPage-C46fzfm5.js} +2 -2
  73. package/dashboard/dist/assets/{McpQueryPage-DFnHFdbr.js.map → McpQueryPage-C46fzfm5.js.map} +1 -1
  74. package/dashboard/dist/assets/McpRunDetailPage-Znsl4Yc-.js +2 -0
  75. package/dashboard/dist/assets/{McpRunDetailPage-B95c3bFw.js.map → McpRunDetailPage-Znsl4Yc-.js.map} +1 -1
  76. package/dashboard/dist/assets/{McpRunsPage-DS43YmLU.js → McpRunsPage-DT-armx5.js} +2 -2
  77. package/dashboard/dist/assets/{McpRunsPage-DS43YmLU.js.map → McpRunsPage-DT-armx5.js.map} +1 -1
  78. package/dashboard/dist/assets/{Modal-EUrK2c_A.js → Modal-C6k6_5KB.js} +2 -2
  79. package/dashboard/dist/assets/{Modal-EUrK2c_A.js.map → Modal-C6k6_5KB.js.map} +1 -1
  80. package/dashboard/dist/assets/{OperatorDashboard-DBF_AbRH.js → OperatorDashboard-e5N3_dVl.js} +2 -2
  81. package/dashboard/dist/assets/{OperatorDashboard-DBF_AbRH.js.map → OperatorDashboard-e5N3_dVl.js.map} +1 -1
  82. package/dashboard/dist/assets/{PageHeader-BuUnJ5NY.js → PageHeader-COcgWWf-.js} +2 -2
  83. package/dashboard/dist/assets/{PageHeader-BuUnJ5NY.js.map → PageHeader-COcgWWf-.js.map} +1 -1
  84. package/dashboard/dist/assets/{PageHeaderWithStats-cQKaJBAM.js → PageHeaderWithStats-C0PCY3aJ.js} +2 -2
  85. package/dashboard/dist/assets/{PageHeaderWithStats-cQKaJBAM.js.map → PageHeaderWithStats-C0PCY3aJ.js.map} +1 -1
  86. package/dashboard/dist/assets/{PriorityBadge-Bl0_pgex.js → PriorityBadge-BQCsYMpM.js} +2 -2
  87. package/dashboard/dist/assets/{PriorityBadge-Bl0_pgex.js.map → PriorityBadge-BQCsYMpM.js.map} +1 -1
  88. package/dashboard/dist/assets/ProcessDetailPage-C03LOgI0.js +2 -0
  89. package/dashboard/dist/assets/{ProcessDetailPage-DgeXrHon.js.map → ProcessDetailPage-C03LOgI0.js.map} +1 -1
  90. package/dashboard/dist/assets/{ProcessesListPage-BGiiH4dW.js → ProcessesListPage-iyPsmlhm.js} +2 -2
  91. package/dashboard/dist/assets/{ProcessesListPage-BGiiH4dW.js.map → ProcessesListPage-iyPsmlhm.js.map} +1 -1
  92. package/dashboard/dist/assets/{RolePill-DsYF2JN9.js → RolePill-CHwys1f9.js} +2 -2
  93. package/dashboard/dist/assets/{RolePill-DsYF2JN9.js.map → RolePill-CHwys1f9.js.map} +1 -1
  94. package/dashboard/dist/assets/{RolesPage-CQ7vPamb.js → RolesPage-Bmc3XaUk.js} +2 -2
  95. package/dashboard/dist/assets/{RolesPage-CQ7vPamb.js.map → RolesPage-Bmc3XaUk.js.map} +1 -1
  96. package/dashboard/dist/assets/{RowActions-DBpvm3Jy.js → RowActions-Bs4PF-Gd.js} +2 -2
  97. package/dashboard/dist/assets/{RowActions-DBpvm3Jy.js.map → RowActions-Bs4PF-Gd.js.map} +1 -1
  98. package/dashboard/dist/assets/{RunAsSelector-ZLKGTYP_.js → RunAsSelector-DXzAr2WW.js} +2 -2
  99. package/dashboard/dist/assets/{RunAsSelector-ZLKGTYP_.js.map → RunAsSelector-DXzAr2WW.js.map} +1 -1
  100. package/dashboard/dist/assets/{ServerName-B5-E7gZD.js → ServerName-BIdLC1Ay.js} +2 -2
  101. package/dashboard/dist/assets/{ServerName-B5-E7gZD.js.map → ServerName-BIdLC1Ay.js.map} +1 -1
  102. package/dashboard/dist/assets/{StatCard-B7ySTryP.js → StatCard-OKzRSSx4.js} +2 -2
  103. package/dashboard/dist/assets/{StatCard-B7ySTryP.js.map → StatCard-OKzRSSx4.js.map} +1 -1
  104. package/dashboard/dist/assets/{StatusBadge-DNXTk01O.js → StatusBadge-CQlF46RR.js} +2 -2
  105. package/dashboard/dist/assets/{StatusBadge-DNXTk01O.js.map → StatusBadge-CQlF46RR.js.map} +1 -1
  106. package/dashboard/dist/assets/{StepIndicator-ftNmaJsu.js → StepIndicator-CP7eycjI.js} +2 -2
  107. package/dashboard/dist/assets/{StepIndicator-ftNmaJsu.js.map → StepIndicator-CP7eycjI.js.map} +1 -1
  108. package/dashboard/dist/assets/{StickyPagination-CI5AyVVd.js → StickyPagination-CGk8VAKt.js} +2 -2
  109. package/dashboard/dist/assets/{StickyPagination-CI5AyVVd.js.map → StickyPagination-CGk8VAKt.js.map} +1 -1
  110. package/dashboard/dist/assets/{SwimlaneTimeline-BA4aFrHf.js → SwimlaneTimeline-MEUPc3yJ.js} +2 -2
  111. package/dashboard/dist/assets/{SwimlaneTimeline-BA4aFrHf.js.map → SwimlaneTimeline-MEUPc3yJ.js.map} +1 -1
  112. package/dashboard/dist/assets/{TagInput-DfbVwc27.js → TagInput-BGxXKiWD.js} +2 -2
  113. package/dashboard/dist/assets/{TagInput-DfbVwc27.js.map → TagInput-BGxXKiWD.js.map} +1 -1
  114. package/dashboard/dist/assets/{TaskDetailPage-A_kHjYRn.js → TaskDetailPage-pN5BXzYA.js} +2 -2
  115. package/dashboard/dist/assets/{TaskDetailPage-A_kHjYRn.js.map → TaskDetailPage-pN5BXzYA.js.map} +1 -1
  116. package/dashboard/dist/assets/{TaskQueuePill-Dtsa8CPO.js → TaskQueuePill-bw8ieKsf.js} +2 -2
  117. package/dashboard/dist/assets/{TaskQueuePill-Dtsa8CPO.js.map → TaskQueuePill-bw8ieKsf.js.map} +1 -1
  118. package/dashboard/dist/assets/{TasksListPage-Cw46VTuA.js → TasksListPage-D1INzcrA.js} +2 -2
  119. package/dashboard/dist/assets/{TasksListPage-Cw46VTuA.js.map → TasksListPage-D1INzcrA.js.map} +1 -1
  120. package/dashboard/dist/assets/{TimeAgo-Cx1kK1id.js → TimeAgo-CywLVIBA.js} +2 -2
  121. package/dashboard/dist/assets/{TimeAgo-Cx1kK1id.js.map → TimeAgo-CywLVIBA.js.map} +1 -1
  122. package/dashboard/dist/assets/{TimestampCell-VDp4nVn6.js → TimestampCell-B4Pc6f3A.js} +2 -2
  123. package/dashboard/dist/assets/{TimestampCell-VDp4nVn6.js.map → TimestampCell-B4Pc6f3A.js.map} +1 -1
  124. package/dashboard/dist/assets/{ToolPill-BNaTJhu8.js → ToolPill-DdLN3JOT.js} +2 -2
  125. package/dashboard/dist/assets/{ToolPill-BNaTJhu8.js.map → ToolPill-DdLN3JOT.js.map} +1 -1
  126. package/dashboard/dist/assets/{ToolTestPanel-BickLBjP.js → ToolTestPanel-DusbUka5.js} +2 -2
  127. package/dashboard/dist/assets/{ToolTestPanel-BickLBjP.js.map → ToolTestPanel-DusbUka5.js.map} +1 -1
  128. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +9 -0
  129. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +1 -0
  130. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js +2 -0
  131. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js.map +1 -0
  132. package/dashboard/dist/assets/{UserName-DCdb6xnk.js → UserName-CLbusknU.js} +2 -2
  133. package/dashboard/dist/assets/{UserName-DCdb6xnk.js.map → UserName-CLbusknU.js.map} +1 -1
  134. package/dashboard/dist/assets/{WorkflowExecutionPage-BZfxY1iB.js → WorkflowExecutionPage-C61R-3Gg.js} +2 -2
  135. package/dashboard/dist/assets/{WorkflowExecutionPage-BZfxY1iB.js.map → WorkflowExecutionPage-C61R-3Gg.js.map} +1 -1
  136. package/dashboard/dist/assets/{WorkflowPill-BzhfqGa-.js → WorkflowPill-7vt2F6wR.js} +2 -2
  137. package/dashboard/dist/assets/{WorkflowPill-BzhfqGa-.js.map → WorkflowPill-7vt2F6wR.js.map} +1 -1
  138. package/dashboard/dist/assets/{WorkflowsDashboard-B7M8kPoH.js → WorkflowsDashboard-BWiUNvyl.js} +2 -2
  139. package/dashboard/dist/assets/{WorkflowsDashboard-B7M8kPoH.js.map → WorkflowsDashboard-BWiUNvyl.js.map} +1 -1
  140. package/dashboard/dist/assets/{WorkflowsOverview-1V8vQ-mo.js → WorkflowsOverview-DA2ZOs7D.js} +2 -2
  141. package/dashboard/dist/assets/{WorkflowsOverview-1V8vQ-mo.js.map → WorkflowsOverview-DA2ZOs7D.js.map} +1 -1
  142. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +2 -0
  143. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js.map +1 -0
  144. package/dashboard/dist/assets/{agents-SXs4tMLb.js → agents-Dga6NU7U.js} +2 -2
  145. package/dashboard/dist/assets/{agents-SXs4tMLb.js.map → agents-Dga6NU7U.js.map} +1 -1
  146. package/dashboard/dist/assets/{bots-Ci5aCzDK.js → bots-CtU4i4OQ.js} +2 -2
  147. package/dashboard/dist/assets/{bots-Ci5aCzDK.js.map → bots-CtU4i4OQ.js.map} +1 -1
  148. package/dashboard/dist/assets/{controlplane-BiPTCZeL.js → controlplane-BVoALhbL.js} +2 -2
  149. package/dashboard/dist/assets/{controlplane-BiPTCZeL.js.map → controlplane-BVoALhbL.js.map} +1 -1
  150. package/dashboard/dist/assets/escalation-_N5GfuIi.js +2 -0
  151. package/dashboard/dist/assets/escalation-_N5GfuIi.js.map +1 -0
  152. package/dashboard/dist/assets/{escalation-columns-Bpp7Sdbd.js → escalation-columns-CoTmTpHp.js} +2 -2
  153. package/dashboard/dist/assets/escalation-columns-CoTmTpHp.js.map +1 -0
  154. package/dashboard/dist/assets/{helpers-CQZkvg6D.js → helpers-Dz2U3Ctb.js} +2 -2
  155. package/dashboard/dist/assets/{helpers-CQZkvg6D.js.map → helpers-Dz2U3Ctb.js.map} +1 -1
  156. package/dashboard/dist/assets/{index-C7FUIcaY.js → index-6Kd78p_v.js} +2 -2
  157. package/dashboard/dist/assets/{index-C7FUIcaY.js.map → index-6Kd78p_v.js.map} +1 -1
  158. package/dashboard/dist/assets/{index-DOE7HCzb.js → index-B9ealjkt.js} +4 -4
  159. package/dashboard/dist/assets/{index-DOE7HCzb.js.map → index-B9ealjkt.js.map} +1 -1
  160. package/dashboard/dist/assets/index-BIUHY2Jz.css +1 -0
  161. package/dashboard/dist/assets/{index-hfravTJF.js → index-BWHDW_CF.js} +2 -2
  162. package/dashboard/dist/assets/{index-hfravTJF.js.map → index-BWHDW_CF.js.map} +1 -1
  163. package/dashboard/dist/assets/{index-DtbAmRkr.js → index-BYwPVJv0.js} +2 -2
  164. package/dashboard/dist/assets/{index-DtbAmRkr.js.map → index-BYwPVJv0.js.map} +1 -1
  165. package/dashboard/dist/assets/index-CCOSf1PY.js +281 -0
  166. package/dashboard/dist/assets/index-CCOSf1PY.js.map +1 -0
  167. package/dashboard/dist/assets/{index-DV0_tQW3.js → index-CS61sh5q.js} +2 -2
  168. package/dashboard/dist/assets/{index-DV0_tQW3.js.map → index-CS61sh5q.js.map} +1 -1
  169. package/dashboard/dist/assets/index-CtbG3UN-.js +5 -0
  170. package/dashboard/dist/assets/index-CtbG3UN-.js.map +1 -0
  171. package/dashboard/dist/assets/{index-CSsOukxa.js → index-DWUunWxh.js} +2 -2
  172. package/dashboard/dist/assets/{index-CSsOukxa.js.map → index-DWUunWxh.js.map} +1 -1
  173. package/dashboard/dist/assets/{index-COiEQlp9.js → index-D_H_Prht.js} +2 -2
  174. package/dashboard/dist/assets/{index-COiEQlp9.js.map → index-D_H_Prht.js.map} +1 -1
  175. package/dashboard/dist/assets/{index-q4T_i7zT.js → index-Dpjguclc.js} +2 -2
  176. package/dashboard/dist/assets/{index-q4T_i7zT.js.map → index-Dpjguclc.js.map} +1 -1
  177. package/dashboard/dist/assets/{index-OTsFiHXP.js → index-QicYdUsl.js} +2 -2
  178. package/dashboard/dist/assets/index-QicYdUsl.js.map +1 -0
  179. package/dashboard/dist/assets/{index-Bp5f2OWJ.js → index-dM-OgCY3.js} +2 -2
  180. package/dashboard/dist/assets/{index-Bp5f2OWJ.js.map → index-dM-OgCY3.js.map} +1 -1
  181. package/dashboard/dist/assets/{knowledge-D8osen1O.js → knowledge-DJlebU82.js} +2 -2
  182. package/dashboard/dist/assets/{knowledge-D8osen1O.js.map → knowledge-DJlebU82.js.map} +1 -1
  183. package/dashboard/dist/assets/{mcp-CUFhWTyT.js → mcp-CsLJ5SRm.js} +2 -2
  184. package/dashboard/dist/assets/{mcp-CUFhWTyT.js.map → mcp-CsLJ5SRm.js.map} +1 -1
  185. package/dashboard/dist/assets/{mcp-query-n1t4sNm7.js → mcp-query-WNK1ItRV.js} +2 -2
  186. package/dashboard/dist/assets/{mcp-query-n1t4sNm7.js.map → mcp-query-WNK1ItRV.js.map} +1 -1
  187. package/dashboard/dist/assets/{mcp-runs-BkRnXbcq.js → mcp-runs-DtTTsuPH.js} +2 -2
  188. package/dashboard/dist/assets/{mcp-runs-BkRnXbcq.js.map → mcp-runs-DtTTsuPH.js.map} +1 -1
  189. package/dashboard/dist/assets/{namespaces-CacF05ft.js → namespaces-iRejH3_A.js} +2 -2
  190. package/dashboard/dist/assets/{namespaces-CacF05ft.js.map → namespaces-iRejH3_A.js.map} +1 -1
  191. package/dashboard/dist/assets/{roles-CjLCgM_6.js → roles-3Jm5KtKc.js} +2 -2
  192. package/dashboard/dist/assets/{roles-CjLCgM_6.js.map → roles-3Jm5KtKc.js.map} +1 -1
  193. package/dashboard/dist/assets/settings-DmN2I-c6.js +2 -0
  194. package/dashboard/dist/assets/settings-DmN2I-c6.js.map +1 -0
  195. package/dashboard/dist/assets/{tasks-BLCzIHol.js → tasks-Cc-QoITQ.js} +2 -2
  196. package/dashboard/dist/assets/{tasks-BLCzIHol.js.map → tasks-Cc-QoITQ.js.map} +1 -1
  197. package/dashboard/dist/assets/topics-p8anbgi0.js +2 -0
  198. package/dashboard/dist/assets/topics-p8anbgi0.js.map +1 -0
  199. package/dashboard/dist/assets/{useEventHooks-AwwZnweF.js → useEventHooks-VaJ52jMm.js} +2 -2
  200. package/dashboard/dist/assets/{useEventHooks-AwwZnweF.js.map → useEventHooks-VaJ52jMm.js.map} +1 -1
  201. package/dashboard/dist/assets/{useYamlActivityEvents-9Zs0PXY6.js → useYamlActivityEvents-BU4Uhksl.js} +2 -2
  202. package/dashboard/dist/assets/{useYamlActivityEvents-9Zs0PXY6.js.map → useYamlActivityEvents-BU4Uhksl.js.map} +1 -1
  203. package/dashboard/dist/assets/{users-BtLRzvZE.js → users-oXOlnold.js} +2 -2
  204. package/dashboard/dist/assets/{users-BtLRzvZE.js.map → users-oXOlnold.js.map} +1 -1
  205. package/dashboard/dist/assets/{vendor-icons-1qQ3NKfa.js → vendor-icons-CBOM6Es0.js} +99 -94
  206. package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +1 -0
  207. package/dashboard/dist/assets/{workflows-B9xdIsfM.js → workflows-Yq7cK-vR.js} +2 -2
  208. package/dashboard/dist/assets/{workflows-B9xdIsfM.js.map → workflows-Yq7cK-vR.js.map} +1 -1
  209. package/dashboard/dist/assets/{yaml-workflows-xOJxyEsQ.js → yaml-workflows-Ch53yD43.js} +2 -2
  210. package/dashboard/dist/assets/{yaml-workflows-xOJxyEsQ.js.map → yaml-workflows-Ch53yD43.js.map} +1 -1
  211. package/dashboard/dist/index.html +3 -3
  212. package/docs/agents.md +6 -0
  213. package/docs/api/http/topics.md +164 -0
  214. package/docs/api/sdk/topics.md +204 -0
  215. package/docs/dashboard.md +22 -0
  216. package/docs/events.md +7 -0
  217. package/docs/sdk.md +15 -0
  218. package/docs/topics.md +154 -0
  219. package/package.json +2 -2
  220. package/dashboard/dist/assets/AdminDashboard-45Ya2uzl.js +0 -2
  221. package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js +0 -13
  222. package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js.map +0 -1
  223. package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js +0 -4
  224. package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js.map +0 -1
  225. package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js +0 -2
  226. package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js.map +0 -1
  227. package/dashboard/dist/assets/CustomDurationPicker-B_Oxq_nK.js +0 -2
  228. package/dashboard/dist/assets/McpRunDetailPage-B95c3bFw.js +0 -2
  229. package/dashboard/dist/assets/ProcessDetailPage-DgeXrHon.js +0 -2
  230. package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js +0 -2
  231. package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js.map +0 -1
  232. package/dashboard/dist/assets/escalation-D-zr9D9G.js +0 -2
  233. package/dashboard/dist/assets/escalation-D-zr9D9G.js.map +0 -1
  234. package/dashboard/dist/assets/escalation-columns-Bpp7Sdbd.js.map +0 -1
  235. package/dashboard/dist/assets/index-BciXgS35.css +0 -1
  236. package/dashboard/dist/assets/index-Da8R5Fn_.js +0 -281
  237. package/dashboard/dist/assets/index-Da8R5Fn_.js.map +0 -1
  238. package/dashboard/dist/assets/index-DzL5pT70.js +0 -5
  239. package/dashboard/dist/assets/index-DzL5pT70.js.map +0 -1
  240. package/dashboard/dist/assets/index-OTsFiHXP.js.map +0 -1
  241. package/dashboard/dist/assets/vendor-icons-1qQ3NKfa.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-C7FUIcaY.js","sources":["../../src/pages/knowledge/KnowledgeEntryView.tsx","../../src/pages/knowledge/CreateEntryModal.tsx","../../src/pages/knowledge/KnowledgePage.tsx"],"sourcesContent":["import { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useGetKnowledge, useDeleteKnowledge, useStoreKnowledge, useSetKnowledgeField, useRemoveKnowledgeField } from '../../api/knowledge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { TagInput } from '../../components/common/form/TagInput';\n\ninterface KnowledgeEntryViewProps {\n domain: string;\n entryKey: string;\n onDeleted: () => void;\n}\n\ntype EditingCell = { field: string; column: 'field' | 'value' } | null;\n\nfunction formatValue(val: unknown): string {\n if (val === null || val === undefined) return '';\n if (typeof val === 'string') return val;\n return JSON.stringify(val, null, 2);\n}\n\nfunction parseValue(raw: string): { value: unknown; looksLikeJson: boolean; parsedOk: boolean } {\n const trimmed = raw.trim();\n if (!trimmed) return { value: '', looksLikeJson: false, parsedOk: false };\n const looksLikeJson = trimmed.startsWith('{') || trimmed.startsWith('[');\n try {\n return { value: JSON.parse(trimmed), looksLikeJson, parsedOk: true };\n } catch {\n return { value: trimmed, looksLikeJson, parsedOk: false };\n }\n}\n\nfunction isSimple(val: unknown): boolean {\n if (typeof val === 'string') {\n const t = val.trim();\n // Strings that look like JSON render as structured\n if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) return false;\n return true;\n }\n return typeof val === 'number' || typeof val === 'boolean' || val === null;\n}\n\nfunction AutoTextarea({ value, onChange, onKeyDown, placeholder, mono }: {\n value: string;\n onChange: (v: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n placeholder?: string;\n mono?: boolean;\n}) {\n const ref = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.style.height = 'auto';\n ref.current.style.height = `${ref.current.scrollHeight}px`;\n ref.current.focus();\n }\n }, [value]);\n\n return (\n <textarea\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n rows={1}\n className={`w-full bg-transparent text-xs text-text-primary resize-none outline-none p-0 ${mono ? 'font-mono' : ''}`}\n style={{ minHeight: '1.5em' }}\n />\n );\n}\n\nexport function KnowledgeEntryView({ domain, entryKey, onDeleted }: KnowledgeEntryViewProps) {\n const { data: entry, isLoading, refetch } = useGetKnowledge(domain, entryKey);\n const deleteMutation = useDeleteKnowledge();\n const storeMutation = useStoreKnowledge();\n const setFieldMutation = useSetKnowledgeField();\n const removeFieldMutation = useRemoveKnowledgeField();\n\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [editing, setEditing] = useState<EditingCell>(null);\n const [draft, setDraft] = useState('');\n const [ghostField, setGhostField] = useState('');\n const [ghostValue, setGhostValue] = useState('');\n const [pendingRemove, setPendingRemove] = useState<string | null>(null);\n const [jsonHint, setJsonHint] = useState<string | null>(null);\n const [editingTags, setEditingTags] = useState(false);\n\n const data = entry?.data as Record<string, unknown> | undefined;\n const allFields = data ? Object.entries(data) : [];\n\n // Ghost field input doubles as a filter — if text is entered but not yet saved,\n // narrow the visible rows to matching field names\n const fields = useMemo(() => {\n const q = ghostField.trim().toLowerCase();\n if (!q) return allFields;\n return allFields.filter(([field]) => field.toLowerCase().includes(q));\n }, [allFields, ghostField]);\n\n const originalValue = useCallback((field: string, column: 'field' | 'value'): string => {\n if (column === 'field') return field;\n return formatValue(data?.[field]);\n }, [data]);\n\n const isDirty = editing\n ? draft !== originalValue(editing.field, editing.column)\n : false;\n\n function startEdit(field: string, column: 'field' | 'value') {\n setEditing({ field, column });\n setDraft(originalValue(field, column));\n setPendingRemove(null);\n }\n\n function cancelEdit() {\n setEditing(null);\n setDraft('');\n }\n\n function showJsonHint() {\n setJsonHint('Invalid JSON — saved as text');\n setTimeout(() => setJsonHint(null), 4000);\n }\n\n async function commitEdit() {\n if (!editing || !data) return;\n const { field, column } = editing;\n\n if (column === 'value') {\n const { value: parsed, looksLikeJson, parsedOk } = parseValue(draft);\n if (looksLikeJson && !parsedOk) showJsonHint();\n // Use setField for surgical update — preserves siblings\n await setFieldMutation.mutateAsync({ domain, key: entryKey, path: field, value: parsed });\n } else {\n // Rename: remove old field, set new field\n const newName = draft.trim();\n if (!newName || newName === field) { cancelEdit(); return; }\n const val = data[field];\n await removeFieldMutation.mutateAsync({ domain, key: entryKey, path: field });\n await setFieldMutation.mutateAsync({ domain, key: entryKey, path: newName, value: val });\n }\n\n setEditing(null);\n setDraft('');\n refetch();\n }\n\n async function removeField(field: string) {\n await removeFieldMutation.mutateAsync({ domain, key: entryKey, path: field });\n setPendingRemove(null);\n setEditing(null);\n refetch();\n }\n\n async function saveTags(tags: string[]) {\n await storeMutation.mutateAsync({\n domain,\n key: entryKey,\n data: data || {},\n tags,\n replace: true,\n });\n refetch();\n }\n\n async function commitGhostRow() {\n const name = ghostField.trim();\n if (!name) return;\n const { value, looksLikeJson, parsedOk } = parseValue(ghostValue);\n if (looksLikeJson && !parsedOk) showJsonHint();\n const updated = { ...data, [name]: value || '' };\n await storeMutation.mutateAsync({ domain, key: entryKey, data: updated });\n setGhostField('');\n setGhostValue('');\n refetch();\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') {\n cancelEdit();\n } else if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n commitEdit();\n }\n }\n\n function handleGhostKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') {\n setGhostField('');\n setGhostValue('');\n } else if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n commitGhostRow();\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-3 mt-4\">\n <div className=\"h-4 bg-surface-sunken rounded w-1/3\" />\n <div className=\"h-48 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!entry || entry.found === false) {\n return <p className=\"text-sm text-text-tertiary mt-4\">Entry not found.</p>;\n }\n\n return (\n <div>\n {/* Metadata + actions bar */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-4 min-h-[28px]\">\n {editingTags ? (\n <div className=\"flex items-center gap-2\">\n <TagInput\n tags={entry.tags || []}\n onChange={(tags) => { saveTags(tags); }}\n placeholder=\"Add tag...\"\n compact\n />\n <button\n onClick={() => setEditingTags(false)}\n className=\"text-[10px] text-text-tertiary hover:text-text-secondary shrink-0\"\n >\n Done\n </button>\n </div>\n ) : (\n <div\n className=\"flex items-center gap-1 cursor-text group\"\n onClick={() => setEditingTags(true)}\n title=\"Click to edit tags\"\n >\n {entry.tags && entry.tags.length > 0 ? (\n entry.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-medium bg-accent/10 text-accent\">\n {tag}\n </span>\n ))\n ) : (\n <span className=\"text-[10px] text-text-tertiary/40 italic group-hover:text-text-tertiary\">add tags...</span>\n )}\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] text-text-tertiary\"><TimeAgo date={entry.updated_at} /></span>\n {confirmDelete ? (\n <span className=\"flex items-center gap-2 text-[10px]\">\n <span className=\"text-status-error\">Delete entry?</span>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync({ domain, key: entryKey });\n onDeleted();\n } catch { /* */ }\n }}\n className=\"font-medium text-status-error hover:text-status-error/80\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Yes'}\n </button>\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"text-text-tertiary hover:text-text-secondary\"\n >\n No\n </button>\n </span>\n ) : (\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"text-text-tertiary/50 hover:text-status-error transition-colors\"\n title=\"Delete entry\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n\n {jsonHint && (\n <div className=\"flex items-center justify-end gap-2 mb-2 px-1\">\n <span className=\"inline-block w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n <span className=\"text-xs text-status-warning\">{jsonHint}</span>\n </div>\n )}\n\n {/* Field/value grid */}\n <table className=\"w-full border-collapse\">\n <thead className=\"sticky top-0 z-10 bg-surface\">\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary border-b border-surface-border\">\n <th className=\"px-3 py-2 font-medium w-[200px] border-r border-surface-border\">Field</th>\n <th className=\"px-3 py-2 font-medium\">Value</th>\n </tr>\n {/* Input row — add new field or filter existing */}\n <tr className=\"border-b border-surface-border bg-surface\">\n <td className=\"px-3 py-2 align-top border-r border-surface-border\">\n <input\n value={ghostField}\n onChange={(e) => setGhostField(e.target.value)}\n onKeyDown={handleGhostKeyDown}\n placeholder={allFields.length ? 'add or filter...' : 'new field'}\n className=\"w-full bg-transparent text-xs text-text-primary placeholder:text-text-tertiary/40 placeholder:italic outline-none p-0\"\n />\n </td>\n <td className=\"px-3 py-2 align-top\">\n <AutoTextarea\n value={ghostValue}\n onChange={setGhostValue}\n onKeyDown={handleGhostKeyDown}\n placeholder=\"value\"\n />\n {ghostField.trim() && (\n <div className=\"flex gap-2 mt-1.5\">\n <button\n onClick={commitGhostRow}\n className=\"text-[10px] font-medium text-accent hover:text-accent-hover\"\n disabled={storeMutation.isPending}\n >\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n <button\n onClick={() => { setGhostField(''); setGhostValue(''); }}\n className=\"text-[10px] text-text-tertiary hover:text-text-secondary\"\n >\n Cancel\n </button>\n </div>\n )}\n </td>\n </tr>\n </thead>\n <tbody>\n {fields.map(([field, value]) => {\n const isEditingField = editing?.field === field && editing.column === 'field';\n const isEditingValue = editing?.field === field && editing.column === 'value';\n const isActive = isEditingField || isEditingValue;\n const isRemoving = pendingRemove === field;\n\n return (\n <tr key={field} className={`border-b border-surface-border ${isRemoving ? 'bg-status-error/10' : isActive ? '' : 'hover:bg-surface-hover/30'}`}>\n {/* Field name cell */}\n <td\n className={`px-3 py-2 align-top border-r cursor-text ${isRemoving ? 'bg-transparent border-r-transparent' : isEditingField ? 'border-r-surface-border bg-accent/5 border-l-2 border-l-accent' : 'border-r-surface-border'}`}\n onClick={() => !isEditingField && !isRemoving && startEdit(field, 'field')}\n >\n {isEditingField ? (\n <div>\n <AutoTextarea value={draft} onChange={setDraft} onKeyDown={handleKeyDown} placeholder=\"field name\" />\n {isDirty && (\n <div className=\"flex gap-2 mt-1.5\">\n <button onClick={commitEdit} className=\"text-[10px] font-medium text-accent hover:text-accent-hover\" disabled={storeMutation.isPending}>\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n <button onClick={cancelEdit} className=\"text-[10px] text-text-tertiary hover:text-text-secondary\">Cancel</button>\n </div>\n )}\n </div>\n ) : (\n <span className=\"text-xs font-medium text-text-secondary break-all\">{field}</span>\n )}\n </td>\n\n {/* Value cell */}\n <td\n className={`px-3 py-2 align-top cursor-text ${isRemoving ? 'bg-transparent' : isEditingValue ? 'bg-accent/5 border-l-2 border-l-accent' : ''}`}\n onClick={() => !isEditingValue && !isRemoving && startEdit(field, 'value')}\n >\n {isRemoving ? (\n <span className=\"flex items-center justify-end gap-2 text-[10px]\">\n <span className=\"text-status-error\">Remove <span className=\"font-medium\">{field}</span>?</span>\n <button\n onClick={(e) => { e.stopPropagation(); removeField(field); }}\n className=\"font-medium text-status-error hover:text-status-error/80\"\n disabled={storeMutation.isPending}\n >\n {storeMutation.isPending ? '...' : 'Yes'}\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); setPendingRemove(null); }}\n className=\"text-text-tertiary hover:text-text-secondary\"\n >\n No\n </button>\n </span>\n ) : isEditingValue ? (\n <div>\n <AutoTextarea\n value={draft}\n onChange={setDraft}\n onKeyDown={handleKeyDown}\n placeholder=\"value (string or JSON)\"\n mono={!isSimple(value)}\n />\n <div className=\"flex gap-2 mt-1.5\">\n {isDirty && (\n <button onClick={commitEdit} className=\"text-[10px] font-medium text-accent hover:text-accent-hover\" disabled={storeMutation.isPending}>\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n )}\n <button onClick={cancelEdit} className=\"text-[10px] text-text-tertiary hover:text-text-secondary\">Cancel</button>\n <button\n onClick={(e) => { e.stopPropagation(); setPendingRemove(field); }}\n className=\"text-[10px] text-status-error/50 hover:text-status-error ml-auto\"\n >\n Remove\n </button>\n </div>\n </div>\n ) : (\n isSimple(value) ? (\n <p className=\"text-xs text-text-primary break-words whitespace-pre-wrap\">{String(value)}</p>\n ) : (\n <pre className=\"text-xs text-text-primary font-mono whitespace-pre-wrap break-words\">\n {typeof value === 'string' ? value : JSON.stringify(value, null, 2)}\n </pre>\n )\n )}\n </td>\n </tr>\n );\n })}\n\n </tbody>\n </table>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStoreKnowledge, useListDomains } from '../../api/knowledge';\n\ninterface CreateEntryModalProps {\n open: boolean;\n onClose: () => void;\n onCreated?: (domain: string, key: string) => void;\n /** Pre-fill data from a dropped JSON file */\n prefillData?: Record<string, unknown>;\n /** Pre-fill domain from current navigation */\n prefillDomain?: string;\n}\n\nexport function CreateEntryModal({ open, onClose, onCreated, prefillData, prefillDomain }: CreateEntryModalProps) {\n const { data: domainsData } = useListDomains();\n const storeMutation = useStoreKnowledge();\n const [domain, setDomain] = useState(prefillDomain || '');\n const [key, setKey] = useState('');\n const [dataInput, setDataInput] = useState(prefillData ? JSON.stringify(prefillData, null, 2) : '{}');\n const [tags, setTags] = useState('');\n const [error, setError] = useState('');\n\n const domains = (domainsData?.domains ?? []).map((d: any) => d.domain);\n\n // Sync prefill props → state when they change (e.g., JSON drop)\n useEffect(() => {\n if (open) {\n setDataInput(prefillData ? JSON.stringify(prefillData, null, 2) : '{}');\n setDomain(prefillDomain || '');\n setKey('');\n setTags('');\n setError('');\n }\n }, [open, prefillData, prefillDomain]);\n\n if (!open) return null;\n\n const handleSubmit = async () => {\n setError('');\n if (!domain.trim()) { setError('Domain is required'); return; }\n if (!key.trim()) { setError('Key is required'); return; }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(dataInput);\n if (typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error();\n } catch {\n setError('Data must be a valid JSON object');\n return;\n }\n try {\n await storeMutation.mutateAsync({\n domain: domain.trim(),\n key: key.trim(),\n data: parsed,\n tags: tags ? tags.split(',').map(t => t.trim()).filter(Boolean) : [],\n });\n onCreated?.(domain.trim(), key.trim());\n onClose();\n } catch (err: any) {\n setError(err.message);\n }\n };\n\n return createPortal(\n <>\n <div className=\"fixed inset-0 z-40 bg-black/30\" onClick={onClose} />\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-6 overflow-y-auto\">\n <div className=\"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-md max-h-[85vh] flex flex-col\">\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-surface-border\">\n <h3 className=\"text-sm font-medium text-text-primary\">New Knowledge Entry</h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4 overflow-y-auto flex-1 min-h-0\">\n {/* Domain */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Domain</label>\n <input\n type=\"text\"\n list=\"domain-list\"\n value={domain}\n onChange={(e) => setDomain(e.target.value)}\n placeholder=\"e.g., screenshots, config, emails\"\n className=\"input text-xs w-full\"\n />\n <datalist id=\"domain-list\">\n {domains.map((d: string) => <option key={d} value={d} />)}\n </datalist>\n </div>\n\n {/* Key */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Key</label>\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"e.g., homepage, user-profile, report-2026\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {/* Data */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Data (JSON)</label>\n <textarea\n value={dataInput}\n onChange={(e) => setDataInput(e.target.value)}\n rows={8}\n className=\"input-json w-full max-h-[30vh]\"\n />\n </div>\n\n {/* Tags */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags (comma-separated)</label>\n <input\n type=\"text\"\n value={tags}\n onChange={(e) => setTags(e.target.value)}\n placeholder=\"e.g., important, review, 401k\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {error && <p className=\"text-xs text-status-error\">{error}</p>}\n </div>\n\n <div className=\"flex justify-end gap-2 px-5 py-3 border-t border-surface-border\">\n <button onClick={onClose} className=\"btn-ghost text-xs\">Cancel</button>\n <button\n onClick={handleSubmit}\n disabled={storeMutation.isPending}\n className=\"btn-primary text-xs\"\n >\n {storeMutation.isPending ? 'Creating...' : 'Create Entry'}\n </button>\n </div>\n </div>\n </div>\n </>,\n document.body,\n );\n}\n","import { useState, useMemo, useEffect, useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ChevronRight, Brain, Database, Table2, Plus } from 'lucide-react';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { DropZone } from '../../components/common/DropZone';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { useListDomains, useListKnowledge } from '../../api/knowledge';\nimport { KnowledgeEntryView } from './KnowledgeEntryView';\nimport { CreateEntryModal } from './CreateEntryModal';\n\nconst PAGE_SIZE = 50;\n\nexport function KnowledgePage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const domain = searchParams.get('domain') || '';\n const entryKey = searchParams.get('key') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(PAGE_SIZE);\n const [showCreate, setShowCreate] = useState(false);\n const [prefillData, setPrefillData] = useState<Record<string, unknown> | undefined>();\n\n const handleJsonDrop = useCallback((files: File[]) => {\n console.debug('[Knowledge] drop received:', files.map(f => ({ name: f.name, type: f.type, size: f.size })));\n const jsonFile = files.find(f => f.name.endsWith('.json') || f.type === 'application/json');\n if (!jsonFile) {\n console.warn('[Knowledge] no JSON file found in dropped files');\n return;\n }\n console.debug('[Knowledge] reading:', jsonFile.name);\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const parsed = JSON.parse(reader.result as string);\n if (typeof parsed === 'object' && !Array.isArray(parsed)) {\n console.debug('[Knowledge] parsed object with keys:', Object.keys(parsed));\n setPrefillData(parsed);\n setShowCreate(true);\n } else {\n console.warn('[Knowledge] JSON is not a plain object, got:', Array.isArray(parsed) ? 'array' : typeof parsed);\n }\n } catch (err) {\n console.warn('[Knowledge] JSON parse failed:', err);\n }\n };\n reader.readAsText(jsonFile);\n }, []);\n\n // Debounce search to avoid hammering the API on every keystroke\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setPage(1);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const offset = (page - 1) * pageSize;\n\n const domainsQuery = useListDomains();\n const entriesQuery = useListKnowledge(domain, {\n search: debouncedSearch || undefined,\n limit: pageSize,\n offset,\n });\n\n const domains = domainsQuery.data?.domains ?? [];\n const entries = entriesQuery.data?.entries ?? [];\n const entriesTotal = entriesQuery.data?.total ?? 0;\n\n // Domains are a small list — client-side filter is fine\n const filteredDomains = useMemo(() => {\n if (!search) return domains;\n const q = search.toLowerCase();\n return domains.filter((d) => d.domain.toLowerCase().includes(q));\n }, [domains, search]);\n\n function navigate(d: string, k?: string) {\n setSearch('');\n setDebouncedSearch('');\n setPage(1);\n const params: Record<string, string> = {};\n if (d) params.domain = d;\n if (k) params.key = k;\n setSearchParams(params);\n }\n\n const level = entryKey ? 'entry' : domain ? 'entries' : 'domains';\n const isLoading = level === 'entries' ? entriesQuery.isLoading : level === 'domains' ? domainsQuery.isLoading : false;\n const totalPages = Math.ceil((level === 'entries' ? entriesTotal : filteredDomains.length) / pageSize);\n\n const entriesApiPath = domain\n ? `/knowledge/entries?domain=${encodeURIComponent(domain)}&limit=${pageSize}&offset=${offset}${debouncedSearch ? `&search=${encodeURIComponent(debouncedSearch)}` : ''}`\n : undefined;\n const domainsApiPath = '/knowledge/domains';\n\n return (\n <DropZone onDrop={handleJsonDrop} label=\"Drop a JSON file to create an entry\" accept=\".json,application/json\">\n <div>\n <PageHeader\n title=\"Knowledge\"\n docsHash=\"#docs:dashboard.md:knowledge\"\n actions={\n <button\n onClick={() => { setPrefillData(undefined); setShowCreate(true); }}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n New Entry\n </button>\n }\n />\n\n {/* Breadcrumbs */}\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => navigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n level === 'domains'\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <Brain className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>All Domains</span>\n </button>\n {domain && (\n <>\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => navigate(domain)}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n level === 'entries'\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <Database className=\"w-3.5 h-3.5 text-accent/60\" strokeWidth={1.5} />\n {domain}\n </button>\n </>\n )}\n {entryKey && (\n <>\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"flex items-center gap-1.5 px-1.5 py-0.5 text-text-primary font-medium\">\n <Table2 className=\"w-3.5 h-3.5 text-accent/60\" strokeWidth={1.5} />\n {entryKey}\n </span>\n </>\n )}\n </nav>\n\n {/* Level: entry detail */}\n {level === 'entry' ? (\n <KnowledgeEntryView\n domain={domain}\n entryKey={entryKey}\n onDeleted={() => navigate(domain)}\n />\n ) : (\n <>\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => level === 'entries' ? entriesQuery.refetch() : domainsQuery.refetch()}\n isFetching={level === 'entries' ? entriesQuery.isFetching : domainsQuery.isFetching}\n apiPath={level === 'entries' ? entriesApiPath : domainsApiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={domain ? 'Filter by key or tag...' : 'Filter by domain...'}\n />\n </FilterBar>\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-2 mt-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-surface-sunken rounded\" />\n ))}\n </div>\n ) : level === 'domains' ? (\n filteredDomains.length === 0 ? (\n <div className=\"cursor-pointer\" onClick={() => { setPrefillData(undefined); setShowCreate(true); }}>\n <EmptyState icon={Brain} title={search ? 'No matching domains' : 'No knowledge yet'} description={search ? undefined : 'Create your first entry or drop a JSON file'} />\n </div>\n ) : (\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium\">Domain</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Entries</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Latest</th>\n </tr>\n </thead>\n <tbody>\n {filteredDomains.map((d) => (\n <tr\n key={d.domain}\n onClick={() => navigate(d.domain)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n <Database className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors\">\n {d.domain}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {d.count}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={d.latest} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )\n ) : (\n entries.length === 0 ? (\n <div className=\"cursor-pointer\" onClick={() => { setPrefillData(undefined); setShowCreate(true); }}>\n <EmptyState icon={Plus} title={search ? 'No matching entries' : 'No entries in this domain'} description={search ? undefined : 'Add an entry or drop a JSON file'} />\n </div>\n ) : (\n <>\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium w-[200px]\">Key</th>\n <th className=\"pb-2 font-medium\">Tags</th>\n <th className=\"pb-2 font-medium w-16 text-right\">Fields</th>\n <th className=\"pb-2 pr-2 font-medium w-32 text-right\">Updated</th>\n </tr>\n </thead>\n <tbody>\n {entries.map((entry) => (\n <tr\n key={entry.key}\n onClick={() => navigate(domain, entry.key)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2 w-[200px]\">\n <span className=\"flex items-center gap-2.5\">\n <Table2 className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors truncate max-w-[160px]\" title={entry.key}>\n {entry.key}\n </span>\n </span>\n </td>\n <td className=\"py-2\">\n <div className=\"flex flex-wrap gap-1\">\n {entry.tags?.slice(0, 5).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center px-1.5 py-0 rounded-full text-[10px] font-medium bg-accent/10 text-accent\"\n >\n {tag}\n </span>\n ))}\n {entry.tags && entry.tags.length > 5 && (\n <span className=\"text-[10px] text-text-tertiary\">\n +{entry.tags.length - 5}\n </span>\n )}\n </div>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {entry.data ? Object.keys(entry.data).length : 0}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={entry.updated_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n\n <StickyPagination\n page={page}\n totalPages={totalPages}\n onPageChange={setPage}\n total={entriesTotal}\n pageSize={pageSize}\n onPageSizeChange={setPageSize}\n />\n </>\n )\n )}\n </>\n )}\n </div>\n\n <CreateEntryModal\n open={showCreate}\n onClose={() => { setShowCreate(false); setPrefillData(undefined); }}\n onCreated={(d, k) => {\n setSearchParams({ domain: d, key: k });\n domainsQuery.refetch();\n }}\n prefillData={prefillData}\n prefillDomain={domain || undefined}\n />\n </DropZone>\n );\n}\n"],"names":["formatValue","val","parseValue","raw","trimmed","looksLikeJson","isSimple","t","AutoTextarea","value","onChange","onKeyDown","placeholder","mono","ref","useRef","useEffect","jsxDEV","e","KnowledgeEntryView","domain","entryKey","onDeleted","entry","isLoading","refetch","useGetKnowledge","deleteMutation","useDeleteKnowledge","storeMutation","useStoreKnowledge","setFieldMutation","useSetKnowledgeField","removeFieldMutation","useRemoveKnowledgeField","confirmDelete","setConfirmDelete","useState","editing","setEditing","draft","setDraft","ghostField","setGhostField","ghostValue","setGhostValue","pendingRemove","setPendingRemove","jsonHint","setJsonHint","editingTags","setEditingTags","data","allFields","fields","useMemo","q","field","originalValue","useCallback","column","isDirty","startEdit","cancelEdit","showJsonHint","commitEdit","parsed","parsedOk","newName","removeField","saveTags","tags","commitGhostRow","name","updated","handleKeyDown","handleGhostKeyDown","TagInput","tag","TimeAgo","Trash2","isEditingField","isEditingValue","isActive","isRemoving","CreateEntryModal","open","onClose","onCreated","prefillData","prefillDomain","domainsData","useListDomains","setDomain","key","setKey","dataInput","setDataInput","setTags","error","setError","domains","d","handleSubmit","err","createPortal","Fragment","X","PAGE_SIZE","KnowledgePage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","page","setPage","pageSize","setPageSize","showCreate","setShowCreate","setPrefillData","handleJsonDrop","files","f","jsonFile","reader","offset","domainsQuery","entriesQuery","useListKnowledge","_a","entries","_b","entriesTotal","_c","filteredDomains","navigate","k","params","level","totalPages","entriesApiPath","DropZone","PageHeader","Plus","Brain","ChevronRight","Database","Table2","FilterBar","ListToolbar","FilterInput","_","i","EmptyState","StickyPagination"],"mappings":"isBAcA,SAASA,GAAYC,EAAsB,CACzC,OAAIA,GAAQ,KAAkC,GAC1C,OAAOA,GAAQ,SAAiBA,EAC7B,KAAK,UAAUA,EAAK,KAAM,CAAC,CACpC,CAEA,SAASC,GAAWC,EAA4E,CAC9F,MAAMC,EAAUD,EAAI,KAAA,EACpB,GAAI,CAACC,EAAS,MAAO,CAAE,MAAO,GAAI,cAAe,GAAO,SAAU,EAAA,EAClE,MAAMC,EAAgBD,EAAQ,WAAW,GAAG,GAAKA,EAAQ,WAAW,GAAG,EACvE,GAAI,CACF,MAAO,CAAE,MAAO,KAAK,MAAMA,CAAO,EAAG,cAAAC,EAAe,SAAU,EAAA,CAChE,MAAQ,CACN,MAAO,CAAE,MAAOD,EAAS,cAAAC,EAAe,SAAU,EAAA,CACpD,CACF,CAEA,SAASC,GAASL,EAAuB,CACvC,GAAI,OAAOA,GAAQ,SAAU,CAC3B,MAAMM,EAAIN,EAAI,KAAA,EAEd,MAAK,EAAAM,EAAE,WAAW,GAAG,GAAKA,EAAE,SAAS,GAAG,GAAOA,EAAE,WAAW,GAAG,GAAKA,EAAE,SAAS,GAAG,EAEpF,CACA,OAAO,OAAON,GAAQ,UAAY,OAAOA,GAAQ,WAAaA,IAAQ,IACxE,CAEA,SAASO,EAAa,CAAE,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,YAAAC,EAAa,KAAAC,GAM9D,CACD,MAAMC,EAAMC,EAAAA,OAA4B,IAAI,EAE5CC,OAAAA,EAAAA,UAAU,IAAM,CACVF,EAAI,UACNA,EAAI,QAAQ,MAAM,OAAS,OAC3BA,EAAI,QAAQ,MAAM,OAAS,GAAGA,EAAI,QAAQ,YAAY,KACtDA,EAAI,QAAQ,MAAA,EAEhB,EAAG,CAACL,CAAK,CAAC,EAGRQ,EAAAA,OAAC,WAAA,CACC,IAAAH,EACA,MAAAL,EACA,SAAWS,GAAMR,EAASQ,EAAE,OAAO,KAAK,EACxC,UAAAP,EACA,YAAAC,EACA,KAAM,EACN,UAAW,gFAAgFC,EAAO,YAAc,EAAE,GAClH,MAAO,CAAE,UAAW,OAAA,CAAQ,EAR9B,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAWJ,CAEO,SAASM,GAAmB,CAAE,OAAAC,EAAQ,SAAAC,EAAU,UAAAC,GAAsC,CAC3F,KAAM,CAAE,KAAMC,EAAO,UAAAC,EAAW,QAAAC,GAAYC,GAAgBN,EAAQC,CAAQ,EACtEM,EAAiBC,GAAA,EACjBC,EAAgBC,GAAA,EAChBC,EAAmBC,GAAA,EACnBC,EAAsBC,GAAA,EAEtB,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAS,EAAK,EAClD,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAsB,IAAI,EAClD,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAS,EAAE,EAC/B,CAACK,EAAYC,CAAa,EAAIN,EAAAA,SAAS,EAAE,EACzC,CAACO,EAAYC,CAAa,EAAIR,EAAAA,SAAS,EAAE,EACzC,CAACS,EAAeC,CAAgB,EAAIV,EAAAA,SAAwB,IAAI,EAChE,CAACW,EAAUC,CAAW,EAAIZ,EAAAA,SAAwB,IAAI,EACtD,CAACa,EAAaC,CAAc,EAAId,EAAAA,SAAS,EAAK,EAE9Ce,EAAO7B,GAAA,YAAAA,EAAO,KACd8B,EAAYD,EAAO,OAAO,QAAQA,CAAI,EAAI,CAAA,EAI1CE,EAASC,EAAAA,QAAQ,IAAM,CAC3B,MAAMC,EAAId,EAAW,KAAA,EAAO,YAAA,EAC5B,OAAKc,EACEH,EAAU,OAAO,CAAC,CAACI,CAAK,IAAMA,EAAM,YAAA,EAAc,SAASD,CAAC,CAAC,EADrDH,CAEjB,EAAG,CAACA,EAAWX,CAAU,CAAC,EAEpBgB,EAAgBC,EAAAA,YAAY,CAACF,EAAeG,IAC5CA,IAAW,QAAgBH,EACxBzD,GAAYoD,GAAA,YAAAA,EAAOK,EAAM,EAC/B,CAACL,CAAI,CAAC,EAEHS,EAAUvB,EACZE,IAAUkB,EAAcpB,EAAQ,MAAOA,EAAQ,MAAM,EACrD,GAEJ,SAASwB,EAAUL,EAAeG,EAA2B,CAC3DrB,EAAW,CAAE,MAAAkB,EAAO,OAAAG,EAAQ,EAC5BnB,EAASiB,EAAcD,EAAOG,CAAM,CAAC,EACrCb,EAAiB,IAAI,CACvB,CAEA,SAASgB,GAAa,CACpBxB,EAAW,IAAI,EACfE,EAAS,EAAE,CACb,CAEA,SAASuB,GAAe,CACtBf,EAAY,8BAA8B,EAC1C,WAAW,IAAMA,EAAY,IAAI,EAAG,GAAI,CAC1C,CAEA,eAAegB,GAAa,CAC1B,GAAI,CAAC3B,GAAW,CAACc,EAAM,OACvB,KAAM,CAAE,MAAAK,EAAO,OAAAG,CAAA,EAAWtB,EAE1B,GAAIsB,IAAW,QAAS,CACtB,KAAM,CAAE,MAAOM,EAAQ,cAAA7D,EAAe,SAAA8D,CAAA,EAAajE,GAAWsC,CAAK,EAC/DnC,GAAiB,CAAC8D,GAAUH,EAAA,EAEhC,MAAMjC,EAAiB,YAAY,CAAE,OAAAX,EAAQ,IAAKC,EAAU,KAAMoC,EAAO,MAAOS,EAAQ,CAC1F,KAAO,CAEL,MAAME,EAAU5B,EAAM,KAAA,EACtB,GAAI,CAAC4B,GAAWA,IAAYX,EAAO,CAAEM,EAAA,EAAc,MAAQ,CAC3D,MAAM9D,EAAMmD,EAAKK,CAAK,EACtB,MAAMxB,EAAoB,YAAY,CAAE,OAAAb,EAAQ,IAAKC,EAAU,KAAMoC,EAAO,EAC5E,MAAM1B,EAAiB,YAAY,CAAE,OAAAX,EAAQ,IAAKC,EAAU,KAAM+C,EAAS,MAAOnE,EAAK,CACzF,CAEAsC,EAAW,IAAI,EACfE,EAAS,EAAE,EACXhB,EAAA,CACF,CAEA,eAAe4C,EAAYZ,EAAe,CACxC,MAAMxB,EAAoB,YAAY,CAAE,OAAAb,EAAQ,IAAKC,EAAU,KAAMoC,EAAO,EAC5EV,EAAiB,IAAI,EACrBR,EAAW,IAAI,EACfd,EAAA,CACF,CAEA,eAAe6C,EAASC,EAAgB,CACtC,MAAM1C,EAAc,YAAY,CAC9B,OAAAT,EACA,IAAKC,EACL,KAAM+B,GAAQ,CAAA,EACd,KAAAmB,EACA,QAAS,EAAA,CACV,EACD9C,EAAA,CACF,CAEA,eAAe+C,GAAiB,CAC9B,MAAMC,EAAO/B,EAAW,KAAA,EACxB,GAAI,CAAC+B,EAAM,OACX,KAAM,CAAE,MAAAhE,EAAO,cAAAJ,EAAe,SAAA8D,CAAA,EAAajE,GAAW0C,CAAU,EAC5DvC,GAAiB,CAAC8D,GAAUH,EAAA,EAChC,MAAMU,EAAU,CAAE,GAAGtB,EAAM,CAACqB,CAAI,EAAGhE,GAAS,EAAA,EAC5C,MAAMoB,EAAc,YAAY,CAAE,OAAAT,EAAQ,IAAKC,EAAU,KAAMqD,EAAS,EACxE/B,EAAc,EAAE,EAChBE,EAAc,EAAE,EAChBpB,EAAA,CACF,CAEA,SAASkD,EAAczD,EAAwB,CACzCA,EAAE,MAAQ,SACZ6C,EAAA,EACS7C,EAAE,MAAQ,UAAYA,EAAE,SAAWA,EAAE,WAC9CA,EAAE,eAAA,EACF+C,EAAA,EAEJ,CAEA,SAASW,EAAmB1D,EAAwB,CAC9CA,EAAE,MAAQ,UACZyB,EAAc,EAAE,EAChBE,EAAc,EAAE,GACP3B,EAAE,MAAQ,UAAYA,EAAE,SAAWA,EAAE,WAC9CA,EAAE,eAAA,EACFsD,EAAA,EAEJ,CAEA,OAAIhD,EAEAP,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,qCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAqD,EACrDA,EAAAA,OAAC,MAAA,CAAI,UAAU,gCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAgD,CAAA,CAAA,EAFlD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EAIA,CAACM,GAASA,EAAM,QAAU,GACrBN,EAAAA,OAAC,IAAA,CAAE,UAAU,kCAAkC,SAAA,kBAAA,EAA/C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA+D,WAIrE,MAAA,CAEC,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC,OAAI,UAAU,uCACZ,WACCA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC4D,GAAA,CACC,KAAMtD,EAAM,MAAQ,CAAA,EACpB,SAAWgD,GAAS,CAAED,EAASC,CAAI,CAAG,EACtC,YAAY,aACZ,QAAO,EAAA,EAJT,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMAtD,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMkC,EAAe,EAAK,EACnC,UAAU,oEACX,SAAA,MAAA,EAHD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,EAEAlC,EAAAA,OAAC,MAAA,CACC,UAAU,4CACV,QAAS,IAAMkC,EAAe,EAAI,EAClC,MAAM,qBAEL,WAAM,MAAQ5B,EAAM,KAAK,OAAS,EACjCA,EAAM,KAAK,IAAKuD,GACd7D,EAAAA,OAAC,OAAA,CAAe,UAAU,qGACvB,YADQ6D,EAAX,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CACD,EAED7D,EAAAA,OAAC,OAAA,CAAK,UAAU,0EAA0E,SAAA,eAA1F,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqG,CAAA,EAZzG,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAcA,EA/BJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiCA,EACAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,QAAK,UAAU,iCAAiC,kBAAC8D,EAAA,CAAQ,KAAMxD,EAAM,UAAA,EAArB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,CAAA,EAAlF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoF,EACnFY,EACClB,EAAAA,OAAC,OAAA,CAAK,UAAU,sCACd,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,oBAAoB,SAAA,eAAA,EAApC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiD,EACjDA,EAAAA,OAAC,SAAA,CACC,QAAS,SAAY,CACnB,GAAI,CACF,MAAMU,EAAe,YAAY,CAAE,OAAAP,EAAQ,IAAKC,EAAU,EAC1DC,EAAA,CACF,MAAQ,CAAQ,CAClB,EACA,UAAU,2DACV,SAAUK,EAAe,UAExB,SAAAA,EAAe,UAAY,cAAgB,KAAA,EAV9C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAYAV,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMmB,EAAiB,EAAK,EACrC,UAAU,+CACX,SAAA,IAAA,EAHD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAnBF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAoBA,EAEAnB,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMmB,EAAiB,EAAI,EACpC,UAAU,kEACV,MAAM,eAEN,SAAAnB,EAAAA,OAAC+D,GAAA,CAAO,UAAU,aAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgC,CAAA,EALlC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EA/BJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiCA,CAAA,CAAA,EApEF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAqEA,EAEChC,GACC/B,EAAAA,OAAC,MAAA,CAAI,UAAU,gDACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,uEAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwF,EACxFA,SAAC,OAAA,CAAK,UAAU,8BAA+B,SAAA+B,CAAA,EAA/C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,CAAA,CAAA,EAF1D,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EAIF/B,EAAAA,OAAC,QAAA,CAAM,UAAU,yBACf,SAAA,CAAAA,EAAAA,OAAC,QAAA,CAAM,UAAU,+BACf,SAAA,CAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,mGACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,iEAAiE,SAAA,OAAA,EAA/E,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoF,EACpFA,SAAC,KAAA,CAAG,UAAU,wBAAwB,SAAA,OAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2C,CAAA,CAAA,EAF7C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,EAEAA,EAAAA,OAAC,KAAA,CAAG,UAAU,4CACZ,SAAA,CAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,qDACZ,SAAAA,EAAAA,OAAC,QAAA,CACC,MAAOyB,EACP,SAAWxB,GAAMyB,EAAczB,EAAE,OAAO,KAAK,EAC7C,UAAW0D,EACX,YAAavB,EAAU,OAAS,mBAAqB,YACrD,UAAU,uHAAA,EALZ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,EAPF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,EACApC,EAAAA,OAAC,KAAA,CAAG,UAAU,sBACZ,SAAA,CAAAA,EAAAA,OAACT,EAAA,CACC,MAAOoC,EACP,SAAUC,EACV,UAAW+B,EACX,YAAY,OAAA,EAJd,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMClC,EAAW,KAAA,GACVzB,EAAAA,OAAC,MAAA,CAAI,UAAU,oBACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAASuD,EACT,UAAU,8DACV,SAAU3C,EAAc,UAEvB,SAAAA,EAAc,UAAY,YAAc,MAAA,EAL3C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOAZ,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM,CAAE0B,EAAc,EAAE,EAAGE,EAAc,EAAE,CAAG,EACvD,UAAU,2DACX,SAAA,QAAA,EAHD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAbF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAcA,CAAA,CAAA,EAtBJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwBA,CAAA,CAAA,EAlCF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAmCA,CAAA,CAAA,EAzCF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA0CA,EACA5B,SAAC,SACE,SAAAqC,EAAO,IAAI,CAAC,CAACG,EAAOhD,CAAK,IAAM,CAC9B,MAAMwE,GAAiB3C,GAAA,YAAAA,EAAS,SAAUmB,GAASnB,EAAQ,SAAW,QAChE4C,GAAiB5C,GAAA,YAAAA,EAAS,SAAUmB,GAASnB,EAAQ,SAAW,QAChE6C,EAAWF,GAAkBC,EAC7BE,EAAatC,IAAkBW,EAErC,OACExC,EAAAA,OAAC,MAAe,UAAW,kCAAkCmE,EAAa,qBAAuBD,EAAW,GAAK,2BAA2B,GAE1I,SAAA,CAAAlE,EAAAA,OAAC,KAAA,CACC,UAAW,4CAA4CmE,EAAa,sCAAwCH,EAAiB,iEAAmE,yBAAyB,GACzN,QAAS,IAAM,CAACA,GAAkB,CAACG,GAActB,EAAUL,EAAO,OAAO,EAExE,SAAAwB,WACE,MAAA,CACC,SAAA,CAAAhE,EAAAA,OAACT,EAAA,CAAa,MAAOgC,EAAO,SAAUC,EAAU,UAAWkC,EAAe,YAAY,YAAA,EAAtF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmG,EAClGd,GACC5C,EAAAA,OAAC,MAAA,CAAI,UAAU,oBACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASgD,EAAY,UAAU,8DAA8D,SAAUpC,EAAc,UAC1H,SAAAA,EAAc,UAAY,YAAc,MAAA,EAD3C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,WACC,SAAA,CAAO,QAASkC,EAAY,UAAU,2DAA2D,SAAA,UAAlG,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwG,CAAA,CAAA,EAJ1G,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,CAAA,EARJ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAUA,EAEA9C,SAAC,OAAA,CAAK,UAAU,oDAAqD,SAAAwC,GAArE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2E,CAAA,EAjB/E,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAsBAxC,EAAAA,OAAC,KAAA,CACC,UAAW,mCAAmCmE,EAAa,iBAAmBF,EAAiB,yCAA2C,EAAE,GAC5I,QAAS,IAAM,CAACA,GAAkB,CAACE,GAActB,EAAUL,EAAO,OAAO,EAExE,SAAA2B,EACCnE,SAAC,OAAA,CAAK,UAAU,kDACd,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,oBAAoB,SAAA,CAAA,UAAOA,SAAC,OAAA,CAAK,UAAU,cAAe,SAAAwC,CAAA,EAA/B,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EAAO,GAAA,CAAA,EAAvF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwF,EACxFxC,EAAAA,OAAC,SAAA,CACC,QAAUC,GAAM,CAAEA,EAAE,gBAAA,EAAmBmD,EAAYZ,CAAK,CAAG,EAC3D,UAAU,2DACV,SAAU5B,EAAc,UAEvB,SAAAA,EAAc,UAAY,MAAQ,KAAA,EALrC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOAZ,EAAAA,OAAC,SAAA,CACC,QAAUC,GAAM,CAAEA,EAAE,gBAAA,EAAmB6B,EAAiB,IAAI,CAAG,EAC/D,UAAU,+CACX,SAAA,IAAA,EAHD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAdF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAeA,EACEmC,EACFjE,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAACT,EAAA,CACC,MAAOgC,EACP,SAAUC,EACV,UAAWkC,EACX,YAAY,yBACZ,KAAM,CAACrE,GAASG,CAAK,CAAA,EALvB,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOAQ,EAAAA,OAAC,MAAA,CAAI,UAAU,oBACZ,SAAA,CAAA4C,GACC5C,EAAAA,OAAC,SAAA,CAAO,QAASgD,EAAY,UAAU,8DAA8D,SAAUpC,EAAc,UAC1H,SAAAA,EAAc,UAAY,YAAc,MAAA,EAD3C,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,WAED,SAAA,CAAO,QAASkC,EAAY,UAAU,2DAA2D,SAAA,UAAlG,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwG,EACxG9C,EAAAA,OAAC,SAAA,CACC,QAAUC,GAAM,CAAEA,EAAE,gBAAA,EAAmB6B,EAAiBU,CAAK,CAAG,EAChE,UAAU,mEACX,SAAA,QAAA,EAHD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,CAAA,CAAA,EArBF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAsBA,EAEAnD,GAASG,CAAK,EACZQ,EAAAA,OAAC,KAAE,UAAU,4DAA6D,SAAA,OAAOR,CAAK,CAAA,EAAtF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwF,EAExFQ,EAAAA,OAAC,MAAA,CAAI,UAAU,sEACZ,SAAA,OAAOR,GAAU,SAAWA,EAAQ,KAAK,UAAUA,EAAO,KAAM,CAAC,CAAA,EADpE,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAnDN,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAsDA,CAAA,EA9EOgD,EAAT,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IA+EA,CAEJ,CAAC,CAAA,EAzFH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA2FA,CAAA,CAAA,EAvIF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAwIA,CAAA,CAAA,EAzNF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA0NA,CAEJ,CC/ZO,SAAS4B,GAAiB,CAAE,KAAAC,EAAM,QAAAC,EAAS,UAAAC,EAAW,YAAAC,EAAa,cAAAC,GAAwC,CAChH,KAAM,CAAE,KAAMC,CAAA,EAAgBC,GAAA,EACxB/D,EAAgBC,GAAA,EAChB,CAACV,EAAQyE,CAAS,EAAIxD,EAAAA,SAASqD,GAAiB,EAAE,EAClD,CAACI,EAAKC,CAAM,EAAI1D,EAAAA,SAAS,EAAE,EAC3B,CAAC2D,EAAWC,CAAY,EAAI5D,EAAAA,SAASoD,EAAc,KAAK,UAAUA,EAAa,KAAM,CAAC,EAAI,IAAI,EAC9F,CAAClB,EAAM2B,CAAO,EAAI7D,EAAAA,SAAS,EAAE,EAC7B,CAAC8D,EAAOC,CAAQ,EAAI/D,EAAAA,SAAS,EAAE,EAE/BgE,IAAWV,GAAA,YAAAA,EAAa,UAAW,CAAA,GAAI,IAAKW,GAAWA,EAAE,MAAM,EAarE,GAVAtF,EAAAA,UAAU,IAAM,CACVsE,IACFW,EAAaR,EAAc,KAAK,UAAUA,EAAa,KAAM,CAAC,EAAI,IAAI,EACtEI,EAAUH,GAAiB,EAAE,EAC7BK,EAAO,EAAE,EACTG,EAAQ,EAAE,EACVE,EAAS,EAAE,EAEf,EAAG,CAACd,EAAMG,EAAaC,CAAa,CAAC,EAEjC,CAACJ,EAAM,OAAO,KAElB,MAAMiB,EAAe,SAAY,CAE/B,GADAH,EAAS,EAAE,EACP,CAAChF,EAAO,OAAQ,CAAEgF,EAAS,oBAAoB,EAAG,MAAQ,CAC9D,GAAI,CAACN,EAAI,OAAQ,CAAEM,EAAS,iBAAiB,EAAG,MAAQ,CACxD,IAAIlC,EACJ,GAAI,CAEF,GADAA,EAAS,KAAK,MAAM8B,CAAS,EACzB,OAAO9B,GAAW,UAAY,MAAM,QAAQA,CAAM,EAAG,MAAM,IAAI,KACrE,MAAQ,CACNkC,EAAS,kCAAkC,EAC3C,MACF,CACA,GAAI,CACF,MAAMvE,EAAc,YAAY,CAC9B,OAAQT,EAAO,KAAA,EACf,IAAK0E,EAAI,KAAA,EACT,KAAM5B,EACN,KAAMK,EAAOA,EAAK,MAAM,GAAG,EAAE,IAAIhE,GAAKA,EAAE,MAAM,EAAE,OAAO,OAAO,EAAI,CAAA,CAAC,CACpE,EACDiF,GAAA,MAAAA,EAAYpE,EAAO,KAAA,EAAQ0E,EAAI,QAC/BP,EAAA,CACF,OAASiB,EAAU,CACjBJ,EAASI,EAAI,OAAO,CACtB,CACF,EAEA,OAAOC,GAAAA,aACLxF,SAAAyF,EAAAA,SAAA,CACE,SAAA,CAAAzF,SAAC,MAAA,CAAI,UAAU,iCAAiC,QAASsE,CAAA,EAAzD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAkE,WACjE,MAAA,CAAI,UAAU,0EACb,SAAAtE,EAAAA,OAAC,MAAA,CAAI,UAAU,iHACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,6EACb,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,qBAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyE,EACzEA,EAAAA,OAAC,UAAO,QAASsE,EAAS,UAAU,6CAClC,SAAAtE,EAAAA,OAAC0F,GAAA,CAAE,UAAU,SAAA,EAAb,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EAEA1F,EAAAA,OAAC,MAAA,CAAI,UAAU,qDAEb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,QAAA,EAArG,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2G,EAC3GA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,KAAK,cACL,MAAOG,EACP,SAAWF,GAAM2E,EAAU3E,EAAE,OAAO,KAAK,EACzC,YAAY,oCACZ,UAAU,sBAAA,EANZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAQAD,EAAAA,OAAC,WAAA,CAAS,GAAG,cACV,SAAAoF,EAAQ,IAAKC,GAAcrF,EAAAA,OAAC,SAAA,CAAe,MAAOqF,CAAA,EAAVA,EAAb,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0B,CAAE,GAD1D,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAaA,WAGC,MAAA,CACC,SAAA,CAAArF,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,KAAA,EAArG,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwG,EACxGA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAO6E,EACP,SAAW5E,GAAM6E,EAAO7E,EAAE,OAAO,KAAK,EACtC,YAAY,4CACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IASA,WAGC,MAAA,CACC,SAAA,CAAAD,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,aAAA,EAArG,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgH,EAChHA,EAAAA,OAAC,WAAA,CACC,MAAO+E,EACP,SAAW9E,GAAM+E,EAAa/E,EAAE,OAAO,KAAK,EAC5C,KAAM,EACN,UAAU,gCAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,WAGC,MAAA,CACC,SAAA,CAAAD,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,wBAAA,EAArG,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2H,EAC3HA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOsD,EACP,SAAWrD,GAAMgF,EAAQhF,EAAE,OAAO,KAAK,EACvC,YAAY,gCACZ,UAAU,sBAAA,EALZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IASA,EAECiF,GAASlF,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA6B,SAAAkF,CAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgD,CAAA,CAAA,EApD5D,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAqDA,EAEAlF,EAAAA,OAAC,MAAA,CAAI,UAAU,kEACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASsE,EAAS,UAAU,oBAAoB,SAAA,UAAxD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8D,EAC9DtE,EAAAA,OAAC,SAAA,CACC,QAASsF,EACT,SAAU1E,EAAc,UACxB,UAAU,sBAET,SAAAA,EAAc,UAAY,cAAgB,cAAA,EAL7C,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IASA,CAAA,CAAA,EAxEF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAyEA,CAAA,EA1EF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA2EA,CAAA,CAAA,EA7EF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA8EA,EACA,SAAS,IAAA,CAEb,CCrIA,MAAM+E,GAAY,GAEX,SAASC,IAAgB,WAC9B,KAAM,CAACC,EAAcC,CAAe,EAAIC,GAAA,EAClC5F,EAAS0F,EAAa,IAAI,QAAQ,GAAK,GACvCzF,EAAWyF,EAAa,IAAI,KAAK,GAAK,GACtC,CAACG,EAAQC,CAAS,EAAI7E,EAAAA,SAAS,EAAE,EACjC,CAAC8E,EAAiBC,CAAkB,EAAI/E,EAAAA,SAAS,EAAE,EACnD,CAACgF,EAAMC,CAAO,EAAIjF,EAAAA,SAAS,CAAC,EAC5B,CAACkF,EAAUC,CAAW,EAAInF,EAAAA,SAASuE,EAAS,EAC5C,CAACa,EAAYC,CAAa,EAAIrF,EAAAA,SAAS,EAAK,EAC5C,CAACoD,EAAakC,CAAc,EAAItF,WAAA,EAEhCuF,EAAiBjE,cAAakE,GAAkB,CACpD,QAAQ,MAAM,6BAA8BA,EAAM,IAAIC,IAAM,CAAE,KAAMA,EAAE,KAAM,KAAMA,EAAE,KAAM,KAAMA,EAAE,IAAA,EAAO,CAAC,EAC1G,MAAMC,EAAWF,EAAM,KAAKC,GAAKA,EAAE,KAAK,SAAS,OAAO,GAAKA,EAAE,OAAS,kBAAkB,EAC1F,GAAI,CAACC,EAAU,CACb,QAAQ,KAAK,iDAAiD,EAC9D,MACF,CACA,QAAQ,MAAM,uBAAwBA,EAAS,IAAI,EACnD,MAAMC,EAAS,IAAI,WACnBA,EAAO,OAAS,IAAM,CACpB,GAAI,CACF,MAAM9D,EAAS,KAAK,MAAM8D,EAAO,MAAgB,EAC7C,OAAO9D,GAAW,UAAY,CAAC,MAAM,QAAQA,CAAM,GACrD,QAAQ,MAAM,uCAAwC,OAAO,KAAKA,CAAM,CAAC,EACzEyD,EAAezD,CAAM,EACrBwD,EAAc,EAAI,GAElB,QAAQ,KAAK,+CAAgD,MAAM,QAAQxD,CAAM,EAAI,QAAU,OAAOA,CAAM,CAEhH,OAASsC,EAAK,CACZ,QAAQ,KAAK,iCAAkCA,CAAG,CACpD,CACF,EACAwB,EAAO,WAAWD,CAAQ,CAC5B,EAAG,CAAA,CAAE,EAGL/G,EAAAA,UAAU,IAAM,CACd,MAAMT,EAAI,WAAW,IAAM,CACzB6G,EAAmBH,CAAM,EACzBK,EAAQ,CAAC,CACX,EAAG,GAAG,EACN,MAAO,IAAM,aAAa/G,CAAC,CAC7B,EAAG,CAAC0G,CAAM,CAAC,EAEX,MAAMgB,GAAUZ,EAAO,GAAKE,EAEtBW,EAAetC,GAAA,EACfuC,EAAeC,GAAiBhH,EAAQ,CAC5C,OAAQ+F,GAAmB,OAC3B,MAAOI,EACP,OAAAU,CAAA,CACD,EAEK5B,IAAUgC,EAAAH,EAAa,OAAb,YAAAG,EAAmB,UAAW,CAAA,EACxCC,IAAUC,EAAAJ,EAAa,OAAb,YAAAI,EAAmB,UAAW,CAAA,EACxCC,IAAeC,EAAAN,EAAa,OAAb,YAAAM,EAAmB,QAAS,EAG3CC,EAAkBnF,EAAAA,QAAQ,IAAM,CACpC,GAAI,CAAC0D,EAAQ,OAAOZ,EACpB,MAAM7C,EAAIyD,EAAO,YAAA,EACjB,OAAOZ,EAAQ,OAAQ,GAAM,EAAE,OAAO,YAAA,EAAc,SAAS7C,CAAC,CAAC,CACjE,EAAG,CAAC6C,EAASY,CAAM,CAAC,EAEpB,SAAS0B,EAASrC,EAAWsC,EAAY,CACvC1B,EAAU,EAAE,EACZE,EAAmB,EAAE,EACrBE,EAAQ,CAAC,EACT,MAAMuB,EAAiC,CAAA,EACnCvC,MAAU,OAASA,GACnBsC,MAAU,IAAMA,GACpB7B,EAAgB8B,CAAM,CACxB,CAEA,MAAMC,EAAQzH,EAAW,QAAUD,EAAS,UAAY,UAClDI,EAAYsH,IAAU,UAAYX,EAAa,UAAYW,IAAU,UAAYZ,EAAa,UAAY,GAC1Ga,EAAa,KAAK,MAAMD,IAAU,UAAYN,EAAeE,EAAgB,QAAUnB,CAAQ,EAE/FyB,EAAiB5H,EACnB,6BAA6B,mBAAmBA,CAAM,CAAC,UAAUmG,CAAQ,WAAWU,CAAM,GAAGd,EAAkB,WAAW,mBAAmBA,CAAe,CAAC,GAAK,EAAE,GACpK,OAGJ,gBACG8B,GAAA,CAAS,OAAQrB,EAAgB,MAAM,sCAAsC,OAAO,yBACrF,SAAA,CAAA3G,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAACiI,GAAA,CACC,MAAM,YACN,SAAS,+BACT,QACEjI,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM,CAAE0G,EAAe,MAAS,EAAGD,EAAc,EAAI,CAAG,EACjE,UAAU,uDAEV,SAAA,CAAAzG,EAAAA,OAACkI,EAAA,CAAK,UAAU,aAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8B,EAAE,WAAA,CAAA,EAJlC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,EAVJ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAeAlI,EAAAA,OAAC,MAAA,CAAI,UAAU,oDACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM0H,EAAS,EAAE,EAC1B,UAAW,qEACTG,IAAU,UACN,gCACA,oEACN,GAEA,SAAA,CAAA7H,SAACmI,EAAA,CAAM,UAAU,yBAAyB,YAAa,GAAA,EAAvD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,EAC5DnI,EAAAA,OAAC,QAAK,SAAA,aAAA,EAAN,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiB,CAAA,CAAA,EATnB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAWCG,GACCH,EAAAA,OAAAyF,WAAA,CACE,SAAA,CAAAzF,EAAAA,OAACoI,GAAA,CAAa,UAAU,gCAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyD,EACzDpI,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM0H,EAASvH,CAAM,EAC9B,UAAW,qEACT0H,IAAU,UACN,gCACA,oEACN,GAEA,SAAA,CAAA7H,SAACqI,GAAA,CAAS,UAAU,6BAA6B,YAAa,GAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,EAClElI,CAAA,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAUA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,EAEDC,GACCJ,EAAAA,OAAAyF,WAAA,CACE,SAAA,CAAAzF,EAAAA,OAACoI,GAAA,CAAa,UAAU,gCAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyD,EACzDpI,EAAAA,OAAC,OAAA,CAAK,UAAU,wEACd,SAAA,CAAAA,SAACsI,GAAA,CAAO,UAAU,6BAA6B,YAAa,GAAA,EAA5D,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiE,EAChElI,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,CAAA,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAMA,CAAA,CAAA,EAnCJ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAqCA,EAGCyH,IAAU,QACT7H,EAAAA,OAACE,GAAA,CACC,OAAAC,EACA,SAAAC,EACA,UAAW,IAAMsH,EAASvH,CAAM,CAAA,EAHlC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMAH,EAAAA,OAAAyF,WAAA,CACE,SAAA,CAAAzF,SAACuI,IAAU,QACTvI,EAAAA,OAACwI,GAAA,CACC,UAAW,IAAMX,IAAU,UAAYX,EAAa,QAAA,EAAYD,EAAa,QAAA,EAC7E,WAAYY,IAAU,UAAYX,EAAa,WAAaD,EAAa,WACzE,QAASY,IAAU,UAAYE,EAxEpB,oBAwEqC,EAHlD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMA,SAAA/H,EAAAA,OAACyI,GAAA,CACC,MAAM,SACN,MAAOzC,EACP,SAAUC,EACV,YAAa9F,EAAS,0BAA4B,qBAAA,EAJpD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EAZF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,EAECI,WACE,MAAA,CAAI,UAAU,+BACZ,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACmI,EAAGC,aAChC,MAAA,CAAY,UAAU,kCAAbA,EAAV,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,CACzD,GAHH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,EACEd,IAAU,UACZJ,EAAgB,SAAW,EACzBzH,EAAAA,OAAC,MAAA,CAAI,UAAU,iBAAiB,QAAS,IAAM,CAAE0G,EAAe,MAAS,EAAGD,EAAc,EAAI,CAAG,EAC/F,SAAAzG,SAAC4I,EAAA,CAAW,KAAMT,EAAO,MAAOnC,EAAS,sBAAwB,mBAAoB,YAAaA,EAAS,OAAY,6CAAA,EAAvH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsK,CAAA,EADxK,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAEAhG,SAAC,QAAA,CAAM,UAAU,cACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,oEACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,wBAAwB,SAAA,QAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4C,EAC5CA,SAAC,KAAA,CAAG,UAAU,mCAAmC,SAAA,SAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,EACxDA,SAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,QAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,CAAA,CAAA,EAH9D,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAMA,EACAA,EAAAA,OAAC,QAAA,CACE,SAAAyH,EAAgB,IAAKpC,GACpBrF,EAAAA,OAAC,KAAA,CAEC,QAAS,IAAM0H,EAASrC,EAAE,MAAM,EAChC,UAAU,iCAEV,SAAA,CAAArF,EAAAA,OAAC,MAAG,UAAU,YACZ,SAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,4BACd,SAAA,CAAAA,SAACqI,GAAA,CAAS,UAAU,kCAAkC,YAAa,GAAA,EAAnE,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwE,EACxErI,SAAC,OAAA,CAAK,UAAU,sEACb,WAAE,MAAA,EADL,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,EACAA,SAAC,KAAA,CAAG,UAAU,2DACX,WAAE,KAAA,EADL,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,MAAG,UAAU,mDACZ,kBAAC8D,EAAA,CAAQ,KAAMuB,EAAE,MAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyB,CAAA,EAD3B,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAjBKA,EAAE,OADT,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAoBD,CAAA,EAtBH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAuBA,CAAA,CAAA,EA/BF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgCA,EAGFgC,EAAQ,SAAW,WAChB,MAAA,CAAI,UAAU,iBAAiB,QAAS,IAAM,CAAEX,EAAe,MAAS,EAAGD,EAAc,EAAI,CAAG,EAC/F,SAAAzG,SAAC4I,EAAA,CAAW,KAAMV,EAAM,MAAOlC,EAAS,sBAAwB,4BAA6B,YAAaA,EAAS,OAAY,kCAAA,EAA/H,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmK,CAAA,EADrK,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAEAhG,EAAAA,OAAAyF,EAAAA,SAAA,CACE,SAAA,CAAAzF,EAAAA,OAAC,QAAA,CAAM,UAAU,cACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,oEACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,kCAAkC,SAAA,KAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmD,EACnDA,SAAC,KAAA,CAAG,UAAU,mBAAmB,SAAA,MAAA,EAAjC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EACrCA,SAAC,KAAA,CAAG,UAAU,mCAAmC,SAAA,QAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuD,EACvDA,SAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,SAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6D,CAAA,CAAA,EAJ/D,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,EACAA,EAAAA,OAAC,QAAA,CACE,SAAAqH,EAAQ,IAAK/G,UACZN,OAAAA,EAAAA,OAAC,KAAA,CAEC,QAAS,IAAM0H,EAASvH,EAAQG,EAAM,GAAG,EACzC,UAAU,iCAEV,SAAA,CAAAN,EAAAA,OAAC,MAAG,UAAU,sBACZ,SAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,4BACd,SAAA,CAAAA,SAACsI,GAAA,CAAO,UAAU,kCAAkC,YAAa,GAAA,EAAjE,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsE,EACtEtI,EAAAA,OAAC,QAAK,UAAU,6FAA6F,MAAOM,EAAM,IACvH,WAAM,GAAA,EADT,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,WACC,KAAA,CAAG,UAAU,OACZ,SAAAN,EAAAA,OAAC,MAAA,CAAI,UAAU,uBACZ,SAAA,EAAAoH,EAAA9G,EAAM,OAAN,YAAA8G,EAAY,MAAM,EAAG,GAAG,IAAKvD,GAC5B7D,EAAAA,OAAC,OAAA,CAEC,UAAU,qGAET,SAAA6D,CAAA,EAHIA,EADP,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,GAODvD,EAAM,MAAQA,EAAM,KAAK,OAAS,GACjCN,EAAAA,OAAC,OAAA,CAAK,UAAU,iCAAiC,SAAA,CAAA,IAC7CM,EAAM,KAAK,OAAS,CAAA,CAAA,EADxB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAZJ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAcA,CAAA,EAfF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgBA,EACAN,EAAAA,OAAC,KAAA,CAAG,UAAU,2DACX,SAAAM,EAAM,KAAO,OAAO,KAAKA,EAAM,IAAI,EAAE,OAAS,CAAA,EADjD,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAN,EAAAA,OAAC,MAAG,UAAU,mDACZ,kBAAC8D,EAAA,CAAQ,KAAMxD,EAAM,UAAA,EAArB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,CAAA,EADnC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAlCKA,EAAM,IADb,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAqCD,CAAA,EAvCH,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwCA,CAAA,CAAA,EAjDF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAkDA,EAEAN,EAAAA,OAAC6I,GAAA,CACC,KAAAzC,EACA,WAAA0B,EACA,aAAczB,EACd,MAAOkB,EACP,SAAAjB,EACA,iBAAkBC,CAAA,EANpB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EA5DF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IA6DA,CAAA,CAAA,EAjIN,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoIA,CAAA,CAAA,EAnMJ,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAqMA,EAEAvG,EAAAA,OAACoE,GAAA,CACC,KAAMoC,EACN,QAAS,IAAM,CAAEC,EAAc,EAAK,EAAGC,EAAe,MAAS,CAAG,EAClE,UAAW,CAACrB,EAAGsC,IAAM,CACnB7B,EAAgB,CAAE,OAAQT,EAAG,IAAKsC,EAAG,EACrCV,EAAa,QAAA,CACf,EACA,YAAAzC,EACA,cAAerE,GAAU,MAAA,EAR3B,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CASA,CAAA,EAjNA,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAkNA,CAEJ"}
1
+ {"version":3,"file":"index-6Kd78p_v.js","sources":["../../src/pages/knowledge/KnowledgeEntryView.tsx","../../src/pages/knowledge/CreateEntryModal.tsx","../../src/pages/knowledge/KnowledgePage.tsx"],"sourcesContent":["import { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useGetKnowledge, useDeleteKnowledge, useStoreKnowledge, useSetKnowledgeField, useRemoveKnowledgeField } from '../../api/knowledge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { TagInput } from '../../components/common/form/TagInput';\n\ninterface KnowledgeEntryViewProps {\n domain: string;\n entryKey: string;\n onDeleted: () => void;\n}\n\ntype EditingCell = { field: string; column: 'field' | 'value' } | null;\n\nfunction formatValue(val: unknown): string {\n if (val === null || val === undefined) return '';\n if (typeof val === 'string') return val;\n return JSON.stringify(val, null, 2);\n}\n\nfunction parseValue(raw: string): { value: unknown; looksLikeJson: boolean; parsedOk: boolean } {\n const trimmed = raw.trim();\n if (!trimmed) return { value: '', looksLikeJson: false, parsedOk: false };\n const looksLikeJson = trimmed.startsWith('{') || trimmed.startsWith('[');\n try {\n return { value: JSON.parse(trimmed), looksLikeJson, parsedOk: true };\n } catch {\n return { value: trimmed, looksLikeJson, parsedOk: false };\n }\n}\n\nfunction isSimple(val: unknown): boolean {\n if (typeof val === 'string') {\n const t = val.trim();\n // Strings that look like JSON render as structured\n if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) return false;\n return true;\n }\n return typeof val === 'number' || typeof val === 'boolean' || val === null;\n}\n\nfunction AutoTextarea({ value, onChange, onKeyDown, placeholder, mono }: {\n value: string;\n onChange: (v: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n placeholder?: string;\n mono?: boolean;\n}) {\n const ref = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (ref.current) {\n ref.current.style.height = 'auto';\n ref.current.style.height = `${ref.current.scrollHeight}px`;\n ref.current.focus();\n }\n }, [value]);\n\n return (\n <textarea\n ref={ref}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n rows={1}\n className={`w-full bg-transparent text-xs text-text-primary resize-none outline-none p-0 ${mono ? 'font-mono' : ''}`}\n style={{ minHeight: '1.5em' }}\n />\n );\n}\n\nexport function KnowledgeEntryView({ domain, entryKey, onDeleted }: KnowledgeEntryViewProps) {\n const { data: entry, isLoading, refetch } = useGetKnowledge(domain, entryKey);\n const deleteMutation = useDeleteKnowledge();\n const storeMutation = useStoreKnowledge();\n const setFieldMutation = useSetKnowledgeField();\n const removeFieldMutation = useRemoveKnowledgeField();\n\n const [confirmDelete, setConfirmDelete] = useState(false);\n const [editing, setEditing] = useState<EditingCell>(null);\n const [draft, setDraft] = useState('');\n const [ghostField, setGhostField] = useState('');\n const [ghostValue, setGhostValue] = useState('');\n const [pendingRemove, setPendingRemove] = useState<string | null>(null);\n const [jsonHint, setJsonHint] = useState<string | null>(null);\n const [editingTags, setEditingTags] = useState(false);\n\n const data = entry?.data as Record<string, unknown> | undefined;\n const allFields = data ? Object.entries(data) : [];\n\n // Ghost field input doubles as a filter — if text is entered but not yet saved,\n // narrow the visible rows to matching field names\n const fields = useMemo(() => {\n const q = ghostField.trim().toLowerCase();\n if (!q) return allFields;\n return allFields.filter(([field]) => field.toLowerCase().includes(q));\n }, [allFields, ghostField]);\n\n const originalValue = useCallback((field: string, column: 'field' | 'value'): string => {\n if (column === 'field') return field;\n return formatValue(data?.[field]);\n }, [data]);\n\n const isDirty = editing\n ? draft !== originalValue(editing.field, editing.column)\n : false;\n\n function startEdit(field: string, column: 'field' | 'value') {\n setEditing({ field, column });\n setDraft(originalValue(field, column));\n setPendingRemove(null);\n }\n\n function cancelEdit() {\n setEditing(null);\n setDraft('');\n }\n\n function showJsonHint() {\n setJsonHint('Invalid JSON — saved as text');\n setTimeout(() => setJsonHint(null), 4000);\n }\n\n async function commitEdit() {\n if (!editing || !data) return;\n const { field, column } = editing;\n\n if (column === 'value') {\n const { value: parsed, looksLikeJson, parsedOk } = parseValue(draft);\n if (looksLikeJson && !parsedOk) showJsonHint();\n // Use setField for surgical update — preserves siblings\n await setFieldMutation.mutateAsync({ domain, key: entryKey, path: field, value: parsed });\n } else {\n // Rename: remove old field, set new field\n const newName = draft.trim();\n if (!newName || newName === field) { cancelEdit(); return; }\n const val = data[field];\n await removeFieldMutation.mutateAsync({ domain, key: entryKey, path: field });\n await setFieldMutation.mutateAsync({ domain, key: entryKey, path: newName, value: val });\n }\n\n setEditing(null);\n setDraft('');\n refetch();\n }\n\n async function removeField(field: string) {\n await removeFieldMutation.mutateAsync({ domain, key: entryKey, path: field });\n setPendingRemove(null);\n setEditing(null);\n refetch();\n }\n\n async function saveTags(tags: string[]) {\n await storeMutation.mutateAsync({\n domain,\n key: entryKey,\n data: data || {},\n tags,\n replace: true,\n });\n refetch();\n }\n\n async function commitGhostRow() {\n const name = ghostField.trim();\n if (!name) return;\n const { value, looksLikeJson, parsedOk } = parseValue(ghostValue);\n if (looksLikeJson && !parsedOk) showJsonHint();\n const updated = { ...data, [name]: value || '' };\n await storeMutation.mutateAsync({ domain, key: entryKey, data: updated });\n setGhostField('');\n setGhostValue('');\n refetch();\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') {\n cancelEdit();\n } else if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n commitEdit();\n }\n }\n\n function handleGhostKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Escape') {\n setGhostField('');\n setGhostValue('');\n } else if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n commitGhostRow();\n }\n }\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-3 mt-4\">\n <div className=\"h-4 bg-surface-sunken rounded w-1/3\" />\n <div className=\"h-48 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!entry || entry.found === false) {\n return <p className=\"text-sm text-text-tertiary mt-4\">Entry not found.</p>;\n }\n\n return (\n <div>\n {/* Metadata + actions bar */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-4 min-h-[28px]\">\n {editingTags ? (\n <div className=\"flex items-center gap-2\">\n <TagInput\n tags={entry.tags || []}\n onChange={(tags) => { saveTags(tags); }}\n placeholder=\"Add tag...\"\n compact\n />\n <button\n onClick={() => setEditingTags(false)}\n className=\"text-[10px] text-text-tertiary hover:text-text-secondary shrink-0\"\n >\n Done\n </button>\n </div>\n ) : (\n <div\n className=\"flex items-center gap-1 cursor-text group\"\n onClick={() => setEditingTags(true)}\n title=\"Click to edit tags\"\n >\n {entry.tags && entry.tags.length > 0 ? (\n entry.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-medium bg-accent/10 text-accent\">\n {tag}\n </span>\n ))\n ) : (\n <span className=\"text-[10px] text-text-tertiary/40 italic group-hover:text-text-tertiary\">add tags...</span>\n )}\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] text-text-tertiary\"><TimeAgo date={entry.updated_at} /></span>\n {confirmDelete ? (\n <span className=\"flex items-center gap-2 text-[10px]\">\n <span className=\"text-status-error\">Delete entry?</span>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync({ domain, key: entryKey });\n onDeleted();\n } catch { /* */ }\n }}\n className=\"font-medium text-status-error hover:text-status-error/80\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Yes'}\n </button>\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"text-text-tertiary hover:text-text-secondary\"\n >\n No\n </button>\n </span>\n ) : (\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"text-text-tertiary/50 hover:text-status-error transition-colors\"\n title=\"Delete entry\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n\n {jsonHint && (\n <div className=\"flex items-center justify-end gap-2 mb-2 px-1\">\n <span className=\"inline-block w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n <span className=\"text-xs text-status-warning\">{jsonHint}</span>\n </div>\n )}\n\n {/* Field/value grid */}\n <table className=\"w-full border-collapse\">\n <thead className=\"sticky top-0 z-10 bg-surface\">\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary border-b border-surface-border\">\n <th className=\"px-3 py-2 font-medium w-[200px] border-r border-surface-border\">Field</th>\n <th className=\"px-3 py-2 font-medium\">Value</th>\n </tr>\n {/* Input row — add new field or filter existing */}\n <tr className=\"border-b border-surface-border bg-surface\">\n <td className=\"px-3 py-2 align-top border-r border-surface-border\">\n <input\n value={ghostField}\n onChange={(e) => setGhostField(e.target.value)}\n onKeyDown={handleGhostKeyDown}\n placeholder={allFields.length ? 'add or filter...' : 'new field'}\n className=\"w-full bg-transparent text-xs text-text-primary placeholder:text-text-tertiary/40 placeholder:italic outline-none p-0\"\n />\n </td>\n <td className=\"px-3 py-2 align-top\">\n <AutoTextarea\n value={ghostValue}\n onChange={setGhostValue}\n onKeyDown={handleGhostKeyDown}\n placeholder=\"value\"\n />\n {ghostField.trim() && (\n <div className=\"flex gap-2 mt-1.5\">\n <button\n onClick={commitGhostRow}\n className=\"text-[10px] font-medium text-accent hover:text-accent-hover\"\n disabled={storeMutation.isPending}\n >\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n <button\n onClick={() => { setGhostField(''); setGhostValue(''); }}\n className=\"text-[10px] text-text-tertiary hover:text-text-secondary\"\n >\n Cancel\n </button>\n </div>\n )}\n </td>\n </tr>\n </thead>\n <tbody>\n {fields.map(([field, value]) => {\n const isEditingField = editing?.field === field && editing.column === 'field';\n const isEditingValue = editing?.field === field && editing.column === 'value';\n const isActive = isEditingField || isEditingValue;\n const isRemoving = pendingRemove === field;\n\n return (\n <tr key={field} className={`border-b border-surface-border ${isRemoving ? 'bg-status-error/10' : isActive ? '' : 'hover:bg-surface-hover/30'}`}>\n {/* Field name cell */}\n <td\n className={`px-3 py-2 align-top border-r cursor-text ${isRemoving ? 'bg-transparent border-r-transparent' : isEditingField ? 'border-r-surface-border bg-accent/5 border-l-2 border-l-accent' : 'border-r-surface-border'}`}\n onClick={() => !isEditingField && !isRemoving && startEdit(field, 'field')}\n >\n {isEditingField ? (\n <div>\n <AutoTextarea value={draft} onChange={setDraft} onKeyDown={handleKeyDown} placeholder=\"field name\" />\n {isDirty && (\n <div className=\"flex gap-2 mt-1.5\">\n <button onClick={commitEdit} className=\"text-[10px] font-medium text-accent hover:text-accent-hover\" disabled={storeMutation.isPending}>\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n <button onClick={cancelEdit} className=\"text-[10px] text-text-tertiary hover:text-text-secondary\">Cancel</button>\n </div>\n )}\n </div>\n ) : (\n <span className=\"text-xs font-medium text-text-secondary break-all\">{field}</span>\n )}\n </td>\n\n {/* Value cell */}\n <td\n className={`px-3 py-2 align-top cursor-text ${isRemoving ? 'bg-transparent' : isEditingValue ? 'bg-accent/5 border-l-2 border-l-accent' : ''}`}\n onClick={() => !isEditingValue && !isRemoving && startEdit(field, 'value')}\n >\n {isRemoving ? (\n <span className=\"flex items-center justify-end gap-2 text-[10px]\">\n <span className=\"text-status-error\">Remove <span className=\"font-medium\">{field}</span>?</span>\n <button\n onClick={(e) => { e.stopPropagation(); removeField(field); }}\n className=\"font-medium text-status-error hover:text-status-error/80\"\n disabled={storeMutation.isPending}\n >\n {storeMutation.isPending ? '...' : 'Yes'}\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); setPendingRemove(null); }}\n className=\"text-text-tertiary hover:text-text-secondary\"\n >\n No\n </button>\n </span>\n ) : isEditingValue ? (\n <div>\n <AutoTextarea\n value={draft}\n onChange={setDraft}\n onKeyDown={handleKeyDown}\n placeholder=\"value (string or JSON)\"\n mono={!isSimple(value)}\n />\n <div className=\"flex gap-2 mt-1.5\">\n {isDirty && (\n <button onClick={commitEdit} className=\"text-[10px] font-medium text-accent hover:text-accent-hover\" disabled={storeMutation.isPending}>\n {storeMutation.isPending ? 'Saving...' : 'Save'}\n </button>\n )}\n <button onClick={cancelEdit} className=\"text-[10px] text-text-tertiary hover:text-text-secondary\">Cancel</button>\n <button\n onClick={(e) => { e.stopPropagation(); setPendingRemove(field); }}\n className=\"text-[10px] text-status-error/50 hover:text-status-error ml-auto\"\n >\n Remove\n </button>\n </div>\n </div>\n ) : (\n isSimple(value) ? (\n <p className=\"text-xs text-text-primary break-words whitespace-pre-wrap\">{String(value)}</p>\n ) : (\n <pre className=\"text-xs text-text-primary font-mono whitespace-pre-wrap break-words\">\n {typeof value === 'string' ? value : JSON.stringify(value, null, 2)}\n </pre>\n )\n )}\n </td>\n </tr>\n );\n })}\n\n </tbody>\n </table>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStoreKnowledge, useListDomains } from '../../api/knowledge';\n\ninterface CreateEntryModalProps {\n open: boolean;\n onClose: () => void;\n onCreated?: (domain: string, key: string) => void;\n /** Pre-fill data from a dropped JSON file */\n prefillData?: Record<string, unknown>;\n /** Pre-fill domain from current navigation */\n prefillDomain?: string;\n}\n\nexport function CreateEntryModal({ open, onClose, onCreated, prefillData, prefillDomain }: CreateEntryModalProps) {\n const { data: domainsData } = useListDomains();\n const storeMutation = useStoreKnowledge();\n const [domain, setDomain] = useState(prefillDomain || '');\n const [key, setKey] = useState('');\n const [dataInput, setDataInput] = useState(prefillData ? JSON.stringify(prefillData, null, 2) : '{}');\n const [tags, setTags] = useState('');\n const [error, setError] = useState('');\n\n const domains = (domainsData?.domains ?? []).map((d: any) => d.domain);\n\n // Sync prefill props → state when they change (e.g., JSON drop)\n useEffect(() => {\n if (open) {\n setDataInput(prefillData ? JSON.stringify(prefillData, null, 2) : '{}');\n setDomain(prefillDomain || '');\n setKey('');\n setTags('');\n setError('');\n }\n }, [open, prefillData, prefillDomain]);\n\n if (!open) return null;\n\n const handleSubmit = async () => {\n setError('');\n if (!domain.trim()) { setError('Domain is required'); return; }\n if (!key.trim()) { setError('Key is required'); return; }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(dataInput);\n if (typeof parsed !== 'object' || Array.isArray(parsed)) throw new Error();\n } catch {\n setError('Data must be a valid JSON object');\n return;\n }\n try {\n await storeMutation.mutateAsync({\n domain: domain.trim(),\n key: key.trim(),\n data: parsed,\n tags: tags ? tags.split(',').map(t => t.trim()).filter(Boolean) : [],\n });\n onCreated?.(domain.trim(), key.trim());\n onClose();\n } catch (err: any) {\n setError(err.message);\n }\n };\n\n return createPortal(\n <>\n <div className=\"fixed inset-0 z-40 bg-black/30\" onClick={onClose} />\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-6 overflow-y-auto\">\n <div className=\"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-md max-h-[85vh] flex flex-col\">\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-surface-border\">\n <h3 className=\"text-sm font-medium text-text-primary\">New Knowledge Entry</h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4 overflow-y-auto flex-1 min-h-0\">\n {/* Domain */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Domain</label>\n <input\n type=\"text\"\n list=\"domain-list\"\n value={domain}\n onChange={(e) => setDomain(e.target.value)}\n placeholder=\"e.g., screenshots, config, emails\"\n className=\"input text-xs w-full\"\n />\n <datalist id=\"domain-list\">\n {domains.map((d: string) => <option key={d} value={d} />)}\n </datalist>\n </div>\n\n {/* Key */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Key</label>\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"e.g., homepage, user-profile, report-2026\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {/* Data */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Data (JSON)</label>\n <textarea\n value={dataInput}\n onChange={(e) => setDataInput(e.target.value)}\n rows={8}\n className=\"input-json w-full max-h-[30vh]\"\n />\n </div>\n\n {/* Tags */}\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags (comma-separated)</label>\n <input\n type=\"text\"\n value={tags}\n onChange={(e) => setTags(e.target.value)}\n placeholder=\"e.g., important, review, 401k\"\n className=\"input text-xs w-full\"\n />\n </div>\n\n {error && <p className=\"text-xs text-status-error\">{error}</p>}\n </div>\n\n <div className=\"flex justify-end gap-2 px-5 py-3 border-t border-surface-border\">\n <button onClick={onClose} className=\"btn-ghost text-xs\">Cancel</button>\n <button\n onClick={handleSubmit}\n disabled={storeMutation.isPending}\n className=\"btn-primary text-xs\"\n >\n {storeMutation.isPending ? 'Creating...' : 'Create Entry'}\n </button>\n </div>\n </div>\n </div>\n </>,\n document.body,\n );\n}\n","import { useState, useMemo, useEffect, useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ChevronRight, Brain, Database, Table2, Plus } from 'lucide-react';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { DropZone } from '../../components/common/DropZone';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { useListDomains, useListKnowledge } from '../../api/knowledge';\nimport { KnowledgeEntryView } from './KnowledgeEntryView';\nimport { CreateEntryModal } from './CreateEntryModal';\n\nconst PAGE_SIZE = 50;\n\nexport function KnowledgePage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const domain = searchParams.get('domain') || '';\n const entryKey = searchParams.get('key') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(PAGE_SIZE);\n const [showCreate, setShowCreate] = useState(false);\n const [prefillData, setPrefillData] = useState<Record<string, unknown> | undefined>();\n\n const handleJsonDrop = useCallback((files: File[]) => {\n console.debug('[Knowledge] drop received:', files.map(f => ({ name: f.name, type: f.type, size: f.size })));\n const jsonFile = files.find(f => f.name.endsWith('.json') || f.type === 'application/json');\n if (!jsonFile) {\n console.warn('[Knowledge] no JSON file found in dropped files');\n return;\n }\n console.debug('[Knowledge] reading:', jsonFile.name);\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const parsed = JSON.parse(reader.result as string);\n if (typeof parsed === 'object' && !Array.isArray(parsed)) {\n console.debug('[Knowledge] parsed object with keys:', Object.keys(parsed));\n setPrefillData(parsed);\n setShowCreate(true);\n } else {\n console.warn('[Knowledge] JSON is not a plain object, got:', Array.isArray(parsed) ? 'array' : typeof parsed);\n }\n } catch (err) {\n console.warn('[Knowledge] JSON parse failed:', err);\n }\n };\n reader.readAsText(jsonFile);\n }, []);\n\n // Debounce search to avoid hammering the API on every keystroke\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setPage(1);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const offset = (page - 1) * pageSize;\n\n const domainsQuery = useListDomains();\n const entriesQuery = useListKnowledge(domain, {\n search: debouncedSearch || undefined,\n limit: pageSize,\n offset,\n });\n\n const domains = domainsQuery.data?.domains ?? [];\n const entries = entriesQuery.data?.entries ?? [];\n const entriesTotal = entriesQuery.data?.total ?? 0;\n\n // Domains are a small list — client-side filter is fine\n const filteredDomains = useMemo(() => {\n if (!search) return domains;\n const q = search.toLowerCase();\n return domains.filter((d) => d.domain.toLowerCase().includes(q));\n }, [domains, search]);\n\n function navigate(d: string, k?: string) {\n setSearch('');\n setDebouncedSearch('');\n setPage(1);\n const params: Record<string, string> = {};\n if (d) params.domain = d;\n if (k) params.key = k;\n setSearchParams(params);\n }\n\n const level = entryKey ? 'entry' : domain ? 'entries' : 'domains';\n const isLoading = level === 'entries' ? entriesQuery.isLoading : level === 'domains' ? domainsQuery.isLoading : false;\n const totalPages = Math.ceil((level === 'entries' ? entriesTotal : filteredDomains.length) / pageSize);\n\n const entriesApiPath = domain\n ? `/knowledge/entries?domain=${encodeURIComponent(domain)}&limit=${pageSize}&offset=${offset}${debouncedSearch ? `&search=${encodeURIComponent(debouncedSearch)}` : ''}`\n : undefined;\n const domainsApiPath = '/knowledge/domains';\n\n return (\n <DropZone onDrop={handleJsonDrop} label=\"Drop a JSON file to create an entry\" accept=\".json,application/json\">\n <div>\n <PageHeader\n title=\"Knowledge\"\n docsHash=\"#docs:dashboard.md:knowledge\"\n actions={\n <button\n onClick={() => { setPrefillData(undefined); setShowCreate(true); }}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n New Entry\n </button>\n }\n />\n\n {/* Breadcrumbs */}\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => navigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n level === 'domains'\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <Brain className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>All Domains</span>\n </button>\n {domain && (\n <>\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => navigate(domain)}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n level === 'entries'\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <Database className=\"w-3.5 h-3.5 text-accent/60\" strokeWidth={1.5} />\n {domain}\n </button>\n </>\n )}\n {entryKey && (\n <>\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"flex items-center gap-1.5 px-1.5 py-0.5 text-text-primary font-medium\">\n <Table2 className=\"w-3.5 h-3.5 text-accent/60\" strokeWidth={1.5} />\n {entryKey}\n </span>\n </>\n )}\n </nav>\n\n {/* Level: entry detail */}\n {level === 'entry' ? (\n <KnowledgeEntryView\n domain={domain}\n entryKey={entryKey}\n onDeleted={() => navigate(domain)}\n />\n ) : (\n <>\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => level === 'entries' ? entriesQuery.refetch() : domainsQuery.refetch()}\n isFetching={level === 'entries' ? entriesQuery.isFetching : domainsQuery.isFetching}\n apiPath={level === 'entries' ? entriesApiPath : domainsApiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={domain ? 'Filter by key or tag...' : 'Filter by domain...'}\n />\n </FilterBar>\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-2 mt-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-surface-sunken rounded\" />\n ))}\n </div>\n ) : level === 'domains' ? (\n filteredDomains.length === 0 ? (\n <div className=\"cursor-pointer\" onClick={() => { setPrefillData(undefined); setShowCreate(true); }}>\n <EmptyState icon={Brain} title={search ? 'No matching domains' : 'No knowledge yet'} description={search ? undefined : 'Create your first entry or drop a JSON file'} />\n </div>\n ) : (\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium\">Domain</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Entries</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Latest</th>\n </tr>\n </thead>\n <tbody>\n {filteredDomains.map((d) => (\n <tr\n key={d.domain}\n onClick={() => navigate(d.domain)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n <Database className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors\">\n {d.domain}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {d.count}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={d.latest} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )\n ) : (\n entries.length === 0 ? (\n <div className=\"cursor-pointer\" onClick={() => { setPrefillData(undefined); setShowCreate(true); }}>\n <EmptyState icon={Plus} title={search ? 'No matching entries' : 'No entries in this domain'} description={search ? undefined : 'Add an entry or drop a JSON file'} />\n </div>\n ) : (\n <>\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium w-[200px]\">Key</th>\n <th className=\"pb-2 font-medium\">Tags</th>\n <th className=\"pb-2 font-medium w-16 text-right\">Fields</th>\n <th className=\"pb-2 pr-2 font-medium w-32 text-right\">Updated</th>\n </tr>\n </thead>\n <tbody>\n {entries.map((entry) => (\n <tr\n key={entry.key}\n onClick={() => navigate(domain, entry.key)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2 w-[200px]\">\n <span className=\"flex items-center gap-2.5\">\n <Table2 className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors truncate max-w-[160px]\" title={entry.key}>\n {entry.key}\n </span>\n </span>\n </td>\n <td className=\"py-2\">\n <div className=\"flex flex-wrap gap-1\">\n {entry.tags?.slice(0, 5).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center px-1.5 py-0 rounded-full text-[10px] font-medium bg-accent/10 text-accent\"\n >\n {tag}\n </span>\n ))}\n {entry.tags && entry.tags.length > 5 && (\n <span className=\"text-[10px] text-text-tertiary\">\n +{entry.tags.length - 5}\n </span>\n )}\n </div>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {entry.data ? Object.keys(entry.data).length : 0}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={entry.updated_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n\n <StickyPagination\n page={page}\n totalPages={totalPages}\n onPageChange={setPage}\n total={entriesTotal}\n pageSize={pageSize}\n onPageSizeChange={setPageSize}\n />\n </>\n )\n )}\n </>\n )}\n </div>\n\n <CreateEntryModal\n open={showCreate}\n onClose={() => { setShowCreate(false); setPrefillData(undefined); }}\n onCreated={(d, k) => {\n setSearchParams({ domain: d, key: k });\n domainsQuery.refetch();\n }}\n prefillData={prefillData}\n prefillDomain={domain || undefined}\n />\n </DropZone>\n );\n}\n"],"names":["formatValue","val","parseValue","raw","trimmed","looksLikeJson","isSimple","t","AutoTextarea","value","onChange","onKeyDown","placeholder","mono","ref","useRef","useEffect","jsxDEV","e","KnowledgeEntryView","domain","entryKey","onDeleted","entry","isLoading","refetch","useGetKnowledge","deleteMutation","useDeleteKnowledge","storeMutation","useStoreKnowledge","setFieldMutation","useSetKnowledgeField","removeFieldMutation","useRemoveKnowledgeField","confirmDelete","setConfirmDelete","useState","editing","setEditing","draft","setDraft","ghostField","setGhostField","ghostValue","setGhostValue","pendingRemove","setPendingRemove","jsonHint","setJsonHint","editingTags","setEditingTags","data","allFields","fields","useMemo","q","field","originalValue","useCallback","column","isDirty","startEdit","cancelEdit","showJsonHint","commitEdit","parsed","parsedOk","newName","removeField","saveTags","tags","commitGhostRow","name","updated","handleKeyDown","handleGhostKeyDown","TagInput","tag","TimeAgo","Trash2","isEditingField","isEditingValue","isActive","isRemoving","CreateEntryModal","open","onClose","onCreated","prefillData","prefillDomain","domainsData","useListDomains","setDomain","key","setKey","dataInput","setDataInput","setTags","error","setError","domains","d","handleSubmit","err","createPortal","Fragment","X","PAGE_SIZE","KnowledgePage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","page","setPage","pageSize","setPageSize","showCreate","setShowCreate","setPrefillData","handleJsonDrop","files","f","jsonFile","reader","offset","domainsQuery","entriesQuery","useListKnowledge","_a","entries","_b","entriesTotal","_c","filteredDomains","navigate","k","params","level","totalPages","entriesApiPath","DropZone","PageHeader","Plus","Brain","ChevronRight","Database","Table2","FilterBar","ListToolbar","FilterInput","_","i","EmptyState","StickyPagination"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import{j as e,S as M,l as q}from"./index-Da8R5Fn_.js";import{a as i}from"./vendor-query-DLp59M9_.js";import{c as H,d as K,b as U,u as G,e as Q,f as X}from"./workflows-B9xdIsfM.js";import{P as Y}from"./PageHeader-BuUnJ5NY.js";import{P as B,a1 as F,a as T,a5 as Z,a6 as ee}from"./vendor-icons-1qQ3NKfa.js";import{W as se}from"./WorkflowPill-BzhfqGa-.js";import{B as ae}from"./BotPicker-DgbzCesR.js";import{L as te,c as z,f as re}from"./vendor-react-Co3Y8ikm.js";import{D as oe}from"./DataTable-etck0Zmp.js";import{e as le,d as L,C as ne,j as ie}from"./helpers-CQZkvg6D.js";import"./bots-Ci5aCzDK.js";import"./EmptyState-Bk3_P-b8.js";import"./TimeAgo-Cx1kK1id.js";import"./StatusBadge-DNXTk01O.js";function ce({mode:s,onChange:t}){const N=(o,r,l)=>e.jsxDEV("button",{onClick:()=>t(o),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${s===o?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[r,l]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[N("now",e.jsxDEV(B,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:22,columnNumber:19},this),"Start Now"),N("schedule",e.jsxDEV(F,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:23,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:21,columnNumber:5},this)}function me({configs:s,selectedType:t,onSelect:N,tierMap:o,activeTypes:r}){return e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-4",children:"Select Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{children:s.map(l=>{const p=t===l.workflow_type,c=o.get(l.workflow_type)??"durable",m=c==="certified"?"certified":c==="configured"?"configured":"durable";return e.jsxDEV("button",{onClick:()=>N(l),className:`w-full text-left px-6 py-3.5 border-b border-surface-border/50 transition-colors duration-150 ${p?"border-l-2 border-l-accent":"hover:bg-surface-hover/30"}`,children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(se,{type:l.workflow_type,size:"md",variant:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:39,columnNumber:17},this),(r==null?void 0:r.has(l.workflow_type))&&e.jsxDEV("span",{title:"Cron schedule active",children:e.jsxDEV(F,{className:"w-3 h-3 text-status-success/70 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:54},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:19},this),l.execute_as&&e.jsxDEV("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded",children:[e.jsxDEV(T,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:45,columnNumber:21},this),l.execute_as]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:44,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:38,columnNumber:15},this),l.description&&e.jsxDEV("p",{className:"text-[10px] text-text-quaternary mt-1 leading-snug",children:l.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:51,columnNumber:17},this)]},l.workflow_type,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:29,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:23,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:21,columnNumber:5},this)}const O=`{
1
+ import{j as e,S as M,i as q}from"./index-CCOSf1PY.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{c as H,d as K,b as U,u as G,e as Q,f as X}from"./workflows-Yq7cK-vR.js";import{P as Y}from"./PageHeader-COcgWWf-.js";import{P as B,a1 as F,a as T,a5 as Z,a6 as ee}from"./vendor-icons-CBOM6Es0.js";import{W as se}from"./WorkflowPill-7vt2F6wR.js";import{B as ae}from"./BotPicker-kKBifD1w.js";import{L as te,c as z,f as re}from"./vendor-react-Co3Y8ikm.js";import{D as oe}from"./DataTable-J5R6mepB.js";import{e as le,d as L,C as ie,j as ne}from"./helpers-Dz2U3Ctb.js";import"./bots-CtU4i4OQ.js";import"./EmptyState-BXGvOADa.js";import"./TimeAgo-CywLVIBA.js";import"./StatusBadge-CQlF46RR.js";function ce({mode:s,onChange:t}){const N=(o,r,l)=>e.jsxDEV("button",{onClick:()=>t(o),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${s===o?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[r,l]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[N("now",e.jsxDEV(B,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:22,columnNumber:19},this),"Start Now"),N("schedule",e.jsxDEV(F,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:23,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/ModeToggle.tsx",lineNumber:21,columnNumber:5},this)}function me({configs:s,selectedType:t,onSelect:N,tierMap:o,activeTypes:r}){return e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-4",children:"Select Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{children:s.map(l=>{const p=t===l.workflow_type,c=o.get(l.workflow_type)??"durable",m=c==="certified"?"certified":c==="configured"?"configured":"durable";return e.jsxDEV("button",{onClick:()=>N(l),className:`w-full text-left px-6 py-3.5 border-b border-surface-border/50 transition-colors duration-150 ${p?"border-l-2 border-l-accent":"hover:bg-surface-hover/30"}`,children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(se,{type:l.workflow_type,size:"md",variant:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:39,columnNumber:17},this),(r==null?void 0:r.has(l.workflow_type))&&e.jsxDEV("span",{title:"Cron schedule active",children:e.jsxDEV(F,{className:"w-3 h-3 text-status-success/70 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:54},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:41,columnNumber:19},this),l.execute_as&&e.jsxDEV("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded",children:[e.jsxDEV(T,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:45,columnNumber:21},this),l.execute_as]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:44,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:38,columnNumber:15},this),l.description&&e.jsxDEV("p",{className:"text-[10px] text-text-quaternary mt-1 leading-snug",children:l.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:51,columnNumber:17},this)]},l.workflow_type,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:29,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:23,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/WorkflowSelector.tsx",lineNumber:21,columnNumber:5},this)}const O=`{
2
2
  "data": {},
3
3
  "metadata": {}
4
- }`;function de(s){return typeof s=="boolean"?"boolean":typeof s=="number"?"number":Array.isArray(s)?"array":s!==null&&typeof s=="object"?"object":"string"}function $(s){if(!s)return[];const t=s.data;return!t||typeof t!="object"?[]:Object.entries(t).map(([N,o])=>({key:N,type:de(o),defaultValue:o}))}function J(s){return{...s}}function A(s,t){return JSON.stringify({data:s,metadata:t},null,2)}function ue({config:s,overrideBot:t,onOverrideChange:N,showOverride:o}){const{user:r}=q(),l=t||s.execute_as;return e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-2",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:23,columnNumber:9},this),l&&!t&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"configured default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:25,columnNumber:11},this),t&&e.jsxDEV("span",{className:"text-[9px] text-accent",children:"admin override"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:28,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:l?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:34,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:35,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:33,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Z,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.username)||"you"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:40,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:31,columnNumber:7},this),o&&N&&e.jsxDEV("div",{className:"pt-1 border-t border-surface-border",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary mb-1 block",children:"Override identity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV(ae,{selected:t??"",onChange:N,placeholder:s.execute_as?`Default: ${s.execute_as}`:"Invoking user (default)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:21,columnNumber:5},this)}function pe({selectedConfig:s,isJsonMode:t,hasFormView:N,jsonInput:o,formFields:r,dataFields:l,onJsonChange:p,onToggleMode:c,onUpdateFormField:m,onSetFormFields:w}){return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV("label",{className:"block text-xs text-text-secondary",children:"Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[N&&e.jsxDEV("button",{type:"button",onClick:c,className:"text-[10px] text-accent hover:underline",children:t?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:41,columnNumber:13},this),s.envelope_schema?e.jsxDEV("span",{className:"text-[10px] text-accent",children:"Pre-filled from workflow config"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:50,columnNumber:13},this):e.jsxDEV("span",{className:"text-[10px] text-status-warning",children:"No template"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:39,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:35,columnNumber:7},this),!s.envelope_schema&&e.jsxDEV("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or register it as a ",e.jsxDEV(te,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"certified workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:64,columnNumber:100},this)," in the Workflow Registry for pre-filled fields and form-based input."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:62,columnNumber:9},this),t||!N?e.jsxDEV("textarea",{value:o,onChange:d=>p(d.target.value),className:"input-json",rows:12,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:71,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-3",children:l.map(({key:d,type:n})=>{var v,k;const f=r[d],b=typeof f=="string"?f:JSON.stringify(f??(n==="array"?[]:{}),null,2),g=Math.min(20,Math.max(4,((k=(v=b==null?void 0:b.split)==null?void 0:v.call(b,`
5
- `))==null?void 0:k.length)??4));return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[d,e.jsxDEV("span",{className:"ml-2 font-normal normal-case",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:99,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:97,columnNumber:17},this),n==="boolean"?e.jsxDEV("select",{value:String(f??!1),onChange:x=>m(d,x.target.value,n),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:111,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:112,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:104,columnNumber:19},this):n==="object"||n==="array"?e.jsxDEV("textarea",{value:b,onChange:x=>{try{m(d,JSON.parse(x.target.value),n)}catch{w({...r,[d]:x.target.value})}},className:"input-json w-full",rows:g,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:115,columnNumber:19},this):e.jsxDEV("input",{type:n==="number"?"number":"text",value:String(f??""),onChange:x=>m(d,x.target.value,n),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:137,columnNumber:19},this)]},d,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:96,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",e.jsxDEV("code",{className:"text-accent/80",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:49},this)," holds workflow-specific fields; ",e.jsxDEV("code",{className:"text-accent/80",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:126},this)," is optional context."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:151,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:34,columnNumber:5},this)}function fe({selected:s,executionsPath:t}){var E,R;const N=z(),{isSuperAdmin:o,hasRoleType:r}=q(),l=o||r("admin"),p=H(),[c,m]=i.useState(O),[w,d]=i.useState(""),[n,f]=i.useState({}),[b,g]=i.useState(!1),[v,k]=i.useState(""),x=(((E=s.roles)==null?void 0:E.length)??0)>0||(((R=s.consumes)==null?void 0:R.length)??0)>0,[V,P]=i.useState(x),C=i.useMemo(()=>$(s.envelope_schema??null),[s.envelope_schema]),W=C.length>0,a=i.useMemo(()=>{if(!s.envelope_schema)return{};const u=s.envelope_schema.metadata;return u&&typeof u=="object"?u:{}},[s.envelope_schema]);i.useEffect(()=>{var _;d(""),p.reset();const u=sessionStorage.getItem("lt:invoke:prefill");if(u){sessionStorage.removeItem("lt:invoke:prefill"),m(u);try{const j=JSON.parse(u),I=(j==null?void 0:j.data)??j;I&&typeof I=="object"&&f(J(I))}catch{}g(!0),k("");return}const y=s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O;m(y),(_=s.envelope_schema)!=null&&_.data&&typeof s.envelope_schema.data=="object"?f(J(s.envelope_schema.data)):f({}),g(!$(s.envelope_schema??null).length),k(""),P(x)},[s.workflow_type]);const h=()=>{if(b)try{const u=JSON.parse(c);u.data&&typeof u.data=="object"&&f(J(u.data))}catch{}else m(A(n,a));g(!b)},S=(u,y,_)=>{let j=y;_==="number"?j=y===""?0:Number(y):_==="boolean"&&(j=y==="true"||y===!0);const I={...n,[u]:j};f(I),m(A(I,a))},D=async()=>{d("");let u;try{u=JSON.parse(c)}catch{d("Invalid JSON");return}const{data:y,metadata:_}=u;if(!y||typeof y!="object"){d('Envelope must include a "data" object');return}try{const j={..._??{}};V&&(j.certified=!0),await p.mutateAsync({workflowType:s.workflow_type,data:y,metadata:j,...v?{execute_as:v}:{}}),N(t)}catch{}};return e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:124,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:126,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV(ue,{config:s,overrideBot:v,onOverrideChange:k,showOverride:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:132,columnNumber:7},this),x&&e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:V,onChange:u=>P(u.target.checked),className:"rounded border-surface-border text-accent focus:ring-accent/30"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:141,columnNumber:11},this),e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:147,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-secondary",children:"Enable task tracking and escalation routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:140,columnNumber:9},this),e.jsxDEV(pe,{selectedConfig:s,isJsonMode:b,hasFormView:W,jsonInput:c,formFields:n,dataFields:C,onJsonChange:u=>{m(u),d("")},onToggleMode:h,onUpdateFormField:S,onSetFormFields:f},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:152,columnNumber:7},this),w&&e.jsxDEV("p",{className:"text-xs text-status-error",children:w},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:165,columnNumber:22},this),p.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:p.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:166,columnNumber:32},this),p.isSuccess&&e.jsxDEV("p",{className:"text-xs text-status-success",children:"Workflow started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:167,columnNumber:36},this),e.jsxDEV("button",{onClick:D,disabled:p.isPending,className:"btn-primary",children:p.isPending?"Starting...":"Start Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:169,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:122,columnNumber:5},this)}function he({children:s,className:t=""}){return e.jsxDEV("span",{className:`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${t}`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/Pill.tsx",lineNumber:10,columnNumber:5},this)}function Ne({selected:s,activeTypes:t}){const N=z(),o=K(),[r,l]=i.useState(""),[p,c]=i.useState(""),[m,w]=i.useState(""),[d,n]=i.useState("json"),f=i.useMemo(()=>s!=null&&s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O,[s==null?void 0:s.envelope_schema]),b=p!==f,g=i.useMemo(()=>{try{return JSON.parse(p)}catch{return null}},[p]),v=i.useMemo(()=>g?le(g):null,[g]);i.useEffect(()=>{l(s.cron_schedule??""),c(s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O),w(""),n("json"),o.reset()},[s.workflow_type]);const{data:k,isLoading:x}=U({entity:s.workflow_type,limit:10}),V=()=>{let a;try{a=JSON.parse(p)}catch{w("Invalid JSON in envelope");return}w(""),o.mutate({config:s,cron_schedule:r.trim()||null,envelope_schema:a})},P=()=>{l(""),o.mutate({config:s,cron_schedule:null})},C=()=>{c(f),w("")},W=(a,h)=>{if(!g)return;const S={...g.data??{}},D=S[a];typeof D=="number"?S[a]=h===""?0:Number(h):typeof D=="boolean"?S[a]=h==="true":S[a]=h,c(JSON.stringify({...g,data:S},null,2))};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:105,columnNumber:11},this),s.cron_schedule&&e.jsxDEV(he,{className:t.has(s.workflow_type)?"bg-status-success/10 text-status-success":"bg-surface-sunken text-text-tertiary",children:t.has(s.workflow_type)?"active":"inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:107,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:104,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:103,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3",children:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2",children:"Cron runs as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:s.execute_as??"lt-system"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:127,columnNumber:11},this),!s.execute_as&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary ml-1",children:"system bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:124,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:138,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:r,onChange:a=>{l(a.target.value),o.reset()},placeholder:"0 */6 * * *",className:"input font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:141,columnNumber:13},this),r.trim()&&L(r.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:L(r.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:149,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("button",{onClick:V,disabled:o.isPending,className:"btn-primary text-xs shrink-0",children:o.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:154,columnNumber:11},this),s.cron_schedule&&e.jsxDEV("button",{onClick:P,disabled:o.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:158,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:139,columnNumber:9},this),o.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:163,columnNumber:31},this),o.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:o.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:164,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:137,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(M,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:ne.map(([a,h])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(a),o.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:178,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:h},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:179,columnNumber:15},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:172,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:170,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV(M,{children:"Cron Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:188,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[b&&e.jsxDEV("button",{type:"button",onClick:C,className:"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors",children:"Reset to default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:191,columnNumber:15},this),v&&e.jsxDEV("div",{className:"flex rounded overflow-hidden border border-surface-border",children:[e.jsxDEV("button",{type:"button",onClick:()=>n("form"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="form"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:197,columnNumber:17},this),e.jsxDEV("button",{type:"button",onClick:()=>n("json"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="json"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:198,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:187,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mb-3",children:"This envelope is sent as the workflow input on each cron invocation."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:203,columnNumber:9},this),d==="form"&&v?e.jsxDEV("div",{className:"space-y-3",children:v.map(({key:a,value:h,type:S})=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[11px] text-text-secondary mb-1 font-mono",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:211,columnNumber:17},this),S==="boolean"?e.jsxDEV("select",{value:h,onChange:D=>W(a,D.target.value),className:"input text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:214,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:215,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:213,columnNumber:19},this):e.jsxDEV("input",{type:S==="number"?"number":"text",value:h,onChange:D=>W(a,D.target.value),className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:218,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:208,columnNumber:11},this):e.jsxDEV("textarea",{value:p,onChange:a=>{c(a.target.value),w("")},className:"input-json w-full",rows:10,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:224,columnNumber:11},this),m&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:233,columnNumber:27},this),b&&e.jsxDEV("p",{className:"text-[10px] text-accent mt-1.5",children:"Envelope has been customized. Changes will be saved with the schedule."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:234,columnNumber:32},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:186,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Recent Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:239,columnNumber:9},this),e.jsxDEV(oe,{columns:ie,data:(k==null?void 0:k.jobs)??[],keyFn:a=>a.workflow_id,onRowClick:a=>N(`/workflows/executions/${a.workflow_id}`),isLoading:x,emptyMessage:"No executions yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:240,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:238,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:101,columnNumber:5},this)}function be(){const[s,t]=re(),{data:N,isLoading:o}=G(),{data:r,isLoading:l}=Q(),{data:p}=X(),c=s.get("mode")||"now",m=s.get("type")??"",w=N??[],d=i.useMemo(()=>{const a=new Map;for(const h of r??[])a.set(h.workflow_type,h.tier??"durable");return a},[r]),n=i.useMemo(()=>{const a=w.filter(E=>E.invocable),h=new Set(w.map(E=>E.workflow_type)),D=(r??[]).filter(E=>E.active&&!h.has(E.workflow_type)).map(E=>({workflow_type:E.workflow_type,task_queue:E.task_queue??"",invocable:!0,description:null,default_role:"reviewer",roles:[],invocation_roles:[],consumes:[],envelope_schema:null,resolver_schema:null,cron_schedule:null,execute_as:null}));return[...a,...D]},[w,r]),f=n.find(a=>a.workflow_type===m),b=new Set((p??[]).filter(a=>a.active).map(a=>a.workflow_type)),g="/workflows/executions",v=i.useRef(null),[k,x]=i.useState(!0),V=`${m}:${c}`,P=i.useRef(V);i.useEffect(()=>{if(P.current!==V){x(!1);const a=setTimeout(()=>{P.current=V,x(!0)},120);return()=>clearTimeout(a)}},[V]),i.useEffect(()=>{n.length===1&&!s.get("type")&&t({type:n[0].workflow_type,mode:c},{replace:!0})},[n.length]);const C=a=>{const h={mode:a};m&&(h.type=m),t(h,{replace:!0})},W=a=>{t({type:a.workflow_type,mode:c},{replace:!0})};return o||l?e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:98,columnNumber:9},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:99,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:97,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(Y,{title:"Invoke Workflow",docsHash:"#docs:dashboard.md:invoke-workflow",actions:e.jsxDEV(ce,{mode:c,onChange:C},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:109,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:106,columnNumber:7},this),n.length===0?e.jsxDEV("div",{className:"py-16 text-center",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:"No invocable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:114,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:115,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:113,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[e.jsxDEV(me,{configs:n,selectedType:m,onSelect:W,tierMap:d,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{ref:v,className:`lg:col-span-2 transition-all duration-200 ease-out ${k?"opacity-100 translate-y-0":"opacity-0 translate-y-1"}`,children:m&&f?c==="now"?e.jsxDEV(fe,{selected:f,executionsPath:g},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:135,columnNumber:17},this):e.jsxDEV(Ne,{selected:f,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:137,columnNumber:17},this):e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-24 text-center",children:[e.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4",children:c==="schedule"?e.jsxDEV(F,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:143,columnNumber:23},this):e.jsxDEV(B,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:144,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:141,columnNumber:17},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-1",children:c==="schedule"?"Automate on a schedule":"Ready when you are"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:146,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs text-text-quaternary",children:c==="schedule"?"Choose a workflow to configure its schedule":"Choose a workflow from the list to get started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:149,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:140,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:127,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:118,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:105,columnNumber:5},this)}function We(){return e.jsxDEV(be,{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/DurableInvokePage.tsx",lineNumber:4,columnNumber:10},this)}export{We as DurableInvokePage,be as StartWorkflowPage};
6
- //# sourceMappingURL=index-DOE7HCzb.js.map
4
+ }`;function de(s){return typeof s=="boolean"?"boolean":typeof s=="number"?"number":Array.isArray(s)?"array":s!==null&&typeof s=="object"?"object":"string"}function $(s){if(!s)return[];const t=s.data;return!t||typeof t!="object"?[]:Object.entries(t).map(([N,o])=>({key:N,type:de(o),defaultValue:o}))}function J(s){return{...s}}function A(s,t){return JSON.stringify({data:s,metadata:t},null,2)}function ue({config:s,overrideBot:t,onOverrideChange:N,showOverride:o}){const{user:r}=q(),l=t||s.execute_as;return e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-2",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:23,columnNumber:9},this),l&&!t&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"configured default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:25,columnNumber:11},this),t&&e.jsxDEV("span",{className:"text-[9px] text-accent",children:"admin override"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:28,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:22,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:l?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:34,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:35,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:33,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Z,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:39,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.username)||"you"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:40,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:31,columnNumber:7},this),o&&N&&e.jsxDEV("div",{className:"pt-1 border-t border-surface-border",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary mb-1 block",children:"Override identity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:48,columnNumber:11},this),e.jsxDEV(ae,{selected:t??"",onChange:N,placeholder:s.execute_as?`Default: ${s.execute_as}`:"Invoking user (default)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/IdentitySummary.tsx",lineNumber:21,columnNumber:5},this)}function pe({selectedConfig:s,isJsonMode:t,hasFormView:N,jsonInput:o,formFields:r,dataFields:l,onJsonChange:p,onToggleMode:c,onUpdateFormField:m,onSetFormFields:w}){return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV("label",{className:"block text-xs text-text-secondary",children:"Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[N&&e.jsxDEV("button",{type:"button",onClick:c,className:"text-[10px] text-accent hover:underline",children:t?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:41,columnNumber:13},this),s.envelope_schema?e.jsxDEV("span",{className:"text-[10px] text-accent",children:"Pre-filled from workflow config"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:50,columnNumber:13},this):e.jsxDEV("span",{className:"text-[10px] text-status-warning",children:"No template"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:39,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:35,columnNumber:7},this),!s.envelope_schema&&e.jsxDEV("div",{className:"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3",children:e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:["This workflow has no input template. Edit the JSON directly below, or register it as a ",e.jsxDEV(te,{to:"/workflows/registry/new",className:"text-status-success hover:underline",children:"certified workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:64,columnNumber:100},this)," in the Workflow Registry for pre-filled fields and form-based input."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:63,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:62,columnNumber:9},this),t||!N?e.jsxDEV("textarea",{value:o,onChange:d=>p(d.target.value),className:"input-json",rows:12,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:71,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-3",children:l.map(({key:d,type:i})=>{var v,k;const f=r[d],b=typeof f=="string"?f:JSON.stringify(f??(i==="array"?[]:{}),null,2),g=Math.min(20,Math.max(4,((k=(v=b==null?void 0:b.split)==null?void 0:v.call(b,`
5
+ `))==null?void 0:k.length)??4));return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[d,e.jsxDEV("span",{className:"ml-2 font-normal normal-case",children:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:99,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:97,columnNumber:17},this),i==="boolean"?e.jsxDEV("select",{value:String(f??!1),onChange:x=>m(d,x.target.value,i),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:111,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:112,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:104,columnNumber:19},this):i==="object"||i==="array"?e.jsxDEV("textarea",{value:b,onChange:x=>{try{m(d,JSON.parse(x.target.value),i)}catch{w({...r,[d]:x.target.value})}},className:"input-json w-full",rows:g,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:115,columnNumber:19},this):e.jsxDEV("input",{type:i==="number"?"number":"text",value:String(f??""),onChange:x=>m(d,x.target.value,i),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:137,columnNumber:19},this)]},d,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:96,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:80,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1.5",children:["The envelope wraps your workflow input. ",e.jsxDEV("code",{className:"text-accent/80",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:49},this)," holds workflow-specific fields; ",e.jsxDEV("code",{className:"text-accent/80",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:152,columnNumber:126},this)," is optional context."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:151,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/EnvelopeEditor.tsx",lineNumber:34,columnNumber:5},this)}function fe({selected:s,executionsPath:t}){var E,R;const N=z(),{isSuperAdmin:o,hasRoleType:r}=q(),l=o||r("admin"),p=H(),[c,m]=n.useState(O),[w,d]=n.useState(""),[i,f]=n.useState({}),[b,g]=n.useState(!1),[v,k]=n.useState(""),x=(((E=s.roles)==null?void 0:E.length)??0)>0||(((R=s.consumes)==null?void 0:R.length)??0)>0,[V,P]=n.useState(x),C=n.useMemo(()=>$(s.envelope_schema??null),[s.envelope_schema]),W=C.length>0,a=n.useMemo(()=>{if(!s.envelope_schema)return{};const u=s.envelope_schema.metadata;return u&&typeof u=="object"?u:{}},[s.envelope_schema]);n.useEffect(()=>{var _;d(""),p.reset();const u=sessionStorage.getItem("lt:invoke:prefill");if(u){sessionStorage.removeItem("lt:invoke:prefill"),m(u);try{const j=JSON.parse(u),I=(j==null?void 0:j.data)??j;I&&typeof I=="object"&&f(J(I))}catch{}g(!0),k("");return}const y=s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O;m(y),(_=s.envelope_schema)!=null&&_.data&&typeof s.envelope_schema.data=="object"?f(J(s.envelope_schema.data)):f({}),g(!$(s.envelope_schema??null).length),k(""),P(x)},[s.workflow_type]);const h=()=>{if(b)try{const u=JSON.parse(c);u.data&&typeof u.data=="object"&&f(J(u.data))}catch{}else m(A(i,a));g(!b)},S=(u,y,_)=>{let j=y;_==="number"?j=y===""?0:Number(y):_==="boolean"&&(j=y==="true"||y===!0);const I={...i,[u]:j};f(I),m(A(I,a))},D=async()=>{d("");let u;try{u=JSON.parse(c)}catch{d("Invalid JSON");return}const{data:y,metadata:_}=u;if(!y||typeof y!="object"){d('Envelope must include a "data" object');return}try{const j={..._??{}};V&&(j.certified=!0),await p.mutateAsync({workflowType:s.workflow_type,data:y,metadata:j,...v?{execute_as:v}:{}}),N(t)}catch{}};return e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:124,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:126,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV(ue,{config:s,overrideBot:v,onOverrideChange:k,showOverride:l},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:132,columnNumber:7},this),x&&e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:V,onChange:u=>P(u.target.checked),className:"rounded border-surface-border text-accent focus:ring-accent/30"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:141,columnNumber:11},this),e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:147,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-secondary",children:"Enable task tracking and escalation routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:140,columnNumber:9},this),e.jsxDEV(pe,{selectedConfig:s,isJsonMode:b,hasFormView:W,jsonInput:c,formFields:i,dataFields:C,onJsonChange:u=>{m(u),d("")},onToggleMode:h,onUpdateFormField:S,onSetFormFields:f},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:152,columnNumber:7},this),w&&e.jsxDEV("p",{className:"text-xs text-status-error",children:w},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:165,columnNumber:22},this),p.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:p.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:166,columnNumber:32},this),p.isSuccess&&e.jsxDEV("p",{className:"text-xs text-status-success",children:"Workflow started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:167,columnNumber:36},this),e.jsxDEV("button",{onClick:D,disabled:p.isPending,className:"btn-primary",children:p.isPending?"Starting...":"Start Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:169,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartNowPanel.tsx",lineNumber:122,columnNumber:5},this)}function he({children:s,className:t=""}){return e.jsxDEV("span",{className:`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${t}`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/Pill.tsx",lineNumber:10,columnNumber:5},this)}function Ne({selected:s,activeTypes:t}){const N=z(),o=K(),[r,l]=n.useState(""),[p,c]=n.useState(""),[m,w]=n.useState(""),[d,i]=n.useState("json"),f=n.useMemo(()=>s!=null&&s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O,[s==null?void 0:s.envelope_schema]),b=p!==f,g=n.useMemo(()=>{try{return JSON.parse(p)}catch{return null}},[p]),v=n.useMemo(()=>g?le(g):null,[g]);n.useEffect(()=>{l(s.cron_schedule??""),c(s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):O),w(""),i("json"),o.reset()},[s.workflow_type]);const{data:k,isLoading:x}=U({entity:s.workflow_type,limit:10}),V=()=>{let a;try{a=JSON.parse(p)}catch{w("Invalid JSON in envelope");return}w(""),o.mutate({config:s,cron_schedule:r.trim()||null,envelope_schema:a})},P=()=>{l(""),o.mutate({config:s,cron_schedule:null})},C=()=>{c(f),w("")},W=(a,h)=>{if(!g)return;const S={...g.data??{}},D=S[a];typeof D=="number"?S[a]=h===""?0:Number(h):typeof D=="boolean"?S[a]=h==="true":S[a]=h,c(JSON.stringify({...g,data:S},null,2))};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("h2",{className:"text-lg font-mono font-medium text-text-primary",children:s.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:105,columnNumber:11},this),s.cron_schedule&&e.jsxDEV(he,{className:t.has(s.workflow_type)?"bg-status-success/10 text-status-success":"bg-surface-sunken text-text-tertiary",children:t.has(s.workflow_type)?"active":"inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:107,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:104,columnNumber:9},this),s.description&&e.jsxDEV("p",{className:"text-xs text-text-quaternary mt-1 leading-relaxed",children:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:116,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:103,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg px-4 py-3",children:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2",children:"Cron runs as"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(T,{className:"w-3.5 h-3.5 text-accent/70"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-text-primary font-mono",children:s.execute_as??"lt-system"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:127,columnNumber:11},this),!s.execute_as&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary ml-1",children:"system bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:124,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:123,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:138,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:r,onChange:a=>{l(a.target.value),o.reset()},placeholder:"0 */6 * * *",className:"input font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:141,columnNumber:13},this),r.trim()&&L(r.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:L(r.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:149,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:140,columnNumber:11},this),e.jsxDEV("button",{onClick:V,disabled:o.isPending,className:"btn-primary text-xs shrink-0",children:o.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:154,columnNumber:11},this),s.cron_schedule&&e.jsxDEV("button",{onClick:P,disabled:o.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:158,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:139,columnNumber:9},this),o.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:163,columnNumber:31},this),o.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:o.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:164,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:137,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(M,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:ie.map(([a,h])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(a),o.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:178,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:h},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:179,columnNumber:15},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:172,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:170,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-baseline justify-between mb-2",children:[e.jsxDEV(M,{children:"Cron Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:188,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[b&&e.jsxDEV("button",{type:"button",onClick:C,className:"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors",children:"Reset to default"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:191,columnNumber:15},this),v&&e.jsxDEV("div",{className:"flex rounded overflow-hidden border border-surface-border",children:[e.jsxDEV("button",{type:"button",onClick:()=>i("form"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="form"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:197,columnNumber:17},this),e.jsxDEV("button",{type:"button",onClick:()=>i("json"),className:`px-2 py-0.5 text-[10px] transition-colors ${d==="json"?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-secondary"}`,children:"JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:198,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:196,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:187,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mb-3",children:"This envelope is sent as the workflow input on each cron invocation."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:203,columnNumber:9},this),d==="form"&&v?e.jsxDEV("div",{className:"space-y-3",children:v.map(({key:a,value:h,type:S})=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[11px] text-text-secondary mb-1 font-mono",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:211,columnNumber:17},this),S==="boolean"?e.jsxDEV("select",{value:h,onChange:D=>W(a,D.target.value),className:"input text-xs w-full",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:214,columnNumber:21},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:215,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:213,columnNumber:19},this):e.jsxDEV("input",{type:S==="number"?"number":"text",value:h,onChange:D=>W(a,D.target.value),className:"input text-xs font-mono w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:218,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:208,columnNumber:11},this):e.jsxDEV("textarea",{value:p,onChange:a=>{c(a.target.value),w("")},className:"input-json w-full",rows:10,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:224,columnNumber:11},this),m&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:233,columnNumber:27},this),b&&e.jsxDEV("p",{className:"text-[10px] text-accent mt-1.5",children:"Envelope has been customized. Changes will be saved with the schedule."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:234,columnNumber:32},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:186,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV(M,{className:"mb-3",children:"Recent Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:239,columnNumber:9},this),e.jsxDEV(oe,{columns:ne,data:(k==null?void 0:k.jobs)??[],keyFn:a=>a.workflow_id,onRowClick:a=>N(`/workflows/executions/${a.workflow_id}`),isLoading:x,emptyMessage:"No executions yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:240,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:238,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/SchedulePanel.tsx",lineNumber:101,columnNumber:5},this)}function be(){const[s,t]=re(),{data:N,isLoading:o}=G(),{data:r,isLoading:l}=Q(),{data:p}=X(),c=s.get("mode")||"now",m=s.get("type")??"",w=N??[],d=n.useMemo(()=>{const a=new Map;for(const h of r??[])a.set(h.workflow_type,h.tier??"durable");return a},[r]),i=n.useMemo(()=>{const a=w.filter(E=>E.invocable),h=new Set(w.map(E=>E.workflow_type)),D=(r??[]).filter(E=>E.active&&!h.has(E.workflow_type)).map(E=>({workflow_type:E.workflow_type,task_queue:E.task_queue??"",invocable:!0,description:null,default_role:"reviewer",roles:[],invocation_roles:[],consumes:[],envelope_schema:null,resolver_schema:null,cron_schedule:null,execute_as:null}));return[...a,...D]},[w,r]),f=i.find(a=>a.workflow_type===m),b=new Set((p??[]).filter(a=>a.active).map(a=>a.workflow_type)),g="/workflows/executions",v=n.useRef(null),[k,x]=n.useState(!0),V=`${m}:${c}`,P=n.useRef(V);n.useEffect(()=>{if(P.current!==V){x(!1);const a=setTimeout(()=>{P.current=V,x(!0)},120);return()=>clearTimeout(a)}},[V]),n.useEffect(()=>{i.length===1&&!s.get("type")&&t({type:i[0].workflow_type,mode:c},{replace:!0})},[i.length]);const C=a=>{const h={mode:a};m&&(h.type=m),t(h,{replace:!0})},W=a=>{t({type:a.workflow_type,mode:c},{replace:!0})};return o||l?e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:98,columnNumber:9},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:99,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:97,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(Y,{title:"Invoke Workflow",docsHash:"#docs:dashboard.md:invoke-workflow",actions:e.jsxDEV(ce,{mode:c,onChange:C},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:109,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:106,columnNumber:7},this),i.length===0?e.jsxDEV("div",{className:"py-16 text-center",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:"No invocable workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:114,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:115,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:113,columnNumber:9},this):e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[e.jsxDEV(me,{configs:i,selectedType:m,onSelect:W,tierMap:d,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{ref:v,className:`lg:col-span-2 transition-all duration-200 ease-out ${k?"opacity-100 translate-y-0":"opacity-0 translate-y-1"}`,children:m&&f?c==="now"?e.jsxDEV(fe,{selected:f,executionsPath:g},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:135,columnNumber:17},this):e.jsxDEV(Ne,{selected:f,activeTypes:b},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:137,columnNumber:17},this):e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-24 text-center",children:[e.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4",children:c==="schedule"?e.jsxDEV(F,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:143,columnNumber:23},this):e.jsxDEV(B,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:144,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:141,columnNumber:17},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-1",children:c==="schedule"?"Automate on a schedule":"Ready when you are"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:146,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs text-text-quaternary",children:c==="schedule"?"Choose a workflow to configure its schedule":"Choose a workflow from the list to get started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:149,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:140,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:127,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:118,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/start/StartWorkflowPage.tsx",lineNumber:105,columnNumber:5},this)}function We(){return e.jsxDEV(be,{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/start/DurableInvokePage.tsx",lineNumber:4,columnNumber:10},this)}export{We as DurableInvokePage,be as StartWorkflowPage};
6
+ //# sourceMappingURL=index-B9ealjkt.js.map