Old prompt had no instructions for when/how to use @CREATE_SUBTASK during chat,
no list of available agents by key name, and no guidance on handling conversational
messages. Orchestrator was answering questions but never creating tasks or taking
actions autonomously.
- Wire up Telegram bot with token, allowed users and username from .env
- Fix TaskBeat to handle direct tasks (Telegram/email) without sub_tasks
- Fix send_telegram_message to use run_coroutine_threadsafe (avoid event loop clash)
- Add TaskBeat watchdog thread for auto-restart on crash
- Reset stuck in_progress tasks on startup
- Add task detail page (/tasks/<id>) with full response/log view and auto-refresh
- Add task delete route (/tasks/delete/<id>) with confirmation
- Include agent sender info in Telegram task prompts
- Orchestrator self-updated knowledge base with Telegram contact info
- Move knowledge base from root to agents/orchestrator/knowledge/
- Move orphaned files (AKM, Event-Plan) to orchestrator/work/
- Update all kb_file paths to new location
- Change orchestrator stream to use work_dir instead of root
- Now ALL agents (including orchestrator) work in their own folders
- No more files created in project root
- Consistent work directory behavior across all agents
- Replace blocking execute_agent_task() with live subprocess streaming
- Use Popen() to read opencode output line-by-line in real-time
- Send 'chunk' events to frontend as agent thinks
- Frontend appends chunks incrementally for live response
- Matches Orchestrator's streaming UX
- No more waiting for complete response before seeing output
- Change Dark Mode accent from blue to purple (#a855f7)
- Balance dark backgrounds to match Light Mode structure
- bg-base: #1a1a1a (was #0f0f0f - too dark)
- bg-surface: #212121 (more balanced)
- Improved contrast and readability
- Update borders to be more visible (12% vs 8% opacity)
- Adjust agent colors for purple theme:
- Orchestrator: Purple
- Researcher: Green
- Negotiator: Orange
- AR Manager: Yellow
- Update Settings description: 'Violett' instead of 'Blau'
- Dark Mode now mirrors Light Mode balance (just inverted)