@shepai/cli 1.85.0-pr167.980b2b5 → 1.85.0-pr250.edcd813
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/ports/output/services/worktree-service.interface.d.ts +1 -2
- package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts +2 -7
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +15 -29
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +0 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +0 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +0 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +0 -3
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +2 -6
- package/dist/src/presentation/cli/commands/feat/del.command.d.ts +1 -3
- package/dist/src/presentation/cli/commands/feat/del.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/del.command.js +2 -19
- package/dist/src/presentation/web/app/actions/delete-feature.d.ts +1 -1
- package/dist/src/presentation/web/app/actions/delete-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/delete-feature.js +2 -4
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +10 -0
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +8 -0
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +3 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +74 -0
- package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/task-progress-view/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/task-progress-view/index.js +1 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts +6 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.js +84 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/task-progress-view/task-progress-view.stories.js +194 -0
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -2
- 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/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- 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]/page/server-reference-manifest.json +21 -21
- 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 +14 -14
- 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 +18 -18
- 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]/page/server-reference-manifest.json +21 -21
- 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 +14 -14
- 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 +14 -14
- 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 +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/settings/page/server-reference-manifest.json +5 -5
- 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 +6 -6
- 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 +6 -6
- 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 +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- 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_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- 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]__b3a4cef4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d42594dd._.js +1 -1
- package/web/.next/server/chunks/ssr/_d42594dd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0b848752._.js → _de1a716c._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0b848752._.js.map → _de1a716c._.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__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.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_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.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 +28 -28
- package/web/.next/static/chunks/{39d023c65b97d443.js → 22fc35c70797da48.js} +2 -2
- package/web/.next/static/chunks/{990156878e45adbf.js → 3cab322155d95001.js} +1 -1
- package/web/.next/static/chunks/{9940c6562aedb301.js → 49fa8d816446d299.js} +1 -1
- package/web/.next/static/chunks/{38fdde24a1515d32.js → 58c0c7e0ba4eb800.js} +1 -1
- package/web/.next/static/chunks/{d8b5b0720f70666e.js → 66d77699ae515947.js} +1 -1
- package/web/.next/static/chunks/91d63f8e429f5900.css +2 -0
- package/web/.next/static/chunks/91f4b9b71f996fa2.js +1 -0
- package/web/.next/static/chunks/{54b44bf36afd3700.js → 9563588568084e9f.js} +1 -1
- package/web/.next/static/chunks/{ce4baaa5b4d40f6c.js → bc721b8be0dd63d4.js} +1 -1
- package/web/.next/static/chunks/bca16a8f7c5c8640.js +1 -0
- package/web/.next/static/chunks/{809ff17e8e6716e2.js → d30abacd431cdcba.js} +1 -1
- package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts +0 -22
- package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +0 -76
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog-config.d.ts +0 -9
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog-config.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog-config.js +0 -1
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.d.ts +0 -3
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.js +0 -16
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts +0 -8
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/delete-feature-dialog/delete-feature-dialog.stories.js +0 -25
- package/dist/src/presentation/web/components/common/delete-feature-dialog/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/delete-feature-dialog/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/delete-feature-dialog/index.js +0 -1
- package/web/.next/static/chunks/3ac3cd1ace6df307.js +0 -1
- package/web/.next/static/chunks/50f89c3112f6dd23.css +0 -2
- package/web/.next/static/chunks/b0092a380441d7ea.js +0 -1
- /package/web/.next/static/{j0veE9VyiEGY-OKWxJdSw → bR3UuAR1sk0-SFvYGdbqM}/_buildManifest.js +0 -0
- /package/web/.next/static/{j0veE9VyiEGY-OKWxJdSw → bR3UuAR1sk0-SFvYGdbqM}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{j0veE9VyiEGY-OKWxJdSw → bR3UuAR1sk0-SFvYGdbqM}/_ssgManifest.js +0 -0
package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts
CHANGED
|
@@ -54,10 +54,9 @@ export interface IWorktreeService {
|
|
|
54
54
|
* Remove an existing worktree.
|
|
55
55
|
*
|
|
56
56
|
* @param worktreePath - Path to the worktree to remove
|
|
57
|
-
* @param force - When true, passes --force to git worktree remove (handles dirty worktrees)
|
|
58
57
|
* @throws WorktreeError if worktree not found or has uncommitted changes
|
|
59
58
|
*/
|
|
60
|
-
remove(worktreePath: string
|
|
59
|
+
remove(worktreePath: string): Promise<void>;
|
|
61
60
|
/**
|
|
62
61
|
* List all worktrees in a repository.
|
|
63
62
|
*
|
package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB
|
|
1
|
+
{"version":3,"file":"worktree-service.interface.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/application/ports/output/services/worktree-service.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;OAKG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEhD;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvE;;;;;;OAMG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1D;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
|
@@ -18,18 +18,13 @@ import type { IFeatureRepository } from '../../ports/output/repositories/feature
|
|
|
18
18
|
import type { IWorktreeService } from '../../ports/output/services/worktree-service.interface.js';
|
|
19
19
|
import type { IFeatureAgentProcessService } from '../../ports/output/agents/feature-agent-process.interface.js';
|
|
20
20
|
import type { IAgentRunRepository } from '../../ports/output/agents/agent-run-repository.interface.js';
|
|
21
|
-
import type { CleanupFeatureWorktreeUseCase } from './cleanup-feature-worktree.use-case.js';
|
|
22
|
-
export interface DeleteFeatureOptions {
|
|
23
|
-
cleanup?: boolean;
|
|
24
|
-
}
|
|
25
21
|
export declare class DeleteFeatureUseCase {
|
|
26
22
|
private readonly featureRepo;
|
|
27
23
|
private readonly worktreeService;
|
|
28
24
|
private readonly processService;
|
|
29
25
|
private readonly runRepo;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
execute(featureId: string, options?: DeleteFeatureOptions): Promise<Feature>;
|
|
26
|
+
constructor(featureRepo: IFeatureRepository, worktreeService: IWorktreeService, processService: IFeatureAgentProcessService, runRepo: IAgentRunRepository);
|
|
27
|
+
execute(featureId: string): Promise<Feature>;
|
|
33
28
|
private cascadeDeleteChildren;
|
|
34
29
|
private deleteSingleFeature;
|
|
35
30
|
}
|
package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;
|
|
1
|
+
{"version":3,"file":"delete-feature.use-case.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/application/use-cases/features/delete-feature.use-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAEvG,qBACa,oBAAoB;IAEC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAE5D,OAAO,CAAC,QAAQ,CAAC,cAAc;IACA,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJR,WAAW,EAAE,kBAAkB,EACjC,eAAe,EAAE,gBAAgB,EAE7D,cAAc,EAAE,2BAA2B,EACZ,OAAO,EAAE,mBAAmB;IAGxE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAkBpC,qBAAqB;YASrB,mBAAmB;CA8BlC"}
|
|
@@ -32,15 +32,13 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
|
|
|
32
32
|
worktreeService;
|
|
33
33
|
processService;
|
|
34
34
|
runRepo;
|
|
35
|
-
|
|
36
|
-
constructor(featureRepo, worktreeService, processService, runRepo, cleanupUseCase) {
|
|
35
|
+
constructor(featureRepo, worktreeService, processService, runRepo) {
|
|
37
36
|
this.featureRepo = featureRepo;
|
|
38
37
|
this.worktreeService = worktreeService;
|
|
39
38
|
this.processService = processService;
|
|
40
39
|
this.runRepo = runRepo;
|
|
41
|
-
this.cleanupUseCase = cleanupUseCase;
|
|
42
40
|
}
|
|
43
|
-
async execute(featureId
|
|
41
|
+
async execute(featureId) {
|
|
44
42
|
// 1. Find feature (exact or prefix match)
|
|
45
43
|
const feature = (await this.featureRepo.findById(featureId)) ??
|
|
46
44
|
(await this.featureRepo.findByIdPrefix(featureId));
|
|
@@ -48,20 +46,20 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
|
|
|
48
46
|
throw new Error(`Feature not found: "${featureId}"`);
|
|
49
47
|
}
|
|
50
48
|
// 2. Cascade delete all sub-features (depth-first)
|
|
51
|
-
await this.cascadeDeleteChildren(feature.id
|
|
49
|
+
await this.cascadeDeleteChildren(feature.id);
|
|
52
50
|
// 3. Delete the feature itself
|
|
53
|
-
await this.deleteSingleFeature(feature
|
|
51
|
+
await this.deleteSingleFeature(feature);
|
|
54
52
|
return feature;
|
|
55
53
|
}
|
|
56
|
-
async cascadeDeleteChildren(parentId
|
|
54
|
+
async cascadeDeleteChildren(parentId) {
|
|
57
55
|
const children = await this.featureRepo.findByParentId(parentId);
|
|
58
56
|
for (const child of children) {
|
|
59
57
|
// Recurse into grandchildren first (depth-first)
|
|
60
|
-
await this.cascadeDeleteChildren(child.id
|
|
61
|
-
await this.deleteSingleFeature(child
|
|
58
|
+
await this.cascadeDeleteChildren(child.id);
|
|
59
|
+
await this.deleteSingleFeature(child);
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
|
-
async deleteSingleFeature(feature
|
|
62
|
+
async deleteSingleFeature(feature) {
|
|
65
63
|
// Cancel running/pending agent run if present
|
|
66
64
|
if (feature.agentRunId) {
|
|
67
65
|
const run = await this.runRepo.findById(feature.agentRunId);
|
|
@@ -77,24 +75,13 @@ let DeleteFeatureUseCase = class DeleteFeatureUseCase {
|
|
|
77
75
|
await this.runRepo.updateStatus(run.id, AgentRunStatus.cancelled);
|
|
78
76
|
}
|
|
79
77
|
}
|
|
80
|
-
//
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
await this.cleanupUseCase.execute(feature.id);
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
// Cleanup is best-effort — don't block deletion
|
|
88
|
-
}
|
|
78
|
+
// Remove worktree (ignore errors if already removed)
|
|
79
|
+
const worktreePath = this.worktreeService.getWorktreePath(feature.repositoryPath, feature.branch);
|
|
80
|
+
try {
|
|
81
|
+
await this.worktreeService.remove(worktreePath);
|
|
89
82
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
try {
|
|
93
|
-
await this.worktreeService.remove(worktreePath);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
// Worktree might already be removed - that's fine
|
|
97
|
-
}
|
|
83
|
+
catch {
|
|
84
|
+
// Worktree might already be removed - that's fine
|
|
98
85
|
}
|
|
99
86
|
// Delete feature record
|
|
100
87
|
await this.featureRepo.delete(feature.id);
|
|
@@ -106,7 +93,6 @@ DeleteFeatureUseCase = __decorate([
|
|
|
106
93
|
__param(1, inject('IWorktreeService')),
|
|
107
94
|
__param(2, inject('IFeatureAgentProcessService')),
|
|
108
95
|
__param(3, inject('IAgentRunRepository')),
|
|
109
|
-
|
|
110
|
-
__metadata("design:paramtypes", [Object, Object, Object, Object, Object])
|
|
96
|
+
__metadata("design:paramtypes", [Object, Object, Object, Object])
|
|
111
97
|
], DeleteFeatureUseCase);
|
|
112
98
|
export { DeleteFeatureUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAkHrC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,SAAS,CAAC,CAiRrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -77,7 +77,6 @@ import { ListRepositoriesUseCase } from '../../application/use-cases/repositorie
|
|
|
77
77
|
import { DeleteRepositoryUseCase } from '../../application/use-cases/repositories/delete-repository.use-case.js';
|
|
78
78
|
import { CheckAndUnblockFeaturesUseCase } from '../../application/use-cases/features/check-and-unblock-features.use-case.js';
|
|
79
79
|
import { UpdateFeatureLifecycleUseCase } from '../../application/use-cases/features/update/update-feature-lifecycle.use-case.js';
|
|
80
|
-
import { CleanupFeatureWorktreeUseCase } from '../../application/use-cases/features/cleanup-feature-worktree.use-case.js';
|
|
81
80
|
// Session listing
|
|
82
81
|
import { ClaudeCodeSessionRepository } from '../services/agents/sessions/claude-code-session.repository.js';
|
|
83
82
|
import { StubSessionRepository } from '../services/agents/sessions/stub-session.repository.js';
|
|
@@ -260,7 +259,6 @@ export async function initializeContainer() {
|
|
|
260
259
|
// because the latter injects the former via class token.
|
|
261
260
|
container.registerSingleton(CheckAndUnblockFeaturesUseCase);
|
|
262
261
|
container.registerSingleton(UpdateFeatureLifecycleUseCase);
|
|
263
|
-
container.registerSingleton(CleanupFeatureWorktreeUseCase);
|
|
264
262
|
// Session repositories (per-AgentType string tokens)
|
|
265
263
|
container.register(`IAgentSessionRepository:${AgentType.ClaudeCode}`, {
|
|
266
264
|
useFactory: () => new ClaudeCodeSessionRepository(),
|
|
@@ -336,9 +334,6 @@ export async function initializeContainer() {
|
|
|
336
334
|
container.register('UpdateSettingsUseCase', {
|
|
337
335
|
useFactory: (c) => c.resolve(UpdateSettingsUseCase),
|
|
338
336
|
});
|
|
339
|
-
container.register('CleanupFeatureWorktreeUseCase', {
|
|
340
|
-
useFactory: (c) => c.resolve(CleanupFeatureWorktreeUseCase),
|
|
341
|
-
});
|
|
342
337
|
_initialized = true;
|
|
343
338
|
return container;
|
|
344
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAe1B,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-agent-worker.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAe1B,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAU9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiE1D;AAgCD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkP/D"}
|
package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js
CHANGED
|
@@ -24,7 +24,6 @@ import { setPhaseTimingContext, recordLifecycleEvent } from './phase-timing-cont
|
|
|
24
24
|
import { setLifecycleContext } from './lifecycle-context.js';
|
|
25
25
|
import { setLogPrefix, getLogPrefix } from './log-context.js';
|
|
26
26
|
import { UpdateFeatureLifecycleUseCase } from '../../../../application/use-cases/features/update/update-feature-lifecycle.use-case.js';
|
|
27
|
-
import { CleanupFeatureWorktreeUseCase } from '../../../../application/use-cases/features/cleanup-feature-worktree.use-case.js';
|
|
28
27
|
/**
|
|
29
28
|
* Parse CLI arguments into a WorkerArgs object.
|
|
30
29
|
* Throws if any required argument is missing.
|
|
@@ -168,7 +167,6 @@ export async function runWorker(args) {
|
|
|
168
167
|
// Resolve merge node dependencies
|
|
169
168
|
const gitPrService = container.resolve('IGitPrService');
|
|
170
169
|
const featureRepository = container.resolve('IFeatureRepository');
|
|
171
|
-
const cleanupFeatureWorktreeUseCase = container.resolve(CleanupFeatureWorktreeUseCase);
|
|
172
170
|
const graphDeps = {
|
|
173
171
|
executor,
|
|
174
172
|
mergeNodeDeps: {
|
|
@@ -178,7 +176,6 @@ export async function runWorker(args) {
|
|
|
178
176
|
verifyMerge: (cwd, featureBranch, baseBranch) => gitPrService.verifyMerge(cwd, featureBranch, baseBranch),
|
|
179
177
|
featureRepository,
|
|
180
178
|
gitPrService,
|
|
181
|
-
cleanupFeatureWorktreeUseCase,
|
|
182
179
|
},
|
|
183
180
|
};
|
|
184
181
|
// Use threadId for checkpoint path so resume runs share the same checkpoint DB.
|
|
@@ -16,7 +16,6 @@ import type { IAgentExecutor } from '../../../../../../application/ports/output/
|
|
|
16
16
|
import type { FeatureAgentState } from '../../state.js';
|
|
17
17
|
import type { IFeatureRepository } from '../../../../../../application/ports/output/repositories/feature-repository.interface.js';
|
|
18
18
|
import type { DiffSummary, IGitPrService } from '../../../../../../application/ports/output/services/git-pr-service.interface.js';
|
|
19
|
-
import type { CleanupFeatureWorktreeUseCase } from '../../../../../../application/use-cases/features/cleanup-feature-worktree.use-case.js';
|
|
20
19
|
export interface MergeNodeDeps {
|
|
21
20
|
executor: IAgentExecutor;
|
|
22
21
|
getDiffSummary: (cwd: string, baseBranch: string) => Promise<DiffSummary>;
|
|
@@ -29,7 +28,6 @@ export interface MergeNodeDeps {
|
|
|
29
28
|
*/
|
|
30
29
|
verifyMerge: (cwd: string, featureBranch: string, baseBranch: string) => Promise<boolean>;
|
|
31
30
|
gitPrService: IGitPrService;
|
|
32
|
-
cleanupFeatureWorktreeUseCase: Pick<CleanupFeatureWorktreeUseCase, 'execute'>;
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* Factory that creates the merge node function.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;
|
|
1
|
+
{"version":3,"file":"merge.node.d.ts","sourceRoot":"","sources":["../../../../../../../../../../packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAClH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACd,MAAM,iEAAiE,CAAC;AAmBzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACnE;;;OAGG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,IAGnC,OAAO,iBAAiB,KAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAsQ7E"}
|
|
@@ -231,9 +231,6 @@ export function createMergeNode(deps) {
|
|
|
231
231
|
updatedAt: new Date(),
|
|
232
232
|
});
|
|
233
233
|
messages.push(`[merge] Feature lifecycle → ${newLifecycle}`);
|
|
234
|
-
if (merged) {
|
|
235
|
-
await deps.cleanupFeatureWorktreeUseCase.execute(feature.id);
|
|
236
|
-
}
|
|
237
234
|
}
|
|
238
235
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
239
236
|
await recordPhaseEnd(mergeTimingId, Date.now() - startTime);
|
|
@@ -18,7 +18,7 @@ export declare class WorktreeService implements IWorktreeService {
|
|
|
18
18
|
private readonly execFile;
|
|
19
19
|
constructor(execFile: ExecFunction);
|
|
20
20
|
create(repoPath: string, branch: string, worktreePath: string, startPoint?: string): Promise<WorktreeInfo>;
|
|
21
|
-
remove(worktreePath: string
|
|
21
|
+
remove(worktreePath: string): Promise<void>;
|
|
22
22
|
list(repoPath: string): Promise<WorktreeInfo[]>;
|
|
23
23
|
exists(repoPath: string, branch: string): Promise<boolean>;
|
|
24
24
|
branchExists(repoPath: string, branch: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAOlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAqBlB,MAAM,CAAC,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"worktree.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/git/worktree.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,0EAA0E,CAAC;AAOlF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,MAAM,KACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBACa,eAAgB,YAAW,gBAAgB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,YAAY;IAErE,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAqBlB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAO/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;CAU9B"}
|
|
@@ -48,13 +48,9 @@ let WorktreeService = class WorktreeService {
|
|
|
48
48
|
}
|
|
49
49
|
return created;
|
|
50
50
|
}
|
|
51
|
-
async remove(worktreePath
|
|
51
|
+
async remove(worktreePath) {
|
|
52
52
|
try {
|
|
53
|
-
|
|
54
|
-
if (force)
|
|
55
|
-
args.push('--force');
|
|
56
|
-
args.push(worktreePath);
|
|
57
|
-
await this.execFile('git', args, {});
|
|
53
|
+
await this.execFile('git', ['worktree', 'remove', worktreePath], {});
|
|
58
54
|
}
|
|
59
55
|
catch (error) {
|
|
60
56
|
throw this.parseGitError(error);
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
* Feature Delete Command
|
|
3
3
|
*
|
|
4
4
|
* Deletes a feature, its worktree, and cancels any running agent.
|
|
5
|
-
* Optionally cleans up worktree and branches (local + remote).
|
|
6
5
|
*
|
|
7
|
-
* Usage: shep feat del <id> [--force]
|
|
6
|
+
* Usage: shep feat del <id> [--force]
|
|
8
7
|
*
|
|
9
8
|
* @example
|
|
10
9
|
* $ shep feat del feat-123
|
|
11
10
|
* $ shep feat del feat-123 --force
|
|
12
|
-
* $ shep feat del feat-123 --force --no-cleanup
|
|
13
11
|
*/
|
|
14
12
|
import { Command } from 'commander';
|
|
15
13
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"del.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/del.command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"del.command.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/cli/commands/feat/del.command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAoC1C"}
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
* Feature Delete Command
|
|
3
3
|
*
|
|
4
4
|
* Deletes a feature, its worktree, and cancels any running agent.
|
|
5
|
-
* Optionally cleans up worktree and branches (local + remote).
|
|
6
5
|
*
|
|
7
|
-
* Usage: shep feat del <id> [--force]
|
|
6
|
+
* Usage: shep feat del <id> [--force]
|
|
8
7
|
*
|
|
9
8
|
* @example
|
|
10
9
|
* $ shep feat del feat-123
|
|
11
10
|
* $ shep feat del feat-123 --force
|
|
12
|
-
* $ shep feat del feat-123 --force --no-cleanup
|
|
13
11
|
*/
|
|
14
12
|
import { Command } from 'commander';
|
|
15
13
|
import { container } from '../../../../../packages/core/src/infrastructure/di/container.js';
|
|
@@ -25,7 +23,6 @@ export function createDelCommand() {
|
|
|
25
23
|
.description('Delete a feature')
|
|
26
24
|
.argument('<id>', 'Feature ID or prefix')
|
|
27
25
|
.option('-f, --force', 'Skip confirmation prompt')
|
|
28
|
-
.option('--no-cleanup', 'Skip worktree and branch cleanup')
|
|
29
26
|
.action(async (featureId, options) => {
|
|
30
27
|
try {
|
|
31
28
|
// First show what we're about to delete
|
|
@@ -41,26 +38,12 @@ export function createDelCommand() {
|
|
|
41
38
|
return;
|
|
42
39
|
}
|
|
43
40
|
}
|
|
44
|
-
// Determine cleanup preference
|
|
45
|
-
let cleanup = true;
|
|
46
|
-
if (options.cleanup === false) {
|
|
47
|
-
cleanup = false;
|
|
48
|
-
}
|
|
49
|
-
else if (!options.force) {
|
|
50
|
-
cleanup = await confirm({
|
|
51
|
-
message: 'Also clean up worktree and branches?',
|
|
52
|
-
default: true,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
41
|
const deleteUseCase = container.resolve(DeleteFeatureUseCase);
|
|
56
|
-
await deleteUseCase.execute(feature.id
|
|
42
|
+
await deleteUseCase.execute(feature.id);
|
|
57
43
|
messages.newline();
|
|
58
44
|
messages.success('Feature deleted');
|
|
59
45
|
console.log(` ${colors.muted('Name:')} ${feature.name}`);
|
|
60
46
|
console.log(` ${colors.muted('Branch:')} ${feature.branch}`);
|
|
61
|
-
if (cleanup) {
|
|
62
|
-
console.log(` ${colors.muted('Cleanup:')} worktree, local branch, remote branch`);
|
|
63
|
-
}
|
|
64
47
|
messages.newline();
|
|
65
48
|
}
|
|
66
49
|
catch (error) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Feature } from '../../../../../packages/core/src/domain/generated/output.js';
|
|
2
|
-
export declare function deleteFeature(featureId: string
|
|
2
|
+
export declare function deleteFeature(featureId: string): Promise<{
|
|
3
3
|
feature?: Feature;
|
|
4
4
|
error?: string;
|
|
5
5
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"delete-feature.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/delete-feature.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAahD"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
import { resolve } from '../../lib/server-container.js';
|
|
3
|
-
export async function deleteFeature(featureId
|
|
3
|
+
export async function deleteFeature(featureId) {
|
|
4
4
|
if (!featureId?.trim()) {
|
|
5
5
|
return { error: 'id is required' };
|
|
6
6
|
}
|
|
7
7
|
try {
|
|
8
8
|
const deleteFeatureUseCase = resolve('DeleteFeatureUseCase');
|
|
9
|
-
const feature =
|
|
10
|
-
? await deleteFeatureUseCase.execute(featureId, { cleanup })
|
|
11
|
-
: await deleteFeatureUseCase.execute(featureId);
|
|
9
|
+
const feature = await deleteFeatureUseCase.execute(featureId);
|
|
12
10
|
return { feature };
|
|
13
11
|
}
|
|
14
12
|
catch (error) {
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
+
export interface AcceptanceCriterionData {
|
|
2
|
+
description: string;
|
|
3
|
+
verified: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface ActionItemData {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
acceptanceCriteria: AcceptanceCriterionData[];
|
|
9
|
+
}
|
|
1
10
|
export interface PlanTaskData {
|
|
2
11
|
title: string;
|
|
3
12
|
description: string;
|
|
4
13
|
state: string;
|
|
14
|
+
actionItems: ActionItemData[];
|
|
5
15
|
}
|
|
6
16
|
export interface PlanData {
|
|
7
17
|
state: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-feature-plan.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-plan.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"get-feature-plan.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-plan.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwC9E"}
|
|
@@ -20,6 +20,14 @@ export async function getFeaturePlan(featureId) {
|
|
|
20
20
|
title: t.title ?? '',
|
|
21
21
|
description: t.description ?? '',
|
|
22
22
|
state: t.state,
|
|
23
|
+
actionItems: (t.actionItems ?? []).map((ai) => ({
|
|
24
|
+
name: ai.name,
|
|
25
|
+
description: ai.description,
|
|
26
|
+
acceptanceCriteria: (ai.acceptanceCriteria ?? []).map((ac) => ({
|
|
27
|
+
description: ac.description,
|
|
28
|
+
verified: ac.verified,
|
|
29
|
+
})),
|
|
30
|
+
})),
|
|
23
31
|
})),
|
|
24
32
|
};
|
|
25
33
|
return { plan };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAQD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,2CAgD7D"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Loader2
|
|
3
|
+
import { Loader2 } from 'lucide-react';
|
|
4
4
|
import { AlertCircle, ListTodo } from 'lucide-react';
|
|
5
5
|
import { Badge } from '../../ui/badge.js';
|
|
6
|
+
import { TaskProgressView } from '../../common/task-progress-view/index.js';
|
|
6
7
|
const planStateBadgeStyles = {
|
|
7
8
|
Requirements: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
|
|
8
9
|
ClarificationRequired: 'border-transparent bg-amber-50 text-amber-700 hover:bg-amber-50',
|
|
9
10
|
Ready: 'border-transparent bg-green-50 text-green-700 hover:bg-green-50',
|
|
10
11
|
};
|
|
11
|
-
const taskStateConfig = {
|
|
12
|
-
Todo: { icon: Circle, colorClass: 'text-muted-foreground' },
|
|
13
|
-
'Work in Progress': { icon: Loader2, colorClass: 'text-blue-600', spinning: true },
|
|
14
|
-
Done: { icon: Check, colorClass: 'text-emerald-600' },
|
|
15
|
-
Review: { icon: Eye, colorClass: 'text-amber-600' },
|
|
16
|
-
};
|
|
17
|
-
const defaultTaskConfig = { icon: Circle, colorClass: 'text-muted-foreground' };
|
|
18
12
|
export function PlanTab({ plan, loading, error }) {
|
|
19
13
|
if (loading) {
|
|
20
14
|
return (_jsx("div", { "data-testid": "plan-tab-loading", className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
|
|
@@ -25,16 +19,5 @@ export function PlanTab({ plan, loading, error }) {
|
|
|
25
19
|
if (!plan) {
|
|
26
20
|
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(ListTodo, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No plan created yet" })] }));
|
|
27
21
|
}
|
|
28
|
-
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Plan State" }), _jsx(Badge, { className: planStateBadgeStyles[plan.state] ?? 'border-transparent bg-gray-50 text-gray-700', children: plan.state })] }), plan.overview ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Overview" }), _jsx("p", { className: "text-sm leading-relaxed", children: plan.overview })] })) : null, _jsx(
|
|
29
|
-
}
|
|
30
|
-
function TaskList({ tasks }) {
|
|
31
|
-
if (tasks.length === 0) {
|
|
32
|
-
return (_jsx("div", { className: "flex flex-col items-center justify-center gap-2 py-4", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No tasks defined yet" }) }));
|
|
33
|
-
}
|
|
34
|
-
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Tasks" }), _jsx("div", { "data-testid": "plan-task-list", className: "flex flex-col gap-2", children: tasks.map((task, index) => (_jsx(TaskItem, { task: task, index: index }, task.title || `task-${index}`))) })] }));
|
|
35
|
-
}
|
|
36
|
-
function TaskItem({ task, index }) {
|
|
37
|
-
const config = taskStateConfig[task.state] ?? defaultTaskConfig;
|
|
38
|
-
const Icon = config.icon;
|
|
39
|
-
return (_jsxs("div", { "data-testid": `plan-task-${index}`, className: `flex items-start gap-2 rounded-md border px-3 py-2 ${config.colorClass}`, children: [_jsx(Icon, { className: `mt-0.5 h-4 w-4 shrink-0 ${config.spinning ? 'animate-spin' : ''}` }), _jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-sm font-medium", children: task.title }), task.description ? (_jsx("span", { className: "text-muted-foreground text-xs", children: task.description })) : null] })] }));
|
|
22
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Plan State" }), _jsx(Badge, { className: planStateBadgeStyles[plan.state] ?? 'border-transparent bg-gray-50 text-gray-700', children: plan.state })] }), plan.overview ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Overview" }), _jsx("p", { className: "text-sm leading-relaxed", children: plan.overview })] })) : null, _jsx(TaskProgressView, { tasks: plan.tasks })] }));
|
|
40
23
|
}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAc9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAc9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;AAoMtC,6EAA6E;AAC7E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
|