SPB Git forge

spb/ka-guardian

Public
26commits 1branches 0releases
4.5 MBsize
maindefault branch
19 days agolast push
Python 57.1% Shell 13.8% CSS 12% JavaScript 10% HTML 7.2%

Thèmes par agent (bleu ka2 / orange ka4 / mauve ka6) + favicons SVG signature + jeton opérateur

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 mo ago (Aug 23, 2026) parent 0af672d

7 changed files +48 −11

modified orchestrator/main.py +6 −1
@@ -641,7 +641,7 @@ def state() -> dict[str, Any]:
641 641 history = [dict(r) for r in c.execute(
642 642 "SELECT ts, mine FROM snapshots WHERE ts > ? ORDER BY ts", (now() - 7 * 86400,)).fetchall()]
643 643 return {
644 "agent": AGENT, "identity": {k: ME[k] for k in ("domain", "accent", "accent2", "tagline", "model")},
644 + "agent": AGENT, "identity": {k: ME.get(k) for k in ("domain", "accent", "accent2", "accent_soft", "tagline", "model")},
645 645 "services": {s: {**SERVICES[s], "node_alias": NODES[SERVICES[s]["node"]]["alias"]} for s in ME["services"]},
646 646 "siblings": {a: {"domain": v["domain"], "accent": v["accent"], "services": v["services"]}
647 647 for a, v in TOPO["agents"].items() if a != AGENT},
@@ -759,6 +759,11 @@ def health() -> dict[str, Any]:
759 759 return {"ok": True, "agent": AGENT, "polled": LATEST["polled"], "paused": LATEST["paused"]}
760 760
761 761
762 +@app.get("/favicon.svg")
763 +def favicon() -> FileResponse:
764 + return FileResponse(BASE / "web" / f"favicon-{AGENT}.svg", media_type="image/svg+xml")
765 +
766 +
762 767 @app.get("/")
763 768 def index() -> FileResponse:
764 769 return FileResponse(BASE / "web" / "index.html")
modified orchestrator/web/app.js +7 −1
@@ -17,7 +17,13 @@ async function load() {
17 17 const r = await fetch("/api/state");
18 18 STATE = await r.json();
19 19 const id = STATE.identity, num = STATE.agent.replace("ka", "");
20 document.documentElement.style.setProperty("--agent", id.accent);
20 + // Thème par agent (bleu ka2 / orange ka4 / mauve ka6): l'accent de l'agent
21 + // remplace le lime du design system sur tout son site.
22 + const rs = document.documentElement.style;
23 + rs.setProperty("--agent", id.accent);
24 + rs.setProperty("--lime", id.accent);
25 + if (id.accent_soft) rs.setProperty("--lime-soft", id.accent_soft);
26 + if (id.accent2) rs.setProperty("--accent-deep", id.accent2);
21 27 document.title = `${STATE.agent.toUpperCase()} Guardian — Groupe KA`;
22 28 $("#wm-name").textContent = "ka·" + num;
23 29 $("#foot-name").textContent = "ka·" + num;
added orchestrator/web/favicon-ka2.svg +7 −0
@@ -0,0 +1,7 @@
1 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2 + <!-- KA Guardian ka2 — encre + pastille lime ·Ka + battement (surveillance) -->
3 + <rect width="64" height="64" rx="14" fill="#141814"/>
4 + <circle cx="51" cy="13" r="4.5" fill="#d9f26b"/>
5 + <text x="30" y="36" font-family="'JetBrains Mono','Menlo',ui-monospace,monospace" font-size="26" font-weight="700" fill="#f5f3ee" text-anchor="middle" letter-spacing="-1">K2</text>
6 + <polyline points="10,48 21,48 26,41 32,54 37,44 41,48 54,48" fill="none" stroke="#5b9df5" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
7 +</svg>
added orchestrator/web/favicon-ka4.svg +7 −0
@@ -0,0 +1,7 @@
1 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2 + <!-- KA Guardian ka4 — encre + pastille lime ·Ka + battement (surveillance) -->
3 + <rect width="64" height="64" rx="14" fill="#141814"/>
4 + <circle cx="51" cy="13" r="4.5" fill="#d9f26b"/>
5 + <text x="30" y="36" font-family="'JetBrains Mono','Menlo',ui-monospace,monospace" font-size="26" font-weight="700" fill="#f5f3ee" text-anchor="middle" letter-spacing="-1">K4</text>
6 + <polyline points="10,48 21,48 26,41 32,54 37,44 41,48 54,48" fill="none" stroke="#ff9f2e" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
7 +</svg>
added orchestrator/web/favicon-ka6.svg +7 −0
@@ -0,0 +1,7 @@
1 +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2 + <!-- KA Guardian ka6 — encre + pastille lime ·Ka + battement (surveillance) -->
3 + <rect width="64" height="64" rx="14" fill="#141814"/>
4 + <circle cx="51" cy="13" r="4.5" fill="#d9f26b"/>
5 + <text x="30" y="36" font-family="'JetBrains Mono','Menlo',ui-monospace,monospace" font-size="26" font-weight="700" fill="#f5f3ee" text-anchor="middle" letter-spacing="-1">K6</text>
6 + <polyline points="10,48 21,48 26,41 32,54 37,44 41,48 54,48" fill="none" stroke="#a78bfa" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>
7 +</svg>
modified orchestrator/web/index.html +2 −0
@@ -5,6 +5,8 @@
5 5 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6 6 <title>Guardian — Groupe KA</title>
7 7 <meta name="description" content="Agent gardien autonome du Groupe KA : il détecte les connecteurs en panne, les répare avec Claude, surveille la guérison et revient en arrière si ça empire. Tout est public, en direct.">
8 +<link rel="icon" type="image/svg+xml" href="/favicon.svg">
9 +<link rel="apple-touch-icon" href="/favicon.svg">
8 10 <link rel="preconnect" href="https://fonts.googleapis.com">
9 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10 12 <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
modified topology.json +12 −9
@@ -6,34 +6,36 @@
6 6 "ka2": {
7 7 "port": 8799,
8 8 "domain": "www.ka2.bot",
9 "accent": "#22d3ee",
10 "accent2": "#0891b2",
9 + "accent": "#a9d1f7",
10 + "accent2": "#1e4fa3",
11 11 "tagline": "Gardien immobilier & local",
12 12 "model": "claude-fable-5",
13 13 "services": [
14 14 "louka",
15 15 "immoka",
16 16 "restoka"
17 ]
17 + ],
18 + "accent_soft": "#e3effc"
18 19 },
19 20 "ka4": {
20 21 "port": 8899,
21 22 "domain": "www.ka4.bot",
22 "accent": "#fbbf24",
23 "accent2": "#d97706",
23 + "accent": "#ffc36b",
24 + "accent2": "#a35c00",
24 25 "tagline": "Gardien mobilité & quotidien",
25 26 "model": "claude-fable-5",
26 27 "services": [
27 28 "autoka",
28 29 "foodka",
29 30 "sortika"
30 ]
31 + ],
32 + "accent_soft": "#ffefd9"
31 33 },
32 34 "ka6": {
33 35 "port": 8999,
34 36 "domain": "www.ka6.bot",
35 "accent": "#a78bfa",
36 "accent2": "#7c3aed",
37 + "accent": "#cdb4f9",
38 + "accent2": "#5b21b6",
37 39 "tagline": "Gardien flagship — gros volumes",
38 40 "model": "claude-fable-5",
39 41 "services": [
@@ -41,7 +43,8 @@
41 43 "jobka",
42 44 "creaka"
43 45 ],
44 "default_for_unknown_services": true
46 + "default_for_unknown_services": true,
47 + "accent_soft": "#f0e8fc"
45 48 }
46 49 },
47 50 "nodes": {
48 51