ever-brain / brain /templates /workspace_runtime.py
AlexKurian's picture
Final Clean Deploy
a02272f
Raw
History Blame Contribute Delete
2.23 kB
"""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