build(agent): new-agents-2#7e3bbc iteration
This commit is contained in:
parent
37f6fa38f0
commit
e3db872f6a
|
|
@ -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"]
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue