@shepai/cli 1.135.3 → 1.136.0-pr417.01aebe9
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.
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts +8 -3
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.js +66 -8
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts +2 -0
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +8 -1
- package/dist/src/presentation/web/app/actions/check-tool-status.d.ts +14 -0
- package/dist/src/presentation/web/app/actions/check-tool-status.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/check-tool-status.js +53 -0
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +1 -9
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +17 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js +91 -0
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +54 -64
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +85 -19
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +6 -4
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +35 -9
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +17 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +110 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -0
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +443 -10
- package/dist/src/presentation/web/lib/layout-with-dagre.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +63 -48
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +75 -60
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/page.js +3 -3
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +59 -44
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/skills/page.js +1 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/tools/page.js +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__31bc28da._.js → [root-of-the-server]__47ded061._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__31bc28da._.js.map → [root-of-the-server]__47ded061._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__32ecbed9._.js → [root-of-the-server]__68ce373c._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__90f9ae71._.js.map → [root-of-the-server]__68ce373c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__90f9ae71._.js → [root-of-the-server]__718766da._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__90ce4b6d._.js.map → [root-of-the-server]__718766da._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__96670392._.js → [root-of-the-server]__a5f9c6e5._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__7894f27f._.js.map → [root-of-the-server]__d48c5b11._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__90ce4b6d._.js → [root-of-the-server]__fdd058b2._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__32ecbed9._.js.map → [root-of-the-server]__fdd058b2._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_d17bc20a._.js → _036a2f1a._.js} +2 -2
- package/web/.next/server/chunks/ssr/_036a2f1a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7216273e._.js +3 -0
- package/web/.next/server/chunks/ssr/_7216273e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_e69a26ba._.js +4 -0
- package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +5 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_b9023017._.js.map → src_presentation_web_53666118._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_cc376559._.js +3 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_127fb482._.js.map → src_presentation_web_cc376559._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +5 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_8e7fe0d1._.js.map → src_presentation_web_e4df6dd7._.js.map} +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +374 -296
- package/web/.next/static/chunks/{d8a0dd9bfd0f22fa.js → 01e0452d72421732.js} +1 -1
- package/web/.next/static/chunks/{d5342f9be437afd9.js → 32674ed600fd2d02.js} +1 -1
- package/web/.next/static/chunks/{1a9dfc34432387f5.js → 33119fe287968581.js} +1 -1
- package/web/.next/static/chunks/{7875a9370622a064.js → 419a8d8457d5c8e8.js} +1 -1
- package/web/.next/static/chunks/{15e6a74ef39fda73.js → 54c901337941d745.js} +1 -1
- package/web/.next/static/chunks/{fdc719494dcd9c92.js → 5cf49c75127f5c06.js} +2 -2
- package/web/.next/static/chunks/666dabc5a947187d.js +1 -0
- package/web/.next/static/chunks/6cbecb92bd68e7c8.js +1 -0
- package/web/.next/static/chunks/{61f7d4f0f0f770a4.js → 76ef5cf3b4f4ef6b.js} +1 -1
- package/web/.next/static/chunks/{8c42b7752187f48c.js → 8586bee9919f310e.js} +2 -2
- package/web/.next/static/chunks/92cd6f523639a6fa.css +1 -0
- package/web/.next/static/chunks/{9154973d61eae190.js → bdc2d28b3db1cadf.js} +1 -1
- package/web/.next/static/chunks/d0dff217a94d4ee1.js +1 -0
- package/web/.next/static/chunks/da46061d83a9de54.js +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96670392._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_313c9690._.js +0 -3
- package/web/.next/server/chunks/ssr/_313c9690._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b6960ca0._.js +0 -4
- package/web/.next/server/chunks/ssr/_b6960ca0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d17bc20a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_127fb482._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +0 -5
- package/web/.next/static/chunks/314b8314f77d6921.js +0 -1
- package/web/.next/static/chunks/3e2d7d07926b05bf.css +0 -1
- package/web/.next/static/chunks/55a1c86671bb1a5b.js +0 -1
- package/web/.next/static/chunks/c0c287da1631752f.js +0 -1
- package/web/.next/static/chunks/e6b87832e1382949.js +0 -1
- /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → cTPv5o2etR55f5kz8U-6Q}/_buildManifest.js +0 -0
- /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → cTPv5o2etR55f5kz8U-6Q}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{p0KCxpQ0DqKcttVypdnix → cTPv5o2etR55f5kz8U-6Q}/_ssgManifest.js +0 -0
|
@@ -6,14 +6,17 @@
|
|
|
6
6
|
* and persists a Feature entity. Branches with an open PR get lifecycle=Review
|
|
7
7
|
* (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* As of feature 071 (adopted-branch-agent-runs), this use case also creates an
|
|
10
|
+
* AgentRun record and initializes a spec directory, enabling adopted features to
|
|
11
|
+
* support agent execution (start, resume, reject) just like created features.
|
|
11
12
|
*/
|
|
12
13
|
import type { Feature } from '../../../domain/generated/output.js';
|
|
13
14
|
import type { IFeatureRepository } from '../../ports/output/repositories/feature-repository.interface.js';
|
|
14
15
|
import type { IRepositoryRepository } from '../../ports/output/repositories/repository-repository.interface.js';
|
|
15
16
|
import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
|
|
16
17
|
import type { IGitPrService } from '../../ports/output/services/git-pr-service.interface.js';
|
|
18
|
+
import type { IAgentRunRepository } from '../../ports/output/agents/agent-run-repository.interface.js';
|
|
19
|
+
import type { ISpecInitializerService } from '../../ports/output/services/spec-initializer.interface.js';
|
|
17
20
|
export interface AdoptBranchInput {
|
|
18
21
|
branchName: string;
|
|
19
22
|
repositoryPath: string;
|
|
@@ -26,7 +29,9 @@ export declare class AdoptBranchUseCase {
|
|
|
26
29
|
private readonly repositoryRepo;
|
|
27
30
|
private readonly worktreeService;
|
|
28
31
|
private readonly gitPrService;
|
|
29
|
-
|
|
32
|
+
private readonly agentRunRepo;
|
|
33
|
+
private readonly specInitializer;
|
|
34
|
+
constructor(featureRepo: IFeatureRepository, repositoryRepo: IRepositoryRepository, worktreeService: IWorktreeService, gitPrService: IGitPrService, agentRunRepo: IAgentRunRepository, specInitializer: ISpecInitializerService);
|
|
30
35
|
execute(input: AdoptBranchInput): Promise<AdoptBranchResult>;
|
|
31
36
|
/**
|
|
32
37
|
* Resolve the git ref to use for worktree creation.
|
package/dist/packages/core/src/application/use-cases/features/adopt-branch.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt-branch.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"adopt-branch.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/adopt-branch.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oEAAoE,CAAC;AAChH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AACvG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2DAA2D,CAAC;AAIzG,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAKD,qBACa,kBAAkB;IAG3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAVf,WAAW,EAAE,kBAAkB,EAE/B,cAAc,EAAE,qBAAqB,EAErC,eAAe,EAAE,gBAAgB,EAEjC,YAAY,EAAE,aAAa,EAE3B,YAAY,EAAE,mBAAmB,EAEjC,eAAe,EAAE,uBAAuB;IAGrD,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkJlE;;;;OAIG;YACW,gBAAgB;IAiB9B;;;;OAIG;YACW,iBAAiB;IA4B/B;;;OAGG;YACW,iBAAiB;CAuBhC"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* and persists a Feature entity. Branches with an open PR get lifecycle=Review
|
|
7
7
|
* (shown as "REVIEW" in the UI); all others get lifecycle=Maintain (completed).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* As of feature 071 (adopted-branch-agent-runs), this use case also creates an
|
|
10
|
+
* AgentRun record and initializes a spec directory, enabling adopted features to
|
|
11
|
+
* support agent execution (start, resume, reject) just like created features.
|
|
11
12
|
*/
|
|
12
13
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
13
14
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -23,7 +24,11 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
23
24
|
};
|
|
24
25
|
import { injectable, inject } from 'tsyringe';
|
|
25
26
|
import { randomUUID } from 'node:crypto';
|
|
26
|
-
|
|
27
|
+
// Phase 2 imports - will be used for AgentRun creation and spec directory detection
|
|
28
|
+
import { existsSync } from 'node:fs';
|
|
29
|
+
import { join } from 'node:path';
|
|
30
|
+
import { SdlcLifecycle, PrStatus, AgentRunStatus } from '../../../domain/generated/output.js';
|
|
31
|
+
import { getSettings } from '../../../infrastructure/services/settings.service.js';
|
|
27
32
|
import { deriveName, deriveSlug } from './branch-name-utils.js';
|
|
28
33
|
/** Branches that must not be adopted as features. */
|
|
29
34
|
const PROTECTED_BRANCHES = new Set(['main', 'master']);
|
|
@@ -32,11 +37,15 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
32
37
|
repositoryRepo;
|
|
33
38
|
worktreeService;
|
|
34
39
|
gitPrService;
|
|
35
|
-
|
|
40
|
+
agentRunRepo;
|
|
41
|
+
specInitializer;
|
|
42
|
+
constructor(featureRepo, repositoryRepo, worktreeService, gitPrService, agentRunRepo, specInitializer) {
|
|
36
43
|
this.featureRepo = featureRepo;
|
|
37
44
|
this.repositoryRepo = repositoryRepo;
|
|
38
45
|
this.worktreeService = worktreeService;
|
|
39
46
|
this.gitPrService = gitPrService;
|
|
47
|
+
this.agentRunRepo = agentRunRepo;
|
|
48
|
+
this.specInitializer = specInitializer;
|
|
40
49
|
}
|
|
41
50
|
async execute(input) {
|
|
42
51
|
const { branchName, repositoryPath } = input;
|
|
@@ -61,25 +70,65 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
61
70
|
const branchRef = await this.resolveBranchRef(branchName, repositoryPath);
|
|
62
71
|
// --- Resolve or create repository entity ---
|
|
63
72
|
const repository = await this.resolveRepository(repositoryPath);
|
|
73
|
+
// --- Calculate feature number for spec directory ---
|
|
74
|
+
// Use existing feature count as hint; SpecInitializerService.resolveNextNumber()
|
|
75
|
+
// will scan filesystem to determine actual next available number
|
|
76
|
+
const effectiveRepoPath = repository.path;
|
|
77
|
+
const existingFeatures = await this.featureRepo.list({
|
|
78
|
+
repositoryPath: effectiveRepoPath,
|
|
79
|
+
});
|
|
80
|
+
const featureNumber = existingFeatures.length;
|
|
64
81
|
// --- Create or reuse worktree ---
|
|
65
82
|
const worktreePath = this.worktreeService.getWorktreePath(repositoryPath, slug);
|
|
66
83
|
const worktreeExists = await this.worktreeService.exists(repositoryPath, branchName);
|
|
67
84
|
if (!worktreeExists) {
|
|
68
85
|
await this.worktreeService.addExisting(repositoryPath, branchRef, worktreePath);
|
|
69
86
|
}
|
|
87
|
+
// --- Initialize or detect spec directory ---
|
|
88
|
+
// Check if spec directory already exists (e.g., from previous /shep-kit:new-feature work)
|
|
89
|
+
// If exists, preserve it. If not, initialize with empty YAMLs.
|
|
90
|
+
const nnn = String(featureNumber).padStart(3, '0');
|
|
91
|
+
const expectedSpecDir = join(worktreePath, 'specs', `${nnn}-${slug}`);
|
|
92
|
+
let specDir;
|
|
93
|
+
if (existsSync(expectedSpecDir)) {
|
|
94
|
+
// Spec directory already exists — use it without modification
|
|
95
|
+
specDir = expectedSpecDir;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// No spec directory — initialize with empty YAMLs
|
|
99
|
+
const result = await this.specInitializer.initialize(worktreePath, slug, featureNumber, '(adopted from existing branch)');
|
|
100
|
+
specDir = result.specDir;
|
|
101
|
+
}
|
|
102
|
+
// --- Create AgentRun record (following CreateFeatureUseCase pattern lines 156-210) ---
|
|
103
|
+
const runId = randomUUID();
|
|
104
|
+
const settings = getSettings();
|
|
105
|
+
const now = new Date();
|
|
106
|
+
const agentRun = {
|
|
107
|
+
id: runId,
|
|
108
|
+
agentType: settings.agent.type,
|
|
109
|
+
agentName: 'feature-agent',
|
|
110
|
+
status: AgentRunStatus.pending,
|
|
111
|
+
prompt: '(adopted from existing branch)',
|
|
112
|
+
threadId: randomUUID(), // New UUID for LangGraph checkpoint isolation
|
|
113
|
+
featureId: '', // Will be set after Feature creation, but we need runId first
|
|
114
|
+
repositoryPath: effectiveRepoPath,
|
|
115
|
+
...(settings.models?.default ? { modelId: settings.models.default } : {}),
|
|
116
|
+
createdAt: now.toISOString(),
|
|
117
|
+
updatedAt: now.toISOString(),
|
|
118
|
+
};
|
|
70
119
|
// --- Detect open PR for this branch ---
|
|
71
120
|
const prData = await this.detectPrForBranch(branchName, repositoryPath);
|
|
72
121
|
// --- Derive feature metadata ---
|
|
73
122
|
const name = deriveName(branchName);
|
|
74
|
-
const now = new Date();
|
|
75
123
|
const hasOpenPr = prData !== undefined;
|
|
76
124
|
// If the branch has an open (not yet merged) PR, place the feature in
|
|
77
125
|
// Review so the node shows "REVIEW" instead of "COMPLETED". Only truly
|
|
78
126
|
// finished branches (no PR, merged PR, or closed PR) get Maintain.
|
|
79
127
|
const lifecycle = prData?.status === PrStatus.Open ? SdlcLifecycle.Review : SdlcLifecycle.Maintain;
|
|
80
|
-
// ---
|
|
128
|
+
// --- Construct Feature entity ---
|
|
129
|
+
const featureId = randomUUID();
|
|
81
130
|
const feature = {
|
|
82
|
-
id:
|
|
131
|
+
id: featureId,
|
|
83
132
|
name,
|
|
84
133
|
slug,
|
|
85
134
|
description: '',
|
|
@@ -98,11 +147,18 @@ let AdoptBranchUseCase = class AdoptBranchUseCase {
|
|
|
98
147
|
allowMerge: false,
|
|
99
148
|
},
|
|
100
149
|
worktreePath,
|
|
150
|
+
specPath: specDir,
|
|
151
|
+
agentRunId: runId,
|
|
101
152
|
repositoryId: repository.id,
|
|
102
153
|
pr: prData,
|
|
103
154
|
createdAt: now,
|
|
104
155
|
updatedAt: now,
|
|
105
156
|
};
|
|
157
|
+
// --- Persist AgentRun before Feature (respects referential integrity) ---
|
|
158
|
+
// Set featureId now that we have it
|
|
159
|
+
agentRun.featureId = featureId;
|
|
160
|
+
await this.agentRunRepo.create(agentRun);
|
|
161
|
+
// --- Persist Feature (after AgentRun exists) ---
|
|
106
162
|
await this.featureRepo.create(feature);
|
|
107
163
|
return { feature };
|
|
108
164
|
}
|
|
@@ -183,6 +239,8 @@ AdoptBranchUseCase = __decorate([
|
|
|
183
239
|
__param(1, inject('IRepositoryRepository')),
|
|
184
240
|
__param(2, inject('IWorktreeService')),
|
|
185
241
|
__param(3, inject('IGitPrService')),
|
|
186
|
-
|
|
242
|
+
__param(4, inject('IAgentRunRepository')),
|
|
243
|
+
__param(5, inject('ISpecInitializerService')),
|
|
244
|
+
__metadata("design:paramtypes", [Object, Object, Object, Object, Object, Object])
|
|
187
245
|
], AdoptBranchUseCase);
|
|
188
246
|
export { AdoptBranchUseCase };
|
|
@@ -8,6 +8,8 @@ export interface AgentAuthStatus {
|
|
|
8
8
|
label: string;
|
|
9
9
|
/** CLI binary name (e.g. "claude", "gemini") */
|
|
10
10
|
binaryName: string | null;
|
|
11
|
+
/** Shell command to install the tool (e.g. "npm install -g @anthropic-ai/claude-code") */
|
|
12
|
+
installCommand: string | null;
|
|
11
13
|
/** Instructions to authenticate if not authenticated */
|
|
12
14
|
authCommand: string | null;
|
|
13
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA6FD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"check-agent-auth.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-agent-auth.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA6FD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAwF/D"}
|
|
@@ -114,6 +114,7 @@ export async function checkAgentAuth() {
|
|
|
114
114
|
authenticated: false,
|
|
115
115
|
label: 'Unknown',
|
|
116
116
|
binaryName: null,
|
|
117
|
+
installCommand: null,
|
|
117
118
|
authCommand: null,
|
|
118
119
|
};
|
|
119
120
|
}
|
|
@@ -128,16 +129,19 @@ export async function checkAgentAuth() {
|
|
|
128
129
|
authenticated: true,
|
|
129
130
|
label,
|
|
130
131
|
binaryName: null,
|
|
132
|
+
installCommand: null,
|
|
131
133
|
authCommand: null,
|
|
132
134
|
};
|
|
133
135
|
}
|
|
134
|
-
// Check if tool is installed
|
|
136
|
+
// Check if tool is installed (also grab install command from metadata)
|
|
135
137
|
let installed = false;
|
|
138
|
+
let installCommand = null;
|
|
136
139
|
try {
|
|
137
140
|
const useCase = resolve('ListToolsUseCase');
|
|
138
141
|
const tools = await useCase.execute();
|
|
139
142
|
const tool = tools.find((t) => t.id === toolId);
|
|
140
143
|
installed = tool?.status.status === 'available';
|
|
144
|
+
installCommand = tool?.installCommand ?? null;
|
|
141
145
|
}
|
|
142
146
|
catch {
|
|
143
147
|
installed = false;
|
|
@@ -149,6 +153,7 @@ export async function checkAgentAuth() {
|
|
|
149
153
|
authenticated: false,
|
|
150
154
|
label,
|
|
151
155
|
binaryName,
|
|
156
|
+
installCommand,
|
|
152
157
|
authCommand: binaryName ? `Install ${label} first` : null,
|
|
153
158
|
};
|
|
154
159
|
}
|
|
@@ -161,6 +166,7 @@ export async function checkAgentAuth() {
|
|
|
161
166
|
authenticated: false,
|
|
162
167
|
label,
|
|
163
168
|
binaryName,
|
|
169
|
+
installCommand,
|
|
164
170
|
authCommand: binaryName,
|
|
165
171
|
};
|
|
166
172
|
}
|
|
@@ -175,6 +181,7 @@ export async function checkAgentAuth() {
|
|
|
175
181
|
authenticated,
|
|
176
182
|
label,
|
|
177
183
|
binaryName,
|
|
184
|
+
installCommand,
|
|
178
185
|
authCommand: authenticated ? null : binaryName,
|
|
179
186
|
};
|
|
180
187
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ToolStatusEntry {
|
|
2
|
+
installed: boolean;
|
|
3
|
+
version: string | null;
|
|
4
|
+
/** Platform-specific install command from tool JSON metadata */
|
|
5
|
+
installCommand: string | null;
|
|
6
|
+
/** Documentation/website URL */
|
|
7
|
+
installUrl: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface ToolStatusResult {
|
|
10
|
+
git: ToolStatusEntry;
|
|
11
|
+
gh: ToolStatusEntry;
|
|
12
|
+
}
|
|
13
|
+
export declare function checkToolStatus(): Promise<ToolStatusResult>;
|
|
14
|
+
//# sourceMappingURL=check-tool-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-tool-status.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/check-tool-status.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gEAAgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gCAAgC;IAChC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,eAAe,CAAC;IACrB,EAAE,EAAE,eAAe,CAAC;CACrB;AAwBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA8BjE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use server';
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
import { IS_WINDOWS } from '../../../../../packages/core/src/infrastructure/platform.js';
|
|
4
|
+
import { resolve } from '../../lib/server-container.js';
|
|
5
|
+
function getVersion(command, args) {
|
|
6
|
+
return new Promise((resolve) => {
|
|
7
|
+
try {
|
|
8
|
+
const opts = IS_WINDOWS ? { timeout: 5000, windowsHide: true } : { timeout: 5000 };
|
|
9
|
+
execFile(command, args, opts, (error, stdout) => {
|
|
10
|
+
if (error) {
|
|
11
|
+
resolve({ installed: false, version: null });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
// Extract version number from output like "git version 2.43.0" or "gh version 2.40.1"
|
|
15
|
+
const match = stdout.match(/(\d+\.\d+(?:\.\d+)?)/);
|
|
16
|
+
resolve({ installed: true, version: match?.[1] ?? null });
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
resolve({ installed: false, version: null });
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export async function checkToolStatus() {
|
|
25
|
+
// Run version checks and tool metadata lookup in parallel
|
|
26
|
+
const [gitVersion, ghVersion, tools] = await Promise.all([
|
|
27
|
+
getVersion('git', ['--version']),
|
|
28
|
+
getVersion('gh', ['--version']),
|
|
29
|
+
(async () => {
|
|
30
|
+
try {
|
|
31
|
+
const useCase = resolve('ListToolsUseCase');
|
|
32
|
+
return await useCase.execute();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
})(),
|
|
38
|
+
]);
|
|
39
|
+
const gitTool = tools.find((t) => t.id === 'git');
|
|
40
|
+
const ghTool = tools.find((t) => t.id === 'gh');
|
|
41
|
+
return {
|
|
42
|
+
git: {
|
|
43
|
+
...gitVersion,
|
|
44
|
+
installCommand: gitTool?.installCommand ?? null,
|
|
45
|
+
installUrl: gitTool?.website ?? 'https://git-scm.com',
|
|
46
|
+
},
|
|
47
|
+
gh: {
|
|
48
|
+
...ghVersion,
|
|
49
|
+
installCommand: ghTool?.installCommand ?? null,
|
|
50
|
+
installUrl: ghTool?.website ?? 'https://cli.github.com',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-graph-nodes.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/build-graph-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAS1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,GAAG,CACf,MAAM,EACN;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CACzF,CAAC;IACF,0DAA0D;IAC1D,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC,CAAC;CACjE;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,UAAU,EAAE,EAC1B,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,sBAAsB,GAC/B;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAoG5C"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import { AgentRunStatus } from '../../../../packages/core/src/domain/generated/output.js';
|
|
4
2
|
import { deriveNodeState, deriveProgress, deriveLifecycle, } from '../components/common/feature-node/derive-feature-state.js';
|
|
5
3
|
import { isProcessAlive } from '../../../../packages/core/src/infrastructure/services/process/is-process-alive.js';
|
|
6
|
-
import {
|
|
7
|
-
/** Compute the worktree path for a feature, matching WorktreeService.getWorktreePath() */
|
|
8
|
-
function computeWorktreePath(repoPath, branch) {
|
|
9
|
-
const repoHash = createHash('sha256').update(repoPath).digest('hex').slice(0, 16);
|
|
10
|
-
const slug = branch.replace(/\//g, '-');
|
|
11
|
-
return path.join(getShepHomeDir(), 'repos', repoHash, 'wt', slug).replace(/\\/g, '/');
|
|
12
|
-
}
|
|
4
|
+
import { computeWorktreePath } from '../../../../packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js';
|
|
13
5
|
export function buildGraphNodes(repositories, featuresWithRuns, options) {
|
|
14
6
|
// Normalize path separators so Windows backslash paths match forward-slash paths
|
|
15
7
|
const normalizePath = (p) => p.replace(/\\/g, '/');
|
package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts
CHANGED
|
@@ -6,6 +6,23 @@ export type FeatureNodeState = 'creating' | 'running' | 'action-required' | 'don
|
|
|
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>;
|
|
9
|
+
/** Left border color for each lifecycle phase. */
|
|
10
|
+
export declare const lifecycleBorderColors: Record<FeatureLifecyclePhase, string>;
|
|
11
|
+
/** Accent bar background color for each lifecycle phase. */
|
|
12
|
+
export declare const lifecycleAccentColors: Record<FeatureLifecyclePhase, string>;
|
|
13
|
+
/** Phase badge: short letter, color classes, and user-friendly tooltip. */
|
|
14
|
+
export declare const lifecyclePhaseBadge: Record<FeatureLifecyclePhase, {
|
|
15
|
+
letter: string;
|
|
16
|
+
bg: string;
|
|
17
|
+
text: string;
|
|
18
|
+
dot: string;
|
|
19
|
+
tooltip: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}>;
|
|
22
|
+
/** State-based left border overrides (takes precedence over lifecycle). */
|
|
23
|
+
export declare const stateBorderColors: Partial<Record<FeatureNodeState, string>>;
|
|
24
|
+
/** State-based accent bar overrides (takes precedence over lifecycle). */
|
|
25
|
+
export declare const stateAccentColors: Partial<Record<FeatureNodeState, string>>;
|
|
9
26
|
/** Present-participle verbs for the running badge, keyed by lifecycle phase. */
|
|
10
27
|
export declare const lifecycleRunningVerbs: Record<FeatureLifecyclePhase, string>;
|
|
11
28
|
export interface FeatureNodeData {
|
package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.js
CHANGED
|
@@ -9,6 +9,97 @@ export const lifecycleDisplayLabels = {
|
|
|
9
9
|
deploy: 'DEPLOY & QA',
|
|
10
10
|
maintain: 'COMPLETED',
|
|
11
11
|
};
|
|
12
|
+
/** Left border color for each lifecycle phase. */
|
|
13
|
+
export const lifecycleBorderColors = {
|
|
14
|
+
pending: 'border-l-slate-400',
|
|
15
|
+
requirements: 'border-l-violet-500',
|
|
16
|
+
research: 'border-l-cyan-500',
|
|
17
|
+
implementation: 'border-l-blue-500',
|
|
18
|
+
review: 'border-l-amber-500',
|
|
19
|
+
deploy: 'border-l-emerald-500',
|
|
20
|
+
maintain: 'border-l-gray-400',
|
|
21
|
+
};
|
|
22
|
+
/** Accent bar background color for each lifecycle phase. */
|
|
23
|
+
export const lifecycleAccentColors = {
|
|
24
|
+
pending: 'bg-slate-400',
|
|
25
|
+
requirements: 'bg-violet-500',
|
|
26
|
+
research: 'bg-cyan-500',
|
|
27
|
+
implementation: 'bg-blue-500',
|
|
28
|
+
review: 'bg-amber-500',
|
|
29
|
+
deploy: 'bg-emerald-500',
|
|
30
|
+
maintain: 'bg-gray-400',
|
|
31
|
+
};
|
|
32
|
+
/** Phase badge: short letter, color classes, and user-friendly tooltip. */
|
|
33
|
+
export const lifecyclePhaseBadge = {
|
|
34
|
+
pending: {
|
|
35
|
+
letter: 'P',
|
|
36
|
+
bg: 'bg-stone-100 dark:bg-stone-800',
|
|
37
|
+
text: 'text-stone-500 dark:text-stone-400',
|
|
38
|
+
dot: 'bg-stone-400',
|
|
39
|
+
tooltip: 'Pending',
|
|
40
|
+
description: 'Waiting to start — the feature is queued and ready to go.',
|
|
41
|
+
},
|
|
42
|
+
requirements: {
|
|
43
|
+
letter: 'R',
|
|
44
|
+
bg: 'bg-fuchsia-100 dark:bg-fuchsia-900/40',
|
|
45
|
+
text: 'text-fuchsia-600 dark:text-fuchsia-300',
|
|
46
|
+
dot: 'bg-fuchsia-500',
|
|
47
|
+
tooltip: 'Requirements',
|
|
48
|
+
description: 'Gathering what to build — the AI is writing a product requirements document (PRD) based on your request.',
|
|
49
|
+
},
|
|
50
|
+
research: {
|
|
51
|
+
letter: 'D',
|
|
52
|
+
bg: 'bg-teal-100 dark:bg-teal-900/40',
|
|
53
|
+
text: 'text-teal-600 dark:text-teal-300',
|
|
54
|
+
dot: 'bg-teal-500',
|
|
55
|
+
tooltip: 'Research',
|
|
56
|
+
description: 'Exploring your codebase — the AI is analyzing existing code, patterns, and dependencies to plan the best approach.',
|
|
57
|
+
},
|
|
58
|
+
implementation: {
|
|
59
|
+
letter: 'I',
|
|
60
|
+
bg: 'bg-indigo-100 dark:bg-indigo-900/40',
|
|
61
|
+
text: 'text-indigo-600 dark:text-indigo-300',
|
|
62
|
+
dot: 'bg-indigo-500',
|
|
63
|
+
tooltip: 'Implementation',
|
|
64
|
+
description: 'Writing code — the AI is implementing the feature, writing tests, and making sure everything compiles.',
|
|
65
|
+
},
|
|
66
|
+
review: {
|
|
67
|
+
letter: 'M',
|
|
68
|
+
bg: 'bg-orange-100 dark:bg-orange-900/40',
|
|
69
|
+
text: 'text-orange-600 dark:text-orange-300',
|
|
70
|
+
dot: 'bg-orange-500',
|
|
71
|
+
tooltip: 'Merge Review',
|
|
72
|
+
description: 'Ready to merge — the code is complete. Review the changes and approve to merge into your repository.',
|
|
73
|
+
},
|
|
74
|
+
deploy: {
|
|
75
|
+
letter: 'Q',
|
|
76
|
+
bg: 'bg-lime-100 dark:bg-lime-900/40',
|
|
77
|
+
text: 'text-lime-600 dark:text-lime-300',
|
|
78
|
+
dot: 'bg-lime-500',
|
|
79
|
+
tooltip: 'Deploy & QA',
|
|
80
|
+
description: 'Deploying and testing — the feature is being deployed to a preview environment for quality checks.',
|
|
81
|
+
},
|
|
82
|
+
maintain: {
|
|
83
|
+
letter: '✓',
|
|
84
|
+
bg: 'bg-emerald-100 dark:bg-emerald-900/40',
|
|
85
|
+
text: 'text-emerald-500 dark:text-emerald-400',
|
|
86
|
+
dot: 'bg-emerald-500',
|
|
87
|
+
tooltip: 'Completed',
|
|
88
|
+
description: 'All done — the feature has been merged and delivered successfully.',
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
/** State-based left border overrides (takes precedence over lifecycle). */
|
|
92
|
+
export const stateBorderColors = {
|
|
93
|
+
blocked: 'border-l-gray-400',
|
|
94
|
+
error: 'border-l-red-500',
|
|
95
|
+
deleting: 'border-l-gray-300',
|
|
96
|
+
};
|
|
97
|
+
/** State-based accent bar overrides (takes precedence over lifecycle). */
|
|
98
|
+
export const stateAccentColors = {
|
|
99
|
+
blocked: 'bg-gray-400',
|
|
100
|
+
error: 'bg-red-500',
|
|
101
|
+
deleting: 'bg-gray-300',
|
|
102
|
+
};
|
|
12
103
|
/** Present-participle verbs for the running badge, keyed by lifecycle phase. */
|
|
13
104
|
export const lifecycleRunningVerbs = {
|
|
14
105
|
pending: 'Waiting to start',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-node/feature-node.tsx"],"names":[],"mappings":"
|
|
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"}
|