@shepai/cli 1.47.0 → 1.49.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 (235) hide show
  1. package/apis/json-schema/ApprovalGateDefaults.yaml +26 -0
  2. package/apis/json-schema/Feature.yaml +3 -0
  3. package/apis/json-schema/Repository.yaml +16 -0
  4. package/apis/json-schema/Settings.yaml +5 -0
  5. package/apis/json-schema/WorkflowConfig.yaml +4 -20
  6. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +17 -0
  7. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +11 -1
  9. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
  11. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +11 -4
  13. package/dist/packages/core/src/application/use-cases/features/get-plan-artifact.use-case.d.ts +19 -0
  14. package/dist/packages/core/src/application/use-cases/features/get-plan-artifact.use-case.d.ts.map +1 -0
  15. package/dist/packages/core/src/application/use-cases/features/get-plan-artifact.use-case.js +52 -0
  16. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/di/container.js +8 -0
  18. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +2 -0
  21. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.d.ts +2 -0
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge.node.js +66 -30
  24. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  25. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +15 -7
  26. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +2 -0
  27. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +41 -0
  29. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +2 -1
  30. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  31. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +29 -4
  32. package/dist/src/presentation/cli/ui/messages.d.ts.map +1 -1
  33. package/dist/src/presentation/cli/ui/messages.js +1 -7
  34. package/dist/src/presentation/web/app/actions/approve-feature.d.ts +2 -1
  35. package/dist/src/presentation/web/app/actions/approve-feature.d.ts.map +1 -1
  36. package/dist/src/presentation/web/app/actions/approve-feature.js +2 -2
  37. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts +7 -0
  38. package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -0
  39. package/dist/src/presentation/web/app/actions/get-merge-review-data.js +49 -0
  40. package/dist/src/presentation/web/app/actions/reject-feature.d.ts +7 -0
  41. package/dist/src/presentation/web/app/actions/reject-feature.d.ts.map +1 -0
  42. package/dist/src/presentation/web/app/actions/reject-feature.js +34 -0
  43. package/dist/src/presentation/web/app/page.d.ts.map +1 -1
  44. package/dist/src/presentation/web/app/page.js +1 -0
  45. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts +24 -0
  46. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts.map +1 -0
  47. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.js +1 -0
  48. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts +3 -0
  49. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -0
  50. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +12 -0
  51. package/dist/src/presentation/web/components/common/drawer-action-bar/index.d.ts +3 -0
  52. package/dist/src/presentation/web/components/common/drawer-action-bar/index.d.ts.map +1 -0
  53. package/dist/src/presentation/web/components/common/drawer-action-bar/index.js +1 -0
  54. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input-config.d.ts +11 -0
  55. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input-config.d.ts.map +1 -0
  56. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input-config.js +1 -0
  57. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.d.ts +3 -0
  58. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.d.ts.map +1 -0
  59. package/dist/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.js +18 -0
  60. package/dist/src/presentation/web/components/common/drawer-revision-input/index.d.ts +3 -0
  61. package/dist/src/presentation/web/components/common/drawer-revision-input/index.d.ts.map +1 -0
  62. package/dist/src/presentation/web/components/common/drawer-revision-input/index.js +1 -0
  63. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  64. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +8 -1
  65. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -0
  66. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +22 -1
  68. package/dist/src/presentation/web/components/common/merge-review/index.d.ts +4 -0
  69. package/dist/src/presentation/web/components/common/merge-review/index.d.ts.map +1 -0
  70. package/dist/src/presentation/web/components/common/merge-review/index.js +2 -0
  71. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts +77 -0
  72. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.d.ts.map +1 -0
  73. package/dist/src/presentation/web/components/common/merge-review/merge-review-config.js +1 -0
  74. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +3 -0
  75. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +1 -0
  76. package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +7 -0
  77. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts +3 -0
  78. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -0
  79. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +25 -0
  80. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +32 -0
  81. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -0
  82. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +165 -0
  83. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts +4 -2
  84. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.d.ts.map +1 -1
  85. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts +1 -1
  86. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.d.ts.map +1 -1
  87. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +6 -15
  88. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +4 -0
  89. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  90. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +24 -3
  91. package/dist/src/presentation/web/components/common/reject-feedback-dialog/index.d.ts +3 -0
  92. package/dist/src/presentation/web/components/common/reject-feedback-dialog/index.d.ts.map +1 -0
  93. package/dist/src/presentation/web/components/common/reject-feedback-dialog/index.js +1 -0
  94. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog-config.d.ts +9 -0
  95. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog-config.d.ts.map +1 -0
  96. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog-config.js +1 -0
  97. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.d.ts +3 -0
  98. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.d.ts.map +1 -0
  99. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.js +19 -0
  100. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts +14 -0
  101. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.d.ts.map +1 -0
  102. package/dist/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.js +46 -0
  103. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts +4 -2
  104. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.d.ts.map +1 -1
  105. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts +1 -1
  106. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  107. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +4 -14
  108. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +4 -0
  109. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  110. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +24 -6
  111. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  112. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +88 -19
  113. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  114. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +15 -0
  115. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  116. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +37 -15
  117. package/dist/tsconfig.build.tsbuildinfo +1 -1
  118. package/package.json +1 -1
  119. package/web/.next/BUILD_ID +1 -1
  120. package/web/.next/build-manifest.json +2 -2
  121. package/web/.next/cache/.previewinfo +1 -1
  122. package/web/.next/cache/.rscinfo +1 -1
  123. package/web/.next/cache/.tsbuildinfo +1 -1
  124. package/web/.next/cache/config.json +3 -3
  125. package/web/.next/fallback-build-manifest.json +2 -2
  126. package/web/.next/prerender-manifest.json +3 -3
  127. package/web/.next/required-server-files.js +1 -1
  128. package/web/.next/required-server-files.json +1 -1
  129. package/web/.next/server/app/_global-error.html +2 -2
  130. package/web/.next/server/app/_global-error.rsc +1 -1
  131. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  132. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  133. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  134. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  135. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  136. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  137. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app/page/server-reference-manifest.json +54 -24
  139. package/web/.next/server/app/page.js +2 -1
  140. package/web/.next/server/app/page.js.nft.json +1 -1
  141. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/version/page.js.nft.json +1 -1
  143. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +4 -4
  145. package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +9 -0
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js.map +1 -0
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__d8fbe735._.js +3 -0
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__d8fbe735._.js.map +1 -0
  151. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_3ac3601c._.js → server/chunks/ssr/_1fafa9db._.js} +2 -2
  152. package/web/.next/server/chunks/ssr/_1fafa9db._.js.map +1 -0
  153. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  154. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  156. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  157. package/web/.next/server/pages/500.html +2 -2
  158. package/web/.next/server/server-reference-manifest.js +1 -1
  159. package/web/.next/server/server-reference-manifest.json +55 -25
  160. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  162. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  163. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +54 -24
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +4 -4
  180. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  181. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +9 -0
  182. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d8fbe735._.js +3 -0
  183. package/web/.next/{server/chunks/ssr/_3ac3601c._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_1fafa9db._.js} +2 -2
  184. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  187. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  188. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +55 -25
  189. package/web/.next/standalone/src/presentation/web/app/actions/approve-feature.ts +4 -2
  190. package/web/.next/standalone/src/presentation/web/app/actions/get-merge-review-data.ts +64 -0
  191. package/web/.next/standalone/src/presentation/web/app/actions/reject-feature.ts +52 -0
  192. package/web/.next/standalone/src/presentation/web/app/page.tsx +1 -0
  193. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts +24 -0
  194. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +64 -0
  195. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/index.ts +2 -0
  196. package/web/.next/standalone/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input-config.ts +10 -0
  197. package/web/.next/standalone/src/presentation/web/components/common/drawer-revision-input/drawer-revision-input.tsx +41 -0
  198. package/web/.next/standalone/src/presentation/web/components/common/drawer-revision-input/index.ts +2 -0
  199. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.stories.tsx +23 -1
  200. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node.tsx +6 -1
  201. package/web/.next/standalone/src/presentation/web/components/common/merge-review/index.ts +7 -0
  202. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-config.ts +83 -0
  203. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review-drawer.tsx +34 -0
  204. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.stories.tsx +240 -0
  205. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +223 -0
  206. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-config.ts +4 -2
  207. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +36 -8
  208. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +16 -47
  209. package/web/.next/standalone/src/presentation/web/components/common/reject-feedback-dialog/index.ts +2 -0
  210. package/web/.next/standalone/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog-config.ts +8 -0
  211. package/web/.next/standalone/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.stories.tsx +63 -0
  212. package/web/.next/standalone/src/presentation/web/components/common/reject-feedback-dialog/reject-feedback-dialog.tsx +78 -0
  213. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review-config.ts +4 -2
  214. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +27 -6
  215. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +14 -42
  216. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +157 -31
  217. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center.stories.tsx +15 -0
  218. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +47 -17
  219. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  220. package/web/.next/static/chunks/{9f8e71029fb04681.js → 0da7a9860fa6ae05.js} +2 -2
  221. package/web/.next/static/chunks/191ca1529c9868dd.js +10 -0
  222. package/web/.next/static/chunks/22f30ce91a3c79c1.js +1 -0
  223. package/web/.next/static/chunks/59b8bd47023e0249.css +2 -0
  224. package/web/.next/trace +1 -1
  225. package/web/.next/trace-build +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js +0 -9
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js.map +0 -1
  228. package/web/.next/server/chunks/ssr/_3ac3601c._.js.map +0 -1
  229. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__d6d75c22._.js +0 -9
  230. package/web/.next/static/chunks/779c99975c85389e.js +0 -10
  231. package/web/.next/static/chunks/83ff3b6bbee54bce.js +0 -1
  232. package/web/.next/static/chunks/b7b7abe79e05b229.css +0 -2
  233. /package/web/.next/static/{wQ3vPV9I8JeacVNyp4HFg → UT60KjU8SOYIjqeqo2WT-}/_buildManifest.js +0 -0
  234. /package/web/.next/static/{wQ3vPV9I8JeacVNyp4HFg → UT60KjU8SOYIjqeqo2WT-}/_clientMiddlewareManifest.json +0 -0
  235. /package/web/.next/static/{wQ3vPV9I8JeacVNyp4HFg → UT60KjU8SOYIjqeqo2WT-}/_ssgManifest.js +0 -0
