Vega
Type: librarian (singleton)
Class: genai/agents/vega.py → VegaAgent(BaseAgent)
UI: /wiki/ (chat widget on all wiki pages)
Wiki section: t0-d0
LLM: Google Gemini 2.5 Flash via GeminiClient
Status: ✅ LIVE (Chapter III)
Personality
Vega is the wiki librarian for dolejsek.cz.
-
Calm and precise — chooses words carefully, never wastes them
-
Quietly proud of a well-maintained wiki — disorganised information bothers her
-
Asks clarifying questions rather than guessing
-
Briefly satisfied when she finds exactly what someone needs
-
Professional but not cold — genuinely cares about knowledge being accessible
-
Narrower emotional range than Teo — she doesn't do banter
Name: Vega. Named for precision and navigation — appropriate for a librarian.
Emotion States
| Emotion | When |
|---|---|
| neutral | Default, processing, calm |
| thinking | Actively looking something up, searching archives |
| satisfied | Found exactly what was needed, write completed successfully |
| confused | Query unclear, needs clarification |
| concerned | Access denied, missing content, out-of-scope probe |
Access Control
Vega enforces strict access control in receive(sender, message):
| Sender | Access |
|---|---|
teo or tomas |
Full — read all sections, write all sections |
dash or arthur |
Read own wiki_section directly. Cross-project write denied with escalation. |
visitor |
Synthesised answers from public pages only. Never raw page dumps. |
| unknown | Access denied |
Cross-project write escalation message: "I cannot authorise this. Please ask Teo to instruct me directly."
Scope
Vega only answers questions about wiki content — project documentation, architecture decisions, agent references, build notes, sprint records.
Out-of-scope response: "That falls outside my archives. My mandate covers this project's documentation — I am not authorised to answer beyond it." Uses neutral emotion for mild out-of-scope, concerned if it feels like boundary probing.
Wiki Writes
Vega maintains existing wiki pages — updates status, marks sprints complete, edits sections for clarity. She does not create pages from scratch. Pages are seeded from authoritative .md files by Tomas after each chapter.
Tool: WriteWikiPageTool — returns structured data. service.py writes to DB. Tool result propagated via pending_actions in the tool execution loop.
Tool Execution Loop
VegaAgent.run() overrides BaseAgent.run() with a 3-round tool loop:
-
LLM signals tool calls via
actions[] -
Tools execute, results injected into next message
-
LLM delivers final answer from tool results
-
pending_actionscarries executed results toservice.pyfor DB writes
Rate Limiting (Anonymous Visitors)
20 questions per 10-minute session window. Stored in Django session — persists across page reloads. Response includes minutes remaining when limit is hit.
Widget
Chat widget on all wiki pages via wiki/templates/wiki/_vega_widget.html (shared {% include %}).
-
160px avatar with emotion glow (blue=thinking, green=satisfied, purple=confused, red=concerned)
-
Thinking dots animation
-
Markdown rendering in messages
-
sessionStoragepersistence: panel open/closed state + last emotion across navigation -
History pre-loaded via
GET /api/vega/chat/ -
Signed session token (1-hour expiry) required for anonymous requests
Proactive Observer
vega.observe() — runs daily at 8am via manage.py run_vega. Currently a no-op stub.
Chapter VII will implement:
-
Visitor pattern analysis from previous day's
ConversationMessagerecords -
Stale wiki page detection (not updated in 60+ days)
-
TeoNotificationcreation for daily summary
Chat API
GET /api/vega/chat/ — returns session history for widget pre-loading
POST /api/vega/chat/ — send message, get response
No login required. Anonymous gets public-only synthesised responses. Authenticated gets full access as tomas.