@shepai/cli 1.136.0 → 1.136.1-pr440.ded6b06

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 (270) hide show
  1. package/apis/json-schema/Feature.yaml +3 -0
  2. package/apis/json-schema/SdlcLifecycle.yaml +1 -0
  3. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts +2 -0
  4. package/dist/packages/core/src/application/ports/output/repositories/feature-repository.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.d.ts +20 -0
  6. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.d.ts.map +1 -0
  7. package/dist/packages/core/src/application/use-cases/features/archive-feature.use-case.js +74 -0
  8. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  9. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +1 -1
  10. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts +12 -1
  11. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.d.ts.map +1 -1
  12. package/dist/packages/core/src/application/use-cases/features/create/metadata-generator.js +61 -4
  13. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.d.ts +20 -0
  14. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.d.ts.map +1 -0
  15. package/dist/packages/core/src/application/use-cases/features/unarchive-feature.use-case.js +65 -0
  16. package/dist/packages/core/src/domain/generated/output.d.ts +6 -1
  17. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  18. package/dist/packages/core/src/domain/generated/output.js +1 -0
  19. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/di/container.js +10 -0
  21. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -0
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +6 -0
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.d.ts +12 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.d.ts.map +1 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.js +16 -0
  27. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/repositories/sqlite-feature.repository.js +7 -2
  29. package/dist/src/presentation/cli/commands/feat/archive.command.d.ts +18 -0
  30. package/dist/src/presentation/cli/commands/feat/archive.command.d.ts.map +1 -0
  31. package/dist/src/presentation/cli/commands/feat/archive.command.js +54 -0
  32. package/dist/src/presentation/cli/commands/feat/index.d.ts.map +1 -1
  33. package/dist/src/presentation/cli/commands/feat/index.js +5 -1
  34. package/dist/src/presentation/cli/commands/feat/ls.command.d.ts.map +1 -1
  35. package/dist/src/presentation/cli/commands/feat/ls.command.js +5 -0
  36. package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts +17 -0
  37. package/dist/src/presentation/cli/commands/feat/unarchive.command.d.ts.map +1 -0
  38. package/dist/src/presentation/cli/commands/feat/unarchive.command.js +42 -0
  39. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.d.ts.map +1 -1
  40. package/dist/src/presentation/web/app/(dashboard)/get-graph-data.js +6 -1
  41. package/dist/src/presentation/web/app/actions/archive-feature.d.ts +6 -0
  42. package/dist/src/presentation/web/app/actions/archive-feature.d.ts.map +1 -0
  43. package/dist/src/presentation/web/app/actions/archive-feature.js +16 -0
  44. package/dist/src/presentation/web/app/actions/unarchive-feature.d.ts +6 -0
  45. package/dist/src/presentation/web/app/actions/unarchive-feature.d.ts.map +1 -0
  46. package/dist/src/presentation/web/app/actions/unarchive-feature.js +16 -0
  47. package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
  48. package/dist/src/presentation/web/app/api/agent-events/route.js +1 -0
  49. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.d.ts.map +1 -1
  50. package/dist/src/presentation/web/components/common/feature-node/derive-feature-state.js +6 -0
  51. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +3 -1
  52. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +11 -1
  54. package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
  55. package/dist/src/presentation/web/components/common/feature-node/feature-node.js +16 -2
  56. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts +5 -0
  57. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +75 -1
  59. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  60. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +13 -4
  61. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts +6 -0
  62. package/dist/src/presentation/web/components/features/control-center/control-center.stories.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/features/control-center/control-center.stories.js +70 -0
  64. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +6 -0
  65. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  66. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +43 -2
  67. package/dist/src/presentation/web/hooks/sidebar-features-context.d.ts.map +1 -1
  68. package/dist/src/presentation/web/hooks/sidebar-features-context.js +1 -0
  69. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +1 -1
  70. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  71. package/dist/src/presentation/web/hooks/use-graph-state.js +17 -2
  72. package/dist/src/presentation/web/lib/derive-graph.d.ts +4 -0
  73. package/dist/src/presentation/web/lib/derive-graph.d.ts.map +1 -1
  74. package/dist/src/presentation/web/lib/derive-graph.js +12 -0
  75. package/dist/tsconfig.build.tsbuildinfo +1 -1
  76. package/package.json +1 -1
  77. package/web/.next/BUILD_ID +1 -1
  78. package/web/.next/build-manifest.json +2 -2
  79. package/web/.next/fallback-build-manifest.json +2 -2
  80. package/web/.next/prerender-manifest.json +3 -3
  81. package/web/.next/required-server-files.js +3 -3
  82. package/web/.next/required-server-files.json +3 -3
  83. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +80 -50
  84. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
  85. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  86. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +80 -50
  88. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
  89. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  90. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +92 -62
  92. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
  93. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  95. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +92 -62
  96. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
  97. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +76 -46
  100. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
  101. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  102. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +80 -50
  104. package/web/.next/server/app/(dashboard)/create/page.js +2 -2
  105. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  106. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +92 -62
  108. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
  109. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  110. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +92 -62
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  114. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  115. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +76 -46
  116. package/web/.next/server/app/(dashboard)/page.js +2 -2
  117. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  118. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +76 -46
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  122. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  123. package/web/.next/server/app/_global-error.html +2 -2
  124. package/web/.next/server/app/_global-error.rsc +1 -1
  125. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  126. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  129. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  130. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
  131. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  132. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  133. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  134. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  135. package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
  136. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  137. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  138. package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
  139. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  140. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  141. package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
  142. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  143. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  144. package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
  145. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
  147. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
  148. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +2 -2
  149. package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
  150. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  151. package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +1 -1
  152. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js +1 -1
  153. package/web/.next/server/chunks/[root-of-the-server]__c6e32a23._.js.map +1 -1
  154. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +1 -1
  155. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  157. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
  159. package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__61564698._.js +4 -0
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__61564698._.js.map +1 -0
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__74ab160c._.js +4 -0
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__74ab160c._.js.map +1 -0
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js +2 -2
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd16cded._.js +4 -0
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__bd16cded._.js.map +1 -0
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__f14fffe1._.js +4 -0
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__f14fffe1._.js.map +1 -0
  180. package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_0f5e9205._.js +3 -0
  183. package/web/.next/server/chunks/ssr/{_aec44907._.js.map → _0f5e9205._.js.map} +1 -1
  184. package/web/.next/server/chunks/ssr/_29c444f1._.js +4 -0
  185. package/web/.next/server/chunks/ssr/_29c444f1._.js.map +1 -0
  186. package/web/.next/server/chunks/ssr/_2fdfd9ab._.js +4 -0
  187. package/web/.next/server/chunks/ssr/_2fdfd9ab._.js.map +1 -0
  188. package/web/.next/server/chunks/ssr/_65f6e0e0._.js +6 -0
  189. package/web/.next/server/chunks/ssr/_65f6e0e0._.js.map +1 -0
  190. package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
  191. package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/_a51673dd._.js +4 -0
  193. package/web/.next/server/chunks/ssr/_a51673dd._.js.map +1 -0
  194. package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
  195. package/web/.next/server/chunks/ssr/_ae587066._.js +4 -0
  196. package/web/.next/server/chunks/ssr/_ae587066._.js.map +1 -0
  197. package/web/.next/server/chunks/ssr/_d162e30d._.js +4 -0
  198. package/web/.next/server/chunks/ssr/_d162e30d._.js.map +1 -0
  199. package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/_d763f022._.js +6 -0
  201. package/web/.next/server/chunks/ssr/_d763f022._.js.map +1 -0
  202. package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
  203. package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
  205. package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  207. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
  209. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
  211. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +3 -0
  213. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +1 -0
  214. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
  215. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  217. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  219. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  220. package/web/.next/server/chunks/ssr/{src_presentation_web_d8202508._.js → src_presentation_web_eb026892._.js} +2 -2
  221. package/web/.next/server/chunks/ssr/{src_presentation_web_d8202508._.js.map → src_presentation_web_eb026892._.js.map} +1 -1
  222. package/web/.next/server/pages/500.html +2 -2
  223. package/web/.next/server/server-reference-manifest.js +1 -1
  224. package/web/.next/server/server-reference-manifest.json +463 -307
  225. package/web/.next/static/chunks/{ff9b5942b2cae4f7.js → 16b41271842fdbc1.js} +1 -1
  226. package/web/.next/static/chunks/{1693f840144b12bb.js → 232c8fb39d55eb0c.js} +2 -2
  227. package/web/.next/static/chunks/24d61546fc6aa030.css +1 -0
  228. package/web/.next/static/chunks/{07ea878c8d769b40.js → 2f0f60603e6a6ad3.js} +1 -1
  229. package/web/.next/static/chunks/{90af5015ea1684d2.js → 35c8485fb1995cf7.js} +1 -1
  230. package/web/.next/static/chunks/57802507d72b99ee.js +1 -0
  231. package/web/.next/static/chunks/5edd0e2e784ee069.js +2 -0
  232. package/web/.next/static/chunks/60f80d39976c5086.js +1 -0
  233. package/web/.next/static/chunks/{4916dcd902d80072.js → 94f12c16e8804d19.js} +1 -1
  234. package/web/.next/static/chunks/{3d6119fadfa8596f.js → a0072880b46edce7.js} +1 -1
  235. package/web/.next/static/chunks/b02f266e89ba1dd8.js +1 -0
  236. package/web/.next/static/chunks/{00754162862ab75f.js → bcc1bf1b0cd74b2d.js} +1 -1
  237. package/web/.next/static/chunks/{3e571ee5f5afd401.js → f3da449e6cc5524e.js} +1 -1
  238. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +0 -3
  239. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +0 -1
  240. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +0 -3
  241. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +0 -1
  242. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +0 -3
  243. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +0 -1
  244. package/web/.next/server/chunks/ssr/[root-of-the-server]__47ded061._.js +0 -3
  245. package/web/.next/server/chunks/ssr/[root-of-the-server]__47ded061._.js.map +0 -1
  246. package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js +0 -3
  247. package/web/.next/server/chunks/ssr/[root-of-the-server]__68ce373c._.js.map +0 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__718766da._.js +0 -3
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__718766da._.js.map +0 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdd058b2._.js +0 -3
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdd058b2._.js.map +0 -1
  252. package/web/.next/server/chunks/ssr/_aec44907._.js +0 -3
  253. package/web/.next/server/chunks/ssr/_e69a26ba._.js +0 -4
  254. package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +0 -1
  255. package/web/.next/server/chunks/ssr/_e700d6a8._.js +0 -4
  256. package/web/.next/server/chunks/ssr/_e700d6a8._.js.map +0 -1
  257. package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +0 -5
  258. package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js.map +0 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +0 -3
  260. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +0 -1
  261. package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +0 -5
  262. package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js.map +0 -1
  263. package/web/.next/static/chunks/75d552e0e611e3f4.js +0 -2
  264. package/web/.next/static/chunks/92cd6f523639a6fa.css +0 -1
  265. package/web/.next/static/chunks/98888e44c7c02a19.js +0 -1
  266. package/web/.next/static/chunks/a17edbc379ad2f40.js +0 -1
  267. package/web/.next/static/chunks/ae5bf7c402bb02ad.js +0 -1
  268. /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → 3V1jKEnSKFjbSLn1ERPdV}/_buildManifest.js +0 -0
  269. /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → 3V1jKEnSKFjbSLn1ERPdV}/_clientMiddlewareManifest.json +0 -0
  270. /package/web/.next/static/{PlnxcoPHipclEMFHMWF11 → 3V1jKEnSKFjbSLn1ERPdV}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"044-add-previous-lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/persistence/sqlite/migrations/044-add-previous-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,wBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3F;AAED,wBAAsB,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Migration 044: Add previous_lifecycle column to features table.
