reviewflow 3.17.1 → 3.19.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/CHANGELOG.md +15 -0
- package/dist/config/projectConfig.d.ts +8 -0
- package/dist/config/projectConfig.d.ts.map +1 -1
- package/dist/config/projectConfig.js +59 -7
- package/dist/config/projectConfig.js.map +1 -1
- package/dist/dashboard/index.html +303 -175
- package/dist/dashboard/modules/budgetSettings.d.ts.map +1 -1
- package/dist/dashboard/modules/budgetSettings.js +2 -4
- package/dist/dashboard/modules/budgetSettings.js.map +1 -1
- package/dist/dashboard/modules/desktopNotifications.d.ts.map +1 -1
- package/dist/dashboard/modules/desktopNotifications.js +1 -0
- package/dist/dashboard/modules/desktopNotifications.js.map +1 -1
- package/dist/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/dashboard/modules/i18n.js +12 -0
- package/dist/dashboard/modules/i18n.js.map +1 -1
- package/dist/dashboard/modules/pendingReviews.d.ts +49 -0
- package/dist/dashboard/modules/pendingReviews.d.ts.map +1 -0
- package/dist/dashboard/modules/pendingReviews.js +80 -0
- package/dist/dashboard/modules/pendingReviews.js.map +1 -0
- package/dist/dashboard/styles.css +162 -8
- package/dist/frameworks/config/configLoader.d.ts +2 -0
- package/dist/frameworks/config/configLoader.d.ts.map +1 -1
- package/dist/frameworks/config/configLoader.js +27 -2
- package/dist/frameworks/config/configLoader.js.map +1 -1
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +57 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/websocket.d.ts +1 -0
- package/dist/main/websocket.d.ts.map +1 -1
- package/dist/main/websocket.js +11 -0
- package/dist/main/websocket.js.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts.map +1 -1
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js +24 -6
- package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +2 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +54 -6
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts +6 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +76 -21
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.d.ts +8 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js +2 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js.map +1 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.d.ts +29 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.js +4 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.js.map +1 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.d.ts +94 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js +40 -0
- package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js.map +1 -0
- package/dist/modules/review-execution/entities/progress/agentDefinition.type.d.ts +4 -0
- package/dist/modules/review-execution/entities/progress/agentDefinition.type.d.ts.map +1 -1
- package/dist/modules/review-execution/entities/progress/agentDefinition.type.js +42 -0
- package/dist/modules/review-execution/entities/progress/agentDefinition.type.js.map +1 -1
- package/dist/modules/review-execution/entities/progress/reviewFocus.type.d.ts +8 -0
- package/dist/modules/review-execution/entities/progress/reviewFocus.type.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/progress/reviewFocus.type.js +30 -0
- package/dist/modules/review-execution/entities/progress/reviewFocus.type.js.map +1 -0
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts +13 -0
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts.map +1 -0
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js +34 -0
- package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js.map +1 -0
- package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.d.ts +16 -0
- package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.d.ts.map +1 -0
- package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.js +81 -0
- package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.js.map +1 -0
- package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.d.ts +25 -0
- package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.d.ts.map +1 -0
- package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.js +41 -0
- package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.js.map +1 -0
- package/dist/modules/review-execution/services/processorRegistry.d.ts +15 -0
- package/dist/modules/review-execution/services/processorRegistry.d.ts.map +1 -0
- package/dist/modules/review-execution/services/processorRegistry.js +23 -0
- package/dist/modules/review-execution/services/processorRegistry.js.map +1 -0
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts +32 -0
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts.map +1 -0
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js +29 -0
- package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js.map +1 -0
- package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.d.ts +26 -0
- package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.d.ts.map +1 -0
- package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.js +22 -0
- package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.js.map +1 -0
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts +36 -0
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts.map +1 -0
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js +36 -0
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js.map +1 -0
- package/dist/modules/review-execution/usecases/listPendingReviews.usecase.d.ts +11 -0
- package/dist/modules/review-execution/usecases/listPendingReviews.usecase.d.ts.map +1 -0
- package/dist/modules/review-execution/usecases/listPendingReviews.usecase.js +10 -0
- package/dist/modules/review-execution/usecases/listPendingReviews.usecase.js.map +1 -0
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts +2 -0
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +22 -4
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js +161 -0
- package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js +1 -0
- package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/reviewFocus.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/reviewFocus.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/reviewFocus.acceptance.test.js +114 -0
- package/dist/tests/acceptance/reviewFocus.acceptance.test.js.map +1 -0
- package/dist/tests/factories/config.factory.d.ts.map +1 -1
- package/dist/tests/factories/config.factory.js +1 -0
- package/dist/tests/factories/config.factory.js.map +1 -1
- package/dist/tests/factories/pendingReviewRequest.factory.d.ts +5 -0
- package/dist/tests/factories/pendingReviewRequest.factory.d.ts.map +1 -0
- package/dist/tests/factories/pendingReviewRequest.factory.js +25 -0
- package/dist/tests/factories/pendingReviewRequest.factory.js.map +1 -0
- package/dist/tests/factories/projectConfig.factory.d.ts +21 -0
- package/dist/tests/factories/projectConfig.factory.d.ts.map +1 -0
- package/dist/tests/factories/projectConfig.factory.js +43 -0
- package/dist/tests/factories/projectConfig.factory.js.map +1 -0
- package/dist/tests/stubs/pendingReviewRequest.stub.d.ts +14 -0
- package/dist/tests/stubs/pendingReviewRequest.stub.d.ts.map +1 -0
- package/dist/tests/stubs/pendingReviewRequest.stub.js +29 -0
- package/dist/tests/stubs/pendingReviewRequest.stub.js.map +1 -0
- package/dist/tests/units/config/projectConfig.test.js +101 -1
- package/dist/tests/units/config/projectConfig.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/pendingReviews.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/pendingReviews.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/pendingReviews.test.js +60 -0
- package/dist/tests/units/dashboard/modules/pendingReviews.test.js.map +1 -0
- package/dist/tests/units/frameworks/config/configLoader.test.js +85 -0
- package/dist/tests/units/frameworks/config/configLoader.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +130 -0
- package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.js +32 -0
- package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.js +108 -0
- package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.js +73 -0
- package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js +114 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.js +67 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.js +40 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/processorRegistry.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/processorRegistry.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/processorRegistry.test.js +54 -0
- package/dist/tests/units/modules/review-execution/services/processorRegistry.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js +86 -0
- package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.js +50 -0
- package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js +134 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.js +27 -0
- package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.19.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.18.0...reviewflow-v3.19.0) (2026-05-24)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
* **review-execution:** add SPEC-174 semi-auto trigger mode ([#188](https://github.com/DGouron/review-flow/issues/188)) ([4971431](https://github.com/DGouron/review-flow/commit/497143115432a7be92d7bfd62fdf124e994d2875))
|
|
14
|
+
|
|
15
|
+
## [3.18.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.17.1...reviewflow-v3.18.0) (2026-05-23)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
* **dashboard:** sidebar layout + Claude economics accordion ([#191](https://github.com/DGouron/review-flow/issues/191)) ([73f8b29](https://github.com/DGouron/review-flow/commit/73f8b29ce2678a6d67b78ee6da9ebbc72e95f402))
|
|
21
|
+
* **review-focus:** implement SPEC-48 (front/back/fullstack/doc) ([#189](https://github.com/DGouron/review-flow/issues/189)) ([d494b8f](https://github.com/DGouron/review-flow/commit/d494b8fcb3cb6046525a8232ae362a8013c7e916))
|
|
22
|
+
|
|
8
23
|
## [3.17.1](https://github.com/DGouron/review-flow/compare/reviewflow-v3.17.0...reviewflow-v3.17.1) (2026-05-23)
|
|
9
24
|
|
|
10
25
|
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { AgentDefinition } from '../modules/review-execution/entities/progress/agentDefinition.type.js';
|
|
2
2
|
import type { Language } from '../modules/shared-kernel/entities/language/language.schema.js';
|
|
3
3
|
import type { RoutingPolicy } from '../modules/review-execution/entities/modelRouting/modelRouting.schema.js';
|
|
4
|
+
import { type ReviewFocus } from '../modules/review-execution/entities/progress/reviewFocus.type.js';
|
|
4
5
|
export interface ProjectConfig {
|
|
5
6
|
github: boolean;
|
|
6
7
|
gitlab: boolean;
|
|
7
8
|
defaultModel: 'haiku' | 'sonnet' | 'opus';
|
|
8
9
|
reviewSkill: string;
|
|
9
10
|
reviewFollowupSkill: string;
|
|
11
|
+
reviewFocus?: ReviewFocus;
|
|
10
12
|
language: Language;
|
|
11
13
|
retentionDays: number;
|
|
12
14
|
agents?: AgentDefinition[];
|
|
@@ -24,6 +26,12 @@ export declare function loadProjectConfig(localPath: string): ProjectConfig | un
|
|
|
24
26
|
* Get agents from project config or undefined for defaults
|
|
25
27
|
*/
|
|
26
28
|
export declare function getProjectAgents(localPath: string): AgentDefinition[] | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve agents for a project: explicit agents array first, then focus-derived defaults.
|
|
31
|
+
* Returns undefined when no explicit array and no focus are configured, leaving the caller
|
|
32
|
+
* free to fall back to the legacy DEFAULT_AGENTS.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getProjectAgentsOrFocusDefaults(localPath: string): AgentDefinition[] | undefined;
|
|
27
35
|
/**
|
|
28
36
|
* Get language from project config, defaulting to 'en'
|
|
29
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sEAAsE,CAAC;AAC5G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yEAAyE,CAAC;
|
|
1
|
+
{"version":3,"file":"projectConfig.d.ts","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sEAAsE,CAAC;AAC5G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yEAAyE,CAAC;AAC7G,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,kEAAkE,CAAC;AAG1E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAuED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAyE9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOjF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,GAChB,eAAe,EAAE,GAAG,SAAS,CAgB/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAO9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,GAAG,SAAS,CAOlF"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { REVIEW_FOCUS_VALUES, defaultAgentsForFocus, isReviewFocus, reviewSkillForFocus, } from '../modules/review-execution/entities/progress/reviewFocus.type.js';
|
|
4
|
+
import { logWarn } from '../frameworks/logging/logBuffer.js';
|
|
3
5
|
/**
|
|
4
6
|
* Validate agents array structure
|
|
5
7
|
*/
|
|
@@ -44,6 +46,18 @@ function parseRoutingPolicy(value) {
|
|
|
44
46
|
}
|
|
45
47
|
return undefined;
|
|
46
48
|
}
|
|
49
|
+
function formatReviewFocusValues() {
|
|
50
|
+
return REVIEW_FOCUS_VALUES.map(value => `'${value}'`).join(', ');
|
|
51
|
+
}
|
|
52
|
+
function parseReviewFocus(value) {
|
|
53
|
+
if (value === undefined || value === null) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
if (!isReviewFocus(value)) {
|
|
57
|
+
throw new Error(`Invalid reviewFocus: must be ${formatReviewFocusValues()}`);
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
47
61
|
/**
|
|
48
62
|
* Load project configuration from .claude/reviews/config.json
|
|
49
63
|
* @param localPath - Path to the project root directory
|
|
@@ -57,13 +71,24 @@ export function loadProjectConfig(localPath) {
|
|
|
57
71
|
}
|
|
58
72
|
const rawContent = readFileSync(configPath, 'utf-8');
|
|
59
73
|
const parsed = JSON.parse(rawContent);
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
74
|
+
const reviewFocus = parseReviewFocus(parsed.reviewFocus);
|
|
75
|
+
const hasExplicitReviewSkill = typeof parsed.reviewSkill === 'string' && parsed.reviewSkill.length > 0;
|
|
76
|
+
// Validate required fields. reviewSkill is required UNLESS a valid reviewFocus is present.
|
|
77
|
+
const baseRequiredFields = ['github', 'gitlab', 'defaultModel', 'reviewFollowupSkill'];
|
|
78
|
+
for (const field of baseRequiredFields) {
|
|
63
79
|
if (!(field in parsed)) {
|
|
64
80
|
throw new Error(`Project config missing required field: ${field}`);
|
|
65
81
|
}
|
|
66
82
|
}
|
|
83
|
+
if (!hasExplicitReviewSkill && reviewFocus === undefined) {
|
|
84
|
+
throw new Error('Project config missing required field: reviewSkill');
|
|
85
|
+
}
|
|
86
|
+
if (hasExplicitReviewSkill && reviewFocus !== undefined) {
|
|
87
|
+
logWarn('Both reviewFocus and reviewSkill set — reviewSkill takes precedence', { reviewSkill: parsed.reviewSkill, reviewFocus });
|
|
88
|
+
}
|
|
89
|
+
const resolvedReviewSkill = hasExplicitReviewSkill
|
|
90
|
+
? String(parsed.reviewSkill)
|
|
91
|
+
: reviewSkillForFocus(reviewFocus);
|
|
67
92
|
// Validate agents if present
|
|
68
93
|
if ('agents' in parsed && parsed.agents !== undefined) {
|
|
69
94
|
if (!validateAgents(parsed.agents)) {
|
|
@@ -76,18 +101,22 @@ export function loadProjectConfig(localPath) {
|
|
|
76
101
|
throw new Error('Invalid followupAgents format: must be array of { name: string, displayName: string }');
|
|
77
102
|
}
|
|
78
103
|
}
|
|
79
|
-
|
|
104
|
+
const config = {
|
|
80
105
|
github: Boolean(parsed.github),
|
|
81
106
|
gitlab: Boolean(parsed.gitlab),
|
|
82
107
|
defaultModel: parsed.defaultModel === 'opus' ? 'opus' : parsed.defaultModel === 'haiku' ? 'haiku' : 'sonnet',
|
|
83
|
-
reviewSkill:
|
|
108
|
+
reviewSkill: resolvedReviewSkill,
|
|
84
109
|
reviewFollowupSkill: String(parsed.reviewFollowupSkill),
|
|
85
110
|
language: parsed.language === 'fr' ? 'fr' : 'en',
|
|
86
111
|
retentionDays: parseRetentionDays(parsed.retentionDays),
|
|
87
|
-
agents: parsed.agents,
|
|
88
|
-
followupAgents: parsed.followupAgents,
|
|
112
|
+
agents: validateAgents(parsed.agents) ? parsed.agents : undefined,
|
|
113
|
+
followupAgents: validateAgents(parsed.followupAgents) ? parsed.followupAgents : undefined,
|
|
89
114
|
routingPolicy: parseRoutingPolicy(parsed.routingPolicy),
|
|
90
115
|
};
|
|
116
|
+
if (reviewFocus !== undefined) {
|
|
117
|
+
config.reviewFocus = reviewFocus;
|
|
118
|
+
}
|
|
119
|
+
return config;
|
|
91
120
|
}
|
|
92
121
|
/**
|
|
93
122
|
* Get agents from project config or undefined for defaults
|
|
@@ -101,6 +130,29 @@ export function getProjectAgents(localPath) {
|
|
|
101
130
|
return undefined;
|
|
102
131
|
}
|
|
103
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Resolve agents for a project: explicit agents array first, then focus-derived defaults.
|
|
135
|
+
* Returns undefined when no explicit array and no focus are configured, leaving the caller
|
|
136
|
+
* free to fall back to the legacy DEFAULT_AGENTS.
|
|
137
|
+
*/
|
|
138
|
+
export function getProjectAgentsOrFocusDefaults(localPath) {
|
|
139
|
+
try {
|
|
140
|
+
const config = loadProjectConfig(localPath);
|
|
141
|
+
if (!config) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
if (config.agents !== undefined) {
|
|
145
|
+
return config.agents;
|
|
146
|
+
}
|
|
147
|
+
if (config.reviewFocus !== undefined) {
|
|
148
|
+
return defaultAgentsForFocus(config.reviewFocus);
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
104
156
|
/**
|
|
105
157
|
* Get language from project config, defaulting to 'en'
|
|
106
158
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"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"}
|