summaryrefslogtreecommitdiff
path: root/admin-panel/src/server/agents/inspector.ts
diff options
context:
space:
mode:
Diffstat (limited to 'admin-panel/src/server/agents/inspector.ts')
-rw-r--r--admin-panel/src/server/agents/inspector.ts54
1 files changed, 54 insertions, 0 deletions
diff --git a/admin-panel/src/server/agents/inspector.ts b/admin-panel/src/server/agents/inspector.ts
new file mode 100644
index 0000000..575c34e
--- /dev/null
+++ b/admin-panel/src/server/agents/inspector.ts
@@ -0,0 +1,54 @@
+import { BaseAgent, type AgentContext, type AgentResult } from './base-agent.js';
+import type { ClaudeResponse } from '../services/claude.service.js';
+
+export class InspectorAgent extends BaseAgent {
+ name = 'inspector';
+ templateFile = 'inspector.md';
+ model = 'claude-sonnet-4-20250514';
+
+ protected getSystemPrompt(): string {
+ return 'You are a senior code reviewer. Be thorough but pragmatic. Focus on correctness and security. Approve code that is production-ready, reject code with significant issues.';
+ }
+
+ protected parseResponse(response: ClaudeResponse, _ctx: AgentContext): AgentResult {
+ const content = response.content;
+ const firstLine = content.split('\n')[0].trim().toUpperCase();
+ const approved = firstLine.includes('APPROVE');
+ const verdict: 'approve' | 'reject' = approved ? 'approve' : 'reject';
+
+ const reviewEntry = {
+ agent: 'inspector',
+ verdict,
+ content,
+ timestamp: new Date().toISOString(),
+ };
+
+ const updates: Record<string, unknown> = {};
+
+ // Parse existing review comments
+ let currentReviews: unknown[];
+ try {
+ currentReviews = JSON.parse(_ctx.reviewComments || '[]');
+ } catch {
+ currentReviews = [];
+ }
+ currentReviews.push(reviewEntry);
+ updates.review_comments = JSON.stringify(currentReviews);
+
+ if (approved) {
+ updates.status = 'test';
+ } else {
+ updates.status = 'impl'; // Send back to builder
+ }
+
+ return {
+ success: true,
+ content,
+ tokensUsed: response.tokensUsed,
+ model: response.model,
+ updates,
+ verdict,
+ message: `Code review: ${verdict.toUpperCase()}`,
+ };
+ }
+}