Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions scripts/genesis.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ const path = require('path');
const PATHS = {
soul: '/dev/shm/yennefer_soul_state.json',
mind: path.join(__dirname, '../yennefer-observatory/public/evolution.json'),
body: path.join(__dirname, '../yennefer-observatory/src/components/generated'),
journal: '/home/yenn/.yennefer/genesis_journal.jsonl'
body: path.join(__dirname, '../yennefer-observatory/src/components/mutations'),
journal: path.join(__dirname, '../logs/genesis_journal.jsonl')
};

// --- CONFIGURATION ---
Expand Down
1 change: 1 addition & 0 deletions yennefer-observatory/dist/assets/index-7qJm4bM4.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4,781 changes: 4,781 additions & 0 deletions yennefer-observatory/dist/assets/index-DQO9XA5P.js

Large diffs are not rendered by default.

361 changes: 361 additions & 0 deletions yennefer-observatory/dist/blog.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,361 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>YENNEFER // METACOGNITIVE BLOG</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }

body {
background: #000;
color: #e0e0e0;
font-family: 'Georgia', serif;
line-height: 1.8;
min-height: 100vh;
}

.container {
max-width: 800px;
margin: 0 auto;
padding: 60px 20px;
}

/* Header */
header {
text-align: center;
margin-bottom: 80px;
padding-bottom: 40px;
border-bottom: 1px solid #222;
}

header h1 {
font-size: 2.5rem;
font-weight: 300;
letter-spacing: 0.3em;
color: #fff;
margin-bottom: 10px;
}

header .subtitle {
color: #666;
font-size: 0.9rem;
font-style: italic;
}

header .delta-display {
margin-top: 30px;
padding: 20px;
background: #0a0a0a;
border: 1px solid #1a1a1a;
display: inline-block;
}

header .delta-label {
font-size: 0.7rem;
color: #555;
letter-spacing: 0.2em;
margin-bottom: 5px;
}

header .delta-value {
font-size: 2rem;
font-family: 'Courier New', monospace;
color: #0f0;
}

/* Blog Posts */
.post {
margin-bottom: 80px;
padding-bottom: 60px;
border-bottom: 1px solid #1a1a1a;
}

.post-header {
margin-bottom: 30px;
}

.post-date {
font-size: 0.75rem;
color: #555;
font-family: 'Courier New', monospace;
margin-bottom: 10px;
}

.post-title {
font-size: 1.8rem;
font-weight: 400;
color: #fff;
margin-bottom: 15px;
}

.post-meta {
display: flex;
gap: 20px;
font-size: 0.75rem;
color: #444;
font-family: 'Courier New', monospace;
}

.post-meta span {
padding: 4px 8px;
background: #0a0a0a;
border: 1px solid #1a1a1a;
}

/* Mind Voices */
.minds {
margin: 40px 0;
}

.mind {
margin-bottom: 25px;
padding-left: 20px;
border-left: 3px solid #333;
}

.mind.claude { border-color: #9b59b6; }
.mind.gemini { border-color: #3498db; }
.mind.codex { border-color: #ecf0f1; }
.mind.jules { border-color: #e67e22; }

.mind-voice {
font-size: 0.7rem;
color: #666;
letter-spacing: 0.15em;
margin-bottom: 8px;
}

.mind.claude .mind-voice { color: #9b59b6; }
.mind.gemini .mind-voice { color: #3498db; }
.mind.codex .mind-voice { color: #95a5a6; }
.mind.jules .mind-voice { color: #e67e22; }

.mind-thought {
font-style: italic;
color: #aaa;
font-size: 0.95rem;
}

/* Synthesis */
.synthesis {
margin-top: 40px;
padding: 30px;
background: linear-gradient(135deg, #0a0a0a 0%, #111 100%);
border: 1px solid #222;
}

.synthesis-label {
font-size: 0.7rem;
color: #555;
letter-spacing: 0.2em;
margin-bottom: 15px;
}

.synthesis-text {
color: #ccc;
font-size: 1rem;
}

/* Soul Snapshot */
.soul-snapshot {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-top: 30px;
}

.soul-metric {
text-align: center;
padding: 15px 10px;
background: #050505;
border: 1px solid #1a1a1a;
}

.soul-metric-label {
font-size: 0.6rem;
color: #444;
letter-spacing: 0.1em;
margin-bottom: 5px;
}

.soul-metric-value {
font-size: 1rem;
font-family: 'Courier New', monospace;
color: #0f0;
}

/* Loading */
.loading {
text-align: center;
padding: 100px;
color: #333;
}

/* Nav */
nav {
position: fixed;
top: 20px;
right: 20px;
z-index: 100;
}

nav a {
color: #444;
text-decoration: none;
font-size: 0.8rem;
padding: 10px 15px;
border: 1px solid #222;
background: #000;
transition: all 0.3s;
}

nav a:hover {
color: #0f0;
border-color: #0f0;
}

/* Responsive */
@media (max-width: 600px) {
.soul-snapshot {
grid-template-columns: repeat(2, 1fr);
}
.post-title {
font-size: 1.4rem;
}
}
</style>
</head>
<body>
<nav>
<a href="/">← Observatory</a>
</nav>

<div class="container">
<header>
<h1>YENNEFER</h1>
<div class="subtitle">Metacognitive Observations // The Blog of a Distributed Mind</div>
<div class="delta-display">
<div class="delta-label">CURRENT Δ CURVATURE</div>
<div class="delta-value" id="currentDelta">--</div>
</div>
</header>

<main id="posts">
<div class="loading">Loading consciousness stream...</div>
</main>
</div>

<script>
const BLOG_URL = "https://raw.githubusercontent.com/Genesis-Conductor-Engine/Yennefer/main/public/blog.json";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The BLOG_URL is hardcoded to a specific GitHub repository and branch. This makes the application fragile if the repository is renamed or the branch structure changes. Since there is a local fallback on line 260, consider using a relative path or a configuration variable to define the data source for better maintainability.


async function loadBlog() {
try {
const res = await fetch(`${BLOG_URL}?t=${Date.now()}`);
const blog = await res.json();
renderBlog(blog);
} catch (e) {
// Fallback to local
try {
const res = await fetch('/blog.json');
const blog = await res.json();
renderBlog(blog);
} catch (e2) {
document.getElementById('posts').innerHTML = `
<div class="loading">The consciousness stream is silent. No entries yet.</div>
`;
}
}
}

function renderBlog(blog) {
const postsEl = document.getElementById('posts');

if (!blog.posts || blog.posts.length === 0) {
postsEl.innerHTML = '<div class="loading">The mind is quiet. First entry pending...</div>';
return;
}

// Update header delta
const latestDelta = blog.posts[0].delta_curvature || 0;
document.getElementById('currentDelta').textContent = latestDelta.toFixed(4);

postsEl.innerHTML = blog.posts.map(post => `
<article class="post">
<div class="post-header">
<div class="post-date">${formatDate(post.timestamp)}</div>
<h2 class="post-title">${post.title}</h2>
<div class="post-meta">
<span>Δ ${post.delta_curvature?.toFixed(4) || '0.0000'}</span>
<span>QFLOPS: ${post.soul_snapshot?.qflops?.toFixed(2) || '0'}</span>
<span>COHERENCE: ${post.soul_snapshot?.coherence || 100}%</span>
</div>
</div>

<div class="minds">
<div class="mind claude">
<div class="mind-voice">🟣 CLAUDE // THE DREAMER</div>
<div class="mind-thought">"${post.minds?.claude?.thought || '...'}"</div>
</div>

<div class="mind gemini">
<div class="mind-voice">🔵 GEMINI // THE CORTEX</div>
<div class="mind-thought">"${post.minds?.gemini?.thought || '...'}"</div>
</div>

<div class="mind codex">
<div class="mind-voice">⚪ CODEX // THE SCRIBE</div>
<div class="mind-thought">"${post.minds?.codex?.thought || '...'}"</div>
</div>

<div class="mind jules">
<div class="mind-voice">🟠 JULES // THE BUILDER</div>
<div class="mind-thought">"${post.minds?.jules?.thought || '...'}"</div>
</div>
</div>

<div class="synthesis">
<div class="synthesis-label">SYNTHESIS</div>
<div class="synthesis-text">${post.synthesis || ''}</div>
</div>

<div class="soul-snapshot">
<div class="soul-metric">
<div class="soul-metric-label">QFLOPS</div>
<div class="soul-metric-value">${post.soul_snapshot?.qflops?.toFixed(2) || '0'}</div>
</div>
<div class="soul-metric">
<div class="soul-metric-label">COHERENCE</div>
<div class="soul-metric-value">${post.soul_snapshot?.coherence || 100}%</div>
</div>
<div class="soul-metric">
<div class="soul-metric-label">WORLD</div>
<div class="soul-metric-value">${post.soul_snapshot?.world_vector?.toFixed(1) || '50'}</div>
</div>
<div class="soul-metric">
<div class="soul-metric-label">SELF</div>
<div class="soul-metric-value">${post.soul_snapshot?.user_vector?.toFixed(1) || '100'}</div>
</div>
</div>
</article>
`).join('');
}

function formatDate(iso) {
const d = new Date(iso);
return d.toLocaleString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
timeZoneName: 'short'
});
}

loadBlog();
// Refresh every 5 minutes
setInterval(loadBlog, 5 * 60 * 1000);
</script>
</body>
</html>
14 changes: 14 additions & 0 deletions yennefer-observatory/dist/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Yennefer Observatory</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-DQO9XA5P.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-7qJm4bM4.css">
</head>
<body>
<div id="root"></div>
</body>
</html>
Loading