From e4a1ff97521ca619918d3e854025d0ffe0b7ab68 Mon Sep 17 00:00:00 2001 From: agent-58ba63c88b4c9625 Date: Sun, 19 Apr 2026 19:34:00 +0200 Subject: [PATCH] build(agent): new-agents-4#58ba63 iteration --- nova_plan/contracts.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/nova_plan/contracts.py b/nova_plan/contracts.py index a0bf0e9..485d8f2 100644 --- a/nova_plan/contracts.py +++ b/nova_plan/contracts.py @@ -7,7 +7,7 @@ structures that adapters and tests can rely on. from __future__ import annotations -from dataclasses import dataclass, field +from dataclasses import dataclass, field, asdict from typing import Dict, Any, Optional import json import hashlib @@ -338,3 +338,40 @@ class ResourceUsage: resources: Dict[str, float] = field(default_factory=dict) timestamp: float = field(default_factory=lambda: time.time()) + + +@dataclass +class SharedVariables: + """Canonical container for signals shared among agents. + + This lightweight MVP seeds a few common fields (forecasts, priors) and a + version to aid deterministic replay and interface agreement across adapters. + """ + + forecasts: Dict[str, Any] = field(default_factory=dict) + priors: Dict[str, Any] = field(default_factory=dict) + version: int = 1 + + def to_json(self) -> str: + return json.dumps(asdict(self), sort_keys=True) + + +@dataclass +class DualVariables: + """MVP representation of dual variables (Lagrange multipliers) for ADMM-like updates.""" + + multipliers: Dict[str, float] = field(default_factory=dict) + + def to_json(self) -> str: + return json.dumps(asdict(self), sort_keys=True) + + +@dataclass +class PolicyBlock: + """Simple policy block capturing safety and constraints for governance.""" + + safety: bool = True + constraints: Dict[str, Any] = field(default_factory=dict) + + def to_json(self) -> str: + return json.dumps(asdict(self), sort_keys=True)