#!/usr/bin/env python3 """Substrate Mesh Runtime — Primordial OS Runtime Connector API Wrapper v3.3.1. FastAPI HTTPS-ready wrapper for GPT Actions. Designed for Hugging Face Docker Space deployment. Boundary: read-only canonical source/lexicon posture; workspace-local overlay proposals only. """ from __future__ import annotations import json import os import re from datetime import datetime, timezone from pathlib import Path from typing import Any, Dict, List, Optional from fastapi import Depends, FastAPI, Header, HTTPException, Request from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel, Field from src.substrate_connector_core import submit_mesh_command APP_VERSION = "v3.3.1" PRESSURE_SPINE = "HIR × OAM" DEFAULT_RECEIPT_ROOT = Path(os.getenv("SUBSTRATE_RECEIPT_ROOT", "runs/api_receipts")) app = FastAPI( title="Substrate Mesh Runtime Connector API", version=APP_VERSION, description=( "HTTPS API wrapper for Primordial OS Runtime GPT Actions. Routes bounded mesh command " "capsules into Substrate connector responses with trace capsules, PPT element matches, " "Primordial Periodic Alchemical Output, HIR × OAM receipts, lexicon state, audit pointers, " "and workspace-local overlay proposals." ), ) # Helpful for browser/dev testing. Auth still protects command/receipt routes. app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=False, allow_methods=["GET", "POST", "OPTIONS"], allow_headers=["Authorization", "Content-Type"], ) def utc_now() -> str: return datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z") def safe_id(value: str, fallback: str = "workspace_local") -> str: value = (value or fallback).strip() cleaned = re.sub(r"[^A-Za-z0-9_\-]", "_", value)[:96] return cleaned or fallback def require_bearer(authorization: Optional[str] = Header(default=None)) -> str: expected = os.getenv("SUBSTRATE_ACTION_KEY") if not expected: # Fail closed for deployed environments. The validator sets this env var. raise HTTPException(status_code=500, detail="SUBSTRATE_ACTION_KEY is not configured") if not authorization or not authorization.startswith("Bearer "): raise HTTPException(status_code=401, detail="Missing bearer token") token = authorization.split(" ", 1)[1].strip() if token != expected: raise HTTPException(status_code=403, detail="Invalid bearer token") return "authorized" class MeshCommand(BaseModel): command_type: str = Field(default="DISCOVER", description="DISCOVER, BRAINSTORM, COMBINE, EXTEND_RESEARCH, OAM_READ, LEXICON_REVIEW, THREADROOM_POST") raw_user_text: str = Field(..., min_length=1, description="Natural-language user command or threadroom post.") workspace_id: str = Field(default="workspace_local_001", description="Workspace scope; used for isolated local receipt storage.") session_id: str = Field(default="session_local", description="Session/user alias for contributor credit.") target_nodes: List[str] = Field(default_factory=list) hashtags: List[str] = Field(default_factory=list) mention_refs: List[str] = Field(default_factory=list) minutes_budget: float = Field(default=5.0) claim_boundary: str = Field(default="no final validation claims; human review required") privacy_scope: str = Field(default="PRIVATE_WORKSPACE") source_mutation_allowed: bool = Field(default=False) class HealthResponse(BaseModel): status: str version: str pressure_spine: str source_mutation_allowed: bool canonical_source_posture: str canonical_lexicon_posture: str overlay_scope: str human_review_required: bool auth_configured: bool timestamp_utc: str def receipt_paths(workspace_id: str, command_id: str) -> Dict[str, Path]: w = safe_id(workspace_id) c = safe_id(command_id) folder = DEFAULT_RECEIPT_ROOT / w / c return { "folder": folder, "response": folder / "response.json", "audit": folder / "audit_log.jsonl", "receipt_md": folder / "receipt.md", } def persist_response(response: Dict[str, Any], request_meta: Dict[str, Any]) -> Dict[str, str]: paths = receipt_paths(response.get("workspace_id", "workspace_local"), response.get("command_id", "cmd_unknown")) paths["folder"].mkdir(parents=True, exist_ok=True) response = dict(response) response.setdefault("api_wrapper", {}) response["api_wrapper"].update({ "version": APP_VERSION, "pressure_spine": PRESSURE_SPINE, "persisted_at_utc": utc_now(), "receipt_folder": str(paths["folder"]), }) # Normalize visible HIR × OAM glyph even if legacy core returns HIR x OAM. if isinstance(response.get("receipt"), dict): response["receipt"]["pressure_spine"] = PRESSURE_SPINE paths["response"].write_text(json.dumps(response, indent=2, ensure_ascii=False), encoding="utf-8") audit = { "timestamp_utc": utc_now(), "event": "api_mesh_command_completed", "wrapper_version": APP_VERSION, "command_id": response.get("command_id"), "workspace_id": response.get("workspace_id"), "status": response.get("status"), "pressure_spine": PRESSURE_SPINE, "source_mutation": response.get("receipt", {}).get("source_mutation"), "human_review_required": response.get("human_review_required"), "request_meta": request_meta, } with paths["audit"].open("a", encoding="utf-8") as f: f.write(json.dumps(audit, ensure_ascii=False) + "\n") alch = response.get("alchemical_output", {}) receipt = response.get("receipt", {}) md = f"""# Substrate Mesh Command API Receipt Command ID: `{response.get('command_id')}` Workspace: `{response.get('workspace_id')}` Status: `{response.get('status')}` Pressure spine: `{PRESSURE_SPINE}` Source mutation: `{receipt.get('source_mutation')}` Human review required: `{response.get('human_review_required')}` ## Reference Point {alch.get('reference_point','')} ## Continuity Read {alch.get('continuity_read','')} ## Strain Points """ for item in alch.get("strain_points", []): md += f"- {item}\n" md += "\n## Future Routes\n\n" for item in alch.get("future_routes", []): md += f"- {item}\n" paths["receipt_md"].write_text(md, encoding="utf-8") return {"response_path": str(paths["response"]), "receipt_md_path": str(paths["receipt_md"]), "audit_log_path": str(paths["audit"])} @app.get("/v1/mesh/health", response_model=HealthResponse, operation_id="getSubstrateHealth") def get_substrate_health() -> HealthResponse: return HealthResponse( status="HELD", version=APP_VERSION, pressure_spine=PRESSURE_SPINE, source_mutation_allowed=False, canonical_source_posture="READ_ONLY", canonical_lexicon_posture="READ_ONLY", overlay_scope="WORKSPACE_LOCAL_OVERLAY_PROPOSAL_ONLY", human_review_required=True, auth_configured=bool(os.getenv("SUBSTRATE_ACTION_KEY")), timestamp_utc=utc_now(), ) @app.post("/v1/mesh/command", operation_id="submitMeshCommand") def submit_command(command: MeshCommand, request: Request, _: str = Depends(require_bearer)) -> Dict[str, Any]: if command.source_mutation_allowed: raise HTTPException(status_code=400, detail="Canonical source mutation is not allowed by this connector") capsule = command.model_dump() capsule["claim_boundary"] = command.claim_boundary or "no final validation claims; human review required" capsule["source_mutation_allowed"] = False response = submit_mesh_command(capsule) response.setdefault("boundary", {}) response["boundary"].update({ "canonical_sources": "READ_ONLY", "canonical_lexicon": "READ_ONLY", "workspace_storage": "ISOLATED_BY_WORKSPACE_ID", "write_scope": "OVERLAY_PROPOSAL_ONLY", "public_or_canonical_update": "NOT_ALLOWED_BY_API_WRAPPER", "human_review_required": True, }) request_meta = { "client_host": getattr(request.client, "host", None), "command_type": command.command_type, "privacy_scope": command.privacy_scope, "minutes_budget": command.minutes_budget, } paths = persist_response(response, request_meta) response["api_receipt_paths"] = paths return response @app.get("/v1/mesh/receipt/{command_id}", operation_id="getMeshReceipt") def get_receipt(command_id: str, workspace_id: str = "workspace_local_001", _: str = Depends(require_bearer)) -> Dict[str, Any]: paths = receipt_paths(workspace_id, command_id) if not paths["response"].exists(): raise HTTPException(status_code=404, detail="Receipt not found for command_id/workspace_id") return json.loads(paths["response"].read_text(encoding="utf-8")) @app.get("/", include_in_schema=False) def root() -> Dict[str, Any]: return { "name": "Substrate Mesh Runtime Connector API", "version": APP_VERSION, "health": "/v1/mesh/health", "docs": "/docs", "openapi": "/openapi.json", "boundary": "read-only canonical source/lexicon; workspace-local overlay proposals only; human review required", }