Agent struct now carries host (where the agent registered from) and
last_seen (last heartbeat/re-register timestamp). The SQL columns
existed since the Phase 3 schema commit but were never read or
written — Rust ignored them.
Changes:
- Agent struct: +host: Option<String>, +last_seen: Option<String>
- register_agent: un-underscore host arg, INSERT/read it
- get_agent / list_agents: SELECT host + last_seen columns
- Store::heartbeat(): UPDATE last_seen + COALESCE host
- ColibriCommand: +Heartbeat variant, +host on RegisterAgent
- cmd_heartbeat: socket dispatch → store heartbeat
- run_migrations: actually execute MIGRATIONS (was defined but never run)
- All test Agent constructions updated
What's still open per the plan: lease/TTL semantics, daemon heartbeat
tick calling the store, offline detection for stale agents.
Those are follow-up slices — the schema + wiring foundation is in.