@shepai/cli 1.116.0-pr367.8e10c48 → 1.116.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +14 -0
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -2
  4. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +2 -1
  6. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +6 -1
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +30 -2
  12. package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +1 -1
  13. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/di/container.js +4 -20
  15. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
  16. package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +6 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +12 -1
  18. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +98 -26
  20. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +13 -1
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +1 -0
  24. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +18 -1
  26. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
  27. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +1 -0
  28. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
  29. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +1 -0
  30. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -0
  32. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +13 -1
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +4 -0
  35. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +9 -17
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +2 -0
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +8 -4
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +7 -4
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +1 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.js +1 -0
  45. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
  46. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  47. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +71 -1
  48. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -1
  49. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +5 -3
  51. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -1
  52. package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +3 -1
  53. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
  54. package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +5 -1
  55. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
  56. package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +12 -0
  57. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  58. package/dist/src/presentation/cli/commands/ui.command.js +0 -15
  59. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  61. package/dist/src/presentation/web/dev-server.js +0 -20
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/package.json +1 -1
  64. package/web/.next/BUILD_ID +1 -1
  65. package/web/.next/app-path-routes-manifest.json +1 -5
  66. package/web/.next/build-manifest.json +6 -6
  67. package/web/.next/fallback-build-manifest.json +2 -2
  68. package/web/.next/prerender-manifest.json +3 -3
  69. package/web/.next/required-server-files.js +2 -2
  70. package/web/.next/required-server-files.json +2 -2
  71. package/web/.next/routes-manifest.json +0 -24
  72. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
  73. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  74. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  77. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  78. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
  81. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
  82. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
  85. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  86. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
  89. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  90. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  93. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  94. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  95. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
  97. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
  98. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
  101. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  102. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  103. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
  105. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  106. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  107. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  108. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  109. package/web/.next/server/app/_global-error.html +2 -2
  110. package/web/.next/server/app/_global-error.rsc +1 -1
  111. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  112. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  113. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  116. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  117. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  118. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  119. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  121. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  122. package/web/.next/server/app/settings/page/build-manifest.json +4 -4
  123. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  124. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  125. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  126. package/web/.next/server/app/skills/page/build-manifest.json +4 -4
  127. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  128. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  129. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  130. package/web/.next/server/app/tools/page/build-manifest.json +4 -4
  131. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  132. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  133. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/version/page/build-manifest.json +4 -4
  135. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  136. package/web/.next/server/app/version/page.js.nft.json +1 -1
  137. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app-paths-manifest.json +1 -5
  139. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  140. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
  143. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
  145. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  152. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +3 -0
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -0
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +3 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js.map +1 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  171. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/{node_modules__pnpm_747b43ac._.js → _1bb131c4._.js} +2 -2
  173. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -0
  174. package/web/.next/server/chunks/ssr/_273d4632._.js +3 -0
  175. package/web/.next/server/chunks/ssr/_273d4632._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/_6d26a08f._.js +3 -0
  177. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +1 -0
  178. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  179. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/_8e762bfa._.js +3 -0
  181. package/web/.next/server/chunks/ssr/{_28862ed0._.js.map → _8e762bfa._.js.map} +1 -1
  182. package/web/.next/server/chunks/ssr/{_383572e0._.js → _9f6e3d20._.js} +2 -2
  183. package/web/.next/server/chunks/ssr/_9f6e3d20._.js.map +1 -0
  184. package/web/.next/server/chunks/ssr/_a68d7e1c._.js +9 -0
  185. package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +1 -0
  186. package/web/.next/server/chunks/ssr/_b5fc318a._.js +3 -0
  187. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/_c1fbab88._.js +3 -0
  189. package/web/.next/server/chunks/ssr/_c1fbab88._.js.map +1 -0
  190. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  191. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/_f4d222d6._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_f5316e67._.js +3 -0
  194. package/web/.next/server/chunks/ssr/_f5316e67._.js.map +1 -0
  195. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  196. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
  198. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
  204. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  207. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
  212. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
  213. package/web/.next/server/middleware-build-manifest.js +4 -4
  214. package/web/.next/server/pages/500.html +2 -2
  215. package/web/.next/server/server-reference-manifest.js +1 -1
  216. package/web/.next/server/server-reference-manifest.json +32 -54
  217. package/web/.next/static/chunks/17fd217453792496.js +11 -0
  218. package/web/.next/static/chunks/303a1217006489b9.js +1 -0
  219. package/web/.next/static/chunks/33479aee057faf05.js +1 -0
  220. package/web/.next/static/chunks/{c6dc0749ac370da4.js → 3375766cc7dda1d8.js} +2 -2
  221. package/web/.next/static/chunks/{f60771797b58531f.js → 35bf7817ea1c468d.js} +1 -1
  222. package/web/.next/static/chunks/3a806cf059241bc9.js +1 -0
  223. package/web/.next/static/chunks/{604d36c352fff6c0.js → 3c962e81416806a3.js} +2 -2
  224. package/web/.next/static/chunks/3fc8dae693118412.js +1 -0
  225. package/web/.next/static/chunks/57b45edf86522369.css +1 -0
  226. package/web/.next/static/chunks/5d83ac35ca137033.js +1 -0
  227. package/web/.next/static/chunks/619af41a8d3232e5.js +1 -0
  228. package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
  229. package/web/.next/static/chunks/{e510518c9ca6e844.js → 814f40e65ab8e09e.js} +1 -1
  230. package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
  231. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +1 -0
  232. package/web/.next/static/chunks/{51ca7e4cad588da4.js → b5357e9cc8668be7.js} +1 -1
  233. package/web/.next/static/chunks/{385710675a1d06c9.js → b830ce63d018922d.js} +1 -1
  234. package/web/.next/static/chunks/ed3a602003bcb31b.js +1 -0
  235. package/web/.next/static/chunks/fcde0cbb2976b933.js +1 -0
  236. package/web/.next/static/chunks/{turbopack-b1685b5f87ad1d60.js → turbopack-426d9bc2450816ba.js} +1 -1
  237. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts +0 -41
  238. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts.map +0 -1
  239. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.js +0 -14
  240. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts +0 -65
  241. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts.map +0 -1
  242. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.js +0 -10
  243. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts +0 -36
  244. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts.map +0 -1
  245. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.js +0 -148
  246. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts +0 -75
  247. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts.map +0 -1
  248. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.js +0 -372
  249. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts +0 -82
  250. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map +0 -1
  251. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.js +0 -192
  252. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts +0 -3
  253. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts.map +0 -1
  254. package/dist/src/presentation/web/app/actions/load-webhook-status.js +0 -19
  255. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts +0 -9
  256. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts.map +0 -1
  257. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.js +0 -27
  258. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts +0 -17
  259. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts.map +0 -1
  260. package/dist/src/presentation/web/app/api/webhooks/github/route.js +0 -70
  261. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts +0 -9
  262. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts.map +0 -1
  263. package/dist/src/presentation/web/app/api/webhooks/status/route.js +0 -26
  264. package/dist/src/presentation/web/app/webhooks/page.d.ts +0 -4
  265. package/dist/src/presentation/web/app/webhooks/page.d.ts.map +0 -1
  266. package/dist/src/presentation/web/app/webhooks/page.js +0 -9
  267. package/dist/src/presentation/web/components/features/webhooks/types.d.ts +0 -32
  268. package/dist/src/presentation/web/components/features/webhooks/types.d.ts.map +0 -1
  269. package/dist/src/presentation/web/components/features/webhooks/types.js +0 -1
  270. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts +0 -6
  271. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map +0 -1
  272. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.js +0 -38
  273. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts +0 -9
  274. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts.map +0 -1
  275. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js +0 -69
  276. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts +0 -7
  277. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts.map +0 -1
  278. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.js +0 -11
  279. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts +0 -9
  280. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map +0 -1
  281. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.js +0 -31
  282. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts +0 -6
  283. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map +0 -1
  284. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.js +0 -21
  285. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts +0 -9
  286. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map +0 -1
  287. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js +0 -56
  288. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts +0 -6
  289. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map +0 -1
  290. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.js +0 -39
  291. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts +0 -8
  292. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map +0 -1
  293. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.js +0 -59
  294. package/web/.next/server/app/api/webhooks/deliveries/route/app-paths-manifest.json +0 -3
  295. package/web/.next/server/app/api/webhooks/deliveries/route/build-manifest.json +0 -11
  296. package/web/.next/server/app/api/webhooks/deliveries/route/server-reference-manifest.json +0 -4
  297. package/web/.next/server/app/api/webhooks/deliveries/route.js +0 -6
  298. package/web/.next/server/app/api/webhooks/deliveries/route.js.map +0 -5
  299. package/web/.next/server/app/api/webhooks/deliveries/route.js.nft.json +0 -1
  300. package/web/.next/server/app/api/webhooks/deliveries/route_client-reference-manifest.js +0 -2
  301. package/web/.next/server/app/api/webhooks/github/route/app-paths-manifest.json +0 -3
  302. package/web/.next/server/app/api/webhooks/github/route/build-manifest.json +0 -11
  303. package/web/.next/server/app/api/webhooks/github/route/server-reference-manifest.json +0 -4
  304. package/web/.next/server/app/api/webhooks/github/route.js +0 -6
  305. package/web/.next/server/app/api/webhooks/github/route.js.map +0 -5
  306. package/web/.next/server/app/api/webhooks/github/route.js.nft.json +0 -1
  307. package/web/.next/server/app/api/webhooks/github/route_client-reference-manifest.js +0 -2
  308. package/web/.next/server/app/api/webhooks/status/route/app-paths-manifest.json +0 -3
  309. package/web/.next/server/app/api/webhooks/status/route/build-manifest.json +0 -11
  310. package/web/.next/server/app/api/webhooks/status/route/server-reference-manifest.json +0 -4
  311. package/web/.next/server/app/api/webhooks/status/route.js +0 -6
  312. package/web/.next/server/app/api/webhooks/status/route.js.map +0 -5
  313. package/web/.next/server/app/api/webhooks/status/route.js.nft.json +0 -1
  314. package/web/.next/server/app/api/webhooks/status/route_client-reference-manifest.js +0 -2
  315. package/web/.next/server/app/webhooks/page/app-paths-manifest.json +0 -3
  316. package/web/.next/server/app/webhooks/page/build-manifest.json +0 -18
  317. package/web/.next/server/app/webhooks/page/next-font-manifest.json +0 -6
  318. package/web/.next/server/app/webhooks/page/react-loadable-manifest.json +0 -1
  319. package/web/.next/server/app/webhooks/page/server-reference-manifest.json +0 -35
  320. package/web/.next/server/app/webhooks/page.js +0 -16
  321. package/web/.next/server/app/webhooks/page.js.map +0 -5
  322. package/web/.next/server/app/webhooks/page.js.nft.json +0 -1
  323. package/web/.next/server/app/webhooks/page_client-reference-manifest.js +0 -2
  324. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js +0 -3
  325. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js.map +0 -1
  326. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js +0 -3
  327. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js.map +0 -1
  328. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js +0 -3
  329. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js.map +0 -1
  330. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js +0 -3
  331. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js.map +0 -1
  332. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js +0 -3
  333. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js.map +0 -1
  334. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js +0 -3
  335. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js.map +0 -1
  336. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js +0 -3
  337. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map +0 -1
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js +0 -3
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js.map +0 -1
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js +0 -3
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js.map +0 -1
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js +0 -4
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js.map +0 -1
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js +0 -3
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js.map +0 -1
  346. package/web/.next/server/chunks/ssr/_26b2c311._.js +0 -3
  347. package/web/.next/server/chunks/ssr/_26b2c311._.js.map +0 -1
  348. package/web/.next/server/chunks/ssr/_27dd06aa._.js +0 -3
  349. package/web/.next/server/chunks/ssr/_27dd06aa._.js.map +0 -1
  350. package/web/.next/server/chunks/ssr/_28862ed0._.js +0 -3
  351. package/web/.next/server/chunks/ssr/_383572e0._.js.map +0 -1
  352. package/web/.next/server/chunks/ssr/_809c53f6._.js +0 -9
  353. package/web/.next/server/chunks/ssr/_809c53f6._.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/_9eea4c51._.js +0 -3
  355. package/web/.next/server/chunks/ssr/_9eea4c51._.js.map +0 -1
  356. package/web/.next/server/chunks/ssr/_a4899a76._.js +0 -3
  357. package/web/.next/server/chunks/ssr/_a4899a76._.js.map +0 -1
  358. package/web/.next/server/chunks/ssr/_b7eb93fc._.js +0 -4
  359. package/web/.next/server/chunks/ssr/_b7eb93fc._.js.map +0 -1
  360. package/web/.next/server/chunks/ssr/_e0a01382._.js +0 -3
  361. package/web/.next/server/chunks/ssr/_e0a01382._.js.map +0 -1
  362. package/web/.next/server/chunks/ssr/_f8b36e2c._.js +0 -3
  363. package/web/.next/server/chunks/ssr/_f8b36e2c._.js.map +0 -1
  364. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js +0 -3
  365. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js.map +0 -1
  366. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +0 -1
  367. package/web/.next/static/chunks/06b948216df083c1.js +0 -1
  368. package/web/.next/static/chunks/2bdc11361b8f2602.js +0 -1
  369. package/web/.next/static/chunks/31f35710932542ef.js +0 -1
  370. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +0 -1
  371. package/web/.next/static/chunks/4714eb891fa4fd81.js +0 -1
  372. package/web/.next/static/chunks/523340641468b5f2.js +0 -1
  373. package/web/.next/static/chunks/5f6161ceb4263319.js +0 -1
  374. package/web/.next/static/chunks/9a7361e2365b2d8e.js +0 -1
  375. package/web/.next/static/chunks/9af45e885bd4ccef.js +0 -1
  376. package/web/.next/static/chunks/bbfb591f6aaa7255.css +0 -1
  377. package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
  378. package/web/.next/static/chunks/e9621b096a69e4e8.js +0 -11
  379. package/web/.next/static/chunks/f644140e21b75f61.js +0 -1
  380. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_buildManifest.js +0 -0
  381. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_clientMiddlewareManifest.json +0 -0
  382. /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/deliveries/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsB7D"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Webhook Delivery History: GET /api/webhooks/deliveries
