feat: Add evaluation hooks, skill adaptation and team pipeline config

- Add EvaluationHook for post-execution agent evaluation
- Add SkillAdaptationHook for dynamic skill adaptation
- Add team/ directory with team coordination logic
- Add TEAM_PIPELINE.yaml for smoke_fullstack pipeline config
- Update RuntimeView, TraderView and RuntimeSettingsPanel UI
- Add runtimeApi and websocket services
- Add runtime_state.json to smoke_fullstack state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 18:52:12 +08:00
parent f4a2b7f3af
commit 4b5ac86b83
87 changed files with 5042 additions and 744 deletions

View File

@@ -48,6 +48,14 @@ CREATE TABLE IF NOT EXISTS signals (
signal TEXT,
confidence REAL,
reasoning_json TEXT,
reasons_json TEXT,
risks_json TEXT,
invalidation TEXT,
next_action TEXT,
intrinsic_value REAL,
fair_value_range_json TEXT,
value_gap_pct REAL,
valuation_methods_json TEXT,
real_return REAL,
is_correct TEXT,
trade_date TEXT,
@@ -270,8 +278,10 @@ class RuntimeDb:
"""
INSERT OR REPLACE INTO signals
(id, ticker, agent_id, agent_name, role, signal, confidence, reasoning_json,
reasons_json, risks_json, invalidation, next_action, intrinsic_value,
fair_value_range_json, value_gap_pct, valuation_methods_json,
real_return, is_correct, trade_date, created_at, meta_json)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
signal_id,
@@ -282,6 +292,14 @@ class RuntimeDb:
payload.get("signal"),
payload.get("confidence"),
_json_dumps(payload.get("reasoning")),
_json_dumps(payload.get("reasons")),
_json_dumps(payload.get("risks")),
payload.get("invalidation"),
payload.get("next_action"),
payload.get("intrinsic_value"),
_json_dumps(payload.get("fair_value_range")),
payload.get("value_gap_pct"),
_json_dumps(payload.get("valuation_methods")),
payload.get("real_return"),
None if payload.get("is_correct") is None else str(payload.get("is_correct")),
payload.get("date"),
@@ -313,8 +331,10 @@ class RuntimeDb:
"""
INSERT INTO signals
(id, ticker, agent_id, agent_name, role, signal, confidence, reasoning_json,
reasons_json, risks_json, invalidation, next_action, intrinsic_value,
fair_value_range_json, value_gap_pct, valuation_methods_json,
real_return, is_correct, trade_date, created_at, meta_json)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",
(
signal_id,
@@ -325,6 +345,14 @@ class RuntimeDb:
payload.get("signal"),
payload.get("confidence"),
_json_dumps(payload.get("reasoning")),
_json_dumps(payload.get("reasons")),
_json_dumps(payload.get("risks")),
payload.get("invalidation"),
payload.get("next_action"),
payload.get("intrinsic_value"),
_json_dumps(payload.get("fair_value_range")),
payload.get("value_gap_pct"),
_json_dumps(payload.get("valuation_methods")),
payload.get("real_return"),
None if payload.get("is_correct") is None else str(payload.get("is_correct")),
payload.get("date"),
@@ -461,6 +489,18 @@ class RuntimeDb:
else "该信号暂未完成后验评估"
),
"tone": "positive" if str(row["signal"] or "").lower() in {"bullish", "buy", "long"} else "negative" if str(row["signal"] or "").lower() in {"bearish", "sell", "short"} else "neutral",
# Extended signal fields
"signal": row["signal"],
"confidence": row["confidence"],
"reasoning": json.loads(row["reasoning_json"]) if row["reasoning_json"] else None,
"reasons": json.loads(row["reasons_json"]) if row["reasons_json"] else None,
"risks": json.loads(row["risks_json"]) if row["risks_json"] else None,
"invalidation": row["invalidation"],
"next_action": row["next_action"],
"intrinsic_value": row["intrinsic_value"],
"fair_value_range": json.loads(row["fair_value_range_json"]) if row["fair_value_range_json"] else None,
"value_gap_pct": row["value_gap_pct"],
"valuation_methods": json.loads(row["valuation_methods_json"]) if row["valuation_methods_json"] else None,
}
for row in signal_rows
]