@shepai/cli 1.173.0 → 1.174.0-pr531.0f666b7
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/Repository.yaml +6 -0
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts +3 -1
- package/dist/packages/core/src/application/ports/output/repositories/repository-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +28 -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/git-pr-service.interface.js +2 -0
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts +47 -0
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/github-repository-service.interface.js +12 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts +67 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature-from-remote.use-case.js +125 -0
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +13 -4
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +54 -10
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts +30 -0
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/repositories/init-remote-repository.use-case.js +50 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +10 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/repository.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/055-add-repository-fork-fields.js +26 -0
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts +2 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-repository.repository.js +14 -0
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts +4 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/external/github-repository.service.js +55 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +5 -0
- 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 +32 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +32 -6
- package/dist/src/presentation/cli/commands/repo/index.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/repo/index.js +3 -1
- package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts +15 -0
- package/dist/src/presentation/cli/commands/repo/init-remote.command.d.ts.map +1 -0
- package/dist/src/presentation/cli/commands/repo/init-remote.command.js +44 -0
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts +31 -0
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/create-feature-from-remote.js +69 -0
- package/dist/src/presentation/web/app/actions/import-github-repository.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/import-github-repository.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/import-github-repository.js +1 -1
- package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts +7 -1
- package/dist/src/presentation/web/app/features/feature-tree-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/app/features/feature-tree-page-client.js +142 -3
- package/dist/src/presentation/web/app/features/get-feature-tree-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/features/get-feature-tree-data.js +4 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/repository-combobox.stories.js +22 -0
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts +21 -5
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.js +169 -87
- package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts +2 -2
- package/dist/src/presentation/web/components/features/feature-tree-table/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/feature-tree-table/index.js +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +1 -1
- package/dist/translations/ar/cli.json +12 -0
- package/dist/translations/de/cli.json +12 -0
- package/dist/translations/en/cli.json +12 -0
- package/dist/translations/es/cli.json +12 -0
- package/dist/translations/fr/cli.json +12 -0
- package/dist/translations/he/cli.json +12 -0
- package/dist/translations/pt/cli.json +12 -0
- package/dist/translations/ru/cli.json +12 -0
- 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 +4 -4
- 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/build-manifest.json +2 -2
- 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 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- 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 -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/build-manifest.json +2 -2
- 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 -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/build-manifest.json +2 -2
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +2 -1
- 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 +2 -2
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +30 -30
- package/web/.next/server/app/(dashboard)/create/page.js +2 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- 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 -1
- 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 +2 -2
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +2 -1
- 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 +2 -2
- 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 -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/build-manifest.json +2 -2
- 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 -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/page/build-manifest.json +2 -2
- 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 +2 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- 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/build-manifest.json +2 -2
- package/web/.next/server/app/features/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/features/page.js.nft.json +1 -1
- package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/build-manifest.json +2 -2
- package/web/.next/server/app/settings/page/server-reference-manifest.json +9 -9
- 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 +2 -2
- package/web/.next/server/app/skills/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/skills/page.js +2 -1
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +2 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js +2 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +2 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- 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]__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/403f9_next_dist_a53cb908._.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_ceb2fa1e._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_ad0071c9.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_90d98b2b.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_d3828105.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/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 +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08c912ab._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0c5452c3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -1
- 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]__22d17c66._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__22d17c66._.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]__51ec77a8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__51ec77a8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__b020c17d._.js → [root-of-the-server]__540c615f._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__540c615f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__66047a1b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6c7d3936._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__851f6adb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a932cd3a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aa72e794._.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/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_073183f4._.js +3 -0
- package/web/.next/server/chunks/ssr/_073183f4._.js.map +1 -0
- 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/_1879404a._.js +1 -1
- package/web/.next/server/chunks/ssr/_1b7dae9a._.js +1 -1
- package/web/.next/server/chunks/ssr/{_cd92091d._.js → _1c627e53._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_cd92091d._.js.map → _1c627e53._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_5119a3df._.js → _295fffde._.js} +2 -2
- package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_817ddf8a._.js → _398f5019._.js} +3 -3
- package/web/.next/server/chunks/ssr/{_817ddf8a._.js.map → _398f5019._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_43ba79e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js +1 -1
- package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_6f35fb9a._.js → _49b8d085._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_6f35fb9a._.js.map → _49b8d085._.js.map} +1 -1
- 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/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js +3 -0
- package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7476c702._.js +3 -0
- package/web/.next/server/chunks/ssr/_7476c702._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7cb0396e._.js +3 -0
- package/web/.next/server/chunks/ssr/_7cb0396e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_bb09579b._.js +1 -1
- package/web/.next/server/chunks/ssr/{_0020fddd._.js → _d9c0a97a._.js} +3 -3
- package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e680c57c._.js +9 -0
- package/web/.next/server/chunks/ssr/_e680c57c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f080a56e._.js +3 -0
- package/web/.next/server/chunks/ssr/_f080a56e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js +4 -0
- package/web/.next/server/chunks/ssr/_f8c55130._.js.map +1 -0
- 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_global-chat-drawer-client_tsx_158c4b12._.js +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/node_modules__pnpm_63d47a3e._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_63d47a3e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_ef15a0bd._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_17d39233._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_54b02639._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js +5 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_7b7b9e3b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_807cba76._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_90b5e66e.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_4ce30db7.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_e4032193.js.map +1 -0
- 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 +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js.map +1 -1
- 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_a5e6c910._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_select_tsx_45d6b8ae._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e1cd1869._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_e3a30e30._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +2 -2
- 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 +50 -50
- package/web/.next/static/chunks/{ab5970241b29b648.js → 041bbd573f24c747.js} +1 -1
- package/web/.next/static/chunks/{0658f5f58d5b60c5.js → 273d92d4c2d7785c.js} +1 -1
- package/web/.next/static/chunks/2ceebcc839ee0d4b.js +1 -0
- package/web/.next/static/chunks/46e2693dbc9262fd.js +5 -0
- package/web/.next/static/chunks/{51bb2fb93740d2cb.js → 53fc463b54ef2b4b.js} +2 -2
- package/web/.next/static/chunks/{641583aadf11b219.js → 6129f01524593835.js} +1 -1
- package/web/.next/static/chunks/{e5c06df7f30a05b9.js → 659ee5c3bcd5908a.js} +1 -1
- package/web/.next/static/chunks/{96b63a24ad83be21.js → 6adf506943611449.js} +1 -1
- package/web/.next/static/chunks/{a1f976e9c8b07306.js → 79b8efa054660be8.js} +1 -1
- package/web/.next/static/chunks/7e50572eaeede7f0.js +3 -0
- package/web/.next/static/chunks/8492d8e0b5f9a4e8.js +1 -0
- package/web/.next/static/chunks/88192bc55f93b89e.js +1 -0
- package/web/.next/static/chunks/98e3a7cf58fc912a.js +1 -0
- package/web/.next/static/chunks/9f5327851ad07bdf.js +7 -0
- package/web/.next/static/chunks/a20f2d6f76f469b7.css +1 -0
- package/web/.next/static/chunks/ad7590436eef8a9e.js +1 -0
- package/web/.next/static/chunks/{819d8097ac0ca319.js → ae65839330ff1113.js} +1 -1
- package/web/.next/static/chunks/b49ab0b290e9342d.js +1 -0
- package/web/.next/static/chunks/b88dd71478d03b6a.js +1 -0
- package/web/.next/static/chunks/bb479c31b5b53bac.js +8 -0
- package/web/.next/static/chunks/c10c0d6d458453bc.js +1 -0
- package/web/.next/static/chunks/{4161d4663009140f.js → dbaa2ef826fd65d6.js} +1 -1
- package/web/.next/static/chunks/{185e4f36cb6efb24.js → eb1ca1b0a34166f5.js} +1 -1
- package/web/.next/static/chunks/fc0232384ec2b48d.js +1 -0
- package/web/.next/static/chunks/{turbopack-b38a68b1b1c41a87.js → turbopack-fa58b7ea4a4b26e7.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4fb81977._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7dcd0917._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__92ffd5ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b020c17d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ba7f5873._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c5e09f6f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fa525872._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0020fddd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_02e01240._.js +0 -4
- package/web/.next/server/chunks/ssr/_02e01240._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_068492bf._.js +0 -3
- package/web/.next/server/chunks/ssr/_068492bf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_18886033._.js +0 -4
- package/web/.next/server/chunks/ssr/_18886033._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_22e00a14._.js +0 -4
- package/web/.next/server/chunks/ssr/_22e00a14._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5119a3df._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_560f2971._.js +0 -3
- package/web/.next/server/chunks/ssr/_560f2971._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a5a5901d._.js +0 -4
- package/web/.next/server/chunks/ssr/_a5a5901d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a963dd3c._.js +0 -3
- package/web/.next/server/chunks/ssr/_a963dd3c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ad09f271._.js +0 -4
- package/web/.next/server/chunks/ssr/_ad09f271._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c3f595c6._.js +0 -4
- package/web/.next/server/chunks/ssr/_c3f595c6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_df737cce._.js +0 -3
- package/web/.next/server/chunks/ssr/_df737cce._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e3f14907._.js +0 -9
- package/web/.next/server/chunks/ssr/_e3f14907._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ea9e1556._.js +0 -4
- package/web/.next/server/chunks/ssr/_ea9e1556._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js +0 -6
- package/web/.next/server/chunks/ssr/_f1ba9be6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f33cd07e._.js +0 -6
- package/web/.next/server/chunks/ssr/_f33cd07e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f535d854._.js +0 -3
- package/web/.next/server/chunks/ssr/_f535d854._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f8b45233._.js +0 -4
- package/web/.next/server/chunks/ssr/_f8b45233._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_1300ae39._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_components_common_page-header_index_ts_bdf4db0b._.js.map +0 -1
- package/web/.next/static/chunks/3e393d6a78b2ade4.js +0 -1
- package/web/.next/static/chunks/453ad57269a1004f.js +0 -1
- package/web/.next/static/chunks/4559a403ee40dd19.js +0 -7
- package/web/.next/static/chunks/4855528484f00bd6.js +0 -1
- package/web/.next/static/chunks/4bacc77e3952f063.js +0 -3
- package/web/.next/static/chunks/5ed47e998707b519.js +0 -8
- package/web/.next/static/chunks/9f59ea29d6034111.js +0 -1
- package/web/.next/static/chunks/bb5400da64270df6.js +0 -1
- package/web/.next/static/chunks/cc5fe8d1d9e1e519.js +0 -5
- package/web/.next/static/chunks/d5366257d6b9f855.js +0 -1
- package/web/.next/static/chunks/dcf8bb4389557a76.css +0 -1
- package/web/.next/static/chunks/f37a5e031a5d0f75.js +0 -1
- package/web/.next/static/chunks/f998b42b5cddafd6.js +0 -1
- /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_buildManifest.js +0 -0
- /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{1awQPFeGEuNwpeu1Kgpxd → UWgKy2y_bjIYkCFOMl8Am}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/features/feature-tree-table/feature-tree-table.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useEffect, useRef, useCallback } from 'react';
|
|
|
4
4
|
import { TabulatorFull as Tabulator } from 'tabulator-tables';
|
|
5
5
|
import { cn } from '../../../lib/utils.js';
|
|
6
6
|
import './feature-tree-table.css';
|
|
7
|
+
// ── Constants ────────────────────────────────────────────────
|
|
7
8
|
const STATUS_LABELS = {
|
|
8
9
|
'action-needed': 'Action Needed',
|
|
9
10
|
'in-progress': 'In Progress',
|
|
@@ -12,119 +13,155 @@ const STATUS_LABELS = {
|
|
|
12
13
|
error: 'Error',
|
|
13
14
|
done: 'Done',
|
|
14
15
|
};
|
|
15
|
-
/** SVG repo icon — lucide FolderGit2 */
|
|
16
|
-
const REPO_ICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="
|
|
16
|
+
/** SVG repo icon — lucide FolderGit2 (16px) */
|
|
17
|
+
const REPO_ICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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>`;
|
|
18
|
+
/** SVG group icon — lucide Layers (16px) */
|
|
19
|
+
const GROUP_ICON_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"/><path d="m22.54 12.43-1.42-.65-8.28 3.78a2 2 0 0 1-1.66 0l-8.28-3.78-1.42.65a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"/></svg>`;
|
|
20
|
+
// ── Formatters ───────────────────────────────────────────────
|
|
21
|
+
function escapeHtml(text) {
|
|
22
|
+
const div = typeof document !== 'undefined' ? document.createElement('div') : null;
|
|
23
|
+
if (div) {
|
|
24
|
+
div.textContent = text;
|
|
25
|
+
return div.innerHTML;
|
|
26
|
+
}
|
|
27
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
28
|
+
}
|
|
17
29
|
function statusFormatter(cell) {
|
|
18
30
|
const row = cell.getRow().getData();
|
|
19
|
-
if (row.
|
|
31
|
+
if (row._isGroupHeader)
|
|
20
32
|
return '';
|
|
21
33
|
const value = cell.getValue();
|
|
22
34
|
const label = STATUS_LABELS[value] ?? value;
|
|
23
35
|
return `<span class="status-pill status-pill--${value}"><span class="status-dot"></span>${label}</span>`;
|
|
24
36
|
}
|
|
25
|
-
function
|
|
37
|
+
function branchFormatter(cell) {
|
|
26
38
|
const row = cell.getRow().getData();
|
|
27
|
-
if (row.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
if (row._isGroupHeader)
|
|
40
|
+
return '';
|
|
41
|
+
const val = cell.getValue();
|
|
42
|
+
if (!val)
|
|
43
|
+
return '';
|
|
44
|
+
return `<code style="font-size:12px;color:var(--color-muted-foreground,#64748b);font-family:var(--font-mono)">${escapeHtml(val)}</code>`;
|
|
45
|
+
}
|
|
46
|
+
function lifecycleFormatter(cell) {
|
|
47
|
+
const row = cell.getRow().getData();
|
|
48
|
+
if (row._isGroupHeader)
|
|
49
|
+
return '';
|
|
35
50
|
return escapeHtml(cell.getValue());
|
|
36
51
|
}
|
|
37
|
-
function
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
52
|
+
function repoFormatter(cell) {
|
|
53
|
+
const row = cell.getRow().getData();
|
|
54
|
+
if (row._isGroupHeader)
|
|
55
|
+
return '';
|
|
56
|
+
const val = cell.getValue();
|
|
57
|
+
return `<span style="display:inline-flex;align-items:center;gap:6px">${REPO_ICON_SVG}<span>${escapeHtml(val)}</span></span>`;
|
|
58
|
+
}
|
|
59
|
+
function groupHeaderNameFormatter(groupBy) {
|
|
60
|
+
return (cell) => {
|
|
61
|
+
const row = cell.getRow().getData();
|
|
62
|
+
if (!row._isGroupHeader)
|
|
63
|
+
return escapeHtml(cell.getValue());
|
|
64
|
+
const icon = groupBy === 'repositoryName' ? REPO_ICON_SVG : GROUP_ICON_SVG;
|
|
65
|
+
const count = row._groupCount ?? 0;
|
|
66
|
+
const countLabel = count === 1 ? '1 feature' : `${count} features`;
|
|
67
|
+
return `<span style="display:inline-flex;align-items:center;gap:8px;font-weight:600">${icon}<span>${escapeHtml(row.name)}</span><span style="font-weight:400;color:var(--color-muted-foreground,#64748b);font-size:12px">${countLabel}</span></span>`;
|
|
68
|
+
};
|
|
44
69
|
}
|
|
45
|
-
|
|
46
|
-
|
|
70
|
+
/** All possible columns. We'll filter out the grouped-by column in tree mode. */
|
|
71
|
+
function buildColumns({ onFeatureClick, groupBy }) {
|
|
72
|
+
const clickProps = onFeatureClick
|
|
73
|
+
? {
|
|
74
|
+
cellClick: (_e, cell) => {
|
|
75
|
+
const data = cell.getRow().getData();
|
|
76
|
+
if (data._isGroupHeader)
|
|
77
|
+
return;
|
|
78
|
+
onFeatureClick(data.id);
|
|
79
|
+
},
|
|
80
|
+
cssClass: 'cursor-pointer',
|
|
81
|
+
}
|
|
82
|
+
: {};
|
|
83
|
+
const isGrouped = !!groupBy;
|
|
84
|
+
const cols = [
|
|
47
85
|
{
|
|
48
86
|
title: 'Name',
|
|
49
87
|
field: 'name',
|
|
50
88
|
widthGrow: 3,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
},
|
|
89
|
+
headerSort: !isGrouped,
|
|
90
|
+
formatter: isGrouped
|
|
91
|
+
? groupHeaderNameFormatter(groupBy)
|
|
92
|
+
: (cell) => escapeHtml(cell.getValue()),
|
|
93
|
+
...clickProps,
|
|
78
94
|
},
|
|
95
|
+
groupBy !== 'repositoryName'
|
|
96
|
+
? {
|
|
97
|
+
title: 'Repository',
|
|
98
|
+
field: 'repositoryName',
|
|
99
|
+
widthGrow: 2,
|
|
100
|
+
headerSort: !isGrouped,
|
|
101
|
+
formatter: repoFormatter,
|
|
102
|
+
}
|
|
103
|
+
: null,
|
|
104
|
+
groupBy !== 'status'
|
|
105
|
+
? {
|
|
106
|
+
title: 'Status',
|
|
107
|
+
field: 'status',
|
|
108
|
+
widthGrow: 1.5,
|
|
109
|
+
headerSort: !isGrouped,
|
|
110
|
+
formatter: statusFormatter,
|
|
111
|
+
}
|
|
112
|
+
: null,
|
|
113
|
+
groupBy !== 'lifecycle'
|
|
114
|
+
? {
|
|
115
|
+
title: 'Lifecycle',
|
|
116
|
+
field: 'lifecycle',
|
|
117
|
+
widthGrow: 1.5,
|
|
118
|
+
headerSort: !isGrouped,
|
|
119
|
+
formatter: lifecycleFormatter,
|
|
120
|
+
}
|
|
121
|
+
: null,
|
|
79
122
|
{
|
|
80
123
|
title: 'Branch',
|
|
81
124
|
field: 'branch',
|
|
82
125
|
widthGrow: 2,
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
},
|
|
126
|
+
headerSort: !isGrouped,
|
|
127
|
+
formatter: branchFormatter,
|
|
92
128
|
},
|
|
93
129
|
];
|
|
130
|
+
return cols.filter(Boolean);
|
|
131
|
+
}
|
|
132
|
+
// ── Tree builder ─────────────────────────────────────────────
|
|
133
|
+
export function displayLabel(groupBy, value) {
|
|
134
|
+
if (groupBy === 'status')
|
|
135
|
+
return STATUS_LABELS[value] ?? value;
|
|
136
|
+
return value;
|
|
94
137
|
}
|
|
95
138
|
/**
|
|
96
|
-
* Build tree-structured data grouped by repository.
|
|
139
|
+
* Build tree-structured data grouped by repository (legacy format).
|
|
97
140
|
* Each repository becomes a parent node with its features as children.
|
|
98
141
|
* Repos without features are included as empty groups.
|
|
99
142
|
*/
|
|
100
143
|
export function buildTreeData(flatData, repos) {
|
|
101
|
-
// Group features by repository
|
|
102
144
|
const byRepo = new Map();
|
|
103
145
|
for (const item of flatData) {
|
|
104
146
|
const repoName = item.repositoryName || 'Unknown';
|
|
105
|
-
if (!byRepo.has(repoName))
|
|
147
|
+
if (!byRepo.has(repoName))
|
|
106
148
|
byRepo.set(repoName, []);
|
|
107
|
-
}
|
|
108
149
|
byRepo.get(repoName).push(item);
|
|
109
150
|
}
|
|
110
|
-
// Ensure all known repos are represented (even without features)
|
|
111
151
|
const repoMeta = new Map();
|
|
112
152
|
if (repos) {
|
|
113
153
|
for (const repo of repos) {
|
|
114
154
|
repoMeta.set(repo.name, { remoteUrl: repo.remoteUrl });
|
|
115
|
-
if (!byRepo.has(repo.name))
|
|
155
|
+
if (!byRepo.has(repo.name))
|
|
116
156
|
byRepo.set(repo.name, []);
|
|
117
|
-
}
|
|
118
157
|
}
|
|
119
158
|
}
|
|
120
159
|
const roots = [];
|
|
121
160
|
for (const [repoName, features] of byRepo) {
|
|
122
|
-
// Build parent-child relationships within this repo group
|
|
123
161
|
const lookup = new Map();
|
|
124
162
|
const repoChildren = [];
|
|
125
|
-
for (const item of features)
|
|
163
|
+
for (const item of features)
|
|
126
164
|
lookup.set(item.id, { ...item, _children: [] });
|
|
127
|
-
}
|
|
128
165
|
for (const item of features) {
|
|
129
166
|
const node = lookup.get(item.id);
|
|
130
167
|
if (item.parentId && lookup.has(item.parentId)) {
|
|
@@ -134,14 +171,12 @@ export function buildTreeData(flatData, repos) {
|
|
|
134
171
|
repoChildren.push(node);
|
|
135
172
|
}
|
|
136
173
|
}
|
|
137
|
-
// Clean up empty _children arrays
|
|
138
174
|
for (const node of lookup.values()) {
|
|
139
|
-
if (node._children?.length === 0)
|
|
175
|
+
if (node._children?.length === 0)
|
|
140
176
|
delete node._children;
|
|
141
|
-
}
|
|
142
177
|
}
|
|
143
178
|
const remoteUrl = repoMeta.get(repoName)?.remoteUrl ?? features[0]?.remoteUrl;
|
|
144
|
-
|
|
179
|
+
roots.push({
|
|
145
180
|
id: `repo-${repoName}`,
|
|
146
181
|
name: repoName,
|
|
147
182
|
status: 'pending',
|
|
@@ -152,12 +187,51 @@ export function buildTreeData(flatData, repos) {
|
|
|
152
187
|
_isRepoGroup: true,
|
|
153
188
|
_featureCount: features.length,
|
|
154
189
|
...(repoChildren.length > 0 ? { _children: repoChildren } : {}),
|
|
155
|
-
};
|
|
156
|
-
roots.push(repoGroup);
|
|
190
|
+
});
|
|
157
191
|
}
|
|
158
192
|
return roots;
|
|
159
193
|
}
|
|
160
|
-
export function
|
|
194
|
+
export function buildGroupedTree(flatData, groupBy, groupSortDir, itemSortField, itemSortDir) {
|
|
195
|
+
// Group features by field value
|
|
196
|
+
const groups = new Map();
|
|
197
|
+
for (const item of flatData) {
|
|
198
|
+
const key = item[groupBy] || 'Unknown';
|
|
199
|
+
if (!groups.has(key))
|
|
200
|
+
groups.set(key, []);
|
|
201
|
+
groups.get(key).push(item);
|
|
202
|
+
}
|
|
203
|
+
// Sort items within each group
|
|
204
|
+
const sortItems = (items) => [...items].sort((a, b) => {
|
|
205
|
+
const aVal = String(a[itemSortField] ?? '').toLowerCase();
|
|
206
|
+
const bVal = String(b[itemSortField] ?? '').toLowerCase();
|
|
207
|
+
const cmp = aVal.localeCompare(bVal);
|
|
208
|
+
return itemSortDir === 'asc' ? cmp : -cmp;
|
|
209
|
+
});
|
|
210
|
+
// Build group header rows
|
|
211
|
+
const roots = [];
|
|
212
|
+
for (const [key, features] of groups) {
|
|
213
|
+
const sortedChildren = sortItems(features);
|
|
214
|
+
roots.push({
|
|
215
|
+
id: `group-${groupBy}-${key}`,
|
|
216
|
+
name: displayLabel(groupBy, key),
|
|
217
|
+
status: 'pending',
|
|
218
|
+
lifecycle: '',
|
|
219
|
+
branch: '',
|
|
220
|
+
repositoryName: '',
|
|
221
|
+
_isGroupHeader: true,
|
|
222
|
+
_groupCount: features.length,
|
|
223
|
+
_children: sortedChildren,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// Sort groups
|
|
227
|
+
roots.sort((a, b) => {
|
|
228
|
+
const cmp = a.name.localeCompare(b.name);
|
|
229
|
+
return groupSortDir === 'asc' ? cmp : -cmp;
|
|
230
|
+
});
|
|
231
|
+
return roots;
|
|
232
|
+
}
|
|
233
|
+
// ── Component ────────────────────────────────────────────────
|
|
234
|
+
export function FeatureTreeTable({ data, className, onFeatureClick, groupBy = null, groupSortDir = 'asc', itemSortField = 'name', itemSortDir = 'asc', }) {
|
|
161
235
|
const containerRef = useRef(null);
|
|
162
236
|
const tabulatorRef = useRef(null);
|
|
163
237
|
const onFeatureClickRef = useRef(onFeatureClick);
|
|
@@ -168,29 +242,37 @@ export function FeatureTreeTable({ data, repos, className, onFeatureClick, }) {
|
|
|
168
242
|
useEffect(() => {
|
|
169
243
|
if (!containerRef.current)
|
|
170
244
|
return;
|
|
171
|
-
const
|
|
172
|
-
const columns = buildColumns(stableOnFeatureClick);
|
|
245
|
+
const isGrouped = !!groupBy;
|
|
246
|
+
const columns = buildColumns({ onFeatureClick: stableOnFeatureClick, groupBy });
|
|
247
|
+
const tableData = isGrouped
|
|
248
|
+
? buildGroupedTree(data, groupBy, groupSortDir, itemSortField, itemSortDir)
|
|
249
|
+
: data;
|
|
173
250
|
const table = new Tabulator(containerRef.current, {
|
|
174
|
-
data:
|
|
251
|
+
data: tableData,
|
|
175
252
|
columns,
|
|
176
|
-
dataTree: true,
|
|
177
|
-
dataTreeStartExpanded: true,
|
|
178
253
|
layout: 'fitColumns',
|
|
179
254
|
height: '100%',
|
|
180
|
-
placeholder: 'No
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
255
|
+
placeholder: 'No features found',
|
|
256
|
+
...(isGrouped
|
|
257
|
+
? {
|
|
258
|
+
dataTree: true,
|
|
259
|
+
dataTreeStartExpanded: true,
|
|
260
|
+
rowFormatter: (row) => {
|
|
261
|
+
const rowData = row.getData();
|
|
262
|
+
if (rowData._isGroupHeader) {
|
|
263
|
+
row.getElement().classList.add('tabulator-row-repo-group');
|
|
264
|
+
}
|
|
265
|
+
},
|
|
186
266
|
}
|
|
187
|
-
|
|
267
|
+
: {
|
|
268
|
+
initialSort: [{ column: 'repositoryName', dir: 'asc' }],
|
|
269
|
+
}),
|
|
188
270
|
});
|
|
189
271
|
tabulatorRef.current = table;
|
|
190
272
|
return () => {
|
|
191
273
|
table.destroy();
|
|
192
274
|
tabulatorRef.current = null;
|
|
193
275
|
};
|
|
194
|
-
}, [data,
|
|
276
|
+
}, [data, stableOnFeatureClick, groupBy, groupSortDir, itemSortField, itemSortDir]);
|
|
195
277
|
return (_jsx("div", { "data-testid": "feature-tree-table", className: cn('h-full w-full', className), ref: containerRef }));
|
|
196
278
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { FeatureTreeTable, buildTreeData } from './feature-tree-table.js';
|
|
2
|
-
export type { FeatureTreeTableProps, FeatureTreeRow, InventoryRepo } from './feature-tree-table.js';
|
|
1
|
+
export { FeatureTreeTable, buildTreeData, buildGroupedTree, displayLabel, } from './feature-tree-table.js';
|
|
2
|
+
export type { FeatureTreeTableProps, FeatureTreeRow, InventoryRepo, GroupByField, SortDir, } from './feature-tree-table.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/feature-tree-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/feature-tree-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,OAAO,GACR,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { FeatureTreeTable, buildTreeData } from './feature-tree-table.js';
|
|
1
|
+
export { FeatureTreeTable, buildTreeData, buildGroupedTree, displayLabel, } from './feature-tree-table.js';
|
|
@@ -36,7 +36,7 @@ export function getFeatureFlags() {
|
|
|
36
36
|
? isEnabled(process.env.NEXT_PUBLIC_FLAG_ENV_DEPLOY)
|
|
37
37
|
: true,
|
|
38
38
|
debug: false,
|
|
39
|
-
githubImport:
|
|
39
|
+
githubImport: true,
|
|
40
40
|
adoptBranch: false,
|
|
41
41
|
gitRebaseSync: false,
|
|
42
42
|
reactFileManager: isEnabled(process.env.NEXT_PUBLIC_FLAG_REACT_FILE_MANAGER),
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "إرفاق ملف (قابل للتكرار)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "الميزة الأصلية غير موجودة: {{id}}",
|
|
213
216
|
"attachmentNotFound": "المرفق غير موجود: {{path}}",
|
|
214
217
|
"spinnerText": "جارٍ التفكير",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "فشل الاستنساخ: {{error}}",
|
|
439
442
|
"failedToImport": "فشل استيراد المستودع"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "عرض المستودعات المتتبعة",
|
|
443
455
|
"title": "المستودعات",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Eine Datei anhängen (wiederholbar)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Übergeordnetes Feature nicht gefunden: {{id}}",
|
|
213
216
|
"attachmentNotFound": "Anhang nicht gefunden: {{path}}",
|
|
214
217
|
"spinnerText": "Denke nach",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Klonen fehlgeschlagen: {{error}}",
|
|
439
442
|
"failedToImport": "Repository konnte nicht importiert werden"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "Verfolgte Repositories auflisten",
|
|
443
455
|
"title": "Repositories",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Attach a file (repeatable)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Parent feature not found: {{id}}",
|
|
213
216
|
"attachmentNotFound": "Attachment not found: {{path}}",
|
|
214
217
|
"spinnerText": "Thinking",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Clone failed: {{error}}",
|
|
439
442
|
"failedToImport": "Failed to import repository"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "List tracked repositories",
|
|
443
455
|
"title": "Repositories",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Adjuntar un archivo (repetible)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Funcionalidad padre no encontrada: {{id}}",
|
|
213
216
|
"attachmentNotFound": "Archivo adjunto no encontrado: {{path}}",
|
|
214
217
|
"spinnerText": "Pensando",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Error al clonar: {{error}}",
|
|
439
442
|
"failedToImport": "Error al importar el repositorio"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "Listar repositorios rastreados",
|
|
443
455
|
"title": "Repositorios",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Joindre un fichier (répétable)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Fonctionnalité parente introuvable : {{id}}",
|
|
213
216
|
"attachmentNotFound": "Pièce jointe introuvable : {{path}}",
|
|
214
217
|
"spinnerText": "Réflexion en cours",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Échec du clonage : {{error}}",
|
|
439
442
|
"failedToImport": "Échec de l'importation du dépôt"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "Lister les dépôts suivis",
|
|
443
455
|
"title": "Dépôts",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "צרף קובץ (ניתן לחזור)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "פיצ'ר הורה לא נמצא: {{id}}",
|
|
213
216
|
"attachmentNotFound": "קובץ מצורף לא נמצא: {{path}}",
|
|
214
217
|
"spinnerText": "חושב",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "השיבוט נכשל: {{error}}",
|
|
439
442
|
"failedToImport": "ייבוא המאגר נכשל"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "הצג רשימת מאגרים מנוטרים",
|
|
443
455
|
"title": "מאגרים",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Anexar um arquivo (repetível)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Recurso pai não encontrado: {{id}}",
|
|
213
216
|
"attachmentNotFound": "Anexo não encontrado: {{path}}",
|
|
214
217
|
"spinnerText": "Pensando",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Clone falhou: {{error}}",
|
|
439
442
|
"failedToImport": "Falha ao importar repositório"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "Listar repositórios rastreados",
|
|
443
455
|
"title": "Repositórios",
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"injectSkillsOption": "Inject curated skills into the worktree",
|
|
210
210
|
"noInjectSkillsOption": "Skip skill injection for this invocation",
|
|
211
211
|
"attachOption": "Прикрепить файл (можно повторять)",
|
|
212
|
+
"remoteOption": "GitHub URL or owner/repo — clone (or fork) then create feature",
|
|
213
|
+
"remoteConflict": "Cannot use --remote with --repo. --remote clones the repo first.",
|
|
214
|
+
"forkedInfo": "Auto-forked (no push access to original)",
|
|
212
215
|
"parentNotFound": "Родительская функция не найдена: {{id}}",
|
|
213
216
|
"attachmentNotFound": "Вложение не найдено: {{path}}",
|
|
214
217
|
"spinnerText": "Обработка",
|
|
@@ -438,6 +441,15 @@
|
|
|
438
441
|
"cloneFailed": "Ошибка клонирования: {{error}}",
|
|
439
442
|
"failedToImport": "Не удалось импортировать репозиторий"
|
|
440
443
|
},
|
|
444
|
+
"initRemote": {
|
|
445
|
+
"description": "Create a GitHub repository from the current local repo",
|
|
446
|
+
"nameArgument": "Repository name (defaults to directory name)",
|
|
447
|
+
"publicOption": "Create a public repository (default: private)",
|
|
448
|
+
"orgOption": "GitHub organization to create the repo under",
|
|
449
|
+
"created": "GitHub repository created: {{name}}",
|
|
450
|
+
"urlLabel": "URL:",
|
|
451
|
+
"failed": "Failed to create GitHub repository"
|
|
452
|
+
},
|
|
441
453
|
"ls": {
|
|
442
454
|
"description": "Показать список отслеживаемых репозиториев",
|
|
443
455
|
"title": "Репозитории",
|