Publish VoidBot semantic CultMesh addresses
This commit is contained in:
parent
ed77f79306
commit
953e6da5ed
7 changed files with 291 additions and 24 deletions
|
|
@ -53,7 +53,7 @@ The durable local state is split on purpose: Postgres holds jobs, audit events,
|
|||
|
||||
There is also a project-memory spine now for future Codex sessions: `state/map.yaml`, `state/scratch.md`, `state/evidence.jsonl`, `notes/fresh-workspace-handoff.md`, and the helper CLIs under `tools/`. The point is to rehydrate from canonical files instead of pretending the transcript will stay coherent forever.
|
||||
|
||||
VoidBot also publishes a current swarm Eve/CultUI surface through CultMesh as `cultmesh://voidbot.local/eve/providers/voidbot.swarm`, backed by `.voidbot/status/cultmesh/voidbot-swarm-state.cc`. The generated `swarm-dashboard.html` is a local debug lowering of that surface.
|
||||
VoidBot also publishes a current swarm Eve/CultUI surface through CultMesh as `asgard.starfire.voidbot/swarm/eve/tui`, backed by `.voidbot/status/cultmesh/voidbot-swarm-state.cc`. The legacy `cultmesh://voidbot.local/eve/providers/voidbot.swarm` key remains only as a document route. The generated `swarm-dashboard.html` is a local debug lowering of that surface.
|
||||
|
||||
## Quick Start
|
||||
|
||||
|
|
|
|||
|
|
@ -48,9 +48,11 @@ provider-owned CultMesh surfaces; Eve/CultUI is the presentation contract.
|
|||
- `manual_package` remains available when you want explicit approval-gated packaging
|
||||
- When the local Discord-safe lane is not enough, the worker posts a handoff notice and writes the full context bundle to `.voidbot/artifacts/<job-id>/`.
|
||||
- The current swarm operator surface is published as an Eve/CultUI CultMesh
|
||||
provider at `cultmesh://voidbot.local/eve/providers/voidbot.swarm`, backed by
|
||||
`.voidbot/status/cultmesh/voidbot-swarm-state.cc`; any generated browser page
|
||||
is only a debug lowering of that provider surface.
|
||||
provider at `asgard.starfire.voidbot/swarm/eve/tui`, backed by
|
||||
`.voidbot/status/cultmesh/voidbot-swarm-state.cc`; the legacy
|
||||
`cultmesh://voidbot.local/eve/providers/voidbot.swarm` key is only a route,
|
||||
and any generated browser page is only a debug lowering of that provider
|
||||
surface.
|
||||
|
||||
## Upgrade path
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,10 @@
|
|||
"fixtureKind": "read-only-contract-export",
|
||||
"note": "This tracked fixture advertises VoidBot Verse provider boundaries. It is not live service state, not a dashboard, and not a Persona inspection authority.",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot",
|
||||
"providerAdvertisement": {
|
||||
"documentType": "gamecult.eve.provider_advertisement",
|
||||
"schemaId": "gamecult.eve.provider_advertisement.v1"
|
||||
|
|
@ -144,10 +148,42 @@
|
|||
"schemaVersion": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "voidbot.discord",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot/discord/eve/tui",
|
||||
"title": "VoidBot Discord",
|
||||
"description": "Discord ingress, room obligations, direct mentions, speech receipts, moderation pressure, and delivery targets.",
|
||||
"status": "planned-witness",
|
||||
"endpoint": "cultmesh://voidbot.local/eve/providers/voidbot.discord",
|
||||
"endpoint": "asgard.starfire.voidbot/discord/eve/tui",
|
||||
"endpoints": [
|
||||
{
|
||||
"kind": "tui",
|
||||
"address": "asgard.starfire.voidbot/discord/eve/tui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"tui",
|
||||
"agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "gui",
|
||||
"address": "asgard.starfire.voidbot/discord/eve/gui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"gui",
|
||||
"eve-native",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"kind": "cultmesh-document",
|
||||
"address": "cultmesh://voidbot.local/eve/providers/voidbot.discord",
|
||||
"note": "Legacy CultMesh document key; route only, not service identity."
|
||||
}
|
||||
],
|
||||
"documents": [
|
||||
{
|
||||
"type": "gamecult.eve.provider_advertisement",
|
||||
|
|
@ -241,10 +277,42 @@
|
|||
"schemaVersion": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "voidbot.archive",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot/archive/eve/tui",
|
||||
"title": "VoidBot Archive",
|
||||
"description": "Archived Discord corpus status, import/backfill health, bot-directed-prompt exclusion, and history retrieval caveats.",
|
||||
"status": "planned-witness",
|
||||
"endpoint": "cultmesh://voidbot.local/eve/providers/voidbot.archive",
|
||||
"endpoint": "asgard.starfire.voidbot/archive/eve/tui",
|
||||
"endpoints": [
|
||||
{
|
||||
"kind": "tui",
|
||||
"address": "asgard.starfire.voidbot/archive/eve/tui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"tui",
|
||||
"agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "gui",
|
||||
"address": "asgard.starfire.voidbot/archive/eve/gui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"gui",
|
||||
"eve-native",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"kind": "cultmesh-document",
|
||||
"address": "cultmesh://voidbot.local/eve/providers/voidbot.archive",
|
||||
"note": "Legacy CultMesh document key; route only, not service identity."
|
||||
}
|
||||
],
|
||||
"documents": [
|
||||
{
|
||||
"type": "gamecult.eve.provider_advertisement",
|
||||
|
|
@ -328,10 +396,42 @@
|
|||
"schemaVersion": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "voidbot.source",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot/source/eve/tui",
|
||||
"title": "VoidBot Source",
|
||||
"description": "Indexed repo/lore coverage, repo shard status, vector collection health, and source reindex jobs.",
|
||||
"status": "planned-witness",
|
||||
"endpoint": "cultmesh://voidbot.local/eve/providers/voidbot.source",
|
||||
"endpoint": "asgard.starfire.voidbot/source/eve/tui",
|
||||
"endpoints": [
|
||||
{
|
||||
"kind": "tui",
|
||||
"address": "asgard.starfire.voidbot/source/eve/tui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"tui",
|
||||
"agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "gui",
|
||||
"address": "asgard.starfire.voidbot/source/eve/gui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"gui",
|
||||
"eve-native",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"kind": "cultmesh-document",
|
||||
"address": "cultmesh://voidbot.local/eve/providers/voidbot.source",
|
||||
"note": "Legacy CultMesh document key; route only, not service identity."
|
||||
}
|
||||
],
|
||||
"documents": [
|
||||
{
|
||||
"type": "gamecult.eve.provider_advertisement",
|
||||
|
|
@ -428,10 +528,42 @@
|
|||
"schemaVersion": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "voidbot.repo_face",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot/repo-face/eve/tui",
|
||||
"title": "VoidBot Repo Face Compatibility",
|
||||
"description": "Registered Face address book, repo-local state witnesses, channel grants, prompt assembly status, Bifrost digest availability, and Huginn inspection readiness.",
|
||||
"status": "planned-handoff",
|
||||
"endpoint": "cultmesh://voidbot.local/eve/providers/voidbot.repo_face",
|
||||
"endpoint": "asgard.starfire.voidbot/repo-face/eve/tui",
|
||||
"endpoints": [
|
||||
{
|
||||
"kind": "tui",
|
||||
"address": "asgard.starfire.voidbot/repo-face/eve/tui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"tui",
|
||||
"agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "gui",
|
||||
"address": "asgard.starfire.voidbot/repo-face/eve/gui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"gui",
|
||||
"eve-native",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"kind": "cultmesh-document",
|
||||
"address": "cultmesh://voidbot.local/eve/providers/voidbot.repo_face",
|
||||
"note": "Legacy CultMesh document key; route only, not service identity."
|
||||
}
|
||||
],
|
||||
"documents": [
|
||||
{
|
||||
"type": "gamecult.eve.provider_advertisement",
|
||||
|
|
@ -532,10 +664,42 @@
|
|||
"schemaVersion": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "voidbot.swarm",
|
||||
"verseId": "voidbot.local",
|
||||
"rootVerse": "asgard",
|
||||
"canonicalService": "asgard.voidbot",
|
||||
"locatedService": "asgard.starfire.voidbot",
|
||||
"cultMeshAddress": "asgard.starfire.voidbot/swarm/eve/tui",
|
||||
"title": "VoidBot Swarm",
|
||||
"description": "CTB initiative order, active turns, pause/heat/cadence controls, orchestrator organ health, and selected Face state witness.",
|
||||
"status": "live",
|
||||
"endpoint": "cultmesh://voidbot.local/eve/providers/voidbot.swarm",
|
||||
"endpoint": "asgard.starfire.voidbot/swarm/eve/tui",
|
||||
"endpoints": [
|
||||
{
|
||||
"kind": "tui",
|
||||
"address": "asgard.starfire.voidbot/swarm/eve/tui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"tui",
|
||||
"agent"
|
||||
]
|
||||
},
|
||||
{
|
||||
"kind": "gui",
|
||||
"address": "asgard.starfire.voidbot/swarm/eve/gui",
|
||||
"schemaId": "gamecult.eve.surface_state.v1",
|
||||
"lowerings": [
|
||||
"gui",
|
||||
"eve-native",
|
||||
"browser"
|
||||
]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"kind": "cultmesh-document",
|
||||
"address": "cultmesh://voidbot.local/eve/providers/voidbot.swarm",
|
||||
"note": "Legacy CultMesh document key; route only, not service identity."
|
||||
}
|
||||
],
|
||||
"documents": [
|
||||
{
|
||||
"type": "gamecult.eve.provider_advertisement",
|
||||
|
|
|
|||
|
|
@ -102,7 +102,12 @@ The current published swarm namespace is:
|
|||
|
||||
- Verse id: `voidbot.local`
|
||||
- Provider id: `voidbot.swarm`
|
||||
- Endpoint: `cultmesh://voidbot.local/eve/providers/voidbot.swarm`
|
||||
- Root Verse: `asgard`
|
||||
- Canonical service: `asgard.voidbot`
|
||||
- Located service: `asgard.starfire.voidbot`
|
||||
- Primary surface: `asgard.starfire.voidbot/swarm/eve/tui`
|
||||
- GUI surface: `asgard.starfire.voidbot/swarm/eve/gui`
|
||||
- Legacy route: `cultmesh://voidbot.local/eve/providers/voidbot.swarm`
|
||||
- Snapshot document: `voidbot.swarm_state_snapshot`
|
||||
- Provider advertisement: `gamecult.eve.provider_advertisement`
|
||||
- Eve surface state: `gamecult.eve.surface_state`
|
||||
|
|
|
|||
|
|
@ -221,7 +221,9 @@ Current CultMesh namespace:
|
|||
|
||||
- Verse id: `voidbot.local`
|
||||
- Provider id: `voidbot.swarm`
|
||||
- Endpoint: `cultmesh://voidbot.local/eve/providers/voidbot.swarm`
|
||||
- Primary surface: `asgard.starfire.voidbot/swarm/eve/tui`
|
||||
- GUI surface: `asgard.starfire.voidbot/swarm/eve/gui`
|
||||
- Legacy route: `cultmesh://voidbot.local/eve/providers/voidbot.swarm`
|
||||
- Snapshot document: `voidbot.swarm_state_snapshot`
|
||||
- Provider advertisement: `gamecult.eve.provider_advertisement`
|
||||
- Eve surface state: `gamecult.eve.surface_state`
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@ const surfaceStateSchemaId = "gamecult.eve.surface_state.v1";
|
|||
const fixtureDocumentType = "voidbot.provider_advertisement_catalog";
|
||||
const fixtureSchemaId = "voidbot.provider_advertisement_catalog.v0";
|
||||
const verseId = "voidbot.local";
|
||||
const rootVerse = "asgard";
|
||||
const currentMachine = "starfire";
|
||||
const canonicalService = `${rootVerse}.voidbot`;
|
||||
const locatedService = `${rootVerse}.${currentMachine}.voidbot`;
|
||||
|
||||
const args = parseArgs(process.argv.slice(2));
|
||||
const outPath = resolve(repoRoot, args.out ?? defaultOutPath);
|
||||
|
|
@ -176,6 +180,10 @@ function buildCatalog() {
|
|||
fixtureKind: "read-only-contract-export",
|
||||
note: "This tracked fixture advertises VoidBot Verse provider boundaries. It is not live service state, not a dashboard, and not a Persona inspection authority.",
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: locatedService,
|
||||
providerAdvertisement: {
|
||||
documentType: providerAdvertisementDocumentType,
|
||||
schemaId: providerAdvertisementSchemaId,
|
||||
|
|
@ -234,14 +242,27 @@ function buildCatalog() {
|
|||
}
|
||||
|
||||
function provider(input) {
|
||||
const resourceBase = providerResourceBase(input.id);
|
||||
const cultMeshAddress = `${locatedService}/${resourceBase}/eve/tui`;
|
||||
return {
|
||||
schemaVersion: providerAdvertisementSchemaId,
|
||||
providerId: input.id,
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress,
|
||||
title: input.title,
|
||||
description: input.description,
|
||||
status: input.status,
|
||||
endpoint: `cultmesh://${verseId}/eve/providers/${input.id}`,
|
||||
endpoint: cultMeshAddress,
|
||||
endpoints: [
|
||||
endpoint("tui", cultMeshAddress, surfaceStateSchemaId, ["tui", "agent"]),
|
||||
endpoint("gui", `${locatedService}/${resourceBase}/eve/gui`, surfaceStateSchemaId, ["gui", "eve-native", "browser"]),
|
||||
],
|
||||
routes: [
|
||||
route("cultmesh-document", key(input.id).endpoint, "Legacy CultMesh document key; route only, not service identity."),
|
||||
],
|
||||
documents: [
|
||||
document(providerAdvertisementDocumentType, providerAdvertisementSchemaId, input.id),
|
||||
document(surfaceStateDocumentType, surfaceStateSchemaId, input.id),
|
||||
|
|
@ -271,6 +292,18 @@ function document(type, schemaId, keyValue) {
|
|||
return { type, schemaId, key: keyValue };
|
||||
}
|
||||
|
||||
function endpoint(kind, address, schemaId, lowerings) {
|
||||
return { kind, address, schemaId, lowerings };
|
||||
}
|
||||
|
||||
function route(kind, address, note) {
|
||||
return { kind, address, note };
|
||||
}
|
||||
|
||||
function providerResourceBase(providerId) {
|
||||
return providerId.replace(/^voidbot\./u, "").replace(/_/gu, "-");
|
||||
}
|
||||
|
||||
function key(value) {
|
||||
return {
|
||||
verseId,
|
||||
|
|
|
|||
|
|
@ -14,6 +14,10 @@ const defaultCultMeshStorePath = resolve(defaultStatusDir, "cultmesh", "voidbot-
|
|||
const providerId = "voidbot.swarm";
|
||||
const operatorDmProviderId = "voidbot.operator-dm";
|
||||
const verseId = "voidbot.local";
|
||||
const rootVerse = "asgard";
|
||||
const currentMachine = "starfire";
|
||||
const canonicalService = `${rootVerse}.voidbot`;
|
||||
const locatedService = `${rootVerse}.${currentMachine}.voidbot`;
|
||||
const snapshotDocumentType = "voidbot.swarm_state_snapshot";
|
||||
const snapshotSchemaId = "voidbot.swarm_state_snapshot.v1";
|
||||
const providerAdvertisementDocumentType = "gamecult.eve.provider_advertisement";
|
||||
|
|
@ -160,7 +164,12 @@ async function buildSnapshot() {
|
|||
writeStatus: "pending",
|
||||
providerId,
|
||||
verseId,
|
||||
eveDeckEndpoint: primaryCultMeshEndpoint(),
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: primaryCultMeshAddress(),
|
||||
eveDeckEndpoint: primaryCultMeshAddress(),
|
||||
routes: providerRoutes(providerId, cultMeshStorePath),
|
||||
note: "VoidBot swarm is a CultMesh-advertised Eve provider. The web page is a local lowering of the same surface.",
|
||||
},
|
||||
summary: {
|
||||
|
|
@ -773,12 +782,17 @@ async function writeCultMeshPublication(snapshot, eveState, storePath) {
|
|||
documents: [snapshotDocumentType, providerAdvertisementDocumentType, surfaceDocumentType, eveBindingDocumentType, operatorDmRequestDocumentType],
|
||||
providerId,
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: primaryCultMeshAddress(),
|
||||
eveBinding: {
|
||||
documentType: eveBindingDocumentType,
|
||||
schemaId: eveBindingSchemaId,
|
||||
key: providerId,
|
||||
},
|
||||
eveDeckEndpoint: primaryCultMeshEndpoint(),
|
||||
eveDeckEndpoint: primaryCultMeshAddress(),
|
||||
routes: providerRoutes(providerId, storePath),
|
||||
writtenAt: new Date().toISOString(),
|
||||
};
|
||||
} catch (error) {
|
||||
|
|
@ -823,21 +837,27 @@ function parseObjectDocument(label) {
|
|||
|
||||
function buildProviderAdvertisement(snapshot) {
|
||||
const endpoints = [
|
||||
primaryCultMeshEndpoint(),
|
||||
endpoint("tui", primaryCultMeshAddress(), surfaceSchemaId, ["tui", "nightwing-tui", "agent"]),
|
||||
endpoint("gui", `${locatedService}/swarm/eve/gui`, surfaceSchemaId, ["gui", "eve-native", "browser"]),
|
||||
];
|
||||
return {
|
||||
schemaVersion: providerAdvertisementSchemaId,
|
||||
providerId,
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: primaryCultMeshAddress(),
|
||||
title: "VoidBot Swarm",
|
||||
description: "VoidBot swarm status, CTB order, controls, and selected Face state as an Eve/CultUI surface.",
|
||||
version: String(snapshot.summary?.initiativeClock ?? Date.now()),
|
||||
status: snapshot.summary?.state ?? "unknown",
|
||||
updatedAt: snapshot.generatedAt,
|
||||
endpoints,
|
||||
routes: providerRoutes(providerId, snapshot.cultMesh?.storePath ?? cultMeshStorePath),
|
||||
provider: providerManifest(),
|
||||
controlSurface: {
|
||||
primary: primaryCultMeshEndpoint(),
|
||||
primary: primaryCultMeshAddress(),
|
||||
controls: {
|
||||
transport: "cultmesh-binding",
|
||||
documentType: eveBindingDocumentType,
|
||||
|
|
@ -866,6 +886,10 @@ function buildEveInterfaceBinding(snapshot, eveState) {
|
|||
bindingId: providerId,
|
||||
providerId,
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: primaryCultMeshAddress(),
|
||||
title: "VoidBot Swarm",
|
||||
kind: "eve-cultui-surface",
|
||||
updatedAt: snapshot.generatedAt,
|
||||
|
|
@ -946,7 +970,13 @@ function providerManifest() {
|
|||
title: "VoidBot Swarm",
|
||||
description: "Native Eve tab for compact VoidBot CTB order with speed, heat, and turn state.",
|
||||
version: "1",
|
||||
endpoint: primaryCultMeshEndpoint(),
|
||||
endpoint: primaryCultMeshAddress(),
|
||||
cultMeshAddress: primaryCultMeshAddress(),
|
||||
endpoints: [
|
||||
endpoint("tui", primaryCultMeshAddress(), surfaceSchemaId, ["tui", "nightwing-tui", "agent"]),
|
||||
endpoint("gui", `${locatedService}/swarm/eve/gui`, surfaceSchemaId, ["gui", "eve-native", "browser"]),
|
||||
],
|
||||
routes: providerRoutes(providerId, cultMeshStorePath),
|
||||
capabilities: ["ctb", "agent-status", "cultmesh-snapshot"],
|
||||
usesCultMesh: true,
|
||||
transport: "CultMesh Eve interface binding.",
|
||||
|
|
@ -958,15 +988,22 @@ function buildOperatorDmProviderAdvertisement(snapshot) {
|
|||
schemaVersion: providerAdvertisementSchemaId,
|
||||
providerId: operatorDmProviderId,
|
||||
verseId,
|
||||
rootVerse,
|
||||
canonicalService,
|
||||
locatedService,
|
||||
cultMeshAddress: operatorDmCultMeshAddress(),
|
||||
title: "VoidBot Operator DM",
|
||||
description: "VoidBot-owned operator notification boundary for service alerts that need an owner DM.",
|
||||
version: String(snapshot.summary?.initiativeClock ?? Date.now()),
|
||||
status: ownerDmStatus(snapshot),
|
||||
updatedAt: snapshot.generatedAt,
|
||||
endpoints: [operatorDmCultMeshEndpoint()],
|
||||
endpoints: [
|
||||
endpoint("command", operatorDmCultMeshAddress(), operatorDmRequestSchemaId, ["command", "operator-alert"]),
|
||||
],
|
||||
routes: providerRoutes(operatorDmProviderId, snapshot.cultMesh?.storePath ?? cultMeshStorePath),
|
||||
provider: operatorDmProviderManifest(snapshot),
|
||||
commandSurface: {
|
||||
primary: operatorDmCultMeshEndpoint(),
|
||||
primary: operatorDmCultMeshAddress(),
|
||||
transport: "cultmesh-interface-binding",
|
||||
commands: [ownerDmCommandDescriptor()],
|
||||
executionOwner: "VoidBot Discord owner-DM helper",
|
||||
|
|
@ -1035,7 +1072,12 @@ function operatorDmProviderManifest(snapshot) {
|
|||
title: "VoidBot Operator DM",
|
||||
description: "Provider-owned owner-DM command boundary for service intervention alerts.",
|
||||
version: "1",
|
||||
endpoint: operatorDmCultMeshEndpoint(),
|
||||
endpoint: operatorDmCultMeshAddress(),
|
||||
cultMeshAddress: operatorDmCultMeshAddress(),
|
||||
endpoints: [
|
||||
endpoint("command", operatorDmCultMeshAddress(), operatorDmRequestSchemaId, ["command", "operator-alert"]),
|
||||
],
|
||||
routes: providerRoutes(operatorDmProviderId, cultMeshStorePath),
|
||||
capabilities: ["operator-alerts", "owner-dm", "cultmesh-command"],
|
||||
usesCultMesh: true,
|
||||
status: ownerDmStatus(snapshot),
|
||||
|
|
@ -1048,8 +1090,8 @@ function ownerDmStatus() {
|
|||
return env.DISCORD_BOT_TOKEN && env.DISCORD_OWNER_ID ? "active" : "degraded";
|
||||
}
|
||||
|
||||
function operatorDmCultMeshEndpoint() {
|
||||
return `cultmesh://${verseId}/eve/providers/${operatorDmProviderId}`;
|
||||
function operatorDmCultMeshAddress() {
|
||||
return `${locatedService}/operator-dm/commands/owner-dm`;
|
||||
}
|
||||
|
||||
function buildEveProviderState(snapshot) {
|
||||
|
|
@ -2231,8 +2273,27 @@ function redactSnapshot(snapshot) {
|
|||
return redacted;
|
||||
}
|
||||
|
||||
function primaryCultMeshEndpoint() {
|
||||
return `cultmesh://${verseId}/eve/providers/${providerId}`;
|
||||
function primaryCultMeshAddress() {
|
||||
return `${locatedService}/swarm/eve/tui`;
|
||||
}
|
||||
|
||||
function endpoint(kind, address, schemaId, lowerings) {
|
||||
return { kind, address, schemaId, lowerings };
|
||||
}
|
||||
|
||||
function providerRoutes(routeProviderId, storePath) {
|
||||
return [
|
||||
{
|
||||
kind: "cultcache-store",
|
||||
address: storePath,
|
||||
note: "Local CultCache publication store.",
|
||||
},
|
||||
{
|
||||
kind: "cultmesh-legacy-uri",
|
||||
address: `cultmesh://${verseId}/eve/providers/${routeProviderId}`,
|
||||
note: "Legacy document key route; not service identity.",
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
async function readJsonFile(path) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue