"""Workspace runtime generation — the .brain/ bridge directory.""" import json from pathlib import Path def generate_workspace_runtime( workspace_brain_dir: Path, brain_name: str, brain_path: Path, project_name: str = "", ) -> None: """Create the .brain/ workspace runtime with all metadata files.""" workspace_brain_dir.mkdir(parents=True, exist_ok=True) # linked_brain — absolute path to Brain Instance (workspace_brain_dir / "linked_brain").write_text( str(brain_path.resolve()), encoding="utf-8" ) # current_project — project identity (empty until attach) (workspace_brain_dir / "current_project").write_text( project_name, encoding="utf-8" ) # BRAIN.json — machine-readable metadata version = _get_current_version(brain_path) brain_json = { "brain": brain_name, "project": project_name, "version": version, "brain_path": str(brain_path.resolve()), } (workspace_brain_dir / "BRAIN.json").write_text( json.dumps(brain_json, indent=2), encoding="utf-8" ) # runtime/ — ephemeral session metadata (non-authoritative) runtime_dir = workspace_brain_dir / "runtime" runtime_dir.mkdir(exist_ok=True) session_file = runtime_dir / "session.md" if not session_file.exists(): session_file.write_text( "# Session\n\n## Started\n\n## Agent\n\n## Notes\n", encoding="utf-8", ) # AGENT.md — generated workspace-specific protocol from brain.templates.agent_protocol import generate_agent_md agent_md = generate_agent_md(brain_name, brain_path, project_name) (workspace_brain_dir / "AGENT.md").write_text(agent_md, encoding="utf-8") def _get_current_version(brain_path: Path) -> str: """Determine the current version label from versions/ directory.""" versions_dir = brain_path / "versions" if not versions_dir.exists(): return "v0" version_dirs = sorted( [d for d in versions_dir.iterdir() if d.is_dir() and d.name.startswith("v")], key=lambda d: int(d.name[1:]) if d.name[1:].isdigit() else 0, ) if not version_dirs: return "v0" return version_dirs[-1].name