Skip to content

Commit 280ff18

Browse files
hyperpolymathclaude
andcommitted
feat(clade): register Burble + IDApTIK admin panels in Clade system
Add 6 new panels (3 Burble, 3 IDApTIK) to PanelSwitcherModel, PanelRegistry, and CladeBrowserEngine. Update panel count 88→94. Burble admin: server status, voice quality, room monitor IDApTIK admin: server status, session monitor, player overview Both enriched with appropriate protocols and capabilities. Tests added for all new panels. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 2a4c781 commit 280ff18

4 files changed

Lines changed: 132 additions & 2 deletions

File tree

src/core/CladeBrowserEngine.res

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,24 @@ let enrichClade = (entry: cladeEntry): cladeEntry =>
10851085
~capabilities=[CapNetwork, CapShell, CapContainerised],
10861086
entry,
10871087
)
1088+
// Burble Admin — voice platform management
1089+
| "burble-admin" =>
1090+
withDefaults(
1091+
~protocols=[ProtoREST, ProtoWebSocket, ProtoTauriIPC],
1092+
~capabilities=[CapNetwork, CapStreaming, CapVisualisation],
1093+
~enhances=["infrastructure"],
1094+
~isolation=IsolationProcess,
1095+
entry,
1096+
)
1097+
// IDApTIK Admin — game server management
1098+
| "idaptik-admin" =>
1099+
withDefaults(
1100+
~protocols=[ProtoREST, ProtoWebSocket, ProtoTauriIPC],
1101+
~capabilities=[CapNetwork, CapShell, CapContainerised, CapStreaming],
1102+
~enhances=["infrastructure", "gsa"],
1103+
~isolation=IsolationProcess,
1104+
entry,
1105+
)
10881106
| _ => entry
10891107
}
10901108

src/model/PanelSwitcherModel.res

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,20 @@ type panelId =
175175
| PanelGsaConfigHistory
176176
/// GSA Cross-Server Search — VQL-powered cross-server config search.
177177
| PanelGsaCrossSearch
178+
// Burble Admin panels — voice platform management via Gossamer
179+
/// Burble Server Status — node health, rooms, participants, uptime.
180+
| PanelBurbleServerStatus
181+
/// Burble Voice Quality — bandwidth, jitter, packet loss metrics.
182+
| PanelBurbleVoiceQuality
183+
/// Burble Room Monitor — active rooms, recordings, participant activity.
184+
| PanelBurbleRoomMonitor
185+
// IDApTIK Admin panels — game server management via Gossamer
186+
/// IDApTIK Server Status — running state, sessions, player count.
187+
| PanelIdaptikServerStatus
188+
/// IDApTIK Session Monitor — active sessions, completion rates, balance.
189+
| PanelIdaptikSessionMonitor
190+
/// IDApTIK Player Overview — Jessica/Q stats, asymmetric balance ratio.
191+
| PanelIdaptikPlayerOverview
178192

179193
/// Connection status for panels backed by external services.
180194
type connectionStatus =

src/modules/PanelRegistry.res

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,72 @@ let allPanels: array<panelMeta> = [
10201020
hasBackend: true,
10211021
cladeId: Some("gsa-search"),
10221022
},
1023+
// ════════════════════════════════════════════════════════════════════════
1024+
// Burble Admin panels
1025+
// ════════════════════════════════════════════════════════════════════════
1026+
{
1027+
id: PanelBurbleServerStatus,
1028+
name: "Burble Status",
1029+
shortName: "Status",
1030+
description: "Burble voice server health, uptime, and room overview",
1031+
icon: "mic",
1032+
connectionStatus: ServiceConnected,
1033+
hasBackend: true,
1034+
cladeId: Some("burble-admin"),
1035+
},
1036+
{
1037+
id: PanelBurbleVoiceQuality,
1038+
name: "Voice Quality",
1039+
shortName: "Voice",
1040+
description: "WebRTC voice metrics — bandwidth, jitter, packet loss",
1041+
icon: "bar-chart",
1042+
connectionStatus: ServiceConnected,
1043+
hasBackend: true,
1044+
cladeId: Some("burble-admin"),
1045+
},
1046+
{
1047+
id: PanelBurbleRoomMonitor,
1048+
name: "Room Monitor",
1049+
shortName: "Rooms",
1050+
description: "Active voice rooms, recordings, participant activity",
1051+
icon: "users",
1052+
connectionStatus: ServiceConnected,
1053+
hasBackend: true,
1054+
cladeId: Some("burble-admin"),
1055+
},
1056+
// ════════════════════════════════════════════════════════════════════════
1057+
// IDApTIK Admin panels
1058+
// ════════════════════════════════════════════════════════════════════════
1059+
{
1060+
id: PanelIdaptikServerStatus,
1061+
name: "IDApTIK Status",
1062+
shortName: "Server",
1063+
description: "IDApTIK game server state, sessions, and player count",
1064+
icon: "shield",
1065+
connectionStatus: ServiceConnected,
1066+
hasBackend: true,
1067+
cladeId: Some("idaptik-admin"),
1068+
},
1069+
{
1070+
id: PanelIdaptikSessionMonitor,
1071+
name: "Session Monitor",
1072+
shortName: "Sessions",
1073+
description: "Active game sessions, completion rates, difficulty balance",
1074+
icon: "monitor",
1075+
connectionStatus: ServiceConnected,
1076+
hasBackend: true,
1077+
cladeId: Some("idaptik-admin"),
1078+
},
1079+
{
1080+
id: PanelIdaptikPlayerOverview,
1081+
name: "Player Overview",
1082+
shortName: "Players",
1083+
description: "Jessica/Q player stats, asymmetric balance ratio",
1084+
icon: "users",
1085+
connectionStatus: ServiceConnected,
1086+
hasBackend: true,
1087+
cladeId: Some("idaptik-admin"),
1088+
},
10231089
]
10241090

10251091
/// Look up panel metadata by ID.

tests/panel_registry_test.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import {
1717
init,
1818
} from "../src/modules/PanelRegistry.res.js";
1919

20-
Deno.test("allPanels has 88 entries", () => {
21-
assertEquals(allPanels.length, 88);
20+
Deno.test("allPanels has 94 entries", () => {
21+
assertEquals(allPanels.length, 94);
2222
});
2323

2424
Deno.test("every panel has required fields", () => {
@@ -123,3 +123,35 @@ Deno.test("panelsInClade returns GSA config editor", () => {
123123
assertEquals(panels.length, 1);
124124
assertEquals(panels[0].id, "PanelGsaConfigEditor");
125125
});
126+
127+
// ════════════════════════════════════════════════════════════════════════
128+
// Burble Admin panel tests
129+
// ════════════════════════════════════════════════════════════════════════
130+
131+
Deno.test("Burble has 3 admin panels", () => {
132+
const burblePanels = panelsInClade("burble-admin");
133+
assertEquals(burblePanels.length, 3);
134+
});
135+
136+
Deno.test("Burble Voice Quality panel exists", () => {
137+
const panel = findPanel("PanelBurbleVoiceQuality");
138+
assertExists(panel);
139+
assertEquals(panel.shortName, "Voice");
140+
assertEquals(panel.icon, "bar-chart");
141+
});
142+
143+
// ════════════════════════════════════════════════════════════════════════
144+
// IDApTIK Admin panel tests
145+
// ════════════════════════════════════════════════════════════════════════
146+
147+
Deno.test("IDApTIK has 3 admin panels", () => {
148+
const idaptikPanels = panelsInClade("idaptik-admin");
149+
assertEquals(idaptikPanels.length, 3);
150+
});
151+
152+
Deno.test("IDApTIK Player Overview panel exists", () => {
153+
const panel = findPanel("PanelIdaptikPlayerOverview");
154+
assertExists(panel);
155+
assertEquals(panel.shortName, "Players");
156+
assertEquals(panel.cladeId, "idaptik-admin");
157+
});

0 commit comments

Comments
 (0)