@shepai/cli 1.38.0 → 1.40.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/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
- package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts +5 -4
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/approve-agent-run.use-case.js +36 -14
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts +12 -3
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/agents/reject-agent-run.use-case.js +88 -8
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.d.ts +35 -0
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.d.ts.map +1 -0
- package/dist/packages/core/src/application/use-cases/agents/review-feature.use-case.js +88 -0
- package/dist/packages/core/src/domain/generated/output.d.ts +102 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +2 -0
- 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 +5 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-validator.service.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts +52 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +337 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts +51 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +21 -2
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +31 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +19 -3
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +101 -16
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts +2 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/requirements.prompt.js +53 -27
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/phase-timing-context.js +28 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts +3 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/state.js +13 -0
- package/dist/src/presentation/cli/commands/agent/reject.command.js +1 -1
- package/dist/src/presentation/cli/commands/feat/reject.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/reject.command.js +6 -4
- package/dist/src/presentation/cli/commands/feat/review.command.d.ts +3 -2
- package/dist/src/presentation/cli/commands/feat/review.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/review.command.js +87 -12
- package/dist/src/presentation/cli/commands/feat/show.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/show.command.js +38 -3
- package/dist/src/presentation/tui/prompts/agent-select.prompt.d.ts +1 -1
- package/dist/src/presentation/tui/prompts/agent-select.prompt.js +1 -1
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.d.ts +30 -0
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.d.ts.map +1 -0
- package/dist/src/presentation/tui/prompts/prd-review-question.prompt.js +23 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.d.ts +29 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.d.ts.map +1 -0
- package/dist/src/presentation/tui/prompts/prd-review-summary.prompt.js +29 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.d.ts +13 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/merge-review.wizard.js +43 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.d.ts +13 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/plan-review.wizard.js +43 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.d.ts +26 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.d.ts.map +1 -0
- package/dist/src/presentation/tui/wizards/prd-review.wizard.js +42 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.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/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.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 +10 -10
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +9 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__03a0dba7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__19354aea._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f12b60be._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +10 -10
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{eca1959e083d0a45.js → 8bea0ce8a07abd50.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- /package/web/.next/static/{yvV-GEMagQiZhZAF0YqQs → o1NQgNmvCnthgfg2Ubmf_}/_buildManifest.js +0 -0
- /package/web/.next/static/{yvV-GEMagQiZhZAF0YqQs → o1NQgNmvCnthgfg2Ubmf_}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{yvV-GEMagQiZhZAF0YqQs → o1NQgNmvCnthgfg2Ubmf_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Summary Prompt Configuration
|
|
3
|
+
*
|
|
4
|
+
* Creates an @inquirer/select config for the final approve/reject
|
|
5
|
+
* action after reviewing open questions.
|
|
6
|
+
*/
|
|
7
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the @inquirer/select configuration for the review action prompt.
|
|
10
|
+
*/
|
|
11
|
+
export function createReviewActionConfig(changeCount) {
|
|
12
|
+
const changeLabel = changeCount > 0 ? ` (${changeCount} change${changeCount !== 1 ? 's' : ''})` : '';
|
|
13
|
+
return {
|
|
14
|
+
message: `Review complete${changeLabel}. What would you like to do?`,
|
|
15
|
+
choices: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Approve and continue',
|
|
18
|
+
value: 'approve',
|
|
19
|
+
description: 'Accept the requirements and proceed to research',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'Reject and iterate',
|
|
23
|
+
value: 'reject',
|
|
24
|
+
description: 'Provide feedback and re-run requirements',
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
theme: shepTheme,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the merge approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
export type MergeReviewAction = 'approve' | 'reject';
|
|
8
|
+
export interface MergeReviewWizardResult {
|
|
9
|
+
action: MergeReviewAction;
|
|
10
|
+
feedback?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function mergeReviewWizard(): Promise<MergeReviewWizardResult>;
|
|
13
|
+
//# sourceMappingURL=merge-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/merge-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAkC1E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the merge approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
import { select, input } from '@inquirer/prompts';
|
|
8
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
9
|
+
export async function mergeReviewWizard() {
|
|
10
|
+
const action = await select({
|
|
11
|
+
message: 'Review the merge. What would you like to do?',
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
name: 'Approve and merge',
|
|
15
|
+
value: 'approve',
|
|
16
|
+
description: 'Accept the changes and merge the branch',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Reject',
|
|
20
|
+
value: 'reject',
|
|
21
|
+
description: 'Provide feedback — implementation will iterate',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
theme: shepTheme,
|
|
25
|
+
});
|
|
26
|
+
let feedback;
|
|
27
|
+
if (action === 'reject') {
|
|
28
|
+
feedback = await input({
|
|
29
|
+
message: 'What needs to change before merging?',
|
|
30
|
+
theme: shepTheme,
|
|
31
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'Any comments? (optional, press Enter to skip)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
});
|
|
39
|
+
if (feedback?.trim().length === 0)
|
|
40
|
+
feedback = undefined;
|
|
41
|
+
}
|
|
42
|
+
return { action, feedback };
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the plan approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
export type PlanReviewAction = 'approve' | 'reject';
|
|
8
|
+
export interface PlanReviewWizardResult {
|
|
9
|
+
action: PlanReviewAction;
|
|
10
|
+
feedback?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function planReviewWizard(): Promise<PlanReviewWizardResult>;
|
|
13
|
+
//# sourceMappingURL=plan-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/plan-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAkCxE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Placeholder TUI wizard for the plan approval phase.
|
|
5
|
+
* Shows approve/reject action with optional comment.
|
|
6
|
+
*/
|
|
7
|
+
import { select, input } from '@inquirer/prompts';
|
|
8
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
9
|
+
export async function planReviewWizard() {
|
|
10
|
+
const action = await select({
|
|
11
|
+
message: 'Review the implementation plan. What would you like to do?',
|
|
12
|
+
choices: [
|
|
13
|
+
{
|
|
14
|
+
name: 'Approve and continue',
|
|
15
|
+
value: 'approve',
|
|
16
|
+
description: 'Accept the plan and proceed to implementation',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Reject and iterate',
|
|
20
|
+
value: 'reject',
|
|
21
|
+
description: 'Provide feedback and re-run planning',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
theme: shepTheme,
|
|
25
|
+
});
|
|
26
|
+
let feedback;
|
|
27
|
+
if (action === 'reject') {
|
|
28
|
+
feedback = await input({
|
|
29
|
+
message: 'What needs to change in the plan?',
|
|
30
|
+
theme: shepTheme,
|
|
31
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'Any comments? (optional, press Enter to skip)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
});
|
|
39
|
+
if (feedback?.trim().length === 0)
|
|
40
|
+
feedback = undefined;
|
|
41
|
+
}
|
|
42
|
+
return { action, feedback };
|
|
43
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive TUI wizard that walks users through open questions
|
|
5
|
+
* from a PRD spec, lets them change selections, and approve or
|
|
6
|
+
* reject with feedback.
|
|
7
|
+
*/
|
|
8
|
+
import { type ReviewAction } from '../prompts/prd-review-summary.prompt.js';
|
|
9
|
+
import type { OpenQuestion } from '../../../../packages/core/src/application/use-cases/agents/review-feature.use-case.js';
|
|
10
|
+
import type { QuestionSelectionChange } from '../../../../packages/core/src/domain/generated/output.js';
|
|
11
|
+
export interface PrdReviewWizardResult {
|
|
12
|
+
action: ReviewAction;
|
|
13
|
+
changedSelections: QuestionSelectionChange[];
|
|
14
|
+
feedback?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Runs the interactive PRD review wizard.
|
|
18
|
+
*
|
|
19
|
+
* Steps:
|
|
20
|
+
* 1. For each open question, show select prompt with current options
|
|
21
|
+
* 2. Track which selections changed from the original
|
|
22
|
+
* 3. Show approve/reject action prompt
|
|
23
|
+
* 4. If reject, prompt for feedback
|
|
24
|
+
*/
|
|
25
|
+
export declare function prdReviewWizard(questions: OpenQuestion[]): Promise<PrdReviewWizardResult>;
|
|
26
|
+
//# sourceMappingURL=prd-review.wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd-review.wizard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/tui/wizards/prd-review.wizard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAC9F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAG5E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4B/F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Review Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive TUI wizard that walks users through open questions
|
|
5
|
+
* from a PRD spec, lets them change selections, and approve or
|
|
6
|
+
* reject with feedback.
|
|
7
|
+
*/
|
|
8
|
+
import { select, input } from '@inquirer/prompts';
|
|
9
|
+
import { createQuestionSelectConfig } from '../prompts/prd-review-question.prompt.js';
|
|
10
|
+
import { createReviewActionConfig, } from '../prompts/prd-review-summary.prompt.js';
|
|
11
|
+
import { shepTheme } from '../themes/shep.theme.js';
|
|
12
|
+
/**
|
|
13
|
+
* Runs the interactive PRD review wizard.
|
|
14
|
+
*
|
|
15
|
+
* Steps:
|
|
16
|
+
* 1. For each open question, show select prompt with current options
|
|
17
|
+
* 2. Track which selections changed from the original
|
|
18
|
+
* 3. Show approve/reject action prompt
|
|
19
|
+
* 4. If reject, prompt for feedback
|
|
20
|
+
*/
|
|
21
|
+
export async function prdReviewWizard(questions) {
|
|
22
|
+
const changedSelections = [];
|
|
23
|
+
for (const q of questions) {
|
|
24
|
+
const selected = await select(createQuestionSelectConfig(q.question, q.options, q.selectedOption));
|
|
25
|
+
if (selected !== q.selectedOption) {
|
|
26
|
+
changedSelections.push({
|
|
27
|
+
questionId: q.question,
|
|
28
|
+
selectedOption: selected,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const action = await select(createReviewActionConfig(changedSelections.length));
|
|
33
|
+
let feedback;
|
|
34
|
+
if (action === 'reject') {
|
|
35
|
+
feedback = await input({
|
|
36
|
+
message: 'What needs to change? (feedback for re-iteration)',
|
|
37
|
+
theme: shepTheme,
|
|
38
|
+
validate: (value) => value.trim().length > 0 || 'Feedback is required for rejection',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return { action, changedSelections, feedback };
|
|
42
|
+
}
|