2026-03-11
- Implemented per-person daily logs: Discord username → person mapping, per-person LLM summaries, Firebase push, website person pill UI with edit/save/revert support
- Added
DISCORD_TO_PERSON mapping (13 participants) and generate_person_summaries() to discord_daily_log.py - Added
--skip-person-logs CLI flag - Added person selector pills to
scenario_template.html with .person-pill CSS, getLogSource() path abstraction for person-aware edit/save/revert - Rebuilt
index.html - Backfilled person logs for March 9 (13 people, 8873 msgs) and March 10 (13 people, 6851 msgs) to Firebase
- Implemented agent creation and deletion from website: new
POST /agents/create, POST /agents/{id}/delete, POST /validate-discord-token endpoints in proxy API - Added persistent volume mount to proxy
fly.toml (proxy_data → /data) for dynamic agents.json storage - Create flow: validates Discord token, derives client_id, provisions Fly app + volume + machine (zero-build, clones image from existing agent), generates keys, writes Firebase, returns invite URLs
- Delete flow: soft-delete — stops machines, marks deleted in Firebase, removes from AgentDB
- Added Create Agent modal UI to website Agents tab: 3-step wizard (identity → Discord token → workspace editor)
- Added Delete Agent confirmation dialog for dynamically created agents
- Rebuilt
index.html from updated template - Added website regression tests for create-agent Testland invite links, create-agent workspace/default wiring, and daily-log people/bots UI pathing/drilldown behavior
- Relaxed brittle website/template tests to focus on stable contracts instead of exact JS structure, fixed catalog-size/file-length/font false positives, and re-ran the full test suite cleanly
- Replaced workspace templates (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md) with OpenClaw official defaults + Mangrove-specific additions only
- Hotpatched new templates to all running bots (13/14, negevbot stopped):
- AGENTS.md + SOUL.md + TOOLS.md → fredbot, bijanbot, eunjeongbot, charlesbot (stock, full overwrite)
- AGENTS.md + TOOLS.md → alexbot, barisbot, giobot, jannikbot (SOUL.md has participant customizations, skipped)
- TOOLS.md only → adityabot, woogbot, jasminebot (heavy SOUL.md/AGENTS.md customizations preserved)
- AGENTS.md + TOOLS.md → tessio, corleone (separate SOUL templates)
- All hotpatch backups committed to git before each push
- Updated create-agent modal to use new OpenClaw-based workspace templates with `` substitution system
- Added agent table sort order: running → stopped → deleted, then free-for-all last, then alphabetical
- Added “add to server” column in agents table with Discord invite links via new
GET /agents/{id}/invite-links proxy endpoint - Deployed proxy with create/delete/invite-links endpoints
- Critical bug fix:
generate_openclaw_config() was generating invalid OpenClaw schema — requireMention, mentionPatterns, historyLimit, dm, vision were under agents.defaults (invalid) and model config missing name field. Rewrote to match alexbot’s working config. - Critical bug fix:
openclaw doctor --fix (run by entrypoint.sh) strips the name field from model config, causing gateway validation failure. New dynamic agents now use init.entrypoint that bypasses entrypoint.sh and runs openclaw gateway directly. - Fixed negevbot20 and negevbot3 (Negev’s dynamically created bots) — both were offline on Discord due to broken openclaw.json. Fixed by: (1) writing corrected config via SSH, (2) updating
OPENCLAW_CONFIG_B64 env var via Fly Machines API, (3) restarting machines. Both now online. - Updated
fly_create_machine() init_script to skip entrypoint.sh/doctor, write to /data/openclaw.json (not /app/), and include git init, approvals, snapshot daemon setup