@shepai/cli 1.70.2 → 1.72.0

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 (681) hide show
  1. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts +32 -0
  2. package/dist/packages/core/src/application/ports/output/services/deployment-service.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/di/container.js +3 -0
  5. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts +16 -2
  6. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/deployment/deployment.service.js +46 -9
  8. package/dist/packages/core/src/infrastructure/services/deployment/log-ring-buffer.d.ts +23 -0
  9. package/dist/packages/core/src/infrastructure/services/deployment/log-ring-buffer.d.ts.map +1 -0
  10. package/dist/packages/core/src/infrastructure/services/deployment/log-ring-buffer.js +46 -0
  11. package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.d.ts +11 -0
  12. package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.d.ts.map +1 -0
  13. package/dist/src/presentation/web/app/(dashboard)/@drawer/create/page.js +18 -0
  14. package/dist/src/presentation/web/app/(dashboard)/@drawer/default.d.ts +3 -0
  15. package/dist/src/presentation/web/app/(dashboard)/@drawer/default.d.ts.map +1 -0
  16. package/dist/src/presentation/web/app/(dashboard)/@drawer/default.js +4 -0
  17. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts +10 -0
  18. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -0
  19. package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +35 -0
  20. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.d.ts +10 -0
  21. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.d.ts.map +1 -0
  22. package/dist/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +18 -0
  23. package/dist/src/presentation/web/app/(dashboard)/create/page.d.ts +3 -0
  24. package/dist/src/presentation/web/app/(dashboard)/create/page.d.ts.map +1 -0
  25. package/dist/src/presentation/web/app/(dashboard)/create/page.js +4 -0
  26. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/page.d.ts +3 -0
  27. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/page.d.ts.map +1 -0
  28. package/dist/src/presentation/web/app/(dashboard)/feature/[featureId]/page.js +4 -0
  29. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts +7 -0
  30. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -0
  31. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +19 -0
  32. package/dist/src/presentation/web/app/(dashboard)/layout.d.ts +10 -0
  33. package/dist/src/presentation/web/app/(dashboard)/layout.d.ts.map +1 -0
  34. package/dist/src/presentation/web/app/(dashboard)/layout.js +9 -0
  35. package/dist/src/presentation/web/app/(dashboard)/page.d.ts +5 -0
  36. package/dist/src/presentation/web/app/(dashboard)/page.d.ts.map +1 -0
  37. package/dist/src/presentation/web/app/(dashboard)/page.js +6 -0
  38. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/page.d.ts +3 -0
  39. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/page.d.ts.map +1 -0
  40. package/dist/src/presentation/web/app/(dashboard)/repository/[repositoryId]/page.js +4 -0
  41. package/dist/src/presentation/web/app/actions/get-deployment-logs.d.ts +3 -0
  42. package/dist/src/presentation/web/app/actions/get-deployment-logs.d.ts.map +1 -0
  43. package/dist/src/presentation/web/app/actions/get-deployment-logs.js +9 -0
  44. package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts +2 -0
  45. package/dist/src/presentation/web/app/actions/get-feature-artifact.d.ts.map +1 -1
  46. package/dist/src/presentation/web/app/actions/get-feature-artifact.js +23 -1
  47. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts +15 -0
  48. package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -0
  49. package/dist/src/presentation/web/app/api/deployment-logs/route.js +94 -0
  50. package/dist/src/presentation/web/app/build-feature-node-data.d.ts +8 -0
  51. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -0
  52. package/dist/src/presentation/web/app/build-feature-node-data.js +53 -0
  53. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +1 -1
  54. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +33 -3
  56. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts +10 -0
  57. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.d.ts.map +1 -0
  58. package/dist/src/presentation/web/components/common/control-center-drawer/create-drawer-client.js +49 -0
  59. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts +6 -0
  60. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -0
  61. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +388 -0
  62. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +6 -0
  63. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -0
  64. package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +27 -0
  65. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.d.ts +2 -1
  66. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.js +16 -5
  68. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts +4 -0
  69. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.d.ts.map +1 -1
  70. package/dist/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.js +8 -0
  71. package/dist/src/presentation/web/components/common/product-decisions-summary/index.d.ts +3 -0
  72. package/dist/src/presentation/web/components/common/product-decisions-summary/index.d.ts.map +1 -0
  73. package/dist/src/presentation/web/components/common/product-decisions-summary/index.js +1 -0
  74. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary-config.d.ts +23 -0
  75. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary-config.d.ts.map +1 -0
  76. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary-config.js +1 -0
  77. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.d.ts +3 -0
  78. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.d.ts.map +1 -0
  79. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.js +13 -0
  80. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts +14 -0
  81. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.d.ts.map +1 -0
  82. package/dist/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.js +74 -0
  83. package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
  84. package/dist/src/presentation/web/components/common/repository-node/repository-node.js +1 -1
  85. package/dist/src/presentation/web/components/common/server-log-viewer/index.d.ts +2 -0
  86. package/dist/src/presentation/web/components/common/server-log-viewer/index.d.ts.map +1 -0
  87. package/dist/src/presentation/web/components/common/server-log-viewer/index.js +1 -0
  88. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.d.ts +15 -0
  89. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.d.ts.map +1 -0
  90. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.js +31 -0
  91. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts +18 -0
  92. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.d.ts.map +1 -0
  93. package/dist/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.js +113 -0
  94. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +1 -1
  95. package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +1 -1
  97. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts +8 -1
  98. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +11 -2
  100. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +3 -0
  101. package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +1 -0
  102. package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +1 -0
  103. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +17 -0
  104. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +1 -0
  105. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +1 -0
  106. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +3 -0
  107. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +1 -0
  108. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +12 -0
  109. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +16 -0
  110. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +1 -0
  111. package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +110 -0
  112. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +74 -57
  114. package/dist/src/presentation/web/components/features/control-center/control-center.d.ts +4 -1
  115. package/dist/src/presentation/web/components/features/control-center/control-center.d.ts.map +1 -1
  116. package/dist/src/presentation/web/components/features/control-center/control-center.js +3 -3
  117. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +0 -15
  118. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  119. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +5 -146
  120. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +2 -1
  121. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  122. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +7 -1
  123. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  124. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +6 -4
  125. package/dist/src/presentation/web/hooks/use-deployment-logs.d.ts +7 -0
  126. package/dist/src/presentation/web/hooks/use-deployment-logs.d.ts.map +1 -0
  127. package/dist/src/presentation/web/hooks/use-deployment-logs.js +50 -0
  128. package/dist/src/presentation/web/hooks/use-notifications.d.ts.map +1 -1
  129. package/dist/src/presentation/web/hooks/use-notifications.js +8 -5
  130. package/dist/src/presentation/web/hooks/use-selected-feature-id.d.ts +6 -0
  131. package/dist/src/presentation/web/hooks/use-selected-feature-id.d.ts.map +1 -0
  132. package/dist/src/presentation/web/hooks/use-selected-feature-id.js +11 -0
  133. package/dist/tsconfig.build.tsbuildinfo +1 -1
  134. package/package.json +1 -1
  135. package/web/.next/BUILD_ID +1 -1
  136. package/web/.next/app-path-routes-manifest.json +8 -1
  137. package/web/.next/build-manifest.json +5 -5
  138. package/web/.next/cache/.previewinfo +1 -1
  139. package/web/.next/cache/.rscinfo +1 -1
  140. package/web/.next/cache/.tsbuildinfo +1 -1
  141. package/web/.next/cache/config.json +3 -3
  142. package/web/.next/fallback-build-manifest.json +2 -2
  143. package/web/.next/prerender-manifest.json +3 -3
  144. package/web/.next/required-server-files.js +1 -1
  145. package/web/.next/required-server-files.json +1 -1
  146. package/web/.next/routes-manifest.json +28 -0
  147. package/web/.next/server/app/(dashboard)/@drawer/create/page/app-paths-manifest.json +3 -0
  148. package/web/.next/server/app/{page → (dashboard)/@drawer/create/page}/build-manifest.json +3 -3
  149. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +215 -0
  150. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +19 -0
  151. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -0
  152. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +2 -0
  153. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/app-paths-manifest.json +3 -0
  154. package/web/.next/{standalone/src/presentation/web/.next/server/app → server/app/(dashboard)/@drawer/feature/[featureId]}/page/build-manifest.json +3 -3
  155. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +260 -0
  156. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +19 -0
  157. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -0
  158. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +2 -0
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/app-paths-manifest.json +3 -0
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +18 -0
  161. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/next-font-manifest.json +6 -0
  162. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +1 -0
  163. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +185 -0
  164. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +19 -0
  165. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.map +5 -0
  166. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -0
  167. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +2 -0
  168. package/web/.next/server/app/(dashboard)/create/page/app-paths-manifest.json +3 -0
  169. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +18 -0
  170. package/web/.next/server/app/(dashboard)/create/page/next-font-manifest.json +6 -0
  171. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +1 -0
  172. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +215 -0
  173. package/web/.next/server/app/(dashboard)/create/page.js +19 -0
  174. package/web/.next/server/app/(dashboard)/create/page.js.map +5 -0
  175. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -0
  176. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +2 -0
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/app-paths-manifest.json +3 -0
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +18 -0
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/next-font-manifest.json +6 -0
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +1 -0
  181. package/web/.next/server/app/{page → (dashboard)/feature/[featureId]/page}/server-reference-manifest.json +111 -126
  182. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +19 -0
  183. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.map +5 -0
  184. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -0
  185. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +2 -0
  186. package/web/.next/server/app/(dashboard)/page/app-paths-manifest.json +3 -0
  187. package/web/.next/server/app/(dashboard)/page/build-manifest.json +18 -0
  188. package/web/.next/server/app/(dashboard)/page/next-font-manifest.json +6 -0
  189. package/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +1 -0
  190. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +185 -0
  191. package/web/.next/server/app/(dashboard)/page.js +19 -0
  192. package/web/.next/server/app/(dashboard)/page.js.map +5 -0
  193. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -0
  194. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +2 -0
  195. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/app-paths-manifest.json +3 -0
  196. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +18 -0
  197. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/next-font-manifest.json +6 -0
  198. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +1 -0
  199. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +185 -0
  200. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +19 -0
  201. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.map +5 -0
  202. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -0
  203. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +2 -0
  204. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  205. package/web/.next/server/app/_global-error/page.js +1 -1
  206. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  207. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/_global-error.html +2 -2
  209. package/web/.next/server/app/_global-error.rsc +1 -1
  210. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  211. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  212. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  213. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  214. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  215. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  216. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  217. package/web/.next/server/app/_not-found/page.js +1 -1
  218. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  219. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  220. package/web/.next/server/app/api/deployment-logs/route/app-paths-manifest.json +3 -0
  221. package/web/.next/server/app/api/deployment-logs/route/build-manifest.json +11 -0
  222. package/web/.next/server/app/api/deployment-logs/route/server-reference-manifest.json +4 -0
  223. package/web/.next/server/app/api/deployment-logs/route.js +6 -0
  224. package/web/.next/server/app/api/deployment-logs/route.js.map +5 -0
  225. package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -0
  226. package/web/.next/server/app/api/deployment-logs/route_client-reference-manifest.js +2 -0
  227. package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  228. package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  229. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  230. package/web/.next/server/app/skills/page/server-reference-manifest.json +25 -10
  231. package/web/.next/server/app/skills/page.js +2 -2
  232. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  233. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  234. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  235. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  236. package/web/.next/server/app/tools/page.js +2 -2
  237. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  238. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  239. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  240. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  241. package/web/.next/server/app/version/page.js +1 -1
  242. package/web/.next/server/app/version/page.js.nft.json +1 -1
  243. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  244. package/web/.next/server/app-paths-manifest.json +8 -1
  245. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_deployment-logs_route_actions_b785cd3a.js +3 -0
  246. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_deployment-logs_route_actions_b785cd3a.js.map +1 -0
  247. package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js +9 -0
  248. package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js.map +1 -0
  249. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__09413611._.js → server/chunks/[root-of-the-server]__b1f03347._.js} +2 -2
  250. package/web/.next/server/chunks/{[root-of-the-server]__09413611._.js.map → [root-of-the-server]__b1f03347._.js.map} +1 -1
  251. package/web/.next/server/chunks/ssr/403f9_next_d6c8d28d._.js +6 -0
  252. package/web/.next/server/chunks/ssr/403f9_next_d6c8d28d._.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js +4 -0
  254. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js +4 -0
  256. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js.map +1 -0
  257. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js +4 -0
  258. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js +4 -0
  260. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c27615b6.js +4 -0
  262. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c27615b6.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d302115b.js +4 -0
  264. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d302115b.js.map +1 -0
  265. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +3 -0
  266. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -0
  267. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +3 -0
  268. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +3 -0
  270. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js.map +1 -0
  271. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__b79b0516._.js → server/chunks/ssr/[root-of-the-server]__01a37f7a._.js} +2 -2
  272. package/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js +4 -0
  273. package/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js.map +1 -0
  274. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  275. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  276. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +3 -0
  277. package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js.map +1 -0
  278. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  279. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__248ee887._.js → server/chunks/ssr/[root-of-the-server]__3534949f._.js} +2 -2
  280. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b4af5ae._.js +3 -0
  281. package/web/.next/server/chunks/ssr/[root-of-the-server]__3b4af5ae._.js.map +1 -0
  282. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f7f90528._.js → server/chunks/ssr/[root-of-the-server]__55f60c9d._.js} +2 -2
  283. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  284. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +3 -0
  286. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -0
  287. package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +4 -0
  288. package/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js.map +1 -0
  289. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ee2450e._.js +3 -0
  290. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ee2450e._.js.map +1 -0
  291. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  292. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__8a947500._.js +3 -0
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__8a947500._.js.map +1 -0
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +3 -0
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js.map +1 -0
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js +4 -0
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js.map +1 -0
  299. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1efeb0eb._.js → [root-of-the-server]__9d14479b._.js} +2 -2
  300. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1efeb0eb._.js.map → [root-of-the-server]__9d14479b._.js.map} +1 -1
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +3 -0
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js.map +1 -0
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +3 -0
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js.map +1 -0
  305. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_725584e5._.js → server/chunks/ssr/_00e6c698._.js} +2 -2
  306. package/web/.next/server/chunks/ssr/_00e6c698._.js.map +1 -0
  307. package/web/.next/server/chunks/ssr/_13566ff3._.js +3 -0
  308. package/web/.next/server/chunks/ssr/_13566ff3._.js.map +1 -0
  309. package/web/.next/server/chunks/ssr/_250a63ae._.js +3 -0
  310. package/web/.next/server/chunks/ssr/_250a63ae._.js.map +1 -0
  311. package/web/.next/server/chunks/ssr/_326c615c._.js +12 -0
  312. package/web/.next/server/chunks/ssr/_326c615c._.js.map +1 -0
  313. package/web/.next/server/chunks/ssr/_34a58db8._.js +3 -0
  314. package/web/.next/server/chunks/ssr/_34a58db8._.js.map +1 -0
  315. package/web/.next/server/chunks/ssr/{_49bf495c._.js → _37259405._.js} +2 -2
  316. package/web/.next/server/chunks/ssr/_37259405._.js.map +1 -0
  317. package/web/.next/server/chunks/ssr/_85d0351b._.js +3 -0
  318. package/web/.next/server/chunks/ssr/_85d0351b._.js.map +1 -0
  319. package/web/.next/server/chunks/ssr/_ad8a094f._.js +1 -1
  320. package/web/.next/server/chunks/ssr/_cb5b3951._.js +3 -0
  321. package/web/.next/server/chunks/ssr/_cb5b3951._.js.map +1 -0
  322. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_c5d377cc._.js → server/chunks/ssr/_dc379243._.js} +3 -3
  323. package/web/.next/server/chunks/ssr/_dc379243._.js.map +1 -0
  324. package/web/.next/server/chunks/ssr/_fc3a6895._.js +3 -0
  325. package/web/.next/server/chunks/ssr/_fc3a6895._.js.map +1 -0
  326. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +3 -0
  327. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -0
  328. package/web/.next/server/chunks/ssr/node_modules__pnpm_11589942._.js +3 -0
  329. package/web/.next/server/chunks/ssr/node_modules__pnpm_11589942._.js.map +1 -0
  330. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_febcbea6._.js → server/chunks/ssr/node_modules__pnpm_3288606c._.js} +2 -2
  331. package/web/.next/server/chunks/ssr/{node_modules__pnpm_febcbea6._.js.map → node_modules__pnpm_3288606c._.js.map} +1 -1
  332. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +8 -0
  333. package/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js.map +1 -0
  334. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +3 -0
  335. package/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +3 -0
  337. package/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js.map +1 -0
  338. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +3 -0
  339. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_create_page_tsx_c60c859a._.js +3 -0
  341. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_create_page_tsx_c60c859a._.js.map +1 -0
  342. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_page_tsx_797907a1._.js +3 -0
  343. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_page_tsx_797907a1._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_page_tsx_8d870268._.js +3 -0
  345. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_page_tsx_8d870268._.js.map +1 -0
  346. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_repository_[repositoryId]_page_tsx_7d738911._.js +3 -0
  347. package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_repository_[repositoryId]_page_tsx_7d738911._.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +8 -0
  349. package/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js.map +1 -0
  350. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js → server/chunks/ssr/src_presentation_web_ca99d62d._.js} +2 -2
  351. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js +3 -0
  353. package/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js.map +1 -0
  354. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  355. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  356. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +3 -0
  357. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -0
  358. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js +3 -0
  359. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js.map +1 -0
  360. package/web/.next/server/middleware-build-manifest.js +3 -3
  361. package/web/.next/server/pages/500.html +2 -2
  362. package/web/.next/server/server-reference-manifest.js +1 -1
  363. package/web/.next/server/server-reference-manifest.json +695 -120
  364. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  365. package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +8 -1
  366. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
  367. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  368. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  369. package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +28 -0
  370. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/app-paths-manifest.json +3 -0
  371. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +18 -0
  372. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/next-font-manifest.json +6 -0
  373. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +1 -0
  374. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +215 -0
  375. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +19 -0
  376. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.map +5 -0
  377. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -0
  378. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +2 -0
  379. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/app-paths-manifest.json +3 -0
  380. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +18 -0
  381. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/next-font-manifest.json +6 -0
  382. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +1 -0
  383. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +260 -0
  384. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +19 -0
  385. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.map +5 -0
  386. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -0
  387. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +2 -0
  388. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/app-paths-manifest.json +3 -0
  389. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +18 -0
  390. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/next-font-manifest.json +6 -0
  391. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +1 -0
  392. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +185 -0
  393. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +19 -0
  394. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.map +5 -0
  395. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -0
  396. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +2 -0
  397. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/app-paths-manifest.json +3 -0
  398. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +18 -0
  399. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/next-font-manifest.json +6 -0
  400. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +1 -0
  401. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +215 -0
  402. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +19 -0
  403. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.map +5 -0
  404. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -0
  405. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +2 -0
  406. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/app-paths-manifest.json +3 -0
  407. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +18 -0
  408. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/next-font-manifest.json +6 -0
  409. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +1 -0
  410. package/web/.next/standalone/src/presentation/web/.next/server/app/{page → (dashboard)/feature/[featureId]/page}/server-reference-manifest.json +111 -126
  411. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +19 -0
  412. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.map +5 -0
  413. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -0
  414. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +2 -0
  415. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/app-paths-manifest.json +3 -0
  416. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +18 -0
  417. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/next-font-manifest.json +6 -0
  418. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/react-loadable-manifest.json +1 -0
  419. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +185 -0
  420. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +19 -0
  421. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.map +5 -0
  422. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -0
  423. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +2 -0
  424. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/app-paths-manifest.json +3 -0
  425. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +18 -0
  426. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/next-font-manifest.json +6 -0
  427. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +1 -0
  428. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +185 -0
  429. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +19 -0
  430. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.map +5 -0
  431. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -0
  432. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +2 -0
  433. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  434. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +1 -1
  435. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  436. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  437. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  438. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  439. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  440. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  441. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  442. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  443. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  444. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  445. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  446. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +1 -1
  447. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  448. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  449. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route/app-paths-manifest.json +3 -0
  450. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route/build-manifest.json +11 -0
  451. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route/server-reference-manifest.json +4 -0
  452. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route.js +6 -0
  453. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route.js.map +5 -0
  454. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -0
  455. package/web/.next/standalone/src/presentation/web/.next/server/app/api/deployment-logs/route_client-reference-manifest.js +2 -0
  456. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
  457. package/web/.next/standalone/src/presentation/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
  458. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
  459. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +25 -10
  460. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +2 -2
  461. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  462. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  463. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
  464. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  465. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +2 -2
  466. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  467. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  468. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
  469. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  470. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +1 -1
  471. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  472. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  473. package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +8 -1
  474. package/web/.next/standalone/src/presentation/web/.next/server/chunks/744ca_web__next-internal_server_app_api_deployment-logs_route_actions_b785cd3a.js +3 -0
  475. package/web/.next/standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js +9 -0
  476. package/web/.next/{server/chunks/[root-of-the-server]__09413611._.js → standalone/src/presentation/web/.next/server/chunks/[root-of-the-server]__b1f03347._.js} +2 -2
  477. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_d6c8d28d._.js +6 -0
  478. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js +4 -0
  479. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js +4 -0
  480. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js +4 -0
  481. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js +4 -0
  482. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c27615b6.js +4 -0
  483. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d302115b.js +4 -0
  484. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +3 -0
  485. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_2b7834f6.js +3 -0
  486. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_6923c575.js +3 -0
  487. package/web/.next/{server/chunks/ssr/[root-of-the-server]__b79b0516._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__01a37f7a._.js} +2 -2
  488. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__07385073._.js +4 -0
  489. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  490. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +3 -0
  491. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  492. package/web/.next/{server/chunks/ssr/[root-of-the-server]__248ee887._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__3534949f._.js} +2 -2
  493. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__3b4af5ae._.js +3 -0
  494. package/web/.next/{server/chunks/ssr/[root-of-the-server]__f7f90528._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__55f60c9d._.js} +2 -2
  495. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  496. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +3 -0
  497. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6db85a66._.js +4 -0
  498. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6ee2450e._.js +3 -0
  499. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  500. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8a947500._.js +3 -0
  501. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8c1a3d66._.js +3 -0
  502. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8fcb9132._.js +4 -0
  503. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__1efeb0eb._.js → [root-of-the-server]__9d14479b._.js} +2 -2
  504. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d4e51258._.js +3 -0
  505. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fe2a7deb._.js +3 -0
  506. package/web/.next/{server/chunks/ssr/_725584e5._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_00e6c698._.js} +2 -2
  507. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_13566ff3._.js +3 -0
  508. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_250a63ae._.js +3 -0
  509. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_326c615c._.js +12 -0
  510. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_34a58db8._.js +3 -0
  511. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_49bf495c._.js → _37259405._.js} +2 -2
  512. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85d0351b._.js +3 -0
  513. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ad8a094f._.js +1 -1
  514. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_cb5b3951._.js +3 -0
  515. package/web/.next/{server/chunks/ssr/_c5d377cc._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_dc379243._.js} +3 -3
  516. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_fc3a6895._.js +3 -0
  517. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +3 -0
  518. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_11589942._.js +3 -0
  519. package/web/.next/{server/chunks/ssr/node_modules__pnpm_febcbea6._.js → standalone/src/presentation/web/.next/server/chunks/ssr/node_modules__pnpm_3288606c._.js} +2 -2
  520. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_1a32dbcb._.js +8 -0
  521. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_398553b0._.js +3 -0
  522. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_5c87e8e4._.js +3 -0
  523. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_f4952172.js +3 -0
  524. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_create_page_tsx_c60c859a._.js +3 -0
  525. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_feature_[featureId]_page_tsx_797907a1._.js +3 -0
  526. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_page_tsx_8d870268._.js +3 -0
  527. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_repository_[repositoryId]_page_tsx_7d738911._.js +3 -0
  528. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_c1bc6240._.js +8 -0
  529. package/web/.next/{server/chunks/ssr/src_presentation_web_ed0934e5._.js → standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js} +2 -2
  530. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_5124369c._.js +3 -0
  531. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  532. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +3 -0
  533. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js +3 -0
  534. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
  535. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  536. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  537. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +695 -120
  538. package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/create/page.tsx +35 -0
  539. package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/default.tsx +4 -0
  540. package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.tsx +46 -0
  541. package/web/.next/standalone/src/presentation/web/app/(dashboard)/@drawer/repository/[repositoryId]/page.tsx +29 -0
  542. package/web/.next/standalone/src/presentation/web/app/(dashboard)/create/page.tsx +4 -0
  543. package/web/.next/standalone/src/presentation/web/app/(dashboard)/feature/[featureId]/page.tsx +4 -0
  544. package/web/.next/standalone/src/presentation/web/app/{page.tsx → (dashboard)/get-graph-data.ts} +4 -13
  545. package/web/.next/standalone/src/presentation/web/app/(dashboard)/layout.tsx +22 -0
  546. package/web/.next/standalone/src/presentation/web/app/(dashboard)/page.tsx +7 -0
  547. package/web/.next/standalone/src/presentation/web/app/(dashboard)/repository/[repositoryId]/page.tsx +4 -0
  548. package/web/.next/standalone/src/presentation/web/app/actions/get-deployment-logs.ts +16 -0
  549. package/web/.next/standalone/src/presentation/web/app/actions/get-feature-artifact.ts +26 -1
  550. package/web/.next/standalone/src/presentation/web/app/api/deployment-logs/route.ts +112 -0
  551. package/web/.next/standalone/src/presentation/web/app/build-feature-node-data.ts +63 -0
  552. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +5 -1
  553. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +42 -4
  554. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/create-drawer-client.tsx +87 -0
  555. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +721 -0
  556. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx +98 -0
  557. package/web/.next/standalone/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.stories.tsx +10 -0
  558. package/web/.next/standalone/src/presentation/web/components/common/deployment-status-badge/deployment-status-badge.tsx +76 -23
  559. package/web/.next/standalone/src/presentation/web/components/common/product-decisions-summary/index.ts +6 -0
  560. package/web/.next/standalone/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary-config.ts +24 -0
  561. package/web/.next/standalone/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.stories.tsx +87 -0
  562. package/web/.next/standalone/src/presentation/web/components/common/product-decisions-summary/product-decisions-summary.tsx +52 -0
  563. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +5 -1
  564. package/web/.next/standalone/src/presentation/web/components/common/server-log-viewer/index.ts +6 -0
  565. package/web/.next/standalone/src/presentation/web/components/common/server-log-viewer/server-log-viewer.stories.tsx +168 -0
  566. package/web/.next/standalone/src/presentation/web/components/common/server-log-viewer/server-log-viewer.tsx +110 -0
  567. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/index.ts +1 -1
  568. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +46 -28
  569. package/web/.next/standalone/src/presentation/web/components/common/tech-review-tabs/index.ts +2 -0
  570. package/web/.next/standalone/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.ts +17 -0
  571. package/web/.next/standalone/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.tsx +129 -0
  572. package/web/.next/standalone/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.tsx +60 -0
  573. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +89 -87
  574. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center.tsx +5 -1
  575. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +5 -197
  576. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +9 -0
  577. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +11 -5
  578. package/web/.next/standalone/src/presentation/web/hooks/use-deployment-logs.ts +67 -0
  579. package/web/.next/standalone/src/presentation/web/hooks/use-notifications.ts +13 -12
  580. package/web/.next/standalone/src/presentation/web/hooks/use-selected-feature-id.ts +13 -0
  581. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  582. package/web/.next/static/chunks/{c1c15470a7b058c8.js → 07fcc6d17357e905.js} +1 -1
  583. package/web/.next/static/chunks/224ed5f5dbd33154.css +2 -0
  584. package/web/.next/static/chunks/3b841f29db9a3da9.js +1 -0
  585. package/web/.next/static/chunks/{87421ab1062a39b7.js → 3e1227e02ef8bcc6.js} +2 -2
  586. package/web/.next/static/chunks/3e46df89d84cae41.js +1 -0
  587. package/web/.next/static/chunks/424982cd78174a1a.js +1 -0
  588. package/web/.next/static/chunks/47435830535491e8.js +1 -0
  589. package/web/.next/static/chunks/4ad5002ab597037c.js +1 -0
  590. package/web/.next/static/chunks/5f5c607ffae8b918.js +1 -0
  591. package/web/.next/static/chunks/64d73952a0291431.js +1 -0
  592. package/web/.next/static/chunks/782a2a325d33916e.js +1 -0
  593. package/web/.next/static/chunks/938c21b0cefb2b1d.js +1 -0
  594. package/web/.next/static/chunks/c1e2dd0ea2411684.js +1 -0
  595. package/web/.next/static/chunks/d063d1ee549e36c1.js +1 -0
  596. package/web/.next/static/chunks/d58c232421d2eb76.js +10 -0
  597. package/web/.next/static/chunks/d5aa17e7271ca056.js +1 -0
  598. package/web/.next/static/chunks/e44849eb58a3335f.js +1 -0
  599. package/web/.next/static/chunks/eab4c5668703be61.js +1 -0
  600. package/web/.next/static/chunks/f76236b7baf672dc.js +1 -0
  601. package/web/.next/static/chunks/{turbopack-958ac34b879d0dce.js → turbopack-3a8fe0e18e69b0ab.js} +1 -1
  602. package/web/.next/trace +1 -1
  603. package/web/.next/trace-build +1 -1
  604. package/web/.next/types/link.d.ts +4 -0
  605. package/web/.next/types/routes.d.ts +7 -3
  606. package/web/.next/types/validator.ts +74 -2
  607. package/dist/src/presentation/web/app/page.d.ts +0 -4
  608. package/dist/src/presentation/web/app/page.d.ts.map +0 -1
  609. package/dist/src/presentation/web/app/page.js +0 -25
  610. package/web/.next/server/app/page/app-paths-manifest.json +0 -3
  611. package/web/.next/server/app/page.js +0 -16
  612. package/web/.next/server/app/page.js.nft.json +0 -1
  613. package/web/.next/server/app/page_client-reference-manifest.js +0 -2
  614. package/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js +0 -3
  615. package/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js.map +0 -1
  616. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ffb27f1._.js +0 -3
  617. package/web/.next/server/chunks/ssr/[root-of-the-server]__2ffb27f1._.js.map +0 -1
  618. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +0 -4
  619. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +0 -1
  620. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +0 -3
  621. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js.map +0 -1
  622. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +0 -12
  623. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +0 -1
  624. package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +0 -9
  625. package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js.map +0 -1
  626. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +0 -3
  627. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js.map +0 -1
  628. package/web/.next/server/chunks/ssr/_28993370._.js +0 -3
  629. package/web/.next/server/chunks/ssr/_28993370._.js.map +0 -1
  630. package/web/.next/server/chunks/ssr/_49bf495c._.js.map +0 -1
  631. package/web/.next/server/chunks/ssr/_68b5e0de._.js +0 -6
  632. package/web/.next/server/chunks/ssr/_68b5e0de._.js.map +0 -1
  633. package/web/.next/server/chunks/ssr/_690ea95f._.js +0 -3
  634. package/web/.next/server/chunks/ssr/_690ea95f._.js.map +0 -1
  635. package/web/.next/server/chunks/ssr/_725584e5._.js.map +0 -1
  636. package/web/.next/server/chunks/ssr/_c5d377cc._.js.map +0 -1
  637. package/web/.next/server/chunks/ssr/_ed9132c9._.js +0 -3
  638. package/web/.next/server/chunks/ssr/_ed9132c9._.js.map +0 -1
  639. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +0 -3
  640. package/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js.map +0 -1
  641. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +0 -1
  642. package/web/.next/standalone/src/presentation/web/.next/server/app/page/app-paths-manifest.json +0 -3
  643. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +0 -16
  644. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +0 -1
  645. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +0 -2
  646. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/6769f_@radix-ui_react-roving-focus_dist_index_mjs_b3be3d8e._.js +0 -3
  647. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2ffb27f1._.js +0 -3
  648. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +0 -4
  649. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +0 -3
  650. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +0 -12
  651. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +0 -9
  652. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +0 -3
  653. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +0 -3
  654. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_68b5e0de._.js +0 -6
  655. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_690ea95f._.js +0 -3
  656. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_ed9132c9._.js +0 -3
  657. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_0286756b._.js +0 -3
  658. package/web/.next/static/chunks/09e70c24eceecf48.js +0 -10
  659. package/web/.next/static/chunks/2eae41f87676d999.js +0 -1
  660. package/web/.next/static/chunks/4b357783626e0916.js +0 -1
  661. package/web/.next/static/chunks/505c6a9e4c5d0808.js +0 -1
  662. package/web/.next/static/chunks/51c94a563ecc565d.js +0 -1
  663. package/web/.next/static/chunks/7ad36bef63f15bc6.js +0 -1
  664. package/web/.next/static/chunks/a186bbb822ccb655.css +0 -2
  665. package/web/.next/static/chunks/a5c59952485e875e.js +0 -1
  666. package/web/.next/static/chunks/a9626385607910b3.js +0 -1
  667. package/web/.next/static/chunks/b581320ecaa97e4a.js +0 -1
  668. package/web/.next/static/chunks/d4379644a6145352.js +0 -1
  669. package/web/.next/static/chunks/fb703cf73aba2eb8.js +0 -1
  670. /package/web/.next/server/app/{page → (dashboard)/@drawer/create/page}/next-font-manifest.json +0 -0
  671. /package/web/.next/server/app/{page → (dashboard)/@drawer/create/page}/react-loadable-manifest.json +0 -0
  672. /package/web/.next/server/app/{page.js.map → (dashboard)/@drawer/create/page.js.map} +0 -0
  673. /package/web/.next/{standalone/src/presentation/web/.next/server/app → server/app/(dashboard)/@drawer/feature/[featureId]}/page/next-font-manifest.json +0 -0
  674. /package/web/.next/{standalone/src/presentation/web/.next/server/app → server/app/(dashboard)/@drawer/feature/[featureId]}/page/react-loadable-manifest.json +0 -0
  675. /package/web/.next/{standalone/src/presentation/web/.next/server/app → server/app/(dashboard)/@drawer/feature/[featureId]}/page.js.map +0 -0
  676. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__b79b0516._.js.map → [root-of-the-server]__01a37f7a._.js.map} +0 -0
  677. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__248ee887._.js.map → [root-of-the-server]__3534949f._.js.map} +0 -0
  678. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__f7f90528._.js.map → [root-of-the-server]__55f60c9d._.js.map} +0 -0
  679. /package/web/.next/static/{MoPU_ZZ5QcyEys7Gfl_6r → cheZlPwpJASMO-UbgLmQk}/_buildManifest.js +0 -0
  680. /package/web/.next/static/{MoPU_ZZ5QcyEys7Gfl_6r → cheZlPwpJASMO-UbgLmQk}/_clientMiddlewareManifest.json +0 -0
  681. /package/web/.next/static/{MoPU_ZZ5QcyEys7Gfl_6r → cheZlPwpJASMO-UbgLmQk}/_ssgManifest.js +0 -0
