feat(ui): Sentinel view — Yerin global security chat

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-04 21:11:11 +10:00
parent 423cbd342a
commit eb33bd8604
4 changed files with 29 additions and 1 deletions

25
public/views/sentinel.js Normal file
View File

@@ -0,0 +1,25 @@
// #/sentinel — Yerin's global, read-only security view. Uses the shared
// agent_chat panel pointed at /api/security/yerin (no draft cards).
import { el, mount } from '../dom.js';
import { wireAgentChat } from '../components/agent_chat.js';
const YERIN_LABELS = {
audit_log: '🗒️ reading the audit trail', agent_inventory: '👁️ reviewing agents',
pending_review: '⏳ checking the approval queue', resource_exposure: '🛡️ checking exposure',
token_audit: '🔑 auditing tokens'
};
export async function render(main) {
const log = el('div', { class: 'rail-log sentinel-log' });
const input = el('textarea', { class: 'rail-input', rows: 1, placeholder: 'Ask Yerin about the Voids security…' });
mount(main,
el('h1', { class: 'view-h1' }, '◆ Sentinel — Yerin'),
el('p', { class: 'view-sub' }, 'Read-only security & observability. She watches, reports, and warns — she never acts.'),
el('div', { class: 'sentinel-chat' }, log, el('div', { class: 'rail-inputwrap' }, input)));
const chat = wireAgentChat({
logEl: log, inputEl: input,
historyUrl: '/api/security/yerin', turnUrl: '/api/security/yerin/turn',
agentName: 'Yerin', showDrafts: false, toolLabels: YERIN_LABELS
});
await chat.load();
}