diff --git a/conductor/tracks.md b/conductor/tracks.md index 72b60f5..7b22d81 100644 --- a/conductor/tracks.md +++ b/conductor/tracks.md @@ -105,6 +105,10 @@ This file tracks all major tracks for the project. Each track has its own detail *Link: [./tracks/agent_personas_20260309/](./tracks/agent_personas_20260309/)* *Goal: Consolidate model settings, prompts, and tool presets into a unified "Persona" model with granular MMA assignment.* +5. [ ] **Track: Advanced Workspace Docking & Layout Profiles** + *Link: [./tracks/workspace_profiles_20260310/](./tracks/workspace_profiles_20260310/)* + *Goal: Expand layout preset logic to allow users to save and switch between named workspace configurations.* + --- ### Model Providers diff --git a/conductor/tracks/workspace_profiles_20260310/index.md b/conductor/tracks/workspace_profiles_20260310/index.md new file mode 100644 index 0000000..d6c4512 --- /dev/null +++ b/conductor/tracks/workspace_profiles_20260310/index.md @@ -0,0 +1,5 @@ +# Track workspace_profiles_20260310 Context + +- [Specification](./spec.md) +- [Implementation Plan](./plan.md) +- [Metadata](./metadata.json) diff --git a/conductor/tracks/workspace_profiles_20260310/metadata.json b/conductor/tracks/workspace_profiles_20260310/metadata.json new file mode 100644 index 0000000..b952e6b --- /dev/null +++ b/conductor/tracks/workspace_profiles_20260310/metadata.json @@ -0,0 +1,8 @@ +{ + "track_id": "workspace_profiles_20260310", + "type": "feature", + "status": "new", + "created_at": "2026-03-10T00:30:00Z", + "updated_at": "2026-03-10T00:30:00Z", + "description": "Expand layout preset logic to allow users to save and switch between named workspace configurations." +} diff --git a/conductor/tracks/workspace_profiles_20260310/plan.md b/conductor/tracks/workspace_profiles_20260310/plan.md new file mode 100644 index 0000000..fb4548b --- /dev/null +++ b/conductor/tracks/workspace_profiles_20260310/plan.md @@ -0,0 +1,25 @@ +# Implementation Plan: Advanced Workspace Docking & Layout Profiles + +## Phase 1: Data Model & Persistence Engine +- [ ] Task: Create a `WorkspaceProfile` dataclass in `src/models.py` to store INI string, `show_windows` dict, and panel states. +- [ ] Task: Implement `WorkspaceManager` (similar to `PresetManager`) to handle saving/loading profiles from `config.toml` and `project.toml`. +- [ ] Task: Write Tests: Verify the manager correctly merges global and project profiles and serializes the ImGui INI string properly. +- [ ] Task: Conductor - User Manual Verification 'Phase 1: Data Model & Persistence Engine' (Protocol in workflow.md) + +## Phase 2: ImGui State Extraction & Restoration +- [ ] Task: Implement methods in `src/gui_2.py` (or a helper module) to safely capture the current ImGui layout (`imgui.save_ini_settings_to_memory()`). +- [ ] Task: Implement methods to safely restore layout (`imgui.load_ini_settings_from_memory()`) and apply the associated `show_windows` state. +- [ ] Task: Write Tests: Verify using `live_gui` that saving a layout and loading it back does not cause crashes or assertion failures in the ImGui render loop. +- [ ] Task: Conductor - User Manual Verification 'Phase 2: ImGui State Extraction & Restoration' (Protocol in workflow.md) + +## Phase 3: GUI Menu Integration +- [ ] Task: Add a "Layout Profiles" menu under the main "Windows" or "View" menu bar in `src/gui_2.py`. +- [ ] Task: Implement "Save Current Layout" modal (prompting for name and scope: Global/Project). +- [ ] Task: Populate the menu with a dynamically generated list of available profiles to load. +- [ ] Task: Conductor - User Manual Verification 'Phase 3: GUI Menu Integration' (Protocol in workflow.md) + +## Phase 4: Contextual Auto-Switch (Experimental) +- [ ] Task: Add UI in "AI Settings" or "Operations Hub" to enable "Experimental: Auto-switch layout by Tier". +- [ ] Task: Add UI to bind specific profiles to Tiers 1 through 4. +- [ ] Task: Implement the event hook in `AppController` so that when the `active_tier` changes, the bound profile is automatically loaded if the feature is enabled. +- [ ] Task: Conductor - User Manual Verification 'Phase 4: Contextual Auto-Switch (Experimental)' (Protocol in workflow.md) diff --git a/conductor/tracks/workspace_profiles_20260310/spec.md b/conductor/tracks/workspace_profiles_20260310/spec.md new file mode 100644 index 0000000..2cfe8eb --- /dev/null +++ b/conductor/tracks/workspace_profiles_20260310/spec.md @@ -0,0 +1,31 @@ +# Specification: Advanced Workspace Docking & Layout Profiles + +## Overview +Expand the existing GUI window management to support named "Workspace Profiles." This will allow users to save, manage, and instantly switch between complex multi-window, multi-viewport docking arrangements. + +## Functional Requirements +- **Comprehensive State Capture:** + - A Workspace Profile must capture: + - ImGui layout data (positions, sizes, docking nodes) usually stored in `imgui.ini`. + - Window visibility toggles (the `show_windows` dict and popout panel booleans). + - Relevant internal panel state (e.g., active tabs, split sizes if applicable). +- **Storage & Scope:** + - Profiles follow a **Global + Project** inheritance model (similar to prompt presets). Global profiles are stored in `config.toml`, while project-specific profiles are stored in `manual_slop.toml` and can override global ones. + - The system starts blank (no pre-loaded templates). +- **Trigger Mechanisms:** + - **Manual Menu:** A dedicated "Layout Profiles" sub-menu in the main menu bar (under "Windows" or "View") to save, load, and manage profiles. + - **Contextual Auto-Switch (Experimental):** An opt-in setting that automatically switches to a designated profile based on the active MMA Tier or task context (e.g., switching to a "QA" layout when a Tier 4 worker spawns). + +## Non-Functional Requirements +- **ImGui INI Management:** Safely loading and saving raw ImGui INI strings using `imgui.load_ini_settings_from_memory` and `imgui.save_ini_settings_to_memory` without corrupting the active render frame. +- **Graceful Fallback:** If a profile references a window that no longer exists, the layout engine should recover gracefully without crashing. + +## Acceptance Criteria +- [ ] A user can arrange windows, dock them, and save the current state as a named Workspace Profile. +- [ ] Selecting a saved profile instantly re-arranges windows, updates visibility toggles, and restores internal tab states. +- [ ] Profiles can be scoped globally or to a specific project. +- [ ] An experimental toggle allows binding profiles to specific MMA Tiers for automatic switching. + +## Out of Scope +- Creating default templates (users will build their own). +- Synchronizing layouts across different monitor resolutions (ImGui docking handles this best-effort, but pixel-perfect restoration on different hardware is out of scope).