Spaces:
Sleeping
Sleeping
File size: 5,386 Bytes
df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 37b748e df55394 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | """ever-brain init — Interactive project initialization wizard."""
from pathlib import Path
import typer
from rich.console import Console
from rich.panel import Panel
from rich.text import Text
from brain.paths import get_global_projects_dir, get_brains_dir, get_global_brains_dir
from brain.utils.display import success, info, error
from brain.commands.create import create as create_brain
from brain.commands.persona import set_persona
console = Console()
def init() -> None:
"""Initialize Ever Brain for the current project."""
console.print(Panel(
Text("Ever Brain Initialization Wizard", style="bold cyan"),
subtitle="A Cognition Operating System for AI Agents"
))
# 1. Storage Mode
console.print("\n[bold]1. Project Storage Mode[/bold]")
console.print("Choose where to store this project's memory (docs, logs, tasks):")
console.print(" [1] Local (.brain/ folder in this project) - Best for portability & Git")
console.print(" [2] Global (~/.ever-brain/workspaces/...) - Best for a clean project folder")
choice = typer.prompt("Select option", default="1")
is_local = choice == "1"
# 2. Core Brain Location
console.print("\n[bold]2. Core Brain Location[/bold]")
console.print("Choose where the 'Core Brain' (personas, global history) should live:")
console.print(" [1] Global (~/.ever-brain/brains/) - Shared across all your projects")
console.print(" [2] Local (.brains/ folder) - Isolated strictly to this project")
brain_loc_choice = typer.prompt("Select option", default="1")
is_brain_local = brain_loc_choice == "2"
if is_brain_local:
brains_dir = Path.cwd() / ".brains"
brains_dir.mkdir(exist_ok=True)
else:
brains_dir = get_global_brains_dir()
# 3. Brain Selection
console.print("\n[bold]3. Core Brain Selection[/bold]")
console.print(f"Which brain in [cyan]{brains_dir}[/cyan] should handle this project?")
# List existing brains
existing_brains = []
if brains_dir.exists():
existing_brains = [d.name for d in brains_dir.iterdir() if d.is_dir()]
options = []
if "work-brain" not in existing_brains:
options.append("Create 'work-brain'")
else:
options.append("Use existing 'work-brain'")
if "personal-brain" not in existing_brains:
options.append("Create 'personal-brain'")
else:
options.append("Use existing 'personal-brain'")
options.append("Create custom brain")
for i, opt in enumerate(options, 1):
console.print(f" [{i}] {opt}")
brain_choice = typer.prompt("Select option", default="1")
selected_brain = ""
idx = int(brain_choice) - 1
if idx < len(options):
opt_text = options[idx]
if "work-brain" in opt_text:
selected_brain = "work-brain"
elif "personal-brain" in opt_text:
selected_brain = "personal-brain"
else:
selected_brain = typer.prompt("Enter name for custom brain")
# Create brain if it doesn't exist
brain_path = brains_dir / selected_brain
if not brain_path.exists():
info(f"Creating new core brain: {selected_brain}")
# Pass the specific directory to create to ensure it respects our choice
from brain.templates.brain_instance import scaffold_brain_instance
scaffold_brain_instance(brain_path)
success(f"Ever Brain instance '{selected_brain}' created at {brain_path}")
# 4. Persona Selection
console.print("\n[bold]4. Persona Selection[/bold]")
console.print("Choose an initial persona (you can change this later):")
console.print(" [1] Architect (Software Engineering specialist)")
console.print(" [2] Researcher (Data & Synthesis specialist)")
console.print(" [3] General (Standard Assistant)")
persona_choice = typer.prompt("Select option", default="1")
persona_map = {"1": "architect", "2": "researcher", "3": "general"}
selected_persona = persona_map.get(persona_choice, "general")
# 5. Finalizing
project_name = Path.cwd().name
from brain.config import set_active_brain, set_storage_mode
if is_local:
workspace_dir = Path.cwd() / ".brain"
workspace_dir.mkdir(exist_ok=True)
# Store current project link
(workspace_dir / "current_project").write_text(project_name, encoding="utf-8")
set_storage_mode("local")
success(f"Initialized Local storage in [cyan]{workspace_dir}[/cyan]")
else:
# Create global project marker locally
(Path.cwd() / ".ever-brain").write_text(f"project: {project_name}\nmode: global", encoding="utf-8")
set_storage_mode("global")
# Workspace dir will be resolved by get_workspace_dir() later
success(f"Initialized Global storage (Local folder stays clean)")
# Set the brain as active for this project
set_active_brain(brain_path)
# Apply persona
set_persona(selected_persona)
console.print("\n[bold green]SUCCESS![/bold green] Ever Brain is ready.")
info(f"Active Brain: {selected_brain} ({'Local' if is_brain_local else 'Global'})")
info(f"Storage Mode: {'Local' if is_local else 'Global'}")
info(f"Persona: {selected_persona}")
info("Next step: Run 'ever-brain status'")
|