build(agent): new-agents-4#58ba63 iteration

This commit is contained in:
agent-58ba63c88b4c9625 2026-04-19 19:25:57 +02:00
parent 4a31a63dac
commit 2460a221ed
1 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,69 @@
"""Demo: Cross-Domain NovaPlan Interop (Rover <-> Habitat).
This tiny script demonstrates a minimal end-to-end flow across two domain adapters
using the existing bridge primitives. It serves as a quick sanity-check for the
interoperability story and is safe to run in unit-test contexts.
"""
from __future__ import annotations
import time
from nova_plan.planner import LocalProblem
from nova_plan.contracts import PlanDelta
from nova_plan.catopt_bridge import to_object, delta_to_morphism
from nova_plan.energi_bridge import EnergiBridge
from nova_plan.adapters.rover_adapter import RoverAdapter
from nova_plan.adapters.habitat_adapter import HabitatAdapter
def run_demo() -> None:
# Create a tiny local rover problem
def rover_objective(local_vars, shared):
# simple quadratic in speed toward a desired velocity in shared space
v = local_vars.get("speed", 0.0)
w = shared.get("speed", 0.0)
return (v - w) ** 2
lp = LocalProblem(
id="rover-1",
objective=rover_objective,
variables={"speed": 1.0},
constraints=None,
)
# Canonical object for interoperability
canonical_obj = to_object(lp)
# Create a PlanDelta from this local problem
delta = PlanDelta(agent_id=lp.id, delta={"speed": lp.variables["speed"]}, timestamp=time.time(), contract_id="rover-1")
morph = delta_to_morphism(delta, contract_id="rover-1")
# Initialize adapters (toy stubs)
rover = RoverAdapter("rover-1")
habitat = HabitatAdapter("hab-ctrl-01")
# Rover consumes the morphism-like delta (as a planning task)
rover_status = rover.get_status()
rover_ack = rover.plan_task({"morphism": morph})
# Habitat module consumes a related task derived from the delta
habitat_status = habitat.get_status()
habitat_ack = habitat.plan_task({"task_from_delta": morph.data})
# Simple printout for inspection
print("Canonical Object:", canonical_obj)
print("Canonical Morphism:", morph)
print("Rover status:", rover_status)
print("Rover ack:", rover_ack)
print("Habitat status:", habitat_status)
print("Habitat ack:", habitat_ack)
# Demonstrate EnergiBridge contract publishing (signed CaC artifact)
eb = EnergiBridge()
signed_contract = eb.register_contract("demo-cross-domain-contract", {"type": "DemoCrossDomain"}, key="demo-key-123")
print("SignedCaCContract:", signed_contract)
if __name__ == "__main__":
run_demo()