@backendkit-labs/agent-core 0.20.2 → 0.22.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/README.md +3 -0
- package/dist/delegation/DelegationBus.d.ts +15 -7
- package/dist/delegation/DelegationBus.d.ts.map +1 -1
- package/dist/delegation/DelegationBus.js +33 -12
- package/dist/delegation/DelegationBus.js.map +1 -1
- package/dist/engine/AgentEngine.d.ts +9 -45
- package/dist/engine/AgentEngine.d.ts.map +1 -1
- package/dist/engine/AgentEngine.js +125 -431
- package/dist/engine/AgentEngine.js.map +1 -1
- package/dist/engine/ApprovalGate.d.ts +33 -0
- package/dist/engine/ApprovalGate.d.ts.map +1 -0
- package/dist/engine/ApprovalGate.js +76 -0
- package/dist/engine/ApprovalGate.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +14 -0
- package/dist/engine/AuditLogger.d.ts.map +1 -0
- package/dist/engine/AuditLogger.js +34 -0
- package/dist/engine/AuditLogger.js.map +1 -0
- package/dist/engine/HistoryManager.d.ts +42 -0
- package/dist/engine/HistoryManager.d.ts.map +1 -0
- package/dist/engine/HistoryManager.js +156 -0
- package/dist/engine/HistoryManager.js.map +1 -0
- package/dist/engine/MCPRegistrar.d.ts +45 -0
- package/dist/engine/MCPRegistrar.d.ts.map +1 -0
- package/dist/engine/MCPRegistrar.js +217 -0
- package/dist/engine/MCPRegistrar.js.map +1 -0
- package/dist/engine/qa-orchestrator.js +2 -2
- package/dist/engine/qa-orchestrator.js.map +1 -1
- package/dist/mcp/MCPClientManager.d.ts +15 -0
- package/dist/mcp/MCPClientManager.d.ts.map +1 -1
- package/dist/mcp/MCPClientManager.js +62 -8
- package/dist/mcp/MCPClientManager.js.map +1 -1
- package/dist/qa/qa-service.d.ts.map +1 -1
- package/dist/qa/qa-service.js +43 -34
- package/dist/qa/qa-service.js.map +1 -1
- package/dist/reflection/lessons-memo-generator.d.ts +1 -1
- package/dist/reflection/lessons-memo-generator.js +64 -64
- package/dist/reflection/lessons-memo-generator.js.map +1 -1
- package/package.json +87 -87
package/dist/qa/qa-service.js
CHANGED
|
@@ -10,18 +10,27 @@ const LLM_RETRY = {
|
|
|
10
10
|
abortIf: (e) => e.type === 'http' && [401, 403].includes(e.status ?? 0),
|
|
11
11
|
};
|
|
12
12
|
const APPROVAL_PATTERNS = [
|
|
13
|
-
|
|
13
|
+
// English
|
|
14
|
+
'approved', 'lgtm', 'looks good', 'good to go', ':+1:',
|
|
15
|
+
'no issues', 'looks correct', 'well implemented', 'ready to merge', 'ship it',
|
|
16
|
+
// Spanish (fallback for mixed-language responses)
|
|
17
|
+
'visto bueno', 'aprobado', 'aprueba', 'ok',
|
|
14
18
|
'se ve bien', 'correcto', 'bien', 'buen trabajo',
|
|
15
19
|
'no hay problemas', 'sin problemas', 'todo bien',
|
|
16
20
|
'puede continuar', 'procede', 'listo para commit',
|
|
17
|
-
'lgtm', 'looks good', 'good to go', ':+1:',
|
|
18
21
|
];
|
|
19
22
|
const REJECTION_PATTERNS = [
|
|
20
|
-
|
|
23
|
+
// English
|
|
24
|
+
'error', 'rework', 'edge cases', 'missing tests', 'needs changes',
|
|
25
|
+
'requires changes', 'not approved', 'rejected', 'should fix',
|
|
26
|
+
'needs improvement', 'missing error handling', 'incomplete',
|
|
27
|
+
'incorrect',
|
|
28
|
+
// Spanish (fallback for mixed-language responses)
|
|
29
|
+
'problema', 'falta', 'incorrecto', 'mal',
|
|
21
30
|
'debe corregir', 'necesita cambios', 'no apruebo',
|
|
22
|
-
'rechazado', '
|
|
23
|
-
'no esta bien', '
|
|
24
|
-
'
|
|
31
|
+
'rechazado', 'issues encontrados',
|
|
32
|
+
'no esta bien', 'faltan tests',
|
|
33
|
+
'casos borde', 'mejorable',
|
|
25
34
|
];
|
|
26
35
|
class QAService {
|
|
27
36
|
opts;
|
|
@@ -48,7 +57,7 @@ class QAService {
|
|
|
48
57
|
const systemPrompt = this.opts.basePrompt() + qaProfile.systemPromptAddition;
|
|
49
58
|
const result = await (0, retry_1.retry)(() => this.opts.client.chat([
|
|
50
59
|
{ role: 'system', content: systemPrompt },
|
|
51
|
-
{ role: 'user', content: `
|
|
60
|
+
{ role: 'user', content: `Review the following work and approve it, or point out quality issues, missing tests, or important edge cases:\n\n${workContent}` },
|
|
52
61
|
], undefined, 0.2), LLM_RETRY);
|
|
53
62
|
if (!result.ok) {
|
|
54
63
|
const fallback = `(QA review no disponible: ${result.error.message}. El codigo se acepta sin revision de QA.)`;
|
|
@@ -66,28 +75,28 @@ class QAService {
|
|
|
66
75
|
const qaProfile = this.opts.allAgents?.find(a => a.id === 'qa-engineer');
|
|
67
76
|
const systemPrompt = qaProfile?.systemPromptAddition
|
|
68
77
|
? this.opts.basePrompt() + qaProfile.systemPromptAddition
|
|
69
|
-
: this.opts.basePrompt() + '\n\
|
|
78
|
+
: this.opts.basePrompt() + '\n\nYou are an expert QA engineer. You review code changes before committing.';
|
|
70
79
|
const contextParts = [
|
|
71
|
-
'##
|
|
80
|
+
'## Staged changes (git diff)',
|
|
72
81
|
'',
|
|
73
82
|
'```diff',
|
|
74
83
|
gitDiff.slice(0, 8000),
|
|
75
|
-
gitDiff.length > 8000 ? '\n... (diff
|
|
84
|
+
gitDiff.length > 8000 ? '\n... (diff truncated)' : '',
|
|
76
85
|
'```',
|
|
77
86
|
];
|
|
78
87
|
if (stagedFiles.length > 0) {
|
|
79
|
-
contextParts.push('', '##
|
|
88
|
+
contextParts.push('', '## Modified files', '', stagedFiles.map(f => `- ${f}`).join('\n'));
|
|
80
89
|
}
|
|
81
90
|
const userMessage = [
|
|
82
|
-
'
|
|
91
|
+
'The following changes are about to be committed. Review the code and determine whether it is ready to commit.',
|
|
83
92
|
'',
|
|
84
|
-
'
|
|
85
|
-
'1.
|
|
86
|
-
'2.
|
|
87
|
-
'3.
|
|
93
|
+
'You must:',
|
|
94
|
+
'1. Verify the code is correct and follows good practices',
|
|
95
|
+
'2. Detect quality, security, or performance issues',
|
|
96
|
+
'3. Point out uncovered edge cases or missing tests',
|
|
88
97
|
'',
|
|
89
|
-
'
|
|
90
|
-
'
|
|
98
|
+
'Respond with APPROVED if the code is ready to commit, or REJECTED if there are issues to fix.',
|
|
99
|
+
'If there are issues, specify exactly which files and lines need changes.',
|
|
91
100
|
'',
|
|
92
101
|
...contextParts,
|
|
93
102
|
].join('\n');
|
|
@@ -111,23 +120,23 @@ class QAService {
|
|
|
111
120
|
const qaProfile = this.opts.allAgents?.find(a => a.id === 'qa-engineer');
|
|
112
121
|
const systemPrompt = qaProfile?.systemPromptAddition
|
|
113
122
|
? this.opts.basePrompt() + qaProfile.systemPromptAddition
|
|
114
|
-
: this.opts.basePrompt() + '\n\
|
|
123
|
+
: this.opts.basePrompt() + '\n\nYou are an expert QA engineer. You diagnose failing tests and propose solutions.';
|
|
115
124
|
const contextParts = [
|
|
116
|
-
'## Tests
|
|
125
|
+
'## Failing Tests',
|
|
117
126
|
'',
|
|
118
127
|
testOutput.slice(0, 4000),
|
|
119
|
-
testOutput.length > 4000 ? '\n... (
|
|
128
|
+
testOutput.length > 4000 ? '\n... (output truncated)' : '',
|
|
120
129
|
];
|
|
121
130
|
if (gitDiff) {
|
|
122
|
-
contextParts.push('', '##
|
|
131
|
+
contextParts.push('', '## Code diff to commit', '', '```diff', gitDiff.slice(0, 6000), gitDiff.length > 6000 ? '\n... (diff truncated)' : '', '```');
|
|
123
132
|
}
|
|
124
133
|
const userMessage = [
|
|
125
|
-
'
|
|
134
|
+
'Project tests failed while attempting to commit. Analyze the test output and code diff to:',
|
|
126
135
|
'',
|
|
127
|
-
'1.
|
|
128
|
-
'2.
|
|
129
|
-
'3.
|
|
130
|
-
'4.
|
|
136
|
+
'1. Identify the root cause of each failure',
|
|
137
|
+
'2. Point out exactly which files and lines are causing the issues',
|
|
138
|
+
'3. Suggest specific fixes (with code if applicable)',
|
|
139
|
+
'4. Indicate whether the problem is in the code or in the tests themselves',
|
|
131
140
|
'',
|
|
132
141
|
...contextParts,
|
|
133
142
|
].join('\n');
|
|
@@ -138,8 +147,8 @@ class QAService {
|
|
|
138
147
|
if (!result.ok) {
|
|
139
148
|
return `(QA no disponible: ${result.error.message}. Corrige los errores manualmente.)`;
|
|
140
149
|
}
|
|
141
|
-
const diagnosis = result.value.content ?? '(QA
|
|
142
|
-
this.opts.onQAReview?.(`QA Diagnosis - Tests
|
|
150
|
+
const diagnosis = result.value.content ?? '(QA could not generate a diagnosis)';
|
|
151
|
+
this.opts.onQAReview?.(`QA Diagnosis - Failing Tests\n\n${diagnosis}`);
|
|
143
152
|
return diagnosis;
|
|
144
153
|
}
|
|
145
154
|
evaluateReview(review) {
|
|
@@ -176,8 +185,8 @@ class QAService {
|
|
|
176
185
|
dimension: 'Code Review',
|
|
177
186
|
hallazgo: trimmed.slice(0, 200),
|
|
178
187
|
severidad,
|
|
179
|
-
evidencia: `
|
|
180
|
-
recomendacion: '
|
|
188
|
+
evidencia: `QA review line: "${trimmed.slice(0, 150)}"`,
|
|
189
|
+
recomendacion: 'Review and fix the issue flagged in the QA review',
|
|
181
190
|
agenteResponsable: 'qa-engineer',
|
|
182
191
|
});
|
|
183
192
|
}
|
|
@@ -186,10 +195,10 @@ class QAService {
|
|
|
186
195
|
hallazgos.push({
|
|
187
196
|
id: `QA-${Date.now().toString(36)}-0`,
|
|
188
197
|
dimension: 'Code Review',
|
|
189
|
-
hallazgo: '
|
|
198
|
+
hallazgo: 'The QA review flagged issues in the code',
|
|
190
199
|
severidad: 'medium',
|
|
191
|
-
evidencia: `
|
|
192
|
-
recomendacion: '
|
|
200
|
+
evidencia: `Review text: "${review.slice(0, 300)}"`,
|
|
201
|
+
recomendacion: 'Review the full QA feedback and make the necessary changes',
|
|
193
202
|
agenteResponsable: 'qa-engineer',
|
|
194
203
|
});
|
|
195
204
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa-service.js","sourceRoot":"","sources":["../../src/qa/qa-service.ts"],"names":[],"mappings":";;;AAAA,kDAA+C;AAG/C,6CAAiD;AAGjD,MAAM,SAAS,GAAG;IACd,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,IAAI,EAAE,aAAsB,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAe,EAAE;IACnG,OAAO,EAAE,CAAC,CAAoC,EAAE,EAAE,CAC9C,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;IACzE,OAAO,EAAE,CAAC,CAAoC,EAAE,EAAE,CAC9C,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;CAC9D,CAAC;AAoBF,MAAM,iBAAiB,GAAG;IACtB,
|
|
1
|
+
{"version":3,"file":"qa-service.js","sourceRoot":"","sources":["../../src/qa/qa-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export declare class LessonsMemoGenerator {
|
|
|
51
51
|
*/
|
|
52
52
|
private buildRecommendation;
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* Builds a self-review checklist based on detected patterns.
|
|
55
55
|
*/
|
|
56
56
|
private buildChecklist;
|
|
57
57
|
private formatFailureType;
|
|
@@ -85,18 +85,18 @@ class LessonsMemoGenerator {
|
|
|
85
85
|
}
|
|
86
86
|
const sections = [];
|
|
87
87
|
// Encabezado
|
|
88
|
-
sections.push(`#
|
|
88
|
+
sections.push(`# Lessons Learned (Auto-generated)
|
|
89
89
|
|
|
90
|
-
>
|
|
91
|
-
>
|
|
90
|
+
> Automatically generated by the Reflection Engine.
|
|
91
|
+
> Based on ${stats.totalIncidents} incidents analyzed across ${stats.activeDomains.length} domains.
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
95
95
|
`);
|
|
96
|
-
// ---
|
|
97
|
-
sections.push('##
|
|
98
|
-
sections.push('|
|
|
99
|
-
sections.push('
|
|
96
|
+
// --- Section 1: Summary by domain ---
|
|
97
|
+
sections.push('## Summary by Domain\n');
|
|
98
|
+
sections.push('| Domain | Incidents | Active Patterns |');
|
|
99
|
+
sections.push('|--------|-----------|-----------------|');
|
|
100
100
|
for (const domain of stats.activeDomains) {
|
|
101
101
|
const incidentCount = stats.countsByDomain[domain] ?? 0;
|
|
102
102
|
const patternCount = stats.patternsByDomain[domain] ?? 0;
|
|
@@ -104,10 +104,10 @@ class LessonsMemoGenerator {
|
|
|
104
104
|
sections.push(`| ${icon} ${domain} | ${incidentCount} | ${patternCount} |`);
|
|
105
105
|
}
|
|
106
106
|
sections.push('');
|
|
107
|
-
// ---
|
|
108
|
-
sections.push('##
|
|
107
|
+
// --- Section 2: Lessons by pattern ---
|
|
108
|
+
sections.push('## Lessons Learned\n');
|
|
109
109
|
if (allPatterns.length === 0) {
|
|
110
|
-
sections.push('_No
|
|
110
|
+
sections.push('_No active patterns. Recorded incidents have not crossed the promotion threshold._\n');
|
|
111
111
|
}
|
|
112
112
|
else {
|
|
113
113
|
for (const pattern of allPatterns) {
|
|
@@ -115,22 +115,22 @@ class LessonsMemoGenerator {
|
|
|
115
115
|
sections.push('');
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
// ---
|
|
118
|
+
// --- Section 3: Promoted policy rules ---
|
|
119
119
|
if (promotedRules.length > 0) {
|
|
120
|
-
sections.push('##
|
|
121
|
-
sections.push('| ID |
|
|
122
|
-
sections.push('
|
|
120
|
+
sections.push('## Promoted Policy Rules\n');
|
|
121
|
+
sections.push('| ID | Name | Domain | Trigger |');
|
|
122
|
+
sections.push('|----|------|--------|---------|');
|
|
123
123
|
for (const rule of promotedRules) {
|
|
124
124
|
const triggerInfo = rule.trigger
|
|
125
125
|
? `${rule.trigger.pattern} (x${rule.trigger.minOccurrences})`
|
|
126
|
-
: 'auto-
|
|
126
|
+
: 'auto-generated';
|
|
127
127
|
sections.push(`| ${rule.id} | ${rule.name} | ${rule.trigger?.domain ?? 'N/A'} | ${triggerInfo} |`);
|
|
128
128
|
}
|
|
129
129
|
sections.push('');
|
|
130
130
|
}
|
|
131
|
-
// ---
|
|
132
|
-
sections.push('## Checklist
|
|
133
|
-
sections.push(`
|
|
131
|
+
// --- Section 4: Self-review checklist ---
|
|
132
|
+
sections.push('## Self-Review Checklist\n');
|
|
133
|
+
sections.push(`Based on detected patterns, before finalizing any implementation, verify:
|
|
134
134
|
|
|
135
135
|
${this.buildChecklist(allPatterns)}
|
|
136
136
|
`);
|
|
@@ -184,16 +184,16 @@ ${this.buildChecklist(allPatterns)}
|
|
|
184
184
|
return [
|
|
185
185
|
`### ${severityEmoji} ${this.formatFailureType(pattern.failureType)}`,
|
|
186
186
|
'',
|
|
187
|
-
`- **
|
|
188
|
-
`- **
|
|
189
|
-
`- **
|
|
187
|
+
`- **Domain:** ${pattern.domain}`,
|
|
188
|
+
`- **Occurrences:** ${pattern.count} (last: ${pattern.lastSeen.slice(0, 10)})`,
|
|
189
|
+
`- **Dominant severity:** ${pattern.severity}`,
|
|
190
190
|
`- **Dimension:** ${pattern.dominantDimension}`,
|
|
191
|
-
`- **
|
|
191
|
+
`- **Typical gate:** ${pattern.dominantGate}`,
|
|
192
192
|
'',
|
|
193
|
-
'**
|
|
194
|
-
`> ${pattern.recommendedAction || '
|
|
193
|
+
'**What to avoid:**',
|
|
194
|
+
`> ${pattern.recommendedAction || 'This pattern has repeated. Avoid in future implementations.'}`,
|
|
195
195
|
'',
|
|
196
|
-
'**
|
|
196
|
+
'**Recommendation:**',
|
|
197
197
|
`> ${recommendation}`,
|
|
198
198
|
'',
|
|
199
199
|
].join('\n');
|
|
@@ -206,64 +206,64 @@ ${this.buildChecklist(allPatterns)}
|
|
|
206
206
|
// Recomendaciones especificas por failureType
|
|
207
207
|
const recommendations = {
|
|
208
208
|
// Audit
|
|
209
|
-
missing_rollback: '
|
|
210
|
-
connection_leak: '
|
|
211
|
-
security_vulnerability: '
|
|
212
|
-
missing_test_coverage: '
|
|
213
|
-
incomplete_error_handling: '
|
|
214
|
-
architecture_violation: '
|
|
215
|
-
hardcoded_secret: '
|
|
209
|
+
missing_rollback: 'Always implement rollback/compensation for write operations. Verify every write/save has a corresponding rollback.',
|
|
210
|
+
connection_leak: 'Ensure all HTTP/DB clients are closed in finally blocks. Use try/finally or using pattern.',
|
|
211
|
+
security_vulnerability: 'Review OWASP Top 10 before implementing authentication, authorization, or user input handling.',
|
|
212
|
+
missing_test_coverage: 'Every new public method must have at least one unit test. Verify coverage before committing.',
|
|
213
|
+
incomplete_error_handling: 'Every function that can fail must have try/catch with explicit error handling. Do not leave errors unhandled.',
|
|
214
|
+
architecture_violation: 'Review ADRs before implementing. Verify the implementation respects documented architectural decisions.',
|
|
215
|
+
hardcoded_secret: 'Never hardcode secrets, API keys, or tokens. Use environment variables or a secrets vault.',
|
|
216
216
|
// Test
|
|
217
|
-
tsc_noEmit_type_error: '
|
|
218
|
-
coverage_below_threshold: '
|
|
219
|
-
flaky_test: '
|
|
220
|
-
test_without_assertion: '
|
|
217
|
+
tsc_noEmit_type_error: 'Run tsc --noEmit before each commit. Type errors must be fixed in code, not silenced with `as any`.',
|
|
218
|
+
coverage_below_threshold: 'Do not commit if coverage drops below threshold. Add tests for new code BEFORE committing.',
|
|
219
|
+
flaky_test: 'Flaky tests must be marked as flaky and isolated. Do not ignore them.',
|
|
220
|
+
test_without_assertion: 'Every test must have at least one assertion. A test without an assertion is not a test.',
|
|
221
221
|
// Commit
|
|
222
|
-
typecheck_failed_before_commit: '
|
|
223
|
-
test_failed_before_commit: '
|
|
224
|
-
branch_naming_invalid: '
|
|
222
|
+
typecheck_failed_before_commit: 'Run type check before each commit. Do not rely solely on the IDE.',
|
|
223
|
+
test_failed_before_commit: 'Run tests before committing. If they fail, diagnose and fix.',
|
|
224
|
+
branch_naming_invalid: 'Follow the branch naming convention: feature/initials_description_date or fix/initials_description_date.',
|
|
225
225
|
// Agent
|
|
226
|
-
wrong_agent_selected: '
|
|
227
|
-
agent_hallucination: '
|
|
228
|
-
delegation_failed: '
|
|
229
|
-
tool_execution_failed: '
|
|
226
|
+
wrong_agent_selected: 'Verify the selected agent is correct for the task domain. Use the capability matrix as reference.',
|
|
227
|
+
agent_hallucination: 'Verify all referenced APIs, methods, and packages actually exist. Do not invent functionality.',
|
|
228
|
+
delegation_failed: 'When delegating to another agent, provide sufficient context: relevant files, history, and constraints.',
|
|
229
|
+
tool_execution_failed: 'Verify invoked tools are available in the current environment.',
|
|
230
230
|
// Bootstrap
|
|
231
|
-
missing_config_yaml: '
|
|
232
|
-
memory_load_failure: '
|
|
233
|
-
manifest_corrupt: '
|
|
231
|
+
missing_config_yaml: 'Verify configuration files exist before starting. If missing, run the seed.',
|
|
232
|
+
memory_load_failure: 'Verify persistent memory is accessible. If load fails, continue with defaults.',
|
|
233
|
+
manifest_corrupt: 'Validate YAML before writing the manifest. Use tmp+rename pattern for atomic writes.',
|
|
234
234
|
};
|
|
235
235
|
return recommendations[ft]
|
|
236
|
-
?? `
|
|
236
|
+
?? `Pattern "${ft}" detected ${pattern.count} times. Review previous implementations to avoid repeating the same mistake.`;
|
|
237
237
|
}
|
|
238
238
|
/**
|
|
239
|
-
*
|
|
239
|
+
* Builds a self-review checklist based on detected patterns.
|
|
240
240
|
*/
|
|
241
241
|
buildChecklist(patterns) {
|
|
242
242
|
const checks = [];
|
|
243
|
-
//
|
|
244
|
-
checks.push('### 1.
|
|
245
|
-
checks.push('- [ ]
|
|
246
|
-
checks.push('- [ ]
|
|
243
|
+
// Always-present general checklist
|
|
244
|
+
checks.push('### 1. Connections');
|
|
245
|
+
checks.push('- [ ] If you created a WRITER (write, save, persist), is there a READER (read, load, subscribe)?');
|
|
246
|
+
checks.push('- [ ] If you added a hook/extension point, is it wired up somewhere?');
|
|
247
247
|
checks.push('');
|
|
248
|
-
checks.push('### 2.
|
|
249
|
-
checks.push('- [ ]
|
|
250
|
-
checks.push('- [ ]
|
|
251
|
-
checks.push('- [ ]
|
|
248
|
+
checks.push('### 2. Logic');
|
|
249
|
+
checks.push('- [ ] If using includes(), does it NOT match its own negation ("no X".includes("X") = true)?');
|
|
250
|
+
checks.push('- [ ] If there are scores/weights, is the direction correct? (higher = better or higher = worse?)');
|
|
251
|
+
checks.push('- [ ] If there are if/else branches, are they in the correct order?');
|
|
252
252
|
checks.push('');
|
|
253
|
-
checks.push('### 3.
|
|
254
|
-
checks.push('- [ ]
|
|
255
|
-
checks.push('- [ ]
|
|
256
|
-
checks.push('- [ ]
|
|
257
|
-
//
|
|
253
|
+
checks.push('### 3. Robustness');
|
|
254
|
+
checks.push('- [ ] Do all switch statements have a default case?');
|
|
255
|
+
checks.push('- [ ] Are all catch blocks handling the error (not empty)?');
|
|
256
|
+
checks.push('- [ ] Do file writes use the tmp+rename atomic pattern?');
|
|
257
|
+
// Pattern-specific checklist items
|
|
258
258
|
const failureTypes = new Set(patterns.map(p => p.failureType));
|
|
259
259
|
if (failureTypes.has('missing_rollback')) {
|
|
260
|
-
checks.push('- [ ]
|
|
260
|
+
checks.push('- [ ] Do write operations have compensation/rollback?');
|
|
261
261
|
}
|
|
262
262
|
if (failureTypes.has('security_vulnerability')) {
|
|
263
|
-
checks.push('- [ ]
|
|
263
|
+
checks.push('- [ ] Was OWASP Top 10 reviewed for this implementation?');
|
|
264
264
|
}
|
|
265
265
|
if (failureTypes.has('hardcoded_secret')) {
|
|
266
|
-
checks.push('- [ ]
|
|
266
|
+
checks.push('- [ ] Are there no hardcoded secrets?');
|
|
267
267
|
}
|
|
268
268
|
return checks.join('\n');
|
|
269
269
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lessons-memo-generator.js","sourceRoot":"","sources":["../../src/reflection/lessons-memo-generator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,uCAAyB;AACzB,gDAAkC;AAIlC,gFAAgF;AAEhF,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,gFAAgF;AAEhF,MAAa,oBAAoB;IACvB,MAAM,CAAmB;IAEjC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE3C,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAEzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,aAAa;QACb,QAAQ,CAAC,IAAI,CAAC;;;
|
|
1
|
+
{"version":3,"file":"lessons-memo-generator.js","sourceRoot":"","sources":["../../src/reflection/lessons-memo-generator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,uCAAyB;AACzB,gDAAkC;AAIlC,gFAAgF;AAEhF,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,gFAAgF;AAEhF,MAAa,oBAAoB;IACvB,MAAM,CAAmB;IAEjC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE3C,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAEzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,aAAa;QACb,QAAQ,CAAC,IAAI,CAAC;;;aAGL,KAAK,CAAC,cAAc,8BAA8B,KAAK,CAAC,aAAa,CAAC,MAAM;;;;CAIxF,CAAC,CAAC;QAEC,uCAAuC;QACvC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAE1D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,MAAM,aAAa,MAAM,YAAY,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAElB,wCAAwC;QACxC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEtC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAElD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO;oBAC9B,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG;oBAC7D,CAAC,CAAC,gBAAgB,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,MAAM,WAAW,IAAI,CAAC,CAAC;YACrG,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,2CAA2C;QAC3C,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC;;EAEhB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;CACjC,CAAC,CAAC;QAEC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACzE,MAAM,UAAU,GAAG,GAAG;aACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;aACxB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC5F,CAAC;IAED,8EAA8E;IAEtE,aAAa,CAAC,MAAc;QAClC,MAAM,KAAK,GAA2B;YACpC,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,WAAW;SACvB,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAwB;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE9D,mCAAmC;QACnC,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,OAAO;YACL,OAAO,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACrE,EAAE;YACF,iBAAiB,OAAO,CAAC,MAAM,EAAE;YACjC,sBAAsB,OAAO,CAAC,KAAK,WAAW,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;YAC9E,4BAA4B,OAAO,CAAC,QAAQ,EAAE;YAC9C,oBAAoB,OAAO,CAAC,iBAAiB,EAAE;YAC/C,uBAAuB,OAAO,CAAC,YAAY,EAAE;YAC7C,EAAE;YACF,oBAAoB;YACpB,KAAK,OAAO,CAAC,iBAAiB,IAAI,6DAA6D,EAAE;YACjG,EAAE;YACF,qBAAqB;YACrB,KAAK,cAAc,EAAE;YACrB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAwB;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;QAE/B,8CAA8C;QAC9C,MAAM,eAAe,GAA2B;YAC9C,QAAQ;YACR,gBAAgB,EAAE,oHAAoH;YACtI,eAAe,EAAE,4FAA4F;YAC7G,sBAAsB,EAAE,gGAAgG;YACxH,qBAAqB,EAAE,8FAA8F;YACrH,yBAAyB,EAAE,+GAA+G;YAC1I,sBAAsB,EAAE,yGAAyG;YACjI,gBAAgB,EAAE,4FAA4F;YAE9G,OAAO;YACP,qBAAqB,EAAE,qGAAqG;YAC5H,wBAAwB,EAAE,4FAA4F;YACtH,UAAU,EAAE,uEAAuE;YACnF,sBAAsB,EAAE,yFAAyF;YAEjH,SAAS;YACT,8BAA8B,EAAE,mEAAmE;YACnG,yBAAyB,EAAE,8DAA8D;YACzF,qBAAqB,EAAE,0GAA0G;YAEjI,QAAQ;YACR,oBAAoB,EAAE,mGAAmG;YACzH,mBAAmB,EAAE,gGAAgG;YACrH,iBAAiB,EAAE,yGAAyG;YAC5H,qBAAqB,EAAE,gEAAgE;YAEvF,YAAY;YACZ,mBAAmB,EAAE,6EAA6E;YAClG,mBAAmB,EAAE,gFAAgF;YACrG,gBAAgB,EAAE,sFAAsF;SACzG,CAAC;QAEF,OAAO,eAAe,CAAC,EAAE,CAAC;eACrB,YAAY,EAAE,cAAc,OAAO,CAAC,KAAK,8EAA8E,CAAC;IAC/H,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,QAA2B;QAChD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,mCAAmC;QACnC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;QAChH,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACpF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;QAC5G,MAAM,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAC;QACjH,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QAEvE,mCAAmC;QACnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/D,IAAI,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,OAAO,IAAI;aACR,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aAClB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;YACnC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;YACzB,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAtQD,oDAsQC"}
|