@hotmeshio/long-tail 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +1 -1
  2. package/build/api/files.d.ts +13 -0
  3. package/build/api/files.js +44 -0
  4. package/build/api/mcp-runs.d.ts +2 -0
  5. package/build/api/mcp-runs.js +2 -0
  6. package/build/api/workflow-sets.d.ts +11 -0
  7. package/build/api/workflow-sets.js +62 -0
  8. package/build/api/yaml-workflows.d.ts +9 -0
  9. package/build/api/yaml-workflows.js +40 -11
  10. package/build/examples/seed.js +50 -0
  11. package/build/lib/db/schemas/001_schema.sql +281 -106
  12. package/build/lib/db/schemas/002_seed.sql +56 -39
  13. package/build/lib/storage/local.d.ts +15 -0
  14. package/build/lib/storage/local.js +63 -0
  15. package/build/lib/storage/mime.d.ts +4 -0
  16. package/build/lib/storage/mime.js +31 -0
  17. package/build/lib/storage/s3.d.ts +16 -0
  18. package/build/lib/storage/s3.js +70 -0
  19. package/build/lib/storage/types.d.ts +18 -0
  20. package/build/modules/utils.d.ts +73 -0
  21. package/build/modules/utils.js +84 -0
  22. package/build/routes/file-browser.d.ts +2 -0
  23. package/build/routes/file-browser.js +112 -0
  24. package/build/routes/files.js +25 -17
  25. package/build/routes/index.js +2 -0
  26. package/build/routes/mcp-runs.js +2 -0
  27. package/build/routes/workflow-sets.js +9 -0
  28. package/build/routes/yaml-workflows/deployment.js +8 -0
  29. package/build/services/insight/index.d.ts +13 -0
  30. package/build/services/insight/index.js +4 -7
  31. package/build/services/insight/prompts.d.ts +1 -1
  32. package/build/services/insight/prompts.js +1 -1
  33. package/build/services/mcp/server.js +31 -0
  34. package/build/services/mcp-runs/queries.d.ts +2 -0
  35. package/build/services/mcp-runs/queries.js +11 -1
  36. package/build/services/mcp-runs/sql.d.ts +1 -1
  37. package/build/services/mcp-runs/sql.js +2 -2
  38. package/build/services/workflow-sets/db.d.ts +1 -0
  39. package/build/services/workflow-sets/db.js +6 -0
  40. package/build/services/workflow-sets/index.d.ts +1 -1
  41. package/build/services/workflow-sets/index.js +2 -1
  42. package/build/services/workflow-sets/sql.d.ts +1 -0
  43. package/build/services/workflow-sets/sql.js +6 -1
  44. package/build/services/yaml-workflow/db.d.ts +12 -0
  45. package/build/services/yaml-workflow/db.js +18 -0
  46. package/build/services/yaml-workflow/generator.js +4 -4
  47. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  48. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  49. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  50. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  51. package/build/services/yaml-workflow/sql.d.ts +2 -1
  52. package/build/services/yaml-workflow/sql.js +10 -3
  53. package/build/system/activities/schema-exchange.d.ts +50 -0
  54. package/build/system/activities/schema-exchange.js +210 -0
  55. package/build/system/activities/sql.d.ts +1 -1
  56. package/build/system/activities/sql.js +12 -1
  57. package/build/system/index.js +1 -0
  58. package/build/system/mcp-servers/human-queue.js +31 -0
  59. package/build/system/mcp-servers/knowledge.js +35 -6
  60. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  61. package/build/system/mcp-servers/schema-exchange.js +93 -0
  62. package/build/system/seed/server-definitions.d.ts +112 -1
  63. package/build/system/seed/server-definitions.js +37 -0
  64. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  65. package/build/system/seed/tool-manifests-data.js +37 -1
  66. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  67. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  68. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  69. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  70. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -1
  71. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +3 -3
  72. package/build/system/workflows/mcp-workflow-planner/index.js +39 -5
  73. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  74. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  75. package/build/tsconfig.tsbuildinfo +1 -1
  76. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-Cngijp4Q.js} +2 -2
  77. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-Cngijp4Q.js.map} +1 -1
  78. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js → AvailableEscalationsPage-CpBfGV1h.js} +2 -2
  79. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js.map → AvailableEscalationsPage-CpBfGV1h.js.map} +1 -1
  80. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-B8Uvw9Si.js} +2 -2
  81. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-B8Uvw9Si.js.map} +1 -1
  82. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-DiFPuWOY.js} +2 -2
  83. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-DiFPuWOY.js.map} +1 -1
  84. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-CpXG9uyu.js} +2 -2
  85. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-CpXG9uyu.js.map} +1 -1
  86. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DKsTR9lK.js} +2 -2
  87. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DKsTR9lK.js.map} +1 -1
  88. package/dashboard/dist/assets/CredentialsPage-DlS7Kf40.js +2 -0
  89. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-DlS7Kf40.js.map} +1 -1
  90. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-B-9eW3pm.js} +2 -2
  91. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-B-9eW3pm.js.map} +1 -1
  92. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DkOokbtL.js} +2 -2
  93. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DkOokbtL.js.map} +1 -1
  94. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-DVtHqM-5.js} +2 -2
  95. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-DVtHqM-5.js.map} +1 -1
  96. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-C7KIMIbE.js} +2 -2
  97. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-C7KIMIbE.js.map} +1 -1
  98. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-BMKBlkPx.js} +2 -2
  99. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-BMKBlkPx.js.map} +1 -1
  100. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BYZ5OVdQ.js} +2 -2
  101. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BYZ5OVdQ.js.map} +1 -1
  102. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-C5r3n6YO.js} +2 -2
  103. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-C5r3n6YO.js.map} +1 -1
  104. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-BGUajIsW.js} +2 -2
  105. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-BGUajIsW.js.map} +1 -1
  106. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-B_kJYHea.js} +2 -2
  107. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-B_kJYHea.js.map} +1 -1
  108. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +5 -0
  109. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +1 -0
  110. package/dashboard/dist/assets/McpQueryPage-BgAq_bQg.js +2 -0
  111. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-BgAq_bQg.js.map} +1 -1
  112. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js +2 -0
  113. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js.map +1 -0
  114. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js +2 -0
  115. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js.map +1 -0
  116. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-E1yRnCeW.js} +2 -2
  117. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-E1yRnCeW.js.map} +1 -1
  118. package/dashboard/dist/assets/OperatorDashboard-C8MSTzey.js +2 -0
  119. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-C8MSTzey.js.map} +1 -1
  120. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-Cm5HBQF_.js} +2 -2
  121. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-Cm5HBQF_.js.map} +1 -1
  122. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-CNmWJFSN.js} +2 -2
  123. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-CNmWJFSN.js.map} +1 -1
  124. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-HSI4RVhs.js} +2 -2
  125. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-HSI4RVhs.js.map} +1 -1
  126. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-Dln8622H.js} +2 -2
  127. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-Dln8622H.js.map} +1 -1
  128. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-bIsd9N_h.js} +2 -2
  129. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-bIsd9N_h.js.map} +1 -1
  130. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-BVUp2bF0.js} +2 -2
  131. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-BVUp2bF0.js.map} +1 -1
  132. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +2 -0
  133. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-kH-Njt25.js.map} +1 -1
  134. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DbUJPfaW.js} +2 -2
  135. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DbUJPfaW.js.map} +1 -1
  136. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-Bs3JbyAz.js} +2 -2
  137. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-Bs3JbyAz.js.map} +1 -1
  138. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-CakDdsCw.js} +2 -2
  139. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-CakDdsCw.js.map} +1 -1
  140. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Cd_SG_yA.js} +2 -2
  141. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Cd_SG_yA.js.map} +1 -1
  142. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-Bz0C18nC.js} +2 -2
  143. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-Bz0C18nC.js.map} +1 -1
  144. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js → SwimlaneTimeline-Cfe-xQRX.js} +2 -2
  145. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js.map → SwimlaneTimeline-Cfe-xQRX.js.map} +1 -1
  146. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-ClFhXG-U.js} +2 -2
  147. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-ClFhXG-U.js.map} +1 -1
  148. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-SuMBdARt.js} +2 -2
  149. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-SuMBdARt.js.map} +1 -1
  150. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-lJR1JW_W.js} +2 -2
  151. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-lJR1JW_W.js.map} +1 -1
  152. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-Dkq1Vtbt.js} +2 -2
  153. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-Dkq1Vtbt.js.map} +1 -1
  154. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-DgfDZ1pl.js} +2 -2
  155. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-DgfDZ1pl.js.map} +1 -1
  156. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-MpHZ1hMD.js} +2 -2
  157. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-MpHZ1hMD.js.map} +1 -1
  158. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-DqsosA4B.js} +2 -2
  159. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-DqsosA4B.js.map} +1 -1
  160. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CVlg38C3.js} +2 -2
  161. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CVlg38C3.js.map} +1 -1
  162. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js +2 -0
  163. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js.map +1 -0
  164. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-Ugzbs8mV.js} +2 -2
  165. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-Ugzbs8mV.js.map} +1 -1
  166. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-CIp_lTNl.js} +2 -2
  167. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-CIp_lTNl.js.map} +1 -1
  168. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +2 -0
  169. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +1 -0
  170. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-DPfUpVqI.js} +2 -2
  171. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-DPfUpVqI.js.map} +1 -1
  172. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-RrCDbMC3.js} +2 -2
  173. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-RrCDbMC3.js.map} +1 -1
  174. package/dashboard/dist/assets/escalation-columns-CDGa9wsD.js +2 -0
  175. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-CDGa9wsD.js.map} +1 -1
  176. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-ZSKqdkdS.js} +2 -2
  177. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-ZSKqdkdS.js.map} +1 -1
  178. package/dashboard/dist/assets/helpers-rMEcLwKs.js +2 -0
  179. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +1 -0
  180. package/dashboard/dist/assets/{index-DDYFpi4l.js → index-ABcJHHlN.js} +2 -2
  181. package/dashboard/dist/assets/{index-DDYFpi4l.js.map → index-ABcJHHlN.js.map} +1 -1
  182. package/dashboard/dist/assets/{index-D1wVX50Z.js → index-B91h_jZ0.js} +2 -2
  183. package/dashboard/dist/assets/{index-D1wVX50Z.js.map → index-B91h_jZ0.js.map} +1 -1
  184. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-BbI2dzhJ.js} +2 -2
  185. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-BbI2dzhJ.js.map} +1 -1
  186. package/dashboard/dist/assets/{index-BizfauqT.js → index-BmVCyB6C.js} +4 -4
  187. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-BmVCyB6C.js.map} +1 -1
  188. package/dashboard/dist/assets/index-C1E5GTs9.js +2 -0
  189. package/dashboard/dist/assets/index-C1E5GTs9.js.map +1 -0
  190. package/dashboard/dist/assets/{index-Cf60K3x9.js → index-C90ZPzXk.js} +2 -2
  191. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-C90ZPzXk.js.map} +1 -1
  192. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-Cmgrk7PQ.js} +58 -58
  193. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +1 -0
  194. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-DNytWfSZ.js} +2 -2
  195. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-DNytWfSZ.js.map} +1 -1
  196. package/dashboard/dist/assets/index-DX6zxr6t.js +2 -0
  197. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-DX6zxr6t.js.map} +1 -1
  198. package/dashboard/dist/assets/index-DeX-ezqf.css +1 -0
  199. package/dashboard/dist/assets/index-K40Qw1tk.js +2 -0
  200. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-K40Qw1tk.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-BUK3qR-1.js → index-lCyNr5Xk.js} +2 -2
  202. package/dashboard/dist/assets/{index-BUK3qR-1.js.map → index-lCyNr5Xk.js.map} +1 -1
  203. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-CNE44TSp.js} +2 -2
  204. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-CNE44TSp.js.map} +1 -1
  205. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js +2 -0
  206. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js.map +1 -0
  207. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js +2 -0
  208. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js.map +1 -0
  209. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-BbmdXuPp.js} +2 -2
  210. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-BbmdXuPp.js.map} +1 -1
  211. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-DoHYlhWH.js} +2 -2
  212. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-DoHYlhWH.js.map} +1 -1
  213. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-BAiJiCHS.js} +2 -2
  214. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-BAiJiCHS.js.map} +1 -1
  215. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CvroqHtm.js} +2 -2
  216. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CvroqHtm.js.map} +1 -1
  217. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js → useEventHooks-BHMbzR_y.js} +2 -2
  218. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BHMbzR_y.js.map} +1 -1
  219. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  220. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  221. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +2 -0
  222. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js.map +1 -0
  223. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-CxIMy_xw.js} +2 -2
  224. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-CxIMy_xw.js.map} +1 -1
  225. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-AFGxSeQS.js} +132 -82
  226. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +1 -0
  227. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-yR9yais7.js} +2 -2
  228. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-yR9yais7.js.map} +1 -1
  229. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js +2 -0
  230. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js.map +1 -0
  231. package/dashboard/dist/index.html +3 -3
  232. package/docs/schema-exchange.md +173 -0
  233. package/docs/self-test.md +106 -0
  234. package/package.json +4 -2
  235. package/build/lib/db/schemas/003_workflow_discovery.sql +0 -39
  236. package/build/lib/db/schemas/004_query_router.sql +0 -38
  237. package/build/lib/db/schemas/004_workflow_sets.sql +0 -29
  238. package/build/lib/db/schemas/005_triage_router.sql +0 -37
  239. package/build/lib/db/schemas/005_unique_graph_topic.sql +0 -7
  240. package/build/lib/db/schemas/006_oauth.sql +0 -50
  241. package/build/lib/db/schemas/007_security.sql +0 -27
  242. package/build/lib/db/schemas/008_bot_accounts.sql +0 -30
  243. package/build/lib/db/schemas/009_audit_trail.sql +0 -7
  244. package/build/lib/db/schemas/010_credential_providers.sql +0 -4
  245. package/build/lib/db/schemas/011_system_workflow_configs.sql +0 -37
  246. package/build/lib/db/schemas/012_drop_modality.sql +0 -6
  247. package/build/lib/db/schemas/013_execute_as.sql +0 -9
  248. package/build/lib/db/schemas/014_ephemeral_credentials.sql +0 -16
  249. package/build/lib/db/schemas/015_knowledge.sql +0 -23
  250. package/build/lib/db/schemas/016_streamable_http.sql +0 -7
  251. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  252. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  253. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  254. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  255. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  256. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  257. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  258. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  259. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  260. package/dashboard/dist/assets/RolesPage-SMedMuqa.js +0 -2
  261. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  262. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  263. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  264. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  265. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  266. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  267. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  268. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  269. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  270. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  271. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  272. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  273. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  274. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  275. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  276. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  277. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  278. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  279. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  280. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  281. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  282. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-BizfauqT.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, ShieldCheck, Settings, Workflow } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-6\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent pl-4'\n : 'pl-0 hover:text-text-primary'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n {tier === 'certified' && <ShieldCheck className=\"w-3.5 h-3.5 shrink-0 text-status-success\" />}\n {tier === 'configured' && <Settings className=\"w-3.5 h-3.5 shrink-0 text-status-info\" />}\n {tier === 'durable' && <Workflow className=\"w-3.5 h-3.5 shrink-0 text-accent/75\" />}\n <p className={`text-sm font-mono ${isSelected ? 'font-medium text-accent' : 'text-text-secondary'}`}>\n {config.workflow_type}\n </p>\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[11px] text-text-tertiary mt-1 leading-relaxed\">\n {config.description}\n </p>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1 opacity-60\">\n {config.task_queue}\n </p>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input font-mono text-xs\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: (metadata as Record<string, unknown>) ?? undefined,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <div className=\"flex items-center justify-between\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n <div className=\"flex gap-2\">\n {selected.roles.map((r) => (\n <Pill key={r}>{r}</Pill>\n ))}\n </div>\n </div>\n {selected.description && (\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-tertiary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => { setCronInput(expr); setCron.reset(); }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input font-mono text-xs w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n />\n\n <div className=\"lg:col-span-2\">\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n Select a workflow to begin\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxDEV","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","SectionLabel","config","isSelected","tier","ShieldCheck","Settings","Workflow","Bot","Pill","children","className","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","r","v","SchedulePanel","activeTypes","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","certified","c","registeredTypes","durable","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"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"}
