@shepai/cli 1.175.1-pr537.fc6a92c → 1.176.0
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/AgentConfig.yaml +0 -3
- package/apis/json-schema/AgentType.yaml +0 -1
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts +1 -3
- package/dist/packages/core/src/application/ports/output/agents/agent-executor.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/agent-run-repository.interface.d.ts +0 -7
- package/dist/packages/core/src/application/ports/output/agents/agent-run-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts +0 -7
- package/dist/packages/core/src/application/ports/output/agents/phase-timing-repository.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -3
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.d.ts +1 -3
- package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/get-agent-session.use-case.js +4 -6
- package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.d.ts +1 -3
- package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/list-agent-sessions.use-case.js +4 -6
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +1 -3
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +7 -9
- package/dist/packages/core/src/application/use-cases/features/rebase-feature-on-main.use-case.js +2 -2
- package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.d.ts +2 -5
- package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/settings/check-onboarding-status.use-case.js +6 -28
- package/dist/packages/core/src/domain/generated/output.d.ts +35 -42
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.js +1 -7
- package/dist/packages/core/src/infrastructure/di/container.d.ts +0 -3
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +501 -27
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/agent-run.mapper.js +2 -2
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -1
- 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 -6
- package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/agent-run.repository.js +0 -8
- package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts +0 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-phase-timing.repository.js +3 -11
- 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 +2 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +0 -10
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-runner.service.js +4 -4
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts +7 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +35 -19
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts +7 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/codex-cli-executor.service.js +30 -17
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts +7 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/copilot-cli-executor.service.js +34 -23
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +7 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +16 -21
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts +7 -3
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +33 -21
- package/dist/packages/core/src/infrastructure/services/agents/common/types.d.ts +0 -5
- package/dist/packages/core/src/infrastructure/services/agents/common/types.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/types.js +1 -5
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +1 -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 +7 -16
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +47 -44
- 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 +853 -121
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts +70 -19
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/interactive/interactive-session.service.js +991 -44
- package/dist/packages/core/src/infrastructure/services/notifications/notification-watcher.service.js +3 -3
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +1 -1
- package/dist/src/presentation/cli/commands/agent/show.command.js +2 -3
- package/dist/src/presentation/cli/commands/feat/new.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +1 -1
- package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts.map +1 -1
- package/dist/src/presentation/tui/prompts/agent-select.prompt.js +0 -5
- package/dist/src/presentation/web/app/actions/agent-setup-flag.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/agent-setup-flag.js +2 -3
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +2 -18
- package/dist/src/presentation/web/app/actions/get-all-agent-models.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-all-agent-models.js +0 -2
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +3 -4
- package/dist/src/presentation/web/app/actions/get-supported-models.js +3 -2
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-workflow-defaults.js +2 -3
- package/dist/src/presentation/web/app/actions/open-ide.js +3 -2
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +0 -15
- package/dist/src/presentation/web/app/actions/update-model.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/update-model.js +2 -3
- package/dist/src/presentation/web/app/api/agent-events/health/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/health/route.js +12 -9
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts +14 -7
- package/dist/src/presentation/web/app/api/agent-events/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/agent-events/route.js +301 -20
- package/dist/src/presentation/web/app/api/attachments/preview/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/attachments/preview/route.js +1 -5
- package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/attachments/upload/route.js +2 -2
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/attachments/upload-from-path/route.js +2 -2
- package/dist/src/presentation/web/app/api/cli-upgrade/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/cli-upgrade/route.js +1 -3
- package/dist/src/presentation/web/app/api/deployment-logs/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/deployment-logs/route.js +6 -2
- package/dist/src/presentation/web/app/api/dialog/pick-files/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/dialog/pick-files/route.js +2 -3
- package/dist/src/presentation/web/app/api/directory/list/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/directory/list/route.js +5 -8
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/feature-logs/route.js +6 -2
- package/dist/src/presentation/web/app/api/graph-data/route.d.ts +4 -1
- package/dist/src/presentation/web/app/api/graph-data/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/graph-data/route.js +2 -8
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/mark-read/route.js +3 -2
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/messages/route.js +10 -5
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/respond/route.js +5 -5
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stop/route.js +3 -2
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/[featureId]/stream/route.js +6 -2
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/chat/turn-statuses/route.js +3 -2
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/messages/route.js +10 -5
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/route.js +6 -3
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/[id]/stream/route.js +6 -2
- package/dist/src/presentation/web/app/api/interactive/sessions/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/interactive/sessions/route.js +3 -2
- package/dist/src/presentation/web/app/api/npm-version/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/npm-version/route.js +2 -2
- package/dist/src/presentation/web/app/api/sessions/route.d.ts +15 -1
- package/dist/src/presentation/web/app/api/sessions/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/sessions/route.js +3 -2
- package/dist/src/presentation/web/app/api/sessions-batch/route.d.ts +8 -1
- package/dist/src/presentation/web/app/api/sessions-batch/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/sessions-batch/route.js +3 -2
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/tools/[id]/install/route.js +2 -2
- package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/tools/[id]/install/stream/route.js +1 -3
- package/dist/src/presentation/web/app/api/tools/[id]/launch/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/tools/[id]/launch/route.js +2 -2
- package/dist/src/presentation/web/app/api/tools/route.d.ts.map +1 -1
- package/dist/src/presentation/web/app/api/tools/route.js +2 -2
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +1 -2
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +0 -12
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.js +2 -2
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +1 -1
- 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-node/agent-type-icons.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.js +0 -2
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/agent-type-icons.stories.js +0 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/AgentModelPicker/index.js +3 -7
- package/dist/src/presentation/web/components/features/settings/ModelPicker/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/ModelPicker/index.js +2 -2
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +0 -1
- package/dist/src/presentation/web/hooks/use-agent-events.js +1 -5
- package/dist/src/presentation/web/lib/is-same-shep-instance.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/is-same-shep-instance.js +5 -2
- package/dist/translations/ar/common.json +1 -0
- package/dist/translations/ar/tui.json +0 -4
- package/dist/translations/ar/web.json +0 -1
- package/dist/translations/de/common.json +1 -0
- package/dist/translations/de/tui.json +0 -1
- package/dist/translations/de/web.json +0 -1
- package/dist/translations/en/common.json +1 -0
- package/dist/translations/en/tui.json +0 -4
- package/dist/translations/en/web.json +0 -1
- package/dist/translations/es/common.json +1 -0
- package/dist/translations/es/tui.json +0 -4
- package/dist/translations/es/web.json +0 -1
- package/dist/translations/fr/common.json +1 -0
- package/dist/translations/fr/tui.json +0 -4
- package/dist/translations/fr/web.json +0 -1
- package/dist/translations/he/common.json +1 -0
- package/dist/translations/he/tui.json +0 -4
- package/dist/translations/he/web.json +0 -1
- package/dist/translations/pt/common.json +1 -0
- package/dist/translations/pt/tui.json +0 -4
- package/dist/translations/pt/web.json +0 -1
- package/dist/translations/ru/common.json +1 -0
- package/dist/translations/ru/tui.json +0 -4
- package/dist/translations/ru/web.json +0 -1
- package/dist/translations/uk/cli.json +631 -0
- package/dist/translations/uk/common.json +56 -0
- package/dist/translations/uk/tui.json +134 -0
- package/dist/translations/uk/web.json +615 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -7
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +58 -73
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +54 -69
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -91
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +76 -91
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +56 -71
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +56 -71
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +54 -69
- package/web/.next/server/app/(dashboard)/chat/page.js +5 -5
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/create/page.js +5 -5
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +76 -91
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +76 -91
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +54 -69
- package/web/.next/server/app/(dashboard)/page.js +5 -5
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +56 -71
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +5 -5
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +56 -71
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +5 -5
- 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.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +12 -27
- package/web/.next/server/app/_not-found/page.js +3 -3
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/agent-events/route.js +2 -2
- package/web/.next/server/app/api/agent-events/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload/route.js.nft.json +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js +1 -1
- package/web/.next/server/app/api/attachments/upload-from-path/route.js.nft.json +1 -1
- package/web/.next/server/app/api/deployment-logs/route.js +1 -2
- package/web/.next/server/app/api/deployment-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/directory/list/route.js +1 -1
- package/web/.next/server/app/api/directory/list/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/feature-logs/route.js +1 -2
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +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]/mark-read/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/mark-read/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/respond/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stop/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js +1 -2
- package/web/.next/server/app/api/interactive/chat/[featureId]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js +1 -1
- package/web/.next/server/app/api/interactive/chat/turn-statuses/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/route.js +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js +1 -2
- package/web/.next/server/app/api/interactive/sessions/[id]/stream/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/sessions/route.js +1 -1
- package/web/.next/server/app/api/interactive/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/npm-version/route.js +1 -1
- package/web/.next/server/app/api/npm-version/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions/route.js +1 -1
- package/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js +1 -1
- package/web/.next/server/app/api/sessions-batch/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/install/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/[id]/launch/route.js +1 -1
- package/web/.next/server/app/api/tools/[id]/launch/route.js.nft.json +1 -1
- package/web/.next/server/app/api/tools/route.js +1 -1
- package/web/.next/server/app/api/tools/route.js.nft.json +1 -1
- package/web/.next/server/app/features/page/server-reference-manifest.json +12 -27
- package/web/.next/server/app/features/page.js +3 -3
- 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/server-reference-manifest.json +18 -33
- package/web/.next/server/app/settings/page.js +3 -4
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +26 -41
- package/web/.next/server/app/skills/page.js +4 -4
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +22 -37
- package/web/.next/server/app/tools/page.js +4 -4
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +12 -27
- package/web/.next/server/app/version/page.js +4 -4
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js +12 -0
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__10852c5c._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b1074db._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b1074db._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__2b71641f._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__2bb675ff._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__2f61738a._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__2f61738a._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__31598852._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__31598852._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__31944fa2._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__32b04219._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__332c8d91._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__3b72e8b0._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js +12 -0
- package/web/.next/server/chunks/[root-of-the-server]__4408a5ba._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__6565a045._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js +24 -0
- package/web/.next/server/chunks/[root-of-the-server]__8a281f8d._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__8f8d6afe._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js +9 -0
- package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__ab4951b1._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__acea6565._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__acea6565._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +3 -0
- package/web/.next/server/chunks/{[root-of-the-server]__f1aeae12._.js.map → [root-of-the-server]__b2f9a412._.js.map} +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__c78383b1._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +3 -3
- package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js +3 -3
- package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js.map +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__937ba94e._.js → [root-of-the-server]__e3692208._.js} +2 -2
- package/web/.next/server/chunks/[root-of-the-server]__ea653642._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__ea653642._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__fc6fd958._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__fc6fd958._.js.map +1 -0
- 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]__1cd4327c._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1cd4327c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1f389e5d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__08e7a080._.js → [root-of-the-server]__22d17c66._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__08e7a080._.js.map → [root-of-the-server]__22d17c66._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ff332bfb._.js.map → [root-of-the-server]__357d99f9._.js.map} +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]__540c615f._.js +4 -0
- 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]__16c1388b._.js → [root-of-the-server]__69dd3217._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__16c1388b._.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]__7528eb6f._.js +1 -1
- 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 +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b7b96453._.js.map +1 -0
- 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]__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/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_5747febb._.js → _1e08a336._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1e08a336._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_ed2f2799._.js → _295fffde._.js} +2 -2
- package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_4db4ac1e._.js → _388d1127._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4db4ac1e._.js.map → _388d1127._.js.map} +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/_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 +1 -1
- package/web/.next/server/chunks/ssr/_6abfa39e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_080b0309._.js → _8f0d3f07._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_080b0309._.js.map → _8f0d3f07._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_31b68712._.js → _98d94927._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_31b68712._.js.map → _98d94927._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_819f193a._.js → _d9c0a97a._.js} +2 -2
- package/web/.next/server/chunks/ssr/_d9c0a97a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e680c57c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
- package/web/.next/server/chunks/ssr/_f8c55130._.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_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_actions_open-ide_ts_baaca5d5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{src_presentation_web_components_349d9f24._.js → src_presentation_web_components_895e5bfa._.js} +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.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/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_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/chunks/ssr/translations_23dd5e7e._.js +1 -1
- package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +535 -683
- package/web/.next/static/chunks/{10383f321355e09b.js → 0ffb3738269e15c3.js} +1 -1
- package/web/.next/static/chunks/236744ff71b1aadf.js +1 -0
- package/web/.next/static/chunks/{05c0a8ed7621ea2a.js → 2cfc6022d74e2716.js} +3 -3
- package/web/.next/static/chunks/302f474e4978cc80.js +3 -0
- package/web/.next/static/chunks/{316b0e4597f2083d.js → 46e2693dbc9262fd.js} +2 -2
- package/web/.next/static/chunks/{6853929058e53d1a.js → 476873a9bac35ec8.js} +1 -1
- package/web/.next/static/chunks/{81347e69998eef38.js → 4ff21d16947ec853.js} +1 -1
- package/web/.next/static/chunks/626277ca9a4cc477.js +1 -0
- package/web/.next/static/chunks/{a1ad19e21b6ad1ad.js → 6304540c7cf2b46a.js} +2 -2
- package/web/.next/static/chunks/{fd319c0e5f3cc20a.js → 71a07df9dcb42227.js} +1 -1
- package/web/.next/static/chunks/{71ad5a4155ddd207.js → 885bb8fc631bf477.js} +1 -1
- package/web/.next/static/chunks/a20f2d6f76f469b7.css +1 -0
- package/web/.next/static/chunks/{8bf91dcd1b3077d7.js → afa7e5d2a48cabc7.js} +1 -1
- package/web/.next/static/chunks/c10c0d6d458453bc.js +1 -0
- package/web/.next/static/chunks/{8a68402c32c6a206.js → e8444bf5f6c35f8b.js} +1 -1
- package/web/.next/static/chunks/eab3d361f7a24510.js +1 -0
- package/web/.next/static/chunks/{6bfcb5d1b3eafd81.js → eda9ee3c22b71a69.js} +1 -1
- package/web/.next/static/chunks/{e610f5d703696b34.js → f17d2d0279b8db35.js} +1 -1
- package/web/.next/static/chunks/f9d948464ed409cb.js +1 -0
- package/apis/json-schema/PermissionMode.yaml +0 -8
- package/dist/packages/core/src/application/ports/output/services/file-system.interface.d.ts +0 -68
- package/dist/packages/core/src/application/ports/output/services/file-system.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/file-system.interface.js +0 -12
- package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.d.ts +0 -29
- package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/process-monitor.interface.js +0 -12
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts +0 -35
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/settings-reader.interface.js +0 -12
- package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.d.ts +0 -61
- package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.d.ts.map +0 -1
- package/dist/packages/core/src/application/use-cases/notifications/poll-agent-events.use-case.js +0 -381
- package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.d.ts +0 -7
- package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/agent-infrastructure.module.js +0 -83
- package/dist/packages/core/src/infrastructure/di/modules/database.module.d.ts +0 -12
- package/dist/packages/core/src/infrastructure/di/modules/database.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/database.module.js +0 -16
- package/dist/packages/core/src/infrastructure/di/modules/interactive.module.d.ts +0 -10
- package/dist/packages/core/src/infrastructure/di/modules/interactive.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/interactive.module.js +0 -43
- package/dist/packages/core/src/infrastructure/di/modules/notifications.module.d.ts +0 -6
- package/dist/packages/core/src/infrastructure/di/modules/notifications.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/notifications.module.js +0 -20
- package/dist/packages/core/src/infrastructure/di/modules/repositories.module.d.ts +0 -6
- package/dist/packages/core/src/infrastructure/di/modules/repositories.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/repositories.module.js +0 -26
- package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts +0 -8
- package/dist/packages/core/src/infrastructure/di/modules/services.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/services.module.js +0 -93
- package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts +0 -6
- package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/use-cases.module.js +0 -164
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts +0 -10
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +0 -200
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.d.ts +0 -14
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/056-add-agent-permission-mode.js +0 -19
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.d.ts +0 -37
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/abstract-agent-executor.js +0 -59
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts +0 -52
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/rovo-dev-executor.service.js +0 -350
- package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.d.ts +0 -26
- package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/filesystem/file-system.service.js +0 -47
- package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.d.ts +0 -19
- package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/filesystem/path-sanitizers.js +0 -38
- package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.d.ts +0 -23
- package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/git/branch-discovery.service.js +0 -185
- package/dist/packages/core/src/infrastructure/services/git/ci-status.service.d.ts +0 -24
- package/dist/packages/core/src/infrastructure/services/git/ci-status.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/git/ci-status.service.js +0 -202
- package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.d.ts +0 -19
- package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/git/diff-analyzer.service.js +0 -173
- package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.d.ts +0 -30
- package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/git/merge-strategy.service.js +0 -341
- package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.d.ts +0 -34
- package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/git/pr-creation.service.js +0 -180
- package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.d.ts +0 -21
- package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/chat-state-builder.js +0 -112
- package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.d.ts +0 -47
- package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/session-boot-sequence.js +0 -381
- package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.d.ts +0 -28
- package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/session-state-manager.js +0 -105
- package/dist/packages/core/src/infrastructure/services/interactive/session-state.d.ts +0 -46
- package/dist/packages/core/src/infrastructure/services/interactive/session-state.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/session-state.js +0 -10
- package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.d.ts +0 -36
- package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/subscriber-notifier.js +0 -60
- package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.d.ts +0 -57
- package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/interactive/turn-executor.js +0 -503
- package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.d.ts +0 -25
- package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/process/process-monitor.service.js +0 -45
- package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.d.ts +0 -15
- package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/settings-reader.adapter.js +0 -28
- package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.d.ts +0 -11
- package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth-for-type.js +0 -147
- package/dist/src/presentation/web/components/common/route-announcer.d.ts +0 -2
- package/dist/src/presentation/web/components/common/route-announcer.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/route-announcer.js +0 -7
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.d.ts +0 -7
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.js +0 -26
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.d.ts +0 -11
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/AgentAvailabilityBadge.stories.js +0 -24
- package/dist/src/presentation/web/hooks/use-agent-availability.d.ts +0 -13
- package/dist/src/presentation/web/hooks/use-agent-availability.d.ts.map +0 -1
- package/dist/src/presentation/web/hooks/use-agent-availability.js +0 -75
- package/dist/src/presentation/web/hooks/use-route-announcer.d.ts +0 -2
- package/dist/src/presentation/web/hooks/use-route-announcer.d.ts.map +0 -1
- package/dist/src/presentation/web/hooks/use-route-announcer.js +0 -16
- package/dist/src/presentation/web/lib/api-error.d.ts +0 -7
- package/dist/src/presentation/web/lib/api-error.d.ts.map +0 -1
- package/dist/src/presentation/web/lib/api-error.js +0 -11
- package/web/.next/server/chunks/[root-of-the-server]__0b88f5f0._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0b88f5f0._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0d0a9973._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__0d0a9973._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__1f18a881._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__1f18a881._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__3d08be55._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__3d08be55._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__419be0d1._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__419be0d1._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__4747e669._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__4747e669._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__475afd97._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__475afd97._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__483ccc90._.js +0 -9
- package/web/.next/server/chunks/[root-of-the-server]__483ccc90._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__5e90f1e9._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__5e90f1e9._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__62634db9._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__62634db9._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__645a6d08._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__645a6d08._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__74f3dc5c._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__74f3dc5c._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__810add7c._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__810add7c._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__8cfd9f70._.js +0 -24
- package/web/.next/server/chunks/[root-of-the-server]__8cfd9f70._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__8ec23770._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__8ec23770._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__93c391fe._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__93c391fe._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__9e8fc40c._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__9e8fc40c._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__a2426aa4._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__a2426aa4._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__a96ee39d._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__a96ee39d._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__e10befc1._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__e10befc1._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__e94a4a75._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__e94a4a75._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__ea7e9dc2._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__ea7e9dc2._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__f1aeae12._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__f7b38c05._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__f7b38c05._.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_f57e8323.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_f57e8323.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_c2027d57.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_c2027d57.js.map +0 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_f70a6774.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_f70a6774.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e34e896._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e34e896._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1eb031d8._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1eb031d8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__35e7da6b._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__35e7da6b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__36eb7673._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__36eb7673._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4576a805._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4576a805._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b51b0071._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b51b0071._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bd113e97._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__bd113e97._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c6f02c81._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c6f02c81._.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]__f13f6a81._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f13f6a81._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ff332bfb._.js +0 -3
- package/web/.next/server/chunks/ssr/_5747febb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_819f193a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ed2f2799._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_064c7e73._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_064c7e73._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_1726dc84._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_1726dc84._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_28c682ee._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_28c682ee._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_2d7b0e7b._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web_2d7b0e7b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bcef11e0.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_bcef11e0.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_02d5029f.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_02d5029f.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_67ca1f81.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_67ca1f81.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b1110b54._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_b1110b54._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_349d9f24._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_d388fcb0._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_d388fcb0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_da61a4f3._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_da61a4f3._.js.map +0 -1
- package/web/.next/static/chunks/1f232a3618b82ac1.css +0 -1
- package/web/.next/static/chunks/2621b35c0c9da177.js +0 -1
- package/web/.next/static/chunks/2a3edcf98f609bb7.js +0 -1
- package/web/.next/static/chunks/3370f8dc24c64ce4.js +0 -1
- package/web/.next/static/chunks/47ed89fae0f1542e.js +0 -1
- package/web/.next/static/chunks/6c1664f584f34e6f.js +0 -1
- package/web/.next/static/chunks/f952f152ac0a4abe.js +0 -3
- package/web/public/icons/agents/rovo-dev.svg +0 -6
- /package/web/.next/server/chunks/{[root-of-the-server]__937ba94e._.js.map → [root-of-the-server]__e3692208._.js.map} +0 -0
- /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_buildManifest.js +0 -0
- /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{8CNKMABoDvNDVQD3DEuB4 → 36ONyC02R4wfFe7iWMQLU}/_ssgManifest.js +0 -0
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Git PR Service
|
|
2
|
+
* Git PR Service Implementation
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - BranchDiscoveryService — branch/remote discovery
|
|
7
|
-
* - CiStatusService — CI status, watch, failure logs, merge verification
|
|
8
|
-
* - PrCreationService — PR creation, GitHub repo creation, PR status
|
|
9
|
-
* - MergeStrategyService — merge, rebase, sync, conflict resolution, stash
|
|
10
|
-
*
|
|
11
|
-
* Preserves the IGitPrService contract and backward-compatible constructor
|
|
12
|
-
* signature so all existing callers (including tests using `new GitPrService(execFn)`)
|
|
13
|
-
* continue to work without modification.
|
|
4
|
+
* Manages git operations for PR creation, merging, and CI status checks.
|
|
5
|
+
* Uses constructor dependency injection for the command executor.
|
|
14
6
|
*/
|
|
15
7
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
16
8
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -25,153 +17,893 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
25
17
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
26
18
|
};
|
|
27
19
|
import { injectable, inject } from 'tsyringe';
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import
|
|
20
|
+
import { GitPrError, GitPrErrorCode, } from '../../../application/ports/output/services/git-pr-service.interface.js';
|
|
21
|
+
import { readFileSync, writeFileSync, unlinkSync } from 'node:fs';
|
|
22
|
+
import { tmpdir } from 'node:os';
|
|
23
|
+
import { join } from 'node:path';
|
|
24
|
+
import yaml from 'js-yaml';
|
|
25
|
+
import { applyPrBranding } from './pr-branding.js';
|
|
33
26
|
let GitPrService = class GitPrService {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
!
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
this.ciStatus = new CiStatusService(execFile);
|
|
55
|
-
this.prCreation = new PrCreationService(execFile);
|
|
56
|
-
this.mergeStrategy = new MergeStrategyService(execFile);
|
|
27
|
+
execFile;
|
|
28
|
+
constructor(execFile) {
|
|
29
|
+
this.execFile = execFile;
|
|
30
|
+
}
|
|
31
|
+
async hasRemote(cwd) {
|
|
32
|
+
const { stdout } = await this.execFile('git', ['remote'], { cwd });
|
|
33
|
+
return stdout.trim().length > 0;
|
|
34
|
+
}
|
|
35
|
+
async getRemoteUrl(cwd) {
|
|
36
|
+
try {
|
|
37
|
+
const { stdout } = await this.execFile('git', ['remote', 'get-url', 'origin'], { cwd });
|
|
38
|
+
const raw = stdout.trim();
|
|
39
|
+
if (!raw)
|
|
40
|
+
return null;
|
|
41
|
+
// Convert SSH URLs to HTTPS: git@github.com:org/repo.git → https://github.com/org/repo
|
|
42
|
+
if (raw.startsWith('git@')) {
|
|
43
|
+
return raw.replace(/^git@([^:]+):/, 'https://$1/').replace(/\.git$/, '');
|
|
44
|
+
}
|
|
45
|
+
// Strip trailing .git from HTTPS URLs
|
|
46
|
+
return raw.replace(/\.git$/, '');
|
|
57
47
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.diffAnalyzer = execFileOrDiffAnalyzer;
|
|
61
|
-
this.branchDiscovery = branchDiscovery;
|
|
62
|
-
this.ciStatus = ciStatus;
|
|
63
|
-
this.prCreation = prCreation;
|
|
64
|
-
this.mergeStrategy = mergeStrategy;
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
65
50
|
}
|
|
66
51
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
52
|
+
async getDefaultBranch(cwd) {
|
|
53
|
+
// 1. Try remote HEAD reference (most reliable when remote exists)
|
|
54
|
+
try {
|
|
55
|
+
const { stdout } = await this.execFile('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], {
|
|
56
|
+
cwd,
|
|
57
|
+
});
|
|
58
|
+
const ref = stdout.trim(); // e.g. "refs/remotes/origin/main"
|
|
59
|
+
if (ref)
|
|
60
|
+
return ref.replace('refs/remotes/origin/', '');
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// No remote HEAD configured — continue to fallbacks
|
|
64
|
+
}
|
|
65
|
+
// 2. Check for common default branch names locally.
|
|
66
|
+
// If both exist, pick the one with the most recent commit.
|
|
67
|
+
const candidates = [];
|
|
68
|
+
for (const name of ['main', 'master']) {
|
|
69
|
+
try {
|
|
70
|
+
const { stdout } = await this.execFile('git', ['rev-parse', '--verify', `refs/heads/${name}`], { cwd });
|
|
71
|
+
if (stdout.trim())
|
|
72
|
+
candidates.push(name);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Branch doesn't exist — try next
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (candidates.length === 1)
|
|
79
|
+
return candidates[0];
|
|
80
|
+
if (candidates.length > 1) {
|
|
81
|
+
// Pick the branch with the most recent commit
|
|
82
|
+
try {
|
|
83
|
+
const { stdout } = await this.execFile('git', [
|
|
84
|
+
'for-each-ref',
|
|
85
|
+
'--sort=-committerdate',
|
|
86
|
+
'--format=%(refname:short)',
|
|
87
|
+
...candidates.map((c) => `refs/heads/${c}`),
|
|
88
|
+
], { cwd });
|
|
89
|
+
const newest = stdout.trim().split('\n')[0];
|
|
90
|
+
if (newest)
|
|
91
|
+
return newest;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Fall through to first candidate
|
|
95
|
+
}
|
|
96
|
+
return candidates[0];
|
|
97
|
+
}
|
|
98
|
+
// 3. Check git config init.defaultBranch (user/system-level default)
|
|
99
|
+
try {
|
|
100
|
+
const { stdout } = await this.execFile('git', ['config', 'init.defaultBranch'], { cwd });
|
|
101
|
+
const configured = stdout.trim();
|
|
102
|
+
if (configured)
|
|
103
|
+
return configured;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Not configured — continue
|
|
107
|
+
}
|
|
108
|
+
// 4. Fall back to current branch ONLY in the main worktree (not feature worktrees).
|
|
109
|
+
// In a feature worktree, symbolic-ref HEAD returns the feature branch, not the default.
|
|
110
|
+
try {
|
|
111
|
+
const gitDir = await this.execFile('git', ['rev-parse', '--git-dir'], { cwd });
|
|
112
|
+
const gitCommonDir = await this.execFile('git', ['rev-parse', '--git-common-dir'], { cwd });
|
|
113
|
+
const isMainWorktree = gitDir.stdout.trim() === gitCommonDir.stdout.trim();
|
|
114
|
+
if (isMainWorktree) {
|
|
115
|
+
const { stdout } = await this.execFile('git', ['symbolic-ref', '--short', 'HEAD'], { cwd });
|
|
116
|
+
const branch = stdout.trim();
|
|
117
|
+
if (branch)
|
|
118
|
+
return branch;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Detached HEAD or other error — continue
|
|
123
|
+
}
|
|
124
|
+
// 5. Ultimate fallback — throw instead of silently guessing
|
|
125
|
+
throw new Error(`Unable to determine default branch for repository at ${cwd}. ` +
|
|
126
|
+
`No remote HEAD, no main/master branch, and no init.defaultBranch configured.`);
|
|
127
|
+
}
|
|
128
|
+
async revParse(cwd, ref) {
|
|
129
|
+
const { stdout } = await this.execFile('git', ['rev-parse', ref], { cwd });
|
|
130
|
+
return stdout.trim();
|
|
131
|
+
}
|
|
132
|
+
async hasUncommittedChanges(cwd) {
|
|
133
|
+
const { stdout } = await this.execFile('git', ['status', '--porcelain'], { cwd });
|
|
134
|
+
return stdout.trim().length > 0;
|
|
135
|
+
}
|
|
136
|
+
async commitAll(cwd, message) {
|
|
137
|
+
try {
|
|
138
|
+
await this.execFile('git', ['add', '-A'], { cwd });
|
|
139
|
+
await this.execFile('git', ['commit', '-m', message], { cwd });
|
|
140
|
+
const { stdout } = await this.execFile('git', ['rev-parse', 'HEAD'], { cwd });
|
|
141
|
+
return stdout.trim();
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
throw this.parseGitError(error);
|
|
145
|
+
}
|
|
76
146
|
}
|
|
77
|
-
|
|
78
|
-
|
|
147
|
+
async push(cwd, branch, setUpstream) {
|
|
148
|
+
const args = ['push'];
|
|
149
|
+
if (setUpstream)
|
|
150
|
+
args.push('--set-upstream');
|
|
151
|
+
args.push('origin', branch);
|
|
152
|
+
try {
|
|
153
|
+
await this.execFile('git', args, { cwd });
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
throw this.parseGitError(error);
|
|
157
|
+
}
|
|
79
158
|
}
|
|
80
|
-
|
|
81
|
-
|
|
159
|
+
async createPr(cwd, prYamlPath) {
|
|
160
|
+
try {
|
|
161
|
+
// Parse pr.yaml to extract PR metadata
|
|
162
|
+
const prYamlContent = readFileSync(prYamlPath, 'utf-8');
|
|
163
|
+
const prData = yaml.load(prYamlContent);
|
|
164
|
+
const title = prData.title ?? 'Untitled PR';
|
|
165
|
+
const body = applyPrBranding(prData.body ?? '');
|
|
166
|
+
const args = ['pr', 'create', '--title', title, '--body', body];
|
|
167
|
+
if (prData.baseBranch) {
|
|
168
|
+
args.push('--base', prData.baseBranch);
|
|
169
|
+
}
|
|
170
|
+
if (prData.headBranch) {
|
|
171
|
+
args.push('--head', prData.headBranch);
|
|
172
|
+
}
|
|
173
|
+
if (prData.labels?.length) {
|
|
174
|
+
args.push('--label', prData.labels.join(','));
|
|
175
|
+
}
|
|
176
|
+
if (prData.draft) {
|
|
177
|
+
args.push('--draft');
|
|
178
|
+
}
|
|
179
|
+
const { stdout } = await this.execFile('gh', args, { cwd });
|
|
180
|
+
const url = stdout.trim();
|
|
181
|
+
const number = this.parsePrNumberFromUrl(url);
|
|
182
|
+
return { url, number };
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
throw this.parseGhError(error);
|
|
186
|
+
}
|
|
82
187
|
}
|
|
83
|
-
|
|
84
|
-
|
|
188
|
+
async mergePr(cwd, prNumber, strategy = 'squash') {
|
|
189
|
+
try {
|
|
190
|
+
await this.execFile('gh', ['pr', 'merge', String(prNumber), `--${strategy}`], {
|
|
191
|
+
cwd,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
196
|
+
const cause = error instanceof Error ? error : undefined;
|
|
197
|
+
throw new GitPrError(message, GitPrErrorCode.MERGE_FAILED, cause);
|
|
198
|
+
}
|
|
199
|
+
// Try to delete the remote branch gracefully — not fatal if it fails
|
|
200
|
+
// (e.g. branch already deleted by GitHub auto-delete, or permissions)
|
|
201
|
+
try {
|
|
202
|
+
await this.execFile('gh', [
|
|
203
|
+
'api',
|
|
204
|
+
'--method',
|
|
205
|
+
'DELETE',
|
|
206
|
+
`repos/{owner}/{repo}/git/refs/heads/${await this.getPrHeadBranch(cwd, prNumber)}`,
|
|
207
|
+
], { cwd });
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Branch deletion is best-effort — log-level concern, not an error
|
|
211
|
+
}
|
|
85
212
|
}
|
|
86
|
-
|
|
87
|
-
|
|
213
|
+
async getPrHeadBranch(cwd, prNumber) {
|
|
214
|
+
const { stdout } = await this.execFile('gh', ['pr', 'view', String(prNumber), '--json', 'headRefName', '--jq', '.headRefName'], { cwd });
|
|
215
|
+
return stdout.trim();
|
|
216
|
+
}
|
|
217
|
+
async localMergeSquash(cwd, featureBranch, baseBranch, commitMessage, hasRemote = false) {
|
|
218
|
+
try {
|
|
219
|
+
// Fetch latest from remote if available
|
|
220
|
+
if (hasRemote) {
|
|
221
|
+
try {
|
|
222
|
+
await this.execFile('git', ['fetch', 'origin'], { cwd });
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Fetch failure is non-fatal — proceed with local state
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Checkout base branch
|
|
229
|
+
await this.execFile('git', ['checkout', baseBranch], { cwd });
|
|
230
|
+
// Pull latest base if remote available
|
|
231
|
+
if (hasRemote) {
|
|
232
|
+
try {
|
|
233
|
+
await this.execFile('git', ['pull', 'origin', baseBranch], { cwd });
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
// Pull failure is non-fatal — proceed with local state
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Clean untracked files that may conflict with the merge (e.g. files created
|
|
240
|
+
// by a prior agent call that leaked into the original repo directory)
|
|
241
|
+
try {
|
|
242
|
+
await this.execFile('git', ['clean', '-fd'], { cwd });
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Clean failure is non-fatal
|
|
246
|
+
}
|
|
247
|
+
// Squash merge the feature branch
|
|
248
|
+
await this.execFile('git', ['merge', '--squash', featureBranch], { cwd });
|
|
249
|
+
// Commit the squash merge (skip if nothing to commit — branches may be equivalent)
|
|
250
|
+
const { stdout: status } = await this.execFile('git', ['status', '--porcelain'], { cwd });
|
|
251
|
+
if (status.trim().length > 0) {
|
|
252
|
+
// Write commit message to a temp file to avoid shell splitting on Windows
|
|
253
|
+
// (DI-injected execFile uses shell: true on Windows, which splits on spaces)
|
|
254
|
+
const msgFile = join(tmpdir(), `shep-merge-msg-${Date.now()}.txt`);
|
|
255
|
+
try {
|
|
256
|
+
writeFileSync(msgFile, commitMessage, 'utf8');
|
|
257
|
+
await this.execFile('git', ['commit', '--file', msgFile], { cwd });
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
try {
|
|
261
|
+
unlinkSync(msgFile);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Cleanup failure is non-fatal
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Delete the feature branch after successful merge
|
|
269
|
+
try {
|
|
270
|
+
await this.execFile('git', ['branch', '-d', featureBranch], { cwd });
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Branch deletion failure is non-fatal (branch may have already been deleted)
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
278
|
+
const cause = error instanceof Error ? error : undefined;
|
|
279
|
+
if (message.includes('CONFLICT') || message.includes('conflict')) {
|
|
280
|
+
throw new GitPrError(`Merge conflict while squash-merging ${featureBranch} into ${baseBranch}: ${message}`, GitPrErrorCode.MERGE_CONFLICT, cause);
|
|
281
|
+
}
|
|
282
|
+
throw new GitPrError(`Local squash merge failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
283
|
+
}
|
|
88
284
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
285
|
+
async mergeBranch(cwd, sourceBranch, targetBranch) {
|
|
286
|
+
try {
|
|
287
|
+
await this.execFile('git', ['checkout', targetBranch], { cwd });
|
|
288
|
+
await this.execFile('git', ['merge', sourceBranch], { cwd });
|
|
289
|
+
await this.execFile('git', ['push'], { cwd });
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
throw this.parseGitError(error);
|
|
293
|
+
}
|
|
92
294
|
}
|
|
93
|
-
|
|
94
|
-
|
|
295
|
+
async getCiStatus(cwd, branch) {
|
|
296
|
+
try {
|
|
297
|
+
const { stdout } = await this.execFile('gh', ['run', 'list', '--branch', branch, '--json', 'conclusion,url', '--limit', '1'], { cwd });
|
|
298
|
+
const runs = JSON.parse(stdout);
|
|
299
|
+
if (runs.length === 0 || !runs[0].conclusion) {
|
|
300
|
+
return { status: 'pending', runUrl: runs[0]?.url };
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
status: runs[0].conclusion === 'success' ? 'success' : 'failure',
|
|
304
|
+
runUrl: runs[0].url,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
throw this.parseGhError(error);
|
|
309
|
+
}
|
|
95
310
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return
|
|
311
|
+
async watchCi(cwd, branch, timeoutMs, intervalSeconds) {
|
|
312
|
+
// Resolve the latest run for the branch BEFORE the try/catch so the
|
|
313
|
+
// runUrl is available in both success and failure return paths.
|
|
314
|
+
let runUrl;
|
|
315
|
+
try {
|
|
316
|
+
// gh run watch requires a run ID — it does not support --branch.
|
|
317
|
+
// First, resolve the latest run ID for the branch via gh run list.
|
|
318
|
+
const { stdout: listOut } = await this.execFile('gh', ['run', 'list', '--branch', branch, '--json', 'databaseId,url', '--limit', '1'], { cwd });
|
|
319
|
+
const runs = JSON.parse(listOut);
|
|
320
|
+
if (runs.length === 0 || !runs[0].databaseId) {
|
|
321
|
+
return { status: 'pending' };
|
|
322
|
+
}
|
|
323
|
+
const runId = String(runs[0].databaseId);
|
|
324
|
+
runUrl = runs[0].url;
|
|
325
|
+
const interval = intervalSeconds ?? 30;
|
|
326
|
+
const args = [
|
|
327
|
+
'run',
|
|
328
|
+
'watch',
|
|
329
|
+
runId,
|
|
330
|
+
'--exit-status',
|
|
331
|
+
'--compact',
|
|
332
|
+
'--interval',
|
|
333
|
+
String(interval),
|
|
334
|
+
];
|
|
335
|
+
const { stdout } = await this.execFile('gh', args, {
|
|
336
|
+
cwd,
|
|
337
|
+
...(timeoutMs ? { timeout: timeoutMs } : {}),
|
|
338
|
+
});
|
|
339
|
+
// gh run watch --exit-status exits 0 when the run succeeds.
|
|
340
|
+
// If we reach here (no exception), CI passed — no need for fragile stdout parsing.
|
|
341
|
+
return {
|
|
342
|
+
status: 'success',
|
|
343
|
+
runUrl,
|
|
344
|
+
logExcerpt: stdout.trim(),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
349
|
+
const cause = error instanceof Error ? error : undefined;
|
|
350
|
+
if (message.includes('timed out') || message.includes('timeout')) {
|
|
351
|
+
throw new GitPrError(message, GitPrErrorCode.CI_TIMEOUT, cause);
|
|
352
|
+
}
|
|
353
|
+
// gh run watch --exit-status exits non-zero when the run fails.
|
|
354
|
+
// Node.js execFile produces errors with a numeric `code` (exit code) and
|
|
355
|
+
// stdout/stderr from the process. The error.message is typically
|
|
356
|
+
// "Command failed: gh run watch <id> --exit-status\n" — detect this by
|
|
357
|
+
// checking for a numeric exit code or the "Command failed" prefix.
|
|
358
|
+
const exitCode = error?.code;
|
|
359
|
+
const hasNumericExitCode = typeof exitCode === 'number';
|
|
360
|
+
const isCommandFailure = message.includes('Command failed') || message.includes('exit code');
|
|
361
|
+
if (hasNumericExitCode || isCommandFailure) {
|
|
362
|
+
// Build a useful log excerpt from stdout/stderr if available
|
|
363
|
+
const errObj = error;
|
|
364
|
+
const parts = [errObj.stdout, errObj.stderr, message].filter(Boolean);
|
|
365
|
+
return { status: 'failure', runUrl, logExcerpt: parts.join('\n').trim() };
|
|
366
|
+
}
|
|
367
|
+
throw new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
|
|
368
|
+
}
|
|
99
369
|
}
|
|
100
|
-
|
|
101
|
-
|
|
370
|
+
async deleteBranch(cwd, branch, deleteRemote) {
|
|
371
|
+
try {
|
|
372
|
+
await this.execFile('git', ['branch', '-d', branch], { cwd });
|
|
373
|
+
if (deleteRemote) {
|
|
374
|
+
await this.execFile('git', ['push', 'origin', '--delete', branch], { cwd });
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
throw this.parseGitError(error);
|
|
379
|
+
}
|
|
102
380
|
}
|
|
103
|
-
|
|
104
|
-
|
|
381
|
+
async getPrDiffSummary(cwd, baseBranch) {
|
|
382
|
+
const { stdout: diffStat } = await this.execFile('git', ['diff', '--stat', `${baseBranch}...HEAD`], { cwd });
|
|
383
|
+
const { stdout: logOutput } = await this.execFile('git', ['log', '--oneline', `${baseBranch}...HEAD`], { cwd });
|
|
384
|
+
return this.parseDiffStat(diffStat, logOutput);
|
|
105
385
|
}
|
|
106
|
-
|
|
107
|
-
|
|
386
|
+
async getFileDiffs(cwd, baseBranch) {
|
|
387
|
+
try {
|
|
388
|
+
const { stdout } = await this.execFile('git', ['diff', '--unified=3', `${baseBranch}...HEAD`], { cwd });
|
|
389
|
+
return this.parseUnifiedDiff(stdout);
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
throw this.parseGitError(error);
|
|
393
|
+
}
|
|
108
394
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
395
|
+
parseUnifiedDiff(rawDiff) {
|
|
396
|
+
if (!rawDiff.trim())
|
|
397
|
+
return [];
|
|
398
|
+
const files = [];
|
|
399
|
+
// Split on "diff --git" boundaries (keeping the delimiter)
|
|
400
|
+
const fileSections = rawDiff.split(/^(?=diff --git )/m).filter((s) => s.trim());
|
|
401
|
+
for (const section of fileSections) {
|
|
402
|
+
const file = this.parseFileDiff(section);
|
|
403
|
+
if (file)
|
|
404
|
+
files.push(file);
|
|
405
|
+
}
|
|
406
|
+
return files;
|
|
407
|
+
}
|
|
408
|
+
parseFileDiff(section) {
|
|
409
|
+
const lines = section.split('\n');
|
|
410
|
+
if (lines.length === 0)
|
|
411
|
+
return null;
|
|
412
|
+
// Parse header: "diff --git a/path b/path"
|
|
413
|
+
const headerMatch = lines[0].match(/^diff --git a\/(.+?) b\/(.+)$/);
|
|
414
|
+
if (!headerMatch)
|
|
415
|
+
return null;
|
|
416
|
+
const oldPath = headerMatch[1];
|
|
417
|
+
const newPath = headerMatch[2];
|
|
418
|
+
// Determine status from diff header lines
|
|
419
|
+
let status = 'modified';
|
|
420
|
+
const isNew = lines.some((l) => l.startsWith('new file mode'));
|
|
421
|
+
const isDeleted = lines.some((l) => l.startsWith('deleted file mode'));
|
|
422
|
+
const isRenamed = lines.some((l) => l.startsWith('rename from'));
|
|
423
|
+
if (isNew)
|
|
424
|
+
status = 'added';
|
|
425
|
+
else if (isDeleted)
|
|
426
|
+
status = 'deleted';
|
|
427
|
+
else if (isRenamed)
|
|
428
|
+
status = 'renamed';
|
|
429
|
+
// Parse hunks
|
|
430
|
+
const hunks = [];
|
|
431
|
+
let currentHunk = null;
|
|
432
|
+
let oldLineNum = 0;
|
|
433
|
+
let newLineNum = 0;
|
|
434
|
+
let additions = 0;
|
|
435
|
+
let deletions = 0;
|
|
436
|
+
for (const line of lines) {
|
|
437
|
+
const hunkHeaderMatch = line.match(/^@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@(.*)$/);
|
|
438
|
+
if (hunkHeaderMatch) {
|
|
439
|
+
currentHunk = { header: line, lines: [] };
|
|
440
|
+
hunks.push(currentHunk);
|
|
441
|
+
oldLineNum = parseInt(hunkHeaderMatch[1], 10);
|
|
442
|
+
newLineNum = parseInt(hunkHeaderMatch[2], 10);
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
if (!currentHunk)
|
|
446
|
+
continue;
|
|
447
|
+
if (line.startsWith('+')) {
|
|
448
|
+
const diffLine = {
|
|
449
|
+
type: 'added',
|
|
450
|
+
content: line.slice(1),
|
|
451
|
+
newNumber: newLineNum,
|
|
452
|
+
};
|
|
453
|
+
currentHunk.lines.push(diffLine);
|
|
454
|
+
newLineNum++;
|
|
455
|
+
additions++;
|
|
456
|
+
}
|
|
457
|
+
else if (line.startsWith('-')) {
|
|
458
|
+
const diffLine = {
|
|
459
|
+
type: 'removed',
|
|
460
|
+
content: line.slice(1),
|
|
461
|
+
oldNumber: oldLineNum,
|
|
462
|
+
};
|
|
463
|
+
currentHunk.lines.push(diffLine);
|
|
464
|
+
oldLineNum++;
|
|
465
|
+
deletions++;
|
|
466
|
+
}
|
|
467
|
+
else if (line.startsWith(' ')) {
|
|
468
|
+
const diffLine = {
|
|
469
|
+
type: 'context',
|
|
470
|
+
content: line.slice(1),
|
|
471
|
+
oldNumber: oldLineNum,
|
|
472
|
+
newNumber: newLineNum,
|
|
473
|
+
};
|
|
474
|
+
currentHunk.lines.push(diffLine);
|
|
475
|
+
oldLineNum++;
|
|
476
|
+
newLineNum++;
|
|
477
|
+
}
|
|
478
|
+
// Skip lines like ""
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
path: newPath,
|
|
482
|
+
oldPath: isRenamed || oldPath !== newPath ? oldPath : undefined,
|
|
483
|
+
additions,
|
|
484
|
+
deletions,
|
|
485
|
+
status,
|
|
486
|
+
hunks,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
async listPrStatuses(cwd) {
|
|
490
|
+
try {
|
|
491
|
+
const { stdout } = await this.execFile('gh', [
|
|
492
|
+
'pr',
|
|
493
|
+
'list',
|
|
494
|
+
'--json',
|
|
495
|
+
'number,state,url,headRefName,mergeable',
|
|
496
|
+
'--state',
|
|
497
|
+
'all',
|
|
498
|
+
'--limit',
|
|
499
|
+
'100',
|
|
500
|
+
], { cwd });
|
|
501
|
+
const prs = JSON.parse(stdout);
|
|
502
|
+
return prs.map((pr) => ({
|
|
503
|
+
number: pr.number,
|
|
504
|
+
state: this.normalizeGhState(pr.state),
|
|
505
|
+
url: pr.url,
|
|
506
|
+
headRefName: pr.headRefName,
|
|
507
|
+
mergeable: this.parseMergeable(pr.mergeable),
|
|
508
|
+
}));
|
|
509
|
+
}
|
|
510
|
+
catch (error) {
|
|
511
|
+
throw this.parseGhError(error);
|
|
512
|
+
}
|
|
112
513
|
}
|
|
113
|
-
|
|
114
|
-
|
|
514
|
+
async getMergeableStatus(cwd, prNumber) {
|
|
515
|
+
try {
|
|
516
|
+
const { stdout } = await this.execFile('gh', ['pr', 'view', String(prNumber), '--json', 'mergeable'], { cwd });
|
|
517
|
+
const result = JSON.parse(stdout);
|
|
518
|
+
return this.parseMergeable(result.mergeable);
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
throw this.parseGhError(error);
|
|
522
|
+
}
|
|
115
523
|
}
|
|
116
|
-
|
|
117
|
-
|
|
524
|
+
async verifyMerge(cwd, featureBranch, baseBranch, premergeBaseSha) {
|
|
525
|
+
// Resolve the feature branch ref — the local branch may have been deleted
|
|
526
|
+
// after a squash merge (git branch -d succeeds when pushed to remote).
|
|
527
|
+
// Fall back to the remote tracking branch if the local ref is gone.
|
|
528
|
+
const resolvedRef = await this.resolveRef(cwd, featureBranch);
|
|
529
|
+
if (!resolvedRef)
|
|
530
|
+
return false;
|
|
531
|
+
// First try: true merge (feature branch is ancestor of base)
|
|
532
|
+
try {
|
|
533
|
+
await this.execFile('git', ['merge-base', '--is-ancestor', resolvedRef, baseBranch], {
|
|
534
|
+
cwd,
|
|
535
|
+
});
|
|
536
|
+
return true;
|
|
537
|
+
}
|
|
538
|
+
catch {
|
|
539
|
+
// Not a true merge — check for squash merge by comparing tree content.
|
|
540
|
+
// After a squash merge, all changes from the feature branch are on the base
|
|
541
|
+
// branch, so `git diff featureBranch baseBranch` should produce no output.
|
|
542
|
+
}
|
|
543
|
+
try {
|
|
544
|
+
await this.execFile('git', ['diff', '--quiet', resolvedRef, baseBranch], { cwd });
|
|
545
|
+
// --quiet exits 0 when there's no diff → squash merge verified
|
|
546
|
+
return true;
|
|
547
|
+
}
|
|
548
|
+
catch {
|
|
549
|
+
// Exit code 1 = diff exists (not merged), other errors also mean unverified.
|
|
550
|
+
// Fall through to premergeBaseSha check if available.
|
|
551
|
+
}
|
|
552
|
+
// Third fallback: if the caller recorded the base branch HEAD before the merge
|
|
553
|
+
// agent ran, check whether it advanced. This handles agents that legitimately
|
|
554
|
+
// modify the tree during squash merge (e.g. adding .gitignore, removing
|
|
555
|
+
// node_modules). If baseBranch HEAD moved forward, the agent committed something.
|
|
556
|
+
if (premergeBaseSha) {
|
|
557
|
+
try {
|
|
558
|
+
const { stdout } = await this.execFile('git', ['rev-parse', baseBranch], { cwd });
|
|
559
|
+
const currentSha = stdout.trim();
|
|
560
|
+
return currentSha !== premergeBaseSha;
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return false;
|
|
118
567
|
}
|
|
119
|
-
|
|
120
|
-
|
|
568
|
+
/**
|
|
569
|
+
* Resolve a branch name to a valid git ref, falling back to the remote
|
|
570
|
+
* tracking branch if the local ref has been deleted.
|
|
571
|
+
*/
|
|
572
|
+
async resolveRef(cwd, branch) {
|
|
573
|
+
// Try local ref first
|
|
574
|
+
try {
|
|
575
|
+
await this.execFile('git', ['rev-parse', '--verify', branch], { cwd });
|
|
576
|
+
return branch;
|
|
577
|
+
}
|
|
578
|
+
catch {
|
|
579
|
+
// Local ref doesn't exist
|
|
580
|
+
}
|
|
581
|
+
// Try remote tracking branch
|
|
582
|
+
const remoteRef = `origin/${branch}`;
|
|
583
|
+
try {
|
|
584
|
+
await this.execFile('git', ['rev-parse', '--verify', remoteRef], { cwd });
|
|
585
|
+
return remoteRef;
|
|
586
|
+
}
|
|
587
|
+
catch {
|
|
588
|
+
return null;
|
|
589
|
+
}
|
|
121
590
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
591
|
+
async getFailureLogs(cwd, runId, _branch, logMaxChars = 50_000) {
|
|
592
|
+
try {
|
|
593
|
+
const { stdout } = await this.execFile('gh', ['run', 'view', runId, '--log-failed'], {
|
|
594
|
+
cwd,
|
|
595
|
+
});
|
|
596
|
+
return this.truncateLog(stdout, logMaxChars, runId);
|
|
597
|
+
}
|
|
598
|
+
catch (error) {
|
|
599
|
+
throw this.parseGhError(error);
|
|
600
|
+
}
|
|
125
601
|
}
|
|
126
|
-
|
|
127
|
-
|
|
602
|
+
truncateLog(output, maxChars, runId) {
|
|
603
|
+
if (output.length <= maxChars)
|
|
604
|
+
return output;
|
|
605
|
+
return `${output.slice(0, maxChars)}\n[Log truncated at ${maxChars} chars — full log available via gh run view ${runId}]`;
|
|
606
|
+
}
|
|
607
|
+
parseMergeable(value) {
|
|
608
|
+
if (value === 'MERGEABLE')
|
|
609
|
+
return true;
|
|
610
|
+
if (value === 'CONFLICTING')
|
|
611
|
+
return false;
|
|
612
|
+
return undefined; // UNKNOWN or missing
|
|
613
|
+
}
|
|
614
|
+
normalizeGhState(state) {
|
|
615
|
+
const normalized = state.charAt(0).toUpperCase() + state.slice(1).toLowerCase();
|
|
616
|
+
return normalized;
|
|
617
|
+
}
|
|
618
|
+
parseGitError(error) {
|
|
619
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
620
|
+
const cause = error instanceof Error ? error : undefined;
|
|
621
|
+
// Rebase-specific: detect "CONFLICT" during rebase operations
|
|
622
|
+
if (message.includes('CONFLICT') && message.includes('rebase')) {
|
|
623
|
+
return new GitPrError(message, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
624
|
+
}
|
|
625
|
+
// Sync-specific: non-fast-forward or diverged branch
|
|
626
|
+
if (message.includes('non-fast-forward') || message.includes('diverged')) {
|
|
627
|
+
return new GitPrError(message, GitPrErrorCode.SYNC_FAILED, cause);
|
|
628
|
+
}
|
|
629
|
+
if (message.includes('rejected') || message.includes('conflict')) {
|
|
630
|
+
return new GitPrError(message, GitPrErrorCode.MERGE_CONFLICT, cause);
|
|
631
|
+
}
|
|
632
|
+
if (message.includes('Authentication') || message.includes('auth') || message.includes('403')) {
|
|
633
|
+
return new GitPrError(message, GitPrErrorCode.AUTH_FAILURE, cause);
|
|
634
|
+
}
|
|
635
|
+
return new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
|
|
636
|
+
}
|
|
637
|
+
parseGhError(error) {
|
|
638
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
639
|
+
const cause = error instanceof Error ? error : undefined;
|
|
640
|
+
const errnoCode = error?.code;
|
|
641
|
+
if (errnoCode === 'ENOENT' || message.includes('ENOENT')) {
|
|
642
|
+
return new GitPrError(message, GitPrErrorCode.GH_NOT_FOUND, cause);
|
|
643
|
+
}
|
|
644
|
+
if (message.includes('Authentication') || message.includes('auth') || message.includes('403')) {
|
|
645
|
+
return new GitPrError(message, GitPrErrorCode.AUTH_FAILURE, cause);
|
|
646
|
+
}
|
|
647
|
+
return new GitPrError(message, GitPrErrorCode.GIT_ERROR, cause);
|
|
648
|
+
}
|
|
649
|
+
parsePrNumberFromUrl(url) {
|
|
650
|
+
const match = url.match(/\/pull\/(\d+)/);
|
|
651
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
652
|
+
}
|
|
653
|
+
async createGitHubRepo(cwd, name, options) {
|
|
654
|
+
const repoName = options.org ? `${options.org}/${name}` : name;
|
|
655
|
+
const visibilityFlag = options.isPrivate ? '--private' : '--public';
|
|
656
|
+
const args = [
|
|
657
|
+
'repo',
|
|
658
|
+
'create',
|
|
659
|
+
repoName,
|
|
660
|
+
visibilityFlag,
|
|
661
|
+
'--source=.',
|
|
662
|
+
'--remote=origin',
|
|
663
|
+
'--push',
|
|
664
|
+
];
|
|
665
|
+
try {
|
|
666
|
+
const { stdout, stderr } = await this.execFile('gh', args, { cwd });
|
|
667
|
+
// `gh repo create` emits status lines to stdout/stderr that include the
|
|
668
|
+
// created repo URL somewhere in the output (e.g. "✓ Created repository
|
|
669
|
+
// org/name on GitHub\n https://github.com/org/name"). Scrape the first
|
|
670
|
+
// github.com URL we can find rather than returning the raw multi-line blob.
|
|
671
|
+
const combined = `${stdout}\n${stderr}`;
|
|
672
|
+
const parsedUrl = this.extractGitHubUrl(combined);
|
|
673
|
+
if (parsedUrl) {
|
|
674
|
+
return parsedUrl;
|
|
675
|
+
}
|
|
676
|
+
// Fall back to `gh repo view` from the cwd — after --push, origin is the
|
|
677
|
+
// authoritative source of the repo URL.
|
|
678
|
+
return await this.queryRepoUrl(cwd);
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
const ghError = this.parseGhError(error);
|
|
682
|
+
if (ghError.code === GitPrErrorCode.GIT_ERROR) {
|
|
683
|
+
throw new GitPrError(ghError.message, GitPrErrorCode.REPO_CREATE_FAILED, ghError.cause);
|
|
684
|
+
}
|
|
685
|
+
throw ghError;
|
|
686
|
+
}
|
|
128
687
|
}
|
|
129
|
-
|
|
130
|
-
|
|
688
|
+
/**
|
|
689
|
+
* Extracts the first github.com repository URL from a blob of text.
|
|
690
|
+
* Returns a normalized URL without a trailing `.git` suffix or punctuation.
|
|
691
|
+
*/
|
|
692
|
+
extractGitHubUrl(text) {
|
|
693
|
+
const match = text.match(/https:\/\/github\.com\/[\w.-]+\/[\w.-]+/);
|
|
694
|
+
if (!match) {
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
return match[0].replace(/\.git$/, '').replace(/[).,;]+$/, '');
|
|
131
698
|
}
|
|
132
|
-
|
|
133
|
-
|
|
699
|
+
/**
|
|
700
|
+
* Queries the current repo's URL via `gh repo view --json url`. Used as a
|
|
701
|
+
* fallback when URL parsing from `gh repo create` output fails.
|
|
702
|
+
*/
|
|
703
|
+
async queryRepoUrl(cwd) {
|
|
704
|
+
const { stdout } = await this.execFile('gh', ['repo', 'view', '--json', 'url', '--jq', '.url'], { cwd });
|
|
705
|
+
return stdout.trim();
|
|
134
706
|
}
|
|
135
|
-
|
|
136
|
-
|
|
707
|
+
async addRemote(cwd, remoteName, remoteUrl) {
|
|
708
|
+
try {
|
|
709
|
+
await this.execFile('git', ['remote', 'add', remoteName, remoteUrl], { cwd });
|
|
710
|
+
}
|
|
711
|
+
catch (error) {
|
|
712
|
+
throw this.parseGitError(error);
|
|
713
|
+
}
|
|
137
714
|
}
|
|
138
|
-
|
|
139
|
-
|
|
715
|
+
parseDiffStat(diffStat, logOutput) {
|
|
716
|
+
const summaryLine = diffStat.trim().split('\n').pop() ?? '';
|
|
717
|
+
const filesMatch = summaryLine.match(/(\d+)\s+files?\s+changed/);
|
|
718
|
+
const addMatch = summaryLine.match(/(\d+)\s+insertions?\(\+\)/);
|
|
719
|
+
const delMatch = summaryLine.match(/(\d+)\s+deletions?\(-\)/);
|
|
720
|
+
const commitCount = logOutput
|
|
721
|
+
.trim()
|
|
722
|
+
.split('\n')
|
|
723
|
+
.filter((l) => l.trim()).length;
|
|
724
|
+
return {
|
|
725
|
+
filesChanged: filesMatch ? parseInt(filesMatch[1], 10) : 0,
|
|
726
|
+
additions: addMatch ? parseInt(addMatch[1], 10) : 0,
|
|
727
|
+
deletions: delMatch ? parseInt(delMatch[1], 10) : 0,
|
|
728
|
+
commitCount,
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
// --- Rebase & Sync operations ---
|
|
732
|
+
async syncMain(cwd, baseBranch) {
|
|
733
|
+
try {
|
|
734
|
+
// Detect current branch
|
|
735
|
+
const { stdout } = await this.execFile('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
|
|
736
|
+
const currentBranch = stdout.trim();
|
|
737
|
+
if (currentBranch === baseBranch) {
|
|
738
|
+
// On the base branch — use git pull --ff-only
|
|
739
|
+
await this.execFile('git', ['pull', '--ff-only', 'origin', baseBranch], { cwd });
|
|
740
|
+
}
|
|
741
|
+
else {
|
|
742
|
+
// On a different branch — fetch the remote ref only (updates origin/<baseBranch>).
|
|
743
|
+
// We intentionally do NOT update the local <baseBranch> ref because it may be
|
|
744
|
+
// checked out in another worktree, which causes git to refuse the update with:
|
|
745
|
+
// "fatal: refusing to fetch into branch 'refs/heads/main' checked out at ..."
|
|
746
|
+
await this.execFile('git', ['fetch', 'origin', baseBranch], { cwd });
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
catch (error) {
|
|
750
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
751
|
+
const cause = error instanceof Error ? error : undefined;
|
|
752
|
+
if (message.includes('non-fast-forward') ||
|
|
753
|
+
message.includes('Not possible to fast-forward') ||
|
|
754
|
+
message.includes('diverged')) {
|
|
755
|
+
throw new GitPrError(`Cannot fast-forward '${baseBranch}': local branch has diverged from remote. ` +
|
|
756
|
+
`Resolve the divergence manually with 'git checkout ${baseBranch} && git reset --hard origin/${baseBranch}' ` +
|
|
757
|
+
`if you want to discard local changes on ${baseBranch}.`, GitPrErrorCode.SYNC_FAILED, cause);
|
|
758
|
+
}
|
|
759
|
+
throw new GitPrError(`Failed to sync '${baseBranch}' with remote: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
760
|
+
}
|
|
140
761
|
}
|
|
141
|
-
|
|
142
|
-
|
|
762
|
+
async rebaseOnMain(cwd, featureBranch, baseBranch) {
|
|
763
|
+
// Check for dirty worktree before starting
|
|
764
|
+
const dirty = await this.hasUncommittedChanges(cwd);
|
|
765
|
+
if (dirty) {
|
|
766
|
+
throw new GitPrError(`Cannot rebase: working directory has uncommitted changes. ` +
|
|
767
|
+
`Please commit or stash your changes before rebasing.`, GitPrErrorCode.GIT_ERROR);
|
|
768
|
+
}
|
|
769
|
+
// Checkout the feature branch
|
|
770
|
+
try {
|
|
771
|
+
await this.execFile('git', ['checkout', featureBranch], { cwd });
|
|
772
|
+
}
|
|
773
|
+
catch (error) {
|
|
774
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
775
|
+
const cause = error instanceof Error ? error : undefined;
|
|
776
|
+
if (message.includes('did not match') ||
|
|
777
|
+
message.includes('not a commit') ||
|
|
778
|
+
message.includes('pathspec')) {
|
|
779
|
+
throw new GitPrError(`Branch '${featureBranch}' not found.`, GitPrErrorCode.BRANCH_NOT_FOUND, cause);
|
|
780
|
+
}
|
|
781
|
+
throw new GitPrError(`Failed to checkout '${featureBranch}': ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
782
|
+
}
|
|
783
|
+
// Rebase onto origin/<baseBranch> (the remote-tracking ref).
|
|
784
|
+
// We use origin/<baseBranch> rather than the local <baseBranch> because:
|
|
785
|
+
// 1. syncMain fetches origin/<baseBranch> — it's always up-to-date
|
|
786
|
+
// 2. The local <baseBranch> may be checked out in another worktree and stale
|
|
787
|
+
const rebaseTarget = `origin/${baseBranch}`;
|
|
788
|
+
try {
|
|
789
|
+
await this.execFile('git', ['rebase', rebaseTarget], { cwd });
|
|
790
|
+
}
|
|
791
|
+
catch (error) {
|
|
792
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
793
|
+
const cause = error instanceof Error ? error : undefined;
|
|
794
|
+
// Detect rebase conflict from git stderr/exit code
|
|
795
|
+
if (message.includes('CONFLICT') || message.includes('could not apply')) {
|
|
796
|
+
// Get the list of conflicted files to include in the error message
|
|
797
|
+
let conflictedFiles = [];
|
|
798
|
+
try {
|
|
799
|
+
conflictedFiles = await this.getConflictedFiles(cwd);
|
|
800
|
+
}
|
|
801
|
+
catch {
|
|
802
|
+
// Failed to get conflicted files — still report the conflict
|
|
803
|
+
}
|
|
804
|
+
const fileList = conflictedFiles.length > 0 ? ` Conflicted files: ${conflictedFiles.join(', ')}` : '';
|
|
805
|
+
throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' encountered conflicts.${fileList}`, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
806
|
+
}
|
|
807
|
+
throw new GitPrError(`Rebase of '${featureBranch}' onto '${baseBranch}' failed: ${message}`, GitPrErrorCode.GIT_ERROR, cause);
|
|
808
|
+
}
|
|
143
809
|
}
|
|
144
|
-
|
|
145
|
-
|
|
810
|
+
async getConflictedFiles(cwd) {
|
|
811
|
+
try {
|
|
812
|
+
const { stdout } = await this.execFile('git', ['diff', '--name-only', '--diff-filter=U'], {
|
|
813
|
+
cwd,
|
|
814
|
+
});
|
|
815
|
+
return stdout
|
|
816
|
+
.trim()
|
|
817
|
+
.split('\n')
|
|
818
|
+
.filter((f) => f.length > 0)
|
|
819
|
+
.map((f) => f.replace(/\\/g, '/'));
|
|
820
|
+
}
|
|
821
|
+
catch (error) {
|
|
822
|
+
throw this.parseGitError(error);
|
|
823
|
+
}
|
|
146
824
|
}
|
|
147
|
-
|
|
148
|
-
|
|
825
|
+
async stageFiles(cwd, files) {
|
|
826
|
+
try {
|
|
827
|
+
await this.execFile('git', ['add', ...files], { cwd });
|
|
828
|
+
}
|
|
829
|
+
catch (error) {
|
|
830
|
+
throw this.parseGitError(error);
|
|
831
|
+
}
|
|
149
832
|
}
|
|
150
|
-
|
|
151
|
-
|
|
833
|
+
async rebaseContinue(cwd) {
|
|
834
|
+
try {
|
|
835
|
+
await this.execFile('git', ['rebase', '--continue'], {
|
|
836
|
+
cwd,
|
|
837
|
+
env: { ...process.env, GIT_EDITOR: 'true' },
|
|
838
|
+
});
|
|
839
|
+
}
|
|
840
|
+
catch (error) {
|
|
841
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
842
|
+
const cause = error instanceof Error ? error : undefined;
|
|
843
|
+
if (message.includes('CONFLICT') || message.includes('could not apply')) {
|
|
844
|
+
throw new GitPrError(`Rebase continue encountered new conflicts: ${message}`, GitPrErrorCode.REBASE_CONFLICT, cause);
|
|
845
|
+
}
|
|
846
|
+
throw this.parseGitError(error);
|
|
847
|
+
}
|
|
152
848
|
}
|
|
153
|
-
|
|
154
|
-
|
|
849
|
+
async rebaseAbort(cwd) {
|
|
850
|
+
try {
|
|
851
|
+
await this.execFile('git', ['rebase', '--abort'], { cwd });
|
|
852
|
+
}
|
|
853
|
+
catch (error) {
|
|
854
|
+
throw this.parseGitError(error);
|
|
855
|
+
}
|
|
155
856
|
}
|
|
156
|
-
|
|
157
|
-
|
|
857
|
+
async stash(cwd, message) {
|
|
858
|
+
try {
|
|
859
|
+
const args = ['stash', 'push'];
|
|
860
|
+
if (message) {
|
|
861
|
+
args.push('-m', message);
|
|
862
|
+
}
|
|
863
|
+
const { stdout } = await this.execFile('git', args, { cwd });
|
|
864
|
+
// git stash push outputs "No local changes to save" when clean
|
|
865
|
+
return !stdout.includes('No local changes to save');
|
|
866
|
+
}
|
|
867
|
+
catch (error) {
|
|
868
|
+
throw this.parseGitError(error);
|
|
869
|
+
}
|
|
158
870
|
}
|
|
159
|
-
|
|
160
|
-
|
|
871
|
+
async stashPop(cwd) {
|
|
872
|
+
try {
|
|
873
|
+
await this.execFile('git', ['stash', 'pop'], { cwd });
|
|
874
|
+
}
|
|
875
|
+
catch (error) {
|
|
876
|
+
throw this.parseGitError(error);
|
|
877
|
+
}
|
|
161
878
|
}
|
|
162
|
-
|
|
163
|
-
|
|
879
|
+
async stashDrop(cwd) {
|
|
880
|
+
try {
|
|
881
|
+
await this.execFile('git', ['stash', 'drop'], { cwd });
|
|
882
|
+
}
|
|
883
|
+
catch (error) {
|
|
884
|
+
throw this.parseGitError(error);
|
|
885
|
+
}
|
|
164
886
|
}
|
|
165
|
-
|
|
166
|
-
|
|
887
|
+
async getBranchSyncStatus(cwd, featureBranch, baseBranch) {
|
|
888
|
+
try {
|
|
889
|
+
const remoteRef = `origin/${baseBranch}`;
|
|
890
|
+
const [aheadResult, behindResult] = await Promise.all([
|
|
891
|
+
this.execFile('git', ['rev-list', '--count', `${remoteRef}..${featureBranch}`], { cwd }),
|
|
892
|
+
this.execFile('git', ['rev-list', '--count', `${featureBranch}..${remoteRef}`], { cwd }),
|
|
893
|
+
]);
|
|
894
|
+
return {
|
|
895
|
+
ahead: parseInt(aheadResult.stdout.trim(), 10) || 0,
|
|
896
|
+
behind: parseInt(behindResult.stdout.trim(), 10) || 0,
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
catch (error) {
|
|
900
|
+
throw this.parseGitError(error);
|
|
901
|
+
}
|
|
167
902
|
}
|
|
168
903
|
};
|
|
169
904
|
GitPrService = __decorate([
|
|
170
905
|
injectable(),
|
|
171
906
|
__param(0, inject('ExecFunction')),
|
|
172
|
-
__metadata("design:paramtypes", [
|
|
173
|
-
CiStatusService,
|
|
174
|
-
PrCreationService,
|
|
175
|
-
MergeStrategyService])
|
|
907
|
+
__metadata("design:paramtypes", [Function])
|
|
176
908
|
], GitPrService);
|
|
177
909
|
export { GitPrService };
|