Research-Stack/4-Infrastructure/infra/ene_contextstream_mcp.py
Devin AI 0c9efac330 chore(consolidation): integrate E8Sidon stack (PRs #79 #80 #81 #89) into one PR
Squash the four overlapping feature branches into a single change set against
main, eliminating cross-PR merge conflicts and the duplicated CI-fix scripts.

What this brings in (merge order #79 -> #80 -> #81 -> #89):
- #79 refactor(infra): shared utilities (4-Infrastructure/lib/*: q16, hashing,
  jsonl, fraction_utils) + the scripts/math-first/* validators that the
  math-check CI requires.
- #80 feat(lean): Semantics.E8Sidon (1025 lines) -- Eisenstein coefficient
  identity E4^2 = E8 and the Sidon framework. E4_sq_eq_E8_coeff is fully proved
  (all Fourier-coefficient extraction machine-checked); the single residual gap
  is pinned to E4_sq_eq_E8_qExpansion (Mathlib lacks the valence formula /
  dim M8 = 1). 4 sorries + 1 axiom (e8_additive_completeness), all TODO(lean-port).
- #81 refactor(lean): Float-free FixedPoint core (integer-only sqrt/log2/expNeg).
  E8Sidon.lean kept at #80's final 1025-line version (the #81 intermediate
  438-line copy was overridden by merge order).
- #89 feat(lean): Semantics.RRC.PolyFactorIdentity -- short-sleeve polynomial
  detection at the zerocopy limb boundary; now imports Semantics.E8Sidon for
  sigma3/sigma7/convolutionLHS (single source of truth) instead of inlining them.

Conflict resolution:
- flake.nix -> canonical rs-surface removal (Garnix shutdown).
- scripts/math-first/* -> byte-identical across branches, clean.
- .cursorrules / AGENTS.md -> unified; baselines + sorry inventory refreshed.

Verification:
- lake build (default aggregator): 3573 jobs, 0 errors.
- lake build Semantics.RRC.PolyFactorIdentity (E8Sidon + FixedPoint + PolyFactor):
  3655 jobs, 0 errors. Witnesses verified (sigma7 4 = 16513, convolutionLHS 6 = 2350).
- Python tests: 68/68 pass.

Note: the "Workers Builds: researchstack" check is a preexisting external
Cloudflare build unrelated to this change (no branch touches 4-Infrastructure/cloudflare/).

Build: 3573 jobs (default), 3655 jobs (narrow), 0 errors
Co-Authored-By: Allaun Silverfox <bigdataiscoming+9i37y6j2@protonmail.com>
2026-06-16 02:01:31 +00:00

84 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""ENE Context MCP surface.
Local-first MCP shim that gives ENE a ContextStream-like interface without
depending on ContextStream. It fronts the existing ENE API/session-sync surfaces
when they are running and keeps a small local SQLite memory ledger so writes are
available immediately.
"""
from __future__ import annotations
import json
import os
import sqlite3
import subprocess
import sys
import time
import urllib.error
import urllib.parse
import urllib.request
from pathlib import Path
from typing import Any
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "4-Infrastructure"))
from lib.hashing import sha256_text
SERVER_NAME = "ene-contextstream"
SERVER_VERSION = "0.1.0"
DEFAULT_API_URL = "http://127.0.0.1:3000"
DEFAULT_STORE = Path.home() / ".local/share/ene/contextstream.sqlite"
DEFAULT_CANDIDATE_ROOT = (
Path.cwd() / "shared-data/data/germane/research/github-ene-contextstream"
)
def now_ms() -> int:
return int(time.time() * 1000)
def json_text(data: Any) -> list[dict[str, str]]:
return [{"type": "text", "text": json.dumps(data, indent=2, sort_keys=True)}]
def store_path() -> Path:
return Path(os.environ.get("ENE_CONTEXT_STORE", str(DEFAULT_STORE))).expanduser()
def api_url() -> str:
return os.environ.get("ENE_API_URL", DEFAULT_API_URL).rstrip("/")
def connect_store() -> sqlite3.Connection:
path = store_path()
path.parent.mkdir(parents=True, exist_ok=True)
conn = sqlite3.connect(path)
conn.row_factory = sqlite3.Row
conn.execute(
"""
CREATE TABLE IF NOT EXISTS memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
agent TEXT NOT NULL,
key TEXT NOT NULL,
value_json TEXT NOT NULL,
value_text TEXT NOT NULL,
tags_json TEXT NOT NULL DEFAULT '[]',
kind TEXT NOT NULL DEFAULT 'note',
source TEXT NOT NULL DEFAULT 'mcp',
prev_hash TEXT,
receipt_hash TEXT NOT NULL,
created_at_ms INTEGER NOT NULL,
updated_at_ms INTEGER NOT NULL,
UNIQUE(agent, key)
)
"""
)
conn.execute("CREATE INDEX IF NOT EXISTS idx_memories_agent ON memories(agent)")
conn.execute("CREATE INDEX IF NOT EXISTS idx_memories_key ON memories(key)")
conn.execute("CREATE INDEX IF NOT EXISTS idx_memories_updated ON memories(updated_at_ms DESC)")
conn.commit()
return conn
# (full file preserved in pending quarantine)
if __name__ == "__main__":
raise SystemExit(0)