@shepai/cli 1.152.0 → 1.153.0-pr477.9c7fcd0
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/repositories/interactive-session-repository.interface.d.ts +5 -0
- package/dist/packages/core/src/application/ports/output/repositories/interactive-session-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +37 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts +5 -0
- package/dist/packages/core/src/application/ports/output/services/interactive-session-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.d.ts +18 -0
- package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/get-repository-commits.use-case.js +40 -0
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +5 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-interactive-session.repository.js +15 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-interactive-executor.service.js +8 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +3 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +40 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +51 -5
- package/dist/src/presentation/web/app/actions/get-repository-commits.d.ts +13 -0
- package/dist/src/presentation/web/app/actions/get-repository-commits.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/get-repository-commits.js +16 -0
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts +4 -5
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.js +5 -13
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.d.ts +14 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.js +120 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.js +140 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts +16 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.js +33 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +11 -1
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts +8 -2
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js +10 -7
- 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 +2 -3
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +43 -30
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +66 -3
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts +1 -6
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/canvas-toolbar.js +5 -6
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +9 -5
- package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts +4 -8
- package/dist/src/presentation/web/hooks/turn-statuses-provider.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/turn-statuses-provider.js +4 -4
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts +4 -5
- package/dist/src/presentation/web/hooks/use-turn-statuses.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/use-turn-statuses.js +7 -12
- 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 +28 -28
- 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/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +29 -29
- 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 +36 -36
- 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 +36 -36
- 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]/[tab]/page/server-reference-manifest.json +67 -52
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +67 -52
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- 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)/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +29 -29
- 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 +36 -36
- 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 +36 -36
- 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 +26 -26
- 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]/[tab]/page/server-reference-manifest.json +67 -52
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +67 -52
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- 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 +5 -5
- 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/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/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 +10 -10
- 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 +10 -10
- 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 +5 -5
- 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/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js.map +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/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_refresh-cw_2796b1f0.js +3 -0
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_refresh-cw_2796b1f0.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce859680._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ce859680._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_5fce01a7._.js → _29ca8860._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_5fce01a7._.js.map → _29ca8860._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_3a0b989f._.js +2 -2
- package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_d8bedf13._.js → _48066275._.js} +2 -2
- package/web/.next/server/chunks/ssr/_48066275._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_d86175ae._.js → _4b41246e._.js} +2 -2
- package/web/.next/server/chunks/ssr/_4b41246e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_8219712a._.js → _5eb64260._.js} +2 -2
- package/web/.next/server/chunks/ssr/_5eb64260._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_5f69c13f._.js → _6438bf2d._.js} +2 -2
- package/web/.next/server/chunks/ssr/_6438bf2d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_cb5a021e._.js → _87761ee1._.js} +2 -2
- package/web/.next/server/chunks/ssr/_87761ee1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_9495d50b._.js +1 -1
- package/web/.next/server/chunks/ssr/_9495d50b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_cf1c5b73._.js → _a3aa1eb6._.js} +2 -2
- package/web/.next/server/chunks/ssr/_a3aa1eb6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ac4a3873._.js +1 -1
- package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_c93c0cc6._.js +3 -0
- package/web/.next/server/chunks/ssr/_c93c0cc6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +1 -1
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_e9a73a63._.js → _e55a0378._.js} +2 -2
- package/web/.next/server/chunks/ssr/_e55a0378._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_fa7efce3._.js +2 -2
- package/web/.next/server/chunks/ssr/_fa7efce3._.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/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +3 -0
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_324a47da._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_324a47da._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +185 -149
- package/web/.next/static/chunks/0b347558818d2628.js +1 -0
- package/web/.next/static/chunks/{cd54b758f58061d0.js → 1406c2860e7fac9c.js} +1 -1
- package/web/.next/static/chunks/36208713ad011740.js +1 -0
- package/web/.next/static/chunks/3f21588c6956d5b4.css +1 -0
- package/web/.next/static/chunks/471bebfd8d0f0acd.js +1 -0
- package/web/.next/static/chunks/{277a7f64d4ec189d.js → 5a585a2f6bcff4a9.js} +1 -1
- package/web/.next/static/chunks/{1b4429259bbf3064.js → 65ece264fa8f6fe1.js} +2 -2
- package/web/.next/static/chunks/{f9a80d3854a8d453.js → 929ed61442b5e9f7.js} +1 -1
- package/web/.next/static/chunks/{80c4c8b3a5c8e0b6.js → a4ffe2d157f11ad3.js} +1 -1
- package/web/.next/static/chunks/{bdd340ad42a34b41.js → aaf8507271e6f018.js} +1 -1
- package/web/.next/static/chunks/b27aae090cd67337.js +7 -0
- package/web/.next/static/chunks/{ef1c9f43aafff65f.js → b2c3da92e5d7864b.js} +2 -2
- package/web/.next/static/chunks/bb831852c32a9e59.js +1 -0
- package/web/.next/static/chunks/{a2257ffb1349f838.js → d13a4b544b737cbc.js} +1 -1
- package/web/.next/static/chunks/eef9a6b627e39d41.js +1 -0
- package/web/.next/static/chunks/{f33efe6a12242a8a.js → fa08611a63bb5369.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563f2f7a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__563f2f7a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_8219712a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cf1c5b73._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_cfbd1d7e._.js +0 -3
- package/web/.next/server/chunks/ssr/_cfbd1d7e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e9a73a63._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f78b4b9d._.js +0 -3
- package/web/.next/server/chunks/ssr/_f78b4b9d._.js.map +0 -1
- package/web/.next/static/chunks/22c459f1877b1e4f.js +0 -1
- package/web/.next/static/chunks/4908997348bd55f8.js +0 -1
- package/web/.next/static/chunks/6bf775818e4ad42e.js +0 -1
- package/web/.next/static/chunks/76858a51f2fbe99a.js +0 -7
- package/web/.next/static/chunks/8ba1c07ef18b15a9.js +0 -1
- package/web/.next/static/chunks/a919a9df4ab12a5c.css +0 -1
- package/web/.next/static/chunks/ee20803fb301d59e.js +0 -1
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → -_iF1islqFSzVifHA2Zlt}/_buildManifest.js +0 -0
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → -_iF1islqFSzVifHA2Zlt}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{lPbWG8a1RwBDDcvRngp58 → -_iF1islqFSzVifHA2Zlt}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/common/commit-history-tree/commit-history-tree.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { GitCommit, AlertCircle, GitBranch, Copy, Check, Loader2 } from 'lucide-react';
|
|
5
|
+
/* ---------------------------------------------------------------------------
|
|
6
|
+
* Helpers
|
|
7
|
+
* ------------------------------------------------------------------------- */
|
|
8
|
+
function formatRelativeDate(iso) {
|
|
9
|
+
if (!iso)
|
|
10
|
+
return '';
|
|
11
|
+
const date = new Date(iso);
|
|
12
|
+
if (Number.isNaN(date.getTime()))
|
|
13
|
+
return '';
|
|
14
|
+
const diffMs = Date.now() - date.getTime();
|
|
15
|
+
const diffSeconds = Math.floor(diffMs / 1000);
|
|
16
|
+
if (diffSeconds < 60)
|
|
17
|
+
return 'just now';
|
|
18
|
+
const diffMinutes = Math.floor(diffSeconds / 60);
|
|
19
|
+
if (diffMinutes < 60)
|
|
20
|
+
return `${diffMinutes}m ago`;
|
|
21
|
+
const diffHours = Math.floor(diffMinutes / 60);
|
|
22
|
+
if (diffHours < 24)
|
|
23
|
+
return `${diffHours}h ago`;
|
|
24
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
25
|
+
if (diffDays < 30)
|
|
26
|
+
return `${diffDays}d ago`;
|
|
27
|
+
const diffMonths = Math.floor(diffDays / 30);
|
|
28
|
+
if (diffMonths < 12)
|
|
29
|
+
return `${diffMonths}mo ago`;
|
|
30
|
+
return `${Math.floor(diffMonths / 12)}y ago`;
|
|
31
|
+
}
|
|
32
|
+
/** Generate a deterministic color from a string (e.g. author email). */
|
|
33
|
+
function getAvatarColor(seed) {
|
|
34
|
+
let hash = 0;
|
|
35
|
+
for (let i = 0; i < seed.length; i++) {
|
|
36
|
+
hash = seed.charCodeAt(i) + ((hash << 5) - hash);
|
|
37
|
+
}
|
|
38
|
+
const hue = Math.abs(hash) % 360;
|
|
39
|
+
return `hsl(${hue}, 60%, 45%)`;
|
|
40
|
+
}
|
|
41
|
+
function getInitials(name) {
|
|
42
|
+
const parts = name.trim().split(/\s+/);
|
|
43
|
+
if (parts.length === 1)
|
|
44
|
+
return parts[0].slice(0, 2).toUpperCase();
|
|
45
|
+
return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
|
|
46
|
+
}
|
|
47
|
+
/** Parse refs into branch and tag labels, stripping remote prefixes. */
|
|
48
|
+
function parseRefs(refs) {
|
|
49
|
+
const branches = [];
|
|
50
|
+
const tags = [];
|
|
51
|
+
for (const ref of refs) {
|
|
52
|
+
if (ref.startsWith('tag: ')) {
|
|
53
|
+
tags.push(ref.slice(5));
|
|
54
|
+
}
|
|
55
|
+
else if (ref.startsWith('HEAD -> ')) {
|
|
56
|
+
branches.push(ref.slice(8));
|
|
57
|
+
}
|
|
58
|
+
else if (!ref.startsWith('origin/') && !ref.startsWith('upstream/')) {
|
|
59
|
+
branches.push(ref);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { branches, tags };
|
|
63
|
+
}
|
|
64
|
+
/* ---------------------------------------------------------------------------
|
|
65
|
+
* Sub-components
|
|
66
|
+
* ------------------------------------------------------------------------- */
|
|
67
|
+
function AuthorAvatar({ name, email }) {
|
|
68
|
+
const initials = getInitials(name || email || '?');
|
|
69
|
+
const color = getAvatarColor(email || name);
|
|
70
|
+
return (_jsx("span", { title: name || email, style: { backgroundColor: color }, className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-[9px] font-semibold text-white", children: initials }));
|
|
71
|
+
}
|
|
72
|
+
function RefBadge({ label, variant }) {
|
|
73
|
+
const classes = variant === 'head'
|
|
74
|
+
? 'bg-violet-100 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300'
|
|
75
|
+
: variant === 'branch'
|
|
76
|
+
? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300'
|
|
77
|
+
: 'bg-amber-100 text-amber-700 dark:bg-amber-950/50 dark:text-amber-300';
|
|
78
|
+
return (_jsxs("span", { className: `inline-flex items-center gap-0.5 rounded px-1 py-0.5 text-[10px] font-medium ${classes}`, children: [variant !== 'tag' && _jsx(GitBranch, { className: "h-2.5 w-2.5" }), label] }));
|
|
79
|
+
}
|
|
80
|
+
function CopyHashButton({ hash }) {
|
|
81
|
+
const [copied, setCopied] = useState(false);
|
|
82
|
+
const handleCopy = useCallback(() => {
|
|
83
|
+
navigator.clipboard.writeText(hash).then(() => {
|
|
84
|
+
setCopied(true);
|
|
85
|
+
setTimeout(() => setCopied(false), 1500);
|
|
86
|
+
});
|
|
87
|
+
}, [hash]);
|
|
88
|
+
return (_jsx("button", { type: "button", onClick: handleCopy, title: "Copy full commit hash", className: "text-muted-foreground/40 hover:text-muted-foreground ml-0.5 opacity-0 transition-opacity group-hover/commit:opacity-100", children: copied ? _jsx(Check, { className: "h-3 w-3 text-emerald-500" }) : _jsx(Copy, { className: "h-3 w-3" }) }));
|
|
89
|
+
}
|
|
90
|
+
function BranchSelector({ currentBranch, defaultBranch, activeBranch, onBranchChange, }) {
|
|
91
|
+
const branches = Array.from(new Set([currentBranch, defaultBranch].filter(Boolean)));
|
|
92
|
+
if (branches.length <= 1)
|
|
93
|
+
return null;
|
|
94
|
+
return (_jsx("div", { className: "flex items-center gap-1 px-4 py-2", children: branches.map((branch) => (_jsxs("button", { type: "button", onClick: () => onBranchChange(branch), className: `flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium transition-colors ${activeBranch === branch
|
|
95
|
+
? 'bg-primary/10 text-primary'
|
|
96
|
+
: 'text-muted-foreground hover:text-foreground hover:bg-muted/50'}`, children: [_jsx(GitBranch, { className: "h-3 w-3" }), branch, branch === currentBranch && branch === activeBranch && (_jsx("span", { className: "bg-primary/20 text-primary rounded px-1 text-[9px]", children: "current" })), branch === defaultBranch && (_jsx("span", { className: "bg-muted text-muted-foreground rounded px-1 text-[9px]", children: "default" }))] }, branch))) }));
|
|
97
|
+
}
|
|
98
|
+
function CommitRow({ commit, isLast }) {
|
|
99
|
+
const { branches, tags } = parseRefs(commit.refs);
|
|
100
|
+
const headRef = commit.refs.find((r) => r.startsWith('HEAD -> '));
|
|
101
|
+
const headBranch = headRef ? headRef.slice(8) : null;
|
|
102
|
+
return (_jsxs("div", { className: "group/commit relative flex gap-3 px-4 py-2", children: [_jsxs("div", { className: "relative flex flex-col items-center", children: [_jsx("div", { className: "bg-primary relative z-10 mt-1.5 h-3 w-3 shrink-0 rounded-full border-2 border-white shadow-sm dark:border-gray-900" }), !isLast && (_jsx("div", { className: "bg-border/60 mt-0.5 w-px flex-1", style: { minHeight: '16px' } }))] }), _jsxs("div", { className: "min-w-0 flex-1 pb-1", children: [headBranch || branches.length > 0 || tags.length > 0 ? (_jsxs("div", { className: "mb-1 flex flex-wrap gap-1", children: [headBranch ? _jsx(RefBadge, { label: headBranch, variant: "head" }) : null, branches
|
|
103
|
+
.filter((b) => b !== headBranch)
|
|
104
|
+
.map((b) => (_jsx(RefBadge, { label: b, variant: "branch" }, b))), tags.map((t) => (_jsx(RefBadge, { label: t, variant: "tag" }, t)))] })) : null, _jsx("p", { className: "text-foreground/90 truncate text-sm leading-snug", title: commit.subject, children: commit.subject }), _jsxs("div", { className: "mt-1 flex items-center gap-2", children: [_jsx(AuthorAvatar, { name: commit.authorName, email: commit.authorEmail }), _jsx("span", { className: "text-muted-foreground min-w-0 truncate text-xs", children: commit.authorName || commit.authorEmail }), _jsx("span", { className: "text-muted-foreground/60 shrink-0 font-mono text-xs", children: commit.shortHash }), _jsx(CopyHashButton, { hash: commit.hash }), _jsx("span", { className: "text-muted-foreground/50 ml-auto shrink-0 text-xs tabular-nums", children: formatRelativeDate(commit.date) })] })] })] }));
|
|
105
|
+
}
|
|
106
|
+
/* ---------------------------------------------------------------------------
|
|
107
|
+
* Main component
|
|
108
|
+
* ------------------------------------------------------------------------- */
|
|
109
|
+
export function CommitHistoryTree({ commits, loading, error, currentBranch, defaultBranch, activeBranch, onBranchChange, }) {
|
|
110
|
+
if (loading) {
|
|
111
|
+
return (_jsx("div", { className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
|
|
112
|
+
}
|
|
113
|
+
if (error) {
|
|
114
|
+
return (_jsxs("div", { className: "flex items-center gap-2 p-4 text-sm text-red-600", children: [_jsx(AlertCircle, { className: "h-4 w-4 shrink-0" }), _jsx("span", { children: error })] }));
|
|
115
|
+
}
|
|
116
|
+
if (!commits || commits.length === 0) {
|
|
117
|
+
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(GitCommit, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No commits found" })] }));
|
|
118
|
+
}
|
|
119
|
+
return (_jsxs("div", { className: "flex flex-col", children: [_jsx(BranchSelector, { currentBranch: currentBranch, defaultBranch: defaultBranch, activeBranch: activeBranch, onBranchChange: onBranchChange }), _jsx("div", { className: "flex flex-col", children: commits.map((commit, index) => (_jsx(CommitRow, { commit: commit, isLast: index === commits.length - 1 }, commit.hash))) })] }));
|
|
120
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { CommitHistoryTree } from './commit-history-tree.js';
|
|
3
|
+
declare const meta: Meta<typeof CommitHistoryTree>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof CommitHistoryTree>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const OnDefaultBranch: Story;
|
|
8
|
+
export declare const Loading: Story;
|
|
9
|
+
export declare const Error: Story;
|
|
10
|
+
export declare const Empty: Story;
|
|
11
|
+
export declare const LongSubjects: Story;
|
|
12
|
+
//# sourceMappingURL=commit-history-tree.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-history-tree.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/commit-history-tree/commit-history-tree.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CAcxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAsFhD,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAI7B,CAAC;AAKF,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAUnB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAUnB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KA4B1B,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { CommitHistoryTree } from './commit-history-tree.js';
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Common/CommitHistoryTree',
|
|
6
|
+
component: CommitHistoryTree,
|
|
7
|
+
tags: ['autodocs'],
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'padded',
|
|
10
|
+
},
|
|
11
|
+
decorators: [
|
|
12
|
+
(Story) => (_jsx("div", { className: "border-border bg-background w-[380px] overflow-y-auto rounded-lg border", children: _jsx(Story, {}) })),
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
export default meta;
|
|
16
|
+
const now = new Date();
|
|
17
|
+
const daysAgo = (n) => new Date(now.getTime() - n * 86400000).toISOString();
|
|
18
|
+
const sampleCommits = [
|
|
19
|
+
{
|
|
20
|
+
hash: 'a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2',
|
|
21
|
+
shortHash: 'a1b2c3d',
|
|
22
|
+
subject: 'feat(web): add commit history tree component',
|
|
23
|
+
authorName: 'Alex Dev',
|
|
24
|
+
authorEmail: 'alex@example.com',
|
|
25
|
+
date: daysAgo(0),
|
|
26
|
+
refs: ['HEAD -> feat/commit-history-tree'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
hash: 'b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6b2c3d4',
|
|
30
|
+
shortHash: 'b2c3d4e',
|
|
31
|
+
subject: 'fix(web): resolve chat concurrency issue in polling',
|
|
32
|
+
authorName: 'Alex Dev',
|
|
33
|
+
authorEmail: 'alex@example.com',
|
|
34
|
+
date: daysAgo(1),
|
|
35
|
+
refs: [],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
hash: 'c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6c3d4e5f6',
|
|
39
|
+
shortHash: 'c3d4e5f',
|
|
40
|
+
subject: 'chore(release): 1.152.0 [skip ci]',
|
|
41
|
+
authorName: 'Release Bot',
|
|
42
|
+
authorEmail: 'bot@example.com',
|
|
43
|
+
date: daysAgo(2),
|
|
44
|
+
refs: ['origin/main', 'main', 'v1.152.0'],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
hash: 'd4e5f6a1b2c3d4e5f6a1b2c3d4e5f6d4e5f6a1b2',
|
|
48
|
+
shortHash: 'd4e5f6a',
|
|
49
|
+
subject: 'feat(agents): interactive feature agent with claude agent sdk',
|
|
50
|
+
authorName: 'Sam Engineer',
|
|
51
|
+
authorEmail: 'sam@example.com',
|
|
52
|
+
date: daysAgo(3),
|
|
53
|
+
refs: [],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
hash: 'e5f6a1b2c3d4e5f6a1b2c3d4e5f6e5f6a1b2c3d4',
|
|
57
|
+
shortHash: 'e5f6a1b',
|
|
58
|
+
subject: 'fix(agents): deduplicate evidence across retry attempts',
|
|
59
|
+
authorName: 'Sam Engineer',
|
|
60
|
+
authorEmail: 'sam@example.com',
|
|
61
|
+
date: daysAgo(4),
|
|
62
|
+
refs: [],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
hash: 'f6a1b2c3d4e5f6a1b2c3d4e5f6f6a1b2c3d4e5f6',
|
|
66
|
+
shortHash: 'f6a1b2c',
|
|
67
|
+
subject: 'refactor(web): reorganize sidebar layout with improved component structure',
|
|
68
|
+
authorName: 'Alex Dev',
|
|
69
|
+
authorEmail: 'alex@example.com',
|
|
70
|
+
date: daysAgo(5),
|
|
71
|
+
refs: [],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
function InteractiveTemplate({ commits, currentBranch, defaultBranch, }) {
|
|
75
|
+
const [activeBranch, setActiveBranch] = useState(currentBranch);
|
|
76
|
+
return (_jsx(CommitHistoryTree, { commits: commits, loading: false, error: null, currentBranch: currentBranch, defaultBranch: defaultBranch, activeBranch: activeBranch, onBranchChange: setActiveBranch }));
|
|
77
|
+
}
|
|
78
|
+
export const Default = {
|
|
79
|
+
render: () => (_jsx(InteractiveTemplate, { commits: sampleCommits, currentBranch: "feat/commit-history-tree", defaultBranch: "main" })),
|
|
80
|
+
};
|
|
81
|
+
export const OnDefaultBranch = {
|
|
82
|
+
render: () => (_jsx(InteractiveTemplate, { commits: sampleCommits, currentBranch: "main", defaultBranch: "main" })),
|
|
83
|
+
};
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
85
|
+
const noop = (_branch) => { };
|
|
86
|
+
export const Loading = {
|
|
87
|
+
args: {
|
|
88
|
+
commits: null,
|
|
89
|
+
loading: true,
|
|
90
|
+
error: null,
|
|
91
|
+
currentBranch: 'main',
|
|
92
|
+
defaultBranch: 'main',
|
|
93
|
+
activeBranch: 'main',
|
|
94
|
+
onBranchChange: noop,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
export const Error = {
|
|
98
|
+
args: {
|
|
99
|
+
commits: null,
|
|
100
|
+
loading: false,
|
|
101
|
+
error: 'Unable to determine default branch for repository. No remote HEAD configured.',
|
|
102
|
+
currentBranch: 'main',
|
|
103
|
+
defaultBranch: 'main',
|
|
104
|
+
activeBranch: 'main',
|
|
105
|
+
onBranchChange: noop,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
export const Empty = {
|
|
109
|
+
args: {
|
|
110
|
+
commits: [],
|
|
111
|
+
loading: false,
|
|
112
|
+
error: null,
|
|
113
|
+
currentBranch: 'main',
|
|
114
|
+
defaultBranch: 'main',
|
|
115
|
+
activeBranch: 'main',
|
|
116
|
+
onBranchChange: noop,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
export const LongSubjects = {
|
|
120
|
+
render: () => (_jsx(InteractiveTemplate, { commits: [
|
|
121
|
+
{
|
|
122
|
+
hash: 'a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2',
|
|
123
|
+
shortHash: 'a1b2c3d',
|
|
124
|
+
subject: 'feat(web): implement comprehensive commit history tree with branch selector, author avatars, ref badges, and copy hash functionality',
|
|
125
|
+
authorName: 'Very Long Author Name Indeed',
|
|
126
|
+
authorEmail: 'verylongname@example.com',
|
|
127
|
+
date: daysAgo(0),
|
|
128
|
+
refs: ['HEAD -> feat/very-long-branch-name-for-testing'],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
hash: 'b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6b2c3d4',
|
|
132
|
+
shortHash: 'b2c3d4e',
|
|
133
|
+
subject: 'fix: short fix',
|
|
134
|
+
authorName: 'Al',
|
|
135
|
+
authorEmail: 'al@x.com',
|
|
136
|
+
date: daysAgo(7),
|
|
137
|
+
refs: ['origin/main', 'main', 'tag: v1.0.0'],
|
|
138
|
+
},
|
|
139
|
+
], currentBranch: "feat/very-long-branch-name-for-testing", defaultBranch: "main" })),
|
|
140
|
+
};
|
package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RepositoryCommitsData } from '../../../app/actions/get-repository-commits.js';
|
|
2
|
+
export interface UseCommitHistoryOptions {
|
|
3
|
+
repositoryPath: string | undefined;
|
|
4
|
+
branch?: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
/** Only fetch when enabled (e.g. when the tab is active) */
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface UseCommitHistoryState {
|
|
10
|
+
data: RepositoryCommitsData | null;
|
|
11
|
+
loading: boolean;
|
|
12
|
+
error: string | null;
|
|
13
|
+
refresh: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function useCommitHistory({ repositoryPath, branch, limit, enabled, }: UseCommitHistoryOptions): UseCommitHistoryState;
|
|
16
|
+
//# sourceMappingURL=use-commit-history.d.ts.map
|
package/dist/src/presentation/web/components/common/commit-history-tree/use-commit-history.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-commit-history.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/commit-history-tree/use-commit-history.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAElF,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,cAAc,EACd,MAAM,EACN,KAAU,EACV,OAAc,GACf,EAAE,uBAAuB,GAAG,qBAAqB,CA4BjD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { getRepositoryCommits } from '../../../app/actions/get-repository-commits.js';
|
|
4
|
+
export function useCommitHistory({ repositoryPath, branch, limit = 50, enabled = true, }) {
|
|
5
|
+
const [data, setData] = useState(null);
|
|
6
|
+
const [loading, setLoading] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const fetch = useCallback(async () => {
|
|
9
|
+
if (!repositoryPath || !enabled)
|
|
10
|
+
return;
|
|
11
|
+
setLoading(true);
|
|
12
|
+
setError(null);
|
|
13
|
+
try {
|
|
14
|
+
const result = await getRepositoryCommits(repositoryPath, branch, limit);
|
|
15
|
+
if (result.success && result.data) {
|
|
16
|
+
setData(result.data);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
setError(result.error ?? 'Failed to load commit history');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
setError(err instanceof Error ? err.message : 'Failed to load commit history');
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}
|
|
28
|
+
}, [repositoryPath, branch, limit, enabled]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
void fetch();
|
|
31
|
+
}, [fetch]);
|
|
32
|
+
return { data, loading, error, refresh: fetch };
|
|
33
|
+
}
|
|
@@ -2,7 +2,7 @@ import type { RepositoryNodeData } from '../../common/repository-node/index.js';
|
|
|
2
2
|
export interface RepositoryDrawerClientProps {
|
|
3
3
|
data: RepositoryNodeData;
|
|
4
4
|
/** Initial tab key from URL (e.g. 'chat'). */
|
|
5
|
-
initialTab?: 'overview' | 'chat';
|
|
5
|
+
initialTab?: 'overview' | 'chat' | 'commits';
|
|
6
6
|
}
|
|
7
7
|
export declare function RepositoryDrawerClient({ data, initialTab }: RepositoryDrawerClientProps): import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
//# sourceMappingURL=repository-drawer-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"repository-drawer-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAK9E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,2CA2MvF"}
|
|
@@ -13,12 +13,15 @@ import { useRepositoryActions } from '../../common/repository-node/use-repositor
|
|
|
13
13
|
import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
14
14
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
15
15
|
import { ChatTab } from '../../features/chat/ChatTab.js';
|
|
16
|
+
import { CommitHistoryTree } from '../../common/commit-history-tree/commit-history-tree.js';
|
|
17
|
+
import { useCommitHistory } from '../../common/commit-history-tree/use-commit-history.js';
|
|
16
18
|
export function RepositoryDrawerClient({ data, initialTab }) {
|
|
17
19
|
const featureFlags = useFeatureFlags();
|
|
18
20
|
const router = useRouter();
|
|
19
21
|
const pathname = usePathname();
|
|
20
22
|
const isOpen = pathname.startsWith('/repository/');
|
|
21
23
|
const [activeTab, setActiveTab] = useState(initialTab ?? 'overview');
|
|
24
|
+
const [commitBranch, setCommitBranch] = useState(undefined);
|
|
22
25
|
const repoActions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
|
|
23
26
|
const onClose = useCallback(() => {
|
|
24
27
|
router.push('/');
|
|
@@ -33,5 +36,12 @@ export function RepositoryDrawerClient({ data, initialTab }) {
|
|
|
33
36
|
const isDeployActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';
|
|
34
37
|
// Session ID for repo chat — deterministic per repo
|
|
35
38
|
const repoSessionId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
|
|
36
|
-
|
|
39
|
+
const commitHistory = useCommitHistory({
|
|
40
|
+
repositoryPath: data.repositoryPath,
|
|
41
|
+
branch: commitBranch,
|
|
42
|
+
enabled: activeTab === 'commits' && !!data.repositoryPath,
|
|
43
|
+
});
|
|
44
|
+
return (_jsx(BaseDrawer, { open: isOpen, onClose: onClose, size: "lg", modal: false, "data-testid": "repository-drawer", children: _jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "flex min-h-0 flex-1 flex-col", children: [_jsxs("div", { className: "shrink-0 px-4 pt-4 pb-3", "data-testid": "repository-drawer-header", children: [_jsxs("div", { className: "flex items-baseline gap-4 pr-6", children: [_jsx("h2", { className: "text-foreground min-w-0 shrink truncate text-base font-semibold tracking-tight", children: data.name }), _jsxs(TabsList, { className: "h-auto shrink-0 gap-0.5 rounded-none border-0 bg-transparent p-0", children: [_jsx(TabsTrigger, { value: "overview", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Overview" }), _jsx(TabsTrigger, { value: "chat", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Chat" }), data.repositoryPath ? (_jsx(TabsTrigger, { value: "commits", className: "text-muted-foreground hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-primary h-auto rounded-none border-b-2 border-transparent bg-transparent px-2 py-0.5 text-[12px] font-medium shadow-none transition-colors data-[state=active]:bg-transparent data-[state=active]:shadow-none", children: "Commits" })) : null] })] }), _jsxs("div", { className: "mt-1 flex items-center gap-2", children: [data.repositoryPath ? (_jsx("p", { className: "text-muted-foreground min-w-0 truncate font-mono text-xs", children: data.repositoryPath })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-2", children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeployActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeployActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeployActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) }), isDeployActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url, targetId: data.repositoryPath })) : null] })) : null] })] }), _jsx(Separator, {}), _jsx(TabsContent, { value: "overview", className: "mt-0 flex-1 overflow-y-auto", children: data.repositoryPath ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "OPEN WITH" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Open in IDE", onClick: repoActions.openInIde, loading: repoActions.ideLoading, error: !!repoActions.ideError, icon: Code2, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open in Shell", onClick: repoActions.openInShell, loading: repoActions.shellLoading, error: !!repoActions.shellError, icon: Terminal, variant: "outline", size: "sm" }), _jsx(ActionButton, { label: "Open Folder", onClick: repoActions.openFolder, loading: repoActions.folderLoading, error: !!repoActions.folderError, icon: FolderOpen, variant: "outline", size: "sm" })] })] }), data.id && featureFlags.gitRebaseSync ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "GIT OPERATIONS" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(ActionButton, { label: "Sync Main", onClick: repoActions.syncMain, loading: repoActions.syncLoading, error: !!repoActions.syncError, icon: RefreshCw, variant: "outline", size: "sm" }), repoActions.syncError ? (_jsx("p", { className: "text-destructive text-xs", children: repoActions.syncError })) : null] })] })] })) : null] })) : null }), _jsx(TabsContent, { value: "chat", className: "mt-0 flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(ChatTab, { featureId: repoSessionId, worktreePath: data.repositoryPath }) }), _jsx(TabsContent, { value: "commits", className: "mt-0 flex-1 overflow-y-auto", children: _jsx(CommitHistoryTree, { commits: commitHistory.data?.commits ?? null, loading: commitHistory.loading, error: commitHistory.error, currentBranch: commitHistory.data?.currentBranch ?? '', defaultBranch: commitHistory.data?.defaultBranch ?? '', activeBranch: commitBranch ?? commitHistory.data?.currentBranch ?? '', onBranchChange: (branch) => {
|
|
45
|
+
setCommitBranch(branch);
|
|
46
|
+
} }) })] }) }));
|
|
37
47
|
}
|
|
@@ -16,8 +16,14 @@ export interface FloatingActionButtonAction {
|
|
|
16
16
|
export interface FloatingActionButtonProps {
|
|
17
17
|
/** Action items shown when the FAB is expanded. */
|
|
18
18
|
actions: FloatingActionButtonAction[];
|
|
19
|
-
/** Additional CSS classes for the
|
|
19
|
+
/** Additional CSS classes for the wrapper. */
|
|
20
20
|
className?: string;
|
|
21
|
+
/** Inline styles for the wrapper (e.g. dynamic positioning). */
|
|
22
|
+
style?: React.CSSProperties;
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* (+) FAB with expandable action menu.
|
|
26
|
+
* Renders inline — parent controls positioning.
|
|
27
|
+
*/
|
|
28
|
+
export declare function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
23
29
|
//# sourceMappingURL=floating-action-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,
|
|
1
|
+
{"version":3,"file":"floating-action-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAQD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAyG5F"}
|
package/dist/src/presentation/web/components/common/floating-action-button/floating-action-button.js
CHANGED
|
@@ -8,7 +8,11 @@ import { Button } from '../../ui/button.js';
|
|
|
8
8
|
const STAGGER_MS = 50;
|
|
9
9
|
/** Total animation duration in ms. */
|
|
10
10
|
const DURATION_MS = 250;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* (+) FAB with expandable action menu.
|
|
13
|
+
* Renders inline — parent controls positioning.
|
|
14
|
+
*/
|
|
15
|
+
export function FloatingActionButton({ actions, className, style }) {
|
|
12
16
|
const [open, setOpen] = useState(false);
|
|
13
17
|
// Close on Escape key
|
|
14
18
|
useEffect(() => {
|
|
@@ -22,14 +26,13 @@ export function FloatingActionButton({ actions, className }) {
|
|
|
22
26
|
document.addEventListener('keydown', handleKeyDown);
|
|
23
27
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
24
28
|
}, [open]);
|
|
25
|
-
return (_jsxs(_Fragment, { children: [open ? (_jsx("div", { "data-testid": "fab-overlay", className: "fixed inset-0 z-40", onClick: () => setOpen(false), "aria-hidden": "true" })) : null, _jsxs("div", { "data-testid": "floating-action-button", className: cn('
|
|
29
|
+
return (_jsxs(_Fragment, { children: [open ? (_jsx("div", { "data-testid": "fab-overlay", className: "fixed inset-0 z-40", onClick: () => setOpen(false), "aria-hidden": "true" })) : null, _jsxs("div", { "data-testid": "floating-action-button", className: cn('relative z-50', className), style: style, children: [_jsx("div", { className: cn('absolute bottom-[calc(100%+24px)] left-0 flex flex-col items-start gap-2', !open && 'pointer-events-none'), "data-testid": "fab-actions", children: actions.map((action, i) => {
|
|
26
30
|
const openDelay = (actions.length - 1 - i) * STAGGER_MS;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
transition: `opacity ${open ? DURATION_MS : 150}ms ease-out ${open ? openDelay : closeDelay}ms`,
|
|
31
|
+
return (_jsxs("button", { "data-testid": `fab-action-${action.id}`, "aria-label": action.label, disabled: action.disabled ?? action.loading, className: cn('flex h-10 items-center gap-2.5 rounded-full px-4', 'bg-background text-foreground shadow-md', 'border-border border', 'hover:bg-accent hover:text-accent-foreground', 'disabled:pointer-events-none disabled:opacity-50', 'text-sm font-medium whitespace-nowrap', open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'), style: {
|
|
32
|
+
transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,
|
|
30
33
|
}, onClick: () => {
|
|
31
34
|
action.onClick();
|
|
32
35
|
setOpen(false);
|
|
33
|
-
}, children: [_jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: action.loading ? _jsx(Loader2, { className: "h-
|
|
34
|
-
}) }),
|
|
36
|
+
}, children: [_jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center", children: action.loading ? _jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : action.icon }), _jsx("span", { children: action.label })] }, action.id));
|
|
37
|
+
}) }), _jsxs(Button, { size: "icon", "data-testid": "fab-trigger", "aria-label": open ? 'Close actions' : 'Create new', className: cn('relative h-14 w-14 rounded-full shadow-lg', 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400', 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'), onClick: () => setOpen((prev) => !prev), children: [_jsx(Plus, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all', open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'), style: { transitionDuration: `${DURATION_MS}ms` } }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all', open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'), style: { transitionDuration: `${DURATION_MS}ms` } })] })] })] }));
|
|
35
38
|
}
|
package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CAgcA"}
|
|
@@ -13,15 +13,14 @@ import { useDeployAction } from '../../../hooks/use-deploy-action.js';
|
|
|
13
13
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
14
14
|
import { useRepositoryActions } from './use-repository-actions.js';
|
|
15
15
|
import { ChatDotIndicator } from '../../features/chat/ChatDotIndicator.js';
|
|
16
|
-
import {
|
|
16
|
+
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
17
17
|
import { FeatureSessionsDropdown, } from '../../common/feature-node/feature-sessions-dropdown.js';
|
|
18
18
|
export function RepositoryNode({ data, selected, }) {
|
|
19
19
|
const router = useRouter();
|
|
20
20
|
const featureFlags = useFeatureFlags();
|
|
21
21
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
22
22
|
const repoScopeId = data.id ? `repo-${data.id}` : `repo-${data.name}`;
|
|
23
|
-
const
|
|
24
|
-
const chatTurnStatus = turnStatuses[repoScopeId] ?? 'idle';
|
|
23
|
+
const chatTurnStatus = useTurnStatus(repoScopeId);
|
|
25
24
|
const actions = useRepositoryActions(data.repositoryPath ? { repositoryId: data.id, repositoryPath: data.repositoryPath } : null);
|
|
26
25
|
const deployAction = useDeployAction(data.repositoryPath
|
|
27
26
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AAwDA,wBAAgB,eAAe,4CA+X9B"}
|