Implement GlyphOS Event System
Add lightweight, in-process event bus with Cognitive Kernel integration: New Components: - glyphos/events.py: EventBus class + functional API * EventBus: publish/subscribe pattern with history * Event type definitions (EventType literal) * Singleton: get_event_bus(), emit(), on() * History filtering and limits * Graceful handler error handling - tests/test_events.py: Comprehensive test suite (16 tests, 100% pass) * EventBus subscription/publishing/history * Global singleton behavior * Functional API (on, emit, get_event_bus) * Kernel integration tests * Cognition event emission tests Modified: - glyphos/cognitive_kernel.py: Event emissions at key points * kernel.warmup.completed: After warmup() completes * cognition.started: At start of execute_gx() * cognition.completed: After execute_gx() completes * glyph.resonance.updated: When glyph resonance present - glyphos/__init__.py: Export events module Test Results: - Registry tests: 12/12 ✅ - Bridge tests: 10/10 ✅ - Kernel tests: 8/8 ✅ - Event system tests: 16/16 ✅ (NEW) - Integration tests: 6/6 ✅ - Total: 52/52 ✅ No breaking changes - all 36 existing tests still pass.
This commit is contained in:
@@ -10,6 +10,7 @@ from pathlib import Path
|
||||
|
||||
from gx_lain.runtime import execute_gx_path, load_gx, normalize_segments, map_lanes, build_envelope, execute_with_lain
|
||||
from glyphs.super_registry import load_all_supercharged, super_stats
|
||||
from glyphos.events import emit
|
||||
|
||||
|
||||
class CognitiveKernel:
|
||||
@@ -44,6 +45,9 @@ class CognitiveKernel:
|
||||
|
||||
Records:
|
||||
- Kernel startup time
|
||||
|
||||
Emits:
|
||||
- kernel.warmup.completed event
|
||||
"""
|
||||
if self._warmed_up:
|
||||
return
|
||||
@@ -58,6 +62,12 @@ class CognitiveKernel:
|
||||
|
||||
self._warmed_up = True
|
||||
|
||||
# Emit warmup completed event
|
||||
emit("kernel.warmup.completed", {
|
||||
"glyph_stats": self._glyph_stats_cache,
|
||||
"startup_time": self._startup_time,
|
||||
})
|
||||
|
||||
def execute_gx(
|
||||
self,
|
||||
gx_path: str,
|
||||
@@ -78,10 +88,22 @@ class CognitiveKernel:
|
||||
- output_text: Rendered analysis
|
||||
- cognition_trace: Step-by-step processing
|
||||
- diagnostics: Performance metrics + glyph resonance
|
||||
|
||||
Emits:
|
||||
- cognition.started event
|
||||
- cognition.completed event
|
||||
- glyph.resonance.updated event (if glyph resonance present)
|
||||
"""
|
||||
if not self._warmed_up:
|
||||
self.warmup()
|
||||
|
||||
# Emit cognition started event
|
||||
emit("cognition.started", {
|
||||
"gx_path": gx_path,
|
||||
"mode": mode,
|
||||
"context": context,
|
||||
})
|
||||
|
||||
# Build context with mode
|
||||
exec_context = context or {}
|
||||
exec_context["cognitive_mode"] = mode
|
||||
@@ -93,6 +115,28 @@ class CognitiveKernel:
|
||||
self._last_result = result
|
||||
self._last_mode = mode
|
||||
|
||||
# Extract event payload from result
|
||||
fused_symbol = result.get("fused_symbol", {})
|
||||
diagnostics = result.get("diagnostics", {})
|
||||
|
||||
# Emit cognition completed event
|
||||
emit("cognition.completed", {
|
||||
"gx_path": gx_path,
|
||||
"mode": mode,
|
||||
"elapsed": diagnostics.get("elapsed"),
|
||||
"glyph_resonance": diagnostics.get("glyph_resonance"),
|
||||
"summary": fused_symbol.get("summary"),
|
||||
})
|
||||
|
||||
# Emit glyph resonance event if present
|
||||
glyph_resonance = diagnostics.get("glyph_resonance")
|
||||
if glyph_resonance and glyph_resonance.get("glyph_found"):
|
||||
emit("glyph.resonance.updated", {
|
||||
"glyph_id": glyph_resonance.get("glyph_id"),
|
||||
"glyph_score": glyph_resonance.get("glyph_score"),
|
||||
"glyph_resonance": glyph_resonance,
|
||||
})
|
||||
|
||||
return result
|
||||
|
||||
def execute_symbolic(
|
||||
|
||||
Reference in New Issue
Block a user