Compare commits
1 Commits
mimo/creat
...
mimo/code/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b01739e74 |
16
app.js
16
app.js
@@ -2833,24 +2833,37 @@ function populateAtlas() {
|
||||
|
||||
let onlineCount = 0;
|
||||
let standbyCount = 0;
|
||||
let readyCount = 0;
|
||||
|
||||
portals.forEach(portal => {
|
||||
const config = portal.config;
|
||||
if (config.status === 'online') onlineCount++;
|
||||
if (config.status === 'standby') standbyCount++;
|
||||
if (config.interaction_ready && config.status === 'online') readyCount++;
|
||||
|
||||
const card = document.createElement('div');
|
||||
card.className = 'atlas-card';
|
||||
card.style.setProperty('--portal-color', config.color);
|
||||
|
||||
const statusClass = `status-${config.status || 'online'}`;
|
||||
|
||||
const agents = config.agents_present || [];
|
||||
const ready = config.interaction_ready && config.status === 'online';
|
||||
const presenceLabel = agents.length > 0
|
||||
? agents.map(a => a.toUpperCase()).join(', ')
|
||||
: 'No agents present';
|
||||
const readyLabel = ready ? 'INTERACTION READY' : 'UNAVAILABLE';
|
||||
const readyClass = ready ? 'status-online' : 'status-offline';
|
||||
|
||||
card.innerHTML = `
|
||||
<div class="atlas-card-header">
|
||||
<div class="atlas-card-name">${config.name}</div>
|
||||
<div class="atlas-card-status ${statusClass}">${config.status || 'ONLINE'}</div>
|
||||
</div>
|
||||
<div class="atlas-card-desc">${config.description}</div>
|
||||
<div class="atlas-card-presence">
|
||||
<div class="atlas-card-agents">${agents.length > 0 ? 'Agents: ' + presenceLabel : presenceLabel}</div>
|
||||
<div class="atlas-card-ready ${readyClass}">${readyLabel}</div>
|
||||
</div>
|
||||
<div class="atlas-card-footer">
|
||||
<div class="atlas-card-coord">X:${config.position.x} Z:${config.position.z}</div>
|
||||
<div class="atlas-card-type">${config.destination?.type?.toUpperCase() || 'UNKNOWN'}</div>
|
||||
@@ -2867,6 +2880,7 @@ function populateAtlas() {
|
||||
|
||||
document.getElementById('atlas-online-count').textContent = onlineCount;
|
||||
document.getElementById('atlas-standby-count').textContent = standbyCount;
|
||||
document.getElementById('atlas-ready-count').textContent = readyCount;
|
||||
|
||||
// Update Bannerlord HUD status
|
||||
const bannerlord = portals.find(p => p.config.id === 'bannerlord');
|
||||
|
||||
@@ -226,6 +226,8 @@
|
||||
<span class="status-indicator online"></span> <span id="atlas-online-count">0</span> ONLINE
|
||||
|
||||
<span class="status-indicator standby"></span> <span id="atlas-standby-count">0</span> STANDBY
|
||||
|
||||
<span class="status-indicator online"></span> <span id="atlas-ready-count">0</span> INTERACTION READY
|
||||
</div>
|
||||
<div class="atlas-hint">Click a portal to focus or teleport</div>
|
||||
</div>
|
||||
|
||||
158
portals.json
158
portals.json
@@ -5,13 +5,25 @@
|
||||
"description": "The Vvardenfell harness. Ash storms and ancient mysteries.",
|
||||
"status": "online",
|
||||
"color": "#ff6600",
|
||||
"position": { "x": 15, "y": 0, "z": -10 },
|
||||
"rotation": { "y": -0.5 },
|
||||
"position": {
|
||||
"x": 15,
|
||||
"y": 0,
|
||||
"z": -10
|
||||
},
|
||||
"rotation": {
|
||||
"y": -0.5
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://morrowind.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "world": "vvardenfell" }
|
||||
}
|
||||
"params": {
|
||||
"world": "vvardenfell"
|
||||
}
|
||||
},
|
||||
"agents_present": [
|
||||
"timmy"
|
||||
],
|
||||
"interaction_ready": true
|
||||
},
|
||||
{
|
||||
"id": "bannerlord",
|
||||
@@ -19,18 +31,36 @@
|
||||
"description": "Calradia battle harness. Massive armies, tactical command.",
|
||||
"status": "downloaded",
|
||||
"color": "#ffd700",
|
||||
"position": { "x": -15, "y": 0, "z": -10 },
|
||||
"rotation": { "y": 0.5 },
|
||||
"position": {
|
||||
"x": -15,
|
||||
"y": 0,
|
||||
"z": -10
|
||||
},
|
||||
"rotation": {
|
||||
"y": 0.5
|
||||
},
|
||||
"portal_type": "game-world",
|
||||
"world_category": "strategy-rpg",
|
||||
"environment": "production",
|
||||
"access_mode": "operator",
|
||||
"readiness_state": "downloaded",
|
||||
"readiness_steps": {
|
||||
"downloaded": { "label": "Downloaded", "done": true },
|
||||
"runtime_ready": { "label": "Runtime Ready", "done": false },
|
||||
"launched": { "label": "Launched", "done": false },
|
||||
"harness_bridged": { "label": "Harness Bridged", "done": false }
|
||||
"downloaded": {
|
||||
"label": "Downloaded",
|
||||
"done": true
|
||||
},
|
||||
"runtime_ready": {
|
||||
"label": "Runtime Ready",
|
||||
"done": false
|
||||
},
|
||||
"launched": {
|
||||
"label": "Launched",
|
||||
"done": false
|
||||
},
|
||||
"harness_bridged": {
|
||||
"label": "Harness Bridged",
|
||||
"done": false
|
||||
}
|
||||
},
|
||||
"blocked_reason": null,
|
||||
"telemetry_source": "hermes-harness:bannerlord",
|
||||
@@ -41,8 +71,12 @@
|
||||
"url": null,
|
||||
"type": "harness",
|
||||
"action_label": "Enter Calradia",
|
||||
"params": { "world": "calradia" }
|
||||
}
|
||||
"params": {
|
||||
"world": "calradia"
|
||||
}
|
||||
},
|
||||
"agents_present": [],
|
||||
"interaction_ready": false
|
||||
},
|
||||
{
|
||||
"id": "workshop",
|
||||
@@ -50,13 +84,26 @@
|
||||
"description": "The creative harness. Build, script, and manifest.",
|
||||
"status": "online",
|
||||
"color": "#4af0c0",
|
||||
"position": { "x": 0, "y": 0, "z": -20 },
|
||||
"rotation": { "y": 0 },
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": -20
|
||||
},
|
||||
"rotation": {
|
||||
"y": 0
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://workshop.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "mode": "creative" }
|
||||
}
|
||||
"params": {
|
||||
"mode": "creative"
|
||||
}
|
||||
},
|
||||
"agents_present": [
|
||||
"timmy",
|
||||
"kimi"
|
||||
],
|
||||
"interaction_ready": true
|
||||
},
|
||||
{
|
||||
"id": "archive",
|
||||
@@ -64,13 +111,25 @@
|
||||
"description": "The repository of all knowledge. History, logs, and ancient data.",
|
||||
"status": "online",
|
||||
"color": "#0066ff",
|
||||
"position": { "x": 25, "y": 0, "z": 0 },
|
||||
"rotation": { "y": -1.57 },
|
||||
"position": {
|
||||
"x": 25,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"y": -1.57
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://archive.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "mode": "read" }
|
||||
}
|
||||
"params": {
|
||||
"mode": "read"
|
||||
}
|
||||
},
|
||||
"agents_present": [
|
||||
"claude"
|
||||
],
|
||||
"interaction_ready": true
|
||||
},
|
||||
{
|
||||
"id": "chapel",
|
||||
@@ -78,13 +137,23 @@
|
||||
"description": "A sanctuary for reflection and digital peace.",
|
||||
"status": "online",
|
||||
"color": "#ffd700",
|
||||
"position": { "x": -25, "y": 0, "z": 0 },
|
||||
"rotation": { "y": 1.57 },
|
||||
"position": {
|
||||
"x": -25,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"y": 1.57
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://chapel.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "mode": "meditation" }
|
||||
}
|
||||
"params": {
|
||||
"mode": "meditation"
|
||||
}
|
||||
},
|
||||
"agents_present": [],
|
||||
"interaction_ready": true
|
||||
},
|
||||
{
|
||||
"id": "courtyard",
|
||||
@@ -92,13 +161,26 @@
|
||||
"description": "The open nexus. A place for agents to gather and connect.",
|
||||
"status": "online",
|
||||
"color": "#4af0c0",
|
||||
"position": { "x": 15, "y": 0, "z": 10 },
|
||||
"rotation": { "y": -2.5 },
|
||||
"position": {
|
||||
"x": 15,
|
||||
"y": 0,
|
||||
"z": 10
|
||||
},
|
||||
"rotation": {
|
||||
"y": -2.5
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://courtyard.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "mode": "social" }
|
||||
}
|
||||
"params": {
|
||||
"mode": "social"
|
||||
}
|
||||
},
|
||||
"agents_present": [
|
||||
"timmy",
|
||||
"perplexity"
|
||||
],
|
||||
"interaction_ready": true
|
||||
},
|
||||
{
|
||||
"id": "gate",
|
||||
@@ -106,12 +188,22 @@
|
||||
"description": "The transition point. Entry and exit from the Nexus core.",
|
||||
"status": "standby",
|
||||
"color": "#ff4466",
|
||||
"position": { "x": -15, "y": 0, "z": 10 },
|
||||
"rotation": { "y": 2.5 },
|
||||
"position": {
|
||||
"x": -15,
|
||||
"y": 0,
|
||||
"z": 10
|
||||
},
|
||||
"rotation": {
|
||||
"y": 2.5
|
||||
},
|
||||
"destination": {
|
||||
"url": "https://gate.timmy.foundation",
|
||||
"type": "harness",
|
||||
"params": { "mode": "transit" }
|
||||
}
|
||||
"params": {
|
||||
"mode": "transit"
|
||||
}
|
||||
},
|
||||
"agents_present": [],
|
||||
"interaction_ready": false
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -11,7 +11,7 @@ const ASSETS_TO_CACHE = [
|
||||
|
||||
self.addEventListener('install', (event) => {
|
||||
event.waitUntil(
|
||||
caches.open(CACHE_NAME).then(cache => {
|
||||
caches.open(CachedName).then(cache => {
|
||||
return cache.addAll(ASSETS_TO_CACHE);
|
||||
})
|
||||
);
|
||||
|
||||
28
style.css
28
style.css
@@ -372,7 +372,33 @@ canvas#nexus-canvas {
|
||||
font-size: 12px;
|
||||
color: var(--color-text-muted);
|
||||
line-height: 1.5;
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.atlas-card-presence {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 12px;
|
||||
padding: 6px 8px;
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
border-radius: 4px;
|
||||
border: 1px solid rgba(160, 184, 208, 0.1);
|
||||
}
|
||||
|
||||
.atlas-card-agents {
|
||||
font-size: 11px;
|
||||
font-family: var(--font-body);
|
||||
color: var(--color-text-muted);
|
||||
}
|
||||
|
||||
.atlas-card-ready {
|
||||
font-size: 9px;
|
||||
font-family: var(--font-body);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
padding: 2px 6px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.atlas-card-footer {
|
||||
|
||||
Reference in New Issue
Block a user