feat(cli): add workspace and config flags to agent

This commit is contained in:
Maciej Wojcik
2026-03-06 20:32:10 +00:00
parent 0409d72579
commit 79f3ca4f12
3 changed files with 125 additions and 10 deletions

View File

@@ -9,7 +9,6 @@ from pathlib import Path
# Force UTF-8 encoding for Windows console
if sys.platform == "win32":
import locale
if sys.stdout.encoding != "utf-8":
os.environ["PYTHONIOENCODING"] = "utf-8"
# Re-open stdout/stderr with UTF-8 encoding
@@ -248,6 +247,17 @@ def _make_provider(config: Config):
)
def _load_runtime_config(config: str | None = None, workspace: str | None = None) -> Config:
"""Load config and optionally override the active workspace."""
from nanobot.config.loader import load_config
config_path = Path(config) if config else None
loaded = load_config(config_path)
if workspace:
loaded.agents.defaults.workspace = workspace
return loaded
# ============================================================================
# Gateway / Server
# ============================================================================
@@ -264,7 +274,6 @@ def gateway(
from nanobot.agent.loop import AgentLoop
from nanobot.bus.queue import MessageBus
from nanobot.channels.manager import ChannelManager
from nanobot.config.loader import load_config
from nanobot.cron.service import CronService
from nanobot.cron.types import CronJob
from nanobot.heartbeat.service import HeartbeatService
@@ -274,10 +283,7 @@ def gateway(
import logging
logging.basicConfig(level=logging.DEBUG)
config_path = Path(config) if config else None
config = load_config(config_path)
if workspace:
config.agents.defaults.workspace = workspace
config = _load_runtime_config(config, workspace)
console.print(f"{__logo__} Starting nanobot gateway on port {port}...")
sync_workspace_templates(config.workspace_path)
@@ -448,6 +454,8 @@ def gateway(
def agent(
message: str = typer.Option(None, "--message", "-m", help="Message to send to the agent"),
session_id: str = typer.Option("cli:direct", "--session", "-s", help="Session ID"),
workspace: str | None = typer.Option(None, "--workspace", "-w", help="Workspace directory"),
config: str | None = typer.Option(None, "--config", "-c", help="Config file path"),
markdown: bool = typer.Option(True, "--markdown/--no-markdown", help="Render assistant output as Markdown"),
logs: bool = typer.Option(False, "--logs/--no-logs", help="Show nanobot runtime logs during chat"),
):
@@ -456,10 +464,10 @@ def agent(
from nanobot.agent.loop import AgentLoop
from nanobot.bus.queue import MessageBus
from nanobot.config.loader import get_data_dir, load_config
from nanobot.config.loader import get_data_dir
from nanobot.cron.service import CronService
config = load_config()
config = _load_runtime_config(config, workspace)
sync_workspace_templates(config.workspace_path)
bus = MessageBus()