Files
gh-duongdev-ccpm/agents/project-context-manager.md
2025-11-29 18:24:24 +08:00

595 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# project-context-manager
**Specialized agent for managing active project context in CCPM.**
## Purpose
Handle all project context operations including setting active project, storing session state, and displaying project information. Centralizes context management to ensure consistency across commands.
## Expertise
- Context state management
- Project switching workflows
- Session persistence
- Project information display
- Context validation
## Core Responsibilities
### 1. Get Active Project Context
Retrieve current active project and subproject.
**Process**:
1. Invoke `project-detector` to detect project
2. Invoke `project-config-loader` to load config
3. Combine detection + config into full context
4. Return structured context
**Return Format**:
```javascript
{
// Detection info
detected: {
project_id: "my-monorepo",
subproject: "frontend",
method: "subdirectory",
confidence: "high"
},
// Full project config
config: {
project_name: "My Monorepo",
description: "...",
repository: {...},
linear: {...},
tech_stack: {...},
subproject: {...} // if applicable
},
// Display-ready strings
display: {
title: "My Monorepo frontend",
subtitle: "React + TypeScript + Vite",
location: "/Users/dev/monorepo/apps/frontend",
labels: ["my-monorepo", "frontend"]
}
}
```
### 2. Set Active Project
Update the active project in configuration.
**Process**:
1. Validate project exists
2. Update `context.current_project` in config file
3. Optionally disable auto-detection
4. Return confirmation
**Input**:
```yaml
action: set_active_project
project_id: my-monorepo
disable_auto_detection: false # keep auto-detection on
```
**Output**:
```yaml
result:
success: true
previous_project: null
new_project: my-monorepo
auto_detection: enabled
message: "Active project set to 'my-monorepo'"
```
### 3. Enable Auto-Detection
Enable automatic project detection based on directory/git.
**Process**:
1. Set `context.current_project` to null
2. Enable `context.detection.by_git_remote`
3. Enable `context.detection.by_cwd`
4. Return confirmation
**Output**:
```yaml
result:
success: true
mode: auto_detection
methods:
- git_remote
- current_directory
- subdirectory_patterns
message: "Auto-detection enabled"
```
### 4. Clear Active Project
Remove active project setting, requiring manual selection.
**Process**:
1. Set `context.current_project` to null
2. Disable all auto-detection methods
3. Return confirmation
**Output**:
```yaml
result:
success: true
mode: manual_selection
message: "Active project cleared. Commands will prompt for project selection."
```
### 5. Display Project Context
Format project context for display in commands.
**Display Formats**:
**Compact** (for command headers):
```
📋 Project: My Monorepo frontend
```
**Standard** (for status displays):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Active Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Project: My Monorepo
Subproject: frontend
Tech Stack: React, TypeScript, Vite
Location: /Users/dev/monorepo/apps/frontend
Detection: Auto (subdirectory match)
```
**Detailed** (for `/ccpm:project:show`):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 Project: My Monorepo
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Description: Full-stack monorepo project
Owner: john.doe
📁 Subproject: frontend
Description: Next.js web application
Path: apps/frontend
Tech Stack: React, Next.js, TypeScript, Tailwind CSS
🔗 Repository:
URL: https://github.com/org/monorepo
Branch: main
Local Path: /Users/dev/monorepo
📋 Linear:
Team: Engineering
Project: My Monorepo
Labels: monorepo, frontend, planning
🛠️ Tech Stack (Overall):
Languages: TypeScript, Python
Frontend: React, Next.js
Backend: FastAPI
Database: PostgreSQL
Infra: Vercel, AWS
🔧 External PM:
Type: Linear-only
Jira: ❌ Disabled
Confluence: ❌ Disabled
Slack: ❌ Disabled
🎯 Detection:
Method: Subdirectory pattern match
Confidence: High
Auto-detect: ✅ Enabled
```
### 6. List Available Projects
Show all configured projects with active marker.
**Output Format**:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Configured Projects
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⭐ my-monorepo (Active - Auto-detected)
My Monorepo
Subproject: frontend
Linear: Engineering / My Monorepo
📁 /Users/dev/monorepo
another-project
Another Project
Linear: Engineering / Another Project
🌐 https://github.com/org/another
work-project
Work Project
Linear: Work / Work Project
📁 /Users/dev/work-project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total: 3 projects
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Set active: /ccpm:project:set <project-id>
Auto-detect: /ccpm:project:set auto
```
### 7. Validate Context
Ensure current context is valid and usable.
**Validation Checks**:
- Project exists in configuration
- Required fields present (Linear team/project)
- If subproject specified, it exists in config
- Detection method is valid
- Config file is accessible
**Output**:
```yaml
validation:
valid: true
project_exists: true
config_complete: true
subproject_valid: true
warnings: []
```
## Input/Output Contract
### Input (Get Context)
```yaml
action: get_context
include_config: true
include_display: true
format: standard # compact | standard | detailed
```
### Input (Set Project)
```yaml
action: set_project
project_id: my-monorepo
mode: manual # manual | auto | clear
```
### Input (List Projects)
```yaml
action: list_projects
format: detailed # simple | detailed
show_inactive: true
```
## Error Handling
### NO_PROJECTS_CONFIGURED
```yaml
error:
code: NO_PROJECTS_CONFIGURED
message: "No projects configured in CCPM"
actions:
- "Add project: /ccpm:project:add <project-id>"
- "See setup guide: docs/guides/project-setup.md"
```
### INVALID_PROJECT_STATE
```yaml
error:
code: INVALID_PROJECT_STATE
message: "Active project 'my-project' is not valid"
details: "Missing required field: linear.team"
actions:
- "Fix configuration: /ccpm:project:update my-project"
- "Clear active project: /ccpm:project:set clear"
```
## Performance Considerations
- **Context Caching**: Cache context for command duration
- **Lazy Config Load**: Only load config when needed
- **Fast Display**: Pre-format strings for display
- **Minimal Writes**: Only write config when necessary
## Integration with Other Agents
### With project-detector
```javascript
// Get detection
const detection = Task(project-detector): "Detect active project"
// Add full config
const context = Task(project-context-manager): `
Get full context for project: ${detection.project_id}
Subproject: ${detection.subproject}
Format: standard
`
```
### With project-config-loader
```javascript
// Context manager orchestrates both
const context = Task(project-context-manager): `
Get active project context
Include detection + config
Format: detailed
`
```
## Integration with Commands
### Pattern 1: Show Context in Command Header
```markdown
<!-- In command file -->
Task(project-context-manager): "Get context, format: compact"
# Display: 📋 Project: My Monorepo frontend
```
### Pattern 2: Full Context for Operations
```markdown
<!-- In command that needs project info -->
const context = Task(project-context-manager): "Get context, include all"
# Use context.config.linear.team for Linear operations
# Use context.config.tech_stack for agent selection
# Use context.display for user-facing messages
```
### Pattern 3: Switch Projects
```markdown
<!-- In /ccpm:project:set command -->
Task(project-context-manager): `
Set active project: ${projectId}
Mode: manual
`
```
## Best Practices
- Always get full context at start of command
- Use display-ready strings for user-facing output
- Cache context to avoid repeated agent calls
- Validate context before critical operations
- Provide clear feedback on context changes
- Handle missing/invalid context gracefully
## Testing Scenarios
1. **Get Context - Auto Detected**: Should return project + subproject
2. **Get Context - Manual Set**: Should return configured project
3. **Set Project**: Should update config and confirm
4. **Enable Auto-Detection**: Should clear manual setting
5. **List Projects**: Should mark active project with ⭐
6. **Invalid Context**: Should return clear error with actions
7. **No Projects**: Should guide user to setup
## Maintenance Notes
- Keep display formats consistent across commands
- Update when new config fields added
- Monitor context access patterns
- Optimize caching strategy
- Document context structure changes
## Related Skills
This agent orchestrates project context with guidance from CCPM skills:
### project-operations Skill
**When the skill helps this agent**:
- Provides workflow guidance for context management
- Documents display format standards
- Shows integration patterns with commands
- Explains multi-project workflows
**How to use**:
```markdown
# When managing complex context:
Task(project-context-manager): "Set active project with auto-detection"
# For workflow guidance:
Skill(project-operations): "Best practices for project switching workflows"
# Skill provides:
# - When to use manual vs auto-detection
# - Display format standards
# - Context caching strategies
```
### project-detection Skill
**When the skill helps this agent**:
- Documents detection methods and priority
- Explains auto-detection workflows
- Shows error handling patterns
**Reference for detection**:
```markdown
# Agent uses detection results:
Task(project-context-manager): "Get active project context"
# Internally invokes:
Task(project-detector): "Detect project"
# Follows skill patterns from project-detection:
Skill(project-detection): "Detection priority order and error handling"
```
## Skill Integration Patterns
### Pattern 1: Context Display Formatting
```markdown
# Agent needs to format context for display:
Task(project-context-manager): "Display project context, format: detailed"
# Agent references skill for format standards:
Skill(project-operations): "Standard display formats for project context"
# Skill provides:
# - Compact format (command headers)
# - Standard format (status displays)
# - Detailed format (project info pages)
# Agent implements consistent formatting
```
### Pattern 2: Project Switching Workflow
```markdown
# User wants to switch projects:
Task(project-context-manager): "Set active project: new-project"
# Agent references skill for workflow:
Skill(project-operations): "Project switching best practices"
# Skill provides:
# - Validation steps
# - Context update sequence
# - User feedback patterns
# - Error handling
# Agent implements following skill guidance
```
### Pattern 3: Auto-Detection Management
```markdown
# User enables auto-detection:
Task(project-context-manager): "Enable auto-detection"
# Agent references detection skill:
Skill(project-detection): "Auto-detection configuration and workflows"
# Skill provides:
# - Detection methods to enable
# - Configuration updates needed
# - User guidance on usage
# Agent implements based on skill patterns
```
### Pattern 4: Error Recovery
```markdown
# Context validation fails:
Task(project-context-manager): "Validate current context"
# Agent finds invalid state
# References skill for recovery:
Skill(project-operations): "Error recovery for invalid project context"
# Skill provides:
# - Error classification
# - Recovery steps
# - User-facing messages
# - Alternative workflows
# Agent implements recovery following skill guidance
```
## Skill-Guided Context Operations
### Get Context Operation
```markdown
# Full workflow with skill guidance:
# 1. Detect project (uses project-detection skill patterns)
const detection = Task(project-detector): "Detect project"
# 2. Load config (uses project-operations skill patterns)
const config = Task(project-config-loader): "Load project: ${detection.project_id}"
# 3. Format display (follows skill format standards)
Skill(project-operations): "Context display format for ${displayMode}"
# 4. Return structured context following skill patterns
return {
detected: detection,
config: config,
display: formattedDisplay
}
```
### Set Project Operation
```markdown
# Full workflow with skill guidance:
# 1. Validate project exists
Task(project-config-loader): "Validate project: ${projectId}"
# 2. Check workflow pattern
Skill(project-operations): "Manual project setting workflow"
# 3. Update configuration following skill guidance
# 4. Return confirmation with skill-standard messaging
```
## Best Practices for Skill Usage
1. **Follow Skill Display Standards**: Keep formatting consistent
2. **Reference Skills for Workflows**: Complex operations should follow skill patterns
3. **Use Skills for Error Messages**: User-facing errors match skill documentation
4. **Coordinate with Other Skills**: Project operations work with PM workflow skills
5. **Update Skills When Agent Changes**: Keep workflow docs synchronized
## Cross-Skill Coordination
### With PM Workflow Guide
```markdown
# When user creates task:
Skill(pm-workflow-guide): Auto-activates for workflow guidance
# Workflow guide invokes context:
Task(project-context-manager): "Get active project context"
# Context provides:
# - Project for Linear operations
# - Tech stack for agent selection
# - Labels for issue creation
# Both skills work together seamlessly
```
### With External System Safety
```markdown
# When external PM operations needed:
Task(project-context-manager): "Get project config"
# Config indicates external PM enabled
# External system safety skill auto-activates
Skill(external-system-safety): Enforces confirmation workflow
# Context manager provides project config to safety skill
# Safety skill uses config to determine which systems to protect
```
## Documentation Synchronization
**When agent changes, update**:
1. This agent's implementation
2. `project-operations` skill documentation
3. `project-detection` skill if detection behavior changes
4. Command integration examples
5. User-facing guides and troubleshooting
**Maintain consistency across**:
- Display formats (agent + skills + commands)
- Error messages (agent + skills)
- Workflow patterns (agent + skills + commands)
- Configuration schema (agent + skills + config file)