|
|
@@ -16,6 +16,16 @@ class Strategy:
|
|
|
"avoids": {},
|
|
|
"risk_profile": "unknown",
|
|
|
"capabilities": [],
|
|
|
+ # These fields are the minimum contract Hermes needs for safe strategy
|
|
|
+ # supervision and switching. They describe how a strategy behaves with
|
|
|
+ # inventory, whether rebalancing is needed around lifecycle transitions,
|
|
|
+ # and whether the strategy can coexist with companions.
|
|
|
+ "role": "primary",
|
|
|
+ "inventory_behavior": "unknown",
|
|
|
+ "requires_rebalance_before_start": False,
|
|
|
+ "requires_rebalance_before_stop": False,
|
|
|
+ "safe_when_unbalanced": True,
|
|
|
+ "can_run_with": [],
|
|
|
}
|
|
|
TICK_MINUTES: float = 1.0
|
|
|
|
|
|
@@ -97,6 +107,18 @@ class Strategy:
|
|
|
"execution_quality": None,
|
|
|
"stress": None,
|
|
|
},
|
|
|
+ # Hermes-facing supervision hints. Individual strategies can fill
|
|
|
+ # these out more precisely over time, but the normalized shape stays
|
|
|
+ # stable for the decision layer.
|
|
|
+ "supervision": {
|
|
|
+ "health": "unknown",
|
|
|
+ "degraded": False,
|
|
|
+ "inventory_pressure": "unknown",
|
|
|
+ "capacity_available": None,
|
|
|
+ "switch_readiness": "unknown",
|
|
|
+ "last_reason": None,
|
|
|
+ "desired_companion": None,
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
def render(self):
|