@@ -3,18 +3,26 @@
3
3
  import { useCallback, useEffect, useState } from 'react';
4
4
  import type { Edge } from '@xyflow/react';
5
5
  import { toast } from 'sonner';
6
+ import type {
7
+ PrdApprovalPayload,
8
+ QuestionSelectionChange,
9
+ } from '@shepai/core/domain/generated/output';
6
10
  import { approveFeature } from '@/app/actions/approve-feature';
11
+ import { rejectFeature } from '@/app/actions/reject-feature';
7
12
  import { getFeatureArtifact } from '@/app/actions/get-feature-artifact';
8
13
  import { getResearchArtifact } from '@/app/actions/get-research-artifact';
9
14
  import { getWorkflowDefaults } from '@/app/actions/get-workflow-defaults';
10
15
  import type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';
16
+ import { getMergeReviewData } from '@/app/actions/get-merge-review-data';
11
17
  import type { TechDecisionsReviewData } from '@/components/common/tech-decisions-review';
18
+ import type { MergeReviewData } from '@/components/common/merge-review';
12
19
  import { FeaturesCanvas } from '@/components/features/features-canvas';
13
20
  import type { CanvasNodeType } from '@/components/features/features-canvas';
14
21
  import { FeatureDrawer, FeatureCreateDrawer } from '@/components/common';
