Files
meeting-room/meeting_room/scenario_loader.py
Hermes 99cb5a499b Initial commit: Meeting Room v0.1.0
Multi-agent discussion framework:
- Custom/AutoGen/CrewAI backends
- Multi-provider API (role→model binding)
- Tools system (files, web, commands)
- Markdown scenarios with YAML frontmatter
- Workspace init (meeting-room init)
- Session save (--save)
2026-05-03 08:07:35 +00:00

61 lines
1.8 KiB
Python

"""Scenario loader — supports .md (frontmatter + markdown) and .yaml."""
import os
import re
import yaml
def load_scenario(path: str) -> dict:
with open(path, encoding="utf-8") as f:
content = f.read()
if path.endswith((".md", ".markdown")):
return _parse_markdown(content)
elif path.endswith((".yaml", ".yml")):
return yaml.safe_load(content)
else:
try:
return _parse_markdown(content)
except Exception:
return yaml.safe_load(content)
def _parse_markdown(content: str) -> dict:
match = re.match(r"^---\s*\n(.*?)\n---\s*\n(.*)", content, re.DOTALL)
if not match:
raise ValueError("No YAML frontmatter found. Expected --- at the top.")
meta = yaml.safe_load(match.group(1))
body = match.group(2).strip()
meta["problem"] = body
if "name" not in meta:
meta["name"] = "Без названия"
return meta
def list_scenarios(scenarios_dir: str) -> list[dict]:
results = []
if not os.path.isdir(scenarios_dir):
return results
for fname in sorted(os.listdir(scenarios_dir)):
if not fname.endswith((".md", ".markdown", ".yaml", ".yml")):
continue
path = os.path.join(scenarios_dir, fname)
try:
data = load_scenario(path)
results.append({
"file": fname,
"path": path,
"name": data.get("name", "Без названия"),
"participants": data.get("participants", []),
})
except Exception as e:
results.append({
"file": fname,
"path": path,
"name": f"[Ошибка: {e}]",
"participants": [],
})
return results