Files
ra-h-os/src/components/agents/AsciiBanner.tsx
T
“BeeRad” 733d1c3407 Initial commit: RA-H Open Source Edition
Local-first knowledge management system with BYO API keys.

Features:
- 3-panel UI (Nodes | Focus | Helpers)
- SQLite + sqlite-vec for vector search
- Agent system (Easy/Hard mode orchestrators)
- Content extraction (YouTube, PDF, web)
- Integrate workflow for connection discovery
- Dimension system with auto-assignment

Tech stack:
- Next.js 15 + TypeScript + Tailwind CSS
- Anthropic (Claude) + OpenAI (GPT) via Vercel AI SDK

Setup:
  npm install && npm rebuild better-sqlite3
  scripts/dev/bootstrap-local.sh
  npm run dev

MIT License
2025-12-15 16:14:28 +11:00

67 lines
1.7 KiB
TypeScript

"use client";
interface AsciiBannerProps {
helperName: string;
displayName?: string;
}
export default function AsciiBanner({ helperName, displayName }: AsciiBannerProps) {
const name = displayName || helperName;
const nameUpper = name.toUpperCase();
// Create a unique minimal banner
const createBanner = () => {
// Dynamic sizing based on name length
const minWidth = 24;
const bannerWidth = Math.max(minWidth, nameUpper.length + 6);
const padding = Math.floor((bannerWidth - nameUpper.length - 2) / 2);
const paddedName = ' '.repeat(padding) + nameUpper + ' '.repeat(bannerWidth - nameUpper.length - padding - 2);
const topBottom = '─'.repeat(bannerWidth - 2);
return `┌${topBottom}
${paddedName}
${topBottom}┘`;
};
const banner = createBanner();
return (
<div style={{
padding: '32px 16px',
fontFamily: 'inherit',
opacity: 0,
animation: 'fadeIn 0.5s ease-out forwards',
textAlign: 'center'
}}>
<pre style={{
color: '#353535',
fontSize: '14px',
lineHeight: '1.3',
whiteSpace: 'pre',
margin: '0 auto',
display: 'inline-block',
letterSpacing: '0.05em'
}}>
{banner}
</pre>
<div style={{
marginTop: '12px',
fontSize: '11px',
letterSpacing: '0.15em',
textTransform: 'uppercase'
}}>
<span style={{ color: '#2a2a2a' }}>━━━</span>
<span style={{ color: '#353535', margin: '0 8px' }}>ready</span>
<span style={{ color: '#2a2a2a' }}>━━━</span>
</div>
<style jsx>{`
@keyframes fadeIn {
to { opacity: 1; }
}
`}</style>
</div>
);
}