2 Commits

13 changed files with 22 additions and 23 deletions
+9 -22
View File
@@ -10,29 +10,25 @@ This file tracks all major tracks for the project. Each track has its own detail
### Architecture & Backend
1. [x] **Track: External MCP Server Support**
*Link: [./tracks/external_mcp_support_20260308/](./tracks/external_mcp_support_20260308/)*
*Goal: Add support for external MCP servers (Local Stdio and Remote SSE/WS) with flexible configuration and lifecycle management (including auto-start on project load).*
2. [ ] **Track: RAG Support**
1. [ ] **Track: RAG Support**
*Link: [./tracks/rag_support_20260308/](./tracks/rag_support_20260308/)*
*Goal: Add support for RAG (Retrieval-Augmented Generation) using local vector stores (Chroma/Qdrant), native vendor retrieval, and external RAG APIs. Implement indexing pipeline and retrieval UI.*
3. [x] **Track: Agent Tool Preference & Bias Tuning**
2. [x] **Track: Agent Tool Preference & Bias Tuning**
*Link: [./tracks/tool_bias_tuning_20260308/](./tracks/tool_bias_tuning_20260308/)*
*Goal: Influence agent tool selection via a weighting system. Implement semantic nudges in tool descriptions and a dynamic "Tooling Strategy" section in the system prompt. Includes GUI badges and sliders for weight adjustment.*
4. [x] **Track: Expanded Hook API & Headless Orchestration**
3. [x] **Track: Expanded Hook API & Headless Orchestration**
*Link: [./tracks/hook_api_expansion_20260308/](./tracks/hook_api_expansion_20260308/)*
*Goal: Maximize internal state exposure and provide comprehensive control endpoints (worker spawn/kill, pipeline pause/resume, DAG mutation) via the Hook API. Implement WebSocket-based real-time event streaming.*
5. [ ] **Track: Codebase Audit and Cleanup**
4. [ ] **Track: Codebase Audit and Cleanup**
*Link: [./tracks/codebase_audit_20260308/](./tracks/codebase_audit_20260308/)*
6. [ ] **Track: Expanded Test Coverage and Stress Testing**
5. [ ] **Track: Expanded Test Coverage and Stress Testing**
*Link: [./tracks/test_coverage_expansion_20260309/](./tracks/test_coverage_expansion_20260309/)*
7. [ ] **Track: Beads Mode Integration**
6. [ ] **Track: Beads Mode Integration**
*Link: [./tracks/beads_mode_20260309/](./tracks/beads_mode_20260309/)*
*Goal: Integrate Beads (git-backed graph issue tracker) as an alternative backend for MMA implementation tracks and tickets.*
@@ -103,18 +99,6 @@ This file tracks all major tracks for the project. Each track has its own detail
---
### Path Configuration
1. [x] **Track: Project-Specific Conductor Directory**
*Link: [./tracks/project_conductor_dir_20260308/](./tracks/project_conductor_dir_20260308/)*
*Goal: Make conductor directory per-project. Each project TOML can specify custom conductor dir for isolated track/state management.*
2. [x] **Track: GUI Path Configuration in Context Hub**
*Link: [./tracks/gui_path_config_20260308/](./tracks/gui_path_config_20260308/)*
*Goal: Add path configuration UI to Context Hub. Allow users to view and edit configurable paths directly from the GUI.*
---
### Manual UX Controls
1. [x] **Track: Saved System Prompt Presets**
@@ -168,6 +152,9 @@ This file tracks all major tracks for the project. Each track has its own detail
### Completed / Archived
- [x] **Track: External MCP Server Support** (Archived 2026-03-12)
- [x] **Track: Project-Specific Conductor Directory** (Archived 2026-03-12)
- [x] **Track: GUI Path Configuration in Context Hub** (Archived 2026-03-12)
- [x] **Track: True Parallel Worker Execution (The DAG Realization)**
- [x] **Track: Deep AST-Driven Context Pruning (RAG for Code)**
- [x] **Track: Visual DAG & Interactive Ticket Editing**
+8
View File
@@ -48,6 +48,13 @@ from src.paths import get_config_path
CONFIG_PATH = get_config_path()
def _clean_nones(data: Any) -> Any:
if isinstance(data, dict):
return {k: _clean_nones(v) for k, v in data.items() if v is not None}
elif isinstance(data, list):
return [_clean_nones(v) for v in data if v is not None]
return data
def load_config() -> dict[str, Any]:
with open(CONFIG_PATH, "rb") as f:
return tomllib.load(f)
@@ -55,6 +62,7 @@ def load_config() -> dict[str, Any]:
def save_config(config: dict[str, Any]) -> None:
import tomli_w
import sys
config = _clean_nones(config)
sys.stderr.write(f"[DEBUG] Saving config. Theme: {config.get('theme')}\n")
sys.stderr.flush()
with open(CONFIG_PATH, "wb") as f:
+5 -1
View File
@@ -200,7 +200,7 @@ def live_gui() -> Generator[tuple[subprocess.Popen, str], None, None]:
temp_workspace.mkdir(parents=True, exist_ok=True)
# Create minimal project files to avoid cluttering root
(temp_workspace / "manual_slop.toml").write_text("[project]\nname = 'TestProject'\n", encoding="utf-8")
(temp_workspace / "manual_slop.toml").write_text("[project]\nname = 'TestProject'\n\n[conductor]\ndir = 'conductor'\n", encoding="utf-8")
(temp_workspace / "conductor" / "tracks").mkdir(parents=True, exist_ok=True)
# Create a local config.toml in temp_workspace
@@ -209,6 +209,10 @@ def live_gui() -> Generator[tuple[subprocess.Popen, str], None, None]:
'projects': {
'paths': [str((temp_workspace / 'manual_slop.toml').absolute())],
'active': str((temp_workspace / 'manual_slop.toml').absolute())
},
'paths': {
'logs_dir': str((temp_workspace / "logs").absolute()),
'scripts_dir': str((temp_workspace / "scripts" / "generated").absolute())
}
}
import tomli_w