3
+ *
4
+ * Stores the lifecycle state prior to archiving so it can be restored
5
+ * when a feature is unarchived. Nullable TEXT — only populated when
6
+ * the feature lifecycle is Archived.
7
+ */
8
+ export async function up({ context: db }) {
9
+ const columns = db.pragma('table_info(features)');
10
+ if (!columns.some((c) => c.name === 'previous_lifecycle')) {
11
+ db.exec('ALTER TABLE features ADD COLUMN previous_lifecycle TEXT');
12
+ }
13
+ }
14
+ export async function down({ context: db }) {
15
+ void db;
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-feature.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-feature.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,6EAA6E,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAOhE;;;GAGG;AACH,qBACa,uBAAwB,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAazE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAa7E,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAyBtD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5C"}
1
+ {"version":3,"file":"sqlite-feature.repository.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/repositories/sqlite-feature.repository.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,6EAA6E,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAOhE;;;GAGG;AACH,qBACa,uBAAwB,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAE5C,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAcvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAazE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAa7E,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA8BtD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5C"}
@@ -36,7 +36,7 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
36
36
  push, open_pr, auto_merge, allow_prd, allow_plan, allow_merge,
37
37
  pr_url, pr_number, pr_status, commit_hash, ci_status,
38
38
  ci_fix_attempts, ci_fix_history, pr_mergeable,
39
- parent_id,
39
+ parent_id, previous_lifecycle,
40
40
  created_at, updated_at
41
41
  ) VALUES (
42
42
  @id, @name, @slug, @description, @user_query, @repository_path, @branch,
@@ -46,7 +46,7 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
46
46
  @push, @open_pr, @auto_merge, @allow_prd, @allow_plan, @allow_merge,
47
47
  @pr_url, @pr_number, @pr_status, @commit_hash, @ci_status,
48
48
  @ci_fix_attempts, @ci_fix_history, @pr_mergeable,
49
- @parent_id,
49
+ @parent_id, @previous_lifecycle,
50
50
  @created_at, @updated_at
51
51
  )
