@shepai/cli 1.116.3-pr375.ea5b2a2 → 1.117.0-pr367.ca5b6ac

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 (477) hide show
  1. package/apis/json-schema/AnalyzeRepoTimeouts.yaml +10 -0
  2. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  3. package/apis/json-schema/StageTimeouts.yaml +35 -0
  4. package/apis/json-schema/WorkflowConfig.yaml +6 -0
  5. package/dist/packages/core/src/application/ports/output/services/index.d.ts +2 -0
  6. package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
  7. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts +41 -0
  8. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts.map +1 -0
  9. package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.js +14 -0
  10. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts +65 -0
  11. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts.map +1 -0
  12. package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.js +10 -0
  13. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  14. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +17 -8
  15. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  16. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts +1 -3
  18. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.d.ts.map +1 -1
  19. package/dist/packages/core/src/application/use-cases/features/resume-feature.use-case.js +2 -4
  20. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts +25 -0
  21. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.d.ts.map +1 -0
  22. package/dist/packages/core/src/application/use-cases/features/start-feature.use-case.js +116 -0
  23. package/dist/packages/core/src/domain/generated/output.d.ts +47 -0
  24. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  25. package/dist/packages/core/src/domain/generated/output.js +1 -0
  26. package/dist/packages/core/src/domain/lifecycle-gates.d.ts +3 -0
  27. package/dist/packages/core/src/domain/lifecycle-gates.d.ts.map +1 -1
  28. package/dist/packages/core/src/domain/lifecycle-gates.js +3 -0
  29. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  30. package/dist/packages/core/src/infrastructure/di/container.js +19 -0
  31. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +7 -0
  32. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +44 -0
  34. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts +22 -0
  35. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.d.ts.map +1 -0
  36. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/035-add-stage-timeout-ms.js +53 -0
  37. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
  38. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +15 -6
  39. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
  40. package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +15 -0
  41. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.d.ts.map +1 -1
  42. package/dist/packages/core/src/infrastructure/services/agents/analyze-repo/analyze-repository-graph.js +15 -0
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +11 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  45. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +42 -3
  46. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts +55 -0
  47. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts.map +1 -0
  48. package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.js +203 -0
  49. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts +75 -0
  50. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts.map +1 -0
  51. package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.js +372 -0
  52. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts +82 -0
  53. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map +1 -0
  54. package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.js +206 -0
  55. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  56. package/dist/src/presentation/cli/commands/feat/index.js +2 -0
  57. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  58. package/dist/src/presentation/cli/commands/feat/ls.command.js +3 -0
  59. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  60. package/dist/src/presentation/cli/commands/feat/new.command.js +9 -1
  61. package/dist/src/presentation/cli/commands/feat/start.command.d.ts +12 -0
  62. package/dist/src/presentation/cli/commands/feat/start.command.d.ts.map +1 -0
  63. package/dist/src/presentation/cli/commands/feat/start.command.js +43 -0
  64. package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
  65. package/dist/src/presentation/cli/commands/ui.command.js +15 -0
  66. package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -1
  67. package/dist/src/presentation/web/app/actions/approve-feature.js +0 -9
  68. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  69. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  70. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  71. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts +3 -0
  72. package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts.map +1 -0
  73. package/dist/src/presentation/web/app/actions/load-webhook-status.js +19 -0
  74. package/dist/src/presentation/web/app/actions/reject-feature.d.ts.map +1 -1
  75. package/dist/src/presentation/web/app/actions/reject-feature.js +0 -9
  76. package/dist/src/presentation/web/app/actions/start-feature.d.ts +5 -0
  77. package/dist/src/presentation/web/app/actions/start-feature.d.ts.map +1 -0
  78. package/dist/src/presentation/web/app/actions/start-feature.js +16 -0
  79. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  80. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  81. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts +9 -0
  82. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts.map +1 -0
  83. package/dist/src/presentation/web/app/api/webhooks/deliveries/route.js +27 -0
  84. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts +17 -0
  85. package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts.map +1 -0
  86. package/dist/src/presentation/web/app/api/webhooks/github/route.js +70 -0
  87. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts +9 -0
  88. package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts.map +1 -0
  89. package/dist/src/presentation/web/app/api/webhooks/status/route.js +26 -0
  90. package/dist/src/presentation/web/app/webhooks/page.d.ts +4 -0
  91. package/dist/src/presentation/web/app/webhooks/page.d.ts.map +1 -0
  92. package/dist/src/presentation/web/app/webhooks/page.js +9 -0
  93. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  94. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +1 -1
  95. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +20 -1
  97. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  98. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +6 -2
  100. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  101. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
  102. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -2
  103. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +13 -1
  105. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +12 -3
  107. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +2 -0
  108. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +36 -2
  110. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -1
  112. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -0
  113. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  114. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +23 -0
  115. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  116. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +75 -2
  117. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +1 -0
  118. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
  119. package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +23 -0
  120. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts +11 -0
  121. package/dist/src/presentation/web/components/features/settings/timeout-slider.d.ts.map +1 -0
  122. package/dist/src/presentation/web/components/features/settings/timeout-slider.js +63 -0
  123. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts +10 -0
  124. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.d.ts.map +1 -0
  125. package/dist/src/presentation/web/components/features/settings/timeout-slider.stories.js +24 -0
  126. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
  127. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +97 -2
  128. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
  129. package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +22 -0
  130. package/dist/src/presentation/web/components/features/webhooks/types.d.ts +32 -0
  131. package/dist/src/presentation/web/components/features/webhooks/types.d.ts.map +1 -0
  132. package/dist/src/presentation/web/components/features/webhooks/types.js +1 -0
  133. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts +6 -0
  134. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map +1 -0
  135. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.js +38 -0
  136. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts +9 -0
  137. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts.map +1 -0
  138. package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js +69 -0
  139. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts +7 -0
  140. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts.map +1 -0
  141. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.js +11 -0
  142. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts +9 -0
  143. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map +1 -0
  144. package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.js +31 -0
  145. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts +6 -0
  146. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map +1 -0
  147. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.js +21 -0
  148. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts +9 -0
  149. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map +1 -0
  150. package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js +56 -0
  151. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts +6 -0
  152. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map +1 -0
  153. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.js +39 -0
  154. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts +8 -0
  155. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map +1 -0
  156. package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.js +59 -0
  157. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  158. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  159. package/dist/src/presentation/web/components/ui/slider.d.ts +5 -0
  160. package/dist/src/presentation/web/components/ui/slider.d.ts.map +1 -0
  161. package/dist/src/presentation/web/components/ui/slider.js +10 -0
  162. package/dist/src/presentation/web/components/ui/slider.stories.d.ts +7 -0
  163. package/dist/src/presentation/web/components/ui/slider.stories.d.ts.map +1 -0
  164. package/dist/src/presentation/web/components/ui/slider.stories.js +15 -0
  165. package/dist/src/presentation/web/dev-server.js +20 -0
  166. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  167. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -0
  168. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  169. package/dist/src/presentation/web/hooks/use-graph-state.js +1 -0
  170. package/dist/src/presentation/web/lib/derive-graph.d.ts +2 -0
  171. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  172. package/dist/src/presentation/web/lib/derive-graph.js +5 -0
  173. package/dist/tsconfig.build.tsbuildinfo +1 -1
  174. package/package.json +3 -1
  175. package/web/.next/BUILD_ID +1 -1
  176. package/web/.next/app-path-routes-manifest.json +5 -1
  177. package/web/.next/build-manifest.json +6 -6
  178. package/web/.next/fallback-build-manifest.json +2 -2
  179. package/web/.next/prerender-manifest.json +3 -3
  180. package/web/.next/required-server-files.js +2 -2
  181. package/web/.next/required-server-files.json +2 -2
  182. package/web/.next/routes-manifest.json +24 -0
  183. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
  184. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +55 -40
  185. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  186. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  187. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  188. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  189. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  190. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  191. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  192. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  193. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
  194. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +67 -52
  195. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  196. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  197. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
  199. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  200. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  201. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  202. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  203. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
  204. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +55 -40
  205. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  206. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  207. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  209. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +67 -52
  210. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  211. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  212. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  213. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
  214. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +67 -52
  215. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  216. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  217. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  218. package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
  219. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +51 -36
  220. package/web/.next/server/app/(dashboard)/page.js +1 -1
  221. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  222. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  223. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
  224. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +51 -36
  225. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  226. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  227. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  228. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  229. package/web/.next/server/app/_global-error.html +2 -2
  230. package/web/.next/server/app/_global-error.rsc +1 -1
  231. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  232. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  233. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  234. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  235. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  236. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  237. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  238. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  239. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  241. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  242. package/web/.next/server/app/api/webhooks/deliveries/route/app-paths-manifest.json +3 -0
  243. package/web/.next/server/app/api/webhooks/deliveries/route/build-manifest.json +11 -0
  244. package/web/.next/server/app/api/webhooks/deliveries/route/server-reference-manifest.json +4 -0
  245. package/web/.next/server/app/api/webhooks/deliveries/route.js +6 -0
  246. package/web/.next/server/app/api/webhooks/deliveries/route.js.map +5 -0
  247. package/web/.next/server/app/api/webhooks/deliveries/route.js.nft.json +1 -0
  248. package/web/.next/server/app/api/webhooks/deliveries/route_client-reference-manifest.js +2 -0
  249. package/web/.next/server/app/api/webhooks/github/route/app-paths-manifest.json +3 -0
  250. package/web/.next/server/app/api/webhooks/github/route/build-manifest.json +11 -0
  251. package/web/.next/server/app/api/webhooks/github/route/server-reference-manifest.json +4 -0
  252. package/web/.next/server/app/api/webhooks/github/route.js +6 -0
  253. package/web/.next/server/app/api/webhooks/github/route.js.map +5 -0
  254. package/web/.next/server/app/api/webhooks/github/route.js.nft.json +1 -0
  255. package/web/.next/server/app/api/webhooks/github/route_client-reference-manifest.js +2 -0
  256. package/web/.next/server/app/api/webhooks/status/route/app-paths-manifest.json +3 -0
  257. package/web/.next/server/app/api/webhooks/status/route/build-manifest.json +11 -0
  258. package/web/.next/server/app/api/webhooks/status/route/server-reference-manifest.json +4 -0
  259. package/web/.next/server/app/api/webhooks/status/route.js +6 -0
  260. package/web/.next/server/app/api/webhooks/status/route.js.map +5 -0
  261. package/web/.next/server/app/api/webhooks/status/route.js.nft.json +1 -0
  262. package/web/.next/server/app/api/webhooks/status/route_client-reference-manifest.js +2 -0
  263. package/web/.next/server/app/settings/page/build-manifest.json +4 -4
  264. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  265. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  266. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  267. package/web/.next/server/app/skills/page/build-manifest.json +4 -4
  268. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  269. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  270. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  271. package/web/.next/server/app/tools/page/build-manifest.json +4 -4
  272. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  273. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  274. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  275. package/web/.next/server/app/version/page/build-manifest.json +4 -4
  276. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  277. package/web/.next/server/app/version/page.js.nft.json +1 -1
  278. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  279. package/web/.next/server/app/webhooks/page/app-paths-manifest.json +3 -0
  280. package/web/.next/server/app/webhooks/page/build-manifest.json +18 -0
  281. package/web/.next/server/app/webhooks/page/next-font-manifest.json +6 -0
  282. package/web/.next/server/app/webhooks/page/react-loadable-manifest.json +1 -0
  283. package/web/.next/server/app/webhooks/page/server-reference-manifest.json +35 -0
  284. package/web/.next/server/app/webhooks/page.js +16 -0
  285. package/web/.next/server/app/webhooks/page.js.map +5 -0
  286. package/web/.next/server/app/webhooks/page.js.nft.json +1 -0
  287. package/web/.next/server/app/webhooks/page_client-reference-manifest.js +2 -0
  288. package/web/.next/server/app-paths-manifest.json +5 -1
  289. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  290. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  291. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  292. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  293. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js +3 -0
  294. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js.map +1 -0
  295. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js +3 -0
  296. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js.map +1 -0
  297. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js +3 -0
  298. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js.map +1 -0
  299. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js +3 -0
  300. package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js.map +1 -0
  301. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js +3 -0
  302. package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js.map +1 -0
  303. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js +1 -1
  304. package/web/.next/server/chunks/[root-of-the-server]__7d5492a0._.js.map +1 -1
  305. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js +3 -0
  306. package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js.map +1 -0
  307. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  308. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  309. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  311. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js +3 -0
  313. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map +1 -0
  314. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js +3 -0
  315. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_ed372306.js.map +1 -0
  316. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js +3 -0
  317. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_32e26434.js.map +1 -0
  318. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  319. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  320. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  321. package/web/.next/server/chunks/ssr/[root-of-the-server]__172d9576._.js +3 -0
  322. package/web/.next/server/chunks/ssr/[root-of-the-server]__172d9576._.js.map +1 -0
  323. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  324. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  325. package/web/.next/server/chunks/ssr/[root-of-the-server]__2a5592d5._.js +3 -0
  326. package/web/.next/server/chunks/ssr/[root-of-the-server]__2a5592d5._.js.map +1 -0
  327. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js +3 -0
  328. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js.map +1 -0
  329. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  330. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js +3 -0
  331. package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js.map +1 -0
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js +4 -0
  335. package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js +3 -0
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js.map +1 -0
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__a93289b0._.js +3 -0
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__a93289b0._.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac0304e7._.js +3 -0
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__ac0304e7._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  346. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  347. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  348. package/web/.next/server/chunks/ssr/_250a63ae._.js +1 -1
  349. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -1
  350. package/web/.next/server/chunks/ssr/_26b2c311._.js +3 -0
  351. package/web/.next/server/chunks/ssr/_26b2c311._.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/{_f2f36bf9._.js → _719ef347._.js} +2 -2
  353. package/web/.next/server/chunks/ssr/_719ef347._.js.map +1 -0
  354. package/web/.next/server/chunks/ssr/_809c53f6._.js +9 -0
  355. package/web/.next/server/chunks/ssr/_809c53f6._.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  357. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  358. package/web/.next/server/chunks/ssr/_98047ffd._.js +3 -0
  359. package/web/.next/server/chunks/ssr/_98047ffd._.js.map +1 -0
  360. package/web/.next/server/chunks/ssr/_9eea4c51._.js +3 -0
  361. package/web/.next/server/chunks/ssr/_9eea4c51._.js.map +1 -0
  362. package/web/.next/server/chunks/ssr/_a4899a76._.js +3 -0
  363. package/web/.next/server/chunks/ssr/_a4899a76._.js.map +1 -0
  364. package/web/.next/server/chunks/ssr/_b715515b._.js +3 -0
  365. package/web/.next/server/chunks/ssr/{_86617fb9._.js.map → _b715515b._.js.map} +1 -1
  366. package/web/.next/server/chunks/ssr/_b7eb93fc._.js +4 -0
  367. package/web/.next/server/chunks/ssr/_b7eb93fc._.js.map +1 -0
  368. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  369. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  370. package/web/.next/server/chunks/ssr/_e0a01382._.js +3 -0
  371. package/web/.next/server/chunks/ssr/_e0a01382._.js.map +1 -0
  372. package/web/.next/server/chunks/ssr/_f8b36e2c._.js +3 -0
  373. package/web/.next/server/chunks/ssr/_f8b36e2c._.js.map +1 -0
  374. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  375. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  376. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js +3 -0
  377. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js.map +1 -0
  378. package/web/.next/server/chunks/ssr/{_1bb131c4._.js → node_modules__pnpm_747b43ac._.js} +2 -2
  379. package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +1 -0
  380. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js +5 -0
  381. package/web/.next/server/chunks/ssr/src_presentation_web_0835b28e._.js.map +1 -0
  382. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js +3 -0
  383. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_e99d78dd.js.map +1 -0
  384. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  385. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  386. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  387. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  388. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  389. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  390. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  391. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  392. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  393. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  394. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  395. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  396. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js +5 -0
  397. package/web/.next/server/chunks/ssr/src_presentation_web_e8034a29._.js.map +1 -0
  398. package/web/.next/server/middleware-build-manifest.js +4 -4
  399. package/web/.next/server/pages/500.html +2 -2
  400. package/web/.next/server/server-reference-manifest.js +1 -1
  401. package/web/.next/server/server-reference-manifest.json +323 -230
  402. package/web/.next/static/chunks/06b948216df083c1.js +1 -0
  403. package/web/.next/static/chunks/{763f6ecc4593dc10.js → 2ac228556e3d1db4.js} +1 -1
  404. package/web/.next/static/chunks/31f35710932542ef.js +1 -0
  405. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
  406. package/web/.next/static/chunks/4714eb891fa4fd81.js +1 -0
  407. package/web/.next/static/chunks/57094e1cbd326d6c.css +1 -0
  408. package/web/.next/static/chunks/{5225e7b93df59de9.js → 5856c588eb7f21fd.js} +1 -1
  409. package/web/.next/static/chunks/5f6161ceb4263319.js +1 -0
  410. package/web/.next/static/chunks/81f470d21748eafd.js +2 -0
  411. package/web/.next/static/chunks/829305a6e02eff1f.js +1 -0
  412. package/web/.next/static/chunks/97aaeeee72be634b.js +1 -0
  413. package/web/.next/static/chunks/{672e3da3ad26005b.js → 98e3a7cf58fc912a.js} +1 -1
  414. package/web/.next/static/chunks/9a7361e2365b2d8e.js +1 -0
  415. package/web/.next/static/chunks/9af45e885bd4ccef.js +1 -0
  416. package/web/.next/static/chunks/{f32b896b3ceae18d.js → ab8b8f80cbc8366f.js} +2 -2
  417. package/web/.next/static/chunks/c3c3f2c9eb309920.js +1 -0
  418. package/web/.next/static/chunks/c7e793951b20a67f.js +1 -0
  419. package/web/.next/static/chunks/cb2824954c3975b0.js +1 -0
  420. package/web/.next/static/chunks/{053b644519f721f1.js → d3db43fcdbbd9b68.js} +1 -1
  421. package/web/.next/static/chunks/e9621b096a69e4e8.js +11 -0
  422. package/web/.next/static/chunks/fb99c57e6d28a274.js +1 -0
  423. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-b1685b5f87ad1d60.js} +1 -1
  424. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +0 -3
  425. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +0 -1
  426. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +0 -3
  427. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +0 -1
  428. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +0 -3
  429. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +0 -1
  430. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +0 -3
  431. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +0 -1
  432. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +0 -3
  433. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +0 -1
  434. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  435. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js.map +0 -1
  436. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +0 -3
  437. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +0 -1
  438. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +0 -3
  439. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +0 -1
  440. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +0 -1
  441. package/web/.next/server/chunks/ssr/_273d4632._.js +0 -3
  442. package/web/.next/server/chunks/ssr/_273d4632._.js.map +0 -1
  443. package/web/.next/server/chunks/ssr/_6d26a08f._.js +0 -3
  444. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +0 -1
  445. package/web/.next/server/chunks/ssr/_86617fb9._.js +0 -3
  446. package/web/.next/server/chunks/ssr/_a68d7e1c._.js +0 -9
  447. package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +0 -1
  448. package/web/.next/server/chunks/ssr/_b5d0b00e._.js +0 -3
  449. package/web/.next/server/chunks/ssr/_b5d0b00e._.js.map +0 -1
  450. package/web/.next/server/chunks/ssr/_b5fc318a._.js +0 -3
  451. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
  452. package/web/.next/server/chunks/ssr/_f2f36bf9._.js.map +0 -1
  453. package/web/.next/server/chunks/ssr/_f5316e67._.js +0 -3
  454. package/web/.next/server/chunks/ssr/_f5316e67._.js.map +0 -1
  455. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +0 -3
  456. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +0 -1
  457. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +0 -5
  458. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +0 -1
  459. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +0 -5
  460. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +0 -1
  461. package/web/.next/static/chunks/121a2e602cb9df92.js +0 -11
  462. package/web/.next/static/chunks/303a1217006489b9.js +0 -1
  463. package/web/.next/static/chunks/3a806cf059241bc9.js +0 -1
  464. package/web/.next/static/chunks/57b45edf86522369.css +0 -1
  465. package/web/.next/static/chunks/619af41a8d3232e5.js +0 -1
  466. package/web/.next/static/chunks/6770c61692fe5605.js +0 -1
  467. package/web/.next/static/chunks/84a181ff3270fd9f.js +0 -1
  468. package/web/.next/static/chunks/8c3ff8561102a386.js +0 -1
  469. package/web/.next/static/chunks/a1b3371ef3ffd58b.js +0 -2
  470. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +0 -1
  471. package/web/.next/static/chunks/bec349a77c5c5796.js +0 -1
  472. package/web/.next/static/chunks/e85bcc69a4ceb89e.js +0 -1
  473. package/web/.next/static/chunks/ed3a602003bcb31b.js +0 -1
  474. package/web/.next/static/chunks/fcde0cbb2976b933.js +0 -1
  475. /package/web/.next/static/{Ci7i00ReHDH8Xv9NQW3By → T6bpRqj4p37ell4NNYIUl}/_buildManifest.js +0 -0
  476. /package/web/.next/static/{Ci7i00ReHDH8Xv9NQW3By → T6bpRqj4p37ell4NNYIUl}/_clientMiddlewareManifest.json +0 -0
  477. /package/web/.next/static/{Ci7i00ReHDH8Xv9NQW3By → T6bpRqj4p37ell4NNYIUl}/_ssgManifest.js +0 -0