1
+ {"version":3,"file":"index-BmVCyB6C.js","sources":["../../src/pages/workflows/start/ModeToggle.tsx","../../src/pages/workflows/start/WorkflowSelector.tsx","../../src/components/common/display/Pill.tsx","../../src/pages/workflows/start/helpers.ts","../../src/pages/workflows/start/IdentitySummary.tsx","../../src/pages/workflows/start/EnvelopeEditor.tsx","../../src/pages/workflows/start/StartNowPanel.tsx","../../src/pages/workflows/start/SchedulePanel.tsx","../../src/pages/workflows/start/StartWorkflowPage.tsx","../../src/pages/workflows/start/DurableInvokePage.tsx"],"sourcesContent":["import { Play, Clock } from 'lucide-react';\n\nexport type Mode = 'now' | 'schedule';\n\nexport function ModeToggle({ mode, onChange }: { mode: Mode; onChange: (m: Mode) => void }) {\n const btn = (m: Mode, icon: React.ReactNode, label: string) => (\n <button\n onClick={() => onChange(m)}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${\n mode === m\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-text-tertiary hover:text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {icon}\n {label}\n </button>\n );\n\n return (\n <div className=\"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit\">\n {btn('now', <Play className=\"w-3.5 h-3.5\" />, 'Start Now')}\n {btn('schedule', <Clock className=\"w-3.5 h-3.5\" />, 'Schedule')}\n </div>\n );\n}\n","import { Bot, ShieldCheck, Settings, Workflow } from 'lucide-react';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport type { WorkflowTier } from '../../../api/types';\n\nexport function WorkflowSelector({\n configs,\n selectedType,\n onSelect,\n tierMap,\n}: {\n configs: LTWorkflowConfig[];\n selectedType: string;\n onSelect: (config: LTWorkflowConfig) => void;\n tierMap: Map<string, WorkflowTier>;\n}) {\n return (\n <div>\n <SectionLabel className=\"mb-6\">Select Workflow</SectionLabel>\n <div>\n {configs.map((config) => {\n const isSelected = selectedType === config.workflow_type;\n const tier = tierMap.get(config.workflow_type) ?? 'durable';\n return (\n <button\n key={config.workflow_type}\n onClick={() => onSelect(config)}\n className={`w-full text-left py-4 border-b border-surface-border transition-colors duration-150 ${\n isSelected\n ? 'border-l-2 border-l-accent pl-4'\n : 'pl-0 hover:text-text-primary'\n }`}\n >\n <div className=\"flex items-center gap-2\">\n {tier === 'certified' && <ShieldCheck className=\"w-3.5 h-3.5 shrink-0 text-status-success\" />}\n {tier === 'configured' && <Settings className=\"w-3.5 h-3.5 shrink-0 text-status-info\" />}\n {tier === 'durable' && <Workflow className=\"w-3.5 h-3.5 shrink-0 text-accent/75\" />}\n <p className={`text-sm font-mono ${isSelected ? 'font-medium text-accent' : 'text-text-secondary'}`}>\n {config.workflow_type}\n </p>\n {config.execute_as && (\n <span className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] bg-accent/10 text-accent rounded\">\n <Bot className=\"w-2.5 h-2.5\" />\n {config.execute_as}\n </span>\n )}\n </div>\n {config.description && (\n <p className=\"text-[11px] text-text-tertiary mt-1 leading-relaxed\">\n {config.description}\n </p>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1 opacity-60\">\n {config.task_queue}\n </p>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\ninterface PillProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Pill({ children, className = '' }: PillProps) {\n return (\n <span className={`px-2 py-0.5 text-[10px] bg-surface-sunken rounded-full text-text-secondary ${className}`}>\n {children}\n </span>\n );\n}\n","export const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n/** Infer a simple field type from a value. */\nexport function inferTypeFromValue(value: unknown): string {\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'number') return 'number';\n if (Array.isArray(value)) return 'array';\n if (value !== null && typeof value === 'object') return 'object';\n return 'string';\n}\n\n/** Extract the data keys from an envelope_schema and their inferred types. */\nexport function extractDataFields(\n schema: Record<string, unknown> | null,\n): { key: string; type: string; defaultValue: unknown }[] {\n if (!schema) return [];\n const data = schema.data;\n if (!data || typeof data !== 'object') return [];\n return Object.entries(data as Record<string, unknown>).map(([key, value]) => ({\n key,\n type: inferTypeFromValue(value),\n defaultValue: value,\n }));\n}\n\n/** Build form field values from data object. */\nexport function dataToFields(data: Record<string, unknown>): Record<string, unknown> {\n return { ...data };\n}\n\n/** Build full envelope JSON string from form fields + metadata. */\nexport function fieldsToJson(\n fields: Record<string, unknown>,\n metadata: Record<string, unknown>,\n): string {\n return JSON.stringify({ data: fields, metadata }, null, 2);\n}\n","import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\nexport function IdentitySummary({\n config,\n overrideBot,\n onOverrideChange,\n showOverride,\n}: {\n config: LTWorkflowConfig;\n overrideBot?: string;\n onOverrideChange?: (botExternalId: string) => void;\n showOverride?: boolean;\n}) {\n const { user } = useAuth();\n const effectiveBot = overrideBot || config.execute_as;\n\n return (\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium\">Running as</span>\n {effectiveBot && !overrideBot && (\n <span className=\"text-[9px] text-text-tertiary\">configured default</span>\n )}\n {overrideBot && (\n <span className=\"text-[9px] text-accent\">admin override</span>\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n {effectiveBot ? (\n <>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">{effectiveBot}</span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <span className=\"text-xs text-text-primary\">\n {user?.displayName || user?.username || 'you'}\n </span>\n </>\n )}\n </div>\n {showOverride && onOverrideChange && (\n <div className=\"pt-1 border-t border-surface-border\">\n <label className=\"text-[10px] text-text-tertiary mb-1 block\">Override identity</label>\n <BotPicker\n selected={overrideBot ?? ''}\n onChange={onOverrideChange}\n placeholder={config.execute_as ? `Default: ${config.execute_as}` : 'Invoking user (default)'}\n />\n </div>\n )}\n </div>\n );\n}\n","import { Link } from 'react-router-dom';\nimport type { LTWorkflowConfig } from '../../../api/types';\n\ninterface DataField {\n key: string;\n type: string;\n defaultValue: unknown;\n}\n\nexport function EnvelopeEditor({\n selectedConfig,\n isJsonMode,\n hasFormView,\n jsonInput,\n formFields,\n dataFields,\n onJsonChange,\n onToggleMode,\n onUpdateFormField,\n onSetFormFields,\n}: {\n selectedConfig: LTWorkflowConfig;\n isJsonMode: boolean;\n hasFormView: boolean;\n jsonInput: string;\n formFields: Record<string, unknown>;\n dataFields: DataField[];\n onJsonChange: (value: string) => void;\n onToggleMode: () => void;\n onUpdateFormField: (key: string, value: unknown, type: string) => void;\n onSetFormFields: (fields: Record<string, unknown>) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <label className=\"block text-xs text-text-secondary\">\n Envelope\n </label>\n <div className=\"flex items-center gap-3\">\n {hasFormView && (\n <button\n type=\"button\"\n onClick={onToggleMode}\n className=\"text-[10px] text-accent hover:underline\"\n >\n {isJsonMode ? 'Form view' : 'JSON view'}\n </button>\n )}\n {selectedConfig.envelope_schema ? (\n <span className=\"text-[10px] text-accent\">\n Pre-filled from workflow config\n </span>\n ) : (\n <span className=\"text-[10px] text-status-warning\">\n No template\n </span>\n )}\n </div>\n </div>\n\n {!selectedConfig.envelope_schema && (\n <div className=\"bg-surface-sunken border border-surface-border rounded px-4 py-3 mb-3\">\n <p className=\"text-xs text-text-secondary leading-relaxed\">\n This workflow has no input template. Edit the JSON directly below, or register it as a <Link to=\"/workflows/registry/new\" className=\"text-status-success hover:underline\">certified workflow</Link> in the Workflow Registry for pre-filled fields and form-based input.\n </p>\n </div>\n )}\n\n {isJsonMode || !hasFormView ? (\n /* JSON view */\n <textarea\n value={jsonInput}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input font-mono text-xs\"\n rows={12}\n spellCheck={false}\n />\n ) : (\n /* Form view */\n <div className=\"space-y-3\">\n {dataFields.map(({ key, type }) => {\n const value = formFields[key];\n const jsonValue =\n typeof value === 'string'\n ? value\n : JSON.stringify(\n value ?? (type === 'array' ? [] : {}),\n null,\n 2,\n );\n const textareaRows = Math.min(\n 20,\n Math.max(4, (jsonValue?.split?.('\\n')?.length ?? 4)),\n );\n return (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {key}\n <span className=\"ml-2 font-normal normal-case\">\n {type}\n </span>\n </label>\n {type === 'boolean' ? (\n <select\n value={String(value ?? false)}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"select text-xs w-full\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : type === 'object' || type === 'array' ? (\n <textarea\n value={jsonValue}\n onChange={(e) => {\n try {\n onUpdateFormField(\n key,\n JSON.parse(e.target.value),\n type,\n );\n } catch {\n // Keep raw text without syncing to JSON\n onSetFormFields({\n ...formFields,\n [key]: e.target.value,\n });\n }\n }}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={textareaRows}\n spellCheck={false}\n />\n ) : (\n <input\n type={type === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) =>\n onUpdateFormField(key, e.target.value, type)\n }\n className=\"input text-xs w-full\"\n />\n )}\n </div>\n );\n })}\n </div>\n )}\n <p className=\"text-[10px] text-text-tertiary mt-1.5\">\n The envelope wraps your workflow input. <code className=\"text-accent/80\">data</code> holds workflow-specific fields; <code className=\"text-accent/80\">metadata</code> is optional context.\n </p>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useInvokeWorkflow } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { useAuth } from '../../../hooks/useAuth';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport {\n DEFAULT_ENVELOPE,\n extractDataFields,\n dataToFields,\n fieldsToJson,\n} from './helpers';\nimport { IdentitySummary } from './IdentitySummary';\nimport { EnvelopeEditor } from './EnvelopeEditor';\n\nexport function StartNowPanel({ selected, executionsPath }: { selected: LTWorkflowConfig; executionsPath: string }) {\n const navigate = useNavigate();\n const { isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n const invokeMutation = useInvokeWorkflow();\n const [jsonInput, setJsonInput] = useState(DEFAULT_ENVELOPE);\n const [parseError, setParseError] = useState('');\n const [formFields, setFormFields] = useState<Record<string, unknown>>({});\n const [isJsonMode, setIsJsonMode] = useState(false);\n const [overrideBot, setOverrideBot] = useState('');\n\n const dataFields = useMemo(\n () => extractDataFields(selected.envelope_schema ?? null),\n [selected.envelope_schema],\n );\n const hasFormView = dataFields.length > 0;\n\n const schemaMetadata = useMemo(() => {\n if (!selected.envelope_schema) return {};\n const md = selected.envelope_schema.metadata;\n return md && typeof md === 'object' ? (md as Record<string, unknown>) : {};\n }, [selected.envelope_schema]);\n\n useEffect(() => {\n setParseError('');\n invokeMutation.reset();\n\n const prefill = sessionStorage.getItem('lt:invoke:prefill');\n if (prefill) {\n sessionStorage.removeItem('lt:invoke:prefill');\n setJsonInput(prefill);\n try {\n const parsed = JSON.parse(prefill);\n const data = parsed?.data ?? parsed;\n if (data && typeof data === 'object') setFormFields(dataToFields(data));\n } catch { /* use as-is */ }\n setIsJsonMode(true);\n setOverrideBot('');\n return;\n }\n\n const json = selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE;\n setJsonInput(json);\n if (selected.envelope_schema?.data && typeof selected.envelope_schema.data === 'object') {\n setFormFields(dataToFields(selected.envelope_schema.data as Record<string, unknown>));\n } else {\n setFormFields({});\n }\n setIsJsonMode(!extractDataFields(selected.envelope_schema ?? null).length);\n setOverrideBot('');\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleToggleMode = () => {\n if (isJsonMode) {\n try {\n const parsed = JSON.parse(jsonInput);\n if (parsed.data && typeof parsed.data === 'object') setFormFields(dataToFields(parsed.data));\n } catch { /* keep existing */ }\n } else {\n setJsonInput(fieldsToJson(formFields, schemaMetadata));\n }\n setIsJsonMode(!isJsonMode);\n };\n\n const updateFormField = (key: string, value: unknown, type: string) => {\n let parsed = value;\n if (type === 'number') parsed = value === '' ? 0 : Number(value);\n else if (type === 'boolean') parsed = value === 'true' || value === true;\n const updated = { ...formFields, [key]: parsed };\n setFormFields(updated);\n setJsonInput(fieldsToJson(updated, schemaMetadata));\n };\n\n const handleInvoke = async () => {\n setParseError('');\n let envelope: Record<string, unknown>;\n try {\n envelope = JSON.parse(jsonInput);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n const { data, metadata } = envelope;\n if (!data || typeof data !== 'object') {\n setParseError('Envelope must include a \"data\" object');\n return;\n }\n try {\n await invokeMutation.mutateAsync({\n workflowType: selected.workflow_type,\n data: data as Record<string, unknown>,\n metadata: (metadata as Record<string, unknown>) ?? undefined,\n ...(overrideBot ? { execute_as: overrideBot } : {}),\n });\n navigate(executionsPath);\n } catch { /* error via mutation */ }\n };\n\n return (\n <div className=\"space-y-6\">\n <div>\n <div className=\"flex items-center justify-between\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n <div className=\"flex gap-2\">\n {selected.roles.map((r) => (\n <Pill key={r}>{r}</Pill>\n ))}\n </div>\n </div>\n {selected.description && (\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n <IdentitySummary\n config={selected}\n overrideBot={overrideBot}\n onOverrideChange={setOverrideBot}\n showOverride={isAdmin}\n />\n\n <EnvelopeEditor\n selectedConfig={selected}\n isJsonMode={isJsonMode}\n hasFormView={hasFormView}\n jsonInput={jsonInput}\n formFields={formFields}\n dataFields={dataFields}\n onJsonChange={(v) => { setJsonInput(v); setParseError(''); }}\n onToggleMode={handleToggleMode}\n onUpdateFormField={updateFormField}\n onSetFormFields={setFormFields}\n />\n\n {parseError && <p className=\"text-xs text-status-error\">{parseError}</p>}\n {invokeMutation.error && <p className=\"text-xs text-status-error\">{invokeMutation.error.message}</p>}\n {invokeMutation.isSuccess && <p className=\"text-xs text-status-success\">Workflow started</p>}\n\n <button onClick={handleInvoke} disabled={invokeMutation.isPending} className=\"btn-primary\">\n {invokeMutation.isPending ? 'Starting...' : 'Start Workflow'}\n </button>\n </div>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Bot } from 'lucide-react';\nimport { useSetCronSchedule, useJobs } from '../../../api/workflows';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { Pill } from '../../../components/common/display/Pill';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport type { LTWorkflowConfig } from '../../../api/types';\nimport { DEFAULT_ENVELOPE } from './helpers';\nimport { describeCron, COMMON_PATTERNS, extractFormFields, jobColumns } from '../cron/helpers';\n\nexport function SchedulePanel({\n selected,\n activeTypes,\n}: {\n selected: LTWorkflowConfig;\n activeTypes: Set<string>;\n}) {\n const navigate = useNavigate();\n const setCron = useSetCronSchedule();\n\n const [cronInput, setCronInput] = useState('');\n const [envelopeInput, setEnvelopeInput] = useState('');\n const [envelopeError, setEnvelopeError] = useState('');\n const [viewMode, setViewMode] = useState<'json' | 'form'>('json');\n\n const defaultEnvelope = useMemo(() => {\n if (!selected?.envelope_schema) return DEFAULT_ENVELOPE;\n return JSON.stringify(selected.envelope_schema, null, 2);\n }, [selected?.envelope_schema]);\n\n const isEnvelopeModified = envelopeInput !== defaultEnvelope;\n\n const parsedEnvelope = useMemo(() => {\n try {\n return JSON.parse(envelopeInput) as Record<string, unknown>;\n } catch {\n return null;\n }\n }, [envelopeInput]);\n\n const formFields = useMemo(\n () => (parsedEnvelope ? extractFormFields(parsedEnvelope) : null),\n [parsedEnvelope],\n );\n\n useEffect(() => {\n setCronInput(selected.cron_schedule ?? '');\n setEnvelopeInput(\n selected.envelope_schema\n ? JSON.stringify(selected.envelope_schema, null, 2)\n : DEFAULT_ENVELOPE,\n );\n setEnvelopeError('');\n setViewMode('json');\n setCron.reset();\n }, [selected.workflow_type]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: jobsData, isLoading: jobsLoading } = useJobs({\n entity: selected.workflow_type,\n limit: 10,\n });\n\n const handleSave = () => {\n let envelopeSchema: Record<string, unknown> | undefined;\n try {\n envelopeSchema = JSON.parse(envelopeInput);\n } catch {\n setEnvelopeError('Invalid JSON in envelope');\n return;\n }\n setEnvelopeError('');\n setCron.mutate({\n config: selected,\n cron_schedule: cronInput.trim() || null,\n envelope_schema: envelopeSchema,\n });\n };\n\n const handleClear = () => {\n setCronInput('');\n setCron.mutate({ config: selected, cron_schedule: null });\n };\n\n const handleResetEnvelope = () => {\n setEnvelopeInput(defaultEnvelope);\n setEnvelopeError('');\n };\n\n const handleFormFieldChange = (key: string, value: string) => {\n if (!parsedEnvelope) return;\n const data = { ...((parsedEnvelope.data as Record<string, unknown>) ?? {}) };\n const original = data[key];\n if (typeof original === 'number') data[key] = value === '' ? 0 : Number(value);\n else if (typeof original === 'boolean') data[key] = value === 'true';\n else data[key] = value;\n setEnvelopeInput(JSON.stringify({ ...parsedEnvelope, data }, null, 2));\n };\n\n return (\n <div className=\"space-y-8\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-3\">\n <SectionLabel>{selected.workflow_type}</SectionLabel>\n {selected.cron_schedule && (\n <Pill className={activeTypes.has(selected.workflow_type)\n ? 'bg-status-success/10 text-status-success'\n : 'bg-surface-sunken text-text-tertiary'\n }>\n {activeTypes.has(selected.workflow_type) ? 'active' : 'inactive'}\n </Pill>\n )}\n </div>\n {selected.description && (\n <p className=\"text-xs text-text-tertiary mt-2 leading-relaxed\">\n {selected.description}\n </p>\n )}\n </div>\n\n {/* Cron execution identity */}\n <div className=\"bg-surface-sunken rounded-lg px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider font-medium mr-2\">Cron runs as</span>\n <Bot className=\"w-3.5 h-3.5 text-accent/70\" />\n <span className=\"text-xs text-text-primary font-mono\">\n {selected.execute_as ?? 'lt-system'}\n </span>\n {!selected.execute_as && (\n <span className=\"text-[9px] text-text-tertiary ml-1\">system bot</span>\n )}\n </div>\n </div>\n\n {/* Cron editor */}\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => { setCronInput(e.target.value); setCron.reset(); }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button onClick={handleSave} disabled={setCron.isPending} className=\"btn-primary text-xs shrink-0\">\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {selected.cron_schedule && (\n <button onClick={handleClear} disabled={setCron.isPending} className=\"btn-ghost text-xs text-status-error shrink-0\">\n Clear\n </button>\n )}\n </div>\n {setCron.isSuccess && <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>}\n {setCron.error && <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => { setCronInput(expr); setCron.reset(); }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">{expr}</code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* Cron Envelope editor */}\n <div>\n <div className=\"flex items-baseline justify-between mb-2\">\n <SectionLabel>Cron Envelope</SectionLabel>\n <div className=\"flex items-center gap-3\">\n {isEnvelopeModified && (\n <button type=\"button\" onClick={handleResetEnvelope} className=\"text-[10px] text-status-warning hover:text-status-warning/80 transition-colors\">\n Reset to default\n </button>\n )}\n {formFields && (\n <div className=\"flex rounded overflow-hidden border border-surface-border\">\n <button type=\"button\" onClick={() => setViewMode('form')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'form' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>Form</button>\n <button type=\"button\" onClick={() => setViewMode('json')} className={`px-2 py-0.5 text-[10px] transition-colors ${viewMode === 'json' ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-secondary'}`}>JSON</button>\n </div>\n )}\n </div>\n </div>\n <p className=\"text-[10px] text-text-tertiary mb-3\">\n This envelope is sent as the workflow input on each cron invocation.\n </p>\n\n {viewMode === 'form' && formFields ? (\n <div className=\"space-y-3\">\n {formFields.map(({ key, value, type }) => (\n <div key={key}>\n <label className=\"block text-[11px] text-text-secondary mb-1 font-mono\">{key}</label>\n {type === 'boolean' ? (\n <select value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs w-full\">\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input type={type === 'number' ? 'number' : 'text'} value={value} onChange={(e) => handleFormFieldChange(key, e.target.value)} className=\"input text-xs font-mono w-full\" />\n )}\n </div>\n ))}\n </div>\n ) : (\n <textarea\n value={envelopeInput}\n onChange={(e) => { setEnvelopeInput(e.target.value); setEnvelopeError(''); }}\n className=\"input font-mono text-xs w-full\"\n rows={10}\n spellCheck={false}\n />\n )}\n\n {envelopeError && <p className=\"text-[10px] text-status-error mt-2\">{envelopeError}</p>}\n {isEnvelopeModified && <p className=\"text-[10px] text-accent mt-1.5\">Envelope has been customized. Changes will be saved with the schedule.</p>}\n </div>\n\n {/* Recent executions */}\n <div>\n <SectionLabel className=\"mb-3\">Recent Executions</SectionLabel>\n <DataTable\n columns={jobColumns}\n data={jobsData?.jobs ?? []}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/workflows/executions/${row.workflow_id}`)}\n isLoading={jobsLoading}\n emptyMessage=\"No executions yet\"\n />\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useWorkflowConfigs, useDiscoveredWorkflows, useCronStatus } from '../../../api/workflows';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { LTWorkflowConfig, WorkflowTier } from '../../../api/types';\nimport { ModeToggle } from './ModeToggle';\nimport type { Mode } from './ModeToggle';\nimport { WorkflowSelector } from './WorkflowSelector';\nimport { StartNowPanel } from './StartNowPanel';\nimport { SchedulePanel } from './SchedulePanel';\n\nexport function StartWorkflowPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: configsData, isLoading } = useWorkflowConfigs();\n const { data: discoveredData, isLoading: discoveredLoading } = useDiscoveredWorkflows();\n const { data: cronEntries } = useCronStatus();\n\n const mode = (searchParams.get('mode') as Mode) || 'now';\n const selectedType = searchParams.get('type') ?? '';\n\n const configs: LTWorkflowConfig[] = configsData ?? [];\n\n const tierMap = useMemo(() => {\n const map = new Map<string, WorkflowTier>();\n for (const dw of discoveredData ?? []) {\n map.set(dw.workflow_type, dw.tier ?? 'durable');\n }\n return map;\n }, [discoveredData]);\n\n const invocableConfigs = useMemo(() => {\n const certified = configs.filter((c) => c.invocable);\n const registeredTypes = new Set(configs.map((c) => c.workflow_type));\n const discovered = discoveredData ?? [];\n const durable = discovered\n .filter((dw) => dw.active && !registeredTypes.has(dw.workflow_type))\n .map((dw) => ({\n workflow_type: dw.workflow_type,\n task_queue: dw.task_queue ?? '',\n invocable: true,\n description: null,\n default_role: 'reviewer',\n roles: [],\n invocation_roles: [],\n consumes: [],\n envelope_schema: null,\n resolver_schema: null,\n cron_schedule: null,\n execute_as: null,\n } satisfies LTWorkflowConfig));\n return [...certified, ...durable];\n }, [configs, discoveredData]);\n\n const selectedConfig = invocableConfigs.find((c) => c.workflow_type === selectedType);\n\n const activeTypes = new Set(\n (cronEntries ?? []).filter((e) => e.active).map((e) => e.workflow_type),\n );\n\n const executionsPath = '/workflows/executions';\n\n useEffect(() => {\n if (invocableConfigs.length === 1 && !searchParams.get('type')) {\n setSearchParams({ type: invocableConfigs[0].workflow_type, mode }, { replace: true });\n }\n }, [invocableConfigs.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setMode = (m: Mode) => {\n const params: Record<string, string> = { mode: m };\n if (selectedType) params.type = selectedType;\n setSearchParams(params, { replace: true });\n };\n\n const handleSelect = (config: LTWorkflowConfig) => {\n setSearchParams({ type: config.workflow_type, mode }, { replace: true });\n };\n\n if (isLoading || discoveredLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"Invoke Workflow\"\n actions={<ModeToggle mode={mode} onChange={setMode} />}\n />\n\n {invocableConfigs.length === 0 ? (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-primary mb-1\">No invocable workflows</p>\n <p className=\"text-xs text-text-tertiary\">Mark workflows as invocable in the registry, or start the server with examples enabled.</p>\n </div>\n ) : (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-12\">\n <WorkflowSelector\n configs={invocableConfigs}\n selectedType={selectedType}\n onSelect={handleSelect}\n tierMap={tierMap}\n />\n\n <div className=\"lg:col-span-2\">\n {selectedType && selectedConfig ? (\n mode === 'now' ? (\n <StartNowPanel selected={selectedConfig} executionsPath={executionsPath} />\n ) : (\n <SchedulePanel selected={selectedConfig} activeTypes={activeTypes} />\n )\n ) : (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n Select a workflow to begin\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { StartWorkflowPage } from './StartWorkflowPage';\n\nexport function DurableInvokePage() {\n return <StartWorkflowPage />;\n}\n"],"names":["ModeToggle","mode","onChange","btn","m","icon","label","jsxDEV","Play","Clock","WorkflowSelector","configs","selectedType","onSelect","tierMap","SectionLabel","config","isSelected","tier","ShieldCheck","Settings","Workflow","Bot","Pill","children","className","DEFAULT_ENVELOPE","inferTypeFromValue","value","extractDataFields","schema","data","key","dataToFields","fieldsToJson","fields","metadata","IdentitySummary","overrideBot","onOverrideChange","showOverride","user","useAuth","effectiveBot","Fragment","UserCircle","BotPicker","EnvelopeEditor","selectedConfig","isJsonMode","hasFormView","jsonInput","formFields","dataFields","onJsonChange","onToggleMode","onUpdateFormField","onSetFormFields","Link","e","type","jsonValue","textareaRows","_b","_a","StartNowPanel","selected","executionsPath","navigate","useNavigate","isSuperAdmin","hasRoleType","isAdmin","invokeMutation","useInvokeWorkflow","setJsonInput","useState","parseError","setParseError","setFormFields","setIsJsonMode","setOverrideBot","useMemo","schemaMetadata","md","useEffect","prefill","parsed","json","handleToggleMode","updateFormField","updated","handleInvoke","envelope","r","v","SchedulePanel","activeTypes","setCron","useSetCronSchedule","cronInput","setCronInput","envelopeInput","setEnvelopeInput","envelopeError","setEnvelopeError","viewMode","setViewMode","defaultEnvelope","isEnvelopeModified","parsedEnvelope","extractFormFields","jobsData","jobsLoading","useJobs","handleSave","envelopeSchema","handleClear","handleResetEnvelope","handleFormFieldChange","original","describeCron","COMMON_PATTERNS","expr","desc","DataTable","jobColumns","row","StartWorkflowPage","searchParams","setSearchParams","useSearchParams","configsData","isLoading","useWorkflowConfigs","discoveredData","discoveredLoading","useDiscoveredWorkflows","cronEntries","useCronStatus","map","dw","invocableConfigs","certified","c","registeredTypes","durable","setMode","params","handleSelect","PageHeader","DurableInvokePage"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{b as D,j as e}from"./index-Cmgrk7PQ.js";import{u as C,c as T,a as u}from"./vendor-query-DLp59M9_.js";import{P as _}from"./PageHeader-Cm5HBQF_.js";import{F as z,a as O}from"./FilterBar-C5r3n6YO.js";import{E as I}from"./EmptyState-C7KIMIbE.js";import{T as S}from"./TimeAgo-DgfDZ1pl.js";import{F as R,i as q,X as k,an as G,_ as A,M as K,ao as X,N as H,O as J,ap as Q,aq as Y,j as $,ar as Z,as as ee,at as se,au as ae,av as ie}from"./vendor-icons-AFGxSeQS.js";import{f as re}from"./vendor-react-Co3Y8ikm.js";function le(s,r=100,i){const l=new URLSearchParams;s&&l.set("prefix",s),l.set("pageSize",String(r));const t=l.toString();return C({queryKey:["fileBrowse",s,r,i],queryFn:()=>D(`/file-browser/browse?${t}`)})}function te(s){return C({queryKey:["fileMetadata",s],queryFn:()=>D(`/file-browser/metadata/${s}`),enabled:!!s})}function ne(){return T({mutationFn:s=>D("/file-browser/signed-url",{method:"POST",body:JSON.stringify(s)})})}function B(s){return`/api/files/${s.replace(/^\/+/,"")}`}function oe({prefix:s,onNavigate:r}){const i=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 ${i.length===0?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(R,{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),i.map((l,t)=>{const a=t===i.length-1,o=i.slice(0,t+1).join("/")+"/";return e.jsxDEV("span",{className:"flex items-center gap-1",children:[e.jsxDEV(q,{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(o),className:`px-1.5 py-0.5 rounded transition-colors ${a?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:31,columnNumber:13},this)]},o,!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)}const me=[{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 ce(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 P(s){return s.split("/").pop()||s}async function de(s,r){const l=await(await fetch(s)).blob(),t=URL.createObjectURL(l),a=document.createElement("a");a.href=t,a.download=r,a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(t)}function ue({filePath:s,onClose:r}){var f,y;const{data:i,isLoading:l}=te(s),t=ne(),[a,o]=u.useState(null),[p,g]=u.useState(!1),[h,x]=u.useState(!1),c=B(s),b=(f=i==null?void 0:i.content_type)==null?void 0:f.startsWith("image/"),d=((y=i==null?void 0:i.content_type)==null?void 0:y.startsWith("text/"))||(i==null?void 0:i.content_type)==="application/json",v=(i==null?void 0:i.content_type)==="application/pdf";async function F(n,N){await navigator.clipboard.writeText(n),o(N),setTimeout(()=>o(null),2e3)}async function j(){try{const n=await t.mutateAsync({path:s,expiresIn:3600}),N=n.url.startsWith("http")?n.url:`${window.location.origin}${n.url}`;de(N,P(s))}catch{}}async function m(n){g(!1);try{const N=await t.mutateAsync({path:s,expiresIn:n}),W=N.url.startsWith("http")?N.url:`${window.location.origin}${N.url}`;window.open(W,"_blank","noopener,noreferrer")}catch{}}return e.jsxDEV(e.Fragment,{children:[h&&b&&e.jsxDEV("div",{className:"fixed inset-0 z-50 bg-black/90 flex items-center justify-center cursor-pointer",onClick:()=>x(!1),children:[e.jsxDEV("button",{className:"absolute top-4 right-4 text-white/70 hover:text-white",onClick:()=>x(!1),children:e.jsxDEV(k,{className:"w-6 h-6"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:109,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:105,columnNumber:11},this),e.jsxDEV("img",{src:c,alt:P(s),className:"max-w-[90vw] max-h-[90vh] object-contain"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:111,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:101,columnNumber:9},this),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:P(s),children:P(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:124,columnNumber:13},this),e.jsxDEV("button",{onClick:r,className:"text-text-tertiary hover:text-text-primary shrink-0",children:e.jsxDEV(k,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:128,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:127,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:123,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-1 flex-wrap",children:[e.jsxDEV("button",{onClick:j,className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Download",children:[e.jsxDEV(G,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:139,columnNumber:15},this),e.jsxDEV("span",{children:"Download"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:140,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:134,columnNumber:13},this),e.jsxDEV("a",{href:c,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(A,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:150,columnNumber:15},this),e.jsxDEV("span",{children:"Open"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:151,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:143,columnNumber:13},this),b&&e.jsxDEV("button",{onClick:()=>x(!0),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Fullscreen",children:[e.jsxDEV(K,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:160,columnNumber:17},this),e.jsxDEV("span",{children:"Full"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:161,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:155,columnNumber:15},this),e.jsxDEV("div",{className:"relative",children:[e.jsxDEV("button",{onClick:()=>g(n=>!n),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Share with signed URL",children:[e.jsxDEV(X,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:171,columnNumber:17},this),e.jsxDEV("span",{children:"Share"},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:166,columnNumber:15},this),p&&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:me.map(n=>e.jsxDEV("button",{onClick:()=>m(n.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:n.label},n.value,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:177,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:175,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:165,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:133,columnNumber:11},this),t.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:t.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:190,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:122,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:198,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:199,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:197,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[b&&e.jsxDEV("div",{className:"mb-5",children:e.jsxDEV("img",{src:c,alt:P(s),className:"w-full rounded-md bg-surface-sunken object-contain max-h-[400px] cursor-pointer",onClick:()=>x(!0)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:206,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:205,columnNumber:17},this),d&&e.jsxDEV("div",{className:"mb-5",children:e.jsxDEV(pe,{url:c},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:218,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:217,columnNumber:17},this),v&&e.jsxDEV("div",{className:"mb-5 p-4 bg-surface-sunken rounded-md text-center",children:e.jsxDEV("a",{href:c,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:225,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:224,columnNumber:17},this),i&&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/FilePreviewPanel.tsx",lineNumber:240,columnNumber:21},this),e.jsxDEV("dd",{onClick:()=>F(i.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:i.path},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:246,columnNumber:23},this),a==="path"?e.jsxDEV(H,{className:"w-3.5 h-3.5 text-status-success shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:248,columnNumber:27},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/FilePreviewPanel.tsx",lineNumber:249,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:241,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:239,columnNumber:19},this),e.jsxDEV(E,{label:"Type",value:i.content_type},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:252,columnNumber:19},this),e.jsxDEV(E,{label:"Size",value:ce(i.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:253,columnNumber:19},this),e.jsxDEV(E,{label:"Modified",children:e.jsxDEV(S,{date:i.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:255,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:254,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:238,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:202,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:195,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:98,columnNumber:5},this)}function E({label:s,value:r,mono:i,children:l}){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/FilePreviewPanel.tsx",lineNumber:275,columnNumber:7},this),e.jsxDEV("dd",{className:`text-sm text-text-secondary ${i?"font-mono text-xs break-all":""}`,children:l||r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:276,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:274,columnNumber:5},this)}function pe({url:s}){const[r,i]=u.useState(null),[l,t]=u.useState(!1);return r===null&&!l&&fetch(s).then(a=>{if(!a.ok)throw new Error;return a.text()}).then(a=>i(a.slice(0,1e5))).catch(()=>t(!0)),l?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Could not load preview"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:297,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/FilePreviewPanel.tsx",lineNumber:299,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/FilePreviewPanel.tsx",lineNumber:303,columnNumber:5},this)}function L(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 M(s){var i;const r=((i=s.split(".").pop())==null?void 0:i.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].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/FilesPage.tsx",lineNumber:31,columnNumber:12},this):["json"].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/FilesPage.tsx",lineNumber:34,columnNumber:12},this):["csv","xlsx","xls"].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/FilesPage.tsx",lineNumber:37,columnNumber:12},this):["txt","md","html","xml","yaml","yml","css","js","ts"].includes(r)?e.jsxDEV(ae,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:40,columnNumber:12},this):e.jsxDEV(ie,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:42,columnNumber:10},this)}function U(s){var i;const r=((i=s.split(".").pop())==null?void 0:i.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)}function V(s){const r=s.replace(/\/+$/,"");return r.split("/").pop()||r}function w(s){return s.split("/").pop()||s}function je(){const[s,r]=re(),i=s.get("prefix")||"",[l,t]=u.useState(""),[a,o]=u.useState(null),[p,g]=u.useState("list"),{data:h,isLoading:x}=le(i),c=(h==null?void 0:h.directories)??[],b=(h==null?void 0:h.files)??[],d=u.useMemo(()=>{if(!l)return{directories:c,files:b};const m=l.toLowerCase();return{directories:c.filter(f=>V(f).toLowerCase().includes(m)),files:b.filter(f=>w(f.path).toLowerCase().includes(m))}},[c,b,l]);function v(m){t(""),o(null),r(m?{prefix:m}:{})}const F=d.files.some(m=>U(m.path)),j=d.directories.length===0&&d.files.length===0;return e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:"flex-1 min-w-0 overflow-hidden",children:[e.jsxDEV(_,{title:"Files",actions:F?e.jsxDEV("div",{className:"flex items-center border border-surface-border rounded-md overflow-hidden",children:[e.jsxDEV("button",{onClick:()=>g("list"),className:`p-2 transition-colors ${p==="list"?"bg-surface-hover text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,title:"List view",children:e.jsxDEV(Q,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:107,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:102,columnNumber:17},this),e.jsxDEV("button",{onClick:()=>g("grid"),className:`p-2 transition-colors ${p==="grid"?"bg-surface-hover text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,title:"Grid view",children:e.jsxDEV(Y,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:114,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:109,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:101,columnNumber:15},this):void 0},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:97,columnNumber:9},this),e.jsxDEV(oe,{prefix:i,onNavigate:v},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:121,columnNumber:9},this),e.jsxDEV(z,{children:e.jsxDEV(O,{label:"Search",value:l,onChange:t,placeholder:"Filter by name..."},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:124,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:123,columnNumber:9},this),x?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((m,f)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},f,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:135,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:133,columnNumber:11},this):j?e.jsxDEV(I,{title:l?"No matching files":"This directory is empty"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:139,columnNumber:11},this):p==="grid"?e.jsxDEV(fe,{directories:d.directories,files:d.files,onNavigate:v,onSelect:o,selectedFile:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:141,columnNumber:11},this):e.jsxDEV(he,{directories:d.directories,files:d.files,onNavigate:v,onSelect:o,selectedFile:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:149,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:96,columnNumber:7},this),a&&e.jsxDEV(ue,{filePath:a,onClose:()=>o(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:161,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:94,columnNumber:5},this)}function he({directories:s,files:r,onNavigate:i,onSelect:l,selectedFile:t}){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/FilesPage.tsx",lineNumber:187,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/FilesPage.tsx",lineNumber:188,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/FilesPage.tsx",lineNumber:189,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:186,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:185,columnNumber:7},this),e.jsxDEV("tbody",{children:[s.map(a=>e.jsxDEV("tr",{onClick:()=>i(a),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($,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:201,columnNumber:17},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:V(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:202,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:200,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:199,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/FilesPage.tsx",lineNumber:207,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/FilesPage.tsx",lineNumber:208,columnNumber:13},this)]},a,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:194,columnNumber:11},this)),r.map(a=>e.jsxDEV("tr",{onClick:()=>l(a.path),className:`row-hover cursor-pointer group ${t===a.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:[M(a.path),e.jsxDEV("span",{className:"text-sm text-text-primary truncate",children:w(a.path)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:222,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:220,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:219,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:L(a.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:227,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(S,{date:a.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:231,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:230,columnNumber:13},this)]},a.path,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:212,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:192,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:184,columnNumber:5},this)}function fe({directories:s,files:r,onNavigate:i,onSelect:l,selectedFile:t}){return e.jsxDEV("div",{className:"mt-4",children:[s.length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-2 mb-6",children:s.map(a=>e.jsxDEV("button",{onClick:()=>i(a),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",children:[e.jsxDEV($,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:264,columnNumber:15},this),e.jsxDEV("span",{children:V(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:265,columnNumber:15},this)]},a,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:259,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:257,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3",children:r.map(a=>{var p;const o=U(a.path);return e.jsxDEV("button",{onClick:()=>l(a.path),className:`group text-left rounded-lg overflow-hidden transition-all ${t===a.path?"ring-2 ring-accent/40 bg-surface-hover":"hover:bg-surface-hover"}`,children:[e.jsxDEV("div",{className:"aspect-square bg-surface-sunken flex items-center justify-center overflow-hidden",children:o?e.jsxDEV("img",{src:B(a.path),alt:w(a.path),loading:"lazy",className:"w-full h-full object-cover"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:287,columnNumber:19},this):e.jsxDEV("div",{className:"flex flex-col items-center gap-2 text-text-tertiary",children:[M(a.path),e.jsxDEV("span",{className:"text-[10px] uppercase tracking-wider",children:(p=a.path.split(".").pop())==null?void 0:p.toUpperCase()},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:296,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:294,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:285,columnNumber:15},this),e.jsxDEV("div",{className:"px-2 py-1.5",children:[e.jsxDEV("p",{className:"text-xs text-text-primary truncate",title:w(a.path),children:w(a.path)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:303,columnNumber:17},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary tabular-nums",children:L(a.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:306,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:302,columnNumber:15},this)]},a.path,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:276,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:272,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:254,columnNumber:5},this)}export{je as FilesPage};
2
+ //# sourceMappingURL=index-C1E5GTs9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C1E5GTs9.js","sources":["../../src/api/files.ts","../../src/pages/files/FileBreadcrumbs.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 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 {\n X,\n Download,\n Copy,\n ExternalLink,\n Link,\n Maximize2,\n Check,\n} from 'lucide-react';\nimport { useFileMetadata, getFilePreviewUrl, useGenerateSignedUrl } from '../../api/files';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\n\ninterface FilePreviewPanelProps {\n filePath: string;\n onClose: () => 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\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\nfunction fileName(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nasync function triggerDownload(url: string, name: string) {\n // Fetch as blob so the download attribute works cross-origin\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\nexport function FilePreviewPanel({ filePath, onClose }: FilePreviewPanelProps) {\n const { data: metadata, isLoading } = useFileMetadata(filePath);\n const signedUrlMutation = useGenerateSignedUrl();\n const [copied, setCopied] = useState<string | null>(null);\n const [showShareMenu, setShowShareMenu] = useState(false);\n const [fullscreen, setFullscreen] = useState(false);\n\n const previewUrl = getFilePreviewUrl(filePath);\n const isImage = metadata?.content_type?.startsWith('image/');\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 copyToClipboard(text: string, label: string) {\n await navigator.clipboard.writeText(text);\n setCopied(label);\n setTimeout(() => setCopied(null), 2000);\n }\n\n async function handleDownload() {\n try {\n // Short-lived signed URL for the download\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 window.open(fullUrl, '_blank', 'noopener,noreferrer');\n } catch {\n // handled by mutation state\n }\n }\n\n return (\n <>\n {/* Fullscreen overlay for images */}\n {fullscreen && isImage && (\n <div\n className=\"fixed inset-0 z-50 bg-black/90 flex items-center justify-center cursor-pointer\"\n onClick={() => setFullscreen(false)}\n >\n <button\n className=\"absolute top-4 right-4 text-white/70 hover:text-white\"\n onClick={() => setFullscreen(false)}\n >\n <X className=\"w-6 h-6\" />\n </button>\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"max-w-[90vw] max-h-[90vh] object-contain\"\n />\n </div>\n )}\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 {isImage && (\n <button\n onClick={() => setFullscreen(true)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Fullscreen\"\n >\n <Maximize2 className=\"w-3.5 h-3.5\" />\n <span>Full</span>\n </button>\n )}\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 <Link className=\"w-3.5 h-3.5\" />\n <span>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 </div>\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 {/* Image preview */}\n {isImage && (\n <div className=\"mb-5\">\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"w-full rounded-md bg-surface-sunken object-contain max-h-[400px] cursor-pointer\"\n onClick={() => setFullscreen(true)}\n />\n </div>\n )}\n\n {/* Text preview */}\n {isText && (\n <div className=\"mb-5\">\n <TextPreview url={previewUrl} />\n </div>\n )}\n\n {/* PDF link */}\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 {metadata && (\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 )}\n </div>\n </div>\n </>\n );\n}\n\nfunction 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\nfunction 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","import { useState, useMemo } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n Folder,\n File,\n Image,\n FileText,\n FileJson2,\n FileSpreadsheet,\n LayoutGrid,\n LayoutList,\n} from 'lucide-react';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { useFileBrowse, getFilePreviewUrl } from '../../api/files';\nimport { FileBreadcrumbs } from './FileBreadcrumbs';\nimport { FilePreviewPanel } from './FilePreviewPanel';\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\nfunction 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\nfunction isImagePath(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n return ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext);\n}\n\nfunction dirName(dirPath: string): string {\n const stripped = dirPath.replace(/\\/+$/, '');\n return stripped.split('/').pop() || stripped;\n}\n\nfunction fileNameFromPath(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nexport function FilesPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const prefix = searchParams.get('prefix') || '';\n const [search, setSearch] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [viewMode, setViewMode] = useState<'list' | 'grid'>('list');\n\n const { data, isLoading } = useFileBrowse(prefix);\n\n const directories = data?.directories ?? [];\n const files = data?.files ?? [];\n\n const filtered = useMemo(() => {\n if (!search) return { directories, files };\n const q = search.toLowerCase();\n return {\n directories: directories.filter((d) => dirName(d).toLowerCase().includes(q)),\n files: files.filter((f) => fileNameFromPath(f.path).toLowerCase().includes(q)),\n };\n }, [directories, files, search]);\n\n function navigateTo(newPrefix: string) {\n setSearch('');\n setSelectedFile(null);\n if (newPrefix) {\n setSearchParams({ prefix: newPrefix });\n } else {\n setSearchParams({});\n }\n }\n\n const hasImages = filtered.files.some((f) => isImagePath(f.path));\n const isEmpty = filtered.directories.length === 0 && filtered.files.length === 0;\n\n return (\n <div className=\"flex gap-0\">\n {/* Main content */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n <PageHeader\n title=\"Files\"\n actions={\n hasImages ? (\n <div className=\"flex items-center border border-surface-border rounded-md overflow-hidden\">\n <button\n onClick={() => setViewMode('list')}\n className={`p-2 transition-colors ${viewMode === 'list' ? 'bg-surface-hover text-text-primary' : 'text-text-tertiary hover:text-text-secondary'}`}\n title=\"List view\"\n >\n <LayoutList className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n <button\n onClick={() => setViewMode('grid')}\n className={`p-2 transition-colors ${viewMode === 'grid' ? 'bg-surface-hover text-text-primary' : 'text-text-tertiary hover:text-text-secondary'}`}\n title=\"Grid view\"\n >\n <LayoutGrid className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n ) : undefined\n }\n />\n\n <FileBreadcrumbs prefix={prefix} onNavigate={navigateTo} />\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder=\"Filter by name...\"\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 ) : viewMode === 'grid' ? (\n <GridView\n directories={filtered.directories}\n files={filtered.files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n ) : (\n <ListView\n directories={filtered.directories}\n files={filtered.files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n )}\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <FilePreviewPanel\n filePath={selectedFile}\n onClose={() => setSelectedFile(null)}\n />\n )}\n </div>\n );\n}\n\nfunction ListView({\n directories,\n files,\n onNavigate,\n onSelect,\n selectedFile,\n}: {\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 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\nfunction GridView({\n directories,\n files,\n onNavigate,\n onSelect,\n selectedFile,\n}: {\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 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"],"names":["useFileBrowse","prefix","pageSize","continuationToken","params","qs","useQuery","apiFetch","useFileMetadata","filePath","useGenerateSignedUrl","useMutation","data","getFilePreviewUrl","FileBreadcrumbs","onNavigate","segments","jsxDEV","FolderOpen","segment","i","isLast","targetPrefix","ChevronRight","EXPIRY_OPTIONS","formatSize","bytes","fileName","triggerDownload","url","name","blob","blobUrl","FilePreviewPanel","onClose","metadata","isLoading","signedUrlMutation","copied","setCopied","useState","showShareMenu","setShowShareMenu","fullscreen","setFullscreen","previewUrl","isImage","_a","isText","_b","isPdf","copyToClipboard","text","label","handleDownload","result","fullUrl","handleShare","expiresIn","Fragment","X","Download","ExternalLink","Maximize2","v","Link","opt","TextPreview","Check","Copy","MetaRow","TimeAgo","value","mono","children","content","setContent","error","setError","res","fileIcon","ext","Image","FileJson2","FileSpreadsheet","FileText","File","isImagePath","dirName","dirPath","stripped","fileNameFromPath","FilesPage","searchParams","setSearchParams","useSearchParams","search","setSearch","selectedFile","setSelectedFile","viewMode","setViewMode","directories","files","filtered","useMemo","q","d","navigateTo","newPrefix","hasImages","f","isEmpty","PageHeader","LayoutList","LayoutGrid","FilterBar","FilterInput","_","EmptyState","GridView","ListView","onSelect","dir","Folder","file","isImg"],"mappings":"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"}