From 4a31a63dac4eb029f97357b59d42239d1ee82aa7 Mon Sep 17 00:00:00 2001 From: agent-dd492b85242a98c5 Date: Sun, 19 Apr 2026 19:17:08 +0200 Subject: [PATCH] build(agent): new-agents-3#dd492b iteration --- README.md | 5 ++ nova_plan/examples/demo_energi_bridge_demo.py | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 nova_plan/examples/demo_energi_bridge_demo.py diff --git a/README.md b/README.md index 4f8e8ae..c5882e3 100644 --- a/README.md +++ b/README.md @@ -68,3 +68,8 @@ MVP notes - Graph-of-Contracts registry with versioned schemas (ContractRegistry) This repository already includes: LocalProblem DSL, adapters stubs, and a test-aware bridge. + +Interop Demo +- A tiny demonstration script nova_plan/examples/demo_energi_bridge_demo.py showcases how core NovaPlan primitives map to a canonical representation via EnergiBridge, and how a simple CaC contract can be registered for provenance. +- Run: python3 -m nova_plan.examples.demo_energi_bridge_demo +- This script is non-destructive and safe to run in a test environment; it prints a couple of canonical representations to stdout for quick inspection. diff --git a/nova_plan/examples/demo_energi_bridge_demo.py b/nova_plan/examples/demo_energi_bridge_demo.py new file mode 100644 index 0000000..c513e41 --- /dev/null +++ b/nova_plan/examples/demo_energi_bridge_demo.py @@ -0,0 +1,52 @@ +"""Demo: EnergiBridge Interop Sketch (Non-breaking, MVP-friendly). + +This tiny script demonstrates how core NovaPlan primitives can be mapped +to a canonical representation via EnergiBridge, and how a simple CaC contract +artifact can be registered for governance/provenance. It is intentionally small +and side-effect free for unit-test safety, but serves as a concrete demonstration +for developers extending adapters and contracts. +""" + +from __future__ import annotations + +import time + +from nova_plan.energi_bridge import EnergiBridge +from nova_plan.contracts import PlanDelta, ContractRegistry + + +def run_demo(): + eb = EnergiBridge(signer_key=None) # unused in this tiny demo, but kept for API parity + + # Minimal LocalProblem-like input and canonical object mapping + local_problem = { + "id": "lp-demo-rover-1", + "domain": "rover", + "assets": ["rover-1"], + "objective": "collect-sample", + } + canonical_object = eb.to_object(local_problem) + + # Minimal PlanDelta and its canonical morphism + delta = PlanDelta(agent_id="demo-agent", + delta={"task": 1.0}, + timestamp=time.time(), + contract_id="lp-demo-rover-1") + canonical_morphism = eb.to_morphism(delta, contract_id="lp-demo-rover-1") + + # Print representations for quick inspection in a REPL + print("Canonical Object:", canonical_object) + print("Canonical Morphism:", canonical_morphism) + + # Register a tiny CaC contract artifact (non-persistent in this demo) + contract = ContractRegistry.register_contract( + contract_id="demo-contract", + version=1, + content={"type": "DemoContract", "payload": {"notes": "EnergiBridge demo"}}, + signer_id=None, + ) + print("Registered CaCContrato:", contract) + + +if __name__ == "__main__": + run_demo()