- Project card expands to show description + status + dates (was only the research stub) - Cards compacted + responsive (actions wrap on narrow) - Sentinel renamed Yerin everywhere (#/yerin, red 'Sage of the Endless Sword' theme + red sidebar dot) - void1 importer now carries research_notes/last_researched_at (was dropped) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
1.3 KiB
JavaScript
26 lines
1.3 KiB
JavaScript
// #/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();
|
||
}
|