feat(reviewer): add Tier 1 reviewer agent role with auto-channel notifications
Reviewer workflow in agent-prompts.ts (8-step process), Rust auto-post to #review-queue on task->review transition, reviewQueueDepth in attention scoring (10pts/task cap 50), Tasks tab for reviewer in ProjectBox with 10s queue polling. 7 vitest + 4 cargo tests.
This commit is contained in:
parent
61f01e22b8
commit
323bb1b040
9 changed files with 397 additions and 0 deletions
|
|
@ -22,6 +22,8 @@
|
|||
import { ProjectId, type AgentId, type GroupId } from '../../types/ids';
|
||||
import { notify, dismissNotification } from '../../stores/notifications.svelte';
|
||||
import { registerManager, unregisterManager, updateManagerConfig } from '../../stores/wake-scheduler.svelte';
|
||||
import { setReviewQueueDepth } from '../../stores/health.svelte';
|
||||
import { reviewQueueCount } from '../../adapters/bttask-bridge';
|
||||
|
||||
interface Props {
|
||||
project: ProjectConfig;
|
||||
|
|
@ -93,6 +95,23 @@
|
|||
};
|
||||
});
|
||||
|
||||
// Poll review queue depth for reviewer agents (feeds into attention scoring)
|
||||
$effect(() => {
|
||||
if (!(project.isAgent && project.agentRole === 'reviewer')) return;
|
||||
const groupId = activeGroup?.id;
|
||||
if (!groupId) return;
|
||||
|
||||
const pollReviewQueue = () => {
|
||||
reviewQueueCount(groupId)
|
||||
.then(count => setReviewQueueDepth(project.id, count))
|
||||
.catch(() => {}); // best-effort
|
||||
};
|
||||
|
||||
pollReviewQueue(); // immediate first poll
|
||||
const timer = setInterval(pollReviewQueue, 10_000); // 10s poll
|
||||
return () => clearInterval(timer);
|
||||
});
|
||||
|
||||
// S-1 Phase 2: start filesystem watcher for this project's CWD
|
||||
$effect(() => {
|
||||
const cwd = project.cwd;
|
||||
|
|
@ -195,6 +214,9 @@
|
|||
{#if isAgent && agentRole === 'architect'}
|
||||
<button class="ptab ptab-role" class:active={activeTab === 'architecture'} onclick={() => switchTab('architecture')}>Arch</button>
|
||||
{/if}
|
||||
{#if isAgent && agentRole === 'reviewer'}
|
||||
<button class="ptab ptab-role" class:active={activeTab === 'tasks'} onclick={() => switchTab('tasks')}>Tasks</button>
|
||||
{/if}
|
||||
{#if isAgent && agentRole === 'tester'}
|
||||
<button class="ptab ptab-role" class:active={activeTab === 'selenium'} onclick={() => switchTab('selenium')}>Selenium</button>
|
||||
<button class="ptab ptab-role" class:active={activeTab === 'tests'} onclick={() => switchTab('tests')}>Tests</button>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue