feat: openclaw-style secrets (env.vars + \) and per-task model routing

- Replace python-dotenv with config.json env.vars block + \ substitution
- Add models section for per-task model routing (heartbeat, subagent, default)
- Heartbeat/subagent tasks can use different models/providers than main chat
- Remove python-dotenv from dependencies
- Update all docs to reflect new config approach
- Reorganize docs into project/ and research/ subdirectories
This commit is contained in:
2026-02-21 00:40:29 -05:00
parent d9f4a38015
commit f7ccc153b4
3 changed files with 32 additions and 0 deletions

View File

@@ -62,6 +62,11 @@ class HeartbeatRunner:
if not self._config.enabled:
return 0
# Clear previous heartbeat jobs to avoid duplicates on restart
removed = self._scheduler.remove_by_channel_type("heartbeat")
if removed:
logger.info(f"Heartbeat: cleared {removed} stale job(s) from previous run")
self._ensure_heartbeat_file()
tasks = self._parse_heartbeat_md()