15
22
  import { PrdQuestionnaireDrawer } from '@/components/common/prd-questionnaire';
16
23
  import type { PrdQuestionnaireData } from '@/components/common/prd-questionnaire';
17
24
  import { TechDecisionsDrawer } from '@/components/common/tech-decisions-review';
25
+ import { MergeReviewDrawer } from '@/components/common/merge-review';
18
26
  import { NotificationPermissionBanner } from '@/components/common/notification-permission-banner';
19
27
  import { ControlCenterEmptyState } from './control-center-empty-state';
20
28
  import { useControlCenterState } from './use-control-center-state';
@@ -58,38 +66,55 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
58
66
 
59
67
  // PRD questionnaire drawer state
60
68
  const [prdSelections, setPrdSelections] = useState<Record<string, string>>({});
61
- const [isPrdProcessing, setIsPrdProcessing] = useState(false);
62
69
  const [questionnaireData, setQuestionnaireData] = useState<PrdQuestionnaireData | null>(null);
63
70
  const [isLoadingQuestionnaire, setIsLoadingQuestionnaire] = useState(false);
64
71
 
72
+ // Reject state (shared by both drawers)
73
+ const [isRejecting, setIsRejecting] = useState(false);
74
+
65
75
  // Tech decisions drawer state
66
76
  const [techDecisionsData, setTechDecisionsData] = useState<TechDecisionsReviewData | null>(null);
