// #/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 Void’s security…' }); mount(main, el('div', { class: 'yerin-view' }, el('h1', { class: 'view-h1' }, '◆ Yerin'), el('p', { class: 'view-sub' }, 'Sage of the Endless Sword — 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(); }