edsger 0.2.2 → 0.2.4

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.
Files changed (87) hide show
  1. package/README.md +17 -0
  2. package/dist/api/features/batch-operations.d.ts +16 -0
  3. package/dist/api/features/batch-operations.js +100 -0
  4. package/dist/api/features/index.d.ts +1 -0
  5. package/dist/api/features/index.js +1 -0
  6. package/dist/api/features/test-cases.d.ts +8 -0
  7. package/dist/api/features/test-cases.js +45 -0
  8. package/dist/api/features/user-stories.d.ts +8 -0
  9. package/dist/api/features/user-stories.js +45 -0
  10. package/dist/cli/commands/refactor-command.d.ts +2 -0
  11. package/dist/cli/commands/refactor-command.js +107 -0
  12. package/dist/cli/index.js +7 -0
  13. package/dist/cli.d.ts +2 -2
  14. package/dist/cli.js +4 -99
  15. package/dist/phases/code-implementation/analyzer-helpers.d.ts +28 -0
  16. package/dist/phases/code-implementation/analyzer-helpers.js +177 -0
  17. package/dist/phases/code-implementation/analyzer.d.ts +2 -0
  18. package/dist/phases/code-implementation/analyzer.js +308 -179
  19. package/dist/phases/code-implementation-verification/index.d.ts +1 -0
  20. package/dist/phases/code-implementation-verification/index.js +1 -0
  21. package/dist/phases/code-implementation-verification/verifier.d.ts +31 -0
  22. package/dist/phases/code-implementation-verification/verifier.js +196 -0
  23. package/dist/phases/feature-analysis/analyzer-helpers.d.ts +62 -0
  24. package/dist/phases/feature-analysis/analyzer-helpers.js +450 -0
  25. package/dist/phases/feature-analysis/analyzer.d.ts +1 -0
  26. package/dist/phases/feature-analysis/analyzer.js +132 -213
  27. package/dist/phases/feature-analysis-verification/index.d.ts +1 -0
  28. package/dist/phases/feature-analysis-verification/index.js +1 -0
  29. package/dist/phases/feature-analysis-verification/verifier.d.ts +37 -0
  30. package/dist/phases/feature-analysis-verification/verifier.js +147 -0
  31. package/dist/phases/pull-request/creator.js +10 -9
  32. package/dist/phases/technical-design/analyzer-helpers.d.ts +37 -0
  33. package/dist/phases/technical-design/analyzer-helpers.js +144 -0
  34. package/dist/phases/technical-design/analyzer.d.ts +3 -0
  35. package/dist/phases/technical-design/analyzer.js +282 -312
  36. package/dist/phases/technical-design-verification/index.d.ts +1 -0
  37. package/dist/phases/technical-design-verification/index.js +1 -0
  38. package/dist/phases/technical-design-verification/verifier.d.ts +36 -0
  39. package/dist/phases/technical-design-verification/verifier.js +147 -0
  40. package/dist/prompts/checklist-verification.d.ts +11 -0
  41. package/dist/prompts/checklist-verification.js +153 -0
  42. package/dist/prompts/code-implementation-improvement.d.ts +5 -0
  43. package/dist/prompts/code-implementation-improvement.js +108 -0
  44. package/dist/prompts/code-implementation-verification.d.ts +3 -0
  45. package/dist/prompts/code-implementation-verification.js +176 -0
  46. package/dist/prompts/feature-analysis-improvement.d.ts +8 -0
  47. package/dist/prompts/feature-analysis-improvement.js +109 -0
  48. package/dist/prompts/feature-analysis.js +1 -1
  49. package/dist/prompts/formatters.d.ts +17 -4
  50. package/dist/prompts/formatters.js +41 -12
  51. package/dist/prompts/technical-design-improvement.d.ts +5 -0
  52. package/dist/prompts/technical-design-improvement.js +93 -0
  53. package/dist/prompts/technical-design-verification.d.ts +11 -0
  54. package/dist/prompts/technical-design-verification.js +134 -0
  55. package/dist/prompts/technical-design.js +1 -1
  56. package/dist/services/audit-logs.d.ts +60 -0
  57. package/dist/services/audit-logs.js +115 -0
  58. package/dist/services/checklist.d.ts +1 -0
  59. package/dist/types/index.d.ts +19 -0
  60. package/dist/utils/image-downloader.d.ts +32 -0
  61. package/dist/utils/image-downloader.js +144 -0
  62. package/dist/workflow-runner/executors/phase-executor.js +56 -12
  63. package/package.json +1 -1
  64. package/dist/api/features.d.ts +0 -100
  65. package/dist/api/features.js +0 -219
  66. package/dist/logger.d.ts +0 -19
  67. package/dist/logger.js +0 -52
  68. package/dist/types.d.ts +0 -99
  69. package/dist/types.js +0 -1
  70. package/dist/workflow-runner/config/stage-configs.d.ts +0 -5
  71. package/dist/workflow-runner/config/stage-configs.js +0 -34
  72. package/dist/workflow-runner/core/feature-filter.test.d.ts +0 -4
  73. package/dist/workflow-runner/core/feature-filter.test.js +0 -127
  74. package/dist/workflow-runner/executors/stage-executor.d.ts +0 -8
  75. package/dist/workflow-runner/executors/stage-executor.js +0 -49
  76. package/dist/workflow-runner/feature-fetcher.d.ts +0 -41
  77. package/dist/workflow-runner/feature-fetcher.js +0 -121
  78. package/dist/workflow-runner/feature-service.d.ts +0 -17
  79. package/dist/workflow-runner/feature-service.js +0 -60
  80. package/dist/workflow-runner/pipeline.d.ts +0 -18
  81. package/dist/workflow-runner/pipeline.js +0 -197
  82. package/dist/workflow-runner/processor.d.ts +0 -40
  83. package/dist/workflow-runner/processor.js +0 -191
  84. package/dist/workflow-runner/status-updater.d.ts +0 -27
  85. package/dist/workflow-runner/status-updater.js +0 -80
  86. package/dist/workflow-runner/types.d.ts +0 -48
  87. package/dist/workflow-runner/types.js +0 -4