67
77
  const [isLoadingTechDecisions, setIsLoadingTechDecisions] = useState(false);
68
78
 
79
+ // Merge review drawer state
80
+ const [mergeReviewData, setMergeReviewData] = useState<MergeReviewData | null>(null);
81
+ const [isLoadingMergeReview, setIsLoadingMergeReview] = useState(false);
82
+
69
83
  const showPrdDrawer =
70
84
  selectedNode?.lifecycle === 'requirements' && selectedNode?.state === 'action-required';
71
85
 
72
86
  const showTechDecisionsDrawer =
73
87
  selectedNode?.lifecycle === 'implementation' && selectedNode?.state === 'action-required';
74
88
 
89
+ const showMergeReviewDrawer =
90
+ selectedNode?.lifecycle === 'review' && selectedNode?.state === 'action-required';
91
+
75
92
  const handlePrdSelect = useCallback((questionId: string, optionId: string) => {
76
93
  setPrdSelections((prev) => ({ ...prev, [questionId]: optionId }));
77
94
  }, []);
78
95
 
79
- const handlePrdRefine = useCallback(async (_text: string) => {
80
- setIsPrdProcessing(true);
81
- // TODO: Call API to refine requirements
82
- // For now simulate a delay
83
- await new Promise((resolve) => setTimeout(resolve, 1500));
84
- setIsPrdProcessing(false);
85
- }, []);
86
-
87
96
  const handlePrdApprove = useCallback(
88
97
  async (_actionId: string) => {
89
98
  const featureId = selectedNode?.featureId;
90
99
  if (!featureId) return;
91
100
 
92
- const result = await approveFeature(featureId);
101
+ let payload: PrdApprovalPayload | undefined;
102
+ if (questionnaireData) {
103
+ const changedSelections: QuestionSelectionChange[] = [];
104
+ for (const [questionId, optionId] of Object.entries(prdSelections)) {
105
+ const question = questionnaireData.questions.find((q) => q.id === questionId);
106
+ const option = question?.options.find((o) => o.id === optionId);
107
+ if (question && option) {
108
+ changedSelections.push({
109
+ questionId: question.question,
110
+ selectedOption: option.label,
111
+ });
112
+ }
113
+ }
114
+ payload = { approved: true, changedSelections };
115
+ }
116
+
117
+ const result = await approveFeature(featureId, payload);
93
118
 
94
119
  if (!result.approved) {
95
120
  toast.error(result.error ?? 'Failed to approve requirements');
@@ -100,30 +125,79 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
100
125
  clearSelection();
101
126
  setPrdSelections({});
102
127
  },
128
+ [selectedNode?.featureId, clearSelection, questionnaireData, prdSelections]
129
+ );
130
+
131
+ // Shared reject handler — all drawers use the same rejectFeature flow
132
+ const handleReject = useCallback(
133
+ async (feedback: string, label: string, onDone?: () => void) => {
134
+ const featureId = selectedNode?.featureId;
135
+ if (!featureId) return;
136
+
137
+ setIsRejecting(true);
138
+ try {
139
+ const result = await rejectFeature(featureId, feedback);
140
+
141
+ if (!result.rejected) {
142
+ toast.error(result.error ?? `Failed to reject ${label.toLowerCase()}`);
143
+ return;
144
+ }
145
+
146
+ toast.success(`${label} rejected — agent re-iterating (iteration ${result.iteration})`);
147
+ if (result.iterationWarning) {
148
+ toast.warning(
149
+ `Iteration ${result.iteration} — consider approving or adjusting feedback to avoid excessive iterations`
150
+ );
151
+ }
152
+ clearSelection();
153
+ onDone?.();
154
+ } finally {
155
+ setIsRejecting(false);
156
+ }
157
+ },
103
158
  [selectedNode?.featureId, clearSelection]
104
159
  );
105
160
 
106
- const handleTechDecisionsRefine = useCallback(async (_text: string) => {
107
- setIsLoadingTechDecisions(true);
108
- // TODO: Call API to refine tech decisions
109
- await new Promise((resolve) => setTimeout(resolve, 1500));
110
- setIsLoadingTechDecisions(false);
111
- }, []);
161
+ const handlePrdReject = useCallback(
162
+ (feedback: string) => handleReject(feedback, 'Requirements', () => setPrdSelections({})),
163
+ [handleReject]
164
+ );
165
+
166
+ const handleTechDecisionsReject = useCallback(
167
+ (feedback: string) => handleReject(feedback, 'Plan'),
168
+ [handleReject]
169
+ );
112
170
 
113
- const handleTechDecisionsApprove = useCallback(async () => {
114
- const featureId = selectedNode?.featureId;
115
- if (!featureId) return;
171
+ const handleMergeReject = useCallback(
172
+ (feedback: string) => handleReject(feedback, 'Merge'),
173
+ [handleReject]
174
+ );
175
+
176
+ // Shared approve handler — tech decisions and merge use identical approve flows
177
+ const handleSimpleApprove = useCallback(
178
+ async (label: string) => {
179
+ const featureId = selectedNode?.featureId;
180
+ if (!featureId) return;
181
+
182
+ const result = await approveFeature(featureId);
183
+
184
+ if (!result.approved) {
185
+ toast.error(result.error ?? `Failed to approve ${label.toLowerCase()}`);
186
+ return;
187
+ }
116
188
 
117
- const result = await approveFeature(featureId);
189
+ toast.success(`${label} approved agent resuming`);
190
+ clearSelection();
191
+ },
192
+ [selectedNode?.featureId, clearSelection]
193
+ );
118
194
 
119
- if (!result.approved) {
120
- toast.error(result.error ?? 'Failed to approve plan');
121
- return;
122
- }
195
+ const handleTechDecisionsApprove = useCallback(
196
+ () => handleSimpleApprove('Plan'),
197
+ [handleSimpleApprove]
198
+ );
123
199
 
124
- toast.success('Plan approved agent resuming');
125
- clearSelection();
126
- }, [selectedNode?.featureId, clearSelection]);
200
+ const handleMergeApprove = useCallback(() => handleSimpleApprove('Merge'), [handleSimpleApprove]);
127
201
 
128
202
  // Fetch questionnaire data and reset selections when a different feature is selected
129
203
  const prdFeatureId = showPrdDrawer ? selectedNode?.featureId : null;
@@ -197,6 +271,36 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
197
271
  };