@@ -0,0 +1,35 @@
1
+ import { resolve } from '@/lib/server-container';
2
+ import type { ListFeaturesUseCase } from '@shepai/core/application/use-cases/features/list-features.use-case';
3
+ import { getWorkflowDefaults } from '@/app/actions/get-workflow-defaults';
4
+ import { CreateDrawerClient } from '@/components/common/control-center-drawer/create-drawer-client';
5
+
6
+ /** Skip static pre-rendering since we need runtime DI container. */
7
+ export const dynamic = 'force-dynamic';
8
+
9
+ interface CreateDrawerPageProps {
10
+ searchParams: Promise<{ repo?: string; parent?: string }>;
11
+ }
12
+
13
+ export default async function CreateDrawerPage({ searchParams }: CreateDrawerPageProps) {
14
+ const { repo, parent } = await searchParams;
15
+
16
+ const listFeatures = resolve<ListFeaturesUseCase>('ListFeaturesUseCase');
17
+
18
+ const [features, workflowDefaults] = await Promise.all([
19
+ listFeatures.execute(),
20
+ getWorkflowDefaults().catch(() => undefined),
21
+ ]);
22
+
23
+ const featureOptions = features
24
+ .map((f) => ({ id: f.id, name: f.name }))
25
+ .filter((f) => f.id && !f.id.startsWith('#'));
26
+
27
+ return (
28
+ <CreateDrawerClient
29
+ repositoryPath={repo ?? ''}
30
+ initialParentId={parent}
31
+ features={featureOptions}
32
+ workflowDefaults={workflowDefaults}
33
+ />
34
+ );
35
+ }
@@ -0,0 +1,4 @@
1
+ /** No drawer when the URL doesn't match any drawer route (e.g. `/`). */
2
+ export default function DrawerDefault() {
3
+ return null;
4
+ }
@@ -0,0 +1,46 @@
1
+ import { resolve } from '@/lib/server-container';
2
+ import type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';
3
+ import type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';
4
+ import { buildFeatureNodeData } from '@/app/build-feature-node-data';
5
+ import { computeDrawerView } from '@/components/common/control-center-drawer/drawer-view';
6
+ import { FeatureDrawerClient } from '@/components/common/control-center-drawer/feature-drawer-client';
7
+
8
+ /** Skip static pre-rendering since we need runtime DI container. */
9
+ export const dynamic = 'force-dynamic';
10
+
11
+ interface FeatureDrawerPageProps {
12
+ params: Promise<{ featureId: string }>;
13
+ }
14
+
15
+ export default async function FeatureDrawerPage({ params }: FeatureDrawerPageProps) {
16
+ const { featureId } = await params;
17
+
18
+ try {
19
+ const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');
20
+ const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');
21
+
22
+ const feature = await featureRepo.findById(featureId);
23
+ if (!feature) return null;
24
+
25
+ const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;
26
+
27
+ const nodeData = buildFeatureNodeData(feature, run);
28
+
29
+ const view = computeDrawerView({
30
+ selectedNode: nodeData,
31
+ isCreateDrawerOpen: false,
32
+ pendingRepositoryPath: '',
33
+ pendingParentFeatureId: undefined,
34
+ selectedRepoNode: null,
35
+ features: [],
36
+ workflowDefaults: undefined,
37
+ });
38
+
39
+ if (!view) return null;
40
+
41
+ return <FeatureDrawerClient view={view} />;
42
+ } catch {
43
+ // Feature not found — render nothing (drawer stays closed)
44
+ return null;
45
+ }
46
+ }
@@ -0,0 +1,29 @@
1
+ import { resolve } from '@/lib/server-container';
2
+ import type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';
3
+ import { RepositoryDrawerClient } from '@/components/common/control-center-drawer/repository-drawer-client';
4
+
5
+ /** Skip static pre-rendering since we need runtime DI container. */
6
+ export const dynamic = 'force-dynamic';
7
+
8
+ interface RepositoryDrawerPageProps {
9
+ params: Promise<{ repositoryId: string }>;
10
+ }
11
+
12
+ export default async function RepositoryDrawerPage({ params }: RepositoryDrawerPageProps) {
13
+ const { repositoryId } = await params;
14
+
15
+ try {
16
+ const repoRepository = resolve<IRepositoryRepository>('IRepositoryRepository');
17
+ const repository = await repoRepository.findById(repositoryId);
18
+
19
+ if (!repository) return null;
20
+
21
+ return (
22
+ <RepositoryDrawerClient
23
+ data={{ name: repository.name, repositoryPath: repository.path, id: repository.id }}
24
+ />
25
+ );
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
@@ -0,0 +1,4 @@
1
+ /** Children slot stub — canvas is rendered by the layout. */
2
+ export default function CreatePage() {
3
+ return null;
4
+ }
@@ -0,0 +1,4 @@
1
+ /** Children slot stub — canvas is rendered by the layout. */
2
+ export default function FeaturePage() {
3
+ return null;
4
+ }
@@ -1,15 +1,13 @@
1
- import { ControlCenter } from '@/components/features/control-center';
2
1
  import { resolve } from '@/lib/server-container';
3
2
  import type { ListFeaturesUseCase } from '@shepai/core/application/use-cases/features/list-features.use-case';
4
3
  import type { ListRepositoriesUseCase } from '@shepai/core/application/use-cases/repositories/list-repositories.use-case';
5
4
  import type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';
6
5
  import { layoutWithDagre } from '@/lib/layout-with-dagre';
7
6
  import { buildGraphNodes } from '@/app/build-graph-nodes';
7
+ import type { CanvasNodeType } from '@/components/features/features-canvas';
8
+ import type { Edge } from '@xyflow/react';
8
9
 
9
- /** Skip static pre-rendering since we need runtime DI container and server context. */
10
- export const dynamic = 'force-dynamic';
11
-
12
- export default async function HomePage() {
10
+ export async function getGraphData(): Promise<{ nodes: CanvasNodeType[]; edges: Edge[] }> {
13
11
  const listFeatures = resolve<ListFeaturesUseCase>('ListFeaturesUseCase');
14
12
  const listRepos = resolve<ListRepositoriesUseCase>('ListRepositoriesUseCase');
15
13
  const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');
@@ -25,16 +23,9 @@ export default async function HomePage() {
25
23
 
26
24
  const { nodes, edges } = buildGraphNodes(repositories, featuresWithRuns);
27
25
 
28
- // Use dagre LR layout for compact, automatic positioning
29
- const laid = layoutWithDagre(nodes, edges, {
26
+ return layoutWithDagre(nodes, edges, {
30
27
  direction: 'LR',
31
28
  ranksep: 200,
32
29
  nodesep: 15,
33
30
  });
34
-
35
- return (
36
- <div className="h-screen w-full">
37
- <ControlCenter initialNodes={laid.nodes} initialEdges={laid.edges} />
38
- </div>
39
- );
40
31
  }
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+ import { ControlCenter } from '@/components/features/control-center';
3
+ import { getGraphData } from './get-graph-data';
4
+
5
+ /** Skip static pre-rendering since we need runtime DI container and server context. */
6
+ export const dynamic = 'force-dynamic';
7
+
8
+ interface DashboardLayoutProps {
9
+ children: ReactNode;
10
+ drawer: ReactNode;
11
+ }
12
+
13
+ export default async function DashboardLayout({ children, drawer }: DashboardLayoutProps) {
14
+ const { nodes, edges } = await getGraphData();
15
+
16
+ return (
17
+ <div className="h-screen w-full">
18
+ <ControlCenter initialNodes={nodes} initialEdges={edges} drawer={drawer} />
19
+ {children}
20
+ </div>
21
+ );
22
+ }
@@ -0,0 +1,7 @@
1
+ /** Skip static pre-rendering since we need runtime DI container and server context. */
2
+ export const dynamic = 'force-dynamic';
3
+
4
+ /** Canvas is rendered by the layout; this page is just a route target for `/`. */
5
+ export default function HomePage() {
6
+ return null;
7
+ }
@@ -0,0 +1,4 @@
1
+ /** Children slot stub — canvas is rendered by the layout. */
2
+ export default function RepositoryPage() {
3
+ return null;
4
+ }
@@ -0,0 +1,16 @@
1
+ 'use server';
2
+
3
+ import { resolve } from '@/lib/server-container';
4
+ import type {
5
+ IDeploymentService,
6
+ LogEntry,
7
+ } from '@shepai/core/application/ports/output/services/deployment-service.interface';
8
+
9
+ export async function getDeploymentLogs(targetId: string): Promise<LogEntry[] | null> {
10
+ if (!targetId?.trim()) {
11
+ return null;
12
+ }
13
+
14
+ const deploymentService = resolve<IDeploymentService>('IDeploymentService');
15
+ return deploymentService.getLogs(targetId);
16
+ }
@@ -4,9 +4,11 @@ import { resolve } from '@/lib/server-container';
4
4
  import type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';
5
5
  import type { FeatureArtifact } from '@shepai/core/domain/generated/output';
6
6
  import type { PrdQuestionnaireData } from '@shepai/core/domain/generated/output';
7
+ import type { ProductDecisionsSummaryData } from '@/components/common/product-decisions-summary';
7
8
 
8
9
  interface GetFeatureArtifactResult {
9
10
  questionnaire?: PrdQuestionnaireData;
11
+ productDecisions?: ProductDecisionsSummaryData;
10
12
  artifact?: FeatureArtifact;
11
13
  error?: string;
12
14
  }
@@ -38,6 +40,28 @@ function toQuestionnaireData(artifact: FeatureArtifact): PrdQuestionnaireData {
38
40
  };
39
41
  }
40
42
 
43
+ /**
44
+ * Map FeatureArtifact openQuestions into a read-only summary for the
45
+ * Product Decisions tab in the tech review drawer.
46
+ */
47
+ function toProductDecisionsData(artifact: FeatureArtifact): ProductDecisionsSummaryData {
48
+ return {
49
+ question: 'Goal',
50
+ context: artifact.oneLiner,
51
+ questions: artifact.openQuestions
52
+ .filter((oq) => oq.resolved)
53
+ .map((oq) => {
54
+ const selected = oq.options?.find((o) => o.selected);
55
+ return {
56
+ question: oq.question,
57
+ selectedOption: selected?.option ?? oq.answer ?? 'N/A',
58
+ rationale: oq.selectionRationale ?? selected?.description ?? '',
59
+ wasRecommended: false,
60
+ };
61
+ }),
62
+ };
63
+ }
64
+
41
65
  export async function getFeatureArtifact(featureId: string): Promise<GetFeatureArtifactResult> {
42
66
  if (!featureId.trim()) {
43
67
  return { error: 'Feature id is required' };
@@ -47,7 +71,8 @@ export async function getFeatureArtifact(featureId: string): Promise<GetFeatureA
47
71
  const useCase = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');
48
72
  const artifact = await useCase.execute(featureId);
49
73
  const questionnaire = toQuestionnaireData(artifact);
50
- return { questionnaire, artifact };
74
+ const productDecisions = toProductDecisionsData(artifact);
75
+ return { questionnaire, productDecisions, artifact };
51
76
  } catch (error: unknown) {
52
77
  const message = error instanceof Error ? error.message : 'Failed to load feature artifact';
53
78
  return { error: message };
@@ -0,0 +1,112 @@
1
+ /**
2
+ * SSE API Route: GET /api/deployment-logs
3
+ *
4
+ * Streams deployment log events to the client via Server-Sent Events.
5
+ * Subscribes to the DeploymentService EventEmitter for real-time log
6
+ * entries, filtered by targetId.
7
+ *
8
+ * - Accepts ?targetId query parameter (required)
9
+ * - Sends log entries as SSE "log" events
10
+ * - Sends heartbeat comments every 30 seconds to keep connection alive
11
+ * - Cleans up EventEmitter subscription on client disconnect
12
+ */
13
+
14
+ import { resolve } from '@/lib/server-container';
15
+ import type {
16
+ IDeploymentService,
17
+ LogEntry,
18
+ } from '@shepai/core/application/ports/output/services/deployment-service.interface';
19
+
20
+ // Force dynamic — SSE streams must never be statically optimized or cached
21
+ export const dynamic = 'force-dynamic';
22
+
23
+ const HEARTBEAT_INTERVAL_MS = 30_000;
24
+
25
+ export function GET(request: Request): Response {
26
+ try {
27
+ const url = new URL(request.url);
28
+ const targetId = url.searchParams.get('targetId');
29
+
30
+ if (!targetId?.trim()) {
31
+ const errorStream = new ReadableStream<Uint8Array>({
32
+ start(controller) {
33
+ const encoder = new TextEncoder();
34
+ controller.enqueue(
35
+ encoder.encode(
36
+ `event: error\ndata: ${JSON.stringify({ error: 'targetId is required' })}\n\n`
37
+ )
38
+ );
39
+ controller.close();
40
+ },
41
+ });
42
+
43
+ return new Response(errorStream, {
44
+ headers: {
45
+ 'Content-Type': 'text/event-stream',
46
+ 'Cache-Control': 'no-cache',
47
+ Connection: 'keep-alive',
48
+ },
49
+ });
50
+ }
51
+
52
+ const stream = new ReadableStream<Uint8Array>({
53
+ start(controller) {
54
+ const encoder = new TextEncoder();
55
+ let stopped = false;
56
+
57
+ function enqueue(text: string) {
58
+ if (stopped) return;
59
+ try {
60
+ controller.enqueue(encoder.encode(text));
61
+ } catch {
62
+ // Stream may be closed
63
+ }
64
+ }
65
+
66
+ const deploymentService = resolve<IDeploymentService>('IDeploymentService');
67
+
68
+ // Subscribe to log events, filtering by targetId
69
+ const logHandler = (entry: LogEntry) => {
70
+ if (entry.targetId !== targetId) return;
71
+ enqueue(`event: log\ndata: ${JSON.stringify(entry)}\n\n`);
72
+ };
73
+
74
+ deploymentService.on('log', logHandler);
75
+
76
+ // Heartbeat to keep connection alive
77
+ const heartbeatInterval = setInterval(() => {
78
+ enqueue(': heartbeat\n\n');
79
+ }, HEARTBEAT_INTERVAL_MS);
80
+
81
+ // Cleanup on client disconnect
82
+ const cleanup = () => {
83
+ stopped = true;
84
+ deploymentService.off('log', logHandler);
85
+ clearInterval(heartbeatInterval);
86
+ try {
87
+ controller.close();
88
+ } catch {
89
+ // Stream may already be closed
90
+ }
91
+ };
92
+
93
+ request.signal.addEventListener('abort', cleanup, { once: true });
94
+ },
95
+ });
96
+
97
+ return new Response(stream, {
98
+ headers: {
99
+ 'Content-Type': 'text/event-stream',
100
+ 'Cache-Control': 'no-cache',
101
+ Connection: 'keep-alive',
102
+ },
103
+ });
104
+ } catch (error) {
105
+ // eslint-disable-next-line no-console
106
+ console.error('[SSE route] GET /api/deployment-logs error:', error);
107
+ return new Response(JSON.stringify({ error: String(error) }), {
108
+ status: 500,
109
+ headers: { 'Content-Type': 'application/json' },
110
+ });
111
+ }
112
+ }
@@ -0,0 +1,63 @@
1
+ import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';
2
+ import {
3
+ deriveNodeState,
4
+ deriveProgress,
5
+ } from '@/components/common/feature-node/derive-feature-state';
6
+ import type { FeatureNodeData, FeatureLifecyclePhase } from '@/components/common/feature-node';
7
+
8
+ /** Map domain SdlcLifecycle enum values to UI FeatureLifecyclePhase (1:1). */
9
+ const lifecycleMap: Record<string, FeatureLifecyclePhase> = {
10
+ Requirements: 'requirements',
11
+ Research: 'research',
12
+ Implementation: 'implementation',
13
+ Review: 'review',
14
+ 'Deploy & QA': 'deploy',
15
+ Maintain: 'maintain',
16
+ };
17
+
18
+ /** Map agent graph node names (from agent_run.result) to UI lifecycle phases. */
19
+ const nodeToLifecyclePhase: Record<string, FeatureLifecyclePhase> = {
20
+ analyze: 'requirements',
21
+ requirements: 'requirements',
22
+ research: 'research',
23
+ plan: 'implementation',
24
+ implement: 'implementation',
25
+ merge: 'review',
26
+ };
27
+
28
+ /**
29
+ * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.
30
+ * This is the single-feature version of the logic in `buildGraphNodes`.
31
+ */
32
+ export function buildFeatureNodeData(feature: Feature, run: AgentRun | null): FeatureNodeData {
33
+ const agentNode = run?.result?.startsWith('node:') ? run.result.slice(5) : undefined;
34
+ const lifecycle: FeatureLifecyclePhase =
35
+ run?.status === 'completed'
36
+ ? 'maintain'
37
+ : ((agentNode ? nodeToLifecyclePhase[agentNode] : undefined) ??
38
+ lifecycleMap[feature.lifecycle] ??
39
+ 'requirements');
40
+
41
+ return {
42
+ name: feature.name,
43
+ description: feature.description ?? feature.slug,
44
+ featureId: feature.id,
45
+ lifecycle,
46
+ repositoryPath: feature.repositoryPath,
47
+ branch: feature.branch,
48
+ specPath: feature.specPath,
49
+ state: deriveNodeState(feature, run),
50
+ progress: deriveProgress(feature),
51
+ ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),
52
+ ...(run?.error && { errorMessage: run.error }),
53
+ ...(feature.pr && {
54
+ pr: {
55
+ url: feature.pr.url,
56
+ number: feature.pr.number,
57
+ status: feature.pr.status,
58
+ ciStatus: feature.pr.ciStatus,
59
+ commitHash: feature.pr.commitHash,
60
+ },
61
+ }),
62
+ };
63
+ }
@@ -156,7 +156,11 @@ function DeployBar({ deployTarget }: { deployTarget: DeployActionInput }) {
156
156
  </Tooltip>
157
157
  </TooltipProvider>
158
158
  {isDeploymentActive ? (
159
- <DeploymentStatusBadge status={deployAction.status} url={deployAction.url} />
159
+ <DeploymentStatusBadge
160
+ status={deployAction.status}
161
+ url={deployAction.url}
162
+ targetId={deployTarget.targetId}
163
+ />
160
164
  ) : null}
161
165
  </div>
162
166
  );
@@ -51,7 +51,8 @@ import { ActionButton } from '@/components/common/action-button';
51
51
  import { OpenActionMenu } from '@/components/common/open-action-menu';
52
52
  import { FeatureCreateDrawer } from '@/components/common/feature-create-drawer';
53
53
  import { PrdQuestionnaire } from '@/components/common/prd-questionnaire';
54
- import { TechDecisionsReview } from '@/components/common/tech-decisions-review';
54
+ import { TechReviewTabs } from '@/components/common/tech-review-tabs';
55
+ import type { ProductDecisionsSummaryData } from '@/components/common/product-decisions-summary';
55
56
  import { MergeReview } from '@/components/common/merge-review';
56
57
  import { featureNodeStateConfig, lifecycleDisplayLabels } from '@/components/common/feature-node';
57
58
  import type { FeatureNodeData } from '@/components/common/feature-node';
@@ -89,6 +90,12 @@ export function ControlCenterDrawer({
89
90
  const [techData, setTechData] = useState<TechDecisionsReviewData | null>(null);
90
91
  const [isLoadingTech, setIsLoadingTech] = useState(false);
91
92
 
93
+ // ── Product decisions state (for tech review Product tab) ─────────────
94
+ const [techProductData, setTechProductData] = useState<
95
+ ProductDecisionsSummaryData | null | undefined
96
+ >(undefined);
97
+ const [isLoadingTechProduct, setIsLoadingTechProduct] = useState(false);
98
+
92
99
  // ── Merge review state ──────────────────────────────────────────────────
93
100
  const [mergeData, setMergeData] = useState<MergeReviewData | null>(null);
94
101
  const [isLoadingMerge, setIsLoadingMerge] = useState(false);
@@ -162,6 +169,32 @@ export function ControlCenterDrawer({
162
169
  };
163
170
  }, [techFeatureId]);
164
171
 
172
+ // Fetch product decisions for the Product tab in tech review
173
+ useEffect(() => {
174
+ setTechProductData(undefined);
175
+ if (!techFeatureId) return;
176
+
177
+ let cancelled = false;
178
+ setIsLoadingTechProduct(true);
179
+ getFeatureArtifact(techFeatureId)
180
+ .then((result) => {
181
+ if (cancelled) return;
182
+ if (result.productDecisions) {
183
+ setTechProductData(result.productDecisions);
184
+ }
185
+ // Silent failure — product tab shows "not available"
186
+ })
187
+ .catch(() => {
188
+ // Silent failure — the product tab is supplementary
189
+ })
190
+ .finally(() => {
191
+ if (!cancelled) setIsLoadingTechProduct(false);
192
+ });
193
+ return () => {
194
+ cancelled = true;
195
+ };
196
+ }, [techFeatureId]);
197
+
165
198
  const mergeFeatureId = view?.type === 'merge-review' ? view.node.featureId : null;
166
199
  useEffect(() => {
167
200
  setMergeData(null);
@@ -381,7 +414,11 @@ export function ControlCenterDrawer({
381
414
  </Tooltip>
382
415
  </TooltipProvider>
383
416
  {isFeatureDeployActive ? (
384
- <DeploymentStatusBadge status={deployAction.status} url={deployAction.url} />
417
+ <DeploymentStatusBadge
418
+ status={deployAction.status}
419
+ url={deployAction.url}
420
+ targetId={featureDeployTarget?.targetId}
421
+ />
385
422
  ) : null}
386
423
  </>
387
424
  ) : null}
@@ -508,8 +545,9 @@ export function ControlCenterDrawer({
508
545
  );
509
546
  } else if (view?.type === 'tech-review') {
510
547
  body = techData ? (
511
- <TechDecisionsReview
512
- data={techData}
548
+ <TechReviewTabs
549
+ techData={techData}
550
+ productData={isLoadingTechProduct ? null : techProductData}
513
551
  onApprove={handleTechApprove}
514
552
  onReject={handleTechReject}
515
553
  isProcessing={isLoadingTech}
@@ -0,0 +1,87 @@
1
+ 'use client';
2
+
3
+ import { useState, useCallback } from 'react';
4
+ import { useRouter } from 'next/navigation';
5
+ import { toast } from 'sonner';
6
+ import { createFeature } from '@/app/actions/create-feature';
7
+ import { FeatureCreateDrawer } from '@/components/common/feature-create-drawer';
8
+ import type { FeatureCreatePayload } from '@/components/common/feature-create-drawer';
9
+ import type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';
10
+ import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
11
+ import { useSoundAction } from '@/hooks/use-sound-action';
12
+
13
+ export interface CreateDrawerClientProps {
14
+ repositoryPath: string;
15
+ initialParentId?: string;
16
+ features: ParentFeatureOption[];
17
+ workflowDefaults?: WorkflowDefaults;
18
+ }
19
+
20
+ export function CreateDrawerClient({
21
+ repositoryPath,
22
+ initialParentId,
23
+ features,
24
+ workflowDefaults,
25
+ }: CreateDrawerClientProps) {
26
+ const router = useRouter();
27
+ const createSound = useSoundAction('create');
28
+ const [isSubmitting, setIsSubmitting] = useState(false);
29
+
30
+ const onClose = useCallback(() => {
31
+ router.push('/');
32
+ }, [router]);
33
+
34
+ const onSubmit = useCallback(
35
+ (data: FeatureCreatePayload) => {
36
+ setIsSubmitting(true);
37
+
38
+ // Dispatch event for optimistic canvas update before navigating
39
+ window.dispatchEvent(
40
+ new CustomEvent('shep:feature-created', {
41
+ detail: {
42
+ name: data.name,
43
+ description: data.description,
44
+ repositoryPath: data.repositoryPath,
45
+ },
46
+ })
47
+ );
48
+
49
+ // Close the drawer immediately for responsive UI
50
+ router.push('/');
51
+
52
+ // Fire server action in the background
53
+ createFeature(data)
54
+ .then((result) => {
55
+ if (result.error) {
56
+ toast.error(result.error);
57
+ // Dispatch rollback event
58
+ window.dispatchEvent(new CustomEvent('shep:feature-create-failed'));
59
+ return;
60
+ }
61
+ createSound.play();
62
+ router.refresh();
63
+ })
64
+ .catch(() => {
65
+ toast.error('Failed to create feature');
66
+ window.dispatchEvent(new CustomEvent('shep:feature-create-failed'));
67
+ })
68
+ .finally(() => {
69
+ setIsSubmitting(false);
70
+ });
71
+ },
72
+ [router, createSound]
73
+ );
74
+
75
+ return (
76
+ <FeatureCreateDrawer
77
+ open
78
+ onClose={onClose}
79
+ onSubmit={onSubmit}
80
+ repositoryPath={repositoryPath}
81
+ features={features}
82
+ workflowDefaults={workflowDefaults}
83
+ initialParentId={initialParentId}
84
+ isSubmitting={isSubmitting}
85
+ />
86
+ );
87
+ }