@@ -0,0 +1,37 @@
1
+ import { EdsgerConfig } from '../../types/index.js';
2
+ import { ChecklistPhaseContext } from '../../services/checklist.js';
3
+ import { type ChecklistVerificationResult } from '../technical-design-verification/index.js';
4
+ export interface TechnicalDesignResult {
5
+ featureId: string;
6
+ technicalDesign: string | null;
7
+ status: 'success' | 'error';
8
+ summary: string;
9
+ verificationResult?: ChecklistVerificationResult;
10
+ iterations?: number;
11
+ data?: {
12
+ checklist_item_results?: any[];
13
+ [key: string]: any;
14
+ };
15
+ }
16
+ interface VerificationCycleResult {
17
+ passed: boolean;
18
+ verificationResult: ChecklistVerificationResult | null;
19
+ nextPrompt?: string;
20
+ }
21
+ /**
22
+ * Perform verification and determine if iteration should continue
23
+ */
24
+ export declare function performVerificationCycle(technicalDesign: string, checklistContext: ChecklistPhaseContext | null, featureId: string, featureName: string, featureDescription: string | undefined, config: EdsgerConfig, currentIteration: number, maxIterations: number, mcpServerUrl: string, mcpToken: string, verbose?: boolean): Promise<VerificationCycleResult>;
25
+ /**
26
+ * Build successful design result
27
+ */
28
+ export declare function buildDesignResult(featureId: string, technicalDesign: string, summary: string, iterations: number, checklistItemResults?: any[]): TechnicalDesignResult;
29
+ /**
30
+ * Build verification failure result
31
+ */
32
+ export declare function buildVerificationFailureResult(featureId: string, technicalDesign: string, verificationResult: ChecklistVerificationResult, iterations: number): TechnicalDesignResult;
33
+ /**
34
+ * Build error result when no design was generated
35
+ */
36
+ export declare function buildNoResultsError(featureId: string): TechnicalDesignResult;
37
+ export {};
@@ -0,0 +1,144 @@
1
+ import { logInfo, logError } from '../../utils/logger.js';
2
+ import { processChecklistItemResultsFromResponse, } from '../../services/checklist.js';
3
+ import { verifyTechnicalDesignCompliance, } from '../technical-design-verification/index.js';
4
+ import { createTechnicalDesignImprovementPrompt } from '../../prompts/technical-design-improvement.js';
5
+ import { logFeatureVerificationEvent } from '../../services/audit-logs.js';
6
+ /**
7
+ * Perform verification and determine if iteration should continue
8
+ */
9
+ export async function performVerificationCycle(technicalDesign, checklistContext, featureId, featureName, featureDescription, config, currentIteration, maxIterations, mcpServerUrl, mcpToken, verbose) {
10
+ // No verification needed if no checklist context
11
+ if (!checklistContext || checklistContext.checklists.length === 0) {
12
+ return { passed: true, verificationResult: null };
13
+ }
14
+ if (verbose) {
15
+ logInfo('🔍 Starting technical design verification...');
16
+ }
17
+ const verificationResult = await verifyTechnicalDesignCompliance({
18
+ checklistContext,
19
+ featureId,
20
+ featureName,
21
+ featureDescription,
22
+ technicalDesign,
23
+ verbose,
24
+ }, config);
25
+ // Verification passed
26
+ if (verificationResult.rejected_count === 0) {
27
+ if (verbose) {
28
+ logInfo(`✅ Checklist verification passed: ${verificationResult.confirmed_count} confirmed, ${verificationResult.uncertain_count} uncertain`);
29
+ }
30
+ // Log verification success
31
+ await logFeatureVerificationEvent(mcpServerUrl, mcpToken, {
32
+ featureId,
33
+ phase: 'technical_design',
34
+ iteration: currentIteration,
35
+ result: 'success',
36
+ verificationData: {
37
+ confirmed_count: verificationResult.confirmed_count,
38
+ rejected_count: verificationResult.rejected_count,
39
+ uncertain_count: verificationResult.uncertain_count,
40
+ summary: verificationResult.summary,
41
+ },
42
+ }, verbose);
43
+ // Create checklist results based on verification result
44
+ const checklistItemResults = verificationResult.item_verifications.map((item) => ({
45
+ checklist_item_id: item.checklist_item_id,
46
+ is_passed: item.is_satisfied && item.verification_status === 'confirmed',
47
+ value: item.verification_status,
48
+ notes: item.verification_reason || undefined,
49
+ }));
50
+ await processChecklistItemResultsFromResponse({ featureId, mcpServerUrl, mcpToken }, 'technical_design', checklistItemResults, verbose);
51
+ return { passed: true, verificationResult };
52
+ }
53
+ // Verification failed
54
+ logError(`❌ Iteration ${currentIteration}: Checklist verification FAILED - ${verificationResult.rejected_count} items rejected, ${verificationResult.uncertain_count} uncertain`);
55
+ // Log verification failure with improvement suggestions
56
+ await logFeatureVerificationEvent(mcpServerUrl, mcpToken, {
57
+ featureId,
58
+ phase: 'technical_design',
59
+ iteration: currentIteration,
60
+ result: 'error',
61
+ verificationData: {
62
+ confirmed_count: verificationResult.confirmed_count,
63
+ rejected_count: verificationResult.rejected_count,
64
+ uncertain_count: verificationResult.uncertain_count,
65
+ rejected_items: verificationResult.item_verifications
66
+ .filter((item) => item.verification_status === 'rejected')
67
+ .map((item) => ({
68
+ checklist_item_id: item.checklist_item_id,
69
+ reason: item.verification_reason || 'No reason provided',
70
+ concerns: item.concerns || [],
71
+ improvement_suggestions: item.improvement_suggestions || [],
72
+ })),
73
+ uncertain_items: verificationResult.item_verifications
74
+ .filter((item) => item.verification_status === 'uncertain')
75
+ .map((item) => ({
76
+ checklist_item_id: item.checklist_item_id,
77
+ reason: item.verification_reason || 'No reason provided',
78
+ concerns: item.concerns || [],
79
+ improvement_suggestions: item.improvement_suggestions || [],
80
+ })),
81
+ summary: verificationResult.summary,
82
+ overall_suggestions: verificationResult.overall_suggestions || [],
83
+ },
84
+ }, verbose);
85
+ // Check if we can iterate again
86
+ if (currentIteration < maxIterations) {
87
+ if (verbose) {
88
+ logInfo(` Will retry with improvement feedback (${maxIterations - currentIteration} attempts remaining)`);
89
+ }
90
+ // Create improvement prompt for next iteration
91
+ const nextPrompt = createTechnicalDesignImprovementPrompt(verificationResult, technicalDesign);
92
+ return { passed: false, verificationResult, nextPrompt };
93
+ }
94
+ // Max iterations reached - create checklist results based on final verification
95
+ logError(`❌ Maximum iterations (${maxIterations}) reached. Checklist verification still failing.`);
96
+ // Create checklist results for all items (both passed and failed)
97
+ const checklistItemResults = verificationResult.item_verifications.map((item) => ({
98
+ checklist_item_id: item.checklist_item_id,
99
+ is_passed: item.is_satisfied && item.verification_status === 'confirmed',
100
+ value: item.verification_status,
101
+ notes: item.verification_reason || undefined,
102
+ }));
103
+ await processChecklistItemResultsFromResponse({ featureId, mcpServerUrl, mcpToken }, 'technical_design', checklistItemResults, verbose);
104
+ return { passed: false, verificationResult };
105
+ }
106
+ /**
107
+ * Build successful design result
108
+ */
109
+ export function buildDesignResult(featureId, technicalDesign, summary, iterations, checklistItemResults) {
110
+ return {
111
+ featureId,
112
+ technicalDesign,
113
+ status: 'success',
114
+ summary,
115
+ iterations,
116
+ data: checklistItemResults
117
+ ? { checklist_item_results: checklistItemResults }
118
+ : undefined,
119
+ };
120
+ }
121
+ /**
122
+ * Build verification failure result
123
+ */
124
+ export function buildVerificationFailureResult(featureId, technicalDesign, verificationResult, iterations) {
125
+ return {
126
+ featureId,
127
+ technicalDesign,
128
+ status: 'error',
129
+ summary: `Checklist verification failed after ${iterations} iterations: ${verificationResult.summary}`,
130
+ verificationResult,
131
+ iterations,
132
+ };
133
+ }
134
+ /**
135
+ * Build error result when no design was generated
136
+ */
137
+ export function buildNoResultsError(featureId) {
138
+ return {
139
+ featureId,
140
+ technicalDesign: null,
141
+ status: 'error',
142
+ summary: 'Failed to generate technical design - no valid result received',
143
+ };
144
+ }
@@ -5,12 +5,15 @@ export interface TechnicalDesignOptions {
5
5
  mcpServerUrl: string;
6
6
  mcpToken: string;
7
7
  verbose?: boolean;
8
+ maxVerificationIterations?: number;
8
9
  }
9
10
  export interface TechnicalDesignResult {
10
11
  featureId: string;
11
12
  technicalDesign: string | null;
12
13
  status: 'success' | 'error';
13
14
  summary: string;
15
+ verificationResult?: any;
16
+ iterations?: number;
14
17
  savedViaHttp?: boolean;
15
18
  data?: {
16
19
  checklist_item_results?: any[];