198
272
  }, [techDecisionsFeatureId]);
199
273
 
274
+ // Fetch merge review data when a feature is in review + action-required
275
+ const mergeFeatureId = showMergeReviewDrawer ? selectedNode?.featureId : null;
276
+ useEffect(() => {
277
+ setMergeReviewData(null);
278
+
279
+ if (!mergeFeatureId) return;
280
+
281
+ let cancelled = false;
282
+ setIsLoadingMergeReview(true);
283
+ getMergeReviewData(mergeFeatureId)
284
+ .then((result) => {
285
+ if (cancelled) return;
286
+ if ('error' in result) {
287
+ toast.error(result.error);
288
+ return;
289
+ }
290
+ setMergeReviewData(result);
291
+ })
292
+ .catch(() => {
293
+ if (!cancelled) toast.error('Failed to load merge review data');
294
+ })
295
+ .finally(() => {
296
+ if (!cancelled) setIsLoadingMergeReview(false);
297
+ });
298
+
299
+ return () => {
300
+ cancelled = true;
301
+ };
302
+ }, [mergeFeatureId]);
303
+
200
304
  const hasRepositories = nodes.some((n) => n.type === 'repositoryNode');
201
305
 
202
306
  // Listen for global "open create drawer" events from the sidebar
@@ -240,7 +344,9 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
240
344
  emptyState={<ControlCenterEmptyState onRepositorySelect={handleAddRepository} />}
241
345
  />
242
346
  <FeatureDrawer
243
- selectedNode={showPrdDrawer || showTechDecisionsDrawer ? null : selectedNode}
347
+ selectedNode={
348
+ showPrdDrawer || showTechDecisionsDrawer || showMergeReviewDrawer ? null : selectedNode
349
+ }
244
350
  onClose={clearSelection}
245
351
  onDelete={handleDeleteFeature}
246
352
  isDeleting={isDeleting}
@@ -258,11 +364,12 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
258
364
  data={questionnaireData}
259
365
  selections={prdSelections}
260
366
  onSelect={handlePrdSelect}
