@shepai/cli 1.168.0 → 1.169.0-pr523.2f53944
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/apis/json-schema/FeatureFlags.yaml +5 -0
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +1 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +4 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/legacy-migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/legacy-migrations.js +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/050-add-feature-flag-inventory.d.ts +11 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/050-add-feature-flag-inventory.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/050-add-feature-flag-inventory.js +17 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts +3 -3
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +3 -3
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +12 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +1 -1
- package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts +7 -0
- package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts.map +1 -0
- package/dist/src/presentation/web/app/features/feature-tree-page-client.js +13 -0
- package/dist/src/presentation/web/app/features/get-feature-tree-data.d.ts +10 -0
- package/dist/src/presentation/web/app/features/get-feature-tree-data.d.ts.map +1 -0
- package/dist/src/presentation/web/app/features/get-feature-tree-data.js +47 -0
- package/dist/src/presentation/web/app/features/page.d.ts +4 -0
- package/dist/src/presentation/web/app/features/page.d.ts.map +1 -0
- package/dist/src/presentation/web/app/features/page.js +9 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +1 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts +36 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.js +196 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.stories.js +166 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts +3 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/index.js +1 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +3 -0
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +3 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +5 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +1 -0
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +1 -0
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +1 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +1 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -0
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +5 -0
- package/dist/translations/ar/web.json +3 -0
- package/dist/translations/de/web.json +3 -0
- package/dist/translations/en/web.json +3 -0
- package/dist/translations/es/web.json +3 -0
- package/dist/translations/fr/web.json +3 -0
- package/dist/translations/he/web.json +3 -0
- package/dist/translations/pt/web.json +3 -0
- package/dist/translations/ru/web.json +3 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -0
- package/web/.next/build-manifest.json +6 -6
- 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/routes-manifest.json +6 -0
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -38
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +2 -2
- 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/page/build-manifest.json +4 -4
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error/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/build-manifest.json +4 -4
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js +1 -1
- 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/features/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/features/page/build-manifest.json +18 -0
- package/web/.next/server/app/features/page/next-font-manifest.json +6 -0
- package/web/.next/server/app/features/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/features/page/server-reference-manifest.json +95 -0
- package/web/.next/server/app/features/page.js +18 -0
- package/web/.next/server/app/features/page.js.map +5 -0
- package/web/.next/server/app/features/page.js.nft.json +1 -0
- package/web/.next/server/app/features/page_client-reference-manifest.js +2 -0
- package/web/.next/server/app/settings/page/build-manifest.json +4 -4
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/settings/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +2 -2
- 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/build-manifest.json +4 -4
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js +1 -1
- 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/app-paths-manifest.json +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.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/[root-of-the-server]__08c912ab._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08c912ab._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b062b383._.js → [root-of-the-server]__0c5452c3._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0c5452c3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__20a36a42._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__dffa13c5._.js → [root-of-the-server]__69dd3217._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__dffa13c5._.js.map → [root-of-the-server]__69dd3217._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1abe77bb._.js → [root-of-the-server]__7ffd3598._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7ffd3598._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__248ee887._.js → [root-of-the-server]__851f6adb._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__851f6adb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__7562afc6._.js → [root-of-the-server]__b020c17d._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d1040bd1._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5614810._.js.map → [root-of-the-server]__d1040bd1._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b0aac03._.js → [root-of-the-server]__e88da4ee._.js} +3 -3
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b0aac03._.js.map → [root-of-the-server]__e88da4ee._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__efeeaed4._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d5e22d1a._.js.map → [root-of-the-server]__efeeaed4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js +1 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +1 -1
- package/web/.next/server/chunks/ssr/_02e01240._.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/_0727935d._.js +1 -1
- package/web/.next/server/chunks/ssr/_0727935d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.js +1 -1
- package/web/.next/server/chunks/ssr/_0dc06d07._.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/_18886033._.js +1 -1
- package/web/.next/server/chunks/ssr/_18886033._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +1 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_4a4709c5._.js +4 -0
- package/web/.next/server/chunks/ssr/_4a4709c5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js +1 -1
- package/web/.next/server/chunks/ssr/_4cbb7f95._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5119a3df._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_560f2971._.js +3 -0
- package/web/.next/server/chunks/ssr/_560f2971._.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/_6892e3b9._.js +3 -0
- package/web/.next/server/chunks/ssr/_6892e3b9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_7b3ec8ac._.js → _6e9b9005._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_7b3ec8ac._.js.map → _6e9b9005._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_a1068852._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +1 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_9a9ec6e6._.js → _a8b3bc2c._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_9a9ec6e6._.js.map → _a8b3bc2c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js +1 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +1 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +2 -2
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +2 -2
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f535d854._.js +3 -0
- package/web/.next/server/chunks/ssr/_f535d854._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f8b45233._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_573d0b23._.js → _faecc602._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_573d0b23._.js.map → _faecc602._.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 +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.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_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +10 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js.map +1 -0
- 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/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +4 -4
- 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 +90 -48
- package/web/.next/static/chunks/{72b7a7374227b47e.js → 0ccb9c0b9b1b041f.js} +2 -2
- package/web/.next/static/chunks/20f7cc98a013b11c.js +1 -0
- package/web/.next/static/chunks/{0d5dda068da311fc.js → 21acf592ead7608f.js} +2 -2
- package/web/.next/static/chunks/2f711373a93c5bc3.css +1 -0
- package/web/.next/static/chunks/{4623ea78122c2d4d.js → 36cb1a6e3e35de17.js} +1 -1
- package/web/.next/static/chunks/3e393d6a78b2ade4.js +1 -0
- package/web/.next/static/chunks/4cec255f2754e5ec.js +1 -0
- package/web/.next/static/chunks/{0db171679d1838bf.js → 54ea8b84cb2cc0d1.js} +1 -1
- package/web/.next/static/chunks/5b7275374d2696b3.css +1 -0
- package/web/.next/static/chunks/5ed47e998707b519.js +8 -0
- package/web/.next/static/chunks/647140fe96a7c88a.js +1 -0
- package/web/.next/static/chunks/{1d82462f51924d3f.js → 65b62ac34ef4422a.js} +1 -1
- package/web/.next/static/chunks/{14c1725595d10639.js → 6c2beffb5a815c5a.js} +1 -1
- package/web/.next/static/chunks/6d6f70ff5151b8cb.js +7 -0
- package/web/.next/static/chunks/{35f8b762c261aa01.js → 76fc822ad8b3b7e2.js} +1 -1
- package/web/.next/static/chunks/982aef195c118996.js +1 -0
- package/web/.next/static/chunks/be1d829fb4281be0.js +1 -0
- package/web/.next/static/chunks/c3ef3b892f7794ec.js +1 -0
- package/web/.next/static/chunks/c5d2fa6c6353309a.js +1 -0
- package/web/.next/static/chunks/{daa74d46f5e8b397.js → d888abaf53aa7b66.js} +2 -2
- package/web/.next/static/chunks/dc134f3f58cdf850.js +5 -0
- package/web/.next/static/chunks/{d67238b43d323f1d.js → e29d3d0d18276e72.js} +1 -1
- package/web/.next/static/chunks/e6c45e81b87d2959.js +1 -0
- package/web/.next/static/chunks/{11cb8f996a5570ac.js → f7112ebae57c20f9.js} +1 -1
- package/web/.next/static/chunks/f998b42b5cddafd6.js +1 -0
- package/web/.next/static/chunks/{turbopack-8a46f5841d1dbe2e.js → turbopack-57bb0674e2cd1d31.js} +1 -1
- package/web/package.json +2 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1abe77bb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__248ee887._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7562afc6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b062b383._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d5e22d1a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f2acfd0e._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f2acfd0e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +0 -3
- package/web/.next/server/chunks/ssr/_0edaf547._.js +0 -3
- package/web/.next/server/chunks/ssr/_0edaf547._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b5fc318a._.js +0 -3
- package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
- package/web/.next/static/chunks/16eea21868510afd.js +0 -5
- package/web/.next/static/chunks/1fe75f9dd488d557.css +0 -1
- package/web/.next/static/chunks/2547ef4764d5a053.js +0 -7
- package/web/.next/static/chunks/672e3da3ad26005b.js +0 -1
- package/web/.next/static/chunks/84a181ff3270fd9f.js +0 -1
- package/web/.next/static/chunks/9531dfbcff94c28b.js +0 -1
- package/web/.next/static/chunks/c0e13e7d1601bc5d.js +0 -1
- package/web/.next/static/chunks/ed3a602003bcb31b.js +0 -1
- package/web/.next/static/chunks/ef1faff4c5100183.js +0 -1
- package/web/.next/static/chunks/f0825a7dc6f4fb83.js +0 -1
- package/web/.next/static/chunks/fa024fa35b1b47ff.js +0 -1
- /package/web/.next/static/{kmMMaSvcntYsYhsTwYqdC → kPxrKArrmlja9IjXEI6-W}/_buildManifest.js +0 -0
- /package/web/.next/static/{kmMMaSvcntYsYhsTwYqdC → kPxrKArrmlja9IjXEI6-W}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{kmMMaSvcntYsYhsTwYqdC → kPxrKArrmlja9IjXEI6-W}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useCallback } from 'react';
|
|
4
|
+
import { TabulatorFull as Tabulator } from 'tabulator-tables';
|
|
5
|
+
import { cn } from '../../../lib/utils.js';
|
|
6
|
+
import './feature-tree-table.css';
|
|
7
|
+
const STATUS_LABELS = {
|
|
8
|
+
'action-needed': 'Action Needed',
|
|
9
|
+
'in-progress': 'In Progress',
|
|
10
|
+
pending: 'Pending',
|
|
11
|
+
blocked: 'Blocked',
|
|
12
|
+
error: 'Error',
|
|
13
|
+
done: 'Done',
|
|
14
|
+
};
|
|
15
|
+
/** SVG repo icon — lucide FolderGit2 */
|
|
16
|
+
const REPO_ICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"/><circle cx="12" cy="13" r="2"/><path d="M14 13h3"/><path d="M7 13h3"/></svg>`;
|
|
17
|
+
function statusFormatter(cell) {
|
|
18
|
+
const row = cell.getRow().getData();
|
|
19
|
+
if (row._isRepoGroup)
|
|
20
|
+
return '';
|
|
21
|
+
const value = cell.getValue();
|
|
22
|
+
const label = STATUS_LABELS[value] ?? value;
|
|
23
|
+
return `<span class="status-pill status-pill--${value}"><span class="status-dot"></span>${label}</span>`;
|
|
24
|
+
}
|
|
25
|
+
function nameFormatter(cell) {
|
|
26
|
+
const row = cell.getRow().getData();
|
|
27
|
+
if (row._isRepoGroup) {
|
|
28
|
+
const count = row._featureCount ?? 0;
|
|
29
|
+
const countLabel = count === 0 ? 'No features' : count === 1 ? '1 Feature' : `${count} Features`;
|
|
30
|
+
const remoteLabel = row.remoteUrl
|
|
31
|
+
? `<span class="repo-remote-url">${escapeHtml(row.remoteUrl)}</span>`
|
|
32
|
+
: '';
|
|
33
|
+
return `<span class="repo-name-cell">${REPO_ICON_SVG}<span class="repo-name-text"><span class="repo-name-primary"><span class="repo-name-title">${escapeHtml(row.name)}</span><span class="repo-feature-count">${countLabel}</span></span>${remoteLabel}</span></span>`;
|
|
34
|
+
}
|
|
35
|
+
return escapeHtml(cell.getValue());
|
|
36
|
+
}
|
|
37
|
+
function escapeHtml(text) {
|
|
38
|
+
const div = typeof document !== 'undefined' ? document.createElement('div') : null;
|
|
39
|
+
if (div) {
|
|
40
|
+
div.textContent = text;
|
|
41
|
+
return div.innerHTML;
|
|
42
|
+
}
|
|
43
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
44
|
+
}
|
|
45
|
+
function buildColumns(onFeatureClick) {
|
|
46
|
+
return [
|
|
47
|
+
{
|
|
48
|
+
title: 'Name',
|
|
49
|
+
field: 'name',
|
|
50
|
+
widthGrow: 3,
|
|
51
|
+
formatter: nameFormatter,
|
|
52
|
+
...(onFeatureClick && {
|
|
53
|
+
cellClick: (_e, cell) => {
|
|
54
|
+
const data = cell.getRow().getData();
|
|
55
|
+
if (data._isRepoGroup)
|
|
56
|
+
return;
|
|
57
|
+
onFeatureClick(data.id);
|
|
58
|
+
},
|
|
59
|
+
cssClass: 'cursor-pointer',
|
|
60
|
+
}),
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
title: 'Status',
|
|
64
|
+
field: 'status',
|
|
65
|
+
widthGrow: 1.5,
|
|
66
|
+
formatter: statusFormatter,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
title: 'Lifecycle',
|
|
70
|
+
field: 'lifecycle',
|
|
71
|
+
widthGrow: 1.5,
|
|
72
|
+
formatter: (cell) => {
|
|
73
|
+
const row = cell.getRow().getData();
|
|
74
|
+
if (row._isRepoGroup)
|
|
75
|
+
return '';
|
|
76
|
+
return cell.getValue();
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
title: 'Branch',
|
|
81
|
+
field: 'branch',
|
|
82
|
+
widthGrow: 2,
|
|
83
|
+
formatter: (cell) => {
|
|
84
|
+
const row = cell.getRow().getData();
|
|
85
|
+
if (row._isRepoGroup)
|
|
86
|
+
return '';
|
|
87
|
+
const val = cell.getValue();
|
|
88
|
+
if (!val)
|
|
89
|
+
return '';
|
|
90
|
+
return `<code style="font-size:12px;color:var(--color-muted-foreground,#64748b);font-family:var(--font-mono)">${escapeHtml(val)}</code>`;
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Build tree-structured data grouped by repository.
|
|
97
|
+
* Each repository becomes a parent node with its features as children.
|
|
98
|
+
* Repos without features are included as empty groups.
|
|
99
|
+
*/
|
|
100
|
+
export function buildTreeData(flatData, repos) {
|
|
101
|
+
// Group features by repository
|
|
102
|
+
const byRepo = new Map();
|
|
103
|
+
for (const item of flatData) {
|
|
104
|
+
const repoName = item.repositoryName || 'Unknown';
|
|
105
|
+
if (!byRepo.has(repoName)) {
|
|
106
|
+
byRepo.set(repoName, []);
|
|
107
|
+
}
|
|
108
|
+
byRepo.get(repoName).push(item);
|
|
109
|
+
}
|
|
110
|
+
// Ensure all known repos are represented (even without features)
|
|
111
|
+
const repoMeta = new Map();
|
|
112
|
+
if (repos) {
|
|
113
|
+
for (const repo of repos) {
|
|
114
|
+
repoMeta.set(repo.name, { remoteUrl: repo.remoteUrl });
|
|
115
|
+
if (!byRepo.has(repo.name)) {
|
|
116
|
+
byRepo.set(repo.name, []);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const roots = [];
|
|
121
|
+
for (const [repoName, features] of byRepo) {
|
|
122
|
+
// Build parent-child relationships within this repo group
|
|
123
|
+
const lookup = new Map();
|
|
124
|
+
const repoChildren = [];
|
|
125
|
+
for (const item of features) {
|
|
126
|
+
lookup.set(item.id, { ...item, _children: [] });
|
|
127
|
+
}
|
|
128
|
+
for (const item of features) {
|
|
129
|
+
const node = lookup.get(item.id);
|
|
130
|
+
if (item.parentId && lookup.has(item.parentId)) {
|
|
131
|
+
lookup.get(item.parentId)._children.push(node);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
repoChildren.push(node);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Clean up empty _children arrays
|
|
138
|
+
for (const node of lookup.values()) {
|
|
139
|
+
if (node._children?.length === 0) {
|
|
140
|
+
delete node._children;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const remoteUrl = repoMeta.get(repoName)?.remoteUrl ?? features[0]?.remoteUrl;
|
|
144
|
+
const repoGroup = {
|
|
145
|
+
id: `repo-${repoName}`,
|
|
146
|
+
name: repoName,
|
|
147
|
+
status: 'pending',
|
|
148
|
+
lifecycle: '',
|
|
149
|
+
branch: '',
|
|
150
|
+
repositoryName: repoName,
|
|
151
|
+
remoteUrl,
|
|
152
|
+
_isRepoGroup: true,
|
|
153
|
+
_featureCount: features.length,
|
|
154
|
+
...(repoChildren.length > 0 ? { _children: repoChildren } : {}),
|
|
155
|
+
};
|
|
156
|
+
roots.push(repoGroup);
|
|
157
|
+
}
|
|
158
|
+
return roots;
|
|
159
|
+
}
|
|
160
|
+
export function FeatureTreeTable({ data, repos, className, onFeatureClick, }) {
|
|
161
|
+
const containerRef = useRef(null);
|
|
162
|
+
const tabulatorRef = useRef(null);
|
|
163
|
+
const onFeatureClickRef = useRef(onFeatureClick);
|
|
164
|
+
onFeatureClickRef.current = onFeatureClick;
|
|
165
|
+
const stableOnFeatureClick = useCallback((featureId) => {
|
|
166
|
+
onFeatureClickRef.current?.(featureId);
|
|
167
|
+
}, []);
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (!containerRef.current)
|
|
170
|
+
return;
|
|
171
|
+
const treeData = buildTreeData(data, repos);
|
|
172
|
+
const columns = buildColumns(stableOnFeatureClick);
|
|
173
|
+
const table = new Tabulator(containerRef.current, {
|
|
174
|
+
data: treeData,
|
|
175
|
+
columns,
|
|
176
|
+
dataTree: true,
|
|
177
|
+
dataTreeStartExpanded: true,
|
|
178
|
+
layout: 'fitColumns',
|
|
179
|
+
height: '100%',
|
|
180
|
+
placeholder: 'No repositories found',
|
|
181
|
+
headerSortClickElement: 'icon',
|
|
182
|
+
rowFormatter: (row) => {
|
|
183
|
+
const rowData = row.getData();
|
|
184
|
+
if (rowData._isRepoGroup) {
|
|
185
|
+
row.getElement().classList.add('tabulator-row-repo-group');
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
tabulatorRef.current = table;
|
|
190
|
+
return () => {
|
|
191
|
+
table.destroy();
|
|
192
|
+
tabulatorRef.current = null;
|
|
193
|
+
};
|
|
194
|
+
}, [data, repos, stableOnFeatureClick]);
|
|
195
|
+
return (_jsx("div", { "data-testid": "feature-tree-table", className: cn('h-full w-full', className), ref: containerRef }));
|
|
196
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { FeatureTreeTable } from './feature-tree-table.js';
|
|
3
|
+
declare const meta: Meta<typeof FeatureTreeTable>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof meta>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const SingleRepository: Story;
|
|
8
|
+
export declare const Empty: Story;
|
|
9
|
+
export declare const WithClickHandler: Story;
|
|
10
|
+
export declare const DeeplyNested: Story;
|
|
11
|
+
export declare const NoRemoteUrl: Story;
|
|
12
|
+
//# sourceMappingURL=feature-tree-table.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-tree-table.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/feature-tree-table/feature-tree-table.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAcvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA0EnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAI9B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAC;AA4CF,eAAO,MAAM,YAAY,EAAE,KAI1B,CAAC;AAaF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { FeatureTreeTable } from './feature-tree-table.js';
|
|
3
|
+
const meta = {
|
|
4
|
+
title: 'Features/FeatureTreeTable',
|
|
5
|
+
component: FeatureTreeTable,
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: 'padded',
|
|
8
|
+
},
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
decorators: [
|
|
11
|
+
(Story) => (_jsx("div", { style: { height: '500px', width: '100%' }, children: _jsx(Story, {}) })),
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
const singleRepoFeatures = [
|
|
16
|
+
{
|
|
17
|
+
id: 'feat-1',
|
|
18
|
+
name: 'Authentication System',
|
|
19
|
+
status: 'done',
|
|
20
|
+
lifecycle: 'Maintain',
|
|
21
|
+
branch: 'feat/auth-system',
|
|
22
|
+
repositoryName: 'my-app',
|
|
23
|
+
remoteUrl: 'https://github.com/acme/my-app',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'feat-2',
|
|
27
|
+
name: 'OAuth2 Provider',
|
|
28
|
+
status: 'in-progress',
|
|
29
|
+
lifecycle: 'Implementation',
|
|
30
|
+
branch: 'feat/oauth2-provider',
|
|
31
|
+
repositoryName: 'my-app',
|
|
32
|
+
remoteUrl: 'https://github.com/acme/my-app',
|
|
33
|
+
parentId: 'feat-1',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'feat-3',
|
|
37
|
+
name: 'JWT Token Refresh',
|
|
38
|
+
status: 'pending',
|
|
39
|
+
lifecycle: 'Planning',
|
|
40
|
+
branch: 'feat/jwt-refresh',
|
|
41
|
+
repositoryName: 'my-app',
|
|
42
|
+
remoteUrl: 'https://github.com/acme/my-app',
|
|
43
|
+
parentId: 'feat-1',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'feat-4',
|
|
47
|
+
name: 'Payment Integration',
|
|
48
|
+
status: 'action-needed',
|
|
49
|
+
lifecycle: 'Review',
|
|
50
|
+
branch: 'feat/payments',
|
|
51
|
+
repositoryName: 'my-app',
|
|
52
|
+
remoteUrl: 'https://github.com/acme/my-app',
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
const multiRepoFeatures = [
|
|
56
|
+
...singleRepoFeatures,
|
|
57
|
+
{
|
|
58
|
+
id: 'feat-5',
|
|
59
|
+
name: 'Dashboard Widgets',
|
|
60
|
+
status: 'blocked',
|
|
61
|
+
lifecycle: 'Blocked',
|
|
62
|
+
branch: 'feat/dashboard-widgets',
|
|
63
|
+
repositoryName: 'admin-portal',
|
|
64
|
+
remoteUrl: 'https://github.com/acme/admin-portal',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'feat-6',
|
|
68
|
+
name: 'Stripe Checkout',
|
|
69
|
+
status: 'error',
|
|
70
|
+
lifecycle: 'Implementation',
|
|
71
|
+
branch: 'feat/stripe-checkout',
|
|
72
|
+
repositoryName: 'admin-portal',
|
|
73
|
+
remoteUrl: 'https://github.com/acme/admin-portal',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'feat-7',
|
|
77
|
+
name: 'API Gateway',
|
|
78
|
+
status: 'in-progress',
|
|
79
|
+
lifecycle: 'Implementation',
|
|
80
|
+
branch: 'feat/api-gateway',
|
|
81
|
+
repositoryName: 'infrastructure',
|
|
82
|
+
remoteUrl: 'https://gitlab.com/acme/infrastructure',
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
export const Default = {
|
|
86
|
+
args: {
|
|
87
|
+
data: multiRepoFeatures,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
export const SingleRepository = {
|
|
91
|
+
args: {
|
|
92
|
+
data: singleRepoFeatures,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
export const Empty = {
|
|
96
|
+
args: {
|
|
97
|
+
data: [],
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
export const WithClickHandler = {
|
|
101
|
+
args: {
|
|
102
|
+
data: multiRepoFeatures,
|
|
103
|
+
onFeatureClick: (id) => alert(`Clicked feature: ${id}`),
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const deeplyNestedFeatures = [
|
|
107
|
+
{
|
|
108
|
+
id: 'root-1',
|
|
109
|
+
name: 'Platform Overhaul',
|
|
110
|
+
status: 'in-progress',
|
|
111
|
+
lifecycle: 'Implementation',
|
|
112
|
+
branch: 'feat/platform-overhaul',
|
|
113
|
+
repositoryName: 'platform',
|
|
114
|
+
remoteUrl: 'https://github.com/acme/platform',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'child-1',
|
|
118
|
+
name: 'API Redesign',
|
|
119
|
+
status: 'in-progress',
|
|
120
|
+
lifecycle: 'Implementation',
|
|
121
|
+
branch: 'feat/api-redesign',
|
|
122
|
+
repositoryName: 'platform',
|
|
123
|
+
remoteUrl: 'https://github.com/acme/platform',
|
|
124
|
+
parentId: 'root-1',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: 'grandchild-1',
|
|
128
|
+
name: 'REST to GraphQL Migration',
|
|
129
|
+
status: 'pending',
|
|
130
|
+
lifecycle: 'Planning',
|
|
131
|
+
branch: 'feat/graphql-migration',
|
|
132
|
+
repositoryName: 'platform',
|
|
133
|
+
remoteUrl: 'https://github.com/acme/platform',
|
|
134
|
+
parentId: 'child-1',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'child-2',
|
|
138
|
+
name: 'Database Migration',
|
|
139
|
+
status: 'done',
|
|
140
|
+
lifecycle: 'Maintain',
|
|
141
|
+
branch: 'feat/db-migration',
|
|
142
|
+
repositoryName: 'platform',
|
|
143
|
+
remoteUrl: 'https://github.com/acme/platform',
|
|
144
|
+
parentId: 'root-1',
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
export const DeeplyNested = {
|
|
148
|
+
args: {
|
|
149
|
+
data: deeplyNestedFeatures,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
const noRemoteFeatures = [
|
|
153
|
+
{
|
|
154
|
+
id: 'feat-local-1',
|
|
155
|
+
name: 'Local Feature',
|
|
156
|
+
status: 'in-progress',
|
|
157
|
+
lifecycle: 'Implementation',
|
|
158
|
+
branch: 'feat/local-work',
|
|
159
|
+
repositoryName: 'local-project',
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
export const NoRemoteUrl = {
|
|
163
|
+
args: {
|
|
164
|
+
data: noRemoteFeatures,
|
|
165
|
+
},
|
|
166
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/feature-tree-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FeatureTreeTable, buildTreeData } from './feature-tree-table.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAoCzE,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,CAAC,EAAE,YAAY,EAAE,EAAE,gCAAgC,2CAgE7F"}
|
package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js
CHANGED
|
@@ -15,6 +15,7 @@ const FLAG_DESCRIPTIONS = {
|
|
|
15
15
|
adoptBranch: 'Enable the ability to adopt existing branches as tracked features',
|
|
16
16
|
gitRebaseSync: 'Enable git rebase-on-main and sync-main operations in the web UI',
|
|
17
17
|
reactFileManager: 'Use the built-in React file manager instead of the native OS folder picker. Also serves as automatic fallback when the native picker is unavailable.',
|
|
18
|
+
inventory: 'Enable the Inventory page showing all repositories and features in a tree view',
|
|
18
19
|
};
|
|
19
20
|
const FLAG_LABELS = {
|
|
20
21
|
skills: 'Skills',
|
|
@@ -24,6 +25,7 @@ const FLAG_LABELS = {
|
|
|
24
25
|
adoptBranch: 'Adopt Branch',
|
|
25
26
|
gitRebaseSync: 'Git Rebase & Sync',
|
|
26
27
|
reactFileManager: 'React File Manager',
|
|
28
|
+
inventory: 'Inventory',
|
|
27
29
|
};
|
|
28
30
|
const FLAG_KEYS = [
|
|
29
31
|
'skills',
|
|
@@ -33,6 +35,7 @@ const FLAG_KEYS = [
|
|
|
33
35
|
'adoptBranch',
|
|
34
36
|
'gitRebaseSync',
|
|
35
37
|
'reactFileManager',
|
|
38
|
+
'inventory',
|
|
36
39
|
];
|
|
37
40
|
export function FeatureFlagsSettingsSection({ featureFlags }) {
|
|
38
41
|
const [flags, setFlags] = useState({ ...featureFlags });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,QAAA,MAAM,IAAI;;;;;;;CAO0C,CAAC;AAErD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"feature-flags-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/feature-flags-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E,QAAA,MAAM,IAAI;;;;;;;CAO0C,CAAC;AAErD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAarB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAazB,CAAC"}
|
|
@@ -18,6 +18,7 @@ export const Default = {
|
|
|
18
18
|
adoptBranch: false,
|
|
19
19
|
gitRebaseSync: false,
|
|
20
20
|
reactFileManager: false,
|
|
21
|
+
inventory: false,
|
|
21
22
|
},
|
|
22
23
|
},
|
|
23
24
|
};
|
|
@@ -31,6 +32,7 @@ export const AllEnabled = {
|
|
|
31
32
|
adoptBranch: true,
|
|
32
33
|
gitRebaseSync: true,
|
|
33
34
|
reactFileManager: true,
|
|
35
|
+
inventory: true,
|
|
34
36
|
},
|
|
35
37
|
},
|
|
36
38
|
};
|
|
@@ -44,6 +46,7 @@ export const AllDisabled = {
|
|
|
44
46
|
adoptBranch: false,
|
|
45
47
|
gitRebaseSync: false,
|
|
46
48
|
reactFileManager: false,
|
|
49
|
+
inventory: false,
|
|
47
50
|
},
|
|
48
51
|
},
|
|
49
52
|
};
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AA8B/E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AA+QD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,GACnB,EAAE,uBAAuB,2CAw5CzB"}
|
|
@@ -131,6 +131,7 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
131
131
|
adoptBranch: false,
|
|
132
132
|
gitRebaseSync: false,
|
|
133
133
|
reactFileManager: false,
|
|
134
|
+
inventory: false,
|
|
134
135
|
};
|
|
135
136
|
// Agent state
|
|
136
137
|
const [agentType, setAgentType] = useState(settings.agent.type);
|
|
@@ -567,6 +568,10 @@ export function SettingsPageClient({ settings, shepHome, dbFileSize, availableTe
|
|
|
567
568
|
const newFlags = { ...flags, reactFileManager: v };
|
|
568
569
|
setFlags(newFlags);
|
|
569
570
|
save({ featureFlags: newFlags });
|
|
571
|
+
} }), _jsx(SwitchRow, { label: t('settings.featureFlags.inventory'), description: t('settings.featureFlags.inventoryDescription'), id: "flag-inventory", testId: "switch-flag-inventory", checked: flags.inventory, onChange: (v) => {
|
|
572
|
+
const newFlags = { ...flags, inventory: v };
|
|
573
|
+
setFlags(newFlags);
|
|
574
|
+
save({ featureFlags: newFlags });
|
|
570
575
|
} })] }), _jsx(SectionHint, { children: t('settings.featureFlags.hint') })] }), _jsxs("div", { id: "section-interactive-agent", className: "grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]", children: [_jsxs(SettingsSection, { icon: MessageSquare, title: t('settings.interactiveAgent.title'), description: t('settings.interactiveAgent.description'), testId: "interactive-agent-settings-section", children: [_jsx(SwitchRow, { label: t('settings.interactiveAgent.enableChatTab'), description: t('settings.interactiveAgent.enableChatTabDescription'), id: "interactive-agent-enabled", testId: "switch-interactive-agent-enabled", checked: interactiveEnabled, onChange: (v) => {
|
|
571
576
|
setInteractiveEnabled(v);
|
|
572
577
|
save({
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"settings-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAM5D,QAAA,MAAM,IAAI;;;;;;;CAOiC,CAAC;AAE5C,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAsBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAa7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAuB5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-sidebar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAEhC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,YAAY,EAEZ,cAAc,EACd,YAAY,GACb,EAAE,eAAe,2CAkRjB"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { usePathname } from 'next/navigation';
|
|
5
|
-
import { Home, Moon, Sun, Volume2, VolumeOff, Zap, ZapOff, Wrench, Puzzle, Settings, } from 'lucide-react';
|
|
5
|
+
import { Home, Moon, Sun, Volume2, VolumeOff, Zap, ZapOff, Wrench, Puzzle, Settings, TableProperties, } from 'lucide-react';
|
|
6
6
|
import { useTranslation } from 'react-i18next';
|
|
7
7
|
import { Sidebar, SidebarHeader, SidebarContent, SidebarFooter, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarRail, useSidebar, } from '../../ui/sidebar.js';
|
|
8
8
|
import { ScrollArea } from '../../ui/scroll-area.js';
|
|
@@ -64,7 +64,7 @@ export function AppSidebar({ features, featureFlags, onFeatureClick, onAddFeatur
|
|
|
64
64
|
'flex min-w-0 flex-1 items-center gap-2 overflow-hidden px-2',
|
|
65
65
|
'transition-opacity duration-200 ease-out',
|
|
66
66
|
expandedVisible ? 'opacity-100' : 'opacity-0',
|
|
67
|
-
].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
|
|
67
|
+
].join(' '), "aria-hidden": !expandedVisible, children: [_jsx(ShepLogo, { className: "shrink-0", size: 20, variant: versionData.isDev ? 'dev' : 'default' }), _jsx("span", { className: "truncate text-sm font-semibold tracking-tight", children: "Shep" }), _jsx(VersionBadge, { version: versionData.version, branch: versionData.branch || undefined, commitHash: versionData.commitHash || undefined, isDev: versionData.isDev, packageName: versionData.packageName, description: versionData.description, instancePath: versionData.instancePath || undefined })] })) : null, _jsx(SidebarCollapseToggle, { className: "shrink-0 transition-all duration-200" })] }) }), _jsx(SidebarNavItem, { icon: Home, label: t('navigation.controlCenter'), href: "/", active: pathname === '/' }), featureFlags.inventory ? (_jsx(SidebarNavItem, { icon: TableProperties, label: t('navigation.inventory'), href: "/features", active: pathname === '/features' })) : null, _jsx(SidebarNavItem, { icon: Wrench, label: t('navigation.tools'), href: "/tools", active: pathname === '/tools' }), featureFlags.skills ? (_jsx(SidebarNavItem, { icon: Puzzle, label: t('navigation.skills'), href: "/skills", active: pathname === '/skills' })) : null, _jsx(SidebarNavItem, { icon: Settings, label: t('navigation.settings'), href: "/settings", active: pathname === '/settings' })] }) }), _jsx(SidebarContent, { children: showExpanded ? (_jsxs("div", { className: [
|
|
68
68
|
'flex min-h-0 flex-1 flex-col overflow-hidden transition-opacity duration-200 ease-out',
|
|
69
69
|
'[&_[data-sidebar=group-label]]:!mt-0 [&_[data-sidebar=group-label]]:!opacity-100 [&_[data-sidebar=group-label]]:!transition-none',
|
|
70
70
|
expandedVisible ? 'opacity-100' : 'opacity-0',
|
package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"app-sidebar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAiB3C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,UAAU,CAyBjC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA+DnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAKlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAInB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KA6BrB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAmElC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/feature-flags-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags-context.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/hooks/feature-flags-context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAe7D,UAAU,yBAAyB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,yBAAyB,2CAElF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD"}
|
|
@@ -13,6 +13,7 @@ export interface FeatureFlagsState {
|
|
|
13
13
|
adoptBranch: boolean;
|
|
14
14
|
gitRebaseSync: boolean;
|
|
15
15
|
reactFileManager: boolean;
|
|
16
|
+
inventory: boolean;
|
|
16
17
|
}
|
|
17
18
|
export declare function getFeatureFlags(): FeatureFlagsState;
|
|
18
19
|
/**
|
|
@@ -27,5 +28,6 @@ export declare const featureFlags: {
|
|
|
27
28
|
readonly adoptBranch: boolean;
|
|
28
29
|
readonly gitRebaseSync: boolean;
|
|
29
30
|
readonly reactFileManager: boolean;
|
|
31
|
+
readonly inventory: boolean;
|
|
30
32
|
};
|
|
31
33
|
//# sourceMappingURL=feature-flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/lib/feature-flags.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,IAAI,iBAAiB,CAkCnD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;CAyBf,CAAC"}
|
|
@@ -22,6 +22,7 @@ export function getFeatureFlags() {
|
|
|
22
22
|
adoptBranch: flags.adoptBranch,
|
|
23
23
|
gitRebaseSync: flags.gitRebaseSync,
|
|
24
24
|
reactFileManager: flags.reactFileManager,
|
|
25
|
+
inventory: flags.inventory,
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
}
|
|
@@ -39,6 +40,7 @@ export function getFeatureFlags() {
|
|
|
39
40
|
adoptBranch: false,
|
|
40
41
|
gitRebaseSync: false,
|
|
41
42
|
reactFileManager: isEnabled(process.env.NEXT_PUBLIC_FLAG_REACT_FILE_MANAGER),
|
|
43
|
+
inventory: false,
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
46
|
/**
|
|
@@ -67,4 +69,7 @@ export const featureFlags = {
|
|
|
67
69
|
get reactFileManager() {
|
|
68
70
|
return getFeatureFlags().reactFileManager;
|
|
69
71
|
},
|
|
72
|
+
get inventory() {
|
|
73
|
+
return getFeatureFlags().inventory;
|
|
74
|
+
},
|
|
70
75
|
};
|
|
@@ -202,6 +202,8 @@
|
|
|
202
202
|
"gitRebaseSyncDescription": "تمكين عمليات إعادة التأسيس على main ومزامنة main",
|
|
203
203
|
"reactFileManager": "مدير ملفات React",
|
|
204
204
|
"reactFileManagerDescription": "استخدام مدير ملفات React المدمج بدلاً من منتقي مجلدات نظام التشغيل الأصلي",
|
|
205
|
+
"inventory": "المخزون",
|
|
206
|
+
"inventoryDescription": "تمكين صفحة المخزون التي تعرض جميع المستودعات والميزات في عرض شجري",
|
|
205
207
|
"hint": "ميزات تجريبية لا تزال قيد التطوير. قم بتمكينها على مسؤوليتك — قد تتغير أو تُزال في الإصدارات المستقبلية. وضع التصحيح يضيف تسجيلًا مفصلاً مفيدًا لاستكشاف الأخطاء."
|
|
206
208
|
},
|
|
207
209
|
"interactiveAgent": {
|
|
@@ -240,6 +242,7 @@
|
|
|
240
242
|
"controlCenter": "مركز التحكم",
|
|
241
243
|
"dashboard": "لوحة المعلومات",
|
|
242
244
|
"features": "الميزات",
|
|
245
|
+
"inventory": "المخزون",
|
|
243
246
|
"repositories": "المستودعات",
|
|
244
247
|
"settings": "الإعدادات",
|
|
245
248
|
"sessions": "الجلسات",
|
|
@@ -188,6 +188,8 @@
|
|
|
188
188
|
"gitRebaseSyncDescription": "Git Rebase-on-Main- und Sync-Main-Operationen aktivieren",
|
|
189
189
|
"reactFileManager": "React-Dateimanager",
|
|
190
190
|
"reactFileManagerDescription": "Den integrierten React-Dateimanager anstelle der nativen Betriebssystem-Ordnerauswahl verwenden",
|
|
191
|
+
"inventory": "Inventar",
|
|
192
|
+
"inventoryDescription": "Inventarseite mit allen Repositories und Features in einer Baumansicht aktivieren",
|
|
191
193
|
"hint": "Experimentelle Features, die noch in Entwicklung sind. Aktivierung auf eigene Gefahr — sie können sich in zukünftigen Versionen ändern oder entfernt werden. Der Debug-Modus fügt ausführliche Protokollierung hinzu, die bei der Fehlerbehebung nützlich ist."
|
|
192
194
|
},
|
|
193
195
|
"interactiveAgent": {
|
|
@@ -226,6 +228,7 @@
|
|
|
226
228
|
"controlCenter": "Kontrollzentrum",
|
|
227
229
|
"dashboard": "Dashboard",
|
|
228
230
|
"features": "Features",
|
|
231
|
+
"inventory": "Inventar",
|
|
229
232
|
"repositories": "Repositories",
|
|
230
233
|
"settings": "Einstellungen",
|
|
231
234
|
"sessions": "Sitzungen",
|