@@ -0,0 +1,21 @@
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
+ }
@@ -0,0 +1,9 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,56 @@
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
+ };
@@ -0,0 +1,6 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,39 @@
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
+ }
@@ -0,0 +1,8 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,59 @@
1
+ import { WebhooksPageClient } from './webhooks-page-client.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: 15,
18
+ successCount: 12,
19
+ errorCount: 1,
20
+ ignoredCount: 2,
21
+ },
22
+ startedAt: new Date(Date.now() - 7200000).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/WebhooksPageClient',
38
+ component: WebhooksPageClient,
39
+ parameters: {
40
+ layout: 'padded',
41
+ mockData: [
42
+ { url: '/api/webhooks/status', method: 'GET', status: 200, response: activeStatus },
43
+ {
44
+ url: '/api/webhooks/deliveries?limit=100',
45
+ method: 'GET',
46
+ status: 200,
47
+ response: { deliveries: [] },
48
+ },
49
+ ],
50
+ },
51
+ tags: ['autodocs'],
52
+ };
53
+ export default meta;
54
+ export const Active = {
55
+ args: { initialStatus: activeStatus },
56
+ };
57
+ export const Inactive = {
58
+ args: { initialStatus: inactiveStatus },
59
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAgHjB"}
1
+ {"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,GACf,EAAE,eAAe,2CAsHjB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { usePathname } from 'next/navigation';
4
- import { Home, Wrench, Puzzle, Settings } from 'lucide-react';
4
+ import { Home, Wrench, Puzzle, Settings, Webhook } from 'lucide-react';
5
5
  import { Sidebar, SidebarHeader, SidebarContent, SidebarMenu, SidebarMenuItem, SidebarRail, useSidebar, } from '../../ui/sidebar.js';
6
6
  import { ScrollArea } from '../../ui/scroll-area.js';
7
7
  import { SidebarNavItem } from '../../common/sidebar-nav-item/index.js';
@@ -29,7 +29,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, }) {
29
29
  'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
30
30
  'transition-opacity duration-200 ease-out',
31
31
  expandedVisible ? 'opacity-100' : 'opacity-0',
32
- ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: "Skills", href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: "Settings", href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
32
+ ].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: "Control Center", href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: "Tools", href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: "Skills", href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Webhook, label: "Webhooks", href: "/webhooks", active: pathname === '/webhooks' }), _jsx(SidebarNavItem, { icon: Settings, label: "Settings", href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
33
33
  'min-w-0 overflow-hidden transition-opacity duration-200 ease-out',
34
34
  '[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
35
35
  expandedVisible ? 'opacity-100' : 'opacity-0',
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { Slider as SliderPrimitive } from 'radix-ui';
3
+ declare function Slider({ className, defaultValue, value, min, max, ...props }: React.ComponentProps<typeof SliderPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ export { Slider };
5
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/slider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAIrD,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,YAAY,EACZ,KAAK,EACL,GAAO,EACP,GAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAyCnD;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Slider as SliderPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/utils.js';
6
+ function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }) {
7
+ const _values = React.useMemo(() => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]), [value, defaultValue, min, max]);
8
+ return (_jsxs(SliderPrimitive.Root, { "data-slot": "slider", defaultValue: defaultValue, value: value, min: min, max: max, className: cn('relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col', className), ...props, children: [_jsx(SliderPrimitive.Track, { "data-slot": "slider-track", className: cn('bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5'), children: _jsx(SliderPrimitive.Range, { "data-slot": "slider-range", className: cn('bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full') }) }), Array.from({ length: _values.length }, (_, index) => (_jsx(SliderPrimitive.Thumb, { "data-slot": "slider-thumb", className: "border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50" }, index)))] }));
9
+ }
10
+ export { Slider };
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Slider } from './slider.js';
3
+ declare const meta: Meta<typeof Slider>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Slider>;
6
+ export declare const Default: Story;
7
+ //# sourceMappingURL=slider.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/slider.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAG7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,MAAM,CAAC,CAAC;AAYrC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Slider } from './slider.js';
4
+ const meta = {
5
+ title: 'UI/Slider',
6
+ component: Slider,
7
+ };
8
+ export default meta;
9
+ function SliderDemo() {
10
+ const [value, setValue] = useState([50]);
11
+ return (_jsxs("div", { style: { width: 300 }, children: [_jsx(Slider, { value: value, onValueChange: setValue, min: 0, max: 100, step: 1 }), _jsxs("p", { style: { marginTop: 8, fontSize: 12 }, children: ["Value: ", value[0]] })] }));
12
+ }
13
+ export const Default = {
14
+ render: () => _jsx(SliderDemo, {}),
15
+ };
@@ -20,6 +20,7 @@ import { initializeSettings } from '../../../packages/core/src/infrastructure/se
20
20
  import { initializeNotificationWatcher, getNotificationWatcher, } from '../../../packages/core/src/infrastructure/services/notifications/notification-watcher.service.js';
