sessions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sessions (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Sessions sidebar — the list of past chats, the new-session trigger, and group-by-date helpers. All read state from ChatContext.
import {
SessionsList,
SessionGroups,
SessionsGroup,
SessionListItem,
NewSessionButton
} from 'reachat';Sidebar wrapper that renders an animated container around its children. Hidden in compact mode while a session is active (so the panel can take over the viewport).
| Prop | Type | Default | Description |
|---|---|---|---|
templates | Template[] | — | When no session is active, shows clickable template entries that fire createSession() |
children | ReactNode | — | Usually <NewSessionButton /> and <SessionGroups /> |
<SessionsList templates={templates}>
<NewSessionButton />
<SessionGroups />
</SessionsList>templates:
interface Template {
id: string;
title: string;
message: string;
icon?: ReactElement;
}Groups the context's sessions by relative date (Today / Yesterday / This Week / etc.) using the bundled groupSessionsByDate utility, and renders <SessionsGroup> per heading with <SessionListItem> children.
| Prop | Type | Default | Description |
|---|---|---|---|
children | (groups: GroupedSessions[]) => ReactNode | — | Render-prop override |
<SessionGroups />
// Custom render
<SessionGroups>
{groups => groups.map(({ heading, sessions }) => (
<SessionsGroup key={heading} heading={heading}>
{sessions.map(s => <SessionListItem key={s.id} session={s} />)}
</SessionsGroup>
))}
</SessionGroups>Visual group with a heading. Wraps SessionListItems in a single section.
| Prop | Type | Default | Description |
|---|---|---|---|
heading | string | — | Group heading |
children | ReactNode | — | List items |
Individual session row. Built on reablocks ListItem with start (chat icon) and end (delete icon-button) adornments. Active state is highlighted via theme. Click selects the session; the trash button stops propagation and triggers deleteSession.
| Prop | Type | Default | Description |
|---|---|---|---|
session | Session | — | Session data |
deletable | boolean | true | Show the delete button |
deleteIcon | ReactElement | trash icon | Custom delete icon |
chatIcon | ReactElement | chat icon | Custom leading icon |
limit | number | 100 | Ellipsis cutoff for the title |
children | ReactNode | — | Override the entire row content (Radix Slot) — title Ellipsis is replaced |
<SessionListItem session={session} chatIcon={<AppIcon />} />
// Custom item content
<SessionListItem session={session}>
<div className="flex flex-col">
<strong>{session.title}</strong>
<span>{session.conversations.length} messages</span>
</div>
</SessionListItem>Full-width primary button bound to createSession() from context. Shows the plus icon as start adornment and respects disabled from context.
| Prop | Type | Default | Description | |
|---|---|---|---|---|
newSessionText | `string \ | ReactNode` | 'New Session' | Default label |
children | ReactNode | — | Override the entire button (Radix Slot) |
<NewSessionButton newSessionText="Start chat" />
// Or wrap a custom trigger
<NewSessionButton>
<button className="custom-button">+ New chat</button>
</NewSessionButton>Exported from reachat/utils (re-exported via reachat). Buckets sessions by relative date for SessionGroups.
interface GroupedSessions {
heading: string;
sessions: Session[];
}
function groupSessionsByDate(sessions: Session[]): GroupedSessions[];theme.sessions.{base, console, companion, group, create}
theme.sessions.session.{base, active, delete}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.