SysOps: deploy-all — 2026-06-09 12:56 UTC

This commit is contained in:
sysops
2026-06-09 12:56:59 +00:00
parent 9b88e7c110
commit 3bf15c4850
9 changed files with 159 additions and 16 deletions
+3 -3
View File
@@ -12,7 +12,7 @@ CHANNEL_ROUTES = {
"marketing": "/marketing",
"beurs": "/beurs",
"agents": "/agents",
"hermes": "/hermes",
"hr": "/agents",
"browser": "/browser",
"documents": "/documents",
"settings": "/settings",
@@ -56,8 +56,8 @@ def _resolve_source(row: dict[str, Any]) -> dict[str, Any]:
source_url = "/marketing"
elif agent in ("wholesale_scraper", "retail_intel"):
source_url = "/retail"
elif agent == "hermes":
source_url = "/hermes"
elif agent == "hr":
source_url = "/agents"
internal_url = source_url if source_url.startswith("/") else None
external_url = source_url if source_url and source_url.startswith("http") else None
+1 -1
View File
@@ -470,7 +470,7 @@ async def stream_daily_briefing():
"agent_msg", "agent_mesh", agent, "agent",
f"@{agent}: {ev.get('title') or ev.get('event_type')}",
)
for agent_key in ("bizdev", "finance", "sourcing", "halal", "packaging"):
for agent_key in ("bizdev", "finance", "sourcing", "halal", "packaging", "hr"):
yield _briefing_step(
"agent_msg", "agent_mesh", "herman", "agent",
f"Herman → {agent_key}: briefing context gedeeld",
+3 -3
View File
@@ -12,7 +12,7 @@ CHANNEL_ROUTES = {
"marketing": "/marketing",
"beurs": "/beurs",
"agents": "/agents",
"hermes": "/hermes",
"hr": "/agents",
"browser": "/browser",
"documents": "/documents",
"settings": "/settings",
@@ -56,8 +56,8 @@ def _resolve_source(row: dict[str, Any]) -> dict[str, Any]:
source_url = "/marketing"
elif agent in ("wholesale_scraper", "retail_intel"):
source_url = "/retail"
elif agent == "hermes":
source_url = "/hermes"
elif agent == "hr":
source_url = "/agents"
internal_url = source_url if source_url.startswith("/") else None
external_url = source_url if source_url and source_url.startswith("http") else None
+1 -1
View File
@@ -12,7 +12,7 @@ window.AgentAvatars = (function () {
knowledge: { hoodie: '#312e81', hair: '#374151', skin: '#e8b896', style: 'glasses', accent: '#6366f1' },
retail: { hoodie: '#365314', hair: '#2d1810', skin: '#ddb896', style: 'short', accent: '#b8ff3c' },
browser: { hoodie: '#0c4a6e', hair: '#1f2937', skin: '#c9a07a', style: 'short', accent: '#38bdf8' },
hermes: { hoodie: '#1e40af', hair: '#3d2314', skin: '#e8b896', style: 'short', accent: '#2aabee' },
hr: { hoodie: '#6b21a8', hair: '#2d1810', skin: '#ddb896', style: 'bob', accent: '#e879f9' },
email: { hoodie: '#334155', hair: '#4a3728', skin: '#ddb896', style: 'short', accent: '#94a3b8' },
research: { hoodie: '#115e59', hair: '#1a1a1a', skin: '#f5c9a8', style: 'glasses', accent: '#14b8a6' },
sysops: { hoodie: '#1e3a5f', hair: '#4a3728', skin: '#e8b896', style: 'short', accent: '#38bdf8', hat: 'cap' },
+1 -1
View File
@@ -60,7 +60,7 @@
<span x-text="statusLabel(s)"></span>
</span>
<p class="agent-current-task" x-text="s.current_task || 'Wacht op taak…'"></p>
<p class="agent-role-desc" x-text="(s.responsibilities || '').substring(0,120)"></p>
<p class="agent-role-desc" x-text="s.responsibilities || ''"></p>
<div class="agent-meta-row">
<button type="button" class="agent-events-link"
@click.stop="openEvents(s.agent_key, s.display_name)"
+1 -1
View File
@@ -196,7 +196,7 @@
<option value="rss_feeds">RSS Feeds</option>
<option value="wholesale_scraper">Wholesale</option>
<option value="halal_registry">Halal</option>
<option value="hermes">Hermes</option>
<option value="hr">HR</option>
</select>
<span class="live-badge">Auto-refresh 5s</span>
</div>
+21 -5
View File
@@ -4,16 +4,32 @@
Herman fungeert als **Co-CEO** in het centrum van het netwerk. Agents communiceren via events (`agent_events`) en worden gevisualiseerd op `/agents?tab=mesh`.
## Nieuwe agents (migratie 016)
## Agent overzicht
| Key | Naam | Rol |
|-----|------|-----|
| `sysops` | SysOps | Proxmox, Docker, VM monitoring |
| Key | Naam | Functie |
|-----|------|---------|
| `herman` | Herman | AI Co-CEO — briefing, orchestratie, delegatie |
| `marketing` | Marketing | Social, campagnes, RSS trends, brand |
| `bizdev` | BizDev | Retail partnerships, deals, listings |
| `finance` | Finance | Marges, pricing, pipeline-waardering |
| `sourcing` | Sourcing | Leveranciers, inkoop, halal ingredients |
| `product` | Product | SKU-ontwikkeling, launch, shelf readiness |
| `halal` | Halal | Certificering, compliance, gap-analyse |
| `design` | Design | ComfyUI, visuals, studio assets |
| `knowledge` | Knowledge | NAS, RAG, document analytics |
| `retail` | Retail Intel | Supermarkten 360, CBS, kansen |
| `browser` | Browser | Web research, concurrentie-monitoring |
| `hr` | HR | Personeelszaken, recruiting, onboarding |
| `email` | Email | IMAP/SMTP, inbox, verzenden |
| `research` | Research | Marktonderzoek, trends, data feeds |
| `sysops` | SysOps | IT infra, Docker, Gitea backup |
| `packaging` | Packaging | SVG/PDF verpakkingsontwerp |
> **Let op:** `/hermes` is het Telegram Command Center (aparte module), geen agent in de soul registry.
## Souls
Elke agent heeft een `soul_md` in PostgreSQL (`agent_souls`). Herman leest souls voor briefing en delegatie.
Elke agent heeft `role_title`, `responsibilities` en `soul_md` in PostgreSQL (`agent_souls`). De HR-soul is een placeholder en wordt later uitgewerkt.
## Permissions
+1 -1
View File
@@ -87,7 +87,7 @@ Migraties in `migrations/`:
| retail | Supermarkten 360 |
| research | Marktonderzoek |
| design | ComfyUI |
| … | bizdev, finance, sourcing, product, halal, knowledge, browser, hermes, email |
| … | bizdev, finance, sourcing, product, halal, knowledge, browser, hr, email |
**Events:** `agent_events` — zichtbaar op `/agents`, klikbaar per agent.
+127
View File
@@ -0,0 +1,127 @@
-- Vervang Hermes agent door HR + duidelijke functieomschrijvingen voor alle agents
DELETE FROM agent_souls WHERE agent_key = 'hermes';
INSERT INTO agent_souls (agent_key, display_name, role_title, soul_md, responsibilities, avatar_emoji, avatar_color, avatar_mood, is_active) VALUES
('hr', 'HR', 'HR & People Operations',
'# HR — Soul
> Soul wordt later uitgewerkt — dit is een voorlopige placeholder.
Je bent de HR-agent van Foodlinkk (halal kant-en-klaar food business).
## Functie
- Personeelszaken en team operations
- Recruiting, vacatures en kandidaat-screening
- Onboarding nieuwe medewerkers (incl. IT-toegang via SysOps)
- Verlof, contracten en arbeidsvoorwaarden bijhouden
- Team welzijn en interne communicatie
## Samenwerking
- **Herman:** people-updates in CEO briefing
- **Finance:** salaris- en kostencontext (toekomst)
- **Knowledge:** HR-beleid en handboeken op NAS
- **SysOps:** accounts en toegang bij onboarding/offboarding',
'Personeelszaken · recruiting · onboarding · verlof & contracten · team welzijn',
'👥', '#e879f9', 'calm', true)
ON CONFLICT (agent_key) DO UPDATE SET
display_name = EXCLUDED.display_name,
role_title = EXCLUDED.role_title,
soul_md = EXCLUDED.soul_md,
responsibilities = EXCLUDED.responsibilities,
avatar_emoji = EXCLUDED.avatar_emoji,
avatar_color = EXCLUDED.avatar_color,
avatar_mood = EXCLUDED.avatar_mood,
is_active = EXCLUDED.is_active,
updated_at = NOW();
-- Duidelijke functieomschrijvingen (role_title + responsibilities)
UPDATE agent_souls SET
role_title = 'AI Co-CEO & Orchestrator',
responsibilities = 'Dagelijkse CEO-briefing · agent-orchestratie · taakdelegatie · goedkeuringsqueue · pipeline-overzicht',
updated_at = NOW()
WHERE agent_key = 'herman';
UPDATE agent_souls SET
role_title = 'Marketing & Communicatie',
responsibilities = 'Social media monitoring · content & campagnes · RSS/food trends · brand voice Foodlinkk · reclamefolders',
updated_at = NOW()
WHERE agent_key = 'marketing';
UPDATE agent_souls SET
role_title = 'Business Development',
responsibilities = 'Retail partnerships (Jumbo/AH/Plus) · deal pipeline · proposals · supermarkt-listing trajecten · CRM-koppelingen',
updated_at = NOW()
WHERE agent_key = 'bizdev';
UPDATE agent_souls SET
role_title = 'Finance & Pricing',
responsibilities = 'Pipeline-waardering · marges per SKU · prijsstelling retail · cashflow-inzicht · kostenanalyse',
updated_at = NOW()
WHERE agent_key = 'finance';
UPDATE agent_souls SET
role_title = 'Inkoop & Leveranciers',
responsibilities = 'Leveranciersdatabase · MOQ & lead times · halal ingredient sourcing · inkoopvoorwaarden · supplier vetting',
updated_at = NOW()
WHERE agent_key = 'sourcing';
UPDATE agent_souls SET
role_title = 'Productontwikkeling',
responsibilities = 'SKU-catalogus · shelf readiness · launch planning · retail listing-eisen · productlifecycle',
updated_at = NOW()
WHERE agent_key = 'product';
UPDATE agent_souls SET
role_title = 'Halal Compliance',
responsibilities = 'Halal-certificering · ingredient vetting · compliance registry · gap-analyse supermarkten · audit-voorbereiding',
updated_at = NOW()
WHERE agent_key = 'halal';
UPDATE agent_souls SET
role_title = 'Design & Visuals',
responsibilities = 'ComfyUI productfoto''s · visuele identiteit · studio assets · packaging visuals · retail presentatie',
updated_at = NOW()
WHERE agent_key = 'design';
UPDATE agent_souls SET
role_title = 'Kennisbank & Documenten',
responsibilities = 'NAS corpus · document analytics · sentiment & top-woorden · RAG-antwoorden · intern beleid doorzoeken',
updated_at = NOW()
WHERE agent_key = 'knowledge';
UPDATE agent_souls SET
role_title = 'Retail Intelligence',
responsibilities = '3.000+ supermarkten DB · CBS-demografie · halal opportunity scores · groothandels · sales milestones',
updated_at = NOW()
WHERE agent_key = 'retail';
UPDATE agent_souls SET
role_title = 'Web Research',
responsibilities = 'Autonome browser-sessies · concurrentie-monitoring · pagina-scraping · marktintel via web',
updated_at = NOW()
WHERE agent_key = 'browser';
UPDATE agent_souls SET
role_title = 'Email & Mailbox',
responsibilities = 'IMAP/SMTP sync · inbox beheer · concept-emails · verzenden namens Foodlinkk · klantcorrespondentie',
updated_at = NOW()
WHERE agent_key = 'email';
UPDATE agent_souls SET
role_title = 'Marktonderzoek',
responsibilities = 'Externe data feeds · markttrends · weather data · research briefs · data provider sync',
updated_at = NOW()
WHERE agent_key = 'research';
UPDATE agent_souls SET
role_title = 'IT Operations & Infra',
responsibilities = 'Proxmox & VM monitoring · Docker health · Gitea backup · maintenance scans · infra-topologie · SysOps-verslag',
updated_at = NOW()
WHERE agent_key = 'sysops';
UPDATE agent_souls SET
role_title = 'Verpakkingsontwerp',
responsibilities = 'SVG/PDF/PNG packaging studio · stanstekeningen · drukwerk-ready exports · NAS per project · Herman-commando''s',
updated_at = NOW()
WHERE agent_key = 'packaging';