21
21
  import { initializePrSyncWatcher, getPrSyncWatcher, } from '../../../packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js';
22
22
  import { getExistingConnection } from '../../../packages/core/src/infrastructure/persistence/sqlite/connection.js';
23
+ import { initializeWebhookManager, getWebhookManager, hasWebhookManager, } from '../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
23
24
  const DEFAULT_PORT = 3000;
24
25
  async function isPortAvailable(port) {
25
26
  return new Promise((resolve) => {
@@ -68,6 +69,17 @@ async function main() {
68
69
  const db = getExistingConnection();
69
70
  initializePrSyncWatcher(featureRepo, runRepo, gitPrService, notificationService, undefined, db);
70
71
  getPrSyncWatcher().start();
72
+ // Start webhook system (optional — falls back to polling if cloudflared is not installed)
73
+ try {
74
+ const tunnelService = container.resolve('ITunnelService');
75
+ const webhookService = container.resolve('IWebhookService');
76
+ initializeWebhookManager(tunnelService, webhookService);
77
+ // Start is async and non-blocking — failures are logged, not thrown
78
+ void getWebhookManager().start(port);
79
+ }
80
+ catch (error) {
81
+ console.warn('[dev-server] Webhook system init failed (using polling fallback):', error);
82
+ }
71
83
  }
72
84
  catch (error) {
73
85
  console.warn('[dev-server] DI initialization failed — features will be empty:', error);
@@ -107,6 +119,14 @@ async function main() {
107
119
  console.log('\n[dev-server] Shutting down...');
108
120
  const forceExit = setTimeout(() => process.exit(0), 2000);
109
121
  try {
122
+ try {
123
+ if (hasWebhookManager()) {
124
+ await getWebhookManager().stop();
125
+ }
126
+ }
127
+ catch {
128
+ /* not initialized */
129
+ }
110
130
  try {
111
131
  getNotificationWatcher().stop();
112
132
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-features-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAgBD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAEzF;AAMD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;CACvD;AAID,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAQjF;AAED,wBAAgB,yBAAyB,IAAI,2BAA2B,CAMvE"}
1
+ {"version":3,"file":"sidebar-features-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/sidebar-features-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAEzF;AAMD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;CACvD;AAID,UAAU,4BAA4B;IACpC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAQjF;AAED,wBAAgB,yBAAyB,IAAI,2BAA2B,CAMvE"}
@@ -9,6 +9,7 @@ const stateMapping = {
9
9
  running: 'in-progress',
10
10
  done: 'done',
11
11
  blocked: 'blocked',
12
+ pending: 'blocked',
12
13
  error: 'error',
13
14
  creating: null,
14
15
  deleting: null,
@@ -1 +1 @@
1
- {"version":3,"file":"use-graph-state.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-graph-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;OAIG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClE,uEAAuE;IACvE,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,kEAAkE;IAClE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F,yDAAyD;IACzD,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,sDAAsD;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uDAAuD;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClE,gCAAgC;IAChC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtF,gEAAgE;IAChE,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,+EAA+E;IAC/E,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD;;;;OAIG;IACH,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B;;;OAGG;IACH,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,0EAA0E;IAC1E,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B;AAuCD,KAAK,kBAAkB,GAAG,OAAO,CAC/B,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC,CACtE,CAAC;AA8BF,wBAAgB,aAAa,CAC3B,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,mBAAmB,CA6ZrB"}
1
+ {"version":3,"file":"use-graph-state.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-graph-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,mDAAmD;IACnD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;OAIG;IACH,SAAS,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClE,uEAAuE;IACvE,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,kEAAkE;IAClE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1F,yDAAyD;IACzD,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,sDAAsD;IACtD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uDAAuD;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClE,gCAAgC;IAChC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtF,gEAAgE;IAChE,wBAAwB,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACxE,yDAAyD;IACzD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAC;IACtE,+EAA+E;IAC/E,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD;;;;OAIG;IACH,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B;;;OAGG;IACH,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,0EAA0E;IAC1E,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B;AAuCD,KAAK,kBAAkB,GAAG,OAAO,CAC/B,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC,CACtE,CAAC;AA8BF,wBAAgB,aAAa,CAC3B,YAAY,EAAE,cAAc,EAAE,EAC9B,YAAY,EAAE,IAAI,EAAE,GACnB,mBAAmB,CA8ZrB"}
@@ -90,6 +90,7 @@ export function useGraphState(initialNodes, initialEdges) {
90
90
  onRepositoryClick: (nodeId) => callbacksRef.current.onRepositoryClick?.(nodeId),
91
91
  onRepositoryDelete: (repositoryId) => callbacksRef.current.onRepositoryDelete?.(repositoryId),
92
92
  onRetryFeature: (featureId) => callbacksRef.current.onRetryFeature?.(featureId),
93
+ onStartFeature: (featureId) => callbacksRef.current.onStartFeature?.(featureId),
93
94
  }), []);
94
95
  // Stable refs for domain Maps (for use in callbacks without depending on state)
95
96
  const featureMapRef = useRef(featureMap);
@@ -37,6 +37,8 @@ export interface GraphCallbacks {
37
37
  onRepositoryDelete?: (repositoryId: string) => void;
38
38
  /** Called when the user retries a failed feature. */
39
39
  onRetryFeature?: (featureId: string) => void;
40
+ /** Called when the user starts a pending feature. */
41
+ onStartFeature?: (featureId: string) => void;
40
42
  }
41
43
  /**
42
44
  * Derives React Flow nodes and edges from domain Maps.
@@ -1 +1 @@
1
- {"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1F,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,qDAAqD;IACrD,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAoJ5C"}
1
+ {"version":3,"file":"derive-graph.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/derive-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1F,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,qDAAqD;IACrD,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,qDAAqD;IACrD,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,SAAS,CAAC,EAAE,cAAc,GACzB;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAyJ5C"}
@@ -102,6 +102,11 @@ export function deriveGraph(featureMap, repoMap, pendingMap, callbacks) {
102
102
  callbacks?.onRetryFeature && {
103
103
  onRetry: callbacks.onRetryFeature,
104
104
  }),
105
+ ...(!isCreating &&
106
+ entry.data.state === 'pending' &&
107
+ callbacks?.onStartFeature && {
108
+ onStart: callbacks.onStartFeature,
109
+ }),
105
110
  };
106
111
  nodes.push({
107
112
  id: nodeId,