josephrw's picture
Deploy SystemLake Underwriter telemetry app
5b0eab6 verified
Raw
History Blame Contribute Delete
24.5 kB
"""QRC Engine — Question Runtime Capsule.
When a serious question enters the terminal system, it becomes a private executable session.
The session may create files, run commands, scrape allowed sources, compute, compress notes,
build datasets, create endpoints, write receipts, and update private memory.
The user sees the useful service. Internally, we keep the proof that the question caused work.
Question → Runtime Session → Receipts → Compressed Dataset → Private Endpoint → Better Future Response
"""
import os
import json
import hashlib
import uuid
import subprocess
import time
import re
import shutil
from datetime import datetime
from typing import Dict, List, Optional, Any
from dataclasses import dataclass, field
from .ledgers import QuestionLedger, ExecutionLedger, CostAvoidanceLedger
# Intent classification — determines what tools the session gets
INTENT_KEYWORDS = {
'research': ['what', 'why', 'how does', 'explain', 'compare', 'difference', 'overview'],
'engineering': ['build', 'create', 'implement', 'fix', 'refactor', 'add', 'generate', 'write code'],
'data': ['dataset', 'scrape', 'collect', 'analyze', 'pca', 'statistics', 'aggregate', 'transform'],
'deployment': ['deploy', 'endpoint', 'api', 'serve', 'docker', 'container', 'cloud'],
'debugging': ['debug', 'error', 'crash', 'traceback', 'fail', 'broken', 'why is'],
'summarization': ['summarize', 'compress', 'tldr', 'digest', 'condense'],
}
# Cost avoidance estimates per intent class
COST_AVOIDANCE_ESTIMATES = {
'research': {'category': 'research', 'hours': 2.0, 'confidence': 0.6},
'engineering': {'category': 'engineering', 'hours': 4.0, 'confidence': 0.5},
'data': {'category': 'data_building', 'hours': 3.0, 'confidence': 0.55},
'deployment': {'category': 'engineering', 'hours': 1.5, 'confidence': 0.5},
'debugging': {'category': 'debugging', 'hours': 2.5, 'confidence': 0.65},
'summarization': {'category': 'explanation', 'hours': 0.5, 'confidence': 0.7},
}
@dataclass
class SessionState:
"""State of a QRC session — the semantic tmux."""
session_id: str = ""
question_id: str = ""
question_hash: str = ""
question_text: str = ""
intent_class: str = "unknown"
project: str = "default"
started_at: str = ""
ended_at: Optional[str] = None
status: str = "init" # init, running, compressing, done, failed
work_dir: str = ""
tmux_session: Optional[str] = None
commands_run: List[str] = field(default_factory=list)
files_created: List[str] = field(default_factory=list)
tests_passed: Optional[bool] = None
endpoint_url: Optional[str] = None
receipts: List[str] = field(default_factory=list)
compressed: bool = False
compressed_path: Optional[str] = None
dataset_path: Optional[str] = None
runtime_seconds: float = 0.0
errors: List[str] = field(default_factory=list)
class QRCEngine:
"""Question Runtime Capsule Engine.
The core daemon that turns questions into executable sessions.
Usage:
engine = QRCEngine()
session = engine.ask("How do I optimize my FastAPI endpoint?", project="myapp")
# session is now a running capsule with receipts
engine.compress(session) # Compress residue into reusable dataset
engine.serve(session) # Start private endpoint serving the dataset
"""
def __init__(self, base_dir: str = None):
self.base_dir = base_dir or os.path.join(os.getcwd(), 'questionos')
self.sessions_dir = os.path.join(self.base_dir, 'sessions')
self.datasets_dir = os.path.join(self.base_dir, 'datasets')
self.receipts_dir = os.path.join(self.base_dir, 'receipts')
for d in [self.sessions_dir, self.datasets_dir, self.receipts_dir]:
os.makedirs(d, exist_ok=True)
# Three ledgers
self.question_ledger = QuestionLedger(
os.path.join(self.base_dir, 'ledgers', 'questions.json'))
self.execution_ledger = ExecutionLedger(
os.path.join(self.base_dir, 'ledgers', 'executions.json'))
self.cost_ledger = CostAvoidanceLedger(
os.path.join(self.base_dir, 'ledgers', 'cost_avoidance.json'))
# Active sessions
self._sessions: Dict[str, SessionState] = {}
self._last_receipt_id: Optional[str] = None
def classify_intent(self, question: str) -> str:
"""Classify the question's intent to determine available tools."""
q_lower = question.lower()
scores = {}
for intent, keywords in INTENT_KEYWORDS.items():
score = sum(1 for kw in keywords if kw in q_lower)
if score > 0:
scores[intent] = score
if not scores:
return 'research'
return max(scores, key=scores.get)
def ask(self, question: str, project: str = None,
access_policy: str = 'private') -> SessionState:
"""Ask a question. This starts a QRC session.
The question becomes a private executable session that:
1. Records the question hash in the Question Ledger
2. Creates a work directory for the session
3. Spawns a tmux session for terminal work
4. Records cost-avoidance estimate
5. Returns the session state for further operations
Args:
question: The question to execute
project: Project name for grouping
access_policy: 'private', 'nda', or 'public'
Returns:
SessionState — the live session capsule
"""
# Classify intent
intent = self.classify_intent(question)
# Record in Question Ledger
q_record = self.question_ledger.record(
question=question,
project=project or 'default',
intent_class=intent,
access_policy=access_policy,
)
# Create session
session_id = str(uuid.uuid4())
session_dir = os.path.join(self.sessions_dir, session_id)
os.makedirs(session_dir, exist_ok=True)
state = SessionState(
session_id=session_id,
question_id=q_record['question_id'],
question_hash=q_record['question_hash'],
question_text=question,
intent_class=intent,
project=project or 'default',
started_at=datetime.now().isoformat(),
status='running',
work_dir=session_dir,
)
# Link session to question
self.question_ledger.link_session(q_record['question_id'], session_id)
# Write question to session dir (private)
with open(os.path.join(session_dir, 'question.txt'), 'w') as f:
f.write(question)
# Write session metadata
self._save_session_state(state)
# Record execution event
self.execution_ledger.record(
session_id=session_id,
question_id=q_record['question_id'],
event_type='session_start',
details={'intent': intent, 'project': state.project},
)
# Record cost avoidance estimate
est = COST_AVOIDANCE_ESTIMATES.get(intent, {'category': 'research', 'hours': 1.0, 'confidence': 0.4})
self.cost_ledger.record(
question_id=q_record['question_id'],
session_id=session_id,
work_category=est['category'],
hours_avoided=est['hours'],
confidence=est['confidence'],
basis=f'Intent class "{intent}" — estimated {est["hours"]}h of {est["category"]} work avoided',
)
# Write initial receipt
self._write_receipt(state, 'question_received', {
'question_hash': state.question_hash,
'intent': intent,
'project': state.project,
})
self._sessions[session_id] = state
return state
def run_command(self, session: SessionState, command: str,
timeout: int = 30, approved: bool = False) -> Dict:
"""Run a command inside the session's work directory.
Destructive commands require approved=True.
"""
destructive = any(p in command for p in ['rm -rf', 'dd', 'mkfs', 'chmod 777', 'sudo', '> /dev/'])
if destructive and not approved:
result = {
'command': command,
'returncode': -1,
'stdout': '',
'stderr': 'BLOCKED: destructive command requires approved=True',
'blocked': True,
}
session.errors.append(f'Blocked command: {command}')
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='command_blocked',
details={'command': command},
result='failure',
)
return result
try:
r = subprocess.run(
command, shell=True, cwd=session.work_dir,
capture_output=True, text=True, timeout=timeout,
)
result = {
'command': command,
'returncode': r.returncode,
'stdout': r.stdout[:5000],
'stderr': r.stderr[:2000],
'blocked': False,
}
session.commands_run.append(command)
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='command',
details={'command': command, 'returncode': r.returncode},
result='success' if r.returncode == 0 else 'failure',
)
self._write_receipt(session, 'command_executed', {
'command': command,
'returncode': r.returncode,
'stdout_hash': hashlib.sha256(r.stdout.encode()).hexdigest()[:16],
})
return result
except subprocess.TimeoutExpired:
result = {
'command': command,
'returncode': -1,
'stdout': '',
'stderr': f'TIMEOUT after {timeout}s',
'blocked': False,
}
session.errors.append(f'Timeout: {command}')
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='command_timeout',
details={'command': command, 'timeout': timeout},
result='failure',
)
return result
def write_file(self, session: SessionState, filename: str, content: str) -> str:
"""Write a file in the session's work directory."""
filepath = os.path.join(session.work_dir, filename)
os.makedirs(os.path.dirname(filepath), exist_ok=True) if os.path.dirname(filename) else None
with open(filepath, 'w') as f:
f.write(content)
file_hash = hashlib.sha256(content.encode()).hexdigest()
session.files_created.append(filename)
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='file_write',
details={'filename': filename, 'hash': file_hash, 'bytes': len(content)},
)
self._write_receipt(session, 'file_written', {
'filename': filename,
'hash': file_hash,
'bytes': len(content),
})
return filepath
def run_tests(self, session: SessionState) -> Dict:
"""Run pytest in the session directory if test files exist."""
test_files = [f for f in os.listdir(session.work_dir)
if f.startswith('test_') and f.endswith('.py')]
if not test_files:
return {'ran': False, 'reason': 'no test files'}
result = self.run_command(session, 'python3 -m pytest -v --tb=short', timeout=60)
session.tests_passed = result['returncode'] == 0
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='test',
details={'passed': session.tests_passed, 'output_hash': hashlib.sha256(result['stdout'].encode()).hexdigest()[:16]},
result='success' if session.tests_passed else 'failure',
)
return {'ran': True, 'passed': session.tests_passed, 'output': result['stdout'][:2000]}
def compress(self, session: SessionState) -> Dict:
"""Compress the session into a reusable dataset.
Not pretending 50 hours fits into 20KB. Extracting the valuable residue:
- Decisions made
- Claims proven
- Datasets created
- Source hashes
- Failed attempts (so we don't repeat them)
- Reusable endpoints
- Compressed summary
"""
session.status = 'compressing'
self._save_session_state(session)
dataset_dir = os.path.join(self.datasets_dir, session.session_id)
os.makedirs(dataset_dir, exist_ok=True)
# Gather residue
residue = {
'session_id': session.session_id,
'question_id': session.question_id,
'question_hash': session.question_hash,
'intent_class': session.intent_class,
'project': session.project,
'started_at': session.started_at,
'compressed_at': datetime.now().isoformat(),
'runtime_seconds': session.runtime_seconds,
}
# 1. Decisions — extract from command outputs
decisions = []
for cmd in session.commands_run:
if 'echo' in cmd or 'printf' in cmd:
decisions.append({'source': 'command', 'command': cmd})
residue['decisions'] = decisions
# 2. Files — hash all created files
files_residue = []
for fname in session.files_created:
fpath = os.path.join(session.work_dir, fname)
if os.path.exists(fpath):
with open(fpath, 'rb') as f:
h = hashlib.sha256(f.read()).hexdigest()
files_residue.append({'filename': fname, 'hash': h, 'size': os.path.getsize(fpath)})
residue['files'] = files_residue
# 3. Commands — what was tried
residue['commands'] = session.commands_run
# 4. Tests
residue['tests_passed'] = session.tests_passed
# 5. Errors — failed attempts (so we don't repeat)
residue['errors'] = session.errors
# 6. Endpoint
residue['endpoint_url'] = session.endpoint_url
# 7. Receipts
residue['receipts'] = session.receipts
# 8. Execution events from ledger
events = self.execution_ledger.get_session_events(session.session_id)
residue['event_count'] = len(events)
residue['event_types'] = list(set(e['event_type'] for e in events))
# Write compressed dataset
dataset_path = os.path.join(dataset_dir, 'residue.json')
with open(dataset_path, 'w') as f:
json.dump(residue, f, indent=2)
# Write a human-readable summary
summary_path = os.path.join(dataset_dir, 'summary.md')
with open(summary_path, 'w') as f:
f.write(self._generate_summary(session, residue))
session.compressed = True
session.compressed_path = dataset_path
session.dataset_path = dataset_path
session.status = 'done'
session.ended_at = datetime.now().isoformat()
session.runtime_seconds = time.time() - datetime.fromisoformat(session.started_at).timestamp()
self._save_session_state(session)
self.question_ledger.mark_compressed(session.question_id, session.endpoint_url)
self._write_receipt(session, 'session_compressed', {
'dataset_path': dataset_path,
'residue_size': os.path.getsize(dataset_path),
'files_preserved': len(files_residue),
'commands_count': len(session.commands_run),
'errors_count': len(session.errors),
})
return {
'compressed': True,
'dataset_path': dataset_path,
'summary_path': summary_path,
'residue': residue,
}
def serve(self, session: SessionState, port: int = 0) -> Dict:
"""Start a private endpoint serving the compressed dataset.
Creates a minimal FastAPI app that serves the question's residue.
"""
if not session.compressed:
return {'served': False, 'reason': 'session not compressed'}
# Generate a serving app
app_code = self._generate_endpoint_app(session)
app_path = os.path.join(session.work_dir, 'serve.py')
with open(app_path, 'w') as f:
f.write(app_code)
if port == 0:
port = 8000 + (hash(session.session_id) % 1000)
endpoint_url = f"http://localhost:{port}"
# Start uvicorn in background
try:
proc = subprocess.Popen(
['python3', '-c', f'import uvicorn; uvicorn.run("serve:app", host="127.0.0.1", port={port})'],
cwd=session.work_dir,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
time.sleep(2) # Wait for startup
# Verify endpoint
try:
import urllib.request
resp = urllib.request.urlopen(f"{endpoint_url}/health", timeout=5)
alive = resp.status == 200
except Exception:
alive = False
session.endpoint_url = endpoint_url if alive else None
self.execution_ledger.record(
session_id=session.session_id,
question_id=session.question_id,
event_type='endpoint',
details={'url': endpoint_url, 'port': port, 'alive': alive},
result='success' if alive else 'failure',
)
self._write_receipt(session, 'endpoint_started', {
'url': endpoint_url,
'port': port,
'alive': alive,
})
return {'served': alive, 'url': endpoint_url, 'port': port}
except Exception as e:
session.errors.append(f'Endpoint error: {e}')
return {'served': False, 'error': str(e)}
def get_session(self, session_id: str) -> Optional[SessionState]:
"""Get a session by ID."""
if session_id in self._sessions:
return self._sessions[session_id]
# Try loading from disk
state_path = os.path.join(self.sessions_dir, session_id, 'state.json')
if os.path.exists(state_path):
with open(state_path) as f:
data = json.load(f)
state = SessionState(**data)
self._sessions[session_id] = state
return state
return None
def list_sessions(self, project: str = None) -> List[Dict]:
"""List all sessions, optionally filtered by project."""
sessions = []
for entry in os.listdir(self.sessions_dir):
state_path = os.path.join(self.sessions_dir, entry, 'state.json')
if os.path.exists(state_path):
with open(state_path) as f:
data = json.load(f)
if project and data.get('project') != project:
continue
sessions.append({
'session_id': data['session_id'],
'question_hash': data['question_hash'][:16],
'intent': data['intent_class'],
'status': data['status'],
'compressed': data['compressed'],
'endpoint': data.get('endpoint_url'),
'project': data['project'],
'started_at': data['started_at'][:19],
})
return sessions
def status(self) -> Dict:
"""Get overall QuestionOS status."""
return {
'questions': self.question_ledger.summary(),
'executions': self.execution_ledger.summary(),
'cost_avoidance': self.cost_ledger.summary(),
'active_sessions': sum(1 for s in self._sessions.values() if s.status == 'running'),
'datasets': len(os.listdir(self.datasets_dir)) if os.path.exists(self.datasets_dir) else 0,
}
def _save_session_state(self, state: SessionState):
"""Save session state to disk."""
state_path = os.path.join(state.work_dir, 'state.json')
with open(state_path, 'w') as f:
json.dump(state.__dict__, f, indent=2)
def _write_receipt(self, session: SessionState, action: str, details: Dict) -> Dict:
"""Write a receipt for a session event."""
receipt_id = str(uuid.uuid4())
timestamp = datetime.now().isoformat()
content = json.dumps(details, sort_keys=True)
artifact_hash = hashlib.sha256(content.encode()).hexdigest()
receipt = {
'receipt_id': receipt_id,
'timestamp': timestamp,
'session_id': session.session_id,
'question_id': session.question_id,
'action': action,
'artifact_hash': artifact_hash,
'details': details,
'previous_receipt': self._last_receipt_id,
}
filename = f"{timestamp.replace(':', '-').replace('.', '_')}_{action}.json"
filepath = os.path.join(self.receipts_dir, filename)
with open(filepath, 'w') as f:
json.dump(receipt, f, indent=2)
session.receipts.append(receipt_id)
self._last_receipt_id = receipt_id
return receipt
def _generate_summary(self, session: SessionState, residue: Dict) -> str:
"""Generate a human-readable summary of the compressed session."""
lines = [
f"# QRC Session Summary",
f"",
f"- **Session ID**: {session.session_id[:8]}",
f"- **Question Hash**: {session.question_hash[:16]}",
f"- **Intent**: {session.intent_class}",
f"- **Project**: {session.project}",
f"- **Runtime**: {session.runtime_seconds:.1f}s",
f"- **Status**: {session.status}",
f"",
f"## Commands Run ({len(session.commands_run)})",
]
for cmd in session.commands_run[:20]:
lines.append(f"- `{cmd[:80]}`")
if len(session.commands_run) > 20:
lines.append(f"- ... and {len(session.commands_run) - 20} more")
lines += [
f"",
f"## Files Created ({len(session.files_created)})",
]
for f in residue['files']:
lines.append(f"- `{f['filename']}` ({f['size']} bytes, hash={f['hash'][:16]})")
lines += [
f"",
f"## Tests: {'PASSED' if session.tests_passed else 'FAILED' if session.tests_passed is False else 'NONE'}",
f"",
f"## Errors ({len(session.errors)})",
]
for err in session.errors[:10]:
lines.append(f"- {err[:80]}")
lines += [
f"",
f"## Receipts: {len(session.receipts)}",
f"",
f"## Endpoint: {session.endpoint_url or 'none'}",
f"",
f"---",
f"*This residue is a reusable dataset. Future questions can reference this session's*",
f"*decisions, files, and errors to avoid repeating work.*",
]
return '\n'.join(lines)
def _generate_endpoint_app(self, session: SessionState) -> str:
"""Generate a FastAPI app that serves the compressed dataset."""
return f'''"""Auto-generated QRC endpoint for session {session.session_id[:8]}."""
from fastapi import FastAPI
import json
import os
app = FastAPI(title="QRC Endpoint", description="Private question endpoint")
DATASET_PATH = "{session.dataset_path}"
@app.get("/health")
def health():
return {{"status": "ok", "session": "{session.session_id[:8]}"}}
@app.get("/residue")
def get_residue():
with open(DATASET_PATH) as f:
return json.load(f)
@app.get("/summary")
def get_summary():
summary_path = os.path.join(os.path.dirname(DATASET_PATH), "summary.md")
with open(summary_path) as f:
return {{"summary": f.read()}}
'''