@hotmeshio/long-tail 0.1.14 → 0.1.16

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 (360) hide show
  1. package/README.md +15 -0
  2. package/build/api/escalations/bulk.d.ts +78 -0
  3. package/build/api/escalations/bulk.js +279 -0
  4. package/build/api/escalations/claim.d.ts +30 -0
  5. package/build/api/escalations/claim.js +121 -0
  6. package/build/api/escalations/create.d.ts +29 -0
  7. package/build/api/escalations/create.js +101 -0
  8. package/build/api/escalations/helpers.d.ts +10 -0
  9. package/build/api/escalations/helpers.js +80 -0
  10. package/build/api/escalations/index.d.ts +6 -0
  11. package/build/api/escalations/index.js +26 -0
  12. package/build/api/escalations/list.d.ts +75 -0
  13. package/build/api/escalations/list.js +170 -0
  14. package/build/api/escalations/resolve.d.ts +18 -0
  15. package/build/api/escalations/resolve.js +243 -0
  16. package/build/api/escalations/single.d.ts +37 -0
  17. package/build/api/escalations/single.js +123 -0
  18. package/build/api/files.d.ts +3 -0
  19. package/build/api/files.js +18 -1
  20. package/build/api/knowledge.d.ts +36 -0
  21. package/build/api/knowledge.js +112 -0
  22. package/build/api/mcp/index.d.ts +2 -0
  23. package/build/api/mcp/index.js +16 -0
  24. package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
  25. package/build/api/{mcp.js → mcp/servers.js} +4 -65
  26. package/build/api/mcp/tools.d.ts +33 -0
  27. package/build/api/mcp/tools.js +64 -0
  28. package/build/api/settings.js +6 -1
  29. package/build/api/workflows/config.d.ts +64 -0
  30. package/build/api/workflows/config.js +142 -0
  31. package/build/api/workflows/discovery.d.ts +29 -0
  32. package/build/api/workflows/discovery.js +153 -0
  33. package/build/api/workflows/index.d.ts +3 -0
  34. package/build/api/workflows/index.js +18 -0
  35. package/build/api/workflows/invocation.d.ts +67 -0
  36. package/build/api/workflows/invocation.js +188 -0
  37. package/build/api/yaml-workflows/cron.d.ts +39 -0
  38. package/build/api/yaml-workflows/cron.js +127 -0
  39. package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
  40. package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +99 -380
  41. package/build/api/yaml-workflows/deploy.d.ts +71 -0
  42. package/build/api/yaml-workflows/deploy.js +223 -0
  43. package/build/api/yaml-workflows/helpers.d.ts +2 -0
  44. package/build/api/yaml-workflows/helpers.js +8 -0
  45. package/build/api/yaml-workflows/index.d.ts +4 -0
  46. package/build/api/yaml-workflows/index.js +27 -0
  47. package/build/api/yaml-workflows/versions.d.ts +43 -0
  48. package/build/api/yaml-workflows/versions.js +124 -0
  49. package/build/bin/ltc.d.ts +2 -0
  50. package/build/bin/ltc.js +220 -0
  51. package/build/examples/seed-data.d.ts +55 -0
  52. package/build/examples/seed-data.js +161 -0
  53. package/build/examples/seed.js +7 -164
  54. package/build/index.d.ts +1 -1
  55. package/build/lib/cli/auth.d.ts +23 -0
  56. package/build/lib/cli/auth.js +167 -0
  57. package/build/lib/cli/client.d.ts +6 -0
  58. package/build/lib/cli/client.js +31 -0
  59. package/build/lib/cli/commands/escalations.d.ts +19 -0
  60. package/build/lib/cli/commands/escalations.js +69 -0
  61. package/build/lib/cli/commands/knowledge.d.ts +18 -0
  62. package/build/lib/cli/commands/knowledge.js +87 -0
  63. package/build/lib/cli/commands/mcp.d.ts +8 -0
  64. package/build/lib/cli/commands/mcp.js +33 -0
  65. package/build/lib/cli/commands/pipelines.d.ts +16 -0
  66. package/build/lib/cli/commands/pipelines.js +67 -0
  67. package/build/lib/cli/commands/status.d.ts +1 -0
  68. package/build/lib/cli/commands/status.js +28 -0
  69. package/build/lib/cli/commands/users.d.ts +7 -0
  70. package/build/lib/cli/commands/users.js +25 -0
  71. package/build/lib/cli/commands/workflows.d.ts +16 -0
  72. package/build/lib/cli/commands/workflows.js +104 -0
  73. package/build/lib/cli/compile.d.ts +2 -0
  74. package/build/lib/cli/compile.js +165 -0
  75. package/build/lib/cli/format.d.ts +23 -0
  76. package/build/lib/cli/format.js +94 -0
  77. package/build/lib/cli/init.d.ts +1 -0
  78. package/build/lib/cli/init.js +61 -0
  79. package/build/lib/cli/output.d.ts +27 -0
  80. package/build/lib/cli/output.js +126 -0
  81. package/build/lib/cli/scanner.d.ts +10 -0
  82. package/build/lib/cli/scanner.js +164 -0
  83. package/build/lib/cli/types.d.ts +16 -0
  84. package/build/lib/cli/types.js +2 -0
  85. package/build/lib/db/schemas/schemas/001_schema.sql +485 -0
  86. package/build/lib/db/schemas/schemas/002_seed.sql +92 -0
  87. package/build/lib/events/socketio.d.ts +12 -0
  88. package/build/lib/events/socketio.js +24 -1
  89. package/build/lib/logger/index.d.ts +0 -9
  90. package/build/lib/logger/index.js +9 -4
  91. package/build/lib/storage/index.js +2 -2
  92. package/build/routes/file-browser.js +14 -0
  93. package/build/routes/index.js +4 -0
  94. package/build/routes/knowledge.d.ts +2 -0
  95. package/build/routes/knowledge.js +141 -0
  96. package/build/routes/nats-credentials.d.ts +2 -0
  97. package/build/routes/nats-credentials.js +22 -0
  98. package/build/routes/yaml-workflows/crud.js +9 -0
  99. package/build/sdk/index.d.ts +17 -0
  100. package/build/sdk/index.js +19 -0
  101. package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
  102. package/build/services/mcp/client/connection-dispatch.js +78 -0
  103. package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
  104. package/build/services/mcp/client/connection-lifecycle.js +296 -0
  105. package/build/services/mcp/client/connection-test.d.ts +10 -0
  106. package/build/services/mcp/client/connection-test.js +49 -0
  107. package/build/services/mcp/client/connection.d.ts +3 -68
  108. package/build/services/mcp/client/connection.js +15 -393
  109. package/build/services/mcp/server-lifecycle.d.ts +27 -0
  110. package/build/services/mcp/server-lifecycle.js +49 -0
  111. package/build/services/mcp/server-tools.d.ts +13 -0
  112. package/build/services/mcp/server-tools.js +287 -0
  113. package/build/services/mcp/server.d.ts +2 -26
  114. package/build/services/mcp/server.js +7 -315
  115. package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
  116. package/build/services/yaml-workflow/builder-regenerate.js +111 -0
  117. package/build/services/yaml-workflow/db-versions.d.ts +17 -0
  118. package/build/services/yaml-workflow/db-versions.js +76 -0
  119. package/build/services/yaml-workflow/db.d.ts +3 -13
  120. package/build/services/yaml-workflow/db.js +15 -71
  121. package/build/services/yaml-workflow/deployer-helpers.js +48 -17
  122. package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
  123. package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
  124. package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
  125. package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
  126. package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
  127. package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
  128. package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
  129. package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
  130. package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
  131. package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
  132. package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
  133. package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
  134. package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
  135. package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
  136. package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
  137. package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
  138. package/build/services/yaml-workflow/workers/register.js +4 -2
  139. package/build/start/adapters.js +4 -1
  140. package/build/start/socket-auth.d.ts +13 -0
  141. package/build/start/socket-auth.js +32 -0
  142. package/build/start/workers.js +6 -5
  143. package/build/system/activities/file-storage.d.ts +4 -0
  144. package/build/system/activities/file-storage.js +7 -1
  145. package/build/system/activities/knowledge.d.ts +23 -0
  146. package/build/system/activities/knowledge.js +50 -10
  147. package/build/system/activities/sql.d.ts +3 -0
  148. package/build/system/activities/sql.js +25 -1
  149. package/build/system/mcp-servers/file-storage.js +3 -1
  150. package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
  151. package/build/system/mcp-servers/human-queue-schemas.js +42 -0
  152. package/build/system/mcp-servers/human-queue.d.ts +2 -6
  153. package/build/system/mcp-servers/human-queue.js +9 -51
  154. package/build/system/mcp-servers/knowledge.js +43 -9
  155. package/build/system/mcp-servers/workflow-compiler.js +54 -0
  156. package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
  157. package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
  158. package/build/system/workflows/mcp-triage/index.js +17 -75
  159. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
  160. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
  161. package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
  162. package/build/tsconfig.tsbuildinfo +1 -1
  163. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-Bprul9Eb.js} +2 -2
  164. package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-Bprul9Eb.js.map} +1 -1
  165. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +2 -0
  166. package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js.map +1 -0
  167. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DcvILNUf.js} +2 -2
  168. package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DcvILNUf.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-BWPbzgEe.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-BWPbzgEe.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-Cy6KVLfC.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-Cy6KVLfC.js.map} +1 -1
  173. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-CRED8hvk.js} +2 -2
  174. package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-CRED8hvk.js.map} +1 -1
  175. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-BUdvxiE3.js} +2 -2
  176. package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-BUdvxiE3.js.map} +1 -1
  177. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-eOk2EqQ5.js} +2 -2
  178. package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-eOk2EqQ5.js.map} +1 -1
  179. package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-bd2PTBJd.js} +2 -2
  180. package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-bd2PTBJd.js.map} +1 -1
  181. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-BGo8vyus.js} +2 -2
  182. package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-BGo8vyus.js.map} +1 -1
  183. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-BygtU-Rh.js} +2 -2
  184. package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-BygtU-Rh.js.map} +1 -1
  185. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DUEcN5MP.js} +2 -2
  186. package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DUEcN5MP.js.map} +1 -1
  187. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-CmFhswLW.js} +2 -2
  188. package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-CmFhswLW.js.map} +1 -1
  189. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-BQNzsd3A.js} +2 -2
  190. package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-BQNzsd3A.js.map} +1 -1
  191. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-OWOn-HiC.js} +2 -2
  192. package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-OWOn-HiC.js.map} +1 -1
  193. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-OkEzvClD.js} +2 -2
  194. package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-OkEzvClD.js.map} +1 -1
  195. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +5 -0
  196. package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +1 -0
  197. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-BAuOf5TL.js} +2 -2
  198. package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-BAuOf5TL.js.map} +1 -1
  199. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-DMeiG4i_.js} +2 -2
  200. package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-DMeiG4i_.js.map} +1 -1
  201. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-CG3cNJh8.js} +2 -2
  202. package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-CG3cNJh8.js.map} +1 -1
  203. package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-Dir9Rlnx.js} +2 -2
  204. package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-Dir9Rlnx.js.map} +1 -1
  205. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-OqWC6Azy.js} +2 -2
  206. package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-OqWC6Azy.js.map} +1 -1
  207. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-FJIemmrC.js} +2 -2
  208. package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-FJIemmrC.js.map} +1 -1
  209. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-Br5y9qNO.js} +2 -2
  210. package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-Br5y9qNO.js.map} +1 -1
  211. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-C7D5d_HY.js} +2 -2
  212. package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-C7D5d_HY.js.map} +1 -1
  213. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-DZIP6grw.js} +2 -2
  214. package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-DZIP6grw.js.map} +1 -1
  215. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-BQoPYkeB.js} +2 -2
  216. package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-BQoPYkeB.js.map} +1 -1
  217. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-D6nMxMvp.js} +2 -2
  218. package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-D6nMxMvp.js.map} +1 -1
  219. package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +2 -0
  220. package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CwLnJFhy.js.map} +1 -1
  221. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-JqgAB0p3.js} +2 -2
  222. package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-JqgAB0p3.js.map} +1 -1
  223. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +2 -0
  224. package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js.map +1 -0
  225. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-B-WLhOaH.js} +2 -2
  226. package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-B-WLhOaH.js.map} +1 -1
  227. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-DVCf2ncM.js} +2 -2
  228. package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-DVCf2ncM.js.map} +1 -1
  229. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-D9Xvdf18.js} +2 -2
  230. package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-D9Xvdf18.js.map} +1 -1
  231. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-CJHMzYJj.js} +2 -2
  232. package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-CJHMzYJj.js.map} +1 -1
  233. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +2 -0
  234. package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +1 -0
  235. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-DcPnUnSJ.js} +2 -2
  236. package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-DcPnUnSJ.js.map} +1 -1
  237. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DftmYWD7.js} +2 -2
  238. package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DftmYWD7.js.map} +1 -1
  239. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-BzduBqwy.js} +2 -2
  240. package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-BzduBqwy.js.map} +1 -1
  241. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-DeewV4Gp.js} +2 -2
  242. package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-DeewV4Gp.js.map} +1 -1
  243. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-DJZq-e4R.js} +2 -2
  244. package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-DJZq-e4R.js.map} +1 -1
  245. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Dx5uwGfS.js} +2 -2
  246. package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Dx5uwGfS.js.map} +1 -1
  247. package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-CnGk7MgL.js} +2 -2
  248. package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-CnGk7MgL.js.map} +1 -1
  249. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CPQ0fIwf.js} +2 -2
  250. package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CPQ0fIwf.js.map} +1 -1
  251. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-BrD5d1AG.js} +2 -2
  252. package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-BrD5d1AG.js.map} +1 -1
  253. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-BzjhABZP.js} +2 -2
  254. package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-BzjhABZP.js.map} +1 -1
  255. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-lBp2E6rN.js} +2 -2
  256. package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-lBp2E6rN.js.map} +1 -1
  257. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +2 -0
  258. package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +1 -0
  259. package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-fc_O_YIq.js} +2 -2
  260. package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-fc_O_YIq.js.map} +1 -1
  261. package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-BYhLYHBz.js} +2 -2
  262. package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-BYhLYHBz.js.map} +1 -1
  263. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-DjJyuC1g.js} +2 -2
  264. package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-DjJyuC1g.js.map} +1 -1
  265. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CQG3Rh2y.js} +2 -2
  266. package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CQG3Rh2y.js.map} +1 -1
  267. package/dashboard/dist/assets/{index-DX6zxr6t.js → index-2nBhR7Dg.js} +2 -2
  268. package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-2nBhR7Dg.js.map} +1 -1
  269. package/dashboard/dist/assets/index-4IUoh_hd.js +2 -0
  270. package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-4IUoh_hd.js.map} +1 -1
  271. package/dashboard/dist/assets/index-B2CqPzLK.js +2 -0
  272. package/dashboard/dist/assets/index-B2CqPzLK.js.map +1 -0
  273. package/dashboard/dist/assets/index-B78xalb4.js +2 -0
  274. package/dashboard/dist/assets/index-B78xalb4.js.map +1 -0
  275. package/dashboard/dist/assets/index-BI8r69O_.js +2 -0
  276. package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-BI8r69O_.js.map} +1 -1
  277. package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
  278. package/dashboard/dist/assets/{index-BmVCyB6C.js → index-CUqCBBZG.js} +2 -2
  279. package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-CUqCBBZG.js.map} +1 -1
  280. package/dashboard/dist/assets/index-D51PaQZY.js +2 -0
  281. package/dashboard/dist/assets/index-D51PaQZY.js.map +1 -0
  282. package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-DNtXXy1o.js} +2 -2
  283. package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-DNtXXy1o.js.map} +1 -1
  284. package/dashboard/dist/assets/{index-DNytWfSZ.js → index-DR4qQvlW.js} +2 -2
  285. package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-DR4qQvlW.js.map} +1 -1
  286. package/dashboard/dist/assets/index-Dh0PCbR-.js +15 -0
  287. package/dashboard/dist/assets/index-Dh0PCbR-.js.map +1 -0
  288. package/dashboard/dist/assets/index-KYpLvJKB.js +5 -0
  289. package/dashboard/dist/assets/index-KYpLvJKB.js.map +1 -0
  290. package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-sNrqYt0Q.js} +73 -73
  291. package/dashboard/dist/assets/index-sNrqYt0Q.js.map +1 -0
  292. package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-D2XfRh8v.js} +2 -2
  293. package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-D2XfRh8v.js.map} +1 -1
  294. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-CIx_mIC7.js} +2 -2
  295. package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-CIx_mIC7.js.map} +1 -1
  296. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-C9_J4LIH.js} +2 -2
  297. package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-C9_J4LIH.js.map} +1 -1
  298. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-BwMljx6f.js} +2 -2
  299. package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-BwMljx6f.js.map} +1 -1
  300. package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-Bd_sTV6I.js} +2 -2
  301. package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-Bd_sTV6I.js.map} +1 -1
  302. package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-BCb8eFyA.js} +2 -2
  303. package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-BCb8eFyA.js.map} +1 -1
  304. package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-Bq54qGGq.js} +2 -2
  305. package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-Bq54qGGq.js.map} +1 -1
  306. package/dashboard/dist/assets/useEventHooks-BTbGf536.js +2 -0
  307. package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BTbGf536.js.map} +1 -1
  308. package/dashboard/dist/assets/useYamlActivityEvents-CsYP09W5.js +2 -0
  309. package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-CsYP09W5.js.map} +1 -1
  310. package/dashboard/dist/assets/{users-CxIMy_xw.js → users-BTBhafGc.js} +2 -2
  311. package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-BTBhafGc.js.map} +1 -1
  312. package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
  313. package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
  314. package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-BkzA4ahe.js} +2 -2
  315. package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-BkzA4ahe.js.map} +1 -1
  316. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-Cs0EYp0F.js} +2 -2
  317. package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-Cs0EYp0F.js.map} +1 -1
  318. package/dashboard/dist/index.html +3 -3
  319. package/docs/api/http/file-browser.md +101 -0
  320. package/docs/api/http/knowledge.md +203 -0
  321. package/docs/api/http/settings.md +6 -4
  322. package/docs/api/sdk/files.md +68 -0
  323. package/docs/api/sdk/knowledge.md +126 -0
  324. package/docs/api/sdk/settings.md +3 -2
  325. package/docs/cli.md +171 -0
  326. package/docs/compilation.md +16 -0
  327. package/docs/compiler.md +311 -0
  328. package/docs/events.md +19 -0
  329. package/docs/workflows.md +19 -0
  330. package/package.json +13 -2
  331. package/build/api/escalations.d.ts +0 -271
  332. package/build/api/escalations.js +0 -932
  333. package/build/api/workflows.d.ts +0 -158
  334. package/build/api/workflows.js +0 -414
  335. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
  336. package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
  337. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
  338. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
  339. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
  340. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
  341. package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
  342. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
  343. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
  344. package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
  345. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
  346. package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
  347. package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
  348. package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
  349. package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
  350. package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
  351. package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
  352. package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
  353. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
  354. package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
  355. package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
  356. package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
  357. package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
  358. package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
  359. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
  360. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{b as j,j as e}from"./index-sNrqYt0Q.js";import{u as $,c as T,a as m}from"./vendor-query-DLp59M9_.js";import{P as q}from"./PageHeader-FJIemmrC.js";import{F as A,a as G}from"./FilterBar-BQNzsd3A.js";import{L as H}from"./ListToolbar-OWOn-HiC.js";import{E as K}from"./EmptyState-BygtU-Rh.js";import{F as X,k as B,D as U,H as J,i as Q,al as Y,am as Z,an as ee,ao as se,ap as ae,X as ie,aq as re,_ as te,ar as le,l as ne,j as oe}from"./vendor-icons-CWl44VA6.js";import{T as M}from"./TimeAgo-DJZq-e4R.js";import{f as me}from"./vendor-react-Co3Y8ikm.js";function ce(s,r=100,t){const a=new URLSearchParams;s&&a.set("prefix",s),a.set("pageSize",String(r)),t&&a.set("continuationToken",t);const l=a.toString();return $({queryKey:["fileBrowse",s,r,t],queryFn:()=>j(`/file-browser/browse?${l}`)})}function ue(s){return $({queryKey:["fileMetadata",s],queryFn:()=>j(`/file-browser/metadata/${s}`),enabled:!!s})}function de(){return T({mutationFn:s=>j("/file-browser/signed-url",{method:"POST",body:JSON.stringify(s)})})}function pe(){return T({mutationFn:s=>j(`/file-browser/delete/${s}`,{method:"DELETE"})})}function be(s){return`/api/files/${s.replace(/^\/+/,"")}`}function fe({prefix:s,onNavigate:r}){const t=s?s.replace(/\/+$/,"").split("/").filter(Boolean):[];return e.jsxDEV("nav",{className:"flex items-center gap-1 text-sm mb-6 min-h-[28px]",children:[e.jsxDEV("button",{onClick:()=>r(""),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${t.length===0?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(X,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("span",{children:"Files"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:13,columnNumber:7},this),t.map((a,l)=>{const i=l===t.length-1,c=t.slice(0,l+1).join("/")+"/";return e.jsxDEV("span",{className:"flex items-center gap-1",children:[e.jsxDEV(B,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:30,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>r(c),className:`px-1.5 py-0.5 rounded transition-colors ${i?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:31,columnNumber:13},this)]},c,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:29,columnNumber:11},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:12,columnNumber:5},this)}function he(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function F(s){return s.split("/").pop()||s}function L({label:s,value:r,mono:t,children:a}){return e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("dd",{className:`text-sm text-text-secondary ${t?"font-mono text-xs break-all":""}`,children:a||r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:32,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:30,columnNumber:5},this)}function Ne({url:s}){const[r,t]=m.useState(null),[a,l]=m.useState(!1);return r===null&&!a&&fetch(s).then(i=>{if(!i.ok)throw new Error;return i.text()}).then(i=>t(i.slice(0,1e5))).catch(()=>l(!0)),a?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Could not load preview"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:53,columnNumber:21},this):r===null?e.jsxDEV("div",{className:"animate-pulse h-32 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:55,columnNumber:12},this):e.jsxDEV("pre",{className:"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words",children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:59,columnNumber:5},this)}function xe({metadata:s}){const[r,t]=m.useState(null);async function a(l,i){await navigator.clipboard.writeText(l),t(i),setTimeout(()=>t(null),2e3)}return e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:"Path"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:79,columnNumber:9},this),e.jsxDEV("dd",{onClick:()=>a(s.path,"path"),className:"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors",title:"Click to copy",children:[e.jsxDEV("span",{className:"flex-1",children:s.path},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:85,columnNumber:11},this),r==="path"?e.jsxDEV(U,{className:"w-3.5 h-3.5 text-status-success shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:87,columnNumber:15},this):e.jsxDEV(J,{className:"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:88,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:78,columnNumber:7},this),e.jsxDEV(L,{label:"Type",value:s.content_type},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:91,columnNumber:7},this),e.jsxDEV(L,{label:"Size",value:he(s.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:92,columnNumber:7},this),e.jsxDEV(L,{label:"Modified",children:e.jsxDEV(M,{date:s.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:94,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:93,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:77,columnNumber:5},this)}async function ge(s,r){const a=await(await fetch(s)).blob(),l=URL.createObjectURL(a),i=document.createElement("a");i.href=l,i.download=r,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(l)}function ve(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function we(s){var t;const r=((t=s.split(".").pop())==null?void 0:t.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)?e.jsxDEV(Y,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:22,columnNumber:12},this):["json"].includes(r)?e.jsxDEV(Z,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:25,columnNumber:12},this):["csv","xlsx","xls"].includes(r)?e.jsxDEV(ee,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:28,columnNumber:12},this):["txt","md","html","xml","yaml","yml","css","js","ts"].includes(r)?e.jsxDEV(se,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:31,columnNumber:12},this):e.jsxDEV(ae,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:33,columnNumber:10},this)}function Fe(s){var t;const r=((t=s.split(".").pop())==null?void 0:t.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)}function Pe(s){const r=s.replace(/\/+$/,"");return r.split("/").pop()||r}function Ve(s){return s.split("/").pop()||s}function Ee({directories:s,files:r,onNavigate:t,onSelect:a,selectedFile:l}){return e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium",children:"Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:63,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 font-medium w-24 text-right",children:"Size"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:64,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-40 text-right",children:"Modified"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:62,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:61,columnNumber:7},this),e.jsxDEV("tbody",{children:[s.map(i=>e.jsxDEV("tr",{onClick:()=>t(i),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(Q,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:77,columnNumber:17},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:Pe(i)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:78,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:76,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:75,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:83,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:84,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:70,columnNumber:11},this)),r.map(i=>e.jsxDEV("tr",{onClick:()=>a(i.path),className:`row-hover cursor-pointer group ${l===i.path?"bg-surface-hover":""}`,children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[we(i.path),e.jsxDEV("span",{className:"text-sm text-text-primary truncate",children:Ve(i.path)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:98,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:96,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:95,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:ve(i.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:103,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(M,{date:i.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:107,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:106,columnNumber:13},this)]},i.path,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:88,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:68,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:60,columnNumber:5},this)}const je=[{label:"1 hour",value:3600},{label:"6 hours",value:21600},{label:"24 hours",value:86400},{label:"7 days",value:604800},{label:"30 days",value:2592e3}];function De({filePath:s,onClose:r,onDeleted:t}){var w,g;const{data:a,isLoading:l}=ue(s),i=de(),c=pe(),[v,f]=m.useState(!1),[N,P]=m.useState(!1),[x,d]=m.useState(!1),p=be(s),h=((w=a==null?void 0:a.content_type)==null?void 0:w.startsWith("image/"))||Fe(s),V=((g=a==null?void 0:a.content_type)==null?void 0:g.startsWith("text/"))||(a==null?void 0:a.content_type)==="application/json",u=(a==null?void 0:a.content_type)==="application/pdf";async function D(){try{const o=await i.mutateAsync({path:s,expiresIn:3600}),b=o.url.startsWith("http")?o.url:`${window.location.origin}${o.url}`;ge(b,F(s))}catch{}}async function y(o){f(!1);try{const b=await i.mutateAsync({path:s,expiresIn:o}),E=b.url.startsWith("http")?b.url:`${window.location.origin}${b.url}`;await navigator.clipboard.writeText(E),P(!0),setTimeout(()=>P(!1),2e3)}catch{}}return e.jsxDEV(e.Fragment,{children:e.jsxDEV("div",{className:"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto",children:[e.jsxDEV("div",{className:"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[e.jsxDEV("h3",{className:"text-sm font-medium text-text-primary truncate pr-2",title:F(s),children:F(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("button",{onClick:r,className:"text-text-tertiary hover:text-text-primary shrink-0",children:e.jsxDEV(ie,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:81,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:80,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:76,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-1 flex-wrap",children:[e.jsxDEV("button",{onClick:D,className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Download",children:[e.jsxDEV(re,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:92,columnNumber:15},this),e.jsxDEV("span",{children:"Download"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:93,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:87,columnNumber:13},this),e.jsxDEV("a",{href:p,target:"_blank",rel:"noopener noreferrer",className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Open in new tab",children:[e.jsxDEV(te,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:103,columnNumber:15},this),e.jsxDEV("span",{children:"Open"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:104,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:96,columnNumber:13},this),e.jsxDEV("div",{className:"relative",children:[e.jsxDEV("button",{onClick:()=>f(o=>!o),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Share with signed URL",children:[N?e.jsxDEV(U,{className:"w-3.5 h-3.5 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:113,columnNumber:27},this):e.jsxDEV(le,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:113,columnNumber:83},this),e.jsxDEV("span",{children:N?"Copied":"Share"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:114,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:108,columnNumber:15},this),v&&e.jsxDEV("div",{className:"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]",children:je.map(o=>e.jsxDEV("button",{onClick:()=>y(o.value),className:"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors",children:o.label},o.value,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:119,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:117,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:107,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>d(!0),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error",title:"Delete file",children:[e.jsxDEV(ne,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:136,columnNumber:15},this),e.jsxDEV("span",{children:"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:137,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:86,columnNumber:11},this),x&&e.jsxDEV("div",{className:"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md",children:[e.jsxDEV("p",{className:"text-xs text-text-primary mb-2",children:["Permanently delete ",e.jsxDEV("span",{className:"font-medium",children:F(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:145,columnNumber:36},this),"? This cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:144,columnNumber:15},this),e.jsxDEV("div",{className:"flex gap-2",children:[e.jsxDEV("button",{onClick:()=>d(!1),className:"btn-secondary text-xs",disabled:c.isPending,children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:148,columnNumber:17},this),e.jsxDEV("button",{onClick:async()=>{try{await c.mutateAsync(s),d(!1),t==null||t()}catch{}},className:"btn-primary text-xs !bg-status-error hover:!bg-status-error/90",disabled:c.isPending,children:c.isPending?"Deleting...":"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:155,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:147,columnNumber:15},this),c.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:c.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:172,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:143,columnNumber:13},this),i.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:i.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:178,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:75,columnNumber:9},this),e.jsxDEV("div",{className:"p-5",children:l?e.jsxDEV("div",{className:"animate-pulse space-y-3",children:[e.jsxDEV("div",{className:"h-48 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:186,columnNumber:15},this),e.jsxDEV("div",{className:"h-4 bg-surface-sunken rounded w-2/3"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:187,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:185,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[h&&e.jsxDEV("div",{className:"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden",style:{maxHeight:"400px"},children:e.jsxDEV("img",{src:p,alt:F(s),className:"w-full object-cover object-top",style:{maxHeight:"400px"}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:196,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:192,columnNumber:17},this),V&&e.jsxDEV("div",{className:"mb-5",children:e.jsxDEV(Ne,{url:p},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:207,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:206,columnNumber:17},this),u&&e.jsxDEV("div",{className:"mb-5 p-4 bg-surface-sunken rounded-md text-center",children:e.jsxDEV("a",{href:p,target:"_blank",rel:"noopener noreferrer",className:"text-accent hover:text-accent-hover text-sm font-medium",children:"Open PDF in new tab"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:213,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:212,columnNumber:17},this),a&&e.jsxDEV(xe,{metadata:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:225,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:183,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:73,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:69,columnNumber:5},this)}const ye=[25,50,100,200];function Re(){const[s,r]=me(),t=s.get("prefix")||"",[a,l]=m.useState(""),[i,c]=m.useState(""),[v,f]=m.useState(null),[N,P]=m.useState(100),[x,d]=m.useState([]),[p,h]=m.useState();m.useEffect(()=>{const n=setTimeout(()=>{c(a),h(void 0),d([])},300);return()=>clearTimeout(n)},[a]);const V=i?`${t}${i}`:t,{data:u,isLoading:D,isFetching:y,refetch:w}=ce(V,N,p),g=(u==null?void 0:u.directories)??[],o=(u==null?void 0:u.files)??[],b=u==null?void 0:u.nextToken,E=m.useCallback(n=>{l(""),c(""),f(null),h(void 0),d([]),r(n?{prefix:n}:{})},[r]);function R(){b&&(d(n=>[...n,p||""]),h(b))}function _(){if(x.length===0)return;const n=[...x],S=n.pop();d(n),h(S||void 0)}function I(n){P(n),h(void 0),d([])}const W=g.length===0&&o.length===0,z=x.length+1,k=!!b,C=x.length>0,O=`/file-browser/browse?prefix=${encodeURIComponent(V)}&pageSize=${N}${p?`&continuationToken=${encodeURIComponent(p)}`:""}`;return e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:"flex-1 min-w-0 overflow-hidden",children:[e.jsxDEV(q,{title:"Files"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:92,columnNumber:9},this),e.jsxDEV(fe,{prefix:t,onNavigate:E},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:94,columnNumber:9},this),e.jsxDEV(A,{actions:e.jsxDEV(H,{onRefresh:()=>w(),isFetching:y,apiPath:O},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:97,columnNumber:11},this),children:e.jsxDEV(G,{label:"Search",value:a,onChange:l,placeholder:"Filter by prefix..."},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:103,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:96,columnNumber:9},this),D?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((n,S)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},S,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:114,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:112,columnNumber:11},this):W?e.jsxDEV(K,{title:a?"No matching files":"This directory is empty"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:118,columnNumber:11},this):e.jsxDEV(Ee,{directories:g,files:o,onNavigate:E,onSelect:f,selectedFile:v},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:120,columnNumber:11},this),(C||k||o.length>0)&&e.jsxDEV("div",{className:"flex items-center justify-between pt-4 pb-2",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Page ",z," · ",o.length+g.length," items"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:133,columnNumber:15},this),e.jsxDEV("select",{value:N,onChange:n=>I(parseInt(n.target.value)),className:"select text-xs py-1",children:ye.map(n=>e.jsxDEV("option",{value:n,children:[n," / page"]},n,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:142,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:136,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:132,columnNumber:13},this),(C||k)&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("button",{onClick:_,disabled:!C,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:[e.jsxDEV(oe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:153,columnNumber:19},this),"Previous"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:148,columnNumber:17},this),e.jsxDEV("button",{onClick:R,disabled:!k,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:["Next",e.jsxDEV(B,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:162,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:147,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:131,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:91,columnNumber:7},this),v&&e.jsxDEV(De,{filePath:v,onClose:()=>f(null),onDeleted:()=>{f(null),w()}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:172,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:89,columnNumber:5},this)}export{Re as FilesPage};
2
+ //# sourceMappingURL=index-B2CqPzLK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B2CqPzLK.js","sources":["../../src/api/files.ts","../../src/pages/files/FileBreadcrumbs.tsx","../../src/pages/files/FilePreviewContent.tsx","../../src/pages/files/FileListViews.tsx","../../src/pages/files/FilePreviewPanel.tsx","../../src/pages/files/FilesPage.tsx"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface FileEntry {\n path: string;\n size: number;\n modified_at: string;\n}\n\nexport interface BrowseResponse {\n files: FileEntry[];\n directories: string[];\n nextToken?: string;\n}\n\nexport interface FileMetadata {\n path: string;\n size: number;\n modified_at: string;\n content_type: string;\n}\n\nexport interface SignedUrlResponse {\n url: string;\n expiresAt: string;\n}\n\nexport function useFileBrowse(prefix: string, pageSize = 100, continuationToken?: string) {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n params.set('pageSize', String(pageSize));\n if (continuationToken) params.set('continuationToken', continuationToken);\n const qs = params.toString();\n\n return useQuery<BrowseResponse>({\n queryKey: ['fileBrowse', prefix, pageSize, continuationToken],\n queryFn: () => apiFetch(`/file-browser/browse?${qs}`),\n });\n}\n\nexport function useFileMetadata(filePath: string | null) {\n return useQuery<FileMetadata>({\n queryKey: ['fileMetadata', filePath],\n queryFn: () => apiFetch(`/file-browser/metadata/${filePath}`),\n enabled: !!filePath,\n });\n}\n\nexport function useGenerateSignedUrl() {\n return useMutation<SignedUrlResponse, Error, { path: string; expiresIn: number }>({\n mutationFn: (data) =>\n apiFetch('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteFile() {\n return useMutation<{ deleted: boolean; path: string }, Error, string>({\n mutationFn: (filePath) =>\n apiFetch(`/file-browser/delete/${filePath}`, { method: 'DELETE' }),\n });\n}\n\nexport function getFilePreviewUrl(filePath: string): string {\n return `/api/files/${filePath.replace(/^\\/+/, '')}`;\n}\n\nexport function getFileDownloadUrl(filePath: string): string {\n return `/api/file-browser/download/${filePath.replace(/^\\/+/, '')}`;\n}\n","import { ChevronRight, FolderOpen } from 'lucide-react';\n\ninterface FileBreadcrumbsProps {\n prefix: string;\n onNavigate: (prefix: string) => void;\n}\n\nexport function FileBreadcrumbs({ prefix, onNavigate }: FileBreadcrumbsProps) {\n const segments = prefix ? prefix.replace(/\\/+$/, '').split('/').filter(Boolean) : [];\n\n return (\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => onNavigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n segments.length === 0\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <FolderOpen className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>Files</span>\n </button>\n\n {segments.map((segment, i) => {\n const isLast = i === segments.length - 1;\n const targetPrefix = segments.slice(0, i + 1).join('/') + '/';\n return (\n <span key={targetPrefix} className=\"flex items-center gap-1\">\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => onNavigate(targetPrefix)}\n className={`px-1.5 py-0.5 rounded transition-colors ${\n isLast\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {segment}\n </button>\n </span>\n );\n })}\n </nav>\n );\n}\n","import { useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\n\ninterface FileMetadata {\n path: string;\n content_type: string;\n size: number;\n modified_at: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileName(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nexport function MetaRow({ label, value, mono, children }: {\n label: string;\n value?: string;\n mono?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">{label}</dt>\n <dd className={`text-sm text-text-secondary ${mono ? 'font-mono text-xs break-all' : ''}`}>\n {children || value}\n </dd>\n </div>\n );\n}\n\nexport function TextPreview({ url }: { url: string }) {\n const [content, setContent] = useState<string | null>(null);\n const [error, setError] = useState(false);\n\n if (content === null && !error) {\n fetch(url)\n .then((res) => {\n if (!res.ok) throw new Error();\n return res.text();\n })\n .then((text) => setContent(text.slice(0, 100_000)))\n .catch(() => setError(true));\n }\n\n if (error) return <p className=\"text-xs text-text-tertiary\">Could not load preview</p>;\n if (content === null) {\n return <div className=\"animate-pulse h-32 bg-surface-sunken rounded\" />;\n }\n\n return (\n <pre className=\"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words\">\n {content}\n </pre>\n );\n}\n\nexport function FileMetadataDisplay({ metadata }: {\n metadata: FileMetadata;\n}) {\n const [copied, setCopied] = useState<string | null>(null);\n\n async function copyToClipboard(text: string, label: string) {\n await navigator.clipboard.writeText(text);\n setCopied(label);\n setTimeout(() => setCopied(null), 2000);\n }\n\n return (\n <div className=\"space-y-3\">\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">Path</dt>\n <dd\n onClick={() => copyToClipboard(metadata.path, 'path')}\n className=\"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors\"\n title=\"Click to copy\"\n >\n <span className=\"flex-1\">{metadata.path}</span>\n {copied === 'path'\n ? <Check className=\"w-3.5 h-3.5 text-status-success shrink-0\" />\n : <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity\" />}\n </dd>\n </div>\n <MetaRow label=\"Type\" value={metadata.content_type} />\n <MetaRow label=\"Size\" value={formatSize(metadata.size)} />\n <MetaRow label=\"Modified\">\n <TimeAgo date={metadata.modified_at} />\n </MetaRow>\n </div>\n );\n}\n\nexport async function triggerDownload(url: string, name: string) {\n const res = await fetch(url);\n const blob = await res.blob();\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = name;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(blobUrl);\n}\n","import {\n Folder,\n File,\n Image,\n FileText,\n FileJson2,\n FileSpreadsheet,\n} from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { getFilePreviewUrl } from '../../api/files';\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileIcon(filePath: string) {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext)) {\n return <Image className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['json'].includes(ext)) {\n return <FileJson2 className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['csv', 'xlsx', 'xls'].includes(ext)) {\n return <FileSpreadsheet className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['txt', 'md', 'html', 'xml', 'yaml', 'yml', 'css', 'js', 'ts'].includes(ext)) {\n return <FileText className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n return <File className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n}\n\nexport function isImagePath(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n return ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext);\n}\n\nexport function dirName(dirPath: string): string {\n const stripped = dirPath.replace(/\\/+$/, '');\n return stripped.split('/').pop() || stripped;\n}\n\nexport function fileNameFromPath(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\ninterface ViewProps {\n directories: string[];\n files: Array<{ path: string; size: number; modified_at: string }>;\n onNavigate: (prefix: string) => void;\n onSelect: (path: string) => void;\n selectedFile: string | null;\n}\n\nexport function ListView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\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\">Name</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Size</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {directories.map((dir) => (\n <tr\n key={dir}\n onClick={() => onNavigate(dir)}\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 <Folder 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 {dirName(dir)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n </tr>\n ))}\n {files.map((file) => (\n <tr\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`row-hover cursor-pointer group ${\n selectedFile === file.path ? 'bg-surface-hover' : ''\n }`}\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n {fileIcon(file.path)}\n <span className=\"text-sm text-text-primary truncate\">\n {fileNameFromPath(file.path)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {formatSize(file.size)}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={file.modified_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport function GridView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <div className=\"mt-4\">\n {/* Directories as compact list */}\n {directories.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {directories.map((dir) => (\n <button\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors\"\n >\n <Folder className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>{dirName(dir)}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Files as thumbnail grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3\">\n {files.map((file) => {\n const isImg = isImagePath(file.path);\n return (\n <button\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`group text-left rounded-lg overflow-hidden transition-all ${\n selectedFile === file.path\n ? 'ring-2 ring-accent/40 bg-surface-hover'\n : 'hover:bg-surface-hover'\n }`}\n >\n <div className=\"aspect-square bg-surface-sunken flex items-center justify-center overflow-hidden\">\n {isImg ? (\n <img\n src={getFilePreviewUrl(file.path)}\n alt={fileNameFromPath(file.path)}\n loading=\"lazy\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-text-tertiary\">\n {fileIcon(file.path)}\n <span className=\"text-[10px] uppercase tracking-wider\">\n {file.path.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n </div>\n <div className=\"px-2 py-1.5\">\n <p className=\"text-xs text-text-primary truncate\" title={fileNameFromPath(file.path)}>\n {fileNameFromPath(file.path)}\n </p>\n <p className=\"text-[10px] text-text-tertiary tabular-nums\">\n {formatSize(file.size)}\n </p>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport {\n X,\n Download,\n ExternalLink,\n Link,\n Check,\n Trash2,\n} from 'lucide-react';\nimport { useFileMetadata, getFilePreviewUrl, useGenerateSignedUrl, useDeleteFile } from '../../api/files';\nimport { fileName, triggerDownload, TextPreview, FileMetadataDisplay } from './FilePreviewContent';\nimport { isImagePath } from './FileListViews';\n\ninterface FilePreviewPanelProps {\n filePath: string;\n onClose: () => void;\n onDeleted?: () => void;\n}\n\nconst EXPIRY_OPTIONS = [\n { label: '1 hour', value: 3600 },\n { label: '6 hours', value: 21600 },\n { label: '24 hours', value: 86400 },\n { label: '7 days', value: 604800 },\n { label: '30 days', value: 2592000 },\n];\n\nexport function FilePreviewPanel({ filePath, onClose, onDeleted }: FilePreviewPanelProps) {\n const { data: metadata, isLoading } = useFileMetadata(filePath);\n const signedUrlMutation = useGenerateSignedUrl();\n const deleteMutation = useDeleteFile();\n const [showShareMenu, setShowShareMenu] = useState(false);\n const [copied, setCopied] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState(false);\n\n const previewUrl = getFilePreviewUrl(filePath);\n const isImage = metadata?.content_type?.startsWith('image/') || isImagePath(filePath);\n const isText = metadata?.content_type?.startsWith('text/') || metadata?.content_type === 'application/json';\n const isPdf = metadata?.content_type === 'application/pdf';\n\n async function handleDownload() {\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn: 3600 });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n triggerDownload(fullUrl, fileName(filePath));\n } catch {\n // handled by mutation state\n }\n }\n\n async function handleShare(expiresIn: number) {\n setShowShareMenu(false);\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n await navigator.clipboard.writeText(fullUrl);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // handled by mutation state\n }\n }\n\n return (\n <>\n {/* Fullscreen — opens image in a new tab */}\n\n {/* Panel */}\n <div className=\"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto\">\n {/* Header */}\n <div className=\"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-medium text-text-primary truncate pr-2\" title={fileName(filePath)}>\n {fileName(filePath)}\n </h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary shrink-0\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-wrap\">\n <button\n onClick={handleDownload}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Download\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n <span>Download</span>\n </button>\n\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Open in new tab\"\n >\n <ExternalLink className=\"w-3.5 h-3.5\" />\n <span>Open</span>\n </a>\n\n <div className=\"relative\">\n <button\n onClick={() => setShowShareMenu((v) => !v)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Share with signed URL\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Link className=\"w-3.5 h-3.5\" />}\n <span>{copied ? 'Copied' : 'Share'}</span>\n </button>\n {showShareMenu && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]\">\n {EXPIRY_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n onClick={() => handleShare(opt.value)}\n className=\"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors\"\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error\"\n title=\"Delete file\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n <span>Delete</span>\n </button>\n </div>\n\n {/* Delete confirmation */}\n {confirmDelete && (\n <div className=\"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md\">\n <p className=\"text-xs text-text-primary mb-2\">\n Permanently delete <span className=\"font-medium\">{fileName(filePath)}</span>? This cannot be undone.\n </p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"btn-secondary text-xs\"\n disabled={deleteMutation.isPending}\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync(filePath);\n setConfirmDelete(false);\n onDeleted?.();\n } catch {\n // error shown below\n }\n }}\n className=\"btn-primary text-xs !bg-status-error hover:!bg-status-error/90\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n {deleteMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{deleteMutation.error.message}</p>\n )}\n </div>\n )}\n\n {signedUrlMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{signedUrlMutation.error.message}</p>\n )}\n </div>\n\n {/* Preview area */}\n <div className=\"p-5\">\n {isLoading ? (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-48 bg-surface-sunken rounded\" />\n <div className=\"h-4 bg-surface-sunken rounded w-2/3\" />\n </div>\n ) : (\n <>\n {isImage && (\n <div\n className=\"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden\"\n style={{ maxHeight: '400px' }}\n >\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"w-full object-cover object-top\"\n style={{ maxHeight: '400px' }}\n />\n </div>\n )}\n\n {isText && (\n <div className=\"mb-5\">\n <TextPreview url={previewUrl} />\n </div>\n )}\n\n {isPdf && (\n <div className=\"mb-5 p-4 bg-surface-sunken rounded-md text-center\">\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-accent hover:text-accent-hover text-sm font-medium\"\n >\n Open PDF in new tab\n </a>\n </div>\n )}\n\n {metadata && (\n <FileMetadataDisplay metadata={metadata} />\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n ChevronLeft,\n ChevronRight,\n} 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 { EmptyState } from '../../components/common/display/EmptyState';\nimport { useFileBrowse } from '../../api/files';\nimport { FileBreadcrumbs } from './FileBreadcrumbs';\nimport { FilePreviewPanel } from './FilePreviewPanel';\nimport { ListView } from './FileListViews';\n\nconst PAGE_SIZES = [25, 50, 100, 200];\n\nexport function FilesPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const prefix = searchParams.get('prefix') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [pageSize, setPageSize] = useState(100);\n const [tokenStack, setTokenStack] = useState<string[]>([]);\n const [currentToken, setCurrentToken] = useState<string | undefined>();\n\n // Debounce search — refines the prefix sent to S3\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setCurrentToken(undefined);\n setTokenStack([]);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const effectivePrefix = debouncedSearch\n ? `${prefix}${debouncedSearch}`\n : prefix;\n\n const { data, isLoading, isFetching, refetch } = useFileBrowse(effectivePrefix, pageSize, currentToken);\n\n const directories = data?.directories ?? [];\n const files = data?.files ?? [];\n const nextToken = data?.nextToken;\n\n const navigateTo = useCallback((newPrefix: string) => {\n setSearch('');\n setDebouncedSearch('');\n setSelectedFile(null);\n setCurrentToken(undefined);\n setTokenStack([]);\n if (newPrefix) {\n setSearchParams({ prefix: newPrefix });\n } else {\n setSearchParams({});\n }\n }, [setSearchParams]);\n\n function goNextPage() {\n if (!nextToken) return;\n setTokenStack((prev) => [...prev, currentToken || '']);\n setCurrentToken(nextToken);\n }\n\n function goPrevPage() {\n if (tokenStack.length === 0) return;\n const prev = [...tokenStack];\n const token = prev.pop()!;\n setTokenStack(prev);\n setCurrentToken(token || undefined);\n }\n\n function changePageSize(size: number) {\n setPageSize(size);\n setCurrentToken(undefined);\n setTokenStack([]);\n }\n\n const isEmpty = directories.length === 0 && files.length === 0;\n const pageNum = tokenStack.length + 1;\n const hasNextPage = !!nextToken;\n const hasPrevPage = tokenStack.length > 0;\n\n const apiPath = `/file-browser/browse?prefix=${encodeURIComponent(effectivePrefix)}&pageSize=${pageSize}${currentToken ? `&continuationToken=${encodeURIComponent(currentToken)}` : ''}`;\n\n return (\n <div className=\"flex gap-0\">\n {/* Main content */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n <PageHeader title=\"Files\" />\n\n <FileBreadcrumbs prefix={prefix} onNavigate={navigateTo} />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={apiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder=\"Filter by prefix...\"\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 ) : isEmpty ? (\n <EmptyState title={search ? 'No matching files' : 'This directory is empty'} />\n ) : (\n <ListView\n directories={directories}\n files={files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n )}\n\n {/* Cursor-based pagination */}\n {(hasPrevPage || hasNextPage || files.length > 0) && (\n <div className=\"flex items-center justify-between pt-4 pb-2\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n Page {pageNum} &middot; {files.length + directories.length} items\n </p>\n <select\n value={pageSize}\n onChange={(e) => changePageSize(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZES.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n </div>\n {(hasPrevPage || hasNextPage) && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={goPrevPage}\n disabled={!hasPrevPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n Previous\n </button>\n <button\n onClick={goNextPage}\n disabled={!hasNextPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n Next\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <FilePreviewPanel\n filePath={selectedFile}\n onClose={() => setSelectedFile(null)}\n onDeleted={() => { setSelectedFile(null); refetch(); }}\n />\n )}\n </div>\n );\n}\n"],"names":["useFileBrowse","prefix","pageSize","continuationToken","params","qs","useQuery","apiFetch","useFileMetadata","filePath","useGenerateSignedUrl","useMutation","data","useDeleteFile","getFilePreviewUrl","FileBreadcrumbs","onNavigate","segments","jsxDEV","FolderOpen","segment","i","isLast","targetPrefix","ChevronRight","formatSize","bytes","fileName","MetaRow","label","value","mono","children","TextPreview","url","content","setContent","useState","error","setError","res","text","FileMetadataDisplay","metadata","copied","setCopied","copyToClipboard","Check","Copy","TimeAgo","triggerDownload","name","blob","blobUrl","a","fileIcon","ext","_a","Image","FileJson2","FileSpreadsheet","FileText","File","isImagePath","dirName","dirPath","stripped","fileNameFromPath","ListView","directories","files","onSelect","selectedFile","dir","Folder","file","EXPIRY_OPTIONS","FilePreviewPanel","onClose","onDeleted","isLoading","signedUrlMutation","deleteMutation","showShareMenu","setShowShareMenu","confirmDelete","setConfirmDelete","previewUrl","isImage","isText","_b","isPdf","handleDownload","result","fullUrl","handleShare","expiresIn","Fragment","X","Download","ExternalLink","v","Link","opt","Trash2","PAGE_SIZES","FilesPage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","setSelectedFile","setPageSize","tokenStack","setTokenStack","currentToken","setCurrentToken","useEffect","t","effectivePrefix","isFetching","refetch","nextToken","navigateTo","useCallback","newPrefix","goNextPage","prev","goPrevPage","token","changePageSize","size","isEmpty","pageNum","hasNextPage","hasPrevPage","apiPath","PageHeader","FilterBar","ListToolbar","FilterInput","_","EmptyState","e","ChevronLeft"],"mappings":"yiBA2BO,SAASA,GAAcC,EAAgBC,EAAW,IAAKC,EAA4B,CACxF,MAAMC,EAAS,IAAI,gBACfH,GAAQG,EAAO,IAAI,SAAUH,CAAM,EACvCG,EAAO,IAAI,WAAY,OAAOF,CAAQ,CAAC,EACnCC,GAAmBC,EAAO,IAAI,oBAAqBD,CAAiB,EACxE,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAyB,CAC9B,SAAU,CAAC,aAAcL,EAAQC,EAAUC,CAAiB,EAC5D,QAAS,IAAMI,EAAS,wBAAwBF,CAAE,EAAE,CAAA,CACrD,CACH,CAEO,SAASG,GAAgBC,EAAyB,CACvD,OAAOH,EAAuB,CAC5B,SAAU,CAAC,eAAgBG,CAAQ,EACnC,QAAS,IAAMF,EAAS,0BAA0BE,CAAQ,EAAE,EAC5D,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,IAAuB,CACrC,OAAOC,EAA2E,CAChF,WAAaC,GACXL,EAAS,2BAA4B,CACnC,OAAQ,OACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASC,IAAgB,CAC9B,OAAOF,EAA+D,CACpE,WAAaF,GACXF,EAAS,wBAAwBE,CAAQ,GAAI,CAAE,OAAQ,QAAA,CAAU,CAAA,CACpE,CACH,CAEO,SAASK,GAAkBL,EAA0B,CAC1D,MAAO,cAAcA,EAAS,QAAQ,OAAQ,EAAE,CAAC,EACnD,CC5DO,SAASM,GAAgB,CAAE,OAAAd,EAAQ,WAAAe,GAAoC,CAC5E,MAAMC,EAAWhB,EAASA,EAAO,QAAQ,OAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAI,CAAA,EAElF,OACEiB,EAAAA,OAAC,MAAA,CAAI,UAAU,oDACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMF,EAAW,EAAE,EAC5B,UAAW,qEACTC,EAAS,SAAW,EAChB,gCACA,oEACN,GAEA,SAAA,CAAAC,SAACC,EAAA,CAAW,UAAU,yBAAyB,YAAa,GAAA,EAA5D,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAiE,EACjED,EAAAA,OAAC,QAAK,SAAA,OAAA,EAAN,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAW,CAAA,CAAA,EATb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAYCD,EAAS,IAAI,CAACG,EAASC,IAAM,CAC5B,MAAMC,EAASD,IAAMJ,EAAS,OAAS,EACjCM,EAAeN,EAAS,MAAM,EAAGI,EAAI,CAAC,EAAE,KAAK,GAAG,EAAI,IAC1D,OACEH,EAAAA,OAAC,OAAA,CAAwB,UAAU,0BACjC,SAAA,CAAAA,EAAAA,OAACM,EAAA,CAAa,UAAU,gCAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyD,EACzDN,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMF,EAAWO,CAAY,EACtC,UAAW,2CACTD,EACI,gCACA,oEACN,GAEC,SAAAF,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CASA,CAAA,EAXSG,EAAX,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAYA,CAEJ,CAAC,CAAA,CAAA,EA/BH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgCA,CAEJ,CClCA,SAASE,GAAWC,EAAuB,CACzC,OAAIA,EAAQ,KAAa,GAAGA,CAAK,KAC7BA,EAAQ,KAAO,KAAa,IAAIA,EAAQ,MAAM,QAAQ,CAAC,CAAC,MACxDA,EAAQ,KAAO,KAAO,KAAa,IAAIA,GAAS,KAAO,OAAO,QAAQ,CAAC,CAAC,MACrE,IAAIA,GAAS,KAAO,KAAO,OAAO,QAAQ,CAAC,CAAC,KACrD,CAEO,SAASC,EAASlB,EAA0B,CACjD,OAAOA,EAAS,MAAM,GAAG,EAAE,OAASA,CACtC,CAEO,SAASmB,EAAQ,CAAE,MAAAC,EAAO,MAAAC,EAAO,KAAAC,EAAM,SAAAC,GAK3C,CACD,gBACG,MAAA,CACC,SAAA,CAAAd,SAAC,KAAA,CAAG,UAAU,iEAAkE,SAAAW,CAAA,EAAhF,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAsF,EACtFX,EAAAA,OAAC,MAAG,UAAW,+BAA+Ba,EAAO,8BAAgC,EAAE,GACpF,SAAAC,GAAYF,CAAA,EADf,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,CAEJ,CAEO,SAASG,GAAY,CAAE,IAAAC,GAAwB,CACpD,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAwB,IAAI,EACpD,CAACC,EAAOC,CAAQ,EAAIF,EAAAA,SAAS,EAAK,EAYxC,OAVIF,IAAY,MAAQ,CAACG,GACvB,MAAMJ,CAAG,EACN,KAAMM,GAAQ,CACb,GAAI,CAACA,EAAI,GAAI,MAAM,IAAI,MACvB,OAAOA,EAAI,KAAA,CACb,CAAC,EACA,KAAMC,GAASL,EAAWK,EAAK,MAAM,EAAG,GAAO,CAAC,CAAC,EACjD,MAAM,IAAMF,EAAS,EAAI,CAAC,EAG3BD,EAAcpB,SAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,0BAA1C,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgE,EAC9EiB,IAAY,KACPjB,EAAAA,OAAC,MAAA,CAAI,UAAU,8CAAA,EAAf,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8D,EAIrEA,EAAAA,OAAC,MAAA,CAAI,UAAU,uJACZ,SAAAiB,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ,CAEO,SAASO,GAAoB,CAAE,SAAAC,GAEnC,CACD,KAAM,CAACC,EAAQC,CAAS,EAAIR,EAAAA,SAAwB,IAAI,EAExD,eAAeS,EAAgBL,EAAcZ,EAAe,CAC1D,MAAM,UAAU,UAAU,UAAUY,CAAI,EACxCI,EAAUhB,CAAK,EACf,WAAW,IAAMgB,EAAU,IAAI,EAAG,GAAI,CACxC,CAEA,OACE3B,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,iEAAiE,SAAA,MAAA,EAA/E,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAmF,EACnFA,EAAAA,OAAC,KAAA,CACC,QAAS,IAAM4B,EAAgBH,EAAS,KAAM,MAAM,EACpD,UAAU,2IACV,MAAM,gBAEN,SAAA,CAAAzB,SAAC,OAAA,CAAK,UAAU,SAAU,SAAAyB,EAAS,IAAA,EAAnC,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwC,EACvCC,IAAW,OACR1B,EAAAA,OAAC6B,EAAA,CAAM,UAAU,0CAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4D,EAC5D7B,EAAAA,OAAC8B,EAAA,CAAK,UAAU,8FAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+G,CAAA,CAAA,EARrH,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CASA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAYA,WACCpB,EAAA,CAAQ,MAAM,OAAO,MAAOe,EAAS,YAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAoD,EACpDzB,EAAAA,OAACU,GAAQ,MAAM,OAAO,MAAOH,GAAWkB,EAAS,IAAI,GAArD,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAwD,EACxDzB,EAAAA,OAACU,GAAQ,MAAM,WACb,kBAACqB,EAAA,CAAQ,KAAMN,EAAS,WAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqC,CAAA,EADvC,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAlBF,OAAA,GAAA,CAAA,SAAA,wDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAmBA,CAEJ,CAEA,eAAsBO,GAAgBhB,EAAaiB,EAAc,CAE/D,MAAMC,EAAO,MADD,MAAM,MAAMlB,CAAG,GACJ,KAAA,EACjBmB,EAAU,IAAI,gBAAgBD,CAAI,EAClCE,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,KAAOD,EACTC,EAAE,SAAWH,EACbG,EAAE,MAAM,QAAU,OAClB,SAAS,KAAK,YAAYA,CAAC,EAC3BA,EAAE,MAAA,EACF,SAAS,KAAK,YAAYA,CAAC,EAC3B,IAAI,gBAAgBD,CAAO,CAC7B,CCpGO,SAAS5B,GAAWC,EAAuB,CAChD,OAAIA,EAAQ,KAAa,GAAGA,CAAK,KAC7BA,EAAQ,KAAO,KAAa,IAAIA,EAAQ,MAAM,QAAQ,CAAC,CAAC,MACxDA,EAAQ,KAAO,KAAO,KAAa,IAAIA,GAAS,KAAO,OAAO,QAAQ,CAAC,CAAC,MACrE,IAAIA,GAAS,KAAO,KAAO,OAAO,QAAQ,CAAC,CAAC,KACrD,CAEO,SAAS6B,GAAS9C,EAAkB,OACzC,MAAM+C,IAAMC,EAAAhD,EAAS,MAAM,GAAG,EAAE,IAAA,IAApB,YAAAgD,EAA2B,gBAAiB,GACxD,MAAI,CAAC,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAM,EAAE,SAASD,CAAG,EACpDtC,EAAAA,OAACwC,EAAA,CAAM,UAAU,yBAAyB,YAAa,GAAA,EAAvD,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4D,EAEjE,CAAC,MAAM,EAAE,SAASF,CAAG,EAChBtC,EAAAA,OAACyC,EAAA,CAAU,UAAU,yBAAyB,YAAa,GAAA,EAA3D,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgE,EAErE,CAAC,MAAO,OAAQ,KAAK,EAAE,SAASH,CAAG,EAC9BtC,EAAAA,OAAC0C,GAAA,CAAgB,UAAU,yBAAyB,YAAa,GAAA,EAAjE,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsE,EAE3E,CAAC,MAAO,KAAM,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAM,IAAI,EAAE,SAASJ,CAAG,EACtEtC,EAAAA,OAAC2C,GAAA,CAAS,UAAU,yBAAyB,YAAa,GAAA,EAA1D,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+D,EAEjE3C,EAAAA,OAAC4C,GAAA,CAAK,UAAU,yBAAyB,YAAa,GAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2D,CACpE,CAEO,SAASC,GAAYtD,EAA2B,OACrD,MAAM+C,IAAMC,EAAAhD,EAAS,MAAM,GAAG,EAAE,IAAA,IAApB,YAAAgD,EAA2B,gBAAiB,GACxD,MAAO,CAAC,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAM,EAAE,SAASD,CAAG,CAClE,CAEO,SAASQ,GAAQC,EAAyB,CAC/C,MAAMC,EAAWD,EAAQ,QAAQ,OAAQ,EAAE,EAC3C,OAAOC,EAAS,MAAM,GAAG,EAAE,OAASA,CACtC,CAEO,SAASC,GAAiB1D,EAA0B,CACzD,OAAOA,EAAS,MAAM,GAAG,EAAE,OAASA,CACtC,CAUO,SAAS2D,GAAS,CAAE,YAAAC,EAAa,MAAAC,EAAO,WAAAtD,EAAY,SAAAuD,EAAU,aAAAC,GAA2B,CAC9F,OACEtD,EAAAA,OAAC,QAAA,CAAM,UAAU,cACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,oEACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,wBAAwB,SAAA,MAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0C,EAC1CA,SAAC,KAAA,CAAG,UAAU,mCAAmC,SAAA,MAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqD,EACrDA,SAAC,KAAA,CAAG,UAAU,wCAAwC,SAAA,UAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8D,CAAA,CAAA,EAHhE,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAMA,WACC,QAAA,CACE,SAAA,CAAAmD,EAAY,IAAKI,GAChBvD,EAAAA,OAAC,KAAA,CAEC,QAAS,IAAMF,EAAWyD,CAAG,EAC7B,UAAU,iCAEV,SAAA,CAAAvD,EAAAA,OAAC,MAAG,UAAU,YACZ,SAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,4BACd,SAAA,CAAAA,SAACwD,EAAA,CAAO,UAAU,kCAAkC,YAAa,GAAA,EAAjE,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsE,WACrE,OAAA,CAAK,UAAU,sEACb,SAAAV,GAAQS,CAAG,CAAA,EADd,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,EACAvD,SAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,GAAA,EAA3D,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkE,EAClEA,SAAC,KAAA,CAAG,UAAU,kDAAkD,SAAA,GAAA,EAAhE,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuE,CAAA,CAAA,EAblEuD,EADP,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAgBD,EACAH,EAAM,IAAKK,GACVzD,EAAAA,OAAC,KAAA,CAEC,QAAS,IAAMqD,EAASI,EAAK,IAAI,EACjC,UAAW,kCACTH,IAAiBG,EAAK,KAAO,mBAAqB,EACpD,GAEA,SAAA,CAAAzD,EAAAA,OAAC,MAAG,UAAU,YACZ,SAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,4BACb,SAAA,CAAAqC,GAASoB,EAAK,IAAI,WAClB,OAAA,CAAK,UAAU,qCACb,SAAAR,GAAiBQ,EAAK,IAAI,GAD7B,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,WACC,KAAA,CAAG,UAAU,2DACX,SAAAlD,GAAWkD,EAAK,IAAI,GADvB,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAzD,EAAAA,OAAC,MAAG,UAAU,mDACZ,kBAAC+B,EAAA,CAAQ,KAAM0B,EAAK,WAAA,EAApB,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,CAAA,EADnC,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAnBKA,EAAK,KADZ,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAsBD,CAAA,CAAA,EA1CH,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA2CA,CAAA,CAAA,EAnDF,OAAA,GAAA,CAAA,SAAA,mDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAoDA,CAEJ,CC9FA,MAAMC,GAAiB,CACrB,CAAE,MAAO,SAAU,MAAO,IAAA,EAC1B,CAAE,MAAO,UAAW,MAAO,KAAA,EAC3B,CAAE,MAAO,WAAY,MAAO,KAAA,EAC5B,CAAE,MAAO,SAAU,MAAO,MAAA,EAC1B,CAAE,MAAO,UAAW,MAAO,MAAA,CAC7B,EAEO,SAASC,GAAiB,CAAE,SAAApE,EAAU,QAAAqE,EAAS,UAAAC,GAAoC,SACxF,KAAM,CAAE,KAAMpC,EAAU,UAAAqC,CAAA,EAAcxE,GAAgBC,CAAQ,EACxDwE,EAAoBvE,GAAA,EACpBwE,EAAiBrE,GAAA,EACjB,CAACsE,EAAeC,CAAgB,EAAI/C,EAAAA,SAAS,EAAK,EAClD,CAACO,EAAQC,CAAS,EAAIR,EAAAA,SAAS,EAAK,EACpC,CAACgD,EAAeC,CAAgB,EAAIjD,EAAAA,SAAS,EAAK,EAElDkD,EAAazE,GAAkBL,CAAQ,EACvC+E,IAAU/B,EAAAd,GAAA,YAAAA,EAAU,eAAV,YAAAc,EAAwB,WAAW,YAAaM,GAAYtD,CAAQ,EAC9EgF,IAASC,EAAA/C,GAAA,YAAAA,EAAU,eAAV,YAAA+C,EAAwB,WAAW,YAAY/C,GAAA,YAAAA,EAAU,gBAAiB,mBACnFgD,GAAQhD,GAAA,YAAAA,EAAU,gBAAiB,kBAEzC,eAAeiD,GAAiB,CAC9B,GAAI,CACF,MAAMC,EAAS,MAAMZ,EAAkB,YAAY,CAAE,KAAMxE,EAAU,UAAW,KAAM,EAChFqF,EAAUD,EAAO,IAAI,WAAW,MAAM,EACxCA,EAAO,IACP,GAAG,OAAO,SAAS,MAAM,GAAGA,EAAO,GAAG,GAC1C3C,GAAgB4C,EAASnE,EAASlB,CAAQ,CAAC,CAC7C,MAAQ,CAER,CACF,CAEA,eAAesF,EAAYC,EAAmB,CAC5CZ,EAAiB,EAAK,EACtB,GAAI,CACF,MAAMS,EAAS,MAAMZ,EAAkB,YAAY,CAAE,KAAMxE,EAAU,UAAAuF,EAAW,EAC1EF,EAAUD,EAAO,IAAI,WAAW,MAAM,EACxCA,EAAO,IACP,GAAG,OAAO,SAAS,MAAM,GAAGA,EAAO,GAAG,GAC1C,MAAM,UAAU,UAAU,UAAUC,CAAO,EAC3CjD,EAAU,EAAI,EACd,WAAW,IAAMA,EAAU,EAAK,EAAG,GAAI,CACzC,MAAQ,CAER,CACF,CAEA,OACE3B,EAAAA,OAAA+E,WAAA,CAIE,SAAA/E,EAAAA,OAAC,MAAA,CAAI,UAAU,+EAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,6EACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,sDAAsD,MAAOS,EAASlB,CAAQ,EACzF,SAAAkB,EAASlB,CAAQ,CAAA,EADpB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAS,EAAAA,OAAC,UAAO,QAAS4D,EAAS,UAAU,sDAClC,SAAA5D,EAAAA,OAACgF,GAAA,CAAE,UAAU,SAAA,EAAb,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,EAGAhF,EAAAA,OAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS0E,EACT,UAAU,8DACV,MAAM,WAEN,SAAA,CAAA1E,EAAAA,OAACiF,GAAA,CAAS,UAAU,aAAA,EAApB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkC,EAClCjF,EAAAA,OAAC,QAAK,SAAA,UAAA,EAAN,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAc,CAAA,CAAA,EANhB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EASAA,EAAAA,OAAC,IAAA,CACC,KAAMqE,EACN,OAAO,SACP,IAAI,sBACJ,UAAU,8DACV,MAAM,kBAEN,SAAA,CAAArE,EAAAA,OAACkF,GAAA,CAAa,UAAU,aAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsC,EACtClF,EAAAA,OAAC,QAAK,SAAA,MAAA,EAAN,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAU,CAAA,CAAA,EARZ,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAWAA,EAAAA,OAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMkE,EAAkBiB,GAAM,CAACA,CAAC,EACzC,UAAU,8DACV,MAAM,wBAEL,SAAA,CAAAzD,EAAS1B,EAAAA,OAAC6B,EAAA,CAAM,UAAU,iCAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmD,EAAK7B,EAAAA,OAACoF,GAAA,CAAK,UAAU,aAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8B,EAChGpF,SAAC,OAAA,CAAM,SAAA0B,EAAS,SAAW,OAAA,EAA3B,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmC,CAAA,CAAA,EANrC,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQCuC,YACE,MAAA,CAAI,UAAU,4HACZ,SAAAP,GAAe,IAAK2B,GACnBrF,EAAAA,OAAC,SAAA,CAEC,QAAS,IAAM6E,EAAYQ,EAAI,KAAK,EACpC,UAAU,4HAET,SAAAA,EAAI,KAAA,EAJAA,EAAI,MADX,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOD,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAUA,CAAA,CAAA,EApBJ,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAsBA,EAEArF,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMoE,EAAiB,EAAI,EACpC,UAAU,2GACV,MAAM,cAEN,SAAA,CAAApE,EAAAA,OAACsF,GAAA,CAAO,UAAU,aAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgC,EAChCtF,EAAAA,OAAC,QAAK,SAAA,QAAA,EAAN,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAY,CAAA,CAAA,EANd,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EApDF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAqDA,EAGCmE,GACCnE,EAAAA,OAAC,MAAA,CAAI,UAAU,sEACb,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,iCAAiC,SAAA,CAAA,+BACxB,OAAA,CAAK,UAAU,cAAe,SAAAS,EAASlB,CAAQ,CAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkD,EAAO,0BAAA,CAAA,EAD9E,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAS,EAAAA,OAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMoE,EAAiB,EAAK,EACrC,UAAU,wBACV,SAAUJ,EAAe,UAC1B,SAAA,QAAA,EAJD,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOAhE,EAAAA,OAAC,SAAA,CACC,QAAS,SAAY,CACnB,GAAI,CACF,MAAMgE,EAAe,YAAYzE,CAAQ,EACzC6E,EAAiB,EAAK,EACtBP,GAAA,MAAAA,GACF,MAAQ,CAER,CACF,EACA,UAAU,iEACV,SAAUG,EAAe,UAExB,SAAAA,EAAe,UAAY,cAAgB,QAAA,EAb9C,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAcA,CAAA,EAtBF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAuBA,EACCA,EAAe,SACdhE,EAAAA,OAAC,IAAA,CAAE,UAAU,iCAAkC,SAAAgE,EAAe,MAAM,OAAA,EAApE,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4E,CAAA,CAAA,EA7BhF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IA+BA,EAGDD,EAAkB,SACjB/D,EAAAA,OAAC,IAAA,CAAE,UAAU,iCAAkC,SAAA+D,EAAkB,MAAM,OAAA,EAAvE,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA+E,CAAA,CAAA,EAvGnF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAyGA,EAGA/D,EAAAA,OAAC,OAAI,UAAU,MACZ,WACCA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,gCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgD,EAChDA,EAAAA,OAAC,MAAA,CAAI,UAAU,qCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqD,CAAA,CAAA,EAFvD,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,EAEAA,EAAAA,OAAA+E,EAAAA,SAAA,CACG,SAAA,CAAAT,GACCtE,EAAAA,OAAC,MAAA,CACC,UAAU,iFACV,MAAO,CAAE,UAAW,OAAA,EAEpB,SAAAA,EAAAA,OAAC,MAAA,CACC,IAAKqE,EACL,IAAK5D,EAASlB,CAAQ,EACtB,UAAU,iCACV,MAAO,CAAE,UAAW,OAAA,CAAQ,EAJ9B,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EATF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAaDgF,YACE,MAAA,CAAI,UAAU,OACb,SAAAvE,SAACe,GAAA,CAAY,IAAKsD,CAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8B,CAAA,EADhC,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAGDI,GACCzE,EAAAA,OAAC,MAAA,CAAI,UAAU,oDACb,SAAAA,EAAAA,OAAC,IAAA,CACC,KAAMqE,EACN,OAAO,SACP,IAAI,sBACJ,UAAU,0DACX,SAAA,qBAAA,EALD,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,EARF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IASA,EAGD5C,GACCzB,EAAAA,OAACwB,GAAA,CAAoB,SAAAC,CAAA,EAArB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyC,CAAA,CAAA,EAnC7C,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAqCA,CAAA,EA5CJ,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA8CA,CAAA,CAAA,EA5JF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6JA,CAAA,EAjKF,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAkKA,CAEJ,CCzNA,MAAM8D,GAAa,CAAC,GAAI,GAAI,IAAK,GAAG,EAE7B,SAASC,IAAY,CAC1B,KAAM,CAACC,EAAcC,CAAe,EAAIC,GAAA,EAClC5G,EAAS0G,EAAa,IAAI,QAAQ,GAAK,GACvC,CAACG,EAAQC,CAAS,EAAI1E,EAAAA,SAAS,EAAE,EACjC,CAAC2E,EAAiBC,CAAkB,EAAI5E,EAAAA,SAAS,EAAE,EACnD,CAACmC,EAAc0C,CAAe,EAAI7E,EAAAA,SAAwB,IAAI,EAC9D,CAACnC,EAAUiH,CAAW,EAAI9E,EAAAA,SAAS,GAAG,EACtC,CAAC+E,EAAYC,CAAa,EAAIhF,EAAAA,SAAmB,CAAA,CAAE,EACnD,CAACiF,EAAcC,CAAe,EAAIlF,WAAA,EAGxCmF,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAI,WAAW,IAAM,CACzBR,EAAmBH,CAAM,EACzBS,EAAgB,MAAS,EACzBF,EAAc,CAAA,CAAE,CAClB,EAAG,GAAG,EACN,MAAO,IAAM,aAAaI,CAAC,CAC7B,EAAG,CAACX,CAAM,CAAC,EAEX,MAAMY,EAAkBV,EACpB,GAAG/G,CAAM,GAAG+G,CAAe,GAC3B/G,EAEE,CAAE,KAAAW,EAAM,UAAAoE,EAAW,WAAA2C,EAAY,QAAAC,GAAY5H,GAAc0H,EAAiBxH,EAAUoH,CAAY,EAEhGjD,GAAczD,GAAA,YAAAA,EAAM,cAAe,CAAA,EACnC0D,GAAQ1D,GAAA,YAAAA,EAAM,QAAS,CAAA,EACvBiH,EAAYjH,GAAA,YAAAA,EAAM,UAElBkH,EAAaC,cAAaC,GAAsB,CACpDjB,EAAU,EAAE,EACZE,EAAmB,EAAE,EACrBC,EAAgB,IAAI,EACpBK,EAAgB,MAAS,EACzBF,EAAc,CAAA,CAAE,EAEdT,EADEoB,EACc,CAAE,OAAQA,GAEV,CAAA,CAFqB,CAIzC,EAAG,CAACpB,CAAe,CAAC,EAEpB,SAASqB,GAAa,CACfJ,IACLR,EAAea,GAAS,CAAC,GAAGA,EAAMZ,GAAgB,EAAE,CAAC,EACrDC,EAAgBM,CAAS,EAC3B,CAEA,SAASM,GAAa,CACpB,GAAIf,EAAW,SAAW,EAAG,OAC7B,MAAMc,EAAO,CAAC,GAAGd,CAAU,EACrBgB,EAAQF,EAAK,IAAA,EACnBb,EAAca,CAAI,EAClBX,EAAgBa,GAAS,MAAS,CACpC,CAEA,SAASC,EAAeC,EAAc,CACpCnB,EAAYmB,CAAI,EAChBf,EAAgB,MAAS,EACzBF,EAAc,CAAA,CAAE,CAClB,CAEA,MAAMkB,EAAUlE,EAAY,SAAW,GAAKC,EAAM,SAAW,EACvDkE,EAAUpB,EAAW,OAAS,EAC9BqB,EAAc,CAAC,CAACZ,EAChBa,EAActB,EAAW,OAAS,EAElCuB,EAAU,+BAA+B,mBAAmBjB,CAAe,CAAC,aAAaxH,CAAQ,GAAGoH,EAAe,sBAAsB,mBAAmBA,CAAY,CAAC,GAAK,EAAE,GAEtL,OACEpG,EAAAA,OAAC,MAAA,CAAI,UAAU,aAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,EAAAA,OAAC0H,EAAA,CAAW,MAAM,OAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA0B,EAE1B1H,EAAAA,OAACH,GAAA,CAAgB,OAAAd,EAAgB,WAAY6H,CAAA,EAA7C,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAyD,EAEzD5G,SAAC2H,GAAU,QACT3H,EAAAA,OAAC4H,EAAA,CACC,UAAW,IAAMlB,EAAA,EACjB,WAAAD,EACA,QAAAgB,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAMA,SAAAzH,EAAAA,OAAC6H,EAAA,CACC,MAAM,SACN,MAAOjC,EACP,SAAUC,EACV,YAAY,qBAAA,EAJd,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EAZF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAEC/B,WACE,MAAA,CAAI,UAAU,+BACZ,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACgE,EAAG3H,aAChC,MAAA,CAAY,UAAU,kCAAbA,EAAV,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,CACzD,GAHH,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,EACEkH,EACFrH,EAAAA,OAAC+H,GAAW,MAAOnC,EAAS,oBAAsB,2BAAlD,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6E,EAE7E5F,EAAAA,OAACkD,GAAA,CACC,YAAAC,EACA,MAAAC,EACA,WAAYwD,EACZ,SAAUZ,EACV,aAAA1C,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,GAUAkE,GAAeD,GAAenE,EAAM,OAAS,IAC7CpD,EAAAA,OAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,CAAA,QAClCsH,EAAQ,MAAWlE,EAAM,OAASD,EAAY,OAAO,QAAA,CAAA,EAD7D,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAnD,EAAAA,OAAC,SAAA,CACC,MAAOhB,EACP,SAAWgJ,GAAMb,EAAe,SAASa,EAAE,OAAO,KAAK,CAAC,EACxD,UAAU,sBAET,YAAW,IAAKZ,GACfpH,SAAC,SAAA,CAAkB,MAAOoH,EAAO,SAAA,CAAAA,EAAK,SAAA,CAAA,EAAzBA,EAAb,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6C,CAC9C,CAAA,EAPH,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAQA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,GACEI,GAAeD,IACfvH,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAASiH,EACT,SAAU,CAACO,EACX,UAAU,4FAEV,SAAA,CAAAxH,EAAAA,OAACiI,GAAA,CAAY,UAAU,aAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EAAE,UAAA,CAAA,EALzC,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQAjI,EAAAA,OAAC,SAAA,CACC,QAAS+G,EACT,SAAU,CAACQ,EACX,UAAU,4FACX,SAAA,CAAA,OAECvH,EAAAA,OAACM,EAAA,CAAa,UAAU,aAAA,EAAxB,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsC,CAAA,CAAA,EANxC,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EAhBF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAiBA,CAAA,CAAA,EAjCJ,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAmCA,CAAA,CAAA,EA3EJ,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6EA,EAGCgD,GACCtD,EAAAA,OAAC2D,GAAA,CACC,SAAUL,EACV,QAAS,IAAM0C,EAAgB,IAAI,EACnC,UAAW,IAAM,CAAEA,EAAgB,IAAI,EAAGU,EAAA,CAAW,CAAA,EAHvD,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAIA,CAAA,EAvFJ,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAyFA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{b as j,j as e}from"./index-sNrqYt0Q.js";import{u as H,b as W,c as M,a as i}from"./vendor-query-DLp59M9_.js";import{P as ie}from"./PageHeader-FJIemmrC.js";import{F as oe,a as de}from"./FilterBar-BQNzsd3A.js";import{L as me}from"./ListToolbar-OWOn-HiC.js";import{S as ce}from"./StickyPagination-CJHMzYJj.js";import{E as X}from"./EmptyState-BygtU-Rh.js";import{T as G}from"./TimeAgo-DJZq-e4R.js";import{T as ue}from"./TagInput-DcPnUnSJ.js";import{l as ge,e as pe,k as ee,as as ae,at as se}from"./vendor-icons-CWl44VA6.js";import{f as he}from"./vendor-react-Co3Y8ikm.js";function be(){return H({queryKey:["knowledge","domains"],queryFn:()=>j("/knowledge/domains")})}function xe(t,a){var o;const n=new URLSearchParams;n.set("domain",t),(o=a==null?void 0:a.tags)!=null&&o.length&&n.set("tags",a.tags.join(",")),a!=null&&a.search&&n.set("search",a.search),(a==null?void 0:a.limit)!=null&&n.set("limit",String(a.limit)),(a==null?void 0:a.offset)!=null&&n.set("offset",String(a.offset));const l=n.toString();return H({queryKey:["knowledge",t,a==null?void 0:a.tags,a==null?void 0:a.search,a==null?void 0:a.limit,a==null?void 0:a.offset],queryFn:()=>j(`/knowledge/entries?${l}`),enabled:!!t})}function Ne(t,a){const n=new URLSearchParams;t&&n.set("domain",t),a&&n.set("key",a);const l=n.toString();return H({queryKey:["knowledge",t,a],queryFn:()=>j(`/knowledge/entry?${l}`),enabled:!!t&&!!a})}function fe(){const t=W();return M({mutationFn:a=>j("/knowledge/entry",{method:"POST",body:JSON.stringify(a)}),onSuccess:()=>{t.invalidateQueries({queryKey:["knowledge"]})}})}function we(){const t=W();return M({mutationFn:a=>j("/knowledge/field",{method:"PUT",body:JSON.stringify(a)}),onSuccess:()=>{t.invalidateQueries({queryKey:["knowledge"]})}})}function Ee(){const t=W();return M({mutationFn:({domain:a,key:n,path:l})=>{const o=new URLSearchParams({domain:a,key:n,path:l});return j(`/knowledge/field?${o}`,{method:"DELETE"})},onSuccess:()=>{t.invalidateQueries({queryKey:["knowledge"]})}})}function ke(){const t=W();return M({mutationFn:({domain:a,key:n})=>{const l=new URLSearchParams({domain:a,key:n});return j(`/knowledge/entry?${l}`,{method:"DELETE"})},onSuccess:()=>{t.invalidateQueries({queryKey:["knowledge"]})}})}function ye(t){return t==null?"":typeof t=="string"?t:JSON.stringify(t,null,2)}function te(t){const a=t.trim();if(!a)return{value:"",looksLikeJson:!1,parsedOk:!1};const n=a.startsWith("{")||a.startsWith("[");try{return{value:JSON.parse(a),looksLikeJson:n,parsedOk:!0}}catch{return{value:a,looksLikeJson:n,parsedOk:!1}}}function ne(t){if(typeof t=="string"){const a=t.trim();return!(a.startsWith("{")&&a.endsWith("}")||a.startsWith("[")&&a.endsWith("]"))}return typeof t=="number"||typeof t=="boolean"||t===null}function U({value:t,onChange:a,onKeyDown:n,placeholder:l,mono:o}){const c=i.useRef(null);return i.useEffect(()=>{c.current&&(c.current.style.height="auto",c.current.style.height=`${c.current.scrollHeight}px`,c.current.focus())},[t]),e.jsxDEV("textarea",{ref:c,value:t,onChange:w=>a(w.target.value),onKeyDown:n,placeholder:l,rows:1,className:`w-full bg-transparent text-xs text-text-primary resize-none outline-none p-0 ${o?"font-mono":""}`,style:{minHeight:"1.5em"}},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:60,columnNumber:5},this)}function ve({domain:t,entryKey:a,onDeleted:n}){const{data:l,isLoading:o,refetch:c}=Ne(t,a),w=ke(),u=fe(),L=we(),P=Ee(),[V,A]=i.useState(!1),[m,E]=i.useState(null),[x,k]=i.useState(""),[v,D]=i.useState(""),[S,N]=i.useState(""),[p,C]=i.useState(null),[$,O]=i.useState(null),[I,T]=i.useState(!1),g=l==null?void 0:l.data,K=g?Object.entries(g):[],r=i.useMemo(()=>{const s=v.trim().toLowerCase();return s?K.filter(([d])=>d.toLowerCase().includes(s)):K},[K,v]),h=i.useCallback((s,d)=>d==="field"?s:ye(g==null?void 0:g[s]),[g]),y=m?x!==h(m.field,m.column):!1;function z(s,d){E({field:s,column:d}),k(h(s,d)),C(null)}function J(){E(null),k("")}function _(){O("Invalid JSON — saved as text"),setTimeout(()=>O(null),4e3)}async function Q(){if(!m||!g)return;const{field:s,column:d}=m;if(d==="value"){const{value:b,looksLikeJson:f,parsedOk:q}=te(x);f&&!q&&_(),await L.mutateAsync({domain:t,key:a,path:s,value:b})}else{const b=x.trim();if(!b||b===s){J();return}const f=g[s];await P.mutateAsync({domain:t,key:a,path:s}),await L.mutateAsync({domain:t,key:a,path:b,value:f})}E(null),k(""),c()}async function re(s){await P.mutateAsync({domain:t,key:a,path:s}),C(null),E(null),c()}async function le(s){await u.mutateAsync({domain:t,key:a,data:g||{},tags:s,replace:!0}),c()}async function B(){const s=v.trim();if(!s)return;const{value:d,looksLikeJson:b,parsedOk:f}=te(S);b&&!f&&_();const q={...g,[s]:d||""};await u.mutateAsync({domain:t,key:a,data:q}),D(""),N(""),c()}function Y(s){s.key==="Escape"?J():s.key==="Enter"&&(s.metaKey||s.ctrlKey)&&(s.preventDefault(),Q())}function Z(s){s.key==="Escape"?(D(""),N("")):s.key==="Enter"&&(s.metaKey||s.ctrlKey)&&(s.preventDefault(),B())}return o?e.jsxDEV("div",{className:"animate-pulse space-y-3 mt-4",children:[e.jsxDEV("div",{className:"h-4 bg-surface-sunken rounded w-1/3"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:200,columnNumber:9},this),e.jsxDEV("div",{className:"h-48 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:201,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:199,columnNumber:7},this):!l||l.found===!1?e.jsxDEV("p",{className:"text-sm text-text-tertiary mt-4",children:"Entry not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:207,columnNumber:12},this):e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-4",children:[e.jsxDEV("div",{className:"flex items-center gap-4 min-h-[28px]",children:I?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(ue,{tags:l.tags||[],onChange:s=>{le(s)},placeholder:"Add tag...",compact:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:217,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>T(!1),className:"text-[10px] text-text-tertiary hover:text-text-secondary shrink-0",children:"Done"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:223,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:216,columnNumber:13},this):e.jsxDEV("div",{className:"flex items-center gap-1 cursor-text group",onClick:()=>T(!0),title:"Click to edit tags",children:l.tags&&l.tags.length>0?l.tags.map(s=>e.jsxDEV("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-medium bg-accent/10 text-accent",children:s},s,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:238,columnNumber:19},this)):e.jsxDEV("span",{className:"text-[10px] text-text-tertiary/40 italic group-hover:text-text-tertiary",children:"add tags..."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:243,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:231,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:214,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:e.jsxDEV(G,{date:l.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:249,columnNumber:60},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:249,columnNumber:11},this),V?e.jsxDEV("span",{className:"flex items-center gap-2 text-[10px]",children:[e.jsxDEV("span",{className:"text-status-error",children:"Delete entry?"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:252,columnNumber:15},this),e.jsxDEV("button",{onClick:async()=>{try{await w.mutateAsync({domain:t,key:a}),n()}catch{}},className:"font-medium text-status-error hover:text-status-error/80",disabled:w.isPending,children:w.isPending?"Deleting...":"Yes"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:253,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>A(!1),className:"text-text-tertiary hover:text-text-secondary",children:"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:265,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:251,columnNumber:13},this):e.jsxDEV("button",{onClick:()=>A(!0),className:"text-text-tertiary/50 hover:text-status-error transition-colors",title:"Delete entry",children:e.jsxDEV(ge,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:278,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:273,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:248,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:213,columnNumber:7},this),$&&e.jsxDEV("div",{className:"flex items-center justify-end gap-2 mb-2 px-1",children:[e.jsxDEV("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:286,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs text-status-warning",children:$},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:287,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:285,columnNumber:9},this),e.jsxDEV("table",{className:"w-full border-collapse",children:[e.jsxDEV("thead",{className:"sticky top-0 z-10 bg-surface",children:[e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary border-b border-surface-border",children:[e.jsxDEV("th",{className:"px-3 py-2 font-medium w-[200px] border-r border-surface-border",children:"Field"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:295,columnNumber:13},this),e.jsxDEV("th",{className:"px-3 py-2 font-medium",children:"Value"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:296,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:294,columnNumber:11},this),e.jsxDEV("tr",{className:"border-b border-surface-border bg-surface",children:[e.jsxDEV("td",{className:"px-3 py-2 align-top border-r border-surface-border",children:e.jsxDEV("input",{value:v,onChange:s=>D(s.target.value),onKeyDown:Z,placeholder:K.length?"add or filter...":"new field",className:"w-full bg-transparent text-xs text-text-primary placeholder:text-text-tertiary/40 placeholder:italic outline-none p-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:301,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:300,columnNumber:13},this),e.jsxDEV("td",{className:"px-3 py-2 align-top",children:[e.jsxDEV(U,{value:S,onChange:N,onKeyDown:Z,placeholder:"value"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:310,columnNumber:15},this),v.trim()&&e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[e.jsxDEV("button",{onClick:B,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:318,columnNumber:19},this),e.jsxDEV("button",{onClick:()=>{D(""),N("")},className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:325,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:317,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:309,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:299,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:293,columnNumber:9},this),e.jsxDEV("tbody",{children:r.map(([s,d])=>{const b=(m==null?void 0:m.field)===s&&m.column==="field",f=(m==null?void 0:m.field)===s&&m.column==="value",q=b||f,F=p===s;return e.jsxDEV("tr",{className:`border-b border-surface-border ${F?"bg-status-error/10":q?"":"hover:bg-surface-hover/30"}`,children:[e.jsxDEV("td",{className:`px-3 py-2 align-top border-r cursor-text ${F?"bg-transparent border-r-transparent":b?"border-r-surface-border bg-accent/5 border-l-2 border-l-accent":"border-r-surface-border"}`,onClick:()=>!b&&!F&&z(s,"field"),children:b?e.jsxDEV("div",{children:[e.jsxDEV(U,{value:x,onChange:k,onKeyDown:Y,placeholder:"field name"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:352,columnNumber:23},this),y&&e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[e.jsxDEV("button",{onClick:Q,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:355,columnNumber:27},this),e.jsxDEV("button",{onClick:J,className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:358,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:354,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:351,columnNumber:21},this):e.jsxDEV("span",{className:"text-xs font-medium text-text-secondary break-all",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:363,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:346,columnNumber:17},this),e.jsxDEV("td",{className:`px-3 py-2 align-top cursor-text ${F?"bg-transparent":f?"bg-accent/5 border-l-2 border-l-accent":""}`,onClick:()=>!f&&!F&&z(s,"value"),children:F?e.jsxDEV("span",{className:"flex items-center justify-end gap-2 text-[10px]",children:[e.jsxDEV("span",{className:"text-status-error",children:["Remove ",e.jsxDEV("span",{className:"font-medium",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:374,columnNumber:66},this),"?"]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:374,columnNumber:23},this),e.jsxDEV("button",{onClick:R=>{R.stopPropagation(),re(s)},className:"font-medium text-status-error hover:text-status-error/80",disabled:u.isPending,children:u.isPending?"...":"Yes"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:375,columnNumber:23},this),e.jsxDEV("button",{onClick:R=>{R.stopPropagation(),C(null)},className:"text-text-tertiary hover:text-text-secondary",children:"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:382,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:373,columnNumber:21},this):f?e.jsxDEV("div",{children:[e.jsxDEV(U,{value:x,onChange:k,onKeyDown:Y,placeholder:"value (string or JSON)",mono:!ne(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:391,columnNumber:23},this),e.jsxDEV("div",{className:"flex gap-2 mt-1.5",children:[y&&e.jsxDEV("button",{onClick:Q,className:"text-[10px] font-medium text-accent hover:text-accent-hover",disabled:u.isPending,children:u.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:400,columnNumber:27},this),e.jsxDEV("button",{onClick:J,className:"text-[10px] text-text-tertiary hover:text-text-secondary",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:404,columnNumber:25},this),e.jsxDEV("button",{onClick:R=>{R.stopPropagation(),C(s)},className:"text-[10px] text-status-error/50 hover:text-status-error ml-auto",children:"Remove"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:405,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:398,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:390,columnNumber:21},this):ne(d)?e.jsxDEV("p",{className:"text-xs text-text-primary break-words whitespace-pre-wrap",children:String(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:415,columnNumber:23},this):e.jsxDEV("pre",{className:"text-xs text-text-primary font-mono whitespace-pre-wrap break-words",children:typeof d=="string"?d:JSON.stringify(d,null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:417,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:368,columnNumber:17},this)]},s,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:344,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:336,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:292,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgeEntryView.tsx",lineNumber:211,columnNumber:5},this)}const Ve=50;function Ae(){var T,g,K;const[t,a]=he(),n=t.get("domain")||"",l=t.get("key")||"",[o,c]=i.useState(""),[w,u]=i.useState(""),[L,P]=i.useState(1),[V,A]=i.useState(Ve);i.useEffect(()=>{const r=setTimeout(()=>{u(o),P(1)},300);return()=>clearTimeout(r)},[o]);const m=(L-1)*V,E=be(),x=xe(n,{search:w||void 0,limit:V,offset:m}),k=((T=E.data)==null?void 0:T.domains)??[],v=((g=x.data)==null?void 0:g.entries)??[],D=((K=x.data)==null?void 0:K.total)??0,S=i.useMemo(()=>{if(!o)return k;const r=o.toLowerCase();return k.filter(h=>h.domain.toLowerCase().includes(r))},[k,o]);function N(r,h){c(""),u(""),P(1);const y={};r&&(y.domain=r),h&&(y.key=h),a(y)}const p=l?"entry":n?"entries":"domains",C=p==="entries"?x.isLoading:p==="domains"?E.isLoading:!1,$=Math.ceil((p==="entries"?D:S.length)/V),O=n?`/knowledge/entries?domain=${encodeURIComponent(n)}&limit=${V}&offset=${m}${w?`&search=${encodeURIComponent(w)}`:""}`:void 0;return e.jsxDEV("div",{children:[e.jsxDEV(ie,{title:"Knowledge"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("nav",{className:"flex items-center gap-1 text-sm mb-6 min-h-[28px]",children:[e.jsxDEV("button",{onClick:()=>N(""),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${p==="domains"?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(pe,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:86,columnNumber:11},this),e.jsxDEV("span",{children:"Knowledge"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:87,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:78,columnNumber:9},this),n&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:91,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>N(n),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${p==="entries"?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(ae,{className:"w-3.5 h-3.5 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:100,columnNumber:15},this),n]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:92,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:90,columnNumber:11},this),l&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:107,columnNumber:13},this),e.jsxDEV("span",{className:"flex items-center gap-1.5 px-1.5 py-0.5 text-text-primary font-medium",children:[e.jsxDEV(se,{className:"w-3.5 h-3.5 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:109,columnNumber:15},this),l]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:108,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:106,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:77,columnNumber:7},this),p==="entry"?e.jsxDEV(ve,{domain:n,entryKey:l,onDeleted:()=>N(n)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:118,columnNumber:9},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(oe,{actions:e.jsxDEV(me,{onRefresh:()=>p==="entries"?x.refetch():E.refetch(),isFetching:p==="entries"?x.isFetching:E.isFetching,apiPath:p==="entries"?O:"/knowledge/domains"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:126,columnNumber:13},this),children:e.jsxDEV(de,{label:"Search",value:o,onChange:c,placeholder:n?"Filter by key or tag...":"Filter by domain..."},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:132,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:125,columnNumber:11},this),C?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((r,h)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},h,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:143,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:141,columnNumber:13},this):p==="domains"?S.length===0?e.jsxDEV(X,{title:o?"No matching domains":"No knowledge domains yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:148,columnNumber:15},this):e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium",children:"Domain"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:153,columnNumber:21},this),e.jsxDEV("th",{className:"pb-2 font-medium w-24 text-right",children:"Entries"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:154,columnNumber:21},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-40 text-right",children:"Latest"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:155,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:152,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:151,columnNumber:17},this),e.jsxDEV("tbody",{children:S.map(r=>e.jsxDEV("tr",{onClick:()=>N(r.domain),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(ae,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:167,columnNumber:27},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:r.domain},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:168,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:166,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:165,columnNumber:23},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:r.count},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:173,columnNumber:23},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(G,{date:r.latest},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:177,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:176,columnNumber:23},this)]},r.domain,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:160,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:158,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:150,columnNumber:15},this):v.length===0?e.jsxDEV(X,{title:o?"No matching entries":"No entries in this domain"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:186,columnNumber:15},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium w-[200px]",children:"Key"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:192,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 font-medium",children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:193,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 font-medium w-16 text-right",children:"Fields"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:194,columnNumber:23},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-32 text-right",children:"Updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:195,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:191,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:190,columnNumber:19},this),e.jsxDEV("tbody",{children:v.map(r=>{var h;return e.jsxDEV("tr",{onClick:()=>N(n,r.key),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2 w-[200px]",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(se,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:207,columnNumber:29},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors truncate max-w-[160px]",title:r.key,children:r.key},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:208,columnNumber:29},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:206,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:205,columnNumber:25},this),e.jsxDEV("td",{className:"py-2",children:e.jsxDEV("div",{className:"flex flex-wrap gap-1",children:[(h=r.tags)==null?void 0:h.slice(0,5).map(y=>e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0 rounded-full text-[10px] font-medium bg-accent/10 text-accent",children:y},y,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:216,columnNumber:31},this)),r.tags&&r.tags.length>5&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:["+",r.tags.length-5]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:224,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:214,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:213,columnNumber:25},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:r.data?Object.keys(r.data).length:0},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:230,columnNumber:25},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(G,{date:r.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:234,columnNumber:27},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:233,columnNumber:25},this)]},r.key,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:200,columnNumber:23},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:198,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:189,columnNumber:17},this),e.jsxDEV(ce,{page:L,totalPages:$,onPageChange:P,total:D,pageSize:V,onPageSizeChange:A},void 0,!1,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:241,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:188,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:124,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/knowledge/KnowledgePage.tsx",lineNumber:73,columnNumber:5},this)}export{Ae as KnowledgePage};
2
+ //# sourceMappingURL=index-B78xalb4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B78xalb4.js","sources":["../../src/api/knowledge.ts","../../src/pages/knowledge/KnowledgeEntryView.tsx","../../src/pages/knowledge/KnowledgePage.tsx"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface KnowledgeDomain {\n domain: string;\n count: number;\n latest: string;\n}\n\nexport interface KnowledgeEntry {\n id: string;\n domain: string;\n key: string;\n data: Record<string, unknown>;\n tags: string[];\n created_at: string;\n updated_at: string;\n}\n\nexport interface ListDomainsResponse {\n domains: KnowledgeDomain[];\n}\n\nexport interface ListEntriesResponse {\n entries: KnowledgeEntry[];\n total: number;\n}\n\nexport function useListDomains() {\n return useQuery<ListDomainsResponse>({\n queryKey: ['knowledge', 'domains'],\n queryFn: () => apiFetch('/knowledge/domains'),\n });\n}\n\nexport function useListKnowledge(\n domain: string,\n opts?: { tags?: string[]; search?: string; limit?: number; offset?: number },\n) {\n const params = new URLSearchParams();\n params.set('domain', domain);\n if (opts?.tags?.length) params.set('tags', opts.tags.join(','));\n if (opts?.search) params.set('search', opts.search);\n if (opts?.limit != null) params.set('limit', String(opts.limit));\n if (opts?.offset != null) params.set('offset', String(opts.offset));\n const qs = params.toString();\n\n return useQuery<ListEntriesResponse>({\n queryKey: ['knowledge', domain, opts?.tags, opts?.search, opts?.limit, opts?.offset],\n queryFn: () => apiFetch(`/knowledge/entries?${qs}`),\n enabled: !!domain,\n });\n}\n\nexport function useGetKnowledge(domain: string, key: string | null) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n const qs = params.toString();\n\n return useQuery<KnowledgeEntry & { found?: boolean }>({\n queryKey: ['knowledge', domain, key],\n queryFn: () => apiFetch(`/knowledge/entry?${qs}`),\n enabled: !!domain && !!key,\n });\n}\n\nexport function useStoreKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; data: Record<string, unknown>; tags?: string[]; replace?: boolean }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/entry', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useSetKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; path: string; value: unknown; tags?: string[] }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/field', {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useRemoveKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { removed: boolean },\n Error,\n { domain: string; key: string; path: string }\n >({\n mutationFn: ({ domain, key, path }) => {\n const params = new URLSearchParams({ domain, key, path });\n return apiFetch(`/knowledge/field?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useDeleteKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { deleted: boolean; domain: string; key: string },\n Error,\n { domain: string; key: string }\n >({\n mutationFn: ({ domain, key }) => {\n const params = new URLSearchParams({ domain, key });\n return apiFetch(`/knowledge/entry?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n","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, useMemo, useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { ChevronRight, Brain, Database, Table2 } 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 { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { useListDomains, useListKnowledge } from '../../api/knowledge';\nimport { KnowledgeEntryView } from './KnowledgeEntryView';\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\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 <div>\n <PageHeader title=\"Knowledge\" />\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>Knowledge</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 <EmptyState title={search ? 'No matching domains' : 'No knowledge domains yet'} />\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 <EmptyState title={search ? 'No matching entries' : 'No entries in this domain'} />\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}\n"],"names":["useListDomains","useQuery","apiFetch","useListKnowledge","domain","opts","params","_a","qs","useGetKnowledge","key","useStoreKnowledge","queryClient","useQueryClient","useMutation","body","useSetKnowledgeField","useRemoveKnowledgeField","path","useDeleteKnowledge","formatValue","val","parseValue","raw","trimmed","looksLikeJson","isSimple","t","AutoTextarea","value","onChange","onKeyDown","placeholder","mono","ref","useRef","useEffect","jsxDEV","e","KnowledgeEntryView","entryKey","onDeleted","entry","isLoading","refetch","deleteMutation","storeMutation","setFieldMutation","removeFieldMutation","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","PAGE_SIZE","KnowledgePage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","page","setPage","pageSize","setPageSize","offset","domainsQuery","entriesQuery","domains","entries","_b","entriesTotal","_c","filteredDomains","d","navigate","k","level","totalPages","entriesApiPath","PageHeader","Brain","Fragment","ChevronRight","Database","Table2","FilterBar","ListToolbar","FilterInput","_","i","EmptyState","StickyPagination"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as e,J as k}from"./index-sNrqYt0Q.js";import{a as b}from"./vendor-query-DLp59M9_.js";import{a as z,b as L,u as J,c as F,d as O,e as I}from"./mcp-D2XfRh8v.js";import{E as _}from"./EmptyState-BygtU-Rh.js";import{C as $}from"./ConfirmDeleteModal-Cy6KVLfC.js";import{P as w}from"./PageHeader-FJIemmrC.js";import{F as A,a as q,b as y}from"./FilterBar-BQNzsd3A.js";import{S as B}from"./StickyPagination-CJHMzYJj.js";import{u as U}from"./useFilterParams-CGRYFw_A.js";import{u as G}from"./useExpandedRows-Cg9iq6Vy.js";import{b as W,R as H}from"./RunAsSelector-KAlKtitB.js";import{X as K,a6 as X,P as R,_ as C,a2 as Q,k as Y,aa as Z,ab as ee,z as se,l as re}from"./vendor-icons-CWl44VA6.js";import{L as M,c as ae}from"./vendor-react-Co3Y8ikm.js";import{R as te,a as D}from"./RowActions-JqgAB0p3.js";import{S as oe}from"./StatusBadge-DVCf2ncM.js";import"./Modal-Dir9Rlnx.js";import"./BotPicker-DcvILNUf.js";import"./bots-fc_O_YIq.js";function ne({error:r}){const s=r instanceof Error?r.message:"";return s.startsWith("No credential found for provider")?e.jsxDEV("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsxDEV(Q,{size:14,className:"text-status-warning mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:15,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] font-medium text-text-primary mb-0.5",children:"Credential required"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:17,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-1",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:18,columnNumber:11},this),e.jsxDEV(M,{to:"/credentials",className:"text-[11px] text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsxDEV(C,{size:10},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:20,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:16,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:14,columnNumber:7},this):e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:s||"Tool call failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:28,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:27,columnNumber:5},this)}function le({data:r}){const s=r==null?void 0:r.result,a=s==null?void 0:s.job_id,l=(s==null?void 0:s.namespace)||"longtail";return a?e.jsxDEV(M,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(l)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(C,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:43,columnNumber:7},this),"View Execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:39,columnNumber:5},this):null}function ie({serverId:r,serverName:s,tool:a,onClose:l}){const o=z(),[i,h]=b.useState(!1),[u,p]=b.useState({}),[m,N]=b.useState(""),[c,v]=b.useState(""),[x,E]=b.useState("");b.useEffect(()=>{const n=W(a.inputSchema);p(n),N(JSON.stringify(n,null,2)),h(!1),v(""),o.reset()},[a.name,r]);const g=!!o.data||!!o.error,j=()=>{if(!i)N(JSON.stringify(u,null,2));else try{p(JSON.parse(m))}catch{}h(!i)},T=()=>{v(""),o.reset();let n;if(i)try{n=JSON.parse(m)}catch{v("Invalid JSON");return}else n={...u};o.mutate({serverId:r,toolName:a.name,arguments:n,...x?{execute_as:x}:{}})};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:106,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:a.name},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:107,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:105,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(K,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:110,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:104,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(H,{selected:x,onChange:E},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:116,columnNumber:9},this),a.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Request"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:125,columnNumber:13},this),e.jsxDEV("button",{onClick:j,className:"text-[10px] text-accent hover:underline",children:i?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:124,columnNumber:11},this),i?e.jsxDEV("textarea",{value:m,onChange:n=>N(n.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:132,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(u).map(([n,f])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:143,columnNumber:19},this),typeof f=="boolean"?e.jsxDEV("select",{value:String(f),onChange:t=>p({...u,[n]:t.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:150,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:151,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:145,columnNumber:21},this):typeof f=="object"?e.jsxDEV("textarea",{value:JSON.stringify(f,null,2),onChange:t=>{try{p({...u,[n]:JSON.parse(t.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:154,columnNumber:21},this):e.jsxDEV("input",{type:typeof f=="number"?"number":"text",value:String(f??""),onChange:t=>p({...u,[n]:typeof f=="number"?Number(t.target.value):t.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:160,columnNumber:21},this)]},n,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:142,columnNumber:17},this)),Object.keys(u).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:140,columnNumber:13},this),c&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:174,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:123,columnNumber:9},this),e.jsxDEV("button",{onClick:T,disabled:o.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:o.isPending?"Running...":g?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:15},this)," Re-run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(R,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:15},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:178,columnNumber:9},this),o.isPending&&e.jsxDEV("div",{className:"animate-pulse",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:195,columnNumber:13},this),e.jsxDEV("div",{className:"h-20 bg-surface-sunken rounded-md"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:196,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:194,columnNumber:11},this),o.data?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV(k,{data:o.data,label:"Response",defaultCollapsed:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:201,columnNumber:13},this),e.jsxDEV(le,{data:o.data},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:202,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:200,columnNumber:11},this):null,o.error?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:207,columnNumber:13},this),e.jsxDEV(ne,{error:o.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:208,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:206,columnNumber:11},this):null]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:115,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:102,columnNumber:5},this)}function me(r){var s,a;return!!((s=r.metadata)!=null&&s.builtin)||!!((a=r.transport_config)!=null&&a.builtin)}function ce(r,s){var o;if(!s)return!0;const a=s.toLowerCase();return r.name.toLowerCase().includes(a)||(o=r.description)!=null&&o.toLowerCase().includes(a)||(r.tags??[]).some(i=>i.toLowerCase().includes(a))?!0:(r.tool_manifest??[]).some(i=>{var h;return i.name.toLowerCase().includes(a)||((h=i.description)==null?void 0:h.toLowerCase().includes(a))})}function pe(r,s){if(!s)return r;const a=s.toLowerCase();return r.filter(l=>{var o;return l.name.toLowerCase().includes(a)||((o=l.description)==null?void 0:o.toLowerCase().includes(a))})}function de({serverId:r,credentialProviders:s}){const{data:a}=L(r);if(s.length===0||!a)return null;const l=a.missing.length===0;return e.jsxDEV("span",{className:`inline-block w-2 h-2 rounded-full shrink-0 ${l?"bg-status-success":"bg-status-warning"}`,title:l?"All credentials registered":`Missing: ${a.missing.join(", ")}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:19,columnNumber:5},this)}function ue({server:r,expanded:s,onToggle:a,onEdit:l,onDelete:o,onTryTool:i,connect:h,disconnect:u,visibleTools:p}){const m=r.tool_manifest??[],N=me(r);return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:m.length>0?a:void 0,className:`group/row border-b transition-colors duration-100 ${m.length>0?"cursor-pointer row-hover":""}`,children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${s?"rotate-90":""} ${m.length===0?"opacity-0":"text-text-tertiary"}`,children:e.jsxDEV(Y,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:63,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:62,columnNumber:13},this),e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-sm text-text-primary font-medium",children:r.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:66,columnNumber:15},this),(r.tags??[]).length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-1 mt-0.5",children:r.tags.map(c=>e.jsxDEV("span",{className:"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded",children:c},c,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:70,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:68,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:65,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:61,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:60,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(oe,{status:r.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:86,columnNumber:13},this),e.jsxDEV(de,{serverId:r.id,credentialProviders:r.credential_providers??[]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:85,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:84,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV(te,{children:[!N&&(r.status==="connected"?e.jsxDEV(D,{icon:Z,title:"Disconnect server",onClick:()=>u.mutate(r.id)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:96,columnNumber:17},this):e.jsxDEV(D,{icon:ee,title:"Connect server",onClick:()=>h.mutate(r.id),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:102,columnNumber:17},this)),e.jsxDEV(D,{icon:se,title:"Edit server",onClick:l},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:110,columnNumber:13},this),!N&&e.jsxDEV(D,{icon:re,title:"Delete server",onClick:o,colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:116,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:93,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:92,columnNumber:9},this),e.jsxDEV("td",{className:"w-12 text-center",children:e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:m.length},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:128,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:127,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:53,columnNumber:7},this),p.length>0&&e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:4,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:s?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[p.map(c=>e.jsxDEV("div",{onClick:()=>i(c),className:"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30",children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary",children:c.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:151,columnNumber:23},this),c.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:c.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:153,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:150,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:157,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 flex justify-end shrink-0",children:e.jsxDEV("button",{onClick:v=>{v.stopPropagation(),i(c)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Try tool",children:e.jsxDEV(R,{className:"w-[18px] h-[18px]",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:165,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:160,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:159,columnNumber:21},this)]},c.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:144,columnNumber:19},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:142,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:138,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:137,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:136,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:51,columnNumber:5},this)}function ke(){const r=ae(),{filters:s,setFilter:a,pagination:l}=U({filters:{status:"",search:"",tag:""}}),{data:o,isLoading:i}=J({status:s.status||void 0,search:s.search||void 0,tags:s.tag||void 0}),h=F(),u=O(),p=I(),[m,N]=b.useState(null),{expandedIds:c,toggle:v}=G("lt:expanded:mcp-servers"),[x,E]=b.useState(null),g=(o==null?void 0:o.servers)??[],j=(o==null?void 0:o.total)??0,T=b.useMemo(()=>{const t=new Set;for(const d of g)for(const S of d.tags??[])t.add(S);return[...t].sort().map(d=>({value:d,label:d}))},[g]),n=b.useMemo(()=>s.search?g.filter(t=>ce(t,s.search)):g,[g,s.search]);b.useEffect(()=>{if(!s.search)return;const t=s.search.toLowerCase();for(const d of n)(d.tool_manifest??[]).some(V=>{var P;return V.name.toLowerCase().includes(t)||((P=V.description)==null?void 0:P.toLowerCase().includes(t))})&&!c.has(d.id)&&v(d.id)},[s.search,n]);const f=()=>{m&&p.mutate(m.id,{onSuccess:()=>N(null)})};return i?e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:87,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:5}).map((t,d)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:91,columnNumber:15},this)},d,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:90,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:88,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:86,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools",actions:e.jsxDEV("button",{onClick:()=>r("/mcp/servers/new"),className:"btn-primary text-xs",children:"Register Server"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:104,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:101,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:113,columnNumber:7},this),e.jsxDEV(A,{children:[e.jsxDEV(q,{label:"Search",value:s.search,onChange:t=>a("search",t),placeholder:"Server or tool name..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV(y,{label:"Tag",value:s.tag,onChange:t=>a("tag",t),options:T},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:124,columnNumber:9},this),e.jsxDEV(y,{label:"Status",value:s.status,onChange:t=>a("status",t),options:[{value:"registered",label:"Registered"},{value:"connected",label:"Connected"},{value:"error",label:"Error"},{value:"disconnected",label:"Disconnected"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:130,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:117,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0 ",children:[e.jsxDEV("div",{className:`${x?"flex-1 min-w-0":"w-full"} transition-all`,children:[n.length===0?e.jsxDEV(_,{title:"No servers found"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:147,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:152,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:155,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:158,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-12"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:159,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:151,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:150,columnNumber:15},this),e.jsxDEV("tbody",{children:n.map(t=>e.jsxDEV(ue,{server:t,expanded:c.has(t.id),onToggle:()=>v(t.id),onEdit:()=>r(`/mcp/servers/${t.id}`),onDelete:()=>N(t),onTryTool:d=>E({serverId:t.id,serverName:t.name,tool:d}),connect:h,disconnect:u,visibleTools:pe(t.tool_manifest??[],s.search)},t.id,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:164,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:162,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:149,columnNumber:13},this),e.jsxDEV(B,{page:l.page,totalPages:l.totalPages(j),onPageChange:l.setPage,total:j,pageSize:l.pageSize,onPageSizeChange:l.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:190,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:145,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ie,{serverId:x.serverId,serverName:x.serverName,tool:x.tool,onClose:()=>E(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:203,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:202,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:143,columnNumber:7},this),e.jsxDEV($,{open:!!m,onClose:()=>N(null),onConfirm:f,title:"Delete MCP Server",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:m==null?void 0:m.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:222,columnNumber:13},this),"? This will remove the server registration."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:220,columnNumber:11},this),isPending:p.isPending,error:p.error},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:214,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:100,columnNumber:5},this)}export{ke as McpServersPage};
2
+ //# sourceMappingURL=index-BI8r69O_.js.map