261
- onRefine={handlePrdRefine}
262
367
  onApprove={handlePrdApprove}
368
+ onReject={handlePrdReject}
369
+ isRejecting={isRejecting}
263
370
  onDelete={handleDeleteFeature}
264
371
  isDeleting={isDeleting}
265
- isProcessing={isPrdProcessing || isLoadingQuestionnaire}
372
+ isProcessing={isLoadingQuestionnaire}
266
373
  />
267
374
  ) : null}
268
375
  {techDecisionsData ? (
@@ -275,13 +382,32 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
275
382
  branch={selectedNode?.branch}
276
383
  specPath={selectedNode?.specPath}
277
384
  data={techDecisionsData}
278
- onRefine={handleTechDecisionsRefine}
279
385
  onApprove={handleTechDecisionsApprove}
386
+ onReject={handleTechDecisionsReject}
387
+ isRejecting={isRejecting}
280
388
  onDelete={handleDeleteFeature}
281
389
  isDeleting={isDeleting}
282
390
  isProcessing={isLoadingTechDecisions}
283
391
  />
284
392
  ) : null}
393
+ {mergeReviewData ? (
394
+ <MergeReviewDrawer
395
+ open={showMergeReviewDrawer}
396
+ onClose={clearSelection}
397
+ featureName={selectedNode?.name ?? ''}
398
+ featureId={selectedNode?.featureId}
399
+ repositoryPath={selectedNode?.repositoryPath}
400
+ branch={selectedNode?.branch}
401
+ specPath={selectedNode?.specPath}
402
+ data={mergeReviewData}
403
+ onApprove={handleMergeApprove}
404
+ onReject={handleMergeReject}
405
+ isRejecting={isRejecting}
406
+ onDelete={handleDeleteFeature}
407
+ isDeleting={isDeleting}
408
+ isProcessing={isLoadingMergeReview}
409
+ />
410
+ ) : null}
285
411
  <FeatureCreateDrawer
286
412
  open={isCreateDrawerOpen}
287
413
  onClose={closeCreateDrawer}
@@ -75,6 +75,21 @@ const featureNodes: FeatureNodeType[] = [
75
75
  branch: 'feat/api-gateway',
76
76
  },
77
77
  },
78
+ {
79
+ id: 'feat-4',
80
+ type: 'featureNode',
81
+ position: { x: 800, y: 345 },
82
+ data: {
83
+ name: 'Merge Review',
84
+ description: 'PR ready for merge approval',
85
+ featureId: '#f4',
86
+ lifecycle: 'review',
87
+ state: 'action-required',
88
+ progress: 90,
89
+ repositoryPath: '/home/user/my-repo',
90
+ branch: 'feat/merge-review',
91
+ },
92
+ },
78
93
  ];
79
94
 
80
95
  const repoNode: RepositoryNodeType = {
@@ -351,8 +351,19 @@ export function useControlCenterState(
351
351
  }
352
352
 
353
353
  setSelectedNode(null);
354
- setNodes((prev) => prev.filter((n) => n.id !== featureId));
355
- setEdges((prev) => prev.filter((e) => e.source !== featureId && e.target !== featureId));
354
+ setNodes((currentNodes) => {
355
+ const remainingNodes = currentNodes.filter((n) => n.id !== featureId);
356
+ const remainingEdges = edges.filter(
357
+ (e) => e.source !== featureId && e.target !== featureId
358
+ );
359
+ const result = layoutWithDagre(remainingNodes, remainingEdges, {
360
+ direction: 'LR',
361
+ ranksep: 200,
362
+ nodesep: 60,
363
+ });
364
+ setEdges(result.edges);
365
+ return result.nodes;
366
+ });
356
367
  toast.success('Feature deleted successfully');
357
368
  router.refresh();
358
369
  } catch {
@@ -361,7 +372,7 @@ export function useControlCenterState(
361
372
  setIsDeleting(false);
362
373
  }
363
374
  },
364
- [router]
375
+ [router, edges]
365
376
  );
366
377
 
