From abe1c660ea3ebdc1ca216a676f61b8641999f754 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Sun, 22 Mar 2026 12:43:47 -0400 Subject: [PATCH] conductor(tracks): Add two deferred future tracks - aggregation_smarter_summaries: Sub-agent summarization, hash-based caching - system_context_exposure: Expose hidden _SYSTEM_PROMPT for user customization --- conductor/tracks.md | 10 +- .../metadata.json | 17 +++ .../plan.md | 49 +++++++ .../spec.md | 103 +++++++++++++++ .../metadata.json | 16 +++ .../system_context_exposure_20260322/plan.md | 41 ++++++ .../system_context_exposure_20260322/spec.md | 120 ++++++++++++++++++ 7 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 conductor/tracks/aggregation_smarter_summaries_20260322/metadata.json create mode 100644 conductor/tracks/aggregation_smarter_summaries_20260322/plan.md create mode 100644 conductor/tracks/aggregation_smarter_summaries_20260322/spec.md create mode 100644 conductor/tracks/system_context_exposure_20260322/metadata.json create mode 100644 conductor/tracks/system_context_exposure_20260322/plan.md create mode 100644 conductor/tracks/system_context_exposure_20260322/spec.md diff --git a/conductor/tracks.md b/conductor/tracks.md index bdd1dd6..41fc8d7 100644 --- a/conductor/tracks.md +++ b/conductor/tracks.md @@ -35,9 +35,17 @@ This file tracks all major tracks for the project. Each track has its own detail 7. [ ] **Track: Optimization pass for Data-Oriented Python heuristics** *Link: [./tracks/data_oriented_optimization_20260312/](./tracks/data_oriented_optimization_20260312/)* -8. [x] **Track: Rich Thinking Trace Handling** - *Parse and display AI thinking/reasoning traces* + 8. [x] **Track: Rich Thinking Trace Handling** - *Parse and display AI thinking/reasoning traces* *Link: [./tracks/thinking_trace_handling_20260313/](./tracks/thinking_trace_handling_20260313/)* + 9. [ ] **Track: Smarter Aggregation with Sub-Agent Summarization** + *Link: [./tracks/aggregation_smarter_summaries_20260322/](./tracks/aggregation_smarter_summaries_20260322/)* + *Goal: Sub-agent summarization during aggregation pass, hash-based caching for file summaries, smart outline generation for code vs text files.* + + 10. [ ] **Track: System Context Exposure** + *Link: [./tracks/system_context_exposure_20260322/](./tracks/system_context_exposure_20260322/)* + *Goal: Expose hidden _SYSTEM_PROMPT from ai_client.py to users for customization via AI Settings.* + --- ### GUI Overhauls & Visualizations diff --git a/conductor/tracks/aggregation_smarter_summaries_20260322/metadata.json b/conductor/tracks/aggregation_smarter_summaries_20260322/metadata.json new file mode 100644 index 0000000..a2eb45a --- /dev/null +++ b/conductor/tracks/aggregation_smarter_summaries_20260322/metadata.json @@ -0,0 +1,17 @@ +{ + "name": "aggregation_smarter_summaries", + "created": "2026-03-22", + "status": "future", + "priority": "medium", + "affected_files": [ + "src/aggregate.py", + "src/file_cache.py", + "src/ai_client.py", + "src/models.py" + ], + "related_tracks": [ + "discussion_hub_panel_reorganization (in_progress)", + "system_context_exposure (future)" + ], + "notes": "Deferred from discussion_hub_panel_reorganization planning. Improves aggregation with sub-agent summarization and hash-based caching." +} diff --git a/conductor/tracks/aggregation_smarter_summaries_20260322/plan.md b/conductor/tracks/aggregation_smarter_summaries_20260322/plan.md new file mode 100644 index 0000000..ab012fd --- /dev/null +++ b/conductor/tracks/aggregation_smarter_summaries_20260322/plan.md @@ -0,0 +1,49 @@ +# Implementation Plan: Smarter Aggregation with Sub-Agent Summarization + +## Phase 1: Hash-Based Summary Cache +Focus: Implement file hashing and cache storage + +- [ ] Task: Research existing file hash implementations in codebase +- [ ] Task: Design cache storage format (file-based vs project state) +- [ ] Task: Implement hash computation for aggregation files +- [ ] Task: Implement summary cache storage and retrieval +- [ ] Task: Add cache invalidation when file content changes +- [ ] Task: Write tests for hash computation and cache +- [ ] Task: Conductor - User Manual Verification 'Phase 1: Hash-Based Summary Cache' + +## Phase 2: Sub-Agent Summarization +Focus: Implement sub-agent summarization during aggregation + +- [ ] Task: Audit current aggregate.py flow +- [ ] Task: Define summarization prompt strategy for code vs text files +- [ ] Task: Implement sub-agent invocation during aggregation +- [ ] Task: Handle provider-specific differences in sub-agent calls +- [ ] Task: Write tests for sub-agent summarization +- [ ] Task: Conductor - User Manual Verification 'Phase 2: Sub-Agent Summarization' + +## Phase 3: Tiered Aggregation Strategy +Focus: Respect tier-level aggregation configuration + +- [ ] Task: Audit how tiers receive context currently +- [ ] Task: Implement tier-level aggregation strategy selection +- [ ] Task: Connect tier strategy to Persona configuration +- [ ] Task: Write tests for tiered aggregation +- [ ] Task: Conductor - User Manual Verification 'Phase 3: Tiered Aggregation Strategy' + +## Phase 4: UI Integration +Focus: Expose cache status and controls in UI + +- [ ] Task: Add cache status indicator to Files & Media panel +- [ ] Task: Add "Clear Summary Cache" button +- [ ] Task: Add aggregation configuration to Project Settings or AI Settings +- [ ] Task: Write tests for UI integration +- [ ] Task: Conductor - User Manual Verification 'Phase 4: UI Integration' + +## Phase 5: Cache Persistence & Optimization +Focus: Ensure cache persists and is performant + +- [ ] Task: Implement persistent cache storage to disk +- [ ] Task: Add cache size management (max entries, LRU) +- [ ] Task: Performance testing with large codebases +- [ ] Task: Write tests for persistence +- [ ] Task: Conductor - User Manual Verification 'Phase 5: Cache Persistence & Optimization' diff --git a/conductor/tracks/aggregation_smarter_summaries_20260322/spec.md b/conductor/tracks/aggregation_smarter_summaries_20260322/spec.md new file mode 100644 index 0000000..720198f --- /dev/null +++ b/conductor/tracks/aggregation_smarter_summaries_20260322/spec.md @@ -0,0 +1,103 @@ +# Specification: Smarter Aggregation with Sub-Agent Summarization + +## 1. Overview + +This track improves the context aggregation system to use sub-agent passes for intelligent summarization and hash-based caching to avoid redundant work. + +**Current Problem:** +- Aggregation is a simple pass that either injects full file content or a basic skeleton +- No intelligence applied to determine what level of detail is needed +- Same files get re-summarized on every discussion start even if unchanged + +**Goal:** +- Use a sub-agent during aggregation pass for high-tier agents to generate succinct summaries +- Cache summaries based on file hash - only re-summarize if file changed +- Smart outline generation for code files, summary for text files + +## 2. Current State Audit + +### Existing Aggregation Behavior +- `aggregate.py` handles context aggregation +- `file_cache.py` provides AST parsing and skeleton generation +- Per-file flags: `Auto-Aggregate` (summarize), `Force Full` (inject raw) +- No caching of summarization results + +### Provider API Considerations +- Different providers have different prompt/caching mechanisms +- Need to verify how each provider handles system context and caching +- May need provider-specific aggregation strategies + +## 3. Functional Requirements + +### 3.1 Hash-Based Summary Cache +- Generate SHA256 hash of file content +- Store summaries in a cache (file-based or in project state) +- Before summarizing, check if file hash matches cached summary +- Cache invalidation when file content changes + +### 3.2 Sub-Agent Summarization Pass +- During aggregation, optionally invoke sub-agent for summarization +- Sub-agent generates concise summary of file purpose and key points +- Different strategies for: + - Code files: AST-based outline + key function signatures + - Text files: Paragraph-level summary + - Config files: Key-value extraction + +### 3.3 Tiered Aggregation Strategy +- Tier 3/4 workers: Get skeleton outlines (fast, cheap) +- Tier 2 (Tech Lead): Get summaries with key details +- Tier 1 (Orchestrator): May get full content or enhanced summaries +- Configurable per-agent via Persona + +### 3.4 Cache Persistence +- Summaries persist across sessions +- Stored in project directory or centralized cache location +- Manual cache clear option in UI + +## 4. Data Model + +### 4.1 Summary Cache Entry +```python +{ + "file_path": str, + "file_hash": str, # SHA256 of content + "summary": str, + "outline": str, # For code files + "generated_at": str, # ISO timestamp + "generator_tier": str, # Which tier generated it +} +``` + +### 4.2 Aggregation Config +```toml +[aggregation] +default_mode = "summarize" # "full", "summarize", "outline" +cache_enabled = true +cache_dir = ".slop_cache" +``` + +## 5. UI Changes + +- Add "Clear Summary Cache" button in Files & Media or Context Composition +- Show cached status indicator on files (similar to AST cache indicator) +- Configuration in AI Settings or Project Settings + +## 6. Acceptance Criteria + +- [ ] File hash computed before summarization +- [ ] Summary cache persists across app restarts +- [ ] Sub-agent generates better summaries than basic skeleton +- [ ] Aggregation respects tier-level configuration +- [ ] Cache can be manually cleared +- [ ] Provider APIs handle aggregated context correctly + +## 7. Out of Scope +- Changes to provider API internals +- Vector store / embeddings for RAG (separate track) +- Changes to Session Hub / Discussion Hub layout + +## 8. Dependencies +- `aggregate.py` - main aggregation logic +- `file_cache.py` - AST parsing and caching +- `ai_client.py` - sub-agent invocation +- `models.py` - may need new config structures diff --git a/conductor/tracks/system_context_exposure_20260322/metadata.json b/conductor/tracks/system_context_exposure_20260322/metadata.json new file mode 100644 index 0000000..67efd56 --- /dev/null +++ b/conductor/tracks/system_context_exposure_20260322/metadata.json @@ -0,0 +1,16 @@ +{ + "name": "system_context_exposure", + "created": "2026-03-22", + "status": "future", + "priority": "medium", + "affected_files": [ + "src/ai_client.py", + "src/gui_2.py", + "src/models.py" + ], + "related_tracks": [ + "discussion_hub_panel_reorganization (in_progress)", + "aggregation_smarter_summaries (future)" + ], + "notes": "Deferred from discussion_hub_panel_reorganization planning. The _SYSTEM_PROMPT in ai_client.py is hidden from users - this exposes it for customization." +} diff --git a/conductor/tracks/system_context_exposure_20260322/plan.md b/conductor/tracks/system_context_exposure_20260322/plan.md new file mode 100644 index 0000000..d87f16a --- /dev/null +++ b/conductor/tracks/system_context_exposure_20260322/plan.md @@ -0,0 +1,41 @@ +# Implementation Plan: System Context Exposure + +## Phase 1: Backend Changes +Focus: Make _SYSTEM_PROMPT configurable + +- [ ] Task: Audit ai_client.py system prompt flow +- [ ] Task: Move _SYSTEM_PROMPT to configurable storage +- [ ] Task: Implement load/save of base system prompt +- [ ] Task: Modify _get_combined_system_prompt() to use config +- [ ] Task: Write tests for configurable system prompt +- [ ] Task: Conductor - User Manual Verification 'Phase 1: Backend Changes' + +## Phase 2: UI Implementation +Focus: Add base prompt editor to AI Settings + +- [ ] Task: Add UI controls to _render_system_prompts_panel +- [ ] Task: Implement checkbox for "Use Default Base" +- [ ] Task: Implement collapsible base prompt editor +- [ ] Task: Add "Reset to Default" button +- [ ] Task: Write tests for UI controls +- [ ] Task: Conductor - User Manual Verification 'Phase 2: UI Implementation' + +## Phase 3: Persistence & Provider Testing +Focus: Ensure persistence and cross-provider compatibility + +- [ ] Task: Verify base prompt persists across app restarts +- [ ] Task: Test with Gemini provider +- [ ] Task: Test with Anthropic provider +- [ ] Task: Test with DeepSeek provider +- [ ] Task: Test with Gemini CLI adapter +- [ ] Task: Conductor - User Manual Verification 'Phase 3: Persistence & Provider Testing' + +## Phase 4: Safety & Defaults +Focus: Ensure users can recover from bad edits + +- [ ] Task: Implement confirmation dialog before saving custom base +- [ ] Task: Add validation for empty/invalid prompts +- [ ] Task: Document the base prompt purpose in UI +- [ ] Task: Add "Show Diff" between default and custom +- [ ] Task: Write tests for safety features +- [ ] Task: Conductor - User Manual Verification 'Phase 4: Safety & Defaults' diff --git a/conductor/tracks/system_context_exposure_20260322/spec.md b/conductor/tracks/system_context_exposure_20260322/spec.md new file mode 100644 index 0000000..f9dc7bf --- /dev/null +++ b/conductor/tracks/system_context_exposure_20260322/spec.md @@ -0,0 +1,120 @@ +# Specification: System Context Exposure + +## 1. Overview + +This track exposes the hidden system prompt from `ai_client.py` to users for customization. + +**Current Problem:** +- `_SYSTEM_PROMPT` in `ai_client.py` (lines ~118-143) is hardcoded +- It contains foundational instructions: "You are a helpful coding assistant with access to a PowerShell tool..." +- Users can only see/appending their custom portion via `_custom_system_prompt` +- The base prompt that defines core agent capabilities is invisible + +**Goal:** +- Make `_SYSTEM_PROMPT` visible and editable in the UI +- Allow users to customize the foundational agent instructions +- Maintain sensible defaults while enabling expert customization + +## 2. Current State Audit + +### Hidden System Prompt Location +`src/ai_client.py`: +```python +_SYSTEM_PROMPT: str = ( + "You are a helpful coding assistant with access to a PowerShell tool (run_powershell) and MCP tools (file access: read_file, list_directory, search_files, get_file_summary, web access: web_search, fetch_url). " + "When calling file/directory tools, always use the 'path' parameter for the target path. " + ... +) +``` + +### Related State +- `_custom_system_prompt` - user-defined append/injection +- `_get_combined_system_prompt()` - merges both +- `set_custom_system_prompt()` - setter for user portion + +### UI Current State +- AI Settings → System Prompts shows global and project prompts +- These are injected as `[USER SYSTEM PROMPT]` after `_SYSTEM_PROMPT` +- But `_SYSTEM_PROMPT` itself is never shown + +## 3. Functional Requirements + +### 3.1 Base System Prompt Visibility +- Add "Base System Prompt" section in AI Settings +- Display current `_SYSTEM_PROMPT` content +- Allow editing with syntax highlighting (it's markdown text) + +### 3.2 Default vs Custom Base +- Maintain default base prompt as reference +- User can reset to default if they mess it up +- Show diff between default and custom + +### 3.3 Persistence +- Custom base prompt stored in config or project TOML +- Loaded on app start +- Applied before `_custom_system_prompt` in `_get_combined_system_prompt()` + +### 3.4 Provider Considerations +- Some providers handle system prompts differently +- Verify behavior across Gemini, Anthropic, DeepSeek +- May need provider-specific base prompts + +## 4. Data Model + +### 4.1 Config Storage +```toml +[ai_settings] +base_system_prompt = """...""" +use_default_base = true +``` + +### 4.2 Combined Prompt Order +1. `_SYSTEM_PROMPT` (or custom base if enabled) +2. `[USER SYSTEM PROMPT]` (from AI Settings global/project) +3. Tooling strategy (from bias engine) + +## 5. UI Design + +**Location:** AI Settings panel → System Prompts section + +``` +┌─ System Prompts ──────────────────────────────┐ +│ ☑ Use Default Base System Prompt │ +│ │ +│ Base System Prompt (collapsed by default): │ +│ ┌──────────────────────────────────────────┐ │ +│ │ You are a helpful coding assistant... │ │ +│ └──────────────────────────────────────────┘ │ +│ │ +│ [Show Editor] [Reset to Default] │ +│ │ +│ Global System Prompt: │ +│ ┌──────────────────────────────────────────┐ │ +│ │ [current global prompt content] │ │ +│ └──────────────────────────────────────────┘ │ +└──────────────────────────────────────────────┘ +``` + +When "Show Editor" clicked: +- Expand to full editor for base prompt +- Syntax highlighting for markdown +- Character count + +## 6. Acceptance Criteria + +- [ ] `_SYSTEM_PROMPT` visible in AI Settings +- [ ] User can edit base system prompt +- [ ] Changes persist across app restarts +- [ ] "Reset to Default" restores original +- [ ] Provider APIs receive modified prompt correctly +- [ ] No regression in agent behavior with defaults + +## 7. Out of Scope +- Changes to actual agent behavior logic +- Changes to tool definitions or availability +- Changes to aggregation or context handling + +## 8. Dependencies +- `ai_client.py` - `_SYSTEM_PROMPT` and `_get_combined_system_prompt()` +- `gui_2.py` - AI Settings panel rendering +- `models.py` - Config structures