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)
This commit is contained in:
60
meeting_room/scenario_loader.py
Normal file
60
meeting_room/scenario_loader.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user