@shepai/cli 1.123.0 → 1.124.0-pr394.51f17b9

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 (300) hide show
  1. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +11 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +25 -0
  4. package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +49 -0
  6. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +188 -0
  8. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts +33 -0
  9. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.d.ts.map +1 -0
  10. package/dist/packages/core/src/application/use-cases/features/branch-name-utils.js +77 -0
  11. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  12. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  13. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts +1 -0
  14. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  15. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +8 -0
  16. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +2 -0
  17. package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
  18. package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +39 -0
  19. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts +14 -0
  20. package/dist/src/presentation/cli/commands/feat/adopt.command.d.ts.map +1 -0
  21. package/dist/src/presentation/cli/commands/feat/adopt.command.js +46 -0
  22. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  23. package/dist/src/presentation/cli/commands/feat/index.js +3 -1
  24. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts +10 -0
  25. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.d.ts.map +1 -0
  26. package/dist/src/presentation/web/app/(dashboard)/@drawer/adopt/page.js +26 -0
  27. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts +11 -0
  28. package/dist/src/presentation/web/app/actions/adopt-branch.d.ts.map +1 -0
  29. package/dist/src/presentation/web/app/actions/adopt-branch.js +20 -0
  30. package/dist/src/presentation/web/app/actions/list-branches.d.ts +6 -0
  31. package/dist/src/presentation/web/app/actions/list-branches.d.ts.map +1 -0
  32. package/dist/src/presentation/web/app/actions/list-branches.js +18 -0
  33. package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
  34. package/dist/src/presentation/web/app/build-feature-node-data.js +1 -0
  35. package/dist/src/presentation/web/app/build-graph-nodes.js +1 -0
  36. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts +20 -0
  37. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +1 -0
  38. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +105 -0
  39. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts +38 -0
  40. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.d.ts.map +1 -0
  41. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.stories.js +161 -0
  42. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts +7 -0
  43. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.d.ts.map +1 -0
  44. package/dist/src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.js +78 -0
  45. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +1 -1
  46. package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +4 -1
  47. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +4 -0
  49. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +2 -0
  50. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  52. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +14 -6
  53. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +1 -0
  54. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +16 -0
  56. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +12 -3
  58. package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +1 -1
  59. package/dist/src/presentation/web/hooks/use-feature-logs.js +7 -2
  60. package/dist/tsconfig.build.tsbuildinfo +1 -1
  61. package/package.json +1 -1
  62. package/web/.next/BUILD_ID +1 -1
  63. package/web/.next/app-path-routes-manifest.json +1 -0
  64. package/web/.next/build-manifest.json +4 -4
  65. package/web/.next/fallback-build-manifest.json +2 -2
  66. package/web/.next/prerender-manifest.json +3 -3
  67. package/web/.next/required-server-files.js +3 -3
  68. package/web/.next/required-server-files.json +3 -3
  69. package/web/.next/routes-manifest.json +6 -0
  70. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/app-paths-manifest.json +3 -0
  71. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +18 -0
  72. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -0
  73. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +1 -0
  74. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +335 -0
  75. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +20 -0
  76. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.map +5 -0
  77. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -0
  78. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +2 -0
  79. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +2 -2
  80. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
  81. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +2 -2
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
  89. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +2 -2
  92. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  93. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +2 -2
  96. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
  97. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  98. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +2 -2
  100. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  101. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  102. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +2 -2
  104. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
  105. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  106. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/(dashboard)/page/build-manifest.json +2 -2
  108. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
  109. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  110. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +2 -2
  112. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  113. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  114. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  116. package/web/.next/server/app/_global-error.html +2 -2
  117. package/web/.next/server/app/_global-error.rsc +1 -1
  118. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  119. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  120. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  121. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  122. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  123. package/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  124. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  125. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  126. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  128. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  129. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  130. package/web/.next/server/app/settings/page/build-manifest.json +2 -2
  131. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  132. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  133. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/skills/page/build-manifest.json +2 -2
  135. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  136. package/web/.next/server/app/skills/page.js +4 -4
  137. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  138. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  139. package/web/.next/server/app/tools/page/build-manifest.json +2 -2
  140. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  141. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  142. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  143. package/web/.next/server/app/version/page/build-manifest.json +2 -2
  144. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  145. package/web/.next/server/app/version/page.js.nft.json +1 -1
  146. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  147. package/web/.next/server/app-paths-manifest.json +1 -0
  148. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  149. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  150. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  151. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js +3 -0
  152. package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_94d75bc3._.js.map +1 -0
  153. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.js +3 -0
  154. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_cfc9281c.js.map +1 -0
  155. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  156. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
  158. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
  160. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js +3 -0
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__02c84e6b._.js.map +1 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__14664e9b._.js +2 -2
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6677a82c._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__7cbda1ea._.js.map +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +2 -2
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__9e8b25ad._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +2 -2
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__aed1d6f8._.js.map +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js +1 -1
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__ce6057f6._.js.map +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js +3 -0
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__e2227c0f._.js.map +1 -0
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js +3 -0
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__f0589cc3._.js.map +1 -0
  187. package/web/.next/server/chunks/ssr/_037585d1._.js +3 -0
  188. package/web/.next/server/chunks/ssr/_037585d1._.js.map +1 -0
  189. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  190. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  191. package/web/.next/server/chunks/ssr/_19a2fb35._.js +3 -0
  192. package/web/.next/server/chunks/ssr/_19a2fb35._.js.map +1 -0
  193. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  194. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  195. package/web/.next/server/chunks/ssr/_3512e84d._.js +3 -0
  196. package/web/.next/server/chunks/ssr/_3512e84d._.js.map +1 -0
  197. package/web/.next/server/chunks/ssr/_4093a637._.js +5 -0
  198. package/web/.next/server/chunks/ssr/_4093a637._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/_583a83fb._.js +3 -0
  200. package/web/.next/server/chunks/ssr/_583a83fb._.js.map +1 -0
  201. package/web/.next/server/chunks/ssr/{_960ceb5d._.js → _80fbf379._.js} +2 -2
  202. package/web/.next/server/chunks/ssr/{_960ceb5d._.js.map → _80fbf379._.js.map} +1 -1
  203. package/web/.next/server/chunks/ssr/_9f56cf8f._.js +3 -0
  204. package/web/.next/server/chunks/ssr/_9f56cf8f._.js.map +1 -0
  205. package/web/.next/server/chunks/ssr/_a187fd7e._.js +3 -0
  206. package/web/.next/server/chunks/ssr/_a187fd7e._.js.map +1 -0
  207. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  208. package/web/.next/server/chunks/ssr/_a5aa6371._.js +9 -0
  209. package/web/.next/server/chunks/ssr/_a5aa6371._.js.map +1 -0
  210. package/web/.next/server/chunks/ssr/_a9f57758._.js +3 -0
  211. package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -0
  212. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  213. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/_d5206f22._.js +4 -0
  215. package/web/.next/server/chunks/ssr/_d5206f22._.js.map +1 -0
  216. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  217. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +3 -0
  219. package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +3 -0
  221. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/src_presentation_web_209b6a9d._.js +3 -0
  223. package/web/.next/server/chunks/ssr/src_presentation_web_209b6a9d._.js.map +1 -0
  224. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
  225. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
  226. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
  227. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
  228. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  229. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  230. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  231. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  232. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
  233. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  235. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  237. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  239. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  240. package/web/.next/server/middleware-build-manifest.js +2 -2
  241. package/web/.next/server/pages/500.html +2 -2
  242. package/web/.next/server/server-reference-manifest.js +1 -1
  243. package/web/.next/server/server-reference-manifest.json +204 -34
  244. package/web/.next/static/chunks/{64d063449c3be0ec.js → 0cf60be7a4934d12.js} +1 -1
  245. package/web/.next/static/chunks/{9821072252ddb89a.js → 0eeaa91a94175b53.js} +1 -1
  246. package/web/.next/static/chunks/{373e10090c6410c4.js → 11172e5a309e280b.js} +3 -3
  247. package/web/.next/static/chunks/{f0dfeedb263eb906.js → 2433342922624243.js} +1 -1
  248. package/web/.next/static/chunks/3e3e9c6552a6574f.css +1 -0
  249. package/web/.next/static/chunks/42f191e0fba535cc.js +1 -0
  250. package/web/.next/static/chunks/{878643f90bc6360f.js → 4cda05712d527e09.js} +2 -2
  251. package/web/.next/static/chunks/{310be54600c8ce20.js → 530d7b4d56b22920.js} +2 -2
  252. package/web/.next/static/chunks/5663ef4ab20da669.js +1 -0
  253. package/web/.next/static/chunks/6295f27fe47da052.js +1 -0
  254. package/web/.next/static/chunks/8080c842b0358904.js +1 -0
  255. package/web/.next/static/chunks/{ed3a602003bcb31b.js → 89aac43287d73b02.js} +1 -1
  256. package/web/.next/static/chunks/{3f6c44cbad751310.js → 9bef132bb1b2dea3.js} +1 -1
  257. package/web/.next/static/chunks/a8ba3f3e2b0f87aa.js +1 -0
  258. package/web/.next/static/chunks/c709356359172832.js +1 -0
  259. package/web/.next/static/chunks/d04de4be30ab78ca.js +3 -0
  260. package/web/.next/static/chunks/d9e52c67b63d71ae.js +1 -0
  261. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-080e470ea902d0ba.js} +1 -1
  262. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js +0 -3
  263. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +0 -1
  264. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
  265. package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js.map +0 -1
  266. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +0 -3
  267. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +0 -1
  268. package/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
  269. package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +0 -1
  270. package/web/.next/server/chunks/ssr/_6d26a08f._.js +0 -3
  271. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +0 -1
  272. package/web/.next/server/chunks/ssr/_9ac70f88._.js +0 -5
  273. package/web/.next/server/chunks/ssr/_9ac70f88._.js.map +0 -1
  274. package/web/.next/server/chunks/ssr/_b56e7571._.js +0 -3
  275. package/web/.next/server/chunks/ssr/_b56e7571._.js.map +0 -1
  276. package/web/.next/server/chunks/ssr/_e9703421._.js +0 -3
  277. package/web/.next/server/chunks/ssr/_e9703421._.js.map +0 -1
  278. package/web/.next/server/chunks/ssr/_f1a649e3._.js +0 -9
  279. package/web/.next/server/chunks/ssr/_f1a649e3._.js.map +0 -1
  280. package/web/.next/server/chunks/ssr/_fd4c574b._.js +0 -3
  281. package/web/.next/server/chunks/ssr/_fd4c574b._.js.map +0 -1
  282. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js +0 -3
  283. package/web/.next/server/chunks/ssr/node_modules__pnpm_bc66dcc6._.js.map +0 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +0 -3
  285. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +0 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +0 -3
  287. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +0 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_db779ef4._.js +0 -3
  289. package/web/.next/server/chunks/ssr/src_presentation_web_db779ef4._.js.map +0 -1
  290. package/web/.next/static/chunks/303a1217006489b9.js +0 -1
  291. package/web/.next/static/chunks/3925626b99dcd57a.css +0 -1
  292. package/web/.next/static/chunks/4443ee9c7733399b.js +0 -1
  293. package/web/.next/static/chunks/52b56677c842e45f.js +0 -3
  294. package/web/.next/static/chunks/694718e5449b3150.js +0 -1
  295. package/web/.next/static/chunks/94af5be1ccf8842e.js +0 -1
  296. package/web/.next/static/chunks/dbbb446493f21874.js +0 -1
  297. package/web/.next/static/chunks/e418898e8e02f50a.js +0 -1
  298. /package/web/.next/static/{gBTe97SiNDA2hbG9dbfpb → XVFClBFC1M2KcF9X8u1Qn}/_buildManifest.js +0 -0
  299. /package/web/.next/static/{gBTe97SiNDA2hbG9dbfpb → XVFClBFC1M2KcF9X8u1Qn}/_clientMiddlewareManifest.json +0 -0
  300. /package/web/.next/static/{gBTe97SiNDA2hbG9dbfpb → XVFClBFC1M2KcF9X8u1Qn}/_ssgManifest.js +0 -0
