@shepai/cli 1.102.0 → 1.103.0-pr306.386dbd0

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 (254) hide show
  1. package/README.md +5 -4
  2. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +2 -1
  3. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +1 -1
  5. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -1
  6. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  7. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +2 -2
  8. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  9. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +1 -3
  10. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +19 -0
  11. package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -0
  12. package/dist/src/presentation/web/app/actions/check-agent-auth.js +178 -0
  13. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +1 -1
  14. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts +1 -1
  15. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
  16. package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +46 -8
  17. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  18. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +28 -5
  19. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  20. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +0 -2
  21. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.d.ts.map +1 -1
  22. package/dist/src/presentation/web/components/features/control-center/welcome-agent-setup.js +26 -148
  23. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +29 -8
  25. package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/ui/dialog.js +2 -2
  27. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  28. package/dist/src/presentation/web/hooks/use-graph-state.js +26 -6
  29. package/dist/tsconfig.build.tsbuildinfo +1 -1
  30. package/package.json +2 -2
  31. package/web/.next/BUILD_ID +1 -1
  32. package/web/.next/build-manifest.json +2 -2
  33. package/web/.next/fallback-build-manifest.json +2 -2
  34. package/web/.next/prerender-manifest.json +3 -3
  35. package/web/.next/required-server-files.js +3 -3
  36. package/web/.next/required-server-files.json +3 -3
  37. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +48 -48
  38. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  39. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +58 -58
  42. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  43. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +58 -58
  46. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  47. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +44 -44
  50. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  51. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  52. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +48 -48
  54. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  55. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  56. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  57. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +58 -58
  58. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  59. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +58 -58
  62. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  63. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  64. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +44 -44
  66. package/web/.next/server/app/(dashboard)/page.js +1 -1
  67. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +44 -44
  70. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  71. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/_global-error.html +2 -2
  74. package/web/.next/server/app/_global-error.rsc +1 -1
  75. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  76. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  79. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  80. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  81. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  83. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  84. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  85. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  86. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  88. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  89. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  91. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  92. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  93. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  94. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/chunks/[root-of-the-server]__f47bb8a5._.js +1 -1
  96. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js +1 -1
  97. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js +1 -1
  99. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js +1 -1
  101. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js +1 -1
  103. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js +1 -1
  105. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c29a2302.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js +1 -1
  107. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js +1 -1
  109. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js +1 -1
  111. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d1fd387b.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js +1 -1
  113. package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  115. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js +3 -0
  117. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +1 -0
  118. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js +3 -0
  119. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js.map +1 -0
  120. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js +3 -0
  121. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_0a7546ed.js.map +1 -0
  122. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js +3 -0
  123. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_978cbb4c.js.map +1 -0
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__0880ff0e._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__0880ff0e._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
  129. package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  133. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/{[root-of-the-server]__ec9a1550._.js → [root-of-the-server]__51fc98b0._.js} +2 -2
  135. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b6bb4ae._.js.map → [root-of-the-server]__51fc98b0._.js.map} +1 -1
  136. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +1 -1
  137. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8932d55._.js → [root-of-the-server]__57f37786._.js} +2 -2
  138. package/web/.next/server/chunks/ssr/{[root-of-the-server]__ec9a1550._.js.map → [root-of-the-server]__57f37786._.js.map} +1 -1
  139. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  140. package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +1 -1
  141. package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +1 -1
  143. package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0b6bb4ae._.js → [root-of-the-server]__708dcad1._.js} +2 -2
  145. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f8932d55._.js.map → [root-of-the-server]__708dcad1._.js.map} +1 -1
  146. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  147. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  149. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c88ef55._.js +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c88ef55._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/{[root-of-the-server]__6a82177d._.js → [root-of-the-server]__8e002910._.js} +2 -2
  152. package/web/.next/server/chunks/ssr/{[root-of-the-server]__6a82177d._.js.map → [root-of-the-server]__8e002910._.js.map} +1 -1
  153. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js +1 -1
  154. package/web/.next/server/chunks/ssr/[root-of-the-server]__94128fa9._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js +1 -1
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__9bfb8e7c._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +3 -0
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  166. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/{_d2a282c5._.js → _15b363de._.js} +2 -2
  168. package/web/.next/server/chunks/ssr/{_d2a282c5._.js.map → _15b363de._.js.map} +1 -1
  169. package/web/.next/server/chunks/ssr/_16235e5e._.js +1 -1
  170. package/web/.next/server/chunks/ssr/_16235e5e._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/_273d4632._.js +3 -0
  172. package/web/.next/server/chunks/ssr/_273d4632._.js.map +1 -0
  173. package/web/.next/server/chunks/ssr/_507aa36a._.js +3 -0
  174. package/web/.next/server/chunks/ssr/_507aa36a._.js.map +1 -0
  175. package/web/.next/server/chunks/ssr/_6887cba3._.js +1 -1
  176. package/web/.next/server/chunks/ssr/_6887cba3._.js.map +1 -1
  177. package/web/.next/server/chunks/ssr/{_9d0908a8._.js → _86635d23._.js} +2 -2
  178. package/web/.next/server/chunks/ssr/{_9d0908a8._.js.map → _86635d23._.js.map} +1 -1
  179. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/_8eeee4db._.js +1 -1
  182. package/web/.next/server/chunks/ssr/_8eeee4db._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  184. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  185. package/web/.next/server/chunks/ssr/_ed11dcd6._.js +1 -1
  186. package/web/.next/server/chunks/ssr/_ed11dcd6._.js.map +1 -1
  187. package/web/.next/server/chunks/ssr/_f4d222d6._.js +1 -1
  188. package/web/.next/server/chunks/ssr/_f4d222d6._.js.map +1 -1
  189. package/web/.next/server/chunks/ssr/_f5316e67._.js +3 -0
  190. package/web/.next/server/chunks/ssr/_f5316e67._.js.map +1 -0
  191. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  192. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  193. package/web/.next/server/chunks/ssr/{src_presentation_web_3c53a23d._.js → src_presentation_web_7275ce5d._.js} +3 -3
  194. package/web/.next/server/chunks/ssr/{src_presentation_web_3c53a23d._.js.map → src_presentation_web_7275ce5d._.js.map} +1 -1
  195. package/web/.next/server/chunks/ssr/{src_presentation_web_ec8c7a4f._.js → src_presentation_web_758dfa10._.js} +3 -3
  196. package/web/.next/server/chunks/ssr/{src_presentation_web_ec8c7a4f._.js.map → src_presentation_web_758dfa10._.js.map} +1 -1
  197. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js +3 -0
  198. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_84803221.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  200. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  202. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  204. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  205. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  206. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -1
  211. package/web/.next/server/pages/500.html +2 -2
  212. package/web/.next/server/server-reference-manifest.js +1 -1
  213. package/web/.next/server/server-reference-manifest.json +273 -273
  214. package/web/.next/static/chunks/07b853e29af1e5f2.js +1 -0
  215. package/web/.next/static/chunks/{bfee4f72255f4654.js → 1b64d539e3301b42.js} +2 -2
  216. package/web/.next/static/chunks/2a99432c60666d13.js +1 -0
  217. package/web/.next/static/chunks/3a806cf059241bc9.js +1 -0
  218. package/web/.next/static/chunks/561c934a22a57935.js +1 -0
  219. package/web/.next/static/chunks/{0ecdad7af8d93397.js → 56487ce1ff5fe4b9.js} +1 -1
  220. package/web/.next/static/chunks/{d3c337aa9acbfd96.js → 80648e7478cfaf5c.js} +2 -2
  221. package/web/.next/static/chunks/93058c22968e2fef.css +1 -0
  222. package/web/.next/static/chunks/{d994924b9107401b.js → b017804cd070a36b.js} +1 -1
  223. package/web/.next/static/chunks/b9baf0e3bc5777f0.js +1 -0
  224. package/web/.next/static/chunks/c1a9d9c698c60cd6.js +1 -0
  225. package/web/.next/static/chunks/da7d0e6baf7863fd.js +1 -0
  226. package/web/.next/static/chunks/f3138f795d0f0618.js +1 -0
  227. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js +0 -3
  228. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_6ba7eb21._.js.map +0 -1
  229. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js +0 -3
  230. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_c757eb00.js.map +0 -1
  231. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js +0 -3
  232. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_7eb49631.js.map +0 -1
  233. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js +0 -3
  234. package/web/.next/server/chunks/ssr/[root-of-the-server]__7b49fcb3._.js.map +0 -1
  235. package/web/.next/server/chunks/ssr/_60e203af._.js +0 -3
  236. package/web/.next/server/chunks/ssr/_60e203af._.js.map +0 -1
  237. package/web/.next/server/chunks/ssr/_6a83bd29._.js +0 -3
  238. package/web/.next/server/chunks/ssr/_6a83bd29._.js.map +0 -1
  239. package/web/.next/server/chunks/ssr/_7d954884._.js +0 -3
  240. package/web/.next/server/chunks/ssr/_7d954884._.js.map +0 -1
  241. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js +0 -3
  242. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_befd865a.js.map +0 -1
  243. package/web/.next/static/chunks/0a370e5d6fd1bb24.js +0 -1
  244. package/web/.next/static/chunks/2d3dc372f05429dd.css +0 -1
  245. package/web/.next/static/chunks/3092c9611e2dc032.js +0 -1
  246. package/web/.next/static/chunks/30dc64780817371a.js +0 -1
  247. package/web/.next/static/chunks/ac12b8d2bd59675e.js +0 -1
  248. package/web/.next/static/chunks/b272ac93b52dceeb.js +0 -1
  249. package/web/.next/static/chunks/d61cbdfc00003e44.js +0 -1
  250. package/web/.next/static/chunks/e248c85913405af4.js +0 -1
  251. package/web/.next/static/chunks/e24a024affc634d9.js +0 -1
  252. /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_buildManifest.js +0 -0
  253. /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_clientMiddlewareManifest.json +0 -0
  254. /package/web/.next/static/{_-n7Ii9h0sTnlzE_aFMQI → f-A8sWnRla5g7MiKDP0IX}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},59975,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},27559,a=>{a.n(a.i(19981))},66840,a=>{a.n(a.i(25768))},11754,a=>{a.n(a.i(14994))},31747,66953,a=>{"use strict";var b=a.i(14703);function c(a,c,d){return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,b.deriveLifecycle)(a,c),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,b.deriveNodeState)(a,c),progress:(0,b.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},...d?.repositoryName&&{repositoryName:d.repositoryName},...d?.baseBranch&&{baseBranch:d.baseBranch},...d?.oneLiner&&{oneLiner:d.oneLiner},...d?.remoteUrl&&{remoteUrl:d.remoteUrl},...c?.agentType&&{agentType:c.agentType},...c?.modelId&&{modelId:c.modelId},...c?.error&&{errorMessage:c.error},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}a.s(["buildFeatureNodeData",()=>c],31747);let d=new Set(["overview","activity","log","plan","prd-review","tech-decisions","product-decisions","merge-review"]);function e(a){if(a&&d.has(a))return a}function f({selectedNode:a,isCreateDrawerOpen:b,pendingRepositoryPath:c,pendingParentFeatureId:d,selectedRepoNode:e,features:f,workflowDefaults:g}){if(b)return{type:"feature-create",repositoryPath:c,initialParentId:d,features:f,workflowDefaults:g};if(a)return{type:"feature",node:a,initialTab:"requirements"===a.lifecycle&&"action-required"===a.state?"prd-review":"implementation"===a.lifecycle&&"action-required"===a.state?"tech-decisions":"review"===a.lifecycle&&("action-required"===a.state||"error"===a.state)?"merge-review":"overview"};return e?{type:"repository",data:e}:null}a.s(["computeDrawerView",()=>f,"parseTabKey",()=>e],66953)},9875,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx <module evaluation>","FeatureDrawerClient")},57863,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx","FeatureDrawerClient")},45273,a=>{"use strict";a.i(9875);var b=a.i(57863);a.n(b)},14994,a=>{"use strict";var b=a.i(92807),c=a.i(96380),d=a.i(81719),e=a.i(31747),f=a.i(66953),g=a.i(45273);let h={success:d.CiStatus.Success,failure:d.CiStatus.Failure,pending:d.CiStatus.Pending};async function i({params:a}){let{featureId:i}=await a;try{let a=(0,c.resolve)("IFeatureRepository"),j=(0,c.resolve)("IAgentRunRepository"),k=(0,c.resolve)("IRepositoryRepository"),l=(0,c.resolve)("IGitPrService"),m=await a.findById(i);if(!m)return null;let n=m.agentRunId?await j.findById(m.agentRunId):null,o=(0,c.resolve)("GetFeatureArtifactUseCase"),[p,q,r,s,t,u]=await Promise.all([k.findByPath(m.repositoryPath).catch(()=>null),l.getDefaultBranch(m.repositoryPath).catch(()=>"main"),o.execute(i).catch(()=>null),l.getRemoteUrl(m.repositoryPath).catch(()=>null),m.pr?.number?l.getMergeableStatus(m.repositoryPath,m.pr.number).catch(()=>void 0):Promise.resolve(void 0),m.branch?l.getCiStatus(m.repositoryPath,m.branch).catch(()=>void 0):Promise.resolve(void 0)]);if(m.pr){let b=u?h[u.status]??d.CiStatus.Pending:void 0,c={};void 0!==t&&(c.mergeable=t),void 0!==b&&(c.ciStatus=b),Object.keys(c).length>0&&(m.pr={...m.pr,...c},a.update(m).catch(()=>{}))}let v=(0,e.buildFeatureNodeData)(m,n,{repositoryName:p?.name,baseBranch:q,oneLiner:r?.oneLiner,remoteUrl:s??void 0}),w=(0,f.computeDrawerView)({selectedNode:v,isCreateDrawerOpen:!1,pendingRepositoryPath:"",pendingParentFeatureId:void 0,selectedRepoNode:null,features:[],workflowDefaults:void 0});if(!w)return null;return(0,b.jsx)(g.FeatureDrawerClient,{view:w})}catch{return null}}a.s(["default",()=>i,"dynamic",0,"force-dynamic"])}];
