vitya 1dffaae822 feat: Phase 2 — web server, REST API, WebSocket/SSE, UI [v0.2.0]
AsyncEventBridge bridges sync EventEmitter to asyncio consumers.
FastAPI app with session management, discussion control, roles/providers.
WebSocket for real-time events + inject, SSE for read-only streaming.
Minimal dark-theme HTML/JS UI. `meeting-room serve` CLI subcommand.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-04 08:50:04 +03:00
2026-05-03 08:07:35 +00:00
2026-05-03 23:12:18 +03:00

Meeting Room

Multi-agent discussion framework — role-based AI agents debate problems and produce solutions.

Install

git clone <repo-url> meeting-room
cd meeting-room
pip install -e .

# With dev dependencies (pytest, pytest-mock)
pip install -e ".[dev]"

# With web server dependencies (Phase 2)
pip install -e ".[web]"

Quick Start

# Initialize workspace (creates .meeting-room/ in current directory)
meeting-room init

# Run a discussion with default scenario
meeting-room -s example-saas.md

# Run and save result to sessions/
meeting-room -s scenarios/my-problem.md --save

# Cross-LLM code review — point agents at a project
meeting-room -s code-review.md -w /path/to/project

# List available scenarios and roles
meeting-room --list-scenarios
meeting-room --list-roles

Workspace Structure

.meeting-room/
├── config.yaml       — override default config (roles, providers, tools)
├── scenarios/        — your .md scenario files
│   └── example.md
├── sessions/         — saved discussion results (gitignored)
└── .gitignore

Commands

meeting-room init [path]                      # Create .meeting-room workspace
meeting-room -s scenarios/my.md               # Run discussion
meeting-room -s scenarios/my.md --save        # Run and save result
meeting-room -s code-review.md -w /path       # Code review on a project
meeting-room --list-scenarios                 # Show available scenarios
meeting-room --list-roles                     # Show roles and model bindings
meeting-room -c /path/to/config.yaml -s ...   # Custom config file
meeting-room -w /path/to/project -s ...       # Set workdir for file tools

Built-in Scenarios

Scenario Description
example-saas.md General discussion: SaaS architecture with moderator/skeptic/idea_generator/analyst
code-review.md Cross-LLM code review with defender/attacker/security/moderator

Architecture (v2)

┌──────────┐    events     ┌───────────────┐
│   CLI    │◄────────────│  DiscussionEngine  │
│ (ANSI)   │             │  (event-driven)    │
└──────────┘             └───────┬───────┘
                                 │
                    ┌────────────┼────────────┐
                    ▼            ▼            ▼
              ┌──────────┐ ┌──────────┐ ┌──────────┐
              │ APIClient│ │ToolRegistry│ │EventEmitter│
              └──────────┘ └──────────┘ └──────────┘
  • DiscussionEngine — orchestrates round-robin discussion, emits events (no print calls)
  • APIClient — class-based, multi-provider (OpenAI-compatible APIs)
  • ToolRegistry — class-based, pure Python (Windows compatible)
  • EventEmitter — synchronous pub/sub bus (Phase 2: AsyncEventBridge for WebSocket)
  • Pydantic v2 models — typed config, messages, sessions

Configuration

Config Search Order

  1. --config CLI argument
  2. .meeting-room/config.yaml (searched from CWD upward)
  3. Built-in package defaults

API Keys

Set via environment variables:

export MEETING_ROOM_ROUTERAI_API_KEY="sk-..."
export MEETING_ROOM_ROUTERAI_BASE_URL="https://routerai.ru/api/v1"
export MEETING_ROOM_OPENAI_API_KEY="sk-..."
export MEETING_ROOM_ANTHROPIC_API_KEY="sk-ant-..."
export MEETING_ROOM_DEEPSEEK_API_KEY="sk-..."

Or use ${ENV_VAR} placeholders in config.yaml.

Roles

Each role binds to a provider + model + tool set:

roles:
  defender:
    name: "Defender"
    provider: anthropic       # one LLM defends
    model: "claude-sonnet-4-6"
    tools: "readonly"

  attacker:
    name: "Attacker"
    provider: openai          # another LLM attacks
    model: "gpt-4o"
    tools: "readonly"

  security:
    name: "Security"
    provider: deepseek        # third LLM checks security
    model: "deepseek-chat"
    tools: "web"

Tool Sets

Set Tools
all/full Everything (files + web + commands)
files read_file, list_files, search_in_files, write_file
readonly read_file, list_files, search_in_files
web web_search, web_fetch
none No tools, text only
(list) ["read_file", "web_search"] — custom mix

Scenarios

Markdown with YAML frontmatter:

---
name: "My Problem"
participants:
  - moderator
  - skeptic
  - idea_generator
  - analyst
max_rounds: 6
---

# The Problem

Full Markdown description...

## Context
- Budget: $50K
- Team: 3 people

## Questions
1. What tech stack?
2. How to scale?

Roadmap

  • Phase 1: Core refactor — Pydantic models, EventEmitter, class-based APIClient/ToolRegistry, DiscussionEngine, backward-compatible CLI
  • Phase 2: Web server — FastAPI + WebSocket + SSE, REST API, minimal HTML UI, meeting-room serve
  • Phase 3: Interactivity — Boss role, CSO injection, Setup Wizard, BrainstormEngine
  • Phase 4: Artifacts — LLM extraction → .tasks/.wiki, SessionArchive

License

MIT

Description
Multi-agent discussion framework — role-based AI agents debate problems and produce solutions
Readme 192 KiB
Languages
Python 94.4%
HTML 5.6%