@@ -51,6 +51,10 @@ export function deriveNodeState(feature, agentRun, options) {
51
51
  if (feature.lifecycle === SdlcLifecycle.Maintain) {
52
52
  return 'done';
53
53
  }
54
+ // Adopted branch with an open PR — needs user review/merge action
55
+ if (feature.lifecycle === SdlcLifecycle.Review && !agentRun) {
56
+ return 'action-required';
57
+ }
54
58
  const tasks = feature.plan?.tasks;
55
59
  if (!tasks || tasks.length === 0) {
56
60
  return 'running';
@@ -77,6 +77,8 @@ export interface FeatureNodeData {
77
77
  enableEvidence?: boolean;
78
78
  /** Whether evidence is committed to the PR body */
79
79
  commitEvidence?: boolean;
80
+ /** Whether the feature has an associated agent run (for log tab visibility) */
81
+ hasAgentRun?: boolean;
80
82
  /** Whether the feature has plan data available */
81
83
  hasPlan?: boolean;
82
84
  /** Deployment status for features with an active deployment */
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-node-state-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node-state-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA6DnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA8UA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA6DnE,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAiWA"}
@@ -80,16 +80,24 @@ export function FeatureNode({ data, selected, }) {
80
80
  ? 'BLOCKED'
81
81
  : data.state === 'pending'
82
82
  ? 'PENDING'
83
- : lifecycleDisplayLabels[data.lifecycle] }), _jsxs("div", { className: "flex items-center gap-0.5", children: [data.fastMode ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-fast-mode-badge", className: "-mt-1 p-1", children: _jsx(Zap, { className: "h-3.5 w-3.5 text-amber-500" }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Fast Mode" })] }) })) : null, data.agentType ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": agentTypeLabels[data.agentType] ?? data.agentType, "data-testid": "feature-node-agent-badge", onClick: (e) => {
83
+ : lifecycleDisplayLabels[data.lifecycle] }), _jsxs("div", { className: "flex items-center gap-0.5", children: [data.deployment ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": data.deployment.status === DeploymentState.Booting
84
+ ? 'Deploying'
85
+ : 'Open dev server', "data-testid": "feature-node-deployment-indicator", onClick: (e) => {
86
+ e.stopPropagation();
87
+ if (data.deployment?.status === DeploymentState.Ready &&
88
+ data.deployment.url) {
89
+ window.open(data.deployment.url, '_blank', 'noopener,noreferrer');
90
+ }
91
+ }, className: cn('nodrag -mt-1 p-1', data.deployment.status === DeploymentState.Ready && data.deployment.url
92
+ ? 'cursor-pointer opacity-80 transition-opacity hover:opacity-100'
93
+ : 'cursor-default'), children: data.deployment.status === DeploymentState.Booting ? (_jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin text-blue-500" })) : (_jsx(Globe, { className: "h-3.5 w-3.5 text-green-600" })) }) }), _jsx(TooltipContent, { side: "bottom", children: data.deployment.status === DeploymentState.Booting
94
+ ? 'Deploying...'
95
+ : (data.deployment.url ?? 'Live') })] }) })) : null, data.fastMode ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { "data-testid": "feature-node-fast-mode-badge", className: "-mt-1 p-1", children: _jsx(Zap, { className: "h-3.5 w-3.5 text-amber-500" }) }) }), _jsx(TooltipContent, { side: "bottom", children: "Fast Mode" })] }) })) : null, data.agentType ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": agentTypeLabels[data.agentType] ?? data.agentType, "data-testid": "feature-node-agent-badge", onClick: (e) => {
84
96
  e.stopPropagation();