1
+ module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},47407,a=>{a.n(a.i(5983))},3621,a=>{a.n(a.i(72884))},63754,a=>{a.n(a.i(39838))},27075,a=>{a.n(a.i(26048))},37458,a=>{a.n(a.i(72330))},27559,a=>{a.n(a.i(19981))},66840,a=>{a.n(a.i(25768))},11754,a=>{a.n(a.i(14994))},31747,66953,a=>{"use strict";var b=a.i(14703);function c(a,c,d){return{name:a.name,description:a.description??a.slug,featureId:a.id,lifecycle:(0,b.deriveLifecycle)(a,c),repositoryPath:a.repositoryPath,branch:a.branch,specPath:a.specPath,state:(0,b.deriveNodeState)(a,c),progress:(0,b.deriveProgress)(a),summary:a.description,userQuery:a.userQuery,createdAt:a.createdAt instanceof Date?a.createdAt.getTime():a.createdAt,...a.fast&&{fastMode:!0},...d?.repositoryName&&{repositoryName:d.repositoryName},...d?.baseBranch&&{baseBranch:d.baseBranch},...d?.oneLiner&&{oneLiner:d.oneLiner},...d?.remoteUrl&&{remoteUrl:d.remoteUrl},...c?.agentType&&{agentType:c.agentType},...c?.modelId&&{modelId:c.modelId},...c?.error&&{errorMessage:c.error},...a.pr&&{pr:{url:a.pr.url,number:a.pr.number,status:a.pr.status,ciStatus:a.pr.ciStatus,commitHash:a.pr.commitHash,mergeable:a.pr.mergeable}}}}a.s(["buildFeatureNodeData",()=>c],31747);let d=new Set(["overview","activity","log","plan","prd-review","tech-decisions","product-decisions","merge-review"]);function e(a){if(a&&d.has(a))return a}function f({selectedNode:a,isCreateDrawerOpen:b,pendingRepositoryPath:c,pendingParentFeatureId:d,selectedRepoNode:e,features:f,workflowDefaults:g}){if(b)return{type:"feature-create",repositoryPath:c,initialParentId:d,features:f,workflowDefaults:g};if(a)return{type:"feature",node:a,initialTab:"requirements"===a.lifecycle&&"action-required"===a.state?"prd-review":"implementation"===a.lifecycle&&"action-required"===a.state?"tech-decisions":"review"===a.lifecycle&&("action-required"===a.state||"error"===a.state)?"merge-review":"overview"};return e?{type:"repository",data:e}:null}a.s(["computeDrawerView",()=>f,"parseTabKey",()=>e],66953)},9875,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx <module evaluation>","FeatureDrawerClient")},57863,a=>{"use strict";a.s(["FeatureDrawerClient",()=>b]);let b=(0,a.i(28478).registerClientReference)(function(){throw Error("Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx","FeatureDrawerClient")},45273,a=>{"use strict";a.i(9875);var b=a.i(57863);a.n(b)},14994,a=>{"use strict";var b=a.i(92807),c=a.i(96380),d=a.i(81719),e=a.i(31747),f=a.i(66953),g=a.i(45273);let h={success:d.CiStatus.Success,failure:d.CiStatus.Failure,pending:d.CiStatus.Pending};async function i({params:a}){let{featureId:i}=await a;try{let a=(0,c.resolve)("IFeatureRepository"),j=(0,c.resolve)("IAgentRunRepository"),k=(0,c.resolve)("IRepositoryRepository"),l=(0,c.resolve)("IGitPrService"),m=await a.findById(i);if(!m)return null;let n=m.agentRunId?await j.findById(m.agentRunId):null,o=(0,c.resolve)("GetFeatureArtifactUseCase"),[p,q,r,s,t,u]=await Promise.all([k.findByPath(m.repositoryPath).catch(()=>null),l.getDefaultBranch(m.repositoryPath).catch(()=>"main"),o.execute(i).catch(()=>null),l.getRemoteUrl(m.repositoryPath).catch(()=>null),m.pr?.number?l.getMergeableStatus(m.repositoryPath,m.pr.number).catch(()=>void 0):Promise.resolve(void 0),m.branch?l.getCiStatus(m.repositoryPath,m.branch).catch(()=>void 0):Promise.resolve(void 0)]);if(m.pr){let b=u?h[u.status]??d.CiStatus.Pending:void 0,c={};void 0!==t&&(c.mergeable=t),void 0!==b&&(c.ciStatus=b),Object.keys(c).length>0&&(m.pr={...m.pr,...c},a.update(m).catch(()=>{}))}let v=(0,e.buildFeatureNodeData)(m,n,{repositoryName:p?.name,baseBranch:q,oneLiner:r?.oneLiner,remoteUrl:s??void 0}),w=(0,f.computeDrawerView)({selectedNode:v,isCreateDrawerOpen:!1,pendingRepositoryPath:"",pendingParentFeatureId:void 0,selectedRepoNode:null,features:[],workflowDefaults:void 0});if(!w)return null;return(0,b.jsx)(g.FeatureDrawerClient,{view:w})}catch{return null}}a.s(["default",()=>i,"dynamic",0,"force-dynamic"])}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__9bfb8e7c._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx/__nextjs-internal-proxy.mjs","../../../../../../../src/presentation/web/app/%28dashboard%29/%40drawer/feature/%5BfeatureId%5D/page.tsx"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n specPath: feature.specPath,\n state: deriveNodeState(feature, run),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","import type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\n/** Tab key matching FeatureDrawerTabs */\nexport type FeatureTabKey =\n | 'overview'\n | 'activity'\n | 'log'\n | 'plan'\n | 'prd-review'\n | 'tech-decisions'\n | 'product-decisions'\n | 'merge-review';\n\n/** All valid tab key values — used for URL param validation. */\nexport const VALID_TAB_KEYS: ReadonlySet<string> = new Set<FeatureTabKey>([\n 'overview',\n 'activity',\n 'log',\n 'plan',\n 'prd-review',\n 'tech-decisions',\n 'product-decisions',\n 'merge-review',\n]);\n\n/** Type-guard: returns the value as FeatureTabKey if valid, otherwise undefined. */\nexport function parseTabKey(value: string | null | undefined): FeatureTabKey | undefined {\n if (value && VALID_TAB_KEYS.has(value)) return value as FeatureTabKey;\n return undefined;\n}\n\n/**\n * Discriminated union representing every possible drawer state in the control center.\n * Only one view can be active at a time.\n */\nexport type DrawerView =\n /** All feature views — tabs handle the lifecycle-specific content */\n | { type: 'feature'; node: FeatureNodeData; initialTab: FeatureTabKey }\n /** Feature creation form */\n | {\n type: 'feature-create';\n repositoryPath: string;\n initialParentId?: string;\n features: ParentFeatureOption[];\n workflowDefaults?: WorkflowDefaults;\n }\n /** Repository node actions */\n | { type: 'repository'; data: RepositoryNodeData };\n\n/** Derives the initial tab from node lifecycle + state. */\nexport function deriveInitialTab(node: FeatureNodeData): FeatureTabKey {\n if (node.lifecycle === 'requirements' && node.state === 'action-required') return 'prd-review';\n if (node.lifecycle === 'implementation' && node.state === 'action-required')\n return 'tech-decisions';\n if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error'))\n return 'merge-review';\n return 'overview';\n}\n\n/**\n * Derives the active DrawerView from control-center state.\n * Priority: feature-create > selected-node > repository\n */\nexport function computeDrawerView({\n selectedNode,\n isCreateDrawerOpen,\n pendingRepositoryPath,\n pendingParentFeatureId,\n selectedRepoNode,\n features,\n workflowDefaults,\n}: {\n selectedNode: FeatureNodeData | null;\n isCreateDrawerOpen: boolean;\n pendingRepositoryPath: string;\n pendingParentFeatureId: string | undefined;\n selectedRepoNode: RepositoryNodeData | null;\n features: ParentFeatureOption[];\n workflowDefaults: WorkflowDefaults | undefined;\n}): DrawerView | null {\n if (isCreateDrawerOpen) {\n return {\n type: 'feature-create',\n repositoryPath: pendingRepositoryPath,\n initialParentId: pendingParentFeatureId,\n features,\n workflowDefaults,\n };\n }\n\n if (selectedNode) {\n return { type: 'feature', node: selectedNode, initialTab: deriveInitialTab(selectedNode) };\n }\n\n if (selectedRepoNode) {\n return { type: 'repository', data: selectedRepoNode };\n }\n\n return null;\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const FeatureDrawerClient = registerClientReference(\n function() { throw new Error(\"Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx\",\n \"FeatureDrawerClient\",\n);\n","import { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { CiStatus } from '@shepai/core/domain/generated/output';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { computeDrawerView } from '@/components/common/control-center-drawer/drawer-view';\nimport { FeatureDrawerClient } from '@/components/common/control-center-drawer/feature-drawer-client';\n\nconst CI_STATUS_MAP: Record<string, CiStatus> = {\n success: CiStatus.Success,\n failure: CiStatus.Failure,\n pending: CiStatus.Pending,\n};\n\n/** Skip static pre-rendering since we need runtime DI container. */\nexport const dynamic = 'force-dynamic';\n\ninterface FeatureDrawerPageProps {\n params: Promise<{ featureId: string }>;\n}\n\nexport default async function FeatureDrawerPage({ params }: FeatureDrawerPageProps) {\n const { featureId } = await params;\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // Resolve repository name, base branch, and one-liner for the overview tab\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const [repo, baseBranch, artifact, remoteUrl, liveMergeable, liveCiResult] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n feature.pr?.number\n ? gitPrService\n .getMergeableStatus(feature.repositoryPath, feature.pr.number)\n .catch(() => undefined)\n : Promise.resolve(undefined),\n feature.branch\n ? gitPrService.getCiStatus(feature.repositoryPath, feature.branch).catch(() => undefined)\n : Promise.resolve(undefined),\n ]);\n\n // Merge live PR status into feature data so the UI always reflects\n // the current GitHub state, even if the background watcher hasn't polled yet.\n if (feature.pr) {\n const liveCiStatus = liveCiResult\n ? (CI_STATUS_MAP[liveCiResult.status] ?? CiStatus.Pending)\n : undefined;\n const updates: Record<string, unknown> = {};\n if (liveMergeable !== undefined) updates.mergeable = liveMergeable;\n if (liveCiStatus !== undefined) updates.ciStatus = liveCiStatus;\n\n if (Object.keys(updates).length > 0) {\n feature.pr = { ...feature.pr, ...updates };\n featureRepo.update(feature).catch(() => {\n /* best-effort persist */\n });\n }\n }\n\n const nodeData = buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n });\n\n const view = computeDrawerView({\n selectedNode: nodeData,\n isCreateDrawerOpen: false,\n pendingRepositoryPath: '',\n pendingParentFeatureId: undefined,\n selectedRepoNode: null,\n features: [],\n workflowDefaults: undefined,\n });\n\n if (!view) return null;\n\n return <FeatureDrawerClient view={view} />;\n } catch {\n // Feature not found — render nothing (drawer stays closed)\n return null;\n }\n}\n"],"names":[],"mappings":"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","ignoreList":[2]}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/app/build-feature-node-data.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx/__nextjs-internal-proxy.mjs","../../../../../../../src/presentation/web/app/%28dashboard%29/%40drawer/feature/%5BfeatureId%5D/page.tsx"],"sourcesContent":["import type { Feature, AgentRun } from '@shepai/core/domain/generated/output';\nimport {\n deriveNodeState,\n deriveProgress,\n deriveLifecycle,\n} from '@/components/common/feature-node/derive-feature-state';\nimport type { FeatureNodeData } from '@/components/common/feature-node';\n\nexport interface BuildFeatureNodeDataOptions {\n baseBranch?: string;\n repositoryName?: string;\n /** AI-generated one-liner from FeatureArtifact */\n oneLiner?: string;\n /** Remote URL for the repository (HTTPS) */\n remoteUrl?: string;\n}\n\n/**\n * Builds a FeatureNodeData object from a Feature entity and optional AgentRun.\n * This is the single-feature version of the logic in `buildGraphNodes`.\n */\nexport function buildFeatureNodeData(\n feature: Feature,\n run: AgentRun | null,\n options?: BuildFeatureNodeDataOptions\n): FeatureNodeData {\n return {\n name: feature.name,\n description: feature.description ?? feature.slug,\n featureId: feature.id,\n lifecycle: deriveLifecycle(feature, run),\n repositoryPath: feature.repositoryPath,\n branch: feature.branch,\n specPath: feature.specPath,\n state: deriveNodeState(feature, run),\n progress: deriveProgress(feature),\n summary: feature.description,\n userQuery: feature.userQuery,\n createdAt: feature.createdAt instanceof Date ? feature.createdAt.getTime() : feature.createdAt,\n ...(feature.fast && { fastMode: true }),\n ...(options?.repositoryName && { repositoryName: options.repositoryName }),\n ...(options?.baseBranch && { baseBranch: options.baseBranch }),\n ...(options?.oneLiner && { oneLiner: options.oneLiner }),\n ...(options?.remoteUrl && { remoteUrl: options.remoteUrl }),\n ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),\n ...(run?.modelId && { modelId: run.modelId }),\n ...(run?.error && { errorMessage: run.error }),\n ...(feature.pr && {\n pr: {\n url: feature.pr.url,\n number: feature.pr.number,\n status: feature.pr.status,\n ciStatus: feature.pr.ciStatus,\n commitHash: feature.pr.commitHash,\n mergeable: feature.pr.mergeable,\n },\n }),\n };\n}\n","import type { FeatureNodeData } from '@/components/common/feature-node';\nimport type { RepositoryNodeData } from '@/components/common/repository-node';\nimport type { ParentFeatureOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\nimport type { WorkflowDefaults } from '@/app/actions/get-workflow-defaults';\n\n/** Tab key matching FeatureDrawerTabs */\nexport type FeatureTabKey =\n | 'overview'\n | 'activity'\n | 'log'\n | 'plan'\n | 'prd-review'\n | 'tech-decisions'\n | 'product-decisions'\n | 'merge-review';\n\n/** All valid tab key values — used for URL param validation. */\nexport const VALID_TAB_KEYS: ReadonlySet<string> = new Set<FeatureTabKey>([\n 'overview',\n 'activity',\n 'log',\n 'plan',\n 'prd-review',\n 'tech-decisions',\n 'product-decisions',\n 'merge-review',\n]);\n\n/** Type-guard: returns the value as FeatureTabKey if valid, otherwise undefined. */\nexport function parseTabKey(value: string | null | undefined): FeatureTabKey | undefined {\n if (value && VALID_TAB_KEYS.has(value)) return value as FeatureTabKey;\n return undefined;\n}\n\n/**\n * Discriminated union representing every possible drawer state in the control center.\n * Only one view can be active at a time.\n */\nexport type DrawerView =\n /** All feature views — tabs handle the lifecycle-specific content */\n | { type: 'feature'; node: FeatureNodeData; initialTab: FeatureTabKey }\n /** Feature creation form */\n | {\n type: 'feature-create';\n repositoryPath: string;\n initialParentId?: string;\n features: ParentFeatureOption[];\n workflowDefaults?: WorkflowDefaults;\n }\n /** Repository node actions */\n | { type: 'repository'; data: RepositoryNodeData };\n\n/** Derives the initial tab from node lifecycle + state. */\nexport function deriveInitialTab(node: FeatureNodeData): FeatureTabKey {\n if (node.lifecycle === 'requirements' && node.state === 'action-required') return 'prd-review';\n if (node.lifecycle === 'implementation' && node.state === 'action-required')\n return 'tech-decisions';\n if (node.lifecycle === 'review' && (node.state === 'action-required' || node.state === 'error'))\n return 'merge-review';\n return 'overview';\n}\n\n/**\n * Derives the active DrawerView from control-center state.\n * Priority: feature-create > selected-node > repository\n */\nexport function computeDrawerView({\n selectedNode,\n isCreateDrawerOpen,\n pendingRepositoryPath,\n pendingParentFeatureId,\n selectedRepoNode,\n features,\n workflowDefaults,\n}: {\n selectedNode: FeatureNodeData | null;\n isCreateDrawerOpen: boolean;\n pendingRepositoryPath: string;\n pendingParentFeatureId: string | undefined;\n selectedRepoNode: RepositoryNodeData | null;\n features: ParentFeatureOption[];\n workflowDefaults: WorkflowDefaults | undefined;\n}): DrawerView | null {\n if (isCreateDrawerOpen) {\n return {\n type: 'feature-create',\n repositoryPath: pendingRepositoryPath,\n initialParentId: pendingParentFeatureId,\n features,\n workflowDefaults,\n };\n }\n\n if (selectedNode) {\n return { type: 'feature', node: selectedNode, initialTab: deriveInitialTab(selectedNode) };\n }\n\n if (selectedRepoNode) {\n return { type: 'repository', data: selectedRepoNode };\n }\n\n return null;\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const FeatureDrawerClient = registerClientReference(\n function() { throw new Error(\"Attempted to call FeatureDrawerClient() from the server but FeatureDrawerClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx\",\n \"FeatureDrawerClient\",\n);\n","import { resolve } from '@/lib/server-container';\nimport type { IFeatureRepository } from '@shepai/core/application/ports/output/repositories/feature-repository.interface';\nimport type { IAgentRunRepository } from '@shepai/core/application/ports/output/agents/agent-run-repository.interface';\nimport type { IRepositoryRepository } from '@shepai/core/application/ports/output/repositories/repository-repository.interface';\nimport type { IGitPrService } from '@shepai/core/application/ports/output/services/git-pr-service.interface';\nimport type { GetFeatureArtifactUseCase } from '@shepai/core/application/use-cases/features/get-feature-artifact.use-case';\nimport { CiStatus } from '@shepai/core/domain/generated/output';\nimport { buildFeatureNodeData } from '@/app/build-feature-node-data';\nimport { computeDrawerView } from '@/components/common/control-center-drawer/drawer-view';\nimport { FeatureDrawerClient } from '@/components/common/control-center-drawer/feature-drawer-client';\n\nconst CI_STATUS_MAP: Record<string, CiStatus> = {\n success: CiStatus.Success,\n failure: CiStatus.Failure,\n pending: CiStatus.Pending,\n};\n\n/** Skip static pre-rendering since we need runtime DI container. */\nexport const dynamic = 'force-dynamic';\n\ninterface FeatureDrawerPageProps {\n params: Promise<{ featureId: string }>;\n}\n\nexport default async function FeatureDrawerPage({ params }: FeatureDrawerPageProps) {\n const { featureId } = await params;\n\n try {\n const featureRepo = resolve<IFeatureRepository>('IFeatureRepository');\n const agentRunRepo = resolve<IAgentRunRepository>('IAgentRunRepository');\n const repoRepo = resolve<IRepositoryRepository>('IRepositoryRepository');\n const gitPrService = resolve<IGitPrService>('IGitPrService');\n\n const feature = await featureRepo.findById(featureId);\n if (!feature) return null;\n\n const run = feature.agentRunId ? await agentRunRepo.findById(feature.agentRunId) : null;\n\n // Resolve repository name, base branch, and one-liner for the overview tab\n const getArtifact = resolve<GetFeatureArtifactUseCase>('GetFeatureArtifactUseCase');\n const [repo, baseBranch, artifact, remoteUrl, liveMergeable, liveCiResult] = await Promise.all([\n repoRepo.findByPath(feature.repositoryPath).catch(() => null),\n gitPrService.getDefaultBranch(feature.repositoryPath).catch(() => 'main'),\n getArtifact.execute(featureId).catch(() => null),\n gitPrService.getRemoteUrl(feature.repositoryPath).catch(() => null),\n feature.pr?.number\n ? gitPrService\n .getMergeableStatus(feature.repositoryPath, feature.pr.number)\n .catch(() => undefined)\n : Promise.resolve(undefined),\n feature.branch\n ? gitPrService.getCiStatus(feature.repositoryPath, feature.branch).catch(() => undefined)\n : Promise.resolve(undefined),\n ]);\n\n // Merge live PR status into feature data so the UI always reflects\n // the current GitHub state, even if the background watcher hasn't polled yet.\n if (feature.pr) {\n const liveCiStatus = liveCiResult\n ? (CI_STATUS_MAP[liveCiResult.status] ?? CiStatus.Pending)\n : undefined;\n const updates: Record<string, unknown> = {};\n if (liveMergeable !== undefined) updates.mergeable = liveMergeable;\n if (liveCiStatus !== undefined) updates.ciStatus = liveCiStatus;\n\n if (Object.keys(updates).length > 0) {\n feature.pr = { ...feature.pr, ...updates };\n featureRepo.update(feature).catch(() => {\n /* best-effort persist */\n });\n }\n }\n\n const nodeData = buildFeatureNodeData(feature, run, {\n repositoryName: repo?.name,\n baseBranch,\n oneLiner: artifact?.oneLiner,\n remoteUrl: remoteUrl ?? undefined,\n });\n\n const view = computeDrawerView({\n selectedNode: nodeData,\n isCreateDrawerOpen: false,\n pendingRepositoryPath: '',\n pendingParentFeatureId: undefined,\n selectedRepoNode: null,\n features: [],\n workflowDefaults: undefined,\n });\n\n if (!view) return null;\n\n return <FeatureDrawerClient view={view} />;\n } catch {\n // Feature not found — render nothing (drawer stays closed)\n return null;\n }\n}\n"],"names":[],"mappings":"0ZACA,IAAA,EAAA,EAAA,CAAA,CAAA,OAoBO,SAAS,EACd,CAAgB,CAChB,CAAoB,CACpB,CAAqC,EAErC,MAAO,CACL,KAAM,EAAQ,IAAI,CAClB,YAAa,EAAQ,WAAW,EAAI,EAAQ,IAAI,CAChD,UAAW,EAAQ,EAAE,CACrB,UAAW,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC,EAAS,GACpC,eAAgB,EAAQ,cAAc,CACtC,OAAQ,EAAQ,MAAM,CACtB,SAAU,EAAQ,QAAQ,CAC1B,MAAO,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC,EAAS,GAChC,SAAU,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,GACzB,QAAS,EAAQ,WAAW,CAC5B,UAAW,EAAQ,SAAS,CAC5B,UAAW,EAAQ,SAAS,YAAY,KAAO,EAAQ,SAAS,CAAC,OAAO,GAAK,EAAQ,SAAS,CAC9F,GAAI,EAAQ,IAAI,EAAI,CAAE,UAAU,CAAK,CAAC,CACtC,GAAI,GAAS,gBAAkB,CAAE,eAAgB,EAAQ,cAAc,AAAC,CAAC,CACzE,GAAI,GAAS,YAAc,CAAE,WAAY,EAAQ,UAAU,AAAC,CAAC,CAC7D,GAAI,GAAS,UAAY,CAAE,SAAU,EAAQ,QAAS,AAAD,CAAE,CACvD,GAAI,GAAS,WAAa,CAAE,UAAW,EAAQ,SAAS,AAAC,CAAC,CAC1D,GAAI,GAAK,WAAa,CAAE,UAAW,EAAI,SAAS,AAAiC,CAAC,CAClF,GAAI,GAAK,SAAW,CAAE,QAAS,EAAI,OAAO,AAAC,CAAC,CAC5C,GAAI,GAAK,OAAS,CAAE,aAAc,EAAI,KAAK,AAAC,CAAC,CAC7C,GAAI,EAAQ,EAAE,EAAI,CAChB,GAAI,CACF,IAAK,EAAQ,EAAE,CAAC,GAAG,CACnB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,OAAQ,EAAQ,EAAE,CAAC,MAAM,CACzB,SAAU,EAAQ,EAAE,CAAC,QAAQ,CAC7B,WAAY,EAAQ,EAAE,CAAC,UAAU,CACjC,UAAW,EAAQ,EAAE,CAAC,SACxB,AADiC,CAEnC,CAAC,AACH,CACF,2CCzCO,IAAM,EAAsC,IAAI,IAAmB,CACxE,WACA,WACA,MACA,OACA,aACA,iBACA,oBACA,eACD,EAGM,SAAS,EAAY,CAAgC,EAC1D,GAAI,GAAS,EAAe,GAAG,CAAC,GAAQ,OAAO,CAEjD,CAkCO,SAAS,EAAkB,cAChC,CAAY,oBACZ,CAAkB,uBAClB,CAAqB,wBACrB,CAAsB,kBACtB,CAAgB,UAChB,CAAQ,CACR,kBAAgB,CASjB,EACC,GAAI,EACF,MAAO,CACL,KAAM,MAFc,WAGpB,eAAgB,EAChB,gBAAiB,WACjB,mBACA,CACF,EAGF,GAAI,EACF,MAAO,CAAE,KADO,AACD,UAAW,KAAM,EAAc,WAxChD,AAAuB,CAwCqC,gBAxCxD,EAAK,SAAS,EAAsC,mBAAmB,CAAlC,EAAK,KAAK,CAA+B,aAC3D,mBAAnB,EAAK,SAAS,EAAwC,mBACxD,CADyC,AAuCkC,EAvC7B,KAAK,CAC5C,iBACc,WAAnB,CAA+B,CAA1B,SAAS,GAAiC,oBAAf,EAAK,KAAK,EAAyC,UAAf,EAAK,KAAK,AAAK,CAAO,CACrF,EAAP,aACK,UAmCoF,SAG3F,AAAI,EACK,CAAE,KAAM,UADK,GACS,KAAM,CAAiB,EAG/C,IACT,sHCpGO,IAAM,EAAsB,CAAA,EAAA,AADnC,EAAA,CAAA,CAAA,OACmC,uBAAA,AAAuB,EACtD,WAAa,MAAM,AAAI,MAAM,oPAAsP,EACnR,uHACA,kFAHG,IAAM,EAAsB,CAAA,EAAA,AADnC,EAAA,CAAA,CAAA,OACmC,uBAAA,AAAuB,EACtD,WAAa,MAAM,AAAI,MAAM,oPAAsP,EACnR,mGACA,0HCLJ,EAAA,EAAA,CAAA,CAAA,OAMA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAA0C,CAC9C,QAAS,EAAA,QAAQ,CAAC,OAAO,CACzB,QAAS,EAAA,QAAQ,CAAC,OAAO,CACzB,QAAS,EAAA,QAAQ,CAAC,OAAO,AAC3B,EASe,eAAe,EAAkB,QAAE,CAAM,CAA0B,EAChF,GAAM,WAAE,CAAS,CAAE,CAAG,MAAM,EAE5B,GAAI,CACF,IAAM,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAAqB,sBAC1C,EAAe,CAAA,EAAA,EAAA,OAAA,AAAO,EAAsB,uBAC5C,EAAW,CAAA,EAAA,EAAA,OAAA,AAAO,EAAwB,yBAC1C,EAAe,CAAA,EAAA,EAAA,OAAA,AAAO,EAAgB,iBAEtC,EAAU,MAAM,EAAY,QAAQ,CAAC,GAC3C,GAAI,CAAC,EAAS,OAAO,KAErB,IAAM,EAAM,EAAQ,UAAU,CAAG,MAAM,EAAa,QAAQ,CAAC,EAAQ,UAAU,EAAI,KAG7E,EAAc,CAAA,EAAA,EAAA,OAAA,AAAO,EAA4B,6BACjD,CAAC,EAAM,EAAY,EAAU,EAAW,EAAe,EAAa,CAAG,MAAM,QAAQ,GAAG,CAAC,CAC7F,EAAS,UAAU,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,MACxD,EAAa,gBAAgB,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,QAClE,EAAY,OAAO,CAAC,GAAW,KAAK,CAAC,IAAM,MAC3C,EAAa,YAAY,CAAC,EAAQ,cAAc,EAAE,KAAK,CAAC,IAAM,MAC9D,EAAQ,EAAE,EAAE,OACR,EACG,kBAAkB,CAAC,EAAQ,cAAc,CAAE,EAAQ,EAAE,CAAC,MAAM,EAC5D,KAAK,CAAC,IAAM,QACf,QAAQ,OAAO,MAAC,GACpB,EAAQ,MAAM,CACV,EAAa,WAAW,CAAC,EAAQ,cAAc,CAAE,EAAQ,MAAM,EAAE,KAAK,CAAC,SAAM,GAC7E,QAAQ,OAAO,MAAC,GACrB,EAID,GAAI,EAAQ,EAAE,CAAE,CACd,IAAM,EAAe,EAChB,CAAa,CAAC,EAAa,MAAM,CAAC,EAAI,EAAA,QAAQ,CAAC,OAAO,MACvD,EACE,EAAmC,CAAC,OACpB,IAAlB,GAA6B,GAAQ,SAAS,CAAG,CAAA,OAChC,IAAjB,IAA4B,EAAQ,QAAQ,CAAG,CAAA,EAE/C,OAAO,IAAI,CAAC,GAAS,MAAM,CAAG,GAAG,CACnC,EAAQ,EAAE,CAAG,CAAE,GAAG,EAAQ,EAAE,CAAE,GAAG,CAAO,AAAC,EACzC,EAAY,MAAM,CAAC,GAAS,KAAK,CAAC,KAElC,GAEJ,CAEA,IAAM,EAAW,CAAA,EAAA,EAAA,oBAAA,AAAoB,EAAC,EAAS,EAAK,CAClD,eAAgB,GAAM,gBACtB,EACA,SAAU,GAAU,SACpB,UAAW,QAAa,CAC1B,GAEM,EAAO,CAAA,EAAA,EAAA,iBAAA,AAAiB,EAAC,CAC7B,aAAc,EACd,oBAAoB,EACpB,sBAAuB,GACvB,4BAAwB,EACxB,iBAAkB,KAClB,SAAU,EAAE,CACZ,sBAAkB,CACpB,GAEA,GAAI,CAAC,EAAM,OAAO,KAElB,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,KAAM,GACpC,CAAE,KAAM,CAEN,OAAO,IACT,CACF,kCA/EuB","ignoreList":[2]}