-
Notifications
You must be signed in to change notification settings - Fork 471
feat: add basic MPP IDEA support #471 #473
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Add IdeaAgentApp.kt with Compose UI for chat interface - Add IdeaAgentViewModel.kt for managing agent state and messages - Add IdeaAgentToolWindowFactory.kt for ToolWindow creation - Add AgentType, ChatMessage, LLMConfig models - Register AutoDev Agent ToolWindow in plugin.xml - Fix CoroutineScopeHolder to avoid classloader conflicts - Use compileOnly for kotlinx/ktor deps to use platform versions Features: - Tab-based navigation: Agentic, Review, Knowledge, Remote - Chat interface with message bubbles - Streaming output support - LLM configuration support (placeholder)
- CoroutineScopeHolder: implement Disposable to cancel parentJob on project disposal - IdeaAgentViewModel: preserve partial streaming output on abort - IdeaAgentApp: simplify AgentTab structure by removing nested Box - build.gradle.kts: extract mppVersion variable to avoid duplication - DomainDictAgent: normalize path separators and skip empty package paths
feat(mpp-idea): add Agent ToolWindow with tab-based navigation
…s-platform consistency - Remove duplicate AgentType.kt and LLMConfig.kt from mpp-idea - Use cc.unitmesh.agent.AgentType from mpp-core - Use ConfigManager from mpp-ui for LLM configuration (~/.autodev/config.yaml) - Update IdeaAgentViewModel to load config via ConfigManager.load() - Update IdeaAgentApp to use AgentType.getDisplayName() - Add jogamp and other required repositories for mpp-ui dependencies - Configure dependency substitution for mpp-ui-jvm and mpp-core-jvm targets
…licts Exclude all Compose and UI library dependencies from mpp-ui and mpp-core to prevent ClassCastException caused by duplicate Compose Runtime classes loaded from different classloaders (plugin vs IntelliJ bundled). Excluded dependencies: - org.jetbrains.compose.* (runtime, foundation, material3, ui, desktop, etc.) - org.jetbrains.skiko - io.github.kevinnzou (webview/KCEF) - dev.datlag (jcef) - com.mohamedrejeb.richeditor - cafe.adriel.bonsai - com.mikepenz (markdown renderer) - org.jetbrains.jediterm, org.jetbrains.pty4j - io.github.vinceglb (filekit)
…task - Exclude kotlinx-serialization-json-io and kotlinx-io-core modules - Add verifyNoDuplicateDependencies task to detect classloader conflicts - Task runs automatically before build to catch issues early - Validates that no Compose/Kotlinx dependencies are included
…ecution - Create JewelRenderer implementing CodingAgentRenderer with StateFlow - Refactor IdeaAgentViewModel to use CodingAgent instead of simulated responses - Update IdeaAgentApp to display timeline-based agent output - Add UI components for tool calls, errors, and task completion - Remove obsolete ChatMessage model (replaced by JewelRenderer.TimelineItem) The IDEA plugin now uses the same CodingAgent as CLI and Desktop apps, ensuring consistent behavior across all platforms.
Delete AutoDev Compose tool window and related classes to streamline tool window offerings and reduce redundancy.
refactor(mpp-idea): use mpp-ui's ConfigManager and AgentType for cross-platform consistency
…n system - Replace Color(0xFF4CAF50) with AutoDevColors.Green.c400 for success status - Replace Color(0xFFF44336) with AutoDevColors.Red.c400 for error status - Use .copy(alpha = 0.2f) for background colors instead of hardcoded alpha - Remove unused Color import This ensures cross-platform color consistency by using the design system tokens from mpp-ui instead of hardcoded hex values.
refactor(mpp-idea): replace hardcoded colors with AutoDevColors design system
- JewelRenderer: Add TaskInfo/TaskStatus for task-boundary tool support, TerminalOutputItem for shell commands, improved token tracking, forceStop() method, and tool call formatting helpers - IdeaAgentViewModel: Add MCP server preloading, tool loading status, builtin commands (/clear, /help, /status), executeTask/cancelTask methods, and ToolLoadingStatus data class - IdeaAgentApp: Add ToolLoadingStatusBar, ToolStatusChip, TerminalOutputBubble components for enhanced UI - Add unit tests for JewelRenderer and IdeaAgentViewModel Aligned with mpp-ui's CodingAgentViewModel for feature parity.
- Fix _currentToolCall null bug by capturing value before clearing - Replace hardcoded colors with AutoDevColors design tokens - Make toolStatus reactive to mcpPreloadingStatus changes - Handle builtin commands (/clear, /help, /status) before config check - Add 60s timeout to MCP preloading loop to prevent infinite loop - Improve forceStop test assertion with explicit message verification - Add mpp-idea build instructions to AGENTS.md
- Add IdeaCodeReviewModels.kt with data models (IdeaCodeReviewState, IdeaCommitInfo, IdeaDiffFileInfo, IdeaAIAnalysisProgress, IdeaAnalysisStage) - Add IdeaCodeReviewViewModel.kt with git operations using GitOperations (JVM) and CodeReviewAgent integration - Add IdeaCodeReviewContent.kt with three-panel Jewel UI (commit list, diff viewer, AI analysis panel) - Integrate Code Review tab in IdeaAgentApp.kt - Update IdeaAgentToolWindowFactory.kt to pass project and coroutineScope
- Add JUnit 4 runtime dependency required by IntelliJ Platform test infrastructure - Temporarily disable IdeaAgentViewModelTest (requires full IntelliJ Platform setup) - Remove testFramework(TestFrameworkType.Platform) to avoid JUnit conflicts - JewelRendererTest now runs successfully with JUnit 5
- Add IdeaInputListener interface for input events - Add IdeaDevInInput with EditorTextField and DevIn language support - Add IdeaBottomToolbar with Jewel-based send/stop/@/settings buttons - Add IdeaInputSection combining input with toolbar - Update IdeaAgentApp to use new IdeaInputSection Features: - Multi-line text input with Enter to send, Shift+Enter for newline - DevIn language syntax highlighting and completion - LookupManager integration for completion popup handling - Workspace path and token count display
- Replace pure Compose IdeaInputSection with SwingPanel-embedded IdeaDevInInput - DevInInputArea now embeds EditorTextField for full DevIn language support - Add text change listener to IdeaDevInInput for Compose state sync - Combine SwingPanel editor with Compose bottom toolbar This enables IntelliJ native completion popup and DevIn syntax highlighting.
- Fix memory leak by storing and properly disposing internal DocumentListener - Fix recreateDocument to use EditorFactory instead of FileDocumentManager - Re-attach listeners when document is recreated - Fix Windows path handling in project name extraction - Remove unused imports (Color, java.util.*) - Extract duplicate send logic to avoid code duplication - Remove redundant text assignment in clearInput() Addresses review comments from PR #7
…jis with icons - Fix ClassCastException in AnalysisAgent by validating SubAgent input before creating invocation - Fix duplicate key error in LazyColumn by adding unique ID to TimelineItem - Replace all emojis with Material Design icons from AutoDevComposeIcons - Tool icon (Build) - Error icon (Error) - Success/Failure icons (CheckCircle/Error) - Settings icon (Settings) - Remove emoji from recovery advice and confirmation messages Fixes: - java.lang.ClassCastException: LinkedHashMap cannot be cast to ContentHandlerContext - IllegalArgumentException: Key was already used in LazyColumn
feat(mpp-idea): add advanced DevIn input components with SwingPanel integration
|
Caution Review failedThe pull request is closed. WalkthroughThis PR comprehensively refactors the mpp-idea IntelliJ plugin, replacing a basic Compose chat interface with a multi-agent system featuring tabbed agent types, timeline-based rendering, code review integration, and enhanced build configuration with dependency conflict verification. Changes
Sequence DiagramsequenceDiagram
participant User
participant IdeaInputSection as IdeaInputSection<br/>(UI)
participant IdeaAgentVM as IdeaAgentViewModel<br/>(Orchestrator)
participant KoogLLM as KoogLLMService<br/>(LLM)
participant CodingAgent as CodingAgent<br/>(Agent)
participant ToolOrch as ToolOrchestrator<br/>(Tool Exec)
participant JewelRenderer as JewelRenderer<br/>(State)
participant UI as IdeaAgentApp<br/>(Render)
rect rgb(200, 230, 255)
Note over User,UI: Task Submission Phase
User->>IdeaInputSection: Enter task text + Send
IdeaInputSection->>IdeaAgentVM: sendMessage(content) / executeTask()
end
rect rgb(200, 255, 220)
Note over IdeaAgentVM,CodingAgent: Initialization Phase
IdeaAgentVM->>IdeaAgentVM: initializeCodingAgent()
IdeaAgentVM->>KoogLLM: Create LLM service
IdeaAgentVM->>CodingAgent: Construct with renderer, LLM, tools
end
rect rgb(255, 240, 200)
Note over CodingAgent,JewelRenderer: Execution & Rendering Phase
CodingAgent->>JewelRenderer: addUserMessage(content)
activate JewelRenderer
JewelRenderer->>JewelRenderer: Update timeline + UI state
deactivate JewelRenderer
CodingAgent->>KoogLLM: Request LLM response (streaming)
activate KoogLLM
loop Streaming chunks
KoogLLM-->>JewelRenderer: renderLLMResponseChunk(text)
JewelRenderer->>JewelRenderer: Update currentStreamingOutput
JewelRenderer-->>UI: State change (StateFlow)
UI->>User: Live text updates
end
KoogLLM-->>JewelRenderer: renderLLMResponseEnd()
deactivate KoogLLM
end
rect rgb(255, 220, 220)
Note over CodingAgent,ToolOrch: Tool Execution Phase
CodingAgent->>ToolOrch: execute(tool, params)
alt SubAgent Tool
ToolOrch->>ToolOrch: validateInput(params)
ToolOrch->>ToolOrch: createInvocation(validated)
else Other Tool
ToolOrch->>ToolOrch: cast to ExecutableTool
ToolOrch->>ToolOrch: createInvocation(params)
end
ToolOrch-->>ToolOrch: Execute & return result
CodingAgent->>JewelRenderer: renderToolCall(toolName, params)
JewelRenderer->>JewelRenderer: Add ToolCallItem to timeline
CodingAgent->>JewelRenderer: renderToolResult(result)
JewelRenderer->>JewelRenderer: Update last ToolCallItem / Add output
end
rect rgb(220, 240, 255)
Note over CodingAgent,JewelRenderer: Completion Phase
CodingAgent->>JewelRenderer: renderFinalResult() / renderTaskComplete()
JewelRenderer->>JewelRenderer: Update taskCompleted flag
JewelRenderer-->>UI: Final state via StateFlow
UI->>User: Display final result + enable input
end
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120+ minutes Areas requiring extra attention:
Possibly related PRs
Poem
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (24)
Comment |
Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Documentation
✏️ Tip: You can customize this high-level summary in your review settings.