From 4931e008b271d6c0c1ccbecaf93d7a32e543f9ed Mon Sep 17 00:00:00 2001 From: James Date: Sun, 29 Mar 2026 06:54:52 -0400 Subject: [PATCH] =?UTF-8?q?wip:=20local=20modifications=20=E2=80=94=20agen?= =?UTF-8?q?t-sync,=20doctor,=20scheduler,=20task-dispatch,=20session-cooki?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ssion-control-corrupted-20260324-003431.db | Bin 0 -> 1216512 bytes install.sh | 2 +- package.json | 2 +- push-findings.sh | 198 +++++++++++++++++ src/lib/agent-sync.ts | 10 +- src/lib/openclaw-doctor.ts | 57 ++++- src/lib/scheduler.ts | 21 +- src/lib/session-cookie.ts | 2 +- src/lib/task-dispatch.ts | 210 ++++++++++++++++-- 9 files changed, 468 insertions(+), 34 deletions(-) create mode 100644 backups/mission-control-corrupted-20260324-003431.db create mode 100755 push-findings.sh diff --git a/backups/mission-control-corrupted-20260324-003431.db b/backups/mission-control-corrupted-20260324-003431.db new file mode 100644 index 0000000000000000000000000000000000000000..64049da4ad2cbf8182ab9bf48666af8e92e6f24d GIT binary patch literal 1216512 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%0AK7_Dti(cpUS@pMU)) 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̷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 +if echo "$auth_test" | grep -q '"id":'; then + echo " ✓ Authentication working" +else + echo " ✗ Auth failed: $(echo "$auth_test" | jq -r '.error // . // "unknown"' | head -c 100)" + echo "" +fi +echo "" + +# Helper to create task +create_task() { + local title="$1" + local desc="$2" + local priority="$3" + local tags="$4" + local meta="$5" + + # Build JSON body using jq + body=$(jq -n \ + --arg title "$title" \ + --arg desc "$desc" \ + --arg priority "$priority" \ + --arg tags "$tags" \ + --arg meta "$meta" \ + '{ + title: $title, + description: $desc, + priority: $priority, + status: "inbox", + tags: ($tags | split(",")), + metadata: ($meta | fromjson? // {}) + }') + + echo "Creating: ${title:0:50}..." + + # Make API call with proper error handling + response=$(curl -s -w "\n%{http_code}" -X POST "$MC_URL/api/tasks" \ + -H "x-api-key: $API_KEY" \ + -H "Content-Type: application/json" \ + -d "$body" 2>&1) + + http_code=$(echo "$response" | tail -n1) + body_response=$(echo "$response" | sed '$d') + + if [ "$http_code" = "201" ] || [ "$http_code" = "200" ]; then + task_id=$(echo "$body_response" | jq -r '.task.id // .id // "unknown"') + echo " ✓ Created task ID: $task_id" + else + echo " ✗ Failed (HTTP $http_code): $(echo "$body_response" | jq -r '.error // .message // . // "unknown error"' | head -c 100)" + fi + echo "" +} + +# === inou SECURITY - CRITICAL === + +echo "=== inou SECURITY TASKS ===" +echo "" + +create_task \ + "[CRITICAL] Remove hardcoded auth backdoor code 250365" \ + "Security scan found hardcoded verification code '250365' in api_mobile.go:128 allowing universal authentication bypass. This bypasses entire email verification security control.\n\nLocation: /repos/inou-portal/portal/api_mobile.go:127-128\n\nAction: Remove backdoor code immediately." \ + "critical" \ + "inou,security,auth,backdoor" \ + '{"source": "shannon-scan-2026-02-14", "finding_id": "AUTH-VULN-01"}' + +create_task \ + "[CRITICAL] Add rate limiting to auth endpoints" \ + "All five authentication endpoints lack rate limiting:\n- POST /send-code\n- POST /verify\n- POST /api/v1/auth/send\n- POST /api/v1/auth/verify\n- POST /oauth/token\n\nNo CAPTCHA, account lockout, or failed attempt tracking. Enables brute-force attacks.\n\nAction: Implement rate limiting middleware in defense.go" \ + "critical" \ + "inou,security,auth,rate-limiting" \ + '{"source": "shannon-scan-2026-02-14"}' + +create_task \ + "[HIGH] Fix session management vulnerabilities" \ + "Multiple session flaws:\n1. Session identifiers never rotated on login (session fixation)\n2. Logout only clears client-side cookies without server-side invalidation\n3. Session tokens lack Cache-Control headers\n\nAction: Implement proper session lifecycle management." \ + "high" \ + "inou,security,session" \ + '{"source": "shannon-scan-2026-02-14"}' + +create_task \ + "[HIGH] XSS vulnerability in DICOM series display" \ + "XSS found in series_desc rendering. JavaScript payload injection via DICOM metadata.\n\nAction: Implement HTML entity encoding in /api/series responses." \ + "high" \ + "inou,security,xss,dicom" \ + '{"source": "shannon-scan-2026-02-14"}' + +create_task \ + "[MEDIUM] Enforce HTTPS and add HSTS headers" \ + "Application runs on HTTP without enforcing HTTPS at application layer. Missing HSTS headers.\n\nAction: Add HTTPS redirect middleware and HSTS headers." \ + "medium" \ + "inou,security,https,hsts" \ + '{"source": "shannon-scan-2026-02-14"}' + +# === inou BUGS === + +echo "=== inou BUG TASKS ===" +echo "" + +create_task \ + "[BUG] DICOM VR mismatch on Siemens MAGNETOM Sola MRIs" \ + "DICOM parsing fails for Siemens MAGNETOM Sola with VR (Value Representation) mismatch errors.\n\nStatus: PARKED — needs attention when ready.\n\nNote: May be related to specific Siemens private tags or VR parsing." \ + "medium" \ + "inou,bug,dicom,siemens" \ + '{"source": "working-context-2026-03-22"}' + +create_task \ + "[BUG] LOINC matching not working in Labs" \ + "Lab charts not showing properly. LOINC matching failing.\n\nRoot cause: Production DB has 0 entries with loinc in data JSON. Normalize() reports 'all entries already normalized' because SearchKey2 is set.\n\nAction: Investigate LOINC data population in lab import pipeline." \ + "medium" \ + "inou,bug,labs,loinc" \ + '{"source": "memory/2026-02-24.md"}' + +create_task \ + "[CLEANUP] inou has 18 uncommitted files" \ + "Repository has 18 uncommitted files (work in progress).\n\nAction: Review, commit, or stash changes. Ensure nothing critical is lost." \ + "low" \ + "inou,git,cleanup" \ + '{"source": "working-context-2026-03-22"}' + +# === Clavitor/vault1984 SECURITY === + +echo "=== Clavitor/vault1984 TASKS ===" +echo "" + +create_task \ + "[SECURITY] Port 8888 dev server exposed on all interfaces" \ + "Clavitor design-system dev server (port 8888) running on 0.0.0.0 — all interfaces. Compiled and left running since Mar 22 morning.\n\nAction: Kill dev server when not actively developing. Or bind to localhost only." \ + "high" \ + "clavitor,security,dev-server,vault1984" \ + '{"source": "security-scan-2026-03-22"}' + +create_task \ + "[SECURITY] Verify VNC password on port 5900" \ + "x11vnc running on port 5900 — all interfaces since Mar 18.\n\nStatus: Needs verification that password is set (was NO PASSWORD in earlier scan).\n\nAction: Verify password protection. Kill if not needed." \ + "high" \ + "forge,security,vnc,vault1984" \ + '{"source": "security-scan-2026-03-22"}' + +create_task \ + "[GIT] vault1984/Clavitor unpushed commits" \ + "Repository has commits pending push to origin.\n\nAction: Review and push when ready." \ + "low" \ + "clavitor,git,sync" \ + '{"source": "git-audit-2026-03-22"}' + +# === INFRASTRUCTURE === + +echo "=== INFRASTRUCTURE TASKS ===" +echo "" + +create_task \ + "[BLOCKED] Hugo bot token needed" \ + "Hugo (DJ Rosie PR agent) waiting for Discord bot token since Mar 17 (5+ days).\n\nAction: Johan to provide Discord bot token for Hugo." \ + "medium" \ + "hugo,discord,blocked,rozie" \ + '{"source": "MEMORY.md", "since": "2026-03-17"}' + +create_task \ + "[BLOCKED] Cloudflare Browser Rendering token invalid" \ + "Cloudflare Browser Rendering API token is invalid/expired.\n\nAction: Get new token from dash.cloudflare.com and update config." \ + "medium" \ + "cloudflare,token,blocked" \ + '{"source": "MEMORY.md"}' + +create_task \ + "[BLOCKED] Create GitHub org 'clavitor'" \ + "Need to create GitHub organization 'clavitor' for project hosting.\n\nRequires token with admin:org scope.\n\nAction: Create org or provide token." \ + "low" \ + "github,clavitor,org,blocked" \ + '{"source": "MEMORY.md"}' + +create_task \ + "[MAINTENANCE] Kernel reboot pending (6.8.0-106)" \ + "Kernel 6.8.0-106-generic installed (Mar 13) but not yet running.\n\nAction: Reboot at convenient time to apply updates." \ + "low" \ + "forge,kernel,reboot" \ + '{"source": "MEMORY.md", "since": "2026-03-13"}' + +echo "=== ALL TASKS CREATED ===" diff --git a/src/lib/agent-sync.ts b/src/lib/agent-sync.ts index aaea63a..f1a6f76 100644 --- a/src/lib/agent-sync.ts +++ b/src/lib/agent-sync.ts @@ -193,7 +193,15 @@ async function readOpenClawAgents(): Promise { const { readFile } = require('fs/promises') const raw = await readFile(configPath, 'utf-8') const parsed = parseJsonRelaxed(raw) - return parsed?.agents?.list || [] + let agents: OpenClawAgent[] = parsed?.agents?.list || [] + + // Allow excluding agents by ID via env var (comma-separated) + const excluded = (process.env.MC_EXCLUDED_AGENTS || '').split(',').map(s => s.trim().toLowerCase()).filter(Boolean) + if (excluded.length > 0) { + agents = agents.filter(a => !excluded.includes((a.id || '').toLowerCase())) + } + + return agents } /** Extract MC-friendly fields from an OpenClaw agent config */ diff --git a/src/lib/openclaw-doctor.ts b/src/lib/openclaw-doctor.ts index c309c15..2523491 100644 --- a/src/lib/openclaw-doctor.ts +++ b/src/lib/openclaw-doctor.ts @@ -17,6 +17,7 @@ function normalizeLine(line: string): string { return line .replace(/\u001b\[[0-9;]*m/g, '') .replace(/^[\s│┃║┆┊╎╏]+/, '') + .replace(/[\s│┃║┆┊╎╏]+$/, '') // strip trailing box-drawing chars .trim() } @@ -28,7 +29,48 @@ function isPositiveOrInstructionalLine(line: string): boolean { return /^no .* warnings? detected/i.test(line) || /^no issues/i.test(line) || /^run:\s/i.test(line) || - /^all .* (healthy|ok|valid|passed)/i.test(line) + /^all .* (healthy|ok|valid|passed)/i.test(line) || + // Informational-only notices that are not actionable errors + /gateway bound to .*(lan|0\.0\.0\.0)/i.test(line) || + /ensure your auth credentials are strong/i.test(line) || + /safer remote access/i.test(line) || + /keep bind loopback/i.test(line) || + /run:.*security audit/i.test(line) || + /chrome mcp existing-session/i.test(line) || + /chrome path:/i.test(line) || + /detected chrome/i.test(line) || + /enable remote debugging/i.test(line) || + /keep the browser running/i.test(line) || + /systemctl.*disable.*openclaw-gateway/i.test(line) || + /rm.*openclaw-gateway\.service/i.test(line) || + /\.service \(user, unit:/i.test(line) || + /recommendation: run a single gateway/i.test(line) || + /one gateway supports multiple/i.test(line) || + /if you need multiple gateways/i.test(line) || + /isolate ports.*config.*state/i.test(line) || + /oauth dir not present.*skipping create/i.test(line) || + /skipping create because no whatsapp/i.test(line) || + /state directory permissions are too open/i.test(line) || + /recommend chmod 700/i.test(line) || + /oauth dir (not present|missing)/i.test(line) || + /bootstrap files? exceed/i.test(line) || + /\d+ raw\b.*injected/i.test(line) || + /injected.*truncated/i.test(line) || + /tune.*bootstrapMaxChars/i.test(line) || + /\d+% of max.*file/i.test(line) || + /workspace bootstrap files/i.test(line) || + // Memory search config noise + /set openai_api_key|gemini_api_key|voyage_api_key/i.test(line) || + /configure credentials.*openclaw configure/i.test(line) || + /for local embeddings/i.test(line) || + /to disable.*memorysearch/i.test(line) || + /memory search provider/i.test(line) || + /api key was not found/i.test(line) || + /verify.*openclaw memory status/i.test(line) || + // Gateway "already running" detection noise + /gateway already running locally/i.test(line) || + /stop it.*openclaw gateway stop/i.test(line) || + /pid \d+.*openclaw-gateway/i.test(line) } function isDecorativeLine(line: string): boolean { @@ -139,13 +181,18 @@ export function parseOpenClawDoctorOutput( .map(line => line.replace(/^[-*]\s+/, '').trim()) .filter(line => !isSessionAgingLine(line) && !isStateDirectoryListLine(line) && !isPositiveOrInstructionalLine(line)) - // Strip positive/negated phrases before checking for warning keywords - const rawForWarningCheck = raw.replace(/\bno\s+\w+\s+(?:security\s+)?warnings?\s+detected\b/gi, '') - const mentionsWarnings = /\bwarning|warnings|problem|problems|invalid config|fix\b/i.test(rawForWarningCheck) + // Strip positive/negated phrases and known-noise lines before checking for warning keywords + const rawForWarningCheck = raw + .replace(/\bno\s+\w+\s+(?:security\s+)?warnings?\s+detected\b/gi, '') + .split(/\r?\n/) + .filter(line => !isPositiveOrInstructionalLine(normalizeLine(line))) + .join('\n') + const mentionsWarnings = /\bwarning|warnings|problem|problems|invalid config\b/i.test(rawForWarningCheck) const mentionsHealthy = /\bok\b|\bhealthy\b|\bno issues\b|\bno\b.*\bwarnings?\s+detected\b|\bvalid\b/i.test(raw) let level: OpenClawDoctorLevel = 'healthy' - if (exitCode !== 0 || /invalid config|failed|error/i.test(raw)) { + // Tightened: avoid false positives from "Errors: 0" in plugin count output + if (exitCode !== 0 || /invalid config|failed/i.test(raw)) { level = 'error' } else if (issues.length > 0 || mentionsWarnings) { level = 'warning' diff --git a/src/lib/scheduler.ts b/src/lib/scheduler.ts index 6f7834e..31ea33c 100644 --- a/src/lib/scheduler.ts +++ b/src/lib/scheduler.ts @@ -10,7 +10,7 @@ import { pruneGatewaySessionsOlderThan, getAgentLiveStatuses } from './sessions' import { eventBus } from './event-bus' import { syncSkillsFromDisk } from './skill-sync' import { syncLocalAgents } from './local-agent-sync' -import { dispatchAssignedTasks, runAegisReviews, requeueStaleTasks, autoRouteInboxTasks } from './task-dispatch' +import { dispatchAssignedTasks, runAegisReviews, runAqaReviews, requeueStaleTasks, autoRouteInboxTasks } from './task-dispatch' import { spawnRecurringTasks } from './recurring-tasks' const BACKUP_DIR = join(dirname(config.dbPath), 'backups') @@ -371,11 +371,20 @@ export function initScheduler() { running: false, }) + tasks.set('aqa_review', { + name: 'AQA Automated Testing', + intervalMs: TICK_MS, // Every 60s — run tests on Clavitor tasks in review + lastRun: null, + nextRun: now + 35_000, // First check 35s after startup (after dispatch) + enabled: true, + running: false, + }) + tasks.set('aegis_review', { name: 'Aegis Quality Review', intervalMs: TICK_MS, // Every 60s — check for tasks awaiting review lastRun: null, - nextRun: now + 30_000, // First check 30s after startup (after dispatch) + nextRun: now + 45_000, // First check 45s after startup (after AQA) enabled: true, running: false, }) @@ -430,11 +439,12 @@ async function tick() { : id === 'local_agent_sync' ? 'general.local_agent_sync' : id === 'gateway_agent_sync' ? 'general.gateway_agent_sync' : id === 'task_dispatch' ? 'general.task_dispatch' + : id === 'aqa_review' ? 'general.aqa_review' : id === 'aegis_review' ? 'general.aegis_review' : id === 'recurring_task_spawn' ? 'general.recurring_task_spawn' : id === 'stale_task_requeue' ? 'general.stale_task_requeue' : 'general.agent_heartbeat' - const defaultEnabled = id === 'agent_heartbeat' || id === 'webhook_retry' || id === 'claude_session_scan' || id === 'skill_sync' || id === 'local_agent_sync' || id === 'gateway_agent_sync' || id === 'task_dispatch' || id === 'aegis_review' || id === 'recurring_task_spawn' || id === 'stale_task_requeue' + const defaultEnabled = id === 'agent_heartbeat' || id === 'webhook_retry' || id === 'claude_session_scan' || id === 'skill_sync' || id === 'local_agent_sync' || id === 'gateway_agent_sync' || id === 'task_dispatch' || id === 'aqa_review' || id === 'aegis_review' || id === 'recurring_task_spawn' || id === 'stale_task_requeue' if (!isSettingEnabled(settingKey, defaultEnabled)) continue task.running = true @@ -450,6 +460,7 @@ async function tick() { return { ok: true, message: `Gateway sync: ${r.created} created, ${r.updated} updated, ${r.synced} total | Live status: ${refreshed} refreshed` } }) : id === 'task_dispatch' ? await dispatchAssignedTasks() + : id === 'aqa_review' ? await runAqaReviews() : id === 'aegis_review' ? await runAegisReviews() : id === 'recurring_task_spawn' ? await spawnRecurringTasks() : id === 'stale_task_requeue' ? await requeueStaleTasks() @@ -486,11 +497,12 @@ export function getSchedulerStatus() { : id === 'local_agent_sync' ? 'general.local_agent_sync' : id === 'gateway_agent_sync' ? 'general.gateway_agent_sync' : id === 'task_dispatch' ? 'general.task_dispatch' + : id === 'aqa_review' ? 'general.aqa_review' : id === 'aegis_review' ? 'general.aegis_review' : id === 'recurring_task_spawn' ? 'general.recurring_task_spawn' : id === 'stale_task_requeue' ? 'general.stale_task_requeue' : 'general.agent_heartbeat' - const defaultEnabled = id === 'agent_heartbeat' || id === 'webhook_retry' || id === 'claude_session_scan' || id === 'skill_sync' || id === 'local_agent_sync' || id === 'gateway_agent_sync' || id === 'task_dispatch' || id === 'aegis_review' || id === 'recurring_task_spawn' || id === 'stale_task_requeue' + const defaultEnabled = id === 'agent_heartbeat' || id === 'webhook_retry' || id === 'claude_session_scan' || id === 'skill_sync' || id === 'local_agent_sync' || id === 'gateway_agent_sync' || id === 'task_dispatch' || id === 'aqa_review' || id === 'aegis_review' || id === 'recurring_task_spawn' || id === 'stale_task_requeue' result.push({ id, name: task.name, @@ -516,6 +528,7 @@ export async function triggerTask(taskId: string): Promise<{ ok: boolean; messag if (taskId === 'local_agent_sync') return syncLocalAgents() if (taskId === 'gateway_agent_sync') return syncAgentsFromConfig('manual').then(r => ({ ok: true, message: `Gateway sync: ${r.created} created, ${r.updated} updated, ${r.synced} total` })) if (taskId === 'task_dispatch') return dispatchAssignedTasks() + if (taskId === 'aqa_review') return runAqaReviews() if (taskId === 'aegis_review') return runAegisReviews() if (taskId === 'recurring_task_spawn') return spawnRecurringTasks() if (taskId === 'stale_task_requeue') return requeueStaleTasks() diff --git a/src/lib/session-cookie.ts b/src/lib/session-cookie.ts index 865013b..45cc7ea 100644 --- a/src/lib/session-cookie.ts +++ b/src/lib/session-cookie.ts @@ -36,7 +36,7 @@ function envFlag(name: string): boolean | undefined { export function getMcSessionCookieOptions(input: { maxAgeSeconds: number; isSecureRequest?: boolean }): Partial { const secureEnv = envFlag('MC_COOKIE_SECURE') const isProduction = process.env.NODE_ENV === 'production' - const secure = secureEnv ?? input.isSecureRequest ?? isProduction + const secure = secureEnv ?? input.isSecureRequest ?? false return { httpOnly: true, diff --git a/src/lib/task-dispatch.ts b/src/lib/task-dispatch.ts index 411224e..751407f 100644 --- a/src/lib/task-dispatch.ts +++ b/src/lib/task-dispatch.ts @@ -115,7 +115,19 @@ function buildTaskPrompt(task: DispatchableTask, rejectionFeedback?: string | nu lines.push( '', - 'Complete this task and provide your response. Be concise and actionable.', + '## Before You Start', + 'Read and understand the task fully before writing a single line of code.', + '- Locate the relevant files. Read them. Understand the existing code.', + '- If the task is ambiguous, the codebase contradicts the task, or you cannot complete it without guessing — DO NOT hallucinate a solution.', + '- Instead, respond with EXACTLY this format and nothing else:', + '', + 'BLOCKED: ', + '', + 'This puts the task in a blocked state for the owner or Research Agent to clarify. A blocked task is far better than hallucinated code.', + '', + '## Doing the Work', + 'Only proceed if you fully understand what needs to be done and can verify the result.', + 'Make the change. Test it if possible. Commit with a meaningful message.', '', '## Required: Result Summary', 'At the end of your response, include a brief "## Result" section that tells the task owner exactly where to find the outcome:', @@ -201,8 +213,8 @@ function classifyDirectModel(task: DispatchableTask): string { try { const cfg = JSON.parse(task.agent_config) if (typeof cfg.dispatchModel === 'string' && cfg.dispatchModel) { - // Strip gateway prefixes like "9router/cc/" to get bare model ID - return cfg.dispatchModel.replace(/^.*\//, '') + // Return model ID as-is — full provider/model paths are valid + return cfg.dispatchModel } } catch { /* ignore */ } } @@ -332,6 +344,8 @@ interface ReviewableTask { } function resolveGatewayAgentIdForReview(task: ReviewableTask): string { + // Tasks assigned to 'engineer' are reviewed by 'qa', not aegis + if (task.assigned_to?.toLowerCase() === 'engineer') return 'qa' if (task.agent_config) { try { const cfg = JSON.parse(task.agent_config) @@ -346,8 +360,11 @@ function buildReviewPrompt(task: ReviewableTask): string { ? `${task.ticket_prefix}-${String(task.project_ticket_no).padStart(3, '0')}` : `TASK-${task.id}` + const isEngineerTask = task.assigned_to?.toLowerCase() === 'engineer' + const reviewerName = isEngineerTask ? 'QA' : 'Aegis' + const lines = [ - 'You are Aegis, the quality reviewer for Mission Control.', + `You are ${reviewerName}, the quality reviewer for Mission Control.`, 'Review the following completed task and its resolution.', '', `**[${ticket}] ${task.title}**`, @@ -358,23 +375,48 @@ function buildReviewPrompt(task: ReviewableTask): string { } if (task.resolution) { - lines.push('', '## Agent Resolution', task.resolution.substring(0, 6000)) + lines.push('', '## Engineer Resolution', task.resolution.substring(0, 6000)) } - lines.push( - '', - '## Instructions', - 'Evaluate whether the agent\'s response adequately addresses the task.', - 'Respond with EXACTLY one of these two formats:', - '', - 'If the work is acceptable:', - 'VERDICT: APPROVED', - 'NOTES: ', - '', - 'If the work needs improvement:', - 'VERDICT: REJECTED', - 'NOTES: ', - ) + if (isEngineerTask) { + lines.push( + '', + '## Your Job as QA', + 'Do not rubber-stamp this. Verify the work actually happened.', + '1. Read the files the engineer claims to have changed — confirm the change is present and correct', + '2. Run the code/service if possible — confirm it works', + '3. Check for obvious regressions or side effects', + '', + 'If the engineer responded with BLOCKED: — that means they could not complete the task.', + 'In that case: VERDICT: REJECTED with NOTES explaining what clarification is needed.', + '', + '## Verdict Format', + 'Respond with EXACTLY one of these two formats:', + '', + 'If the work is verified and correct:', + 'VERDICT: APPROVED', + 'NOTES: ', + '', + 'If the work is wrong, incomplete, hallucinated, or blocked:', + 'VERDICT: REJECTED', + 'NOTES: ', + ) + } else { + lines.push( + '', + '## Instructions', + 'Evaluate whether the agent\'s response adequately addresses the task.', + 'Respond with EXACTLY one of these two formats:', + '', + 'If the work is acceptable:', + 'VERDICT: APPROVED', + 'NOTES: ', + '', + 'If the work needs improvement:', + 'VERDICT: REJECTED', + 'NOTES: ', + ) + } return lines.join('\n') } @@ -558,6 +600,124 @@ export async function runAegisReviews(): Promise<{ ok: boolean; message: string } } +/** + * AQA (Automated QA) — run actual tests for Clavitor tasks in 'review' status. + * Executes `go test ./...` in the project repo. Pass → moves to quality_review. + * Fail → bounces back to assigned with test output as feedback to engineer. + */ +export async function runAqaReviews(): Promise<{ ok: boolean; message: string }> { + const db = getDatabase() + const now = Math.floor(Date.now() / 1000) + + // Only pick up Clavitor tasks (project_id=3) in 'review' assigned to engineer + const tasks = db.prepare(` + SELECT t.id, t.title, t.assigned_to, t.project_id, p.metadata as project_meta, + p.ticket_prefix, t.project_ticket_no + FROM tasks t + LEFT JOIN projects p ON p.id = t.project_id AND p.workspace_id = t.workspace_id + WHERE t.status = 'review' + AND t.project_id = 3 + AND lower(t.assigned_to) = 'engineer' + ORDER BY t.updated_at ASC + LIMIT 5 + `).all() as Array<{ + id: number; title: string; assigned_to: string; project_id: number; + project_meta: string | null; ticket_prefix: string | null; project_ticket_no: number | null; + }> + + if (tasks.length === 0) { + return { ok: true, message: 'No Clavitor tasks awaiting AQA' } + } + + const results: Array<{ id: number; verdict: string; error?: string }> = [] + + for (const task of tasks) { + let repoPath = '/home/johan/dev/clavitor' + let testCmd = 'go test ./...' + try { + if (task.project_meta) { + const meta = JSON.parse(task.project_meta) + if (meta.repo_path) repoPath = meta.repo_path + if (meta.test_cmd) testCmd = meta.test_cmd + } + } catch { /* use defaults */ } + + const ticket = task.ticket_prefix && task.project_ticket_no + ? `${task.ticket_prefix}-${String(task.project_ticket_no).padStart(3, '0')}` + : `TASK-${task.id}` + + logger.info({ taskId: task.id, repoPath, testCmd }, `AQA running tests for ${ticket}`) + + // Move to quality_review to prevent double-processing + db.prepare('UPDATE tasks SET status = ?, updated_at = ? WHERE id = ?') + .run('quality_review', now, task.id) + + try { + const testResult = await runOpenClaw( + ['exec', '--', 'bash', '-c', `cd "${repoPath}" && ${testCmd} 2>&1`], + { timeoutMs: 120_000 } + ).catch(() => null) + + // Try direct exec if gateway exec doesn't work + const { execSync } = await import('child_process') + let testOutput = '' + let testPassed = false + + try { + testOutput = execSync(`cd "${repoPath}" && ${testCmd} 2>&1`, { + timeout: 120_000, + encoding: 'utf8', + stdio: 'pipe', + }) + testPassed = true + } catch (err: any) { + testOutput = err.stdout || err.stderr || err.message || 'Test command failed' + testPassed = false + } + + const truncatedOutput = testOutput.length > 3000 + ? testOutput.substring(0, 3000) + '\n[...truncated]' + : testOutput + + if (testPassed) { + // Tests pass — move to quality_review for QA agent review + db.prepare('UPDATE tasks SET status = ?, updated_at = ? WHERE id = ?') + .run('quality_review', now, task.id) + db.prepare(`INSERT INTO comments (task_id, author, content, created_at, workspace_id) + VALUES (?, ?, ?, ?, 1)`) + .run(task.id, 'AQA', `✅ Tests passed:\n\`\`\`\n${truncatedOutput}\n\`\`\``, now) + results.push({ id: task.id, verdict: 'passed' }) + logger.info({ taskId: task.id }, `AQA PASSED for ${ticket}`) + } else { + // Tests fail — bounce back to engineer with output + db.prepare(`UPDATE tasks SET status = ?, error_message = ?, dispatch_attempts = dispatch_attempts + 1, updated_at = ? WHERE id = ?`) + .run('assigned', `AQA test failure:\n${truncatedOutput}`, now, task.id) + db.prepare(`INSERT INTO comments (task_id, author, content, created_at, workspace_id) + VALUES (?, ?, ?, ?, 1)`) + .run(task.id, 'AQA', `❌ Tests failed — task sent back to engineer:\n\`\`\`\n${truncatedOutput}\n\`\`\``, now) + results.push({ id: task.id, verdict: 'failed' }) + logger.info({ taskId: task.id }, `AQA FAILED for ${ticket}`) + } + } catch (err: any) { + // AQA itself errored — pass through to QA rather than blocking + db.prepare('UPDATE tasks SET status = ?, updated_at = ? WHERE id = ?') + .run('quality_review', now, task.id) + db.prepare(`INSERT INTO comments (task_id, author, content, created_at, workspace_id) + VALUES (?, ?, ?, ?, 1)`) + .run(task.id, 'AQA', `⚠️ AQA could not run tests: ${err.message}. Passing to QA for manual review.`, now) + results.push({ id: task.id, verdict: 'skipped', error: err.message }) + } + } + + const passed = results.filter(r => r.verdict === 'passed').length + const failed = results.filter(r => r.verdict === 'failed').length + const skipped = results.filter(r => r.verdict === 'skipped').length + return { + ok: true, + message: `AQA: ${passed} passed, ${failed} failed (back to engineer), ${skipped} skipped`, + } +} + /** * Requeue stale tasks stuck in 'in_progress' whose assigned agent is offline. * Prevents tasks from being permanently stuck when agents crash or disconnect. @@ -588,6 +748,9 @@ export async function requeueStaleTasks(): Promise<{ ok: boolean; message: strin let failed = 0 for (const task of staleTasks) { + // Skip tasks with no assigned agent — status was set manually, don't requeue + if (!task.assigned_to) continue + // Only requeue if the agent is offline or unknown const agentOffline = !task.agent_status || task.agent_status === 'offline' if (!agentOffline) continue @@ -791,10 +954,15 @@ export async function dispatchAssignedTasks(): Promise<{ ok: boolean; message: s existingMeta.dispatch_session_id = agentResponse.sessionId } - // Update task: status → review, set outcome + // Check if engineer signalled BLOCKED + const isBlocked = /^BLOCKED:/im.test(truncated) + const nextStatus = isBlocked ? 'blocked' : 'review' + const nextOutcome = isBlocked ? 'blocked' : 'success' + + // Update task: status → review (or blocked), set outcome db.prepare(` UPDATE tasks SET status = ?, outcome = ?, resolution = ?, metadata = ?, updated_at = ? WHERE id = ? - `).run('review', 'success', truncated, JSON.stringify(existingMeta), Math.floor(Date.now() / 1000), task.id) + `).run(nextStatus, nextOutcome, truncated, JSON.stringify(existingMeta), Math.floor(Date.now() / 1000), task.id) // Add a comment from the agent with the full response db.prepare(`