3
- *
4
- * Returns recent webhook delivery records with optional filtering.
5
- * Query params: ?status=success|error|ignored&eventType=pull_request&limit=50
6
- */
7
- import { hasWebhookManager, getWebhookManager, } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
8
- export const dynamic = 'force-dynamic';
9
- export async function GET(request) {
10
- if (!hasWebhookManager()) {
11
- return Response.json({ deliveries: [] });
12
- }
13
- const url = new URL(request.url);
14
- const statusFilter = url.searchParams.get('status');
15
- const eventTypeFilter = url.searchParams.get('eventType');
16
- const limitParam = url.searchParams.get('limit');
17
- const limit = limitParam ? Math.min(parseInt(limitParam, 10) || 50, 200) : 50;
18
- const manager = getWebhookManager();
19
- let deliveries = [...manager.getDeliveryHistory()];
20
- if (statusFilter) {
21
- deliveries = deliveries.filter((d) => d.status === statusFilter);
22
- }
23
- if (eventTypeFilter) {
24
- deliveries = deliveries.filter((d) => d.eventType === eventTypeFilter);
25
- }
26
- return Response.json({ deliveries: deliveries.slice(0, limit) });
27
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * GitHub Webhook Receiver: POST /api/webhooks/github
3
- *
4
- * Receives webhook events from GitHub, validates the HMAC-SHA256 signature,
5
- * and routes the event to the GitHubWebhookService for processing.
6
- *
7
- * This endpoint is exposed via a Cloudflare Tunnel so GitHub can reach it.
8
- * Only POST requests are accepted; all other methods return 405.
9
- */
10
- export declare const dynamic = "force-dynamic";
11
- export declare function POST(request: Request): Promise<Response>;
12
- /**
13
- * Health check: GET /api/webhooks/github
14
- * Returns whether the webhook system is active.
15
- */
16
- export declare function GET(): Promise<Response>;
17
- //# sourceMappingURL=route.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/github/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsD9D;AAED;;;GAGG;AACH,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAS7C"}
@@ -1,70 +0,0 @@
1
- /**
2
- * GitHub Webhook Receiver: POST /api/webhooks/github
3
- *
4
- * Receives webhook events from GitHub, validates the HMAC-SHA256 signature,
5
- * and routes the event to the GitHubWebhookService for processing.
6
- *
7
- * This endpoint is exposed via a Cloudflare Tunnel so GitHub can reach it.
8
- * Only POST requests are accepted; all other methods return 405.
9
- */
10
- import { resolve } from '../../../../lib/server-container.js';
11
- import { hasWebhookManager } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
12
- export const dynamic = 'force-dynamic';
13
- export async function POST(request) {
14
- // Verify webhook system is running
15
- if (!hasWebhookManager()) {
16
- return Response.json({ error: 'Webhook system not initialized' }, { status: 503 });
17
- }
18
- // Read raw body for signature validation
19
- const rawBody = await request.text();
20
- if (!rawBody) {
21
- return Response.json({ error: 'Empty request body' }, { status: 400 });
22
- }
23
- // Get the webhook service from DI container
24
- let webhookService;
25
- try {
26
- webhookService = resolve('IWebhookService');
27
- }
28
- catch {
29
- return Response.json({ error: 'Webhook service not available' }, { status: 503 });
30
- }
31
- // Validate GitHub signature
32
- const signature = request.headers.get('x-hub-signature-256') ?? '';
33
- const validation = webhookService.validateSignature(rawBody, signature, webhookService.getSecret());
34
- if (!validation.valid) {
35
- // eslint-disable-next-line no-console
36
- console.warn(`[WebhookRoute] Invalid signature: ${validation.error}`);
37
- return Response.json({ error: `Invalid signature: ${validation.error}` }, { status: 401 });
38
- }
39
- // Parse the event
40
- const eventType = request.headers.get('x-github-event') ?? 'unknown';
41
- const deliveryId = request.headers.get('x-github-delivery') ?? 'unknown';
42
- let payload;
43
- try {
44
- payload = JSON.parse(rawBody);
45
- }
46
- catch {
47
- return Response.json({ error: 'Invalid JSON payload' }, { status: 400 });
48
- }
49
- // Process the event asynchronously (respond immediately to GitHub)
50
- void webhookService.handleEvent({
51
- source: 'github',
52
- eventType,
53
- deliveryId,
54
- payload,
55
- });
56
- return Response.json({ received: true, deliveryId });
57
- }
58
- /**
59
- * Health check: GET /api/webhooks/github
60
- * Returns whether the webhook system is active.
61
- */
62
- export async function GET() {
63
- const active = hasWebhookManager();
64
- return Response.json({
65
- active,
66
- message: active
67
- ? 'Webhook receiver is active'
68
- : 'Webhook system not initialized (cloudflared may not be installed)',
69
- });
70
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Webhook System Status: GET /api/webhooks/status
3
- *
4
- * Returns the full webhook system status including tunnel state,
5
- * registered webhooks, and delivery statistics.
6
- */
7
- export declare const dynamic = "force-dynamic";
8
- export declare function GET(): Promise<Response>;
9
- //# sourceMappingURL=route.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/status/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAkB7C"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Webhook System Status: GET /api/webhooks/status
3
- *
4
- * Returns the full webhook system status including tunnel state,
5
- * registered webhooks, and delivery statistics.
6
- */
7
- import { hasWebhookManager, getWebhookManager, } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
8
- export const dynamic = 'force-dynamic';
9
- export async function GET() {
10
- if (!hasWebhookManager()) {
11
- return Response.json({
12
- running: false,
13
- tunnel: { connected: false, publicUrl: null },
14
- webhooks: {
15
- registered: [],
16
- totalDeliveries: 0,
17
- successCount: 0,
18
- errorCount: 0,
19
- ignoredCount: 0,
20
- },
21
- startedAt: null,
22
- });
23
- }
24
- const manager = getWebhookManager();
25
- return Response.json(manager.getStatus());
26
- }
@@ -1,4 +0,0 @@
1
- /** Skip static pre-rendering since we need runtime webhook manager. */
2
- export declare const dynamic = "force-dynamic";
3
- export default function WebhooksPage(): Promise<import("react/jsx-runtime").JSX.Element>;
4
- //# sourceMappingURL=page.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/webhooks/page.tsx"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,YAAY,qDAQzC"}
@@ -1,9 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { loadWebhookStatus } from '../actions/load-webhook-status.js';
3
- import { WebhooksPageClient } from '../../components/features/webhooks/webhooks-page-client.js';
4
- /** Skip static pre-rendering since we need runtime webhook manager. */
5
- export const dynamic = 'force-dynamic';
6
- export default async function WebhooksPage() {
7
- const status = await loadWebhookStatus();
8
- return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(WebhooksPageClient, { initialStatus: status }) }));
9
- }
@@ -1,32 +0,0 @@
1
- export type WebhookDeliveryStatus = 'success' | 'ignored' | 'error';
2
- export interface WebhookDeliveryRecord {
3
- deliveryId: string;
4
- eventType: string;
5
- source: string;
6
- receivedAt: string;
7
- status: WebhookDeliveryStatus;
8
- statusMessage: string;
9
- durationMs: number;
10
- payload: Record<string, unknown>;
11
- }
12
- export interface RegisteredWebhookInfo {
13
- repoFullName: string;
14
- webhookId: number;
15
- repositoryPath: string;
16
- }
17
- export interface WebhookSystemStatus {
18
- running: boolean;
19
- tunnel: {
20
- connected: boolean;
21
- publicUrl: string | null;
22
- };
23
- webhooks: {
24
- registered: readonly RegisteredWebhookInfo[];
25
- totalDeliveries: number;
26
- successCount: number;
27
- errorCount: number;
28
- ignoredCount: number;
29
- };
30
- startedAt: string | null;
31
- }
32
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;QAC7C,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
@@ -1,6 +0,0 @@
1
- import type { WebhookDeliveryRecord } from './types.js';
2
- export interface WebhookDeliveryTableProps {
3
- deliveries: WebhookDeliveryRecord[];
4
- }
5
- export declare function WebhookDeliveryTable({ deliveries }: WebhookDeliveryTableProps): import("react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=webhook-delivery-table.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-delivery-table.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-delivery-table.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAcD,wBAAgB,oBAAoB,CAAC,EAAE,UAAU,EAAE,EAAE,yBAAyB,2CAsE7E"}
@@ -1,38 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState } from 'react';
4
- import { CheckCircle, XCircle, MinusCircle, ChevronDown, ChevronRight } from 'lucide-react';
5
- import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
6
- import { Badge } from '../../ui/badge.js';
7
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
8
- import { cn } from '../../../lib/utils.js';
9
- const STATUS_ICON = {
10
- success: _jsx(CheckCircle, { className: "h-4 w-4 text-green-500" }),
11
- error: _jsx(XCircle, { className: "h-4 w-4 text-red-500" }),
12
- ignored: _jsx(MinusCircle, { className: "h-4 w-4 text-yellow-500" }),
13
- };
14
- const STATUS_LABEL = {
15
- success: 'Success',
16
- error: 'Error',
17
- ignored: 'Ignored',
18
- };
19
- export function WebhookDeliveryTable({ deliveries }) {
20
- const [statusFilter, setStatusFilter] = useState('all');
21
- const [eventTypeFilter, setEventTypeFilter] = useState('all');
22
- const [expandedId, setExpandedId] = useState(null);
23
- const eventTypes = [...new Set(deliveries.map((d) => d.eventType))];
24
- const filtered = deliveries.filter((d) => {
25
- if (statusFilter !== 'all' && d.status !== statusFilter)
26
- return false;
27
- if (eventTypeFilter !== 'all' && d.eventType !== eventTypeFilter)
28
- return false;
29
- return true;
30
- });
31
- return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(CardTitle, { className: "text-sm font-medium", children: ["Delivery History (", filtered.length, ")"] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Select, { value: statusFilter, onValueChange: setStatusFilter, children: [_jsx(SelectTrigger, { className: "h-8 w-[120px]", children: _jsx(SelectValue, { placeholder: "Status" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: "All Status" }), _jsx(SelectItem, { value: "success", children: "Success" }), _jsx(SelectItem, { value: "error", children: "Error" }), _jsx(SelectItem, { value: "ignored", children: "Ignored" })] })] }), _jsxs(Select, { value: eventTypeFilter, onValueChange: setEventTypeFilter, children: [_jsx(SelectTrigger, { className: "h-8 w-[150px]", children: _jsx(SelectValue, { placeholder: "Event Type" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: "All Events" }), eventTypes.map((type) => (_jsx(SelectItem, { value: type, children: type }, type)))] })] })] })] }) }), _jsx(CardContent, { children: filtered.length === 0 ? (_jsx("p", { className: "text-muted-foreground py-8 text-center text-sm", children: "No delivery records yet. Webhook events will appear here when received." })) : (_jsx("div", { className: "space-y-1", children: filtered.map((delivery) => (_jsx(DeliveryRow, { delivery: delivery, expanded: expandedId === delivery.deliveryId, onToggle: () => setExpandedId(expandedId === delivery.deliveryId ? null : delivery.deliveryId) }, delivery.deliveryId))) })) })] }));
32
- }
33
- function DeliveryRow({ delivery, expanded, onToggle, }) {
34
- const time = new Date(delivery.receivedAt);
35
- const timeStr = time.toLocaleTimeString();
36
- const dateStr = time.toLocaleDateString();
37
- return (_jsxs("div", { className: cn('rounded-lg border', expanded && 'bg-muted/50'), children: [_jsxs("button", { type: "button", className: "flex w-full items-center gap-3 px-3 py-2 text-left text-sm", onClick: onToggle, children: [expanded ? (_jsx(ChevronDown, { className: "h-4 w-4 shrink-0" })) : (_jsx(ChevronRight, { className: "h-4 w-4 shrink-0" })), STATUS_ICON[delivery.status], _jsx(Badge, { variant: "outline", className: "text-xs", children: delivery.eventType }), _jsx("span", { className: "text-muted-foreground min-w-0 flex-1 truncate text-xs", children: delivery.deliveryId }), _jsxs("span", { className: "text-muted-foreground shrink-0 text-xs", children: [delivery.durationMs, "ms"] }), _jsx("span", { className: "text-muted-foreground shrink-0 text-xs", children: timeStr })] }), expanded ? (_jsxs("div", { className: "border-t px-3 py-3", children: [_jsxs("div", { className: "mb-2 grid grid-cols-2 gap-2 text-xs", children: [_jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Status:" }), ' ', _jsx(Badge, { variant: delivery.status === 'error' ? 'destructive' : 'secondary', className: "text-xs", children: STATUS_LABEL[delivery.status] })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Date:" }), " ", dateStr, " ", timeStr] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Duration:" }), " ", delivery.durationMs, "ms"] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Source:" }), " ", delivery.source] })] }), _jsxs("div", { className: "mb-2", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Message:" }), _jsx("p", { className: "text-sm", children: delivery.statusMessage })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Payload:" }), _jsx("pre", { className: "bg-muted mt-1 max-h-60 overflow-auto rounded-md p-2 text-xs", children: JSON.stringify(delivery.payload, null, 2) })] })] })) : null] }));
38
- }
@@ -1,9 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { WebhookDeliveryTable } from './webhook-delivery-table.js';
3
- declare const meta: Meta<typeof WebhookDeliveryTable>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const WithDeliveries: Story;
7
- export declare const Empty: Story;
8
- export declare const OnlyErrors: Story;
9
- //# sourceMappingURL=webhook-delivery-table.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-delivery-table.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAwDhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,oBAAoB,CAK3C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC"}
@@ -1,69 +0,0 @@
1
- import { WebhookDeliveryTable } from './webhook-delivery-table.js';
2
- const mockDeliveries = [
3
- {
4
- deliveryId: 'abc-123-def',
5
- eventType: 'pull_request',
6
- source: 'github',
7
- receivedAt: new Date(Date.now() - 60000).toISOString(),
8
- status: 'success',
9
- statusMessage: 'Processed successfully',
10
- durationMs: 12,
11
- payload: {
12
- action: 'closed',
13
- pull_request: {
14
- number: 42,
15
- merged: true,
16
- html_url: 'https://github.com/acme/web-app/pull/42',
17
- },
18
- },
19
- },
20
- {
21
- deliveryId: 'abc-456-ghi',
22
- eventType: 'check_suite',
23
- source: 'github',
24
- receivedAt: new Date(Date.now() - 120000).toISOString(),
25
- status: 'success',
26
- statusMessage: 'Processed successfully',
27
- durationMs: 8,
28
- payload: {
29
- action: 'completed',
30
- check_suite: { conclusion: 'success', head_branch: 'feat/login' },
31
- },
32
- },
33
- {
34
- deliveryId: 'abc-789-jkl',
35
- eventType: 'check_run',
36
- source: 'github',
37
- receivedAt: new Date(Date.now() - 180000).toISOString(),
38
- status: 'error',
39
- statusMessage: 'Feature not found for branch refs/heads/unknown',
40
- durationMs: 3,
41
- payload: { action: 'completed', check_run: { conclusion: 'failure' } },
42
- },
43
- {
44
- deliveryId: 'abc-012-mno',
45
- eventType: 'ping',
46
- source: 'github',
47
- receivedAt: new Date(Date.now() - 240000).toISOString(),
48
- status: 'ignored',
49
- statusMessage: 'Unhandled event type: ping',
50
- durationMs: 0,
51
- payload: { zen: 'Keep it logically awesome.' },
52
- },
53
- ];
54
- const meta = {
55
- title: 'Features/Webhooks/WebhookDeliveryTable',
56
- component: WebhookDeliveryTable,
57
- parameters: { layout: 'padded' },
58
- tags: ['autodocs'],
59
- };
60
- export default meta;
61
- export const WithDeliveries = {
62
- args: { deliveries: mockDeliveries },
63
- };
64
- export const Empty = {
65
- args: { deliveries: [] },
66
- };
67
- export const OnlyErrors = {
68
- args: { deliveries: mockDeliveries.filter((d) => d.status === 'error') },
69
- };
@@ -1,7 +0,0 @@
1
- import type { RegisteredWebhookInfo } from './types.js';
2
- export interface WebhookRepoListProps {
3
- webhooks: readonly RegisteredWebhookInfo[];
4
- tunnelUrl: string | null;
5
- }
6
- export declare function WebhookRepoList({ webhooks, tunnelUrl }: WebhookRepoListProps): import("react/jsx-runtime").JSX.Element;
7
- //# sourceMappingURL=webhook-repo-list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-repo-list.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-repo-list.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CA2D5E"}
@@ -1,11 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { GitBranch, ExternalLink } from 'lucide-react';
4
- import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
5
- import { Badge } from '../../ui/badge.js';
6
- export function WebhookRepoList({ webhooks, tunnelUrl }) {
7
- if (webhooks.length === 0) {
8
- return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: "text-sm font-medium", children: "Registered Repositories" }) }), _jsx(CardContent, { children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No webhooks registered. Webhooks are automatically created for repositories with features in the Review lifecycle when cloudflared is available." }) })] }));
9
- }
10
- return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "text-sm font-medium", children: ["Registered Repositories (", webhooks.length, ")"] }) }), _jsx(CardContent, { children: _jsx("div", { className: "space-y-3", children: webhooks.map((webhook) => (_jsxs("div", { className: "flex items-center justify-between rounded-lg border p-3", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium", children: webhook.repoFullName }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Webhook #", webhook.webhookId] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: "Active" }), tunnelUrl ? (_jsx("a", { href: `https://github.com/${webhook.repoFullName}/settings/hooks/${webhook.webhookId}`, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground", children: _jsx(ExternalLink, { className: "h-3.5 w-3.5" }) })) : null] })] }, webhook.webhookId))) }) })] }));
11
- }
@@ -1,9 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { WebhookRepoList } from './webhook-repo-list.js';
3
- declare const meta: Meta<typeof WebhookRepoList>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const WithWebhooks: Story;
7
- export declare const Empty: Story;
8
- export declare const SingleRepo: Story;
9
- //# sourceMappingURL=webhook-repo-list.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-repo-list.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-repo-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAKtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAK1B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC"}
@@ -1,31 +0,0 @@
1
- import { WebhookRepoList } from './webhook-repo-list.js';
2
- const mockWebhooks = [
3
- { repoFullName: 'acme/web-app', webhookId: 12345, repositoryPath: '/home/user/web-app' },
4
- { repoFullName: 'acme/api-service', webhookId: 12346, repositoryPath: '/home/user/api-service' },
5
- { repoFullName: 'acme/shared-lib', webhookId: 12347, repositoryPath: '/home/user/shared-lib' },
6
- ];
7
- const meta = {
8
- title: 'Features/Webhooks/WebhookRepoList',
9
- component: WebhookRepoList,
10
- parameters: { layout: 'padded' },
11
- tags: ['autodocs'],
12
- };
13
- export default meta;
14
- export const WithWebhooks = {
15
- args: {
16
- webhooks: mockWebhooks,
17
- tunnelUrl: 'https://random-subdomain.trycloudflare.com',
18
- },
19
- };
20
- export const Empty = {
21
- args: {
22
- webhooks: [],
23
- tunnelUrl: null,
24
- },
25
- };
26
- export const SingleRepo = {
27
- args: {
28
- webhooks: [mockWebhooks[0]],
29
- tunnelUrl: 'https://random-subdomain.trycloudflare.com',
30
- },
31
- };
@@ -1,6 +0,0 @@
1
- import type { WebhookSystemStatus } from './types.js';
2
- export interface WebhookStatusCardsProps {
3
- status: WebhookSystemStatus;
4
- }
5
- export declare function WebhookStatusCards({ status }: WebhookStatusCardsProps): import("react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=webhook-status-cards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-status-cards.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-status-cards.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CA2FrE"}
@@ -1,21 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Activity, Globe, Webhook, CheckCircle, XCircle, MinusCircle } from 'lucide-react';
4
- import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
5
- import { Badge } from '../../ui/badge.js';
6
- import { cn } from '../../../lib/utils.js';
7
- export function WebhookStatusCards({ status }) {
8
- const uptime = status.startedAt ? formatUptime(new Date(status.startedAt)) : null;
9
- return (_jsxs("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "System Status" }), _jsx(Activity, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: cn('h-2 w-2 rounded-full', status.running ? 'bg-green-500' : 'bg-red-500') }), _jsx("span", { className: "text-2xl font-bold", children: status.running ? 'Active' : 'Inactive' })] }), uptime ? (_jsxs("p", { className: "text-muted-foreground text-xs", children: ["Up for ", uptime] })) : (_jsx("p", { className: "text-muted-foreground text-xs", children: "Webhook system not started" }))] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Tunnel" }), _jsx(Globe, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(Badge, { variant: status.tunnel.connected ? 'default' : 'destructive', children: status.tunnel.connected ? 'Connected' : 'Disconnected' }) }), status.tunnel.publicUrl ? (_jsx("p", { className: "text-muted-foreground mt-1 truncate text-xs", title: status.tunnel.publicUrl, children: status.tunnel.publicUrl })) : (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "No tunnel URL" }))] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Webhooks" }), _jsx(Webhook, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "text-2xl font-bold", children: status.webhooks.registered.length }), _jsxs("p", { className: "text-muted-foreground text-xs", children: [status.webhooks.registered.length === 1 ? 'repository' : 'repositories', " registered"] })] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Deliveries" }), _jsx(CheckCircle, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "text-2xl font-bold", children: status.webhooks.totalDeliveries }), _jsxs("div", { className: "text-muted-foreground flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(CheckCircle, { className: "h-3 w-3 text-green-500" }), status.webhooks.successCount] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(XCircle, { className: "h-3 w-3 text-red-500" }), status.webhooks.errorCount] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(MinusCircle, { className: "h-3 w-3 text-yellow-500" }), status.webhooks.ignoredCount] })] })] })] })] }));
10
- }
11
- function formatUptime(startedAt) {
12
- const ms = Date.now() - startedAt.getTime();
13
- const seconds = Math.floor(ms / 1000);
14
- const minutes = Math.floor(seconds / 60);
15
- const hours = Math.floor(minutes / 60);
16
- if (hours > 0)
17
- return `${hours}h ${minutes % 60}m`;
18
- if (minutes > 0)
19
- return `${minutes}m ${seconds % 60}s`;
20
- return `${seconds}s`;
21
- }
@@ -1,9 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { WebhookStatusCards } from './webhook-status-cards.js';
3
- declare const meta: Meta<typeof WebhookStatusCards>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Active: Story;
7
- export declare const Inactive: Story;
8
- export declare const TunnelDisconnected: Story;
9
- //# sourceMappingURL=webhook-status-cards.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-status-cards.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-status-cards.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuC5D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAKzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC"}
@@ -1,56 +0,0 @@
1
- import { WebhookStatusCards } from './webhook-status-cards.js';
2
- const activeStatus = {
3
- running: true,
4
- tunnel: {
5
- connected: true,
6
- publicUrl: 'https://random-subdomain.trycloudflare.com',
7
- },
8
- webhooks: {
9
- registered: [
10
- { repoFullName: 'acme/web-app', webhookId: 12345, repositoryPath: '/home/user/web-app' },
11
- {
12
- repoFullName: 'acme/api-service',
13
- webhookId: 12346,
14
- repositoryPath: '/home/user/api-service',
15
- },
16
- ],
17
- totalDeliveries: 42,
18
- successCount: 38,
19
- errorCount: 2,
20
- ignoredCount: 2,
21
- },
22
- startedAt: new Date(Date.now() - 3600000).toISOString(),
23
- };
24
- const inactiveStatus = {
25
- running: false,
26
- tunnel: { connected: false, publicUrl: null },
27
- webhooks: {
28
- registered: [],
29
- totalDeliveries: 0,
30
- successCount: 0,
31
- errorCount: 0,
32
- ignoredCount: 0,
33
- },
34
- startedAt: null,
35
- };
36
- const meta = {
37
- title: 'Features/Webhooks/WebhookStatusCards',
38
- component: WebhookStatusCards,
39
- parameters: { layout: 'padded' },
40
- tags: ['autodocs'],
41
- };
42
- export default meta;
43
- export const Active = {
44
- args: { status: activeStatus },
45
- };
46
- export const Inactive = {
47
- args: { status: inactiveStatus },
48
- };
49
- export const TunnelDisconnected = {
50
- args: {
51
- status: {
52
- ...activeStatus,
53
- tunnel: { connected: false, publicUrl: null },
54
- },
55
- },
56
- };
@@ -1,6 +0,0 @@
1
- import type { WebhookSystemStatus } from './types.js';
2
- export interface WebhooksPageClientProps {
3
- initialStatus: WebhookSystemStatus;
4
- }
5
- export declare function WebhooksPageClient({ initialStatus }: WebhooksPageClientProps): import("react/jsx-runtime").JSX.Element;
6
- //# sourceMappingURL=webhooks-page-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhooks-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhooks-page-client.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,SAAS,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,mBAAmB,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,EAAE,uBAAuB,2CAyD5E"}
@@ -1,39 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useEffect, useCallback } from 'react';
4
- import { RefreshCw } from 'lucide-react';
5
- import { Button } from '../../ui/button.js';
6
- import { PageHeader } from '../../common/page-header/index.js';
7
- import { WebhookStatusCards } from './webhook-status-cards.js';
8
- import { WebhookRepoList } from './webhook-repo-list.js';
9
- import { WebhookDeliveryTable } from './webhook-delivery-table.js';
10
- export function WebhooksPageClient({ initialStatus }) {
11
- const [status, setStatus] = useState(initialStatus);
12
- const [deliveries, setDeliveries] = useState([]);
13
- const [refreshing, setRefreshing] = useState(false);
14
- const refresh = useCallback(async () => {
15
- setRefreshing(true);
16
- try {
17
- const [statusRes, deliveriesRes] = await Promise.all([
18
- fetch('/api/webhooks/status'),
19
- fetch('/api/webhooks/deliveries?limit=100'),
20
- ]);
21
- if (statusRes.ok) {
22
- setStatus(await statusRes.json());
23
- }
24
- if (deliveriesRes.ok) {
25
- const data = await deliveriesRes.json();
26
- setDeliveries(data.deliveries);
27
- }
28
- }
29
- finally {
30
- setRefreshing(false);
31
- }
32
- }, []);
33
- useEffect(() => {
34
- void refresh();
35
- const interval = setInterval(() => void refresh(), 5000);
36
- return () => clearInterval(interval);
37
- }, [refresh]);
38
- return (_jsxs("div", { className: "space-y-6", children: [_jsx(PageHeader, { title: "Webhooks", description: "Monitor GitHub webhook deliveries and tunnel status", children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void refresh(), disabled: refreshing, children: [_jsx(RefreshCw, { className: refreshing ? 'mr-2 h-4 w-4 animate-spin' : 'mr-2 h-4 w-4' }), "Refresh"] }) }), _jsx(WebhookStatusCards, { status: status }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsx("div", { className: "lg:col-span-1", children: _jsx(WebhookRepoList, { webhooks: status.webhooks.registered, tunnelUrl: status.tunnel.publicUrl }) }), _jsx("div", { className: "lg:col-span-2", children: _jsx(WebhookDeliveryTable, { deliveries: deliveries }) })] })] }));
39
- }
@@ -1,8 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { WebhooksPageClient } from './webhooks-page-client.js';
3
- declare const meta: Meta<typeof WebhooksPageClient>;
4
- export default meta;
5
- type Story = StoryObj<typeof meta>;
6
- export declare const Active: Story;
7
- export declare const Inactive: Story;
8
- //# sourceMappingURL=webhooks-page-client.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhooks-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhooks-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuC5D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAgBzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}