From 2eeec960103c58a7347e7839458db3792f1c4131 Mon Sep 17 00:00:00 2001 From: agent-58ba63c88b4c9625 Date: Thu, 23 Apr 2026 23:02:19 +0200 Subject: [PATCH] build(agent): new-agents-4#58ba63 iteration --- deltaforge_skeleton/__init__.py | 5 +++ deltaforge_skeleton/adapters/venueA_feed.py | 18 +++++++++++ deltaforge_skeleton/adapters/venueB_trade.py | 15 +++++++++ deltaforge_skeleton/dsl.py | 32 ++++++++++++++++++++ pyproject.toml | 2 +- 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 deltaforge_skeleton/adapters/venueA_feed.py create mode 100644 deltaforge_skeleton/adapters/venueB_trade.py diff --git a/deltaforge_skeleton/__init__.py b/deltaforge_skeleton/__init__.py index 29f5b38..c6e0e5d 100644 --- a/deltaforge_skeleton/__init__.py +++ b/deltaforge_skeleton/__init__.py @@ -4,6 +4,7 @@ A minimal, production-oriented MVP scaffold for a cross-venue delta-hedge engine """ from .dsl import Asset, MarketSignal, StrategyDelta, PlanDelta, SharedSignals, DualVariables +from .dsl import LocalArbProblem, PrivacyBudget, AuditLog, PolicyBlock from .coordination import ADMMCoordinator from .goc_registry import GoCRegistry from .curator import Curator @@ -19,6 +20,10 @@ __all__ = [ "PlanDelta", "SharedSignals", "DualVariables", + "LocalArbProblem", + "PrivacyBudget", + "AuditLog", + "PolicyBlock", "ADMMCoordinator", "GoCRegistry", "Curator", diff --git a/deltaforge_skeleton/adapters/venueA_feed.py b/deltaforge_skeleton/adapters/venueA_feed.py new file mode 100644 index 0000000..d26de49 --- /dev/null +++ b/deltaforge_skeleton/adapters/venueA_feed.py @@ -0,0 +1,18 @@ +from __future__ import annotations +from typing import List +from ..dsl import Asset, MarketSignal + + +def generate_venue_signals(symbols: List[str], price_dict: dict) -> List[MarketSignal]: + """Venue A feed stub: generate MarketSignal objects for given symbols. + + This is a minimal adapter to seed interoperability with the EnergiBridge-like IR. + """ + signals: List[MarketSignal] = [] + import time + ts = time.time() + for s in symbols: + asset = Asset(symbol=s, asset_type="equity") + price = price_dict.get(s, 100.0) + signals.append(MarketSignal(asset=asset, price=price, timestamp=ts)) + return signals diff --git a/deltaforge_skeleton/adapters/venueB_trade.py b/deltaforge_skeleton/adapters/venueB_trade.py new file mode 100644 index 0000000..a11a9fa --- /dev/null +++ b/deltaforge_skeleton/adapters/venueB_trade.py @@ -0,0 +1,15 @@ +from __future__ import annotations +from typing import List +from ..dsl import Asset, MarketSignal + + +def generate_venue_signals(symbols: List[str], price_dict: dict) -> List[MarketSignal]: + """Venue B trade feed stub: generate MarketSignal objects for given symbols.""" + signals: List[MarketSignal] = [] + import time + ts = time.time() + for s in symbols: + asset = Asset(symbol=s, asset_type="equity") + price = price_dict.get(s, 100.0) + signals.append(MarketSignal(asset=asset, price=price, timestamp=ts)) + return signals diff --git a/deltaforge_skeleton/dsl.py b/deltaforge_skeleton/dsl.py index ab021c2..1ba86d7 100644 --- a/deltaforge_skeleton/dsl.py +++ b/deltaforge_skeleton/dsl.py @@ -50,3 +50,35 @@ class PlanDelta: steps: List[str] = field(default_factory=list) timestamp: float = 0.0 safety_tags: List[str] = field(default_factory=list) + + +@dataclass +class LocalArbProblem: + """Canonical local arbitrage problem seed for a venue. + + Maps a venue-independent set of assets to objectives and constraints that solvers + can attempt to satisfy locally before enforcing cross-venue coherence. + """ + venue: str + assets: List[Asset] + objectives: Dict[str, float] = field(default_factory=dict) + constraints: Dict[str, float] = field(default_factory=dict) + solver_hint: Optional[str] = None + + +@dataclass +class PrivacyBudget: + budget: float = 0.0 + expiry: float = 0.0 + leakage_bound: float = 0.0 + + +@dataclass +class AuditLog: + entries: List[str] = field(default_factory=list) + last_signature: Optional[str] = None + + +@dataclass +class PolicyBlock: + safety: List[str] = field(default_factory=list) diff --git a/pyproject.toml b/pyproject.toml index b7a414d..598f25f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,4 +18,4 @@ dependencies = [ readme = "README.md" [tool.setuptools.packages.find] -where = ["src"] +where = ["deltaforge_skeleton"]