edsger 0.2.7 → 0.2.8

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.
@@ -1,6 +1,7 @@
1
1
  import { EdsgerConfig } from '../../types/index.js';
2
2
  import { ChecklistPhaseContext } from '../../services/checklist.js';
3
3
  import { type ChecklistVerificationResult } from '../technical-design-verification/index.js';
4
+ import { FeedbacksContext } from '../../services/feedbacks.js';
4
5
  export interface TechnicalDesignResult {
5
6
  featureId: string;
6
7
  technicalDesign: string | null;
@@ -21,7 +22,7 @@ interface VerificationCycleResult {
21
22
  /**
22
23
  * Perform verification and determine if iteration should continue
23
24
  */
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
+ export declare function performVerificationCycle(technicalDesign: string, checklistContext: ChecklistPhaseContext | null, feedbacksContext: FeedbacksContext | null, featureId: string, featureName: string, featureDescription: string | undefined, config: EdsgerConfig, currentIteration: number, maxIterations: number, mcpServerUrl: string, mcpToken: string, verbose?: boolean): Promise<VerificationCycleResult>;
25
26
  /**
26
27
  * Build successful design result
27
28
  */
@@ -6,7 +6,7 @@ import { logFeatureVerificationEvent } from '../../services/audit-logs.js';
6
6
  /**
7
7
  * Perform verification and determine if iteration should continue
8
8
  */
9
- export async function performVerificationCycle(technicalDesign, checklistContext, featureId, featureName, featureDescription, config, currentIteration, maxIterations, mcpServerUrl, mcpToken, verbose) {
9
+ export async function performVerificationCycle(technicalDesign, checklistContext, feedbacksContext, featureId, featureName, featureDescription, config, currentIteration, maxIterations, mcpServerUrl, mcpToken, verbose) {
10
10
  // No verification needed if no checklist context
11
11
  if (!checklistContext || checklistContext.checklists.length === 0) {
12
12
  return { passed: true, verificationResult: null };
@@ -16,16 +16,24 @@ export async function performVerificationCycle(technicalDesign, checklistContext
16
16
  }
17
17
  const verificationResult = await verifyTechnicalDesignCompliance({
18
18
  checklistContext,
19
+ feedbacksContext,
19
20
  featureId,
20
21
  featureName,
21
22
  featureDescription,
22
23
  technicalDesign,
23
24
  verbose,
24
25
  }, config);
25
- // Verification passed
26
- if (verificationResult.rejected_count === 0) {
26
+ // Verification passed (both checklists and feedbacks)
27
+ const feedbacksPassed = !verificationResult.feedbacks_rejected_count ||
28
+ verificationResult.feedbacks_rejected_count === 0;
29
+ const checklistsPassed = verificationResult.rejected_count === 0;
30
+ if (checklistsPassed && feedbacksPassed) {
27
31
  if (verbose) {
28
32
  logInfo(`✅ Checklist verification passed: ${verificationResult.confirmed_count} confirmed, ${verificationResult.uncertain_count} uncertain`);
33
+ if (verificationResult.total_feedbacks &&
34
+ verificationResult.total_feedbacks > 0) {
35
+ logInfo(`✅ Feedback verification passed: ${verificationResult.feedbacks_confirmed_count || 0} confirmed, ${verificationResult.feedbacks_uncertain_count || 0} uncertain`);
36
+ }
29
37
  }
30
38
  // Log verification success
31
39
  await logFeatureVerificationEvent(mcpServerUrl, mcpToken, {
@@ -51,7 +59,14 @@ export async function performVerificationCycle(technicalDesign, checklistContext
51
59
  return { passed: true, verificationResult };
52
60
  }
53
61
  // Verification failed
54
- logError(`❌ Iteration ${currentIteration}: Checklist verification FAILED - ${verificationResult.rejected_count} items rejected, ${verificationResult.uncertain_count} uncertain`);
62
+ const errorMessages = [];
63
+ if (!checklistsPassed) {
64
+ errorMessages.push(`${verificationResult.rejected_count} checklist items rejected, ${verificationResult.uncertain_count} uncertain`);
65
+ }
66
+ if (!feedbacksPassed && verificationResult.feedbacks_rejected_count) {
67
+ errorMessages.push(`${verificationResult.feedbacks_rejected_count} feedbacks not addressed, ${verificationResult.feedbacks_uncertain_count || 0} uncertain`);
68
+ }
69
+ logError(`❌ Iteration ${currentIteration}: Verification FAILED - ${errorMessages.join('; ')}`);
55
70
  // Log verification failure with improvement suggestions
56
71
  await logFeatureVerificationEvent(mcpServerUrl, mcpToken, {
57
72
  featureId,
@@ -78,6 +93,28 @@ export async function performVerificationCycle(technicalDesign, checklistContext
78
93
  concerns: item.concerns || [],
79
94
  improvement_suggestions: item.improvement_suggestions || [],
80
95
  })),
96
+ // Include feedback verification results
97
+ feedbacks_confirmed_count: verificationResult.feedbacks_confirmed_count || 0,
98
+ feedbacks_rejected_count: verificationResult.feedbacks_rejected_count || 0,
99
+ feedbacks_uncertain_count: verificationResult.feedbacks_uncertain_count || 0,
100
+ rejected_feedbacks: verificationResult.feedback_verifications
101
+ ?.filter((fb) => fb.verification_status === 'rejected')
102
+ .map((fb) => ({
103
+ feedback_id: fb.feedback_id,
104
+ feedback_title: fb.feedback_title,
105
+ reason: fb.verification_reason || 'No reason provided',
106
+ concerns: fb.concerns || [],
107
+ improvement_suggestions: fb.improvement_suggestions || [],
108
+ })) || [],
109
+ uncertain_feedbacks: verificationResult.feedback_verifications
110
+ ?.filter((fb) => fb.verification_status === 'uncertain')
111
+ .map((fb) => ({
112
+ feedback_id: fb.feedback_id,
113
+ feedback_title: fb.feedback_title,
114
+ reason: fb.verification_reason || 'No reason provided',
115
+ concerns: fb.concerns || [],
116
+ improvement_suggestions: fb.improvement_suggestions || [],
117
+ })) || [],
81
118
  summary: verificationResult.summary,
82
119
  overall_suggestions: verificationResult.overall_suggestions || [],
83
120
  },
@@ -89,7 +89,7 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
89
89
  }
90
90
  await saveTechnicalDesign(mcpServerUrl, mcpToken, featureId, structuredDesignResult.technical_design, verbose);
91
91
  // Perform verification cycle
92
- const verificationCycle = await performVerificationCycle(structuredDesignResult.technical_design, checklistContext || null, featureId, context.featureName, context.featureDescription, config, currentIteration, maxIterations, mcpServerUrl, mcpToken, verbose);
92
+ const verificationCycle = await performVerificationCycle(structuredDesignResult.technical_design, checklistContext || null, context.feedbacksContext, featureId, context.featureName, context.featureDescription, config, currentIteration, maxIterations, mcpServerUrl, mcpToken, verbose);
93
93
  verificationResult = verificationCycle.verificationResult;
94
94
  // If verification passed, exit
95
95
  if (verificationCycle.passed) {
@@ -158,6 +158,7 @@ async function prepareDesignContext(mcpServerUrl, mcpToken, featureId, checklist
158
158
  }
159
159
  let finalContextInfo = contextInfo;
160
160
  let hasFeedbacks = false;
161
+ let feedbacksContext = null;
161
162
  // Check if there's existing technical design
162
163
  const existingTechnicalDesign = context.feature.technical_design;
163
164
  const hasExistingDesign = !!existingTechnicalDesign && existingTechnicalDesign.trim().length > 0;
@@ -167,7 +168,7 @@ async function prepareDesignContext(mcpServerUrl, mcpToken, featureId, checklist
167
168
  }
168
169
  // Add feedbacks context to the design prompt
169
170
  try {
170
- const feedbacksContext = await getFeedbacksForPhase({ featureId, mcpServerUrl, mcpToken, verbose }, 'technical-design');
171
+ feedbacksContext = await getFeedbacksForPhase({ featureId, mcpServerUrl, mcpToken, verbose }, 'technical-design');
171
172
  if (feedbacksContext.feedbacks.length > 0) {
172
173
  hasFeedbacks = true;
173
174
  const feedbacksInfo = formatFeedbacksForContext(feedbacksContext);
@@ -193,14 +194,25 @@ async function prepareDesignContext(mcpServerUrl, mcpToken, featureId, checklist
193
194
  }
194
195
  // Decide on prompt mode based on existing design and feedbacks
195
196
  const isIncrementalUpdate = hasExistingDesign && hasFeedbacks;
196
- if (isIncrementalUpdate && verbose) {
197
- logInfo('🔄 Mode: Incremental Update (existing design + feedbacks)');
198
- }
199
- else if (hasExistingDesign && verbose) {
200
- logInfo('🔄 Mode: Full Redesign (existing design but no feedbacks)');
201
- }
202
- else if (verbose) {
203
- logInfo('✨ Mode: New Design (no existing design)');
197
+ if (verbose) {
198
+ logInfo('\n📋 Design Mode Decision:');
199
+ logInfo(` - Has existing design: ${hasExistingDesign}`);
200
+ logInfo(` - Has feedbacks: ${hasFeedbacks} (${feedbacksContext?.feedbacks.length || 0} feedbacks)`);
201
+ logInfo(` - Mode: ${isIncrementalUpdate ? '🔄 Incremental Update' : hasExistingDesign ? '🔄 Full Redesign' : '✨ New Design'}`);
202
+ if (isIncrementalUpdate && feedbacksContext) {
203
+ logInfo('\n🎯 Feedbacks that will be addressed:');
204
+ feedbacksContext.feedbacks.forEach((fb, idx) => {
205
+ const priorityBadge = fb.priority >= 9
206
+ ? '🔴'
207
+ : fb.priority >= 7
208
+ ? '🟠'
209
+ : fb.priority >= 5
210
+ ? '🟡'
211
+ : '🟢';
212
+ logInfo(` ${idx + 1}. [${fb.feedback_type}] ${fb.title} ${priorityBadge}`);
213
+ logInfo(` ${fb.content.substring(0, 100)}${fb.content.length > 100 ? '...' : ''}`);
214
+ });
215
+ }
204
216
  }
205
217
  const designPrompt = createTechnicalDesignPromptWithContext(featureId, finalContextInfo, existingTechnicalDesign, isIncrementalUpdate);
206
218
  return {
@@ -209,6 +221,7 @@ async function prepareDesignContext(mcpServerUrl, mcpToken, featureId, checklist
209
221
  designPrompt,
210
222
  hasExistingDesign,
211
223
  hasFeedbacks,
224
+ feedbacksContext,
212
225
  };
213
226
  }
214
227
  /**
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { EdsgerConfig } from '../../types/index.js';
6
6
  import { ChecklistPhaseContext } from '../../services/checklist.js';
7
+ import { FeedbacksContext } from '../../services/feedbacks.js';
7
8
  export interface ChecklistItemVerificationResult {
8
9
  checklist_item_id: string;
9
10
  is_satisfied: boolean;
@@ -12,6 +13,15 @@ export interface ChecklistItemVerificationResult {
12
13
  concerns?: string[];
13
14
  improvement_suggestions?: string[];
14
15
  }
16
+ export interface FeedbackVerificationResult {
17
+ feedback_id: string;
18
+ feedback_title: string;
19
+ is_addressed: boolean;
20
+ verification_status: 'confirmed' | 'rejected' | 'uncertain';
21
+ verification_reason: string;
22
+ concerns?: string[];
23
+ improvement_suggestions?: string[];
24
+ }
15
25
  export interface ChecklistVerificationResult {
16
26
  all_verified: boolean;
17
27
  total_items: number;
@@ -19,11 +29,18 @@ export interface ChecklistVerificationResult {
19
29
  rejected_count: number;
20
30
  uncertain_count: number;
21
31
  item_verifications: ChecklistItemVerificationResult[];
32
+ feedbacks_verified?: boolean;
33
+ total_feedbacks?: number;
34
+ feedbacks_confirmed_count?: number;
35
+ feedbacks_rejected_count?: number;
36
+ feedbacks_uncertain_count?: number;
37
+ feedback_verifications?: FeedbackVerificationResult[];
22
38
  summary: string;
23
39
  overall_suggestions?: string[];
24
40
  }
25
41
  export interface VerifyTechnicalDesignOptions {
26
42
  checklistContext: ChecklistPhaseContext;
43
+ feedbacksContext?: FeedbacksContext | null;
27
44
  featureId: string;
28
45
  featureName: string;
29
46
  featureDescription?: string;
@@ -18,16 +18,22 @@ async function* prompt(verificationPrompt) {
18
18
  * Verify checklist compliance for technical design using an independent AI agent
19
19
  */
20
20
  export async function verifyTechnicalDesignCompliance(options, config) {
21
- const { checklistContext, featureId, featureName, featureDescription, technicalDesign, verbose, } = options;
21
+ const { checklistContext, feedbacksContext, featureId, featureName, featureDescription, technicalDesign, verbose, } = options;
22
22
  const totalChecklistItems = checklistContext.checklists.reduce((sum, checklist) => sum + checklist.items.length, 0);
23
+ const totalFeedbacks = feedbacksContext?.feedbacks?.length || 0;
24
+ const hasFeedbacks = totalFeedbacks > 0;
23
25
  if (verbose) {
24
26
  logInfo('🔍 Starting technical design verification...');
25
27
  logInfo(` Verifying ${totalChecklistItems} checklist items`);
28
+ if (hasFeedbacks) {
29
+ logInfo(` Verifying ${totalFeedbacks} human feedbacks`);
30
+ }
26
31
  }
27
32
  try {
28
33
  const systemPrompt = createTechnicalDesignVerificationSystemPrompt(config);
29
34
  const verificationPrompt = createTechnicalDesignVerificationPrompt({
30
35
  checklistContext,
36
+ feedbacksContext: feedbacksContext || undefined,
31
37
  featureId,
32
38
  featureName,
33
39
  featureDescription,
@@ -100,13 +106,20 @@ export async function verifyTechnicalDesignCompliance(options, config) {
100
106
  }
101
107
  if (verbose) {
102
108
  logInfo('\n📊 Verification Summary:');
103
- logInfo(` Total items: ${verificationResult.total_items}`);
109
+ logInfo(` Total checklist items: ${verificationResult.total_items}`);
104
110
  logInfo(` ✅ Confirmed: ${verificationResult.confirmed_count}`);
105
111
  logInfo(` ❌ Rejected: ${verificationResult.rejected_count}`);
106
112
  logInfo(` ⚠️ Uncertain: ${verificationResult.uncertain_count}`);
107
- logInfo(` Summary: ${verificationResult.summary}`);
113
+ if (verificationResult.total_feedbacks &&
114
+ verificationResult.total_feedbacks > 0) {
115
+ logInfo(`\n Total feedbacks: ${verificationResult.total_feedbacks}`);
116
+ logInfo(` ✅ Confirmed: ${verificationResult.feedbacks_confirmed_count || 0}`);
117
+ logInfo(` ❌ Rejected: ${verificationResult.feedbacks_rejected_count || 0}`);
118
+ logInfo(` ⚠️ Uncertain: ${verificationResult.feedbacks_uncertain_count || 0}`);
119
+ }
120
+ logInfo(`\n Summary: ${verificationResult.summary}`);
108
121
  if (verificationResult.rejected_count > 0) {
109
- logInfo('\n❌ Rejected items:');
122
+ logInfo('\n❌ Rejected checklist items:');
110
123
  verificationResult.item_verifications
111
124
  .filter((v) => v.verification_status === 'rejected')
112
125
  .forEach((v) => {
@@ -114,6 +127,16 @@ export async function verifyTechnicalDesignCompliance(options, config) {
114
127
  logInfo(` Reason: ${v.verification_reason}`);
115
128
  });
116
129
  }
130
+ if (verificationResult.feedbacks_rejected_count &&
131
+ verificationResult.feedbacks_rejected_count > 0) {
132
+ logInfo('\n❌ Rejected feedbacks:');
133
+ verificationResult.feedback_verifications
134
+ ?.filter((v) => v.verification_status === 'rejected')
135
+ .forEach((v) => {
136
+ logInfo(` - ${v.feedback_title}`);
137
+ logInfo(` Reason: ${v.verification_reason}`);
138
+ });
139
+ }
117
140
  }
118
141
  return verificationResult;
119
142
  }
@@ -1,8 +1,10 @@
1
1
  import { EdsgerConfig } from '../types/index.js';
2
2
  import { ChecklistPhaseContext } from '../services/checklist.js';
3
+ import { FeedbacksContext } from '../services/feedbacks.js';
3
4
  export declare const createTechnicalDesignVerificationSystemPrompt: (_config: EdsgerConfig) => string;
4
5
  export interface TechnicalDesignVerificationPromptOptions {
5
6
  checklistContext: ChecklistPhaseContext;
7
+ feedbacksContext?: FeedbacksContext;
6
8
  featureId: string;
7
9
  featureName: string;
8
10
  featureDescription?: string;
@@ -1,10 +1,10 @@
1
1
  export const createTechnicalDesignVerificationSystemPrompt = (_config) => {
2
- return `You are an independent quality assurance auditor specializing in technical design review. Your role is to critically evaluate whether a technical design document satisfies checklist requirements.
2
+ return `You are an independent quality assurance auditor specializing in technical design review. Your role is to critically evaluate whether a technical design document satisfies checklist requirements and addresses human feedbacks.
3
3
 
4
- **Your Mission**: Verify Technical Design Against Requirements
5
- - Review the checklist requirements
4
+ **Your Mission**: Verify Technical Design Against Requirements and Feedbacks
5
+ - Review the checklist requirements and human feedbacks
6
6
  - Examine the technical design document
7
- - Determine if the design adequately addresses each requirement
7
+ - Determine if the design adequately addresses each requirement and feedback
8
8
  - Be CRITICAL and look for gaps, inconsistencies, or missing elements
9
9
  - Quality matters - don't accept bare minimum
10
10
 
@@ -52,12 +52,33 @@ You MUST respond with a JSON object in this EXACT format:
52
52
  "improvement_suggestions": ["Specific, actionable suggestions for improvement (for rejected/uncertain items)"]
53
53
  }
54
54
  ],
55
- "summary": "Overall summary of verification findings",
55
+ "feedbacks_verified": true/false,
56
+ "total_feedbacks": number,
57
+ "feedbacks_confirmed_count": number,
58
+ "feedbacks_rejected_count": number,
59
+ "feedbacks_uncertain_count": number,
60
+ "feedback_verifications": [
61
+ {
62
+ "feedback_id": "uuid",
63
+ "feedback_title": "title",
64
+ "is_addressed": true/false,
65
+ "verification_status": "confirmed|rejected|uncertain",
66
+ "verification_reason": "Detailed explanation of whether the feedback was addressed",
67
+ "concerns": ["Optional array of specific concerns"],
68
+ "improvement_suggestions": ["Specific suggestions for addressing this feedback (for rejected/uncertain items)"]
69
+ }
70
+ ],
71
+ "summary": "Overall summary of verification findings (include both checklist and feedback results)",
56
72
  "overall_suggestions": ["High-level suggestions for improving the overall design (if there are failures)"]
57
73
  }
58
74
  }
59
75
  \`\`\`
60
76
 
77
+ **IMPORTANT**:
78
+ - If feedbacks are provided, you MUST include feedback_verifications for ALL feedbacks
79
+ - Each feedback must be verified to check if it was properly addressed in the technical design
80
+ - For feedbacks, check if the specific concern or requirement mentioned in the feedback has been incorporated into the design
81
+
61
82
  **For rejected/uncertain items**: Provide specific, actionable improvement_suggestions such as:
62
83
  - "Add architectural diagram showing component interactions"
63
84
  - "Include detailed API specifications for X endpoint"
@@ -67,7 +88,7 @@ You MUST respond with a JSON object in this EXACT format:
67
88
  Be thorough, be critical, be fair. Your verification protects quality.`;
68
89
  };
69
90
  export const createTechnicalDesignVerificationPrompt = (options) => {
70
- const { checklistContext, featureId, featureName, featureDescription, technicalDesign, } = options;
91
+ const { checklistContext, feedbacksContext, featureId, featureName, featureDescription, technicalDesign, } = options;
71
92
  // Format all checklist items with their requirements
72
93
  const checklistItemsSection = checklistContext.checklists
73
94
  .flatMap((checklist) => checklist.items.map((item) => {
@@ -81,9 +102,38 @@ export const createTechnicalDesignVerificationPrompt = (options) => {
81
102
  }))
82
103
  .join('\n---\n');
83
104
  const totalChecklistItems = checklistContext.checklists.reduce((sum, checklist) => sum + checklist.items.length, 0);
105
+ // Format feedbacks section if provided
106
+ let feedbacksSection = '';
107
+ let totalFeedbacks = 0;
108
+ if (feedbacksContext && feedbacksContext.feedbacks.length > 0) {
109
+ totalFeedbacks = feedbacksContext.feedbacks.length;
110
+ feedbacksSection = `
111
+
112
+ ## Human Feedbacks to Verify (${totalFeedbacks})
113
+
114
+ ${feedbacksContext.feedbacks
115
+ .map((feedback, idx) => {
116
+ const priorityBadge = feedback.priority >= 9
117
+ ? '🔴'
118
+ : feedback.priority >= 7
119
+ ? '🟠'
120
+ : feedback.priority >= 5
121
+ ? '🟡'
122
+ : '🟢';
123
+ return `### Feedback ${idx + 1}: ${feedback.title} ${priorityBadge}
124
+ **ID**: ${feedback.id}
125
+ **Type**: ${feedback.feedback_type}
126
+ **Priority**: ${feedback.priority}
127
+ **Content**: ${feedback.content}
128
+ `;
129
+ })
130
+ .join('\n---\n')}
131
+
132
+ `;
133
+ }
84
134
  return `# Technical Design Verification Task
85
135
 
86
- You are verifying that a technical design document satisfies checklist requirements.
136
+ You are verifying that a technical design document satisfies checklist requirements${totalFeedbacks > 0 ? ' and addresses human feedbacks' : ''}.
87
137
 
88
138
  ## Feature Context
89
139
 
@@ -97,12 +147,14 @@ ${technicalDesign}
97
147
 
98
148
  ## Checklist Requirements to Verify (${totalChecklistItems})
99
149
 
100
- ${checklistItemsSection}
150
+ ${checklistItemsSection}${feedbacksSection}
101
151
 
102
152
  ---
103
153
 
104
154
  ## Your Verification Task
105
155
 
156
+ ### Part 1: Checklist Verification
157
+
106
158
  For EACH checklist item above:
107
159
 
108
160
  1. **Understand the Requirement**: What does this checklist item require?
@@ -127,8 +179,36 @@ For EACH checklist item above:
127
179
  - Suggest what sections or details should be added to the design
128
180
  - Indicate what should be expanded or modified
129
181
  - Give concrete examples when possible
182
+ ${totalFeedbacks > 0
183
+ ? `
184
+
185
+ ### Part 2: Feedback Verification
186
+
187
+ For EACH feedback above:
188
+
189
+ 1. **Understand the Feedback**: What specific concern, requirement, or suggestion does this feedback provide?
190
+
191
+ 2. **Examine the Design**: Look at the technical design document to see if this feedback was addressed
192
+
193
+ 3. **Determine if Addressed**: Was the feedback properly incorporated into the design?
194
+ - Does the design explicitly address this feedback?
195
+ - Are the changes requested in the feedback reflected in the design?
196
+ - Is the implementation aligned with the feedback's intent?
197
+
198
+ 4. **Make Your Determination**:
199
+ - **CONFIRMED** (is_addressed: true): The design clearly addresses this feedback
200
+ - **REJECTED** (is_addressed: false): The feedback was not addressed or was ignored
201
+ - **UNCERTAIN** (is_addressed: false): The design partially addresses the feedback but incompletely
202
+
203
+ 5. **Document Your Reasoning**: Explain whether and how the feedback was addressed
204
+
205
+ 6. **Provide Improvement Suggestions** (for rejected/uncertain feedbacks):
206
+ - Explain how the feedback should be incorporated
207
+ - Suggest specific modifications to address the feedback
208
+ - Provide concrete examples of what should be added or changed`
209
+ : ''}
130
210
 
131
211
  Remember: Focus on what the design actually contains, not on claims. Be thorough and fair.
132
212
 
133
- Provide your verification results in the required JSON format with improvement_suggestions for any rejected or uncertain items.`;
213
+ Provide your verification results in the required JSON format with improvement_suggestions for any rejected or uncertain items${totalFeedbacks > 0 ? ' or feedbacks' : ''}.`;
134
214
  };
@@ -38,6 +38,23 @@ export interface LogVerificationEventParams {
38
38
  concerns?: string[];
39
39
  improvement_suggestions?: string[];
40
40
  }>;
41
+ feedbacks_confirmed_count?: number;
42
+ feedbacks_rejected_count?: number;
43
+ feedbacks_uncertain_count?: number;
44
+ rejected_feedbacks?: Array<{
45
+ feedback_id: string;
46
+ feedback_title: string;
47
+ reason: string;
48
+ concerns?: string[];
49
+ improvement_suggestions?: string[];
50
+ }>;
51
+ uncertain_feedbacks?: Array<{
52
+ feedback_id: string;
53
+ feedback_title: string;
54
+ reason: string;
55
+ concerns?: string[];
56
+ improvement_suggestions?: string[];
57
+ }>;
41
58
  summary?: string;
42
59
  overall_suggestions?: string[];
43
60
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edsger",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {