docs(reference): import Dune: Awakening server-manager references
All checks were successful
CI / backend-types (push) Successful in 10s
CI / frontend-build (push) Successful in 15s
CI / agent-tests (push) Successful in 39s
CI / integration (push) Successful in 22s

Phase 2 references for the host-agent Dune adapter, moved out of volatile /tmp
into docs/reference-repos/ (per Commander). Three upstream projects, .git +
node_modules + compiled binaries stripped (16MB source). Nested AI-instruction
files (.claude/, CLAUDE.md) removed so they don't pollute Corrosion sessions.

- icehunter/    dune-admin (Go+React) — 4 control planes; SETUP_DOCKER.md is the
                closest analog to our agent's Dune docker control plane (compose
                lifecycle, docker logs, RabbitMQ-via-exec, dune Postgres schema)
- adainrivers/  Rust/Tauri desktop — SSH+k8s BattleGroup control, maintenance
                daemon, in-game admin console (Rust idiom reference)
- the4rchangel/ Node web UI replacing battlegroup.bat — matches the Commander's
                Hyper-V self-host path + game-config schema

See docs/reference-repos/README.md for the full index + how we use each.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-06-11 21:08:05 -04:00
parent 0715492ddf
commit 651a35d4be
1334 changed files with 238971 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
-- get_actors_location_data_with_permission(in_actor_ids bigint[]) -> SETOF dune.actorpermissionlocationdata
-- oid: 58272 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.get_actors_location_data_with_permission(in_actor_ids bigint[])
RETURNS SETOF dune.actorpermissionlocationdata
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT actors.id, actors.partition_id, actors.map, actors.dimension_index, actors.transform
FROM actors
WHERE actors.id = ANY(in_actor_ids);
END
$function$

View File

@@ -0,0 +1,17 @@
-- get_permission_actors_for_server(in_server_info dune.serverinfo) -> SETOF dune.actorpermissioncombineddata
-- oid: 58326 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.get_permission_actors_for_server(in_server_info dune.serverinfo)
RETURNS SETOF dune.actorpermissioncombineddata
LANGUAGE plpgsql
AS $function$
BEGIN
return query
with ids as (
select array_agg(actors.id) as ids
from permission_actor join actors on actors.id = permission_actor.actor_id
where server_info_match(actors, in_server_info) and actors.owner_account_id is null
)
select permissions.* from ids, get_permission_for_actors(ids.ids) as permissions;
END
$function$

View File

@@ -0,0 +1,11 @@
-- get_permission_for_actor(in_actor_id bigint) -> dune.actorpermissioncombineddata
-- oid: 58327 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.get_permission_for_actor(in_actor_id bigint)
RETURNS dune.actorpermissioncombineddata
LANGUAGE plpgsql
AS $function$
BEGIN
return (select get_permission_for_actors(array[in_actor_id]) limit 1);
END
$function$

View File

@@ -0,0 +1,49 @@
-- get_permission_for_actors(in_actor_id bigint[]) -> SETOF dune.actorpermissioncombineddata
-- oid: 58328 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.get_permission_for_actors(in_actor_id bigint[])
RETURNS SETOF dune.actorpermissioncombineddata
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
SELECT
-- ActorPermissionData
ROW(
ROW(
permission_actor.actor_id,
permission_actor.actor_name,
actors.class,
permission_actor.actor_type,
permission_actor.access_level,
permission_actor.is_child
)::ActorPermissionEntry,
array_agg(
ROW(
permission_actor_rank.rank,
permission_actor_rank.player_id
)::ActorPermissionRankData
) FILTER (WHERE permission_actor_rank.player_id IS NOT NULL),
array_agg(guild_members.guild_id) FILTER (WHERE permission_actor_rank.player_id IS NOT NULL)
)::ActorPermissionData AS data,
-- ActorPermissionLocationData
ROW(
actors.id,
actors.partition_id,
actors.map,
actors.dimension_index,
actors.transform
)::ActorPermissionLocationData AS loc
FROM
permission_actor
LEFT JOIN permission_actor_rank on permission_actor.actor_id = permission_actor_rank.permission_actor_id
LEFT JOIN guild_members ON guild_members.player_id = permission_actor_rank.player_id
LEFT JOIN actors ON actors.id = permission_actor.actor_id
WHERE
permission_actor.actor_id = ANY(in_actor_id)
GROUP BY
permission_actor.actor_id,
actors.id;
END
$function$

View File

@@ -0,0 +1,18 @@
-- get_permission_for_player_actors(in_player_id bigint, in_min_rank smallint) -> SETOF dune.actorpermissioncombineddata
-- oid: 58329 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.get_permission_for_player_actors(in_player_id bigint, in_min_rank smallint)
RETURNS SETOF dune.actorpermissioncombineddata
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
WITH player_owned_actors AS
(
SELECT array_agg(permission_actor_id) AS ids
FROM permission_actor_rank join actors on actors.id = permission_actor_rank.permission_actor_id
WHERE permission_actor_rank.player_id = in_player_id AND permission_actor_rank.rank <= in_min_rank and actors.owner_account_id is null
)
SELECT permissions.* FROM player_owned_actors, get_permission_for_actors(player_owned_actors.ids) AS permissions;
END
$function$

View File

@@ -0,0 +1,83 @@
-- permission_actor_create_or_update_base_marker(in_actor_id bigint, in_player_id bigint, in_rank smallint) -> void
-- oid: 58485 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_actor_create_or_update_base_marker(in_actor_id bigint, in_player_id bigint, in_rank smallint)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
out_marker_type TEXT := 'HomeBase';
out_owner_id BIGINT;
out_owner_name Text;
out_dimension_index INTEGER;
out_x REAL;
out_y REAL;
out_z REAL;
out_totem_name Text;
out_map_name Text;
out_map_name_id SMALLINT;
out_actor_type smallint;
BEGIN
-- Get owner data
SELECT player_id, character_name
INTO out_owner_id, out_owner_name
FROM permission_actor_rank
JOIN player_state on player_controller_id = player_id
WHERE rank = 1::smallint AND permission_actor_id = in_actor_id
LIMIT 1;
-- Get target and totem data
SELECT dimension_index, (transform).location.x, (transform).location.y, (transform).location.z, actor_name, map, actor_type
INTO out_dimension_index, out_x, out_y, out_z, out_totem_name, out_map_name, out_actor_type
FROM permission_actor_rank
JOIN permission_actor on actor_id = permission_actor_id
JOIN player_state on player_controller_id = player_id
JOIN actors ON permission_actor_id = actors.id
WHERE permission_actor_id = in_actor_id AND player_id = in_player_id
LIMIT 1;
SELECT map_name_id
INTO out_map_name_id
FROM map_names
WHERE map_name = out_map_name;
IF out_actor_type = 3 OR out_actor_type = 4 THEN -- Totem || TotemSmall
INSERT INTO markers ("dimension_index", "marker_hash_id", "map_name_id", "marker", "area_id", "area_radius", "long_range", "payload")
VALUES(out_dimension_index,
in_actor_id,
out_map_name_id,
ROW(
out_marker_type,
out_x, out_y, out_z,
'EMarkerPayloadType::Permissions'
)::MARKER,
0,
0,
FALSE,
jsonb_build_object(
'OwnerUID', out_owner_id,
'OwnerName', out_owner_name,
'TotemName', out_totem_name,
'TotemId', in_actor_id
)
)
ON CONFLICT (marker_hash_id, dimension_index, map_name_id)
DO UPDATE SET
marker = EXCLUDED.marker;
INSERT INTO player_markers ("dimension_index", "player_id", "marker_hash_id", "map_name_id", "discovery_level", "discovery_method", "payload")
VALUES(out_dimension_index,
in_player_id,
in_actor_id,
out_map_name_id,
3, -- EMarkerDiscoveryLevel::Discovered
10, -- EMarkerDiscoveryMethod::Permissions
'{}'::JSONB
)
ON CONFLICT (dimension_index, player_id, marker_hash_id, map_name_id)
DO NOTHING;
END IF;
END
$function$

View File

@@ -0,0 +1,17 @@
-- permission_actor_destroy(in_actor_id bigint) -> void
-- oid: 58486 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_actor_destroy(in_actor_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM permission_actor_rank WHERE permission_actor_id = in_actor_id;
DELETE FROM permission_actor WHERE actor_id = in_actor_id;
-- Destroy map markers related with this actor
DELETE FROM markers WHERE marker_hash_id = in_actor_id;
DELETE FROM player_markers WHERE marker_hash_id = in_actor_id;
PERFORM pg_notify('permission_notify_channel', format('destroy#{"ActorId" : %s}', in_actor_id));
END
$function$

View File

@@ -0,0 +1,20 @@
-- permission_actor_register(in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata) -> void
-- oid: 58487 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_actor_register(in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
INSERT INTO
permission_actor("actor_id", "actor_name", "actor_type", "access_level", "is_child")
VALUES(in_entry.actor_id, in_entry.actor_name, in_entry.actor_type, in_entry.access_level, in_entry.is_child);
IF NOT in_entry.is_child THEN
INSERT INTO permission_actor_rank("permission_actor_id", "player_id", "rank")
VALUES(in_entry.actor_id, in_owner_rank.player_id, in_owner_rank.rank);
END IF;
-- there is no pg_notify here as the use cases where it may be needed are very low and we do not want to pay that cost. If we find any scenario where we need it, it can be added
END
$function$

View File

@@ -0,0 +1,39 @@
-- permission_actor_takeover(in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata) -> void
-- oid: 58488 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_actor_takeover(in_entry dune.actorpermissionentry, in_owner_rank dune.actorpermissionrankdata)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
found_actor_id BIGINT;
found_guild_id BIGINT;
found_previous_owner BIGINT;
BEGIN
-- Check if the actor is already owned to avoid exploits
SELECT player_id into found_previous_owner FROM permission_actor_rank WHERE permission_actor_id = in_entry.actor_id AND rank = 1::smallint;
IF found_previous_owner IS NOT NULL THEN
RAISE NOTICE 'Player % trying to claim ownership over actor % already owned by player %.',
in_owner_rank.player_id, in_entry.actor_id, found_previous_owner;
return;
END IF;
SELECT actor_id FROM permission_actor WHERE actor_id = in_entry.actor_id INTO found_actor_id;
IF NOT FOUND THEN
PERFORM permission_actor_register(in_entry, in_owner_rank);
RETURN;
END IF;
SELECT guild_id FROM guild_members WHERE player_id = in_entry.actor_id INTO found_guild_id;
IF NOT FOUND THEN
found_guild_id := 0;
END IF;
DELETE FROM permission_actor_rank WHERE permission_actor_id = in_entry.actor_id;
INSERT INTO permission_actor_rank("permission_actor_id", "player_id", "rank")
VALUES(in_entry.actor_id, in_owner_rank.player_id, in_owner_rank.rank);
PERFORM pg_notify('permission_notify_channel', format('takeover#{"ActorId" : %s , "PlayerId" : %s, "PlayerGuildId" : %s}', in_entry.actor_id, in_owner_rank.player_id, found_guild_id));
END
$function$

View File

@@ -0,0 +1,19 @@
-- permission_actor_update_marker_location(in_actor_id bigint, in_location_x real, in_location_y real, in_location_z real) -> void
-- oid: 58489 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_actor_update_marker_location(in_actor_id bigint, in_location_x real, in_location_y real, in_location_z real)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE markers SET marker =
(
(marker).marker_type,
in_location_x,
in_location_y,
in_location_z,
(marker).payload_type
)
WHERE marker_hash_id = in_actor_id;
END
$function$

View File

@@ -0,0 +1,16 @@
-- permission_remove_player_rank(in_actor_id bigint, in_player_id bigint) -> void
-- oid: 58490 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_remove_player_rank(in_actor_id bigint, in_player_id bigint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM permission_actor_rank WHERE permission_actor_id = in_actor_id AND player_id = in_player_id;
-- Remove from player_markers using player id and, actor id as hash id
DELETE FROM player_markers WHERE player_id = in_player_id AND marker_hash_id = in_actor_id;
PERFORM pg_notify('permission_notify_channel', format('remove_rank#{"ActorId" : %s , "PlayerId" : %s}', in_actor_id, in_player_id));
END
$function$

View File

@@ -0,0 +1,13 @@
-- permission_set_access_level(in_actor_id bigint, in_access_level smallint) -> void
-- oid: 58491 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_set_access_level(in_actor_id bigint, in_access_level smallint)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE permission_actor SET access_level = in_access_level WHERE permission_actor.actor_id = in_actor_id;
PERFORM pg_notify('permission_notify_channel', format('set_access_level#{"ActorId" : %s , "AccessLevel" : %s}', in_actor_id, in_access_level));
END
$function$

View File

@@ -0,0 +1,24 @@
-- permission_set_name(in_actor_id bigint, in_name text) -> void
-- oid: 58492 kind: FUNCTION category: permission
CREATE OR REPLACE FUNCTION dune.permission_set_name(in_actor_id bigint, in_name text)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE permission_actor SET actor_name = in_name WHERE permission_actor.actor_id = in_actor_id;
UPDATE markers SET marker =
(
(marker).marker_type,
(marker).x,
(marker).y,
(marker).z,
(marker).payload_type
),
payload = jsonb_set(payload, '{TotemName}', to_jsonb(in_name) , false)
WHERE marker_hash_id = in_actor_id;
PERFORM pg_notify('permission_notify_channel', format('set_name#{"ActorId" : %s , "Name" : "%s"}', in_actor_id, in_name));
END
$function$