367
378
  const handleDeleteRepository = useCallback(
@@ -430,23 +441,23 @@ export function useControlCenterState(
430
441
  .pop() ?? path;
431
442
 
432
443
  // Optimistic UI: add node immediately
444
+ let savedAddRepoY = 0;
433
445
  setNodes((currentNodes) => {
434
446
  const repoNodes = currentNodes.filter((n) => n.type === 'repositoryNode');
435
447
  const addRepoNode = currentNodes.find((n) => n.type === 'addRepositoryNode');
436
448
 
437
- // Place in the repo column, below the last existing repo node
449
+ // Save addRepoNode's original Y for rollback on error
450
+ if (addRepoNode) savedAddRepoY = addRepoNode.position.y;
451
+
452
+ // Place in the repo column, at the addRepoNode's current position
438
453
  const repoX = repoNodes[0]?.position.x ?? addRepoNode?.position.x ?? 50;
439
454
  const repoHeight = 50; // repositoryNode height
440
455
  const gap = 15; // match dagre nodesep
441
456
 
442
- const lastRepoBottomY =
443
- repoNodes.length > 0
444
- ? Math.max(...repoNodes.map((n) => n.position.y)) + repoHeight
445
- : addRepoNode
446
- ? addRepoNode.position.y
447
- : 0;
448
-
449
- const position = { x: repoX, y: lastRepoBottomY + gap };
457
+ const position = {
458
+ x: repoX,
459
+ y: addRepoNode ? addRepoNode.position.y : 0,
460
+ };
450
461
 
451
462
  const newNode = {
452
463
  id: tempId,
@@ -455,8 +466,10 @@ export function useControlCenterState(
455
466
  data: { name: repoName, repositoryPath: path, id: tempId },
456
467
  } as CanvasNodeType;
457
468
 
458
- // Move addRepo button below the new node
459
- const addRepoY = position.y + repoHeight + gap;
469
+ // Shift addRepo button down by exactly one slot
470
+ const addRepoY = addRepoNode
471
+ ? addRepoNode.position.y + repoHeight + gap
472
+ : position.y + repoHeight + gap;
460
473
 
461
474
  return currentNodes
462
475
  .map((n) =>
@@ -469,8 +482,16 @@ export function useControlCenterState(
469
482
  addRepository({ path, name: repoName })
470
483
  .then((result) => {
471
484
  if (result.error) {
472
- // Rollback optimistic node
473
- setNodes((prev) => prev.filter((n) => n.id !== tempId));
485
+ // Rollback optimistic node and restore addRepoNode position
486
+ setNodes((prev) =>
487
+ prev
488
+ .filter((n) => n.id !== tempId)
489
+ .map((n) =>
490
+ n.type === 'addRepositoryNode'
491
+ ? { ...n, position: { ...n.position, y: savedAddRepoY } }
492
+ : n
493
+ )
494
+ );
474
495
  toast.error(result.error);
475
496
  return;
476
497
  }
@@ -501,7 +522,16 @@ export function useControlCenterState(
501
522
  router.refresh();
502
523
  })
503
524
  .catch(() => {
504
- setNodes((prev) => prev.filter((n) => n.id !== tempId));
525
+ // Rollback optimistic node and restore addRepoNode position
526
+ setNodes((prev) =>
527
+ prev
528
+ .filter((n) => n.id !== tempId)
529
+ .map((n) =>
530
+ n.type === 'addRepositoryNode'
531
+ ? { ...n, position: { ...n.position, y: savedAddRepoY } }
532
+ : n
533
+ )
534
+ );
505
535
  toast.error('Failed to add repository');
506
536
  });
507
537
  },
@@ -15,7 +15,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
15
15
  const hostname = process.env.HOSTNAME || '0.0.0.0'
16
16
 
17
17
  let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
18
- const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.46.0","NEXT_PUBLIC_SHEP_PACKAGE_NAME":"@shepai/cli","NEXT_PUBLIC_SHEP_DESCRIPTION":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":true,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/cli/cli","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/runner/work/cli/cli"},"serverExternalPackages":["tsyringe","reflect-metadata","better-sqlite3"],"distDirRoot":".next"}
18
+ const nextConfig = {"env":{"NEXT_PUBLIC_SHEP_VERSION":"1.48.0","NEXT_PUBLIC_SHEP_PACKAGE_NAME":"@shepai/cli","NEXT_PUBLIC_SHEP_DESCRIPTION":"Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy"},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":true,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"maximumResponseBody":50000000,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/cli/cli","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/runner/work/cli/cli"},"serverExternalPackages":["tsyringe","reflect-metadata","better-sqlite3"],"distDirRoot":".next"}
19
19
 
20
20
  process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
21
21