85
97
  data.onSettings?.();
86
98
  }, className: cn('nodrag -mt-1 -mr-1 p-1', data.onSettings
87
99
  ? 'cursor-pointer opacity-80 transition-opacity hover:opacity-100'
88
- : 'cursor-default'), children: _jsx(AgentIcon, { agentType: data.agentType, className: "h-3.5 w-3.5" }) }) }), _jsxs(TooltipContent, { side: "bottom", children: [_jsx("span", { className: "font-medium", children: agentTypeLabels[data.agentType] ?? data.agentType }), data.modelId ? (_jsxs("span", { className: "ml-1 opacity-70", children: ["\u00B7 ", getModelMeta(data.modelId).displayName || data.modelId] })) : null] })] }) })) : null] })] }), _jsx("h3", { className: "mt-1 truncate text-sm font-bold", children: data.name }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-0.5 truncate text-xs", children: data.description })) : null, data.deployment ? (_jsxs("div", { "data-testid": "feature-node-deployment-indicator", className: cn('mt-1.5 flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-medium', data.deployment.status === DeploymentState.Booting
89
- ? 'bg-blue-50 text-blue-700'
90
- : 'bg-green-50 text-green-700'), children: [data.deployment.status === DeploymentState.Booting ? (_jsx(Loader2, { className: "h-3 w-3 animate-spin" })) : (_jsx(Globe, { className: "h-3 w-3" })), _jsx("span", { className: "truncate", children: data.deployment.status === DeploymentState.Booting
91
- ? 'Deploying...'
92
- : (data.deployment.url ?? 'Live') })] })) : null, _jsx("div", { className: "mt-auto pt-2", children: data.state === 'deleting' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(Trash2, { className: "h-3.5 w-3.5 shrink-0 text-gray-400" }), _jsx("span", { className: "text-muted-foreground", children: "Deleting\u2026" })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "motion-safe:animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : data.state === 'creating' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 animate-spin" }), _jsx("span", { className: "text-muted-foreground", children: getBadgeText(data) })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "motion-safe:animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : data.state === 'running' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(AgentIcon, { agentType: data.agentType, className: "h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "text-muted-foreground", children: getBadgeText(data) })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : config.showProgressBar ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-muted-foreground flex items-center justify-end text-[10px]", children: _jsxs("span", { children: [data.progress, "%"] }) }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', config.progressClass), style: { width: `${data.progress}%` } }) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-[10px]", children: [_jsx("span", { children: data.featureId }), (data.worktreePath ?? data.repositoryPath) ? (_jsx(FeatureSessionsDropdown, { repositoryPath: data.worktreePath ?? data.repositoryPath })) : null] }), _jsxs("div", { className: "mt-1.5 flex items-center gap-1.5", children: [_jsxs("div", { "data-testid": "feature-node-badge", className: (() => {
100
+ : 'cursor-default'), children: _jsx(AgentIcon, { agentType: data.agentType, className: "h-3.5 w-3.5" }) }) }), _jsxs(TooltipContent, { side: "bottom", children: [_jsx("span", { className: "font-medium", children: agentTypeLabels[data.agentType] ?? data.agentType }), data.modelId ? (_jsxs("span", { className: "ml-1 opacity-70", children: ["\u00B7 ", getModelMeta(data.modelId).displayName || data.modelId] })) : null] })] }) })) : null] })] }), _jsx("h3", { className: "mt-1 truncate text-sm font-bold", children: data.name }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-0.5 truncate text-xs", children: data.description })) : null, _jsx("div", { className: "mt-auto pt-2", children: data.state === 'deleting' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(Trash2, { className: "h-3.5 w-3.5 shrink-0 text-gray-400" }), _jsx("span", { className: "text-muted-foreground", children: "Deleting\u2026" })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "motion-safe:animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : data.state === 'creating' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 animate-spin" }), _jsx("span", { className: "text-muted-foreground", children: getBadgeText(data) })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "motion-safe:animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : data.state === 'running' ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 text-xs", children: [_jsx(AgentIcon, { agentType: data.agentType, className: "h-3.5 w-3.5 shrink-0" }), _jsx("span", { className: "text-muted-foreground", children: getBadgeText(data) })] }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: "animate-indeterminate-progress bg-foreground/30 h-full w-1/3 rounded-full" }) })] })) : config.showProgressBar ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-muted-foreground flex items-center justify-end text-[10px]", children: _jsxs("span", { children: [data.progress, "%"] }) }), _jsx("div", { "data-testid": "feature-node-progress-bar", className: "bg-muted mt-1.5 h-1 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', config.progressClass), style: { width: `${data.progress}%` } }) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-[10px]", children: [_jsx("span", { children: data.featureId }), (data.worktreePath ?? data.repositoryPath) ? (_jsx(FeatureSessionsDropdown, { repositoryPath: data.worktreePath ?? data.repositoryPath })) : null] }), _jsxs("div", { className: "mt-1.5 flex items-center gap-1.5", children: [_jsxs("div", { "data-testid": "feature-node-badge", className: (() => {
93
101
  const override = getActionRequiredBadgeClasses(data);
94
102
  return cn('flex min-w-0 flex-1 items-center justify-center gap-1.5 rounded-full px-2.5 py-1 text-[11px] font-medium', override?.badgeBgClass ?? config.badgeBgClass, override?.badgeClass ?? config.badgeClass);
95
103
  })(), children: [(() => {
@@ -22,6 +22,7 @@ export declare const FastModeDone: Story;
22
22
  export declare const DeploymentBooting: Story;
23
23
  export declare const DeploymentReady: Story;
24
24
  export declare const DeploymentReadyNoUrl: Story;
25
+ export declare const DeploymentWithFastModeAndAgent: Story;
25
26
  export declare const Interactive: Story;
26
27
  export declare const Pending: Story;
27
28
  export declare const PendingWithStart: Story;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAiCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AA0HF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAYF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAatB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC"}
1
+ {"version":3,"file":"feature-node.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,6BAA6B,CAAC;AAiCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAc/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AA0HF,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAYF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AA2EF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAW7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAUvC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAY5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAatB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAY/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,KAe5C,CAAC;AA4EF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC"}
@@ -424,6 +424,22 @@ export const DeploymentReadyNoUrl = {
424
424
  },
425
425
  render: (args) => _jsx(FeatureNodeCanvas, { data: args }),
426
426
  };
427
+ export const DeploymentWithFastModeAndAgent = {
428
+ args: {
429
+ name: 'Full Stack App',
430
+ description: 'Next.js app with all inline icons',
431
+ featureId: '#d4',
432
+ lifecycle: 'deploy',
433
+ state: 'done',
434
+ progress: 100,
435
+ runtime: '22m',
436
+ fastMode: true,
437
+ agentType: 'claude-code',
438
+ modelId: 'claude-sonnet-4-6',
439
+ deployment: { status: DeploymentState.Ready, url: 'http://localhost:3000' },
440
+ },
441
+ render: (args) => _jsx(FeatureNodeCanvas, { data: args }),
442
+ };
427
443
  const interactiveInitialNodes = [
428
444
  {
429
445
  id: 'node-1',
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AA4FD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-shell/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvE,UAAU,aAAa;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAsGD,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAUnD"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useMemo, useState } from 'react';
4
4
  import { useRouter, usePathname } from 'next/navigation';
5
- import { Plus, FolderPlus } from 'lucide-react';
5
+ import { Plus, FolderPlus, GitBranch } from 'lucide-react';
6
6
  import { SidebarProvider, SidebarInset } from '../../ui/sidebar.js';
7
7
  import { AppSidebar } from '../../layouts/app-sidebar/index.js';
8
8
  import { FloatingActionButton, } from '../../common/floating-action-button/index.js';
@@ -15,7 +15,7 @@ import { SidebarFeaturesProvider, useSidebarFeaturesContext, } from '../../../ho
15
15
  import { useNotifications } from '../../../hooks/use-notifications.js';
16
16
  import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
17
17
  /** Control center route prefixes where the FAB should be visible. */
18
- const CONTROL_CENTER_PREFIXES = ['/', '/create', '/feature', '/repository'];
18
+ const CONTROL_CENTER_PREFIXES = ['/', '/create', '/adopt', '/feature', '/repository'];
19
19
  function isControlCenterRoute(pathname) {
20
20
  return CONTROL_CENTER_PREFIXES.some((prefix) => pathname === prefix || (prefix !== '/' && pathname.startsWith(`${prefix}/`)));
21
21
  }
@@ -30,6 +30,9 @@ function AppShellInner({ children }) {
30
30
  const handleNewFeature = useCallback(() => {
31
31
  guardedNavigate(() => router.push('/create'));
32
32
  }, [router, guardedNavigate]);
33
+ const handleAdoptBranch = useCallback(() => {
34
+ guardedNavigate(() => router.push('/adopt'));
35
+ }, [router, guardedNavigate]);
33
36
  const handleFeatureClick = useCallback((featureId) => {
34
37
  guardedNavigate(() => router.push(`/feature/${featureId}`));
35
38
  }, [router, guardedNavigate]);
@@ -55,6 +58,12 @@ function AppShellInner({ children }) {
55
58
  icon: _jsx(Plus, { className: "h-4 w-4" }),
56
59
  onClick: handleNewFeature,
57
60
  },
61
+ {
62
+ id: 'adopt-branch',
63
+ label: 'Adopt Branch',
64
+ icon: _jsx(GitBranch, { className: "h-4 w-4" }),
65
+ onClick: handleAdoptBranch,
66
+ },
58
67
  {
59
68
  id: 'add-repository',
60
69
  label: 'Add Repository',
@@ -62,7 +71,7 @@ function AppShellInner({ children }) {
62
71
  onClick: handleAddRepository,
63
72
  loading: addingRepo,
64
73
  },
65
- ], [handleNewFeature, handleAddRepository, addingRepo]);
74
+ ], [handleNewFeature, handleAdoptBranch, handleAddRepository, addingRepo]);
66
75
  return (_jsxs(SidebarProvider, { defaultOpen: false, children: [_jsx(AppSidebar, { features: features, featureFlags: featureFlags, onFeatureClick: handleFeatureClick }), _jsx(SidebarInset, { children: _jsxs("div", { className: "relative h-full", children: [_jsxs("div", { className: "absolute top-3 right-3 z-50 flex gap-1", "data-test-id": "canvas-actions-toolbar", children: [_jsx(SoundToggle, {}), _jsx(ThemeToggle, {})] }), _jsx("main", { className: "h-full", children: children }), isControlCenterRoute(pathname) && hasRepositories ? (_jsx(FloatingActionButton, { actions: fabActions })) : null] }) })] }));
67
76
  }
68
77
  export function AppShell({ children }) {
@@ -1 +1 @@
1
- {"version":3,"file":"use-feature-logs.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-feature-logs.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CA4DzF"}
1
+ {"version":3,"file":"use-feature-logs.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/use-feature-logs.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAgEzF"}
@@ -37,8 +37,13 @@ export function useFeatureLogs(featureId) {
37
37
  setContent((prev) => prev + data.content);
38
38
  });
39
39
  es.addEventListener('error', (event) => {
40
- const data = JSON.parse(event.data);
41
- setError(data.error);
40
+ try {
41
+ const data = JSON.parse(event.data);
42
+ setError(data.error);
43
+ }
44
+ catch {
45
+ setError(event.data ? String(event.data) : 'Log stream unavailable');
46
+ }
42
47
  });
43
48
  es.onerror = () => {
44
49
  setIsConnected(false);