edsger 0.5.4 → 0.6.1
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/.claude/settings.local.json +13 -0
- package/dist/api/features/batch-operations.d.ts +4 -4
- package/dist/api/features/batch-operations.js +8 -8
- package/dist/api/features/feature-utils.d.ts +1 -1
- package/dist/api/features/feature-utils.js +2 -2
- package/dist/api/features/get-feature.d.ts +1 -1
- package/dist/api/features/get-feature.js +4 -2
- package/dist/api/features/status-updater.d.ts +3 -7
- package/dist/api/features/status-updater.js +3 -4
- package/dist/api/features/test-cases.d.ts +4 -4
- package/dist/api/features/test-cases.js +11 -9
- package/dist/api/features/update-feature.d.ts +2 -2
- package/dist/api/features/update-feature.js +4 -4
- package/dist/api/features/user-stories.d.ts +4 -4
- package/dist/api/features/user-stories.js +11 -9
- package/dist/api/mcp-client.d.ts +2 -3
- package/dist/api/mcp-client.js +12 -3
- package/dist/api/products.d.ts +1 -1
- package/dist/api/products.js +4 -2
- package/dist/api/test-reports.js +1 -1
- package/dist/commands/workflow/config/phase-configs.d.ts +5 -0
- package/dist/commands/workflow/config/phase-configs.js +98 -0
- package/dist/commands/workflow/core/feature-filter.d.ts +16 -0
- package/dist/commands/workflow/core/feature-filter.js +46 -0
- package/dist/commands/workflow/core/index.d.ts +8 -0
- package/dist/commands/workflow/core/index.js +12 -0
- package/dist/commands/workflow/core/pipeline-evaluator.d.ts +24 -0
- package/dist/commands/workflow/core/pipeline-evaluator.js +32 -0
- package/dist/commands/workflow/core/state-manager.d.ts +24 -0
- package/dist/commands/workflow/core/state-manager.js +42 -0
- package/dist/commands/workflow/core/workflow-logger.d.ts +20 -0
- package/dist/commands/workflow/core/workflow-logger.js +65 -0
- package/dist/commands/workflow/executors/phase-executor.d.ts +8 -0
- package/dist/commands/workflow/executors/phase-executor.js +238 -0
- package/dist/commands/workflow/feature-coordinator.d.ts +33 -0
- package/dist/commands/workflow/feature-coordinator.js +126 -0
- package/dist/commands/workflow/index.js +3 -3
- package/dist/commands/workflow/phase-orchestrator.d.ts +26 -0
- package/dist/commands/workflow/phase-orchestrator.js +395 -0
- package/dist/commands/workflow/pipeline-runner.d.ts +17 -0
- package/dist/commands/workflow/pipeline-runner.js +393 -0
- package/dist/commands/workflow/processor.d.ts +46 -0
- package/dist/commands/workflow/processor.js +156 -0
- package/dist/commands/workflow/runner.d.ts +26 -0
- package/dist/commands/workflow/runner.js +119 -0
- package/dist/commands/workflow/workflow-runner.d.ts +26 -0
- package/dist/commands/workflow/workflow-runner.js +119 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +62 -3
- package/dist/phases/bug-fixing/analyzer.d.ts +0 -2
- package/dist/phases/bug-fixing/analyzer.js +3 -4
- package/dist/phases/bug-fixing/context-fetcher.d.ts +1 -1
- package/dist/phases/bug-fixing/context-fetcher.js +7 -5
- package/dist/phases/bug-fixing/mcp-server.d.ts +1 -1
- package/dist/phases/bug-fixing/mcp-server.js +9 -5
- package/dist/phases/code-implementation/analyzer-helpers.d.ts +3 -3
- package/dist/phases/code-implementation/analyzer-helpers.js +7 -7
- package/dist/phases/code-implementation/analyzer.d.ts +0 -3
- package/dist/phases/code-implementation/analyzer.js +7 -19
- package/dist/phases/code-implementation/context-fetcher.d.ts +1 -1
- package/dist/phases/code-implementation/context-fetcher.js +5 -5
- package/dist/phases/code-implementation/context.d.ts +17 -0
- package/dist/phases/code-implementation/context.js +86 -0
- package/dist/phases/code-implementation/index.d.ts +32 -0
- package/dist/phases/code-implementation/index.js +630 -0
- package/dist/phases/code-implementation/mcp-server.d.ts +1 -1
- package/dist/phases/code-implementation/mcp-server.js +9 -5
- package/dist/phases/code-implementation/outcome.d.ts +19 -0
- package/dist/phases/code-implementation/outcome.js +51 -0
- package/dist/phases/code-implementation/prompts.d.ts +5 -0
- package/dist/phases/code-implementation/prompts.js +108 -0
- package/dist/phases/code-implementation-verification/agent.d.ts +31 -0
- package/dist/phases/code-implementation-verification/agent.js +196 -0
- package/dist/phases/code-implementation-verification/index.d.ts +15 -1
- package/dist/phases/code-implementation-verification/index.js +126 -1
- package/dist/phases/code-refine/analyzer.d.ts +0 -3
- package/dist/phases/code-refine/analyzer.js +3 -9
- package/dist/phases/code-refine/context-fetcher.d.ts +3 -3
- package/dist/phases/code-refine/context-fetcher.js +10 -6
- package/dist/phases/code-refine/context.d.ts +94 -0
- package/dist/phases/code-refine/context.js +423 -0
- package/dist/phases/code-refine/index.d.ts +39 -5
- package/dist/phases/code-refine/index.js +371 -5
- package/dist/phases/code-refine/prompts.d.ts +4 -0
- package/dist/phases/code-refine/prompts.js +190 -0
- package/dist/phases/code-refine/retry-handler.js +2 -2
- package/dist/phases/code-refine-verification/analysis/llm-analyzer.d.ts +22 -0
- package/dist/phases/code-refine-verification/analysis/llm-analyzer.js +134 -0
- package/dist/phases/code-refine-verification/github.d.ts +23 -0
- package/dist/phases/code-refine-verification/github.js +190 -0
- package/dist/phases/code-refine-verification/index.d.ts +9 -4
- package/dist/phases/code-refine-verification/index.js +214 -4
- package/dist/phases/code-refine-verification/llm-analyzer.d.ts +22 -0
- package/dist/phases/code-refine-verification/llm-analyzer.js +134 -0
- package/dist/phases/code-refine-verification/prompts.d.ts +5 -0
- package/dist/phases/code-refine-verification/prompts.js +80 -0
- package/dist/phases/code-refine-verification/types.d.ts +68 -0
- package/dist/phases/code-refine-verification/types.js +4 -0
- package/dist/phases/code-refine-verification/verifier.d.ts +0 -3
- package/dist/phases/code-refine-verification/verifier.js +3 -8
- package/dist/phases/code-review/analyzer.d.ts +0 -3
- package/dist/phases/code-review/analyzer.js +3 -9
- package/dist/phases/code-review/context-fetcher.d.ts +3 -3
- package/dist/phases/code-review/context-fetcher.js +10 -6
- package/dist/phases/code-review/context.d.ts +92 -0
- package/dist/phases/code-review/context.js +296 -0
- package/dist/phases/code-review/index.d.ts +27 -5
- package/dist/phases/code-review/index.js +361 -5
- package/dist/phases/code-testing/analyzer.d.ts +0 -3
- package/dist/phases/code-testing/analyzer.js +2 -14
- package/dist/phases/code-testing/context-fetcher.d.ts +1 -1
- package/dist/phases/code-testing/context-fetcher.js +5 -5
- package/dist/phases/code-testing/index.d.ts +1 -1
- package/dist/phases/code-testing/index.js +1 -1
- package/dist/phases/feature-analysis/agent.d.ts +2 -0
- package/dist/phases/feature-analysis/agent.js +105 -0
- package/dist/phases/feature-analysis/analyzer-helpers.d.ts +2 -54
- package/dist/phases/feature-analysis/analyzer-helpers.js +0 -403
- package/dist/phases/feature-analysis/context-fetcher.d.ts +9 -1
- package/dist/phases/feature-analysis/context-fetcher.js +53 -5
- package/dist/phases/feature-analysis/context.d.ts +26 -0
- package/dist/phases/feature-analysis/context.js +134 -0
- package/dist/phases/feature-analysis/index.d.ts +8 -4
- package/dist/phases/feature-analysis/index.js +147 -4
- package/dist/phases/feature-analysis/mcp-server.d.ts +1 -1
- package/dist/phases/feature-analysis/mcp-server.js +15 -9
- package/dist/phases/feature-analysis/outcome.d.ts +21 -0
- package/dist/phases/feature-analysis/outcome.js +143 -0
- package/dist/phases/feature-analysis/prompts-improvement.d.ts +1 -1
- package/dist/phases/feature-analysis/prompts.d.ts +9 -2
- package/dist/phases/feature-analysis/prompts.js +111 -6
- package/dist/phases/feature-analysis-verification/agent.d.ts +33 -0
- package/dist/phases/feature-analysis-verification/agent.js +115 -0
- package/dist/phases/feature-analysis-verification/index.d.ts +15 -1
- package/dist/phases/feature-analysis-verification/index.js +92 -1
- package/dist/phases/feature-analysis-verification/prompts.d.ts +2 -3
- package/dist/phases/feature-analysis-verification/prompts.js +1 -1
- package/dist/phases/functional-testing/analyzer.d.ts +0 -3
- package/dist/phases/functional-testing/analyzer.js +6 -25
- package/dist/phases/functional-testing/context-fetcher.d.ts +1 -1
- package/dist/phases/functional-testing/context-fetcher.js +5 -5
- package/dist/phases/functional-testing/http-fallback.d.ts +1 -3
- package/dist/phases/functional-testing/http-fallback.js +7 -3
- package/dist/phases/functional-testing/index.d.ts +1 -1
- package/dist/phases/functional-testing/index.js +1 -1
- package/dist/phases/functional-testing/mcp-server.d.ts +1 -1
- package/dist/phases/functional-testing/mcp-server.js +10 -6
- package/dist/phases/functional-testing/test-report-creator.d.ts +0 -4
- package/dist/phases/functional-testing/test-report-creator.js +11 -9
- package/dist/phases/functional-testing/test-retry-handler.js +2 -4
- package/dist/phases/pull-request/creator.d.ts +1 -1
- package/dist/phases/pull-request/creator.js +3 -1
- package/dist/phases/pull-request/handler.d.ts +1 -3
- package/dist/phases/pull-request/handler.js +3 -3
- package/dist/phases/technical-design/analyzer-helpers.d.ts +1 -14
- package/dist/phases/technical-design/analyzer-helpers.js +0 -153
- package/dist/phases/technical-design/analyzer.d.ts +0 -3
- package/dist/phases/technical-design/analyzer.js +12 -29
- package/dist/phases/technical-design/context-fetcher.d.ts +1 -1
- package/dist/phases/technical-design/context-fetcher.js +5 -5
- package/dist/phases/technical-design/context.d.ts +12 -0
- package/dist/phases/technical-design/context.js +39 -0
- package/dist/phases/technical-design/http-fallback.d.ts +1 -3
- package/dist/phases/technical-design/http-fallback.js +7 -3
- package/dist/phases/technical-design/index.d.ts +21 -0
- package/dist/phases/technical-design/index.js +438 -0
- package/dist/phases/technical-design/mcp-server.d.ts +1 -1
- package/dist/phases/technical-design/mcp-server.js +15 -7
- package/dist/phases/technical-design/outcome.d.ts +25 -0
- package/dist/phases/technical-design/outcome.js +39 -0
- package/dist/phases/technical-design/prompts.d.ts +5 -0
- package/dist/phases/technical-design/prompts.js +93 -0
- package/dist/phases/technical-design-verification/agent.d.ts +53 -0
- package/dist/phases/technical-design-verification/agent.js +170 -0
- package/dist/phases/technical-design-verification/index.d.ts +26 -1
- package/dist/phases/technical-design-verification/index.js +153 -1
- package/dist/services/audit-logs.d.ts +3 -7
- package/dist/services/audit-logs.js +6 -25
- package/dist/services/checklist.js +12 -4
- package/dist/services/feedbacks.js +6 -4
- package/dist/types/index.d.ts +0 -1
- package/dist/types/pipeline.d.ts +0 -4
- package/dist/utils/formatters.d.ts +3 -3
- package/package.json +2 -3
- package/dist/cli/commands/code-implementation-command.d.ts +0 -2
- package/dist/cli/commands/code-implementation-command.js +0 -36
- package/dist/cli/commands/code-review-command.d.ts +0 -2
- package/dist/cli/commands/code-review-command.js +0 -39
- package/dist/cli/commands/feature-analysis-command.d.ts +0 -2
- package/dist/cli/commands/feature-analysis-command.js +0 -36
- package/dist/cli/commands/functional-testing-command.d.ts +0 -2
- package/dist/cli/commands/functional-testing-command.js +0 -36
- package/dist/cli/commands/refactor-command.d.ts +0 -2
- package/dist/cli/commands/refactor-command.js +0 -123
- package/dist/cli/commands/technical-design-command.d.ts +0 -2
- package/dist/cli/commands/technical-design-command.js +0 -36
- package/dist/cli/commands/workflow-command.d.ts +0 -2
- package/dist/cli/commands/workflow-command.js +0 -34
- package/dist/cli/formatters/code-implementation-formatter.d.ts +0 -9
- package/dist/cli/formatters/code-implementation-formatter.js +0 -27
- package/dist/cli/formatters/feature-analysis-formatter.d.ts +0 -2
- package/dist/cli/formatters/feature-analysis-formatter.js +0 -27
- package/dist/cli/formatters/formatter-utils.d.ts +0 -23
- package/dist/cli/formatters/formatter-utils.js +0 -67
- package/dist/cli/formatters/functional-testing-formatter.d.ts +0 -15
- package/dist/cli/formatters/functional-testing-formatter.js +0 -37
- package/dist/cli/formatters/technical-design-formatter.d.ts +0 -7
- package/dist/cli/formatters/technical-design-formatter.js +0 -30
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.js +0 -78
- package/dist/cli/utils/command-handler.d.ts +0 -23
- package/dist/cli/utils/command-handler.js +0 -39
- package/dist/cli/utils/validation.d.ts +0 -25
- package/dist/cli/utils/validation.js +0 -58
- package/dist/cli/utils/workflow-utils.d.ts +0 -21
- package/dist/cli/utils/workflow-utils.js +0 -47
- package/dist/cli.d.ts +0 -3
- package/dist/cli.js +0 -78
- package/dist/phases/code-review/reviewer.d.ts +0 -3
- package/dist/phases/code-review/reviewer.js +0 -192
- package/dist/phases/feature-analysis/improvement-prompts.d.ts +0 -8
- package/dist/phases/feature-analysis/improvement-prompts.js +0 -109
- package/dist/phases/technical-design/prompts-improment.d.ts +0 -5
- package/dist/phases/technical-design/prompts-improment.js +0 -93
- package/dist/prompts/bug-fixing.d.ts +0 -2
- package/dist/prompts/bug-fixing.js +0 -63
- package/dist/prompts/checklist-verification.d.ts +0 -11
- package/dist/prompts/checklist-verification.js +0 -153
- package/dist/prompts/code-implementation-improvement.d.ts +0 -5
- package/dist/prompts/code-implementation-improvement.js +0 -108
- package/dist/prompts/code-implementation-verification.d.ts +0 -3
- package/dist/prompts/code-implementation-verification.js +0 -176
- package/dist/prompts/code-implementation.d.ts +0 -3
- package/dist/prompts/code-implementation.js +0 -132
- package/dist/prompts/feature-analysis-improvement.d.ts +0 -8
- package/dist/prompts/feature-analysis-improvement.js +0 -109
- package/dist/prompts/feature-analysis.d.ts +0 -3
- package/dist/prompts/feature-analysis.js +0 -149
- package/dist/prompts/formatters.d.ts +0 -42
- package/dist/prompts/formatters.js +0 -168
- package/dist/prompts/functional-testing.d.ts +0 -3
- package/dist/prompts/functional-testing.js +0 -126
- package/dist/prompts/index.d.ts +0 -6
- package/dist/prompts/index.js +0 -7
- package/dist/prompts/technical-design-improvement.d.ts +0 -5
- package/dist/prompts/technical-design-improvement.js +0 -93
- package/dist/prompts/technical-design-verification.d.ts +0 -13
- package/dist/prompts/technical-design-verification.js +0 -214
- package/dist/prompts/technical-design.d.ts +0 -3
- package/dist/prompts/technical-design.js +0 -187
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Batch update user story statuses
|
|
3
3
|
*/
|
|
4
|
-
export declare function batchUpdateUserStoryStatus(
|
|
4
|
+
export declare function batchUpdateUserStoryStatus(userStoryIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
|
|
5
5
|
/**
|
|
6
6
|
* Batch update test case statuses
|
|
7
7
|
*/
|
|
8
|
-
export declare function batchUpdateTestCaseStatus(
|
|
8
|
+
export declare function batchUpdateTestCaseStatus(testCaseIds: string[], status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
|
|
9
9
|
/**
|
|
10
10
|
* Batch delete user stories
|
|
11
11
|
*/
|
|
12
|
-
export declare function batchDeleteUserStories(
|
|
12
|
+
export declare function batchDeleteUserStories(userStoryIds: string[], verbose?: boolean): Promise<boolean>;
|
|
13
13
|
/**
|
|
14
14
|
* Batch delete test cases
|
|
15
15
|
*/
|
|
16
|
-
export declare function batchDeleteTestCases(
|
|
16
|
+
export declare function batchDeleteTestCases(testCaseIds: string[], verbose?: boolean): Promise<boolean>;
|
|
@@ -3,13 +3,13 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Batch update user story statuses
|
|
5
5
|
*/
|
|
6
|
-
export async function batchUpdateUserStoryStatus(
|
|
6
|
+
export async function batchUpdateUserStoryStatus(userStoryIds, status, verbose) {
|
|
7
7
|
try {
|
|
8
8
|
if (verbose) {
|
|
9
9
|
logInfo(`Batch updating ${userStoryIds.length} user stories to status: ${status}`);
|
|
10
10
|
}
|
|
11
11
|
for (const id of userStoryIds) {
|
|
12
|
-
await callMcpEndpoint(
|
|
12
|
+
await callMcpEndpoint('user_stories/update_status', {
|
|
13
13
|
user_story_id: id,
|
|
14
14
|
status,
|
|
15
15
|
});
|
|
@@ -28,13 +28,13 @@ export async function batchUpdateUserStoryStatus(mcpServerUrl, mcpToken, userSto
|
|
|
28
28
|
/**
|
|
29
29
|
* Batch update test case statuses
|
|
30
30
|
*/
|
|
31
|
-
export async function batchUpdateTestCaseStatus(
|
|
31
|
+
export async function batchUpdateTestCaseStatus(testCaseIds, status, verbose) {
|
|
32
32
|
try {
|
|
33
33
|
if (verbose) {
|
|
34
34
|
logInfo(`Batch updating ${testCaseIds.length} test cases to status: ${status}`);
|
|
35
35
|
}
|
|
36
36
|
for (const id of testCaseIds) {
|
|
37
|
-
await callMcpEndpoint(
|
|
37
|
+
await callMcpEndpoint('test_cases/update_status', {
|
|
38
38
|
test_case_id: id,
|
|
39
39
|
status,
|
|
40
40
|
});
|
|
@@ -53,13 +53,13 @@ export async function batchUpdateTestCaseStatus(mcpServerUrl, mcpToken, testCase
|
|
|
53
53
|
/**
|
|
54
54
|
* Batch delete user stories
|
|
55
55
|
*/
|
|
56
|
-
export async function batchDeleteUserStories(
|
|
56
|
+
export async function batchDeleteUserStories(userStoryIds, verbose) {
|
|
57
57
|
try {
|
|
58
58
|
if (verbose) {
|
|
59
59
|
logInfo(`Batch deleting ${userStoryIds.length} user stories`);
|
|
60
60
|
}
|
|
61
61
|
for (const id of userStoryIds) {
|
|
62
|
-
await callMcpEndpoint(
|
|
62
|
+
await callMcpEndpoint('user_stories/delete', {
|
|
63
63
|
user_story_id: id,
|
|
64
64
|
});
|
|
65
65
|
}
|
|
@@ -77,13 +77,13 @@ export async function batchDeleteUserStories(mcpServerUrl, mcpToken, userStoryId
|
|
|
77
77
|
/**
|
|
78
78
|
* Batch delete test cases
|
|
79
79
|
*/
|
|
80
|
-
export async function batchDeleteTestCases(
|
|
80
|
+
export async function batchDeleteTestCases(testCaseIds, verbose) {
|
|
81
81
|
try {
|
|
82
82
|
if (verbose) {
|
|
83
83
|
logInfo(`Batch deleting ${testCaseIds.length} test cases`);
|
|
84
84
|
}
|
|
85
85
|
for (const id of testCaseIds) {
|
|
86
|
-
await callMcpEndpoint(
|
|
86
|
+
await callMcpEndpoint('test_cases/delete', {
|
|
87
87
|
test_case_id: id,
|
|
88
88
|
});
|
|
89
89
|
}
|
|
@@ -10,4 +10,4 @@ export declare function sortFeaturesByUpdatedAt(features: FeatureInfo[]): Featur
|
|
|
10
10
|
/**
|
|
11
11
|
* Get features with ready_for_dev status for a product
|
|
12
12
|
*/
|
|
13
|
-
export declare function getReadyForDevFeatures(
|
|
13
|
+
export declare function getReadyForDevFeatures(productId: string, verbose?: boolean): Promise<FeatureInfo[]>;
|
|
@@ -19,12 +19,12 @@ export function sortFeaturesByUpdatedAt(features) {
|
|
|
19
19
|
/**
|
|
20
20
|
* Get features with ready_for_dev status for a product
|
|
21
21
|
*/
|
|
22
|
-
export async function getReadyForDevFeatures(
|
|
22
|
+
export async function getReadyForDevFeatures(productId, verbose) {
|
|
23
23
|
if (verbose) {
|
|
24
24
|
logInfo(`Fetching ready_for_dev features for product: ${productId}`);
|
|
25
25
|
}
|
|
26
26
|
try {
|
|
27
|
-
const result = (await callMcpEndpoint(
|
|
27
|
+
const result = (await callMcpEndpoint('features/list', {
|
|
28
28
|
product_id: productId,
|
|
29
29
|
status: 'ready_for_dev',
|
|
30
30
|
}));
|
|
@@ -2,4 +2,4 @@ import { FeatureInfo } from '../../types/features.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Get feature details by ID
|
|
4
4
|
*/
|
|
5
|
-
export declare function getFeature(
|
|
5
|
+
export declare function getFeature(featureId: string, verbose?: boolean): Promise<FeatureInfo>;
|
|
@@ -3,11 +3,13 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get feature details by ID
|
|
5
5
|
*/
|
|
6
|
-
export async function getFeature(
|
|
6
|
+
export async function getFeature(featureId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
8
|
logInfo(`Fetching feature details for: ${featureId}`);
|
|
9
9
|
}
|
|
10
|
-
const result = (await callMcpEndpoint(
|
|
10
|
+
const result = (await callMcpEndpoint('features/get', {
|
|
11
|
+
feature_id: featureId,
|
|
12
|
+
}));
|
|
11
13
|
if (!result.features || result.features.length === 0) {
|
|
12
14
|
throw new Error(`Feature not found: ${featureId}`);
|
|
13
15
|
}
|
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
* Updates feature status at each phase of the development workflow
|
|
4
4
|
*/
|
|
5
5
|
import type { FeatureStatus } from '../../types/index.js';
|
|
6
|
-
interface
|
|
7
|
-
readonly mcpServerUrl: string;
|
|
8
|
-
readonly mcpToken: string;
|
|
9
|
-
}
|
|
10
|
-
interface StatusUpdateOptions extends McpClientConfig {
|
|
6
|
+
interface StatusUpdateOptions {
|
|
11
7
|
readonly featureId: string;
|
|
12
8
|
readonly status: FeatureStatus;
|
|
13
9
|
readonly verbose?: boolean;
|
|
@@ -15,7 +11,7 @@ interface StatusUpdateOptions extends McpClientConfig {
|
|
|
15
11
|
/**
|
|
16
12
|
* Update feature status via MCP endpoint
|
|
17
13
|
*/
|
|
18
|
-
export declare function updateFeatureStatus({
|
|
14
|
+
export declare function updateFeatureStatus({ featureId, status, verbose, }: StatusUpdateOptions): Promise<boolean>;
|
|
19
15
|
/**
|
|
20
16
|
* Map pipeline phase to feature status
|
|
21
17
|
*/
|
|
@@ -23,5 +19,5 @@ export declare const getStatusForPhase: (phase: string) => FeatureStatus;
|
|
|
23
19
|
/**
|
|
24
20
|
* Update feature status based on pipeline phase
|
|
25
21
|
*/
|
|
26
|
-
export declare const updateFeatureStatusForPhase: (
|
|
22
|
+
export declare const updateFeatureStatusForPhase: (featureId: string, phase: string, verbose?: boolean) => Promise<boolean>;
|
|
27
23
|
export {};
|
|
@@ -7,12 +7,12 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
7
7
|
/**
|
|
8
8
|
* Update feature status via MCP endpoint
|
|
9
9
|
*/
|
|
10
|
-
export async function updateFeatureStatus({
|
|
10
|
+
export async function updateFeatureStatus({ featureId, status, verbose = false, }) {
|
|
11
11
|
try {
|
|
12
12
|
if (verbose) {
|
|
13
13
|
logInfo(`Updating feature ${featureId} status to: ${status}`);
|
|
14
14
|
}
|
|
15
|
-
await callMcpEndpoint(
|
|
15
|
+
await callMcpEndpoint('features/update', {
|
|
16
16
|
feature_id: featureId,
|
|
17
17
|
status,
|
|
18
18
|
});
|
|
@@ -73,10 +73,9 @@ export const getStatusForPhase = (phase) => {
|
|
|
73
73
|
/**
|
|
74
74
|
* Update feature status based on pipeline phase
|
|
75
75
|
*/
|
|
76
|
-
export const updateFeatureStatusForPhase = (
|
|
76
|
+
export const updateFeatureStatusForPhase = (featureId, phase, verbose) => {
|
|
77
77
|
const status = getStatusForPhase(phase);
|
|
78
78
|
return updateFeatureStatus({
|
|
79
|
-
...mcpConfig,
|
|
80
79
|
featureId,
|
|
81
80
|
status,
|
|
82
81
|
verbose,
|
|
@@ -2,11 +2,11 @@ import { TestCase } from '../../types/features.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Get test cases for a feature
|
|
4
4
|
*/
|
|
5
|
-
export declare function getTestCases(
|
|
5
|
+
export declare function getTestCases(featureId: string, verbose?: boolean): Promise<TestCase[]>;
|
|
6
6
|
/**
|
|
7
7
|
* Create a new test case for a feature
|
|
8
8
|
*/
|
|
9
|
-
export declare function createTestCase(
|
|
9
|
+
export declare function createTestCase(featureId: string, testCase: {
|
|
10
10
|
name: string;
|
|
11
11
|
description: string;
|
|
12
12
|
is_critical?: boolean;
|
|
@@ -22,8 +22,8 @@ export declare function createTestCases(mcpServerUrl: string, mcpToken: string,
|
|
|
22
22
|
/**
|
|
23
23
|
* Delete a test case
|
|
24
24
|
*/
|
|
25
|
-
export declare function deleteTestCase(
|
|
25
|
+
export declare function deleteTestCase(testCaseId: string, verbose?: boolean): Promise<boolean>;
|
|
26
26
|
/**
|
|
27
27
|
* Update test case status
|
|
28
28
|
*/
|
|
29
|
-
export declare function updateTestCaseStatus(
|
|
29
|
+
export declare function updateTestCaseStatus(testCaseId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
|
|
@@ -3,22 +3,24 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get test cases for a feature
|
|
5
5
|
*/
|
|
6
|
-
export async function getTestCases(
|
|
6
|
+
export async function getTestCases(featureId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
8
|
logInfo(`Fetching test cases for feature: ${featureId}`);
|
|
9
9
|
}
|
|
10
|
-
const result = (await callMcpEndpoint(
|
|
10
|
+
const result = (await callMcpEndpoint('test_cases/list', {
|
|
11
|
+
feature_id: featureId,
|
|
12
|
+
}));
|
|
11
13
|
return (result.test_cases || []);
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Create a new test case for a feature
|
|
15
17
|
*/
|
|
16
|
-
export async function createTestCase(
|
|
18
|
+
export async function createTestCase(featureId, testCase, verbose) {
|
|
17
19
|
try {
|
|
18
20
|
if (verbose) {
|
|
19
21
|
logInfo(`Creating test case for feature: ${featureId}`);
|
|
20
22
|
}
|
|
21
|
-
await callMcpEndpoint(
|
|
23
|
+
await callMcpEndpoint('test_cases/create', {
|
|
22
24
|
feature_id: featureId,
|
|
23
25
|
test_cases: [
|
|
24
26
|
{
|
|
@@ -48,7 +50,7 @@ export async function createTestCases(mcpServerUrl, mcpToken, featureId, testCas
|
|
|
48
50
|
logInfo(`Creating ${testCases.length} test cases for feature: ${featureId}`);
|
|
49
51
|
}
|
|
50
52
|
for (const testCase of testCases) {
|
|
51
|
-
await createTestCase(
|
|
53
|
+
await createTestCase(featureId, testCase, false);
|
|
52
54
|
}
|
|
53
55
|
if (verbose) {
|
|
54
56
|
logInfo('✅ All test cases created successfully');
|
|
@@ -64,12 +66,12 @@ export async function createTestCases(mcpServerUrl, mcpToken, featureId, testCas
|
|
|
64
66
|
/**
|
|
65
67
|
* Delete a test case
|
|
66
68
|
*/
|
|
67
|
-
export async function deleteTestCase(
|
|
69
|
+
export async function deleteTestCase(testCaseId, verbose) {
|
|
68
70
|
try {
|
|
69
71
|
if (verbose) {
|
|
70
72
|
logInfo(`Deleting test case: ${testCaseId}`);
|
|
71
73
|
}
|
|
72
|
-
await callMcpEndpoint(
|
|
74
|
+
await callMcpEndpoint('test_cases/delete', {
|
|
73
75
|
test_case_id: testCaseId,
|
|
74
76
|
});
|
|
75
77
|
if (verbose) {
|
|
@@ -86,12 +88,12 @@ export async function deleteTestCase(mcpServerUrl, mcpToken, testCaseId, verbose
|
|
|
86
88
|
/**
|
|
87
89
|
* Update test case status
|
|
88
90
|
*/
|
|
89
|
-
export async function updateTestCaseStatus(
|
|
91
|
+
export async function updateTestCaseStatus(testCaseId, status, verbose) {
|
|
90
92
|
try {
|
|
91
93
|
if (verbose) {
|
|
92
94
|
logInfo(`Updating test case ${testCaseId} status to: ${status}`);
|
|
93
95
|
}
|
|
94
|
-
await callMcpEndpoint(
|
|
96
|
+
await callMcpEndpoint('test_cases/update_status', {
|
|
95
97
|
test_case_id: testCaseId,
|
|
96
98
|
status,
|
|
97
99
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Update feature with new data
|
|
3
3
|
*/
|
|
4
|
-
export declare function updateFeature(
|
|
4
|
+
export declare function updateFeature(featureId: string, updates: {
|
|
5
5
|
technical_design?: string;
|
|
6
6
|
status?: string;
|
|
7
7
|
pull_request_url?: string;
|
|
@@ -10,4 +10,4 @@ export declare function updateFeature(mcpServerUrl: string, mcpToken: string, fe
|
|
|
10
10
|
/**
|
|
11
11
|
* Update technical design for a feature
|
|
12
12
|
*/
|
|
13
|
-
export declare function updateTechnicalDesign(
|
|
13
|
+
export declare function updateTechnicalDesign(featureId: string, technicalDesign: string, verbose?: boolean): Promise<boolean>;
|
|
@@ -3,12 +3,12 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Update feature with new data
|
|
5
5
|
*/
|
|
6
|
-
export async function updateFeature(
|
|
6
|
+
export async function updateFeature(featureId, updates, verbose) {
|
|
7
7
|
try {
|
|
8
8
|
if (verbose) {
|
|
9
9
|
logInfo(`Updating feature: ${featureId}`);
|
|
10
10
|
}
|
|
11
|
-
await callMcpEndpoint(
|
|
11
|
+
await callMcpEndpoint('features/update', {
|
|
12
12
|
feature_id: featureId,
|
|
13
13
|
...updates,
|
|
14
14
|
});
|
|
@@ -26,6 +26,6 @@ export async function updateFeature(mcpServerUrl, mcpToken, featureId, updates,
|
|
|
26
26
|
/**
|
|
27
27
|
* Update technical design for a feature
|
|
28
28
|
*/
|
|
29
|
-
export async function updateTechnicalDesign(
|
|
30
|
-
return updateFeature(
|
|
29
|
+
export async function updateTechnicalDesign(featureId, technicalDesign, verbose) {
|
|
30
|
+
return updateFeature(featureId, { technical_design: technicalDesign }, verbose);
|
|
31
31
|
}
|
|
@@ -2,11 +2,11 @@ import { UserStory } from '../../types/features.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Get user stories for a feature
|
|
4
4
|
*/
|
|
5
|
-
export declare function getUserStories(
|
|
5
|
+
export declare function getUserStories(featureId: string, verbose?: boolean): Promise<UserStory[]>;
|
|
6
6
|
/**
|
|
7
7
|
* Create a new user story for a feature
|
|
8
8
|
*/
|
|
9
|
-
export declare function createUserStory(
|
|
9
|
+
export declare function createUserStory(featureId: string, userStory: {
|
|
10
10
|
title: string;
|
|
11
11
|
description: string;
|
|
12
12
|
status?: string;
|
|
@@ -22,8 +22,8 @@ export declare function createUserStories(mcpServerUrl: string, mcpToken: string
|
|
|
22
22
|
/**
|
|
23
23
|
* Delete a user story
|
|
24
24
|
*/
|
|
25
|
-
export declare function deleteUserStory(
|
|
25
|
+
export declare function deleteUserStory(userStoryId: string, verbose?: boolean): Promise<boolean>;
|
|
26
26
|
/**
|
|
27
27
|
* Update user story status
|
|
28
28
|
*/
|
|
29
|
-
export declare function updateUserStoryStatus(
|
|
29
|
+
export declare function updateUserStoryStatus(userStoryId: string, status: 'draft' | 'ready' | 'in_progress' | 'done' | 'cancelled', verbose?: boolean): Promise<boolean>;
|
|
@@ -3,22 +3,24 @@ import { callMcpEndpoint } from '../mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get user stories for a feature
|
|
5
5
|
*/
|
|
6
|
-
export async function getUserStories(
|
|
6
|
+
export async function getUserStories(featureId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
8
|
logInfo(`Fetching user stories for feature: ${featureId}`);
|
|
9
9
|
}
|
|
10
|
-
const result = (await callMcpEndpoint(
|
|
10
|
+
const result = (await callMcpEndpoint('user_stories/list', {
|
|
11
|
+
feature_id: featureId,
|
|
12
|
+
}));
|
|
11
13
|
return (result.user_stories || []);
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Create a new user story for a feature
|
|
15
17
|
*/
|
|
16
|
-
export async function createUserStory(
|
|
18
|
+
export async function createUserStory(featureId, userStory, verbose) {
|
|
17
19
|
try {
|
|
18
20
|
if (verbose) {
|
|
19
21
|
logInfo(`Creating user story for feature: ${featureId}`);
|
|
20
22
|
}
|
|
21
|
-
await callMcpEndpoint(
|
|
23
|
+
await callMcpEndpoint('user_stories/create', {
|
|
22
24
|
feature_id: featureId,
|
|
23
25
|
user_stories: [
|
|
24
26
|
{
|
|
@@ -48,7 +50,7 @@ export async function createUserStories(mcpServerUrl, mcpToken, featureId, userS
|
|
|
48
50
|
logInfo(`Creating ${userStories.length} user stories for feature: ${featureId}`);
|
|
49
51
|
}
|
|
50
52
|
for (const story of userStories) {
|
|
51
|
-
await createUserStory(
|
|
53
|
+
await createUserStory(featureId, story, false);
|
|
52
54
|
}
|
|
53
55
|
if (verbose) {
|
|
54
56
|
logInfo('✅ All user stories created successfully');
|
|
@@ -64,12 +66,12 @@ export async function createUserStories(mcpServerUrl, mcpToken, featureId, userS
|
|
|
64
66
|
/**
|
|
65
67
|
* Delete a user story
|
|
66
68
|
*/
|
|
67
|
-
export async function deleteUserStory(
|
|
69
|
+
export async function deleteUserStory(userStoryId, verbose) {
|
|
68
70
|
try {
|
|
69
71
|
if (verbose) {
|
|
70
72
|
logInfo(`Deleting user story: ${userStoryId}`);
|
|
71
73
|
}
|
|
72
|
-
await callMcpEndpoint(
|
|
74
|
+
await callMcpEndpoint('user_stories/delete', {
|
|
73
75
|
user_story_id: userStoryId,
|
|
74
76
|
});
|
|
75
77
|
if (verbose) {
|
|
@@ -86,12 +88,12 @@ export async function deleteUserStory(mcpServerUrl, mcpToken, userStoryId, verbo
|
|
|
86
88
|
/**
|
|
87
89
|
* Update user story status
|
|
88
90
|
*/
|
|
89
|
-
export async function updateUserStoryStatus(
|
|
91
|
+
export async function updateUserStoryStatus(userStoryId, status, verbose) {
|
|
90
92
|
try {
|
|
91
93
|
if (verbose) {
|
|
92
94
|
logInfo(`Updating user story ${userStoryId} status to: ${status}`);
|
|
93
95
|
}
|
|
94
|
-
await callMcpEndpoint(
|
|
96
|
+
await callMcpEndpoint('user_stories/update_status', {
|
|
95
97
|
user_story_id: userStoryId,
|
|
96
98
|
status,
|
|
97
99
|
});
|
package/dist/api/mcp-client.d.ts
CHANGED
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
* Common MCP client utilities for making HTTP requests to MCP servers
|
|
3
3
|
*/
|
|
4
4
|
export interface McpRequestOptions {
|
|
5
|
-
mcpServerUrl: string;
|
|
6
|
-
mcpToken: string;
|
|
7
5
|
method: string;
|
|
8
6
|
params: unknown;
|
|
9
7
|
verbose?: boolean;
|
|
10
8
|
}
|
|
11
9
|
/**
|
|
12
10
|
* Helper function to make HTTP requests to the MCP server
|
|
11
|
+
* Reads EDSGER_MCP_SERVER_URL and EDSGER_MCP_TOKEN from environment variables
|
|
13
12
|
*/
|
|
14
|
-
export declare function callMcpEndpoint(
|
|
13
|
+
export declare function callMcpEndpoint(method: string, params: unknown): Promise<unknown>;
|
|
15
14
|
/**
|
|
16
15
|
* Wrapper for making MCP requests with standardized error handling
|
|
17
16
|
*/
|
package/dist/api/mcp-client.js
CHANGED
|
@@ -3,8 +3,17 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Helper function to make HTTP requests to the MCP server
|
|
6
|
+
* Reads EDSGER_MCP_SERVER_URL and EDSGER_MCP_TOKEN from environment variables
|
|
6
7
|
*/
|
|
7
|
-
export async function callMcpEndpoint(
|
|
8
|
+
export async function callMcpEndpoint(method, params) {
|
|
9
|
+
const mcpServerUrl = process.env.EDSGER_MCP_SERVER_URL;
|
|
10
|
+
const mcpToken = process.env.EDSGER_MCP_TOKEN;
|
|
11
|
+
if (!mcpServerUrl) {
|
|
12
|
+
throw new Error('EDSGER_MCP_SERVER_URL environment variable is not set');
|
|
13
|
+
}
|
|
14
|
+
if (!mcpToken) {
|
|
15
|
+
throw new Error('EDSGER_MCP_TOKEN environment variable is not set');
|
|
16
|
+
}
|
|
8
17
|
try {
|
|
9
18
|
const response = await fetch(`${mcpServerUrl}/mcp`, {
|
|
10
19
|
method: 'POST',
|
|
@@ -37,12 +46,12 @@ export async function callMcpEndpoint(mcpServerUrl, mcpToken, method, params) {
|
|
|
37
46
|
* Wrapper for making MCP requests with standardized error handling
|
|
38
47
|
*/
|
|
39
48
|
export async function makeMcpRequest(options) {
|
|
40
|
-
const {
|
|
49
|
+
const { method, params, verbose } = options;
|
|
41
50
|
if (verbose) {
|
|
42
51
|
console.log(`Making MCP request: ${method}`);
|
|
43
52
|
}
|
|
44
53
|
try {
|
|
45
|
-
const result = await callMcpEndpoint(
|
|
54
|
+
const result = await callMcpEndpoint(method, params);
|
|
46
55
|
if (verbose) {
|
|
47
56
|
console.log(`MCP request successful: ${method}`);
|
|
48
57
|
}
|
package/dist/api/products.d.ts
CHANGED
|
@@ -7,4 +7,4 @@ export interface ProductInfo {
|
|
|
7
7
|
/**
|
|
8
8
|
* Get product details by ID
|
|
9
9
|
*/
|
|
10
|
-
export declare function getProduct(
|
|
10
|
+
export declare function getProduct(productId: string, verbose?: boolean): Promise<ProductInfo>;
|
package/dist/api/products.js
CHANGED
|
@@ -3,11 +3,13 @@ import { callMcpEndpoint } from './mcp-client.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Get product details by ID
|
|
5
5
|
*/
|
|
6
|
-
export async function getProduct(
|
|
6
|
+
export async function getProduct(productId, verbose) {
|
|
7
7
|
if (verbose) {
|
|
8
8
|
logInfo(`Fetching product details for: ${productId}`);
|
|
9
9
|
}
|
|
10
|
-
const result = (await callMcpEndpoint(
|
|
10
|
+
const result = (await callMcpEndpoint('resources/read', {
|
|
11
|
+
uri: `product://${productId}`,
|
|
12
|
+
}));
|
|
11
13
|
const productText = result.contents?.[0]?.text || '{}';
|
|
12
14
|
try {
|
|
13
15
|
return JSON.parse(productText);
|
package/dist/api/test-reports.js
CHANGED
|
@@ -8,7 +8,7 @@ export async function createTestReport(mcpServerUrl, mcpToken, featureId, report
|
|
|
8
8
|
if (verbose) {
|
|
9
9
|
logInfo(`Creating test report for feature: ${featureId}`);
|
|
10
10
|
}
|
|
11
|
-
await callMcpEndpoint(
|
|
11
|
+
await callMcpEndpoint('test_reports/create', {
|
|
12
12
|
feature_id: featureId,
|
|
13
13
|
...reportData,
|
|
14
14
|
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase configurations for the pipeline runner
|
|
3
|
+
*/
|
|
4
|
+
import { analyseFeature } from '../../../phases/feature-analysis/index.js';
|
|
5
|
+
import { generateTechnicalDesign } from '../../../phases/technical-design/index.js';
|
|
6
|
+
import { implementFeatureCode } from '../../../phases/code-implementation/index.js';
|
|
7
|
+
import { runFunctionalTesting } from '../../../phases/functional-testing/analyzer.js';
|
|
8
|
+
import { writeCodeTests } from '../../../phases/code-testing/analyzer.js';
|
|
9
|
+
import { refineCodeFromPRFeedback } from '../../../phases/code-refine/index.js';
|
|
10
|
+
import { verifyAndResolveComments } from '../../../phases/code-refine-verification/index.js';
|
|
11
|
+
import { reviewPullRequest } from '../../../phases/code-review/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* Wrapper for code-refine phase to inject GitHub token
|
|
14
|
+
*/
|
|
15
|
+
const executeCodeRefine = async (options, config) => {
|
|
16
|
+
const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
|
|
17
|
+
if (!githubToken) {
|
|
18
|
+
return {
|
|
19
|
+
status: 'error',
|
|
20
|
+
message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return refineCodeFromPRFeedback({
|
|
24
|
+
featureId: options.featureId,
|
|
25
|
+
githubToken,
|
|
26
|
+
verbose: options.verbose,
|
|
27
|
+
}, config);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Wrapper for code-refine-verification phase to inject GitHub token
|
|
31
|
+
*/
|
|
32
|
+
const executeCodeRefineVerification = async (options, config) => {
|
|
33
|
+
const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
|
|
34
|
+
if (!githubToken) {
|
|
35
|
+
return {
|
|
36
|
+
status: 'error',
|
|
37
|
+
message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return verifyAndResolveComments({
|
|
41
|
+
featureId: options.featureId,
|
|
42
|
+
githubToken,
|
|
43
|
+
config, // Add config parameter for LLM analysis
|
|
44
|
+
verbose: options.verbose,
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Wrapper for code-review phase to inject GitHub token
|
|
49
|
+
*/
|
|
50
|
+
const executeCodeReview = async (options, config) => {
|
|
51
|
+
const githubToken = process.env.GITHUB_TOKEN || process.env.GITHUB_ACCESS_TOKEN;
|
|
52
|
+
if (!githubToken) {
|
|
53
|
+
return {
|
|
54
|
+
status: 'error',
|
|
55
|
+
message: 'GitHub token not found. Set GITHUB_TOKEN or GITHUB_ACCESS_TOKEN environment variable.',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return reviewPullRequest({
|
|
59
|
+
featureId: options.featureId,
|
|
60
|
+
githubToken,
|
|
61
|
+
verbose: options.verbose,
|
|
62
|
+
}, config);
|
|
63
|
+
};
|
|
64
|
+
// Pipeline phase configurations
|
|
65
|
+
export const phaseConfigs = [
|
|
66
|
+
{
|
|
67
|
+
name: 'feature-analysis',
|
|
68
|
+
execute: analyseFeature,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'technical-design',
|
|
72
|
+
execute: generateTechnicalDesign,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'code-implementation',
|
|
76
|
+
execute: implementFeatureCode,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'functional-testing',
|
|
80
|
+
execute: runFunctionalTesting,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'code-testing',
|
|
84
|
+
execute: writeCodeTests,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'code-refine',
|
|
88
|
+
execute: executeCodeRefine,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'code-refine-verification',
|
|
92
|
+
execute: executeCodeRefineVerification,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'code-review',
|
|
96
|
+
execute: executeCodeReview,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature filtering utilities for workflow processor
|
|
3
|
+
* Pure functions for filtering and selecting features for processing
|
|
4
|
+
*/
|
|
5
|
+
import type { FeatureInfo } from '../../../types/features.js';
|
|
6
|
+
import type { FeatureProcessingState } from './state-manager.js';
|
|
7
|
+
export declare const shouldProcessFeature: (maxRetries: number) => (feature: FeatureInfo, states: Map<string, FeatureProcessingState>) => boolean;
|
|
8
|
+
export declare const findNextFeature: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>, maxRetries: number) => FeatureInfo | undefined;
|
|
9
|
+
export declare const isFeatureProcessing: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
|
|
10
|
+
export declare const isFeatureCompleted: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
|
|
11
|
+
export declare const isFeatureFailed: (featureId: string, states: Map<string, FeatureProcessingState>) => boolean;
|
|
12
|
+
export declare const hasReachedMaxRetries: (featureId: string, states: Map<string, FeatureProcessingState>, maxRetries: number) => boolean;
|
|
13
|
+
export declare const filterProcessingFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
|
|
14
|
+
export declare const filterCompletedFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
|
|
15
|
+
export declare const filterFailedFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>) => FeatureInfo[];
|
|
16
|
+
export declare const filterAvailableFeatures: (features: readonly FeatureInfo[], states: Map<string, FeatureProcessingState>, maxRetries: number) => FeatureInfo[];
|