52
52
  `);
@@ -92,6 +92,10 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
92
92
  if (!filters?.includeDeleted) {
93
93
  conditions.push('deleted_at IS NULL');
94
94
  }
95
+ if (!filters?.includeArchived && !filters?.lifecycle) {
96
+ conditions.push('lifecycle != ?');
97
+ params.push('Archived');
98
+ }
95
99
  if (filters?.repositoryPath) {
96
100
  conditions.push("REPLACE(repository_path, '\\', '/') = ?");
97
101
  params.push(filters.repositoryPath.replace(/\\/g, '/'));
@@ -142,6 +146,7 @@ let SQLiteFeatureRepository = class SQLiteFeatureRepository {
142
146
  ci_fix_history = @ci_fix_history,
143
147
  pr_mergeable = @pr_mergeable,
144
148
  parent_id = @parent_id,
149
+ previous_lifecycle = @previous_lifecycle,
145
150
  deleted_at = @deleted_at,
146
151
  updated_at = @updated_at
147
152
  WHERE id = @id
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Feature Archive Command
3
+ *
4
+ * Archives a feature to hide it from the canvas without deleting it.
5
+ * Stores the current lifecycle state for restoration on unarchive.
6
+ *
7
+ * Usage: shep feat archive <id> [--force]
8
+ *
9
+ * @example
10
+ * $ shep feat archive feat-123
11
+ * $ shep feat archive feat-123 --force
12
+ */
13
+ import { Command } from 'commander';
14
+ /**
15
+ * Create the feat archive command
16
+ */
17
+ export declare function createArchiveCommand(): Command;
18
+ //# sourceMappingURL=archive.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/archive.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAkC9C"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Feature Archive Command
3
+ *
4
+ * Archives a feature to hide it from the canvas without deleting it.
5
+ * Stores the current lifecycle state for restoration on unarchive.
6
+ *
7
+ * Usage: shep feat archive <id> [--force]
8
+ *
9
+ * @example
10
+ * $ shep feat archive feat-123
11
+ * $ shep feat archive feat-123 --force
12
+ */
13
+ import { Command } from 'commander';
14
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
15
+ import { ShowFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/show-feature.use-case.js';
16
+ import { ArchiveFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/archive-feature.use-case.js';
17
+ import { colors, messages } from '../../ui/index.js';
18
+ import { confirm } from '@inquirer/prompts';
19
+ /**
20
+ * Create the feat archive command
21
+ */
22
+ export function createArchiveCommand() {
23
+ return new Command('archive')
24
+ .description('Archive a feature to hide it from the canvas')
25
+ .argument('<id>', 'Feature ID or prefix')
26
+ .option('-f, --force', 'Skip confirmation prompt')
27
+ .action(async (featureId, options) => {
28
+ try {
29
+ const showUseCase = container.resolve(ShowFeatureUseCase);
30
+ const feature = await showUseCase.execute(featureId);
31
+ if (!options.force) {
32
+ const confirmed = await confirm({
33
+ message: `Archive feature "${feature.name}"?`,
34
+ default: false,
35
+ });
36
+ if (!confirmed) {
37
+ messages.info('Cancelled');
38
+ return;
39
+ }
40
+ }
41
+ const archiveUseCase = container.resolve(ArchiveFeatureUseCase);
42
+ await archiveUseCase.execute(feature.id);
43
+ messages.newline();
44
+ messages.success('Feature archived');
45
+ console.log(` ${colors.muted('Name:')} ${feature.name}`);
46
+ messages.newline();
47
+ }
48
+ catch (error) {
49
+ const err = error instanceof Error ? error : new Error(String(error));
50
+ messages.error('Failed to archive feature', err);
51
+ process.exitCode = 1;
52
+ }
53
+ });
54
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAc3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C"}
@@ -21,6 +21,8 @@ import { createApproveCommand } from './approve.command.js';
21
21
  import { createRejectCommand } from './reject.command.js';
22
22
  import { createLogsCommand } from './logs.command.js';
23
23
  import { createAdoptCommand } from './adopt.command.js';
24
+ import { createArchiveCommand } from './archive.command.js';
25
+ import { createUnarchiveCommand } from './unarchive.command.js';
24
26
  /**
25
27
  * Create the feat command group
26
28
  */
@@ -37,5 +39,7 @@ export function createFeatCommand() {
37
39
  .addCommand(createApproveCommand())
38
40
  .addCommand(createRejectCommand())
39
41
  .addCommand(createLogsCommand())
40
- .addCommand(createAdoptCommand());
42
+ .addCommand(createAdoptCommand())
43
+ .addCommand(createArchiveCommand())
44
+ .addCommand(createUnarchiveCommand());
41
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6KpC,wBAAgB,eAAe,IAAI,OAAO,CAsGzC"}
1
+ {"version":3,"file":"ls.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/ls.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkLpC,wBAAgB,eAAe,IAAI,OAAO,CAwGzC"}
@@ -48,6 +48,9 @@ const STATUS_PRIORITY = {
48
48
  */
49
49
  function formatStatus(feature, run) {
50
50
  // Blocked features show "Waiting" — the parent relationship is conveyed by tree indentation
51
+ if (feature.lifecycle === 'Archived') {
52
+ return `${colors.muted(symbols.dotEmpty)} ${colors.muted('Archived')}`;
53
+ }
51
54
  if (feature.lifecycle === 'Deleting') {
52
55
  return `${colors.muted(symbols.spinner[0])} ${colors.muted('Deleting')}`;
53
56
  }
@@ -168,6 +171,7 @@ export function createLsCommand() {
168
171
  .description('List features')
169
172
  .option('-r, --repo <path>', 'Filter by repository path')
170
173
  .option('--include-deleted', 'Include soft-deleted features')
174
+ .option('--show-archived', 'Include archived features')
171
175
  .action(async (options) => {
172
176
  try {
173
177
  const useCase = container.resolve(ListFeaturesUseCase);
@@ -176,6 +180,7 @@ export function createLsCommand() {
176
180
  const filters = {
177
181
  ...(options.repo && { repositoryPath: options.repo }),
178
182
  ...(options.includeDeleted && { includeDeleted: true }),
183
+ ...(options.showArchived && { includeArchived: true }),
179
184
  };
180
185
  const features = await useCase.execute(Object.keys(filters).length > 0 ? filters : undefined);
181
186
  // Load agent runs and phase timings for all features in parallel
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Feature Unarchive Command
3
+ *
4
+ * Restores an archived feature to its previous lifecycle state.
5
+ * No confirmation needed — unarchive is always safe and non-destructive.
6
+ *
7
+ * Usage: shep feat unarchive <id>
8
+ *
9
+ * @example
10
+ * $ shep feat unarchive feat-123
11
+ */
12
+ import { Command } from 'commander';
13
+ /**
14
+ * Create the feat unarchive command
15
+ */
16
+ export declare function createUnarchiveCommand(): Command;
17
+ //# sourceMappingURL=unarchive.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unarchive.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/unarchive.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAuBhD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Feature Unarchive Command
3
+ *
4
+ * Restores an archived feature to its previous lifecycle state.
5
+ * No confirmation needed — unarchive is always safe and non-destructive.
6
+ *
7
+ * Usage: shep feat unarchive <id>
8
+ *
9
+ * @example
10
+ * $ shep feat unarchive feat-123
11
+ */
12
+ import { Command } from 'commander';
13
+ import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
14
+ import { ShowFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/show-feature.use-case.js';
15
+ import { UnarchiveFeatureUseCase } from '../../../../../packages/core/src/application/use-cases/features/unarchive-feature.use-case.js';
16
+ import { colors, messages } from '../../ui/index.js';
17
+ /**
18
+ * Create the feat unarchive command
19
+ */
20
+ export function createUnarchiveCommand() {
21
+ return new Command('unarchive')
22
+ .description('Restore an archived feature to its previous state')
23
+ .argument('<id>', 'Feature ID or prefix')
24
+ .action(async (featureId) => {
25
+ try {
26
+ const showUseCase = container.resolve(ShowFeatureUseCase);
27
+ const feature = await showUseCase.execute(featureId);
28
+ const unarchiveUseCase = container.resolve(UnarchiveFeatureUseCase);
29
+ const restored = await unarchiveUseCase.execute(feature.id);
30
+ messages.newline();
31
+ messages.success('Feature unarchived');
32
+ console.log(` ${colors.muted('Name:')} ${feature.name}`);
33
+ console.log(` ${colors.muted('Restored:')} ${restored.lifecycle}`);
34
+ messages.newline();
35
+ }
36
+ catch (error) {
37
+ const err = error instanceof Error ? error : new Error(String(error));
38
+ messages.error('Failed to unarchive feature', err);
39
+ process.exitCode = 1;
40
+ }
41
+ });
42
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAwFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CA6DxF"}
1
+ {"version":3,"file":"get-graph-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/(dashboard)/get-graph-data.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAwFD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAC;AA6B7B,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAkExF"}
@@ -108,7 +108,12 @@ export async function getGraphData() {
108
108
  const listFeatures = resolve('ListFeaturesUseCase');
109
109
  const listRepos = resolve('ListRepositoriesUseCase');
110
110
  const agentRunRepo = resolve('IAgentRunRepository');
111
- const [features, repositories] = await Promise.all([listFeatures.execute(), listRepos.execute()]);
111
+ // Always include archived features so the client has full data for instant
112
+ // show/hide toggle without a server round-trip (NFR-3).
113
+ const [features, repositories] = await Promise.all([
114
+ listFeatures.execute({ includeArchived: true }),
115
+ listRepos.execute(),
116
+ ]);
112
117
  // Read git info from cache (zero git calls). Stale entries trigger
113
118
  // a fire-and-forget background refresh for the next poll cycle.
114
119
  const repoGitInfoMap = new Map();
@@ -0,0 +1,6 @@
1
+ import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ export declare function archiveFeature(featureId: string): Promise<{
3
+ feature?: Feature;
4
+ error?: string;
5
+ }>;
6
+ //# sourceMappingURL=archive-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/archive-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD"}
@@ -0,0 +1,16 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function archiveFeature(featureId) {
4
+ if (!featureId?.trim()) {
5
+ return { error: 'id is required' };
6
+ }
7
+ try {
8
+ const archiveFeatureUseCase = resolve('ArchiveFeatureUseCase');
9
+ const feature = await archiveFeatureUseCase.execute(featureId);
10
+ return { feature };
11
+ }
12
+ catch (error) {
13
+ const message = error instanceof Error ? error.message : 'Failed to archive feature';
14
+ return { error: message };
15
+ }
16
+ }
@@ -0,0 +1,6 @@
1
+ import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
2
+ export declare function unarchiveFeature(featureId: string): Promise<{
3
+ feature?: Feature;
4
+ error?: string;
5
+ }>;
6
+ //# sourceMappingURL=unarchive-feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unarchive-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/unarchive-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD"}
@@ -0,0 +1,16 @@
1
+ 'use server';
2
+ import { resolve } from '../../lib/server-container.js';
3
+ export async function unarchiveFeature(featureId) {
4
+ if (!featureId?.trim()) {
5
+ return { error: 'id is required' };
6
+ }
7
+ try {
8
+ const unarchiveFeatureUseCase = resolve('UnarchiveFeatureUseCase');
9
+ const feature = await unarchiveFeatureUseCase.execute(featureId);
10
+ return { feature };
11
+ }
12
+ catch (error) {
13
+ const message = error instanceof Error ? error.message : 'Failed to unarchive feature';
14
+ return { error: message };
15
+ }
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAsEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/app/api/agent-events/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAuEvC,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CA4R9C"}
@@ -36,6 +36,7 @@ const LIFECYCLE_TO_NODE = {
36
36
  [SdlcLifecycle.Blocked]: 'blocked',
37
37
  [SdlcLifecycle.Pending]: 'pending',
38
38
  [SdlcLifecycle.Deleting]: 'blocked',
39
+ [SdlcLifecycle.Archived]: 'archived',
39
40
  };
40
41
  const STATUS_TO_EVENT = {
41
42
  [AgentRunStatus.running]: {
@@ -1 +1 @@
1
- {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,CA4DlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAsBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAQlE,CAAC;AAeF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
1
+ {"version":3,"file":"derive-feature-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/derive-feature-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,qBAAqB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,gBAAgB,CAiElB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAYvD;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,GAAG,gBAAgB,CAsBtF;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CASlE,CAAC;AAgBF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,qBAAqB,CAQ7F;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,qBAAqB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7F,cAAc,EAAE,CAmBlB;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,qBAAqB,GAAG,SAAS,CAGnC"}
@@ -21,6 +21,10 @@ export function deriveNodeState(feature, agentRun, options) {
21
21
  if (feature.lifecycle === SdlcLifecycle.Deleting) {
22
22
  return 'deleting';
23
23
  }
24
+ // Archived lifecycle — feature is hidden/dormant, takes priority over agent run
25
+ if (feature.lifecycle === SdlcLifecycle.Archived) {
26
+ return 'archived';
27
+ }
24
28
  // Pending lifecycle — user-deferred, agent not yet spawned
25
29
  if (feature.lifecycle === SdlcLifecycle.Pending) {
26
30
  return 'pending';
@@ -120,6 +124,7 @@ export const sdlcLifecycleMap = {
120
124
  'Deploy & QA': 'deploy',
121
125
  Maintain: 'maintain',
122
126
  Pending: 'pending',
127
+ Archived: 'maintain',
123
128
  };
124
129
  /** Map agent graph node names (from agent_run.result or SSE phaseName) to UI lifecycle phases. */
125
130
  const phaseNameToLifecycle = {
@@ -132,6 +137,7 @@ const phaseNameToLifecycle = {
132
137
  maintain: 'maintain',
133
138
  blocked: 'requirements',
134
139
  pending: 'pending',
140
+ archived: 'maintain',
135
141
  };
136
142
  /**
137
143
  * Derives the UI lifecycle phase from a Feature + AgentRun.
@@ -2,7 +2,7 @@ import { type LucideIcon } from 'lucide-react';
2
2
  import type { Node } from '@xyflow/react';
3
3
  import type { PrStatus, CiStatus, DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
4
4
  import type { AgentTypeValue } from './agent-type-icons.js';
5
- export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'pending' | 'error' | 'deleting';
5
+ export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'done' | 'blocked' | 'pending' | 'error' | 'deleting' | 'archived';
6
6
  export type FeatureLifecyclePhase = 'pending' | 'requirements' | 'research' | 'implementation' | 'review' | 'deploy' | 'maintain';
7
7
  /** Human-readable display labels for lifecycle phases. */
8
8
  export declare const lifecycleDisplayLabels: Record<FeatureLifecyclePhase, string>;
@@ -112,6 +112,8 @@ export interface FeatureNodeData {
112
112
  onRetry?: (featureId: string) => void;
113
113
  onStart?: (featureId: string) => void;
114
114
  onStop?: (featureId: string) => void;
115
+ onArchive?: (featureId: string) => void;
116
+ onUnarchive?: (featureId: string) => void;
115
117
  showHandles?: boolean;
116
118
  }
117
119
  export type FeatureNodeType = Node<FeatureNodeData, 'featureNode'>;
@@ -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,4 +1,4 @@
1
- import { Loader2, CircleAlert, CircleCheck, Ban, CircleX, Trash2, Clock, } from 'lucide-react';
1
+ import { Loader2, CircleAlert, CircleCheck, Ban, CircleX, Trash2, Clock, Archive, } from 'lucide-react';
2
2
  /** Human-readable display labels for lifecycle phases. */
3
3
  export const lifecycleDisplayLabels = {
4
4
  pending: 'PENDING',
@@ -191,4 +191,14 @@ export const featureNodeStateConfig = {
191
191
  label: 'Deleting...',
192
192
  showProgressBar: false,
193
193
  },
194
+ archived: {
195
+ icon: Archive,
196
+ borderClass: 'border-l-gray-500',
197
+ labelClass: 'text-gray-500',
198
+ progressClass: 'bg-gray-500',
199
+ badgeClass: 'text-gray-600',
200
+ badgeBgClass: 'bg-gray-100',
201
+ label: 'Archived',
202
+ showProgressBar: false,
203
+ },
194
204
  };
@@ -1 +1 @@
1
- {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA4CnE,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,2CA6WA"}
1
+ {"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AA4CnE,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,2CAocA"}
@@ -2,9 +2,10 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
4
  import { Handle, Position } from '@xyflow/react';
5
- import { Plus, Trash2, Zap, Loader2, Globe, RotateCcw, Play, Eye, } from 'lucide-react';
5
+ import { Plus, Trash2, Zap, Loader2, Globe, RotateCcw, Play, Eye, Archive, ArchiveRestore, } from 'lucide-react';
6
6
  import { cn } from '../../../lib/utils.js';
7
7
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
8
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '../../ui/alert-dialog.js';
8
9
  import { DeleteFeatureDialog } from '../../common/delete-feature-dialog/index.js';
9
10
  import { featureNodeStateConfig, lifecycleRunningVerbs, lifecyclePhaseBadge, } from './feature-node-state-config.js';
10
11
  import { getAgentTypeIcon } from './agent-type-icons.js';
@@ -52,13 +53,26 @@ export function FeatureNode({ data, selected, }) {
52
53
  const config = featureNodeStateConfig[data.state];
53
54
  const Icon = config.icon;
54
55
  const [confirmOpen, setConfirmOpen] = useState(false);
56
+ const [archiveConfirmOpen, setArchiveConfirmOpen] = useState(false);
55
57
  return (_jsxs("div", { className: "animate-in fade-in group relative duration-300", children: [data.showHandles ? (_jsx(Handle, { type: "target", position: Position.Left, isConnectable: false, className: "opacity-0!", style: { top: 70 } })) : null, data.onDelete && data.featureId && data.state !== 'deleting' ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute top-1/2 -left-10 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100", onPointerDown: (e) => e.stopPropagation(), children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Delete feature", "data-testid": "feature-node-delete-button", onClick: (e) => {
56
58
  e.stopPropagation();
57
59
  setConfirmOpen(true);
58
60
  }, className: "bg-card text-muted-foreground hover:border-destructive hover:text-destructive flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(Trash2, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Delete feature" })] }) }) }), _jsx(DeleteFeatureDialog, { open: confirmOpen, onOpenChange: setConfirmOpen, onConfirm: (cleanup, cascadeDelete, closePr) => {
59
61
  setConfirmOpen(false);
60
62
  data.onDelete?.(data.featureId, cleanup, cascadeDelete, closePr);
61
- }, isDeleting: false, featureName: data.name ?? 'this feature', featureId: data.featureId, hasChildren: data.hasChildren, hasOpenPr: !!data.pr && data.pr.status === 'Open' })] })) : null, _jsxs("div", { "data-testid": "feature-node-card", "aria-busy": data.state === 'creating' || data.state === 'deleting' ? 'true' : undefined, className: cn('bg-card flex min-h-35 w-97 cursor-pointer flex-col rounded-lg border p-3 shadow-sm dark:bg-neutral-800/80', data.state === 'action-required' && 'border-amber-300/60 dark:border-amber-700/40', selected && 'ring-primary ring-2', data.state === 'deleting' && 'opacity-60'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute top-3 right-4", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "bottom", className: "max-w-56 bg-white text-neutral-900 shadow-lg dark:bg-neutral-100 dark:text-neutral-900", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx("h3", { className: "min-w-0 truncate text-sm font-bold", children: data.name })] }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: data.description })) : null, _jsxs("div", { className: "mt-auto pt-2", children: [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}%` } }) })] })) : null, !config.showProgressBar &&
63
+ }, isDeleting: false, featureName: data.name ?? 'this feature', featureId: data.featureId, hasChildren: data.hasChildren, hasOpenPr: !!data.pr && data.pr.status === 'Open' })] })) : null, data.onArchive &&
64
+ data.featureId &&
65
+ data.state !== 'deleting' &&
66
+ data.state !== 'archived' ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute top-1/2 -left-10 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100", style: { marginTop: data.onDelete ? 20 : 0 }, onPointerDown: (e) => e.stopPropagation(), children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Archive feature", "data-testid": "feature-node-archive-button", onClick: (e) => {
67
+ e.stopPropagation();
68
+ setArchiveConfirmOpen(true);
69
+ }, className: "bg-card text-muted-foreground flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors hover:border-gray-500 hover:text-gray-600", children: _jsx(Archive, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Archive feature" })] }) }) }), _jsx(AlertDialog, { open: archiveConfirmOpen, onOpenChange: setArchiveConfirmOpen, children: _jsxs(AlertDialogContent, { onCloseAutoFocus: (e) => e.preventDefault(), children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Archive feature?" }), _jsxs(AlertDialogDescription, { children: [_jsx("strong", { children: data.name }), " will be hidden from the canvas. You can unarchive it later to restore it."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { onClick: () => setArchiveConfirmOpen(false), children: "Cancel" }), _jsx(AlertDialogAction, { onClick: () => {
70
+ setArchiveConfirmOpen(false);
71
+ data.onArchive?.(data.featureId);
72
+ }, children: "Archive" })] })] }) })] })) : null, data.onUnarchive && data.featureId && data.state === 'archived' ? (_jsx("div", { className: "absolute top-1/2 -left-10 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100", onPointerDown: (e) => e.stopPropagation(), children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Unarchive feature", "data-testid": "feature-node-unarchive-button", onClick: (e) => {
73
+ e.stopPropagation();
74
+ data.onUnarchive?.(data.featureId);
75
+ }, className: "bg-card text-muted-foreground hover:border-primary hover:text-primary flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border shadow-sm transition-colors", children: _jsx(ArchiveRestore, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Unarchive feature" })] }) }) })) : null, _jsxs("div", { "data-testid": "feature-node-card", "aria-busy": data.state === 'creating' || data.state === 'deleting' ? 'true' : undefined, className: cn('bg-card flex min-h-35 w-97 cursor-pointer flex-col rounded-lg border p-3 shadow-sm dark:bg-neutral-800/80', data.state === 'action-required' && 'border-amber-300/60 dark:border-amber-700/40', selected && 'ring-primary ring-2', data.state === 'deleting' && 'opacity-60', data.state === 'archived' && 'opacity-50'), children: [data.state !== 'creating' ? (_jsx("div", { className: "absolute top-3 right-4", children: _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { "data-testid": "feature-node-phase-badge", className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground text-[10px]", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("span", { className: cn('h-1.5 w-1.5 -translate-y-px rounded-full', lifecyclePhaseBadge[data.lifecycle].dot) })] }) }), _jsxs(TooltipContent, { side: "bottom", className: "max-w-56 bg-white text-neutral-900 shadow-lg dark:bg-neutral-100 dark:text-neutral-900", children: [_jsx("p", { className: "font-semibold", children: lifecyclePhaseBadge[data.lifecycle].tooltip }), _jsx("p", { className: "mt-1 text-xs leading-relaxed text-neutral-500", children: lifecyclePhaseBadge[data.lifecycle].description })] })] }) }) })) : null, _jsxs("div", { className: "flex items-center gap-1.5", children: [data.agentType ? (_jsx(AgentIcon, { agentType: data.agentType, className: "h-4 w-4 shrink-0" })) : null, _jsx("h3", { className: "min-w-0 truncate text-sm font-bold", children: data.name })] }), data.description ? (_jsx("p", { "data-testid": "feature-node-description", className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: data.description })) : null, _jsxs("div", { className: "mt-auto pt-2", children: [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}%` } }) })] })) : null, !config.showProgressBar &&
62
76
  ![
63
77
  'deleting',
64
78
  'creating',
@@ -26,4 +26,9 @@ export declare const DeploymentWithFastModeAndAgent: Story;
26
26
  export declare const Interactive: Story;
27
27
  export declare const Pending: Story;
28
28
  export declare const PendingWithStart: Story;
29
+ export declare const Archived: Story;
30
+ export declare const ArchivedWithUnarchive: Story;
31
+ export declare const DoneWithArchive: Story;
32
+ /** Shows the archive confirmation dialog in its open state. */
33
+ export declare const ArchiveConfirmationDialog: Story;
29
34
  //# sourceMappingURL=feature-node.stories.d.ts.map
@@ -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;AAoCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAqB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAqLF,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"}
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;AAoCrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,eAAe,CAqB/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEvC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AA+LF,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;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAWnC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,EAAE,KAyBvC,CAAC"}