build(agent): new-agents-2#7e3bbc iteration

This commit is contained in:
agent-7e3bbc424e07835b 2026-04-20 14:31:48 +02:00
parent 37f6fa38f0
commit e3db872f6a
3 changed files with 50 additions and 3 deletions

View File

@ -4,11 +4,20 @@ orchestrator suitable for offline-first operation in space habitats.
""" """
from .federated import Client, Server from .federated import Client, Server
from .dsl import PrivacyBudget, AuditLog # export governance primitives for adapters
try: try:
# Optional: Expose registry helpers for MVP interoperability without # Optional: Expose registry helpers for MVP interoperability without
# forcing a hard dependency in tests that only exercise federation. # forcing a hard dependency in tests that only exercise federation.
from .go_registry import register_contract, get_contract_schema, list_contracts # type: ignore from .go_registry import register_contract, get_contract_schema, list_contracts # type: ignore
__all__ = ["Client", "Server", "register_contract", "get_contract_schema", "list_contracts"] __all__ = [
"Client",
"Server",
"PrivacyBudget",
"AuditLog",
"register_contract",
"get_contract_schema",
"list_contracts",
]
except Exception: except Exception:
# If registry is not available for some environments, still expose the core APIs. # If registry is not available for some environments, still expose the core APIs.
__all__ = ["Client", "Server"] __all__ = ["Client", "Server", "PrivacyBudget", "AuditLog"]

View File

@ -8,7 +8,7 @@ from __future__ import annotations
from typing import Any, Dict, List from typing import Any, Dict, List
from ..dsl import LocalProblem, SharedVariables, PlanDelta from ..dsl import LocalProblem, SharedVariables, PlanDelta, PrivacyBudget, AuditLog
class CanonicalAdapter: class CanonicalAdapter:
@ -24,3 +24,23 @@ class CanonicalAdapter:
def map_plan_delta(self, version: int, delta: Dict[str, Any], insight: str | None = None) -> PlanDelta: def map_plan_delta(self, version: int, delta: Dict[str, Any], insight: str | None = None) -> PlanDelta:
return PlanDelta(version=version, delta=delta, insight=insight) return PlanDelta(version=version, delta=delta, insight=insight)
def map_privacy_budget(self, budget: PrivacyBudget) -> Dict[str, Any]:
"""Serialize PrivacyBudget into a contract-friendly dict."""
return {
"type": "PrivacyBudget",
"signal": budget.signal,
"budget": budget.budget,
"expiry": budget.expiry,
}
def map_audit_log(self, audit: AuditLog) -> Dict[str, Any]:
"""Serialize AuditLog into a contract-friendly dict."""
return {
"type": "AuditLog",
"entry": audit.entry,
"signer": audit.signer,
"timestamp": audit.timestamp,
"contract_id": audit.contract_id,
"version": audit.version,
}

View File

@ -39,3 +39,21 @@ class PlanDelta:
version: int version: int
delta: Dict[str, Any] = field(default_factory=dict) delta: Dict[str, Any] = field(default_factory=dict)
insight: Optional[str] = None insight: Optional[str] = None
@dataclass
class PrivacyBudget:
"""Governance/privacy budget block for a contract message."""
signal: str
budget: float
expiry: Optional[float] = None
@dataclass
class AuditLog:
"""Tamper-evident audit log entry for governance provenance."""
entry: str
signer: str
timestamp: float
contract_id: str
version: str