feat(conductor): Implement configurable paths and mark track 'Conductor Path Configuration' as complete
This commit is contained in:
@@ -17,6 +17,7 @@ from fastapi.security.api_key import APIKeyHeader
|
||||
from pydantic import BaseModel
|
||||
|
||||
from src import events
|
||||
from src import paths
|
||||
from src import session_logger
|
||||
from src import project_manager
|
||||
from src import performance_monitor
|
||||
@@ -640,7 +641,7 @@ class AppController:
|
||||
root = hide_tk_root()
|
||||
path = filedialog.askopenfilename(
|
||||
title="Load Session Log",
|
||||
initialdir="logs/sessions",
|
||||
initialdir=str(paths.get_logs_dir()),
|
||||
filetypes=[("Log/JSONL", "*.log *.jsonl"), ("All Files", "*.*")]
|
||||
)
|
||||
root.destroy()
|
||||
@@ -671,8 +672,8 @@ class AppController:
|
||||
try:
|
||||
from src import log_registry
|
||||
from src import log_pruner
|
||||
registry = log_registry.LogRegistry("logs/sessions/log_registry.toml")
|
||||
pruner = log_pruner.LogPruner(registry, "logs/sessions")
|
||||
registry = log_registry.LogRegistry(str(paths.get_logs_dir() / "log_registry.toml"))
|
||||
pruner = log_pruner.LogPruner(registry, str(paths.get_logs_dir()))
|
||||
# Aggressive: Prune anything not whitelisted, even if just created, if under 100KB
|
||||
# Note: max_age_days=0 means cutoff is NOW.
|
||||
pruner.prune(max_age_days=0, min_size_kb=100)
|
||||
@@ -715,8 +716,8 @@ class AppController:
|
||||
try:
|
||||
from src import log_registry
|
||||
from src import log_pruner
|
||||
registry = log_registry.LogRegistry("logs/sessions/log_registry.toml")
|
||||
pruner = log_pruner.LogPruner(registry, "logs/sessions")
|
||||
registry = log_registry.LogRegistry(str(paths.get_logs_dir() / "log_registry.toml"))
|
||||
pruner = log_pruner.LogPruner(registry, str(paths.get_logs_dir()))
|
||||
pruner.prune()
|
||||
except Exception as e:
|
||||
print(f"Error during log pruning: {e}")
|
||||
@@ -1238,7 +1239,7 @@ class AppController:
|
||||
@api.get("/api/v1/sessions", dependencies=[Depends(get_api_key)])
|
||||
def list_sessions() -> list[str]:
|
||||
"""Lists all session IDs."""
|
||||
log_dir = Path("logs/sessions")
|
||||
log_dir = paths.get_logs_dir()
|
||||
if not log_dir.exists():
|
||||
return []
|
||||
return [d.name for d in log_dir.iterdir() if d.is_dir()]
|
||||
@@ -1246,7 +1247,7 @@ class AppController:
|
||||
@api.get("/api/v1/sessions/{session_id}", dependencies=[Depends(get_api_key)])
|
||||
def get_session(session_id: str) -> dict[str, Any]:
|
||||
"""Returns the content of the comms.log for a specific session."""
|
||||
log_path = Path("logs/sessions") / session_id / "comms.log"
|
||||
log_path = paths.get_logs_dir() / session_id / "comms.log"
|
||||
if not log_path.exists():
|
||||
raise HTTPException(status_code=404, detail="Session log not found")
|
||||
return {"id": session_id, "content": log_path.read_text(encoding="utf-8", errors="replace")}
|
||||
@@ -1254,7 +1255,7 @@ class AppController:
|
||||
@api.delete("/api/v1/sessions/{session_id}", dependencies=[Depends(get_api_key)])
|
||||
def delete_session(session_id: str) -> dict[str, str]:
|
||||
"""Deletes a specific session directory."""
|
||||
log_path = Path("logs/sessions") / session_id
|
||||
log_path = paths.get_logs_dir() / session_id
|
||||
if not log_path.exists() or not log_path.is_dir():
|
||||
raise HTTPException(status_code=404, detail="Session directory not found")
|
||||
import shutil
|
||||
@@ -1904,9 +1905,9 @@ class AppController:
|
||||
self.event_queue.put("mma_skip", {"ticket_id": ticket_id})
|
||||
|
||||
def _cb_run_conductor_setup(self) -> None:
|
||||
base = Path("conductor")
|
||||
base = paths.get_conductor_dir()
|
||||
if not base.exists():
|
||||
self.ui_conductor_setup_summary = "Error: conductor/ directory not found."
|
||||
self.ui_conductor_setup_summary = f"Error: {base}/ directory not found."
|
||||
return
|
||||
files = list(base.glob("**/*"))
|
||||
files = [f for f in files if f.is_file()]
|
||||
@@ -1934,7 +1935,7 @@ class AppController:
|
||||
if not name: return
|
||||
date_suffix = datetime.now().strftime("%Y%m%d")
|
||||
track_id = f"{name.lower().replace(' ', '_')}_{date_suffix}"
|
||||
track_dir = Path("conductor/tracks") / track_id
|
||||
track_dir = paths.get_tracks_dir() / track_id
|
||||
track_dir.mkdir(parents=True, exist_ok=True)
|
||||
spec_file = track_dir / "spec.md"
|
||||
with open(spec_file, "w", encoding="utf-8") as f:
|
||||
|
||||
Reference in New Issue
Block a user