refactor(package): reorganize Java package structure by domain

Move classes from root package into domain-specific sub-packages:
- action/dev: OpenDevToolsAction
- action/editor: QuickFixWithClaudeAction, SendFilePathToInputAction, SendSelectionToTerminalAction
- action/tab: CreateNewTabAction, DetachTabAction, RenameTabAction
- action/vcs: GenerateCommitMessageAction
- ui/detached: DetachedChatFrame, DetachedWindowManager
- ui/toolwindow: ClaudeChatWindow, ClaudeSDKToolWindow, CodeSnippetManager
- i18n: ClaudeCodeGuiBundle
- permission: ToolInterceptor
- session: ClaudeSession, SessionLoadService
- settings: CodemossSettingsService
- skill: CodexSkillService, SkillService

Update all import references across handlers, providers, session and test files accordingly.
This commit is contained in:
zkpaiminmin
2026-03-22 20:38:34 +08:00
parent 841aa6f0b7
commit 0ea542e5ef
82 changed files with 650 additions and 165 deletions
@@ -0,0 +1,469 @@
# Java 主包目录结构整理计划
**日期**: 2026-03-22
**状态**: 待执行
**范围**: `src/main/java/com/github/claudecodegui`
**目标**: 在不改变插件行为、消息协议和用户体验的前提下,逐步收敛根包、按功能分组目录、降低后续维护和继续重构的理解成本。
---
## 背景判断
当前结构并不是“完全错误”,但已经出现了典型的“分层做到一半”的迹象。
基于现有代码结构的快速盘点:
- 根包 `com.github.claudecodegui` 下面仍直接放了约 20 个类,职责混合了窗口、会话、设置、技能、Action 和工具拦截。
- `handler` 目录已有约 47 个类,是目前最容易继续膨胀的目录。
- `util` 目录已有约 18 个类,里面既有纯工具类,也有带明显业务语义的配置类。
- 与此同时,`permission``session``provider``skill``settings``ui` 等功能目录已经初步存在,说明项目已经朝“按功能分组”的方向发展。
因此,这次整理的核心目标不是推倒重来,而是把已经形成的分组方向收口,让目录结构更一致、更容易理解。
---
## 核心原则
### 1. 按功能分组,不按类名后缀分组
不建议把所有 `Service``Manager``Handler``Action` 简单集中到同一目录。
原因:
- 这种分法表面整齐,但会把同一业务链路拆散。
- 后续定位问题时,往往是按“会话 / 权限 / Provider / 技能 / UI”来思考,而不是按“这是个 Service 还是 Manager”来思考。
- 当前仓库已经有大量按功能分组的基础目录,继续沿这个方向最稳。
### 2. 先清理根包,再继续细分大目录
优先级建议:
1. 先把根包里的明显归属类迁回功能目录。
2. 再细分 `handler`
3. 最后收敛 `util`,只保留真正的通用工具类。
### 3. 小步重构,不一次性搬完整棵树
本计划强调分阶段、小批量迁移:
- 每一轮只处理一组低耦合对象。
- 每次迁移后都进行编译和插件注册校验。
- 不在目录迁移时顺便改业务逻辑,避免把“结构整理”和“功能变更”叠到一起。
### 4. 目录移动必须同步更新注册与引用
这是 IntelliJ 插件项目,类路径不仅存在于 Java import 中,也存在于注册文件中。
尤其要同步检查:
- `src/main/resources/META-INF/plugin.xml`
- 任何通过反射、字符串类名、静态入口引用到旧包路径的代码
---
## 推荐目标目录树
```text
src/main/java/com/github/claudecodegui
├── action
│ ├── chat // 聊天窗口内动作:发送、复制、粘贴、换行、快捷键同步
│ ├── dev // 开发辅助动作:DevTools 等
│ ├── editor // 编辑器/项目树动作:发送选中代码、发送文件路径、Quick Fix
│ ├── tab // 标签页动作:新建、重命名、分离
│ └── vcs // Git / Commit 相关动作
├── bridge // Node / SDK bridge 环境、目录、进程管理
├── cache // Session 索引与缓存
├── dependency // 依赖安装、更新检测、结果对象
├── handler
│ ├── core // Dispatcher、Base handler、上下文对象
│ ├── context // Java / Python / Runtime 上下文采集
│ ├── diff // Diff 展示、刷新、请求分发
│ ├── file // 文件打开、导出、撤销、收集器
│ ├── history // 历史记录加载、删除、导出、元数据、注入
│ ├── provider // Provider 读取、切换、导入导出、排序
│ ├── session // Session 消息处理
│ ├── settings // 设置相关 handler
│ ├── skill // Skill / Agent / MCP 相关 handler
│ └── window // Tab / Window 事件处理
├── i18n // 国际化 bundle 入口
├── model // 纯数据模型、枚举、结果对象
├── notifications // 通知、状态栏、提示音
├── permission // 权限请求、Diff review、tool interception
├── provider
│ ├── claude
│ ├── codex
│ └── common
├── session // 会话状态、回调、消息编排、生命周期
├── settings // 配置 facade 与各类 manager
├── skill // Claude / Codex skill 扫描、解析、注册
├── startup // 启动预热、插件更新监听
├── terminal // Terminal 集成
├── ui
│ ├── detached // 分离窗口
│ ├── toolwindow // ToolWindow / ChatWindow / tab 关联管理
│ └── webview // Webview 初始化、watchdog、delegate、编辑器上下文桥接
├── util // 仅保留通用、无状态工具类
└── watcher // 文件监听器(若数量持续增长,可再拆)
```
---
## 根包迁移建议对照表
以下类建议优先从根包迁移到对应目录。
| 当前类 | 建议新位置 | 说明 |
| --- | --- | --- |
| `ClaudeChatWindow` | `ui/toolwindow/ClaudeChatWindow.java` | 聊天窗口核心对象,明显属于 ToolWindow/UI 侧 |
| `ClaudeSDKToolWindow` | `ui/toolwindow/ClaudeSDKToolWindow.java` | ToolWindow 工厂与入口 |
| `CodeSnippetManager` | `ui/toolwindow/CodeSnippetManager.java` | 标签页/窗口间片段投递协调 |
| `DetachedChatFrame` | `ui/detached/DetachedChatFrame.java` | 分离窗口 UI |
| `DetachedWindowManager` | `ui/detached/DetachedWindowManager.java` | 分离窗口注册与生命周期 |
| `ClaudeSession` | `session/ClaudeSession.java` | 会话核心对象,应与现有 `session` 包收拢 |
| `SessionLoadService` | `session/SessionLoadService.java` | 会话加载桥接服务 |
| `CodemossSettingsService` | `settings/CodemossSettingsService.java` | 配置 facade,和现有 `settings` 包高度一致 |
| `SkillService` | `skill/SkillService.java` | Claude 技能管理 |
| `CodexSkillService` | `skill/CodexSkillService.java` | Codex 技能管理 |
| `ToolInterceptor` | `permission/ToolInterceptor.java` | 权限相关工具调用拦截 |
| `ClaudeCodeGuiBundle` | `i18n/ClaudeCodeGuiBundle.java` | 国际化入口类,避免长期占据根包 |
| `CreateNewTabAction` | `action/tab/CreateNewTabAction.java` | 标签页动作 |
| `RenameTabAction` | `action/tab/RenameTabAction.java` | 标签页动作 |
| `DetachTabAction` | `action/tab/DetachTabAction.java` | 标签页动作 |
| `SendSelectionToTerminalAction` | `action/editor/SendSelectionToTerminalAction.java` | 编辑器右键动作 |
| `SendFilePathToInputAction` | `action/editor/SendFilePathToInputAction.java` | 项目树右键动作 |
| `QuickFixWithClaudeAction` | `action/editor/QuickFixWithClaudeAction.java` | 编辑器修复动作 |
| `GenerateCommitMessageAction` | `action/vcs/GenerateCommitMessageAction.java` | VCS / Commit 动作 |
| `OpenDevToolsAction` | `action/dev/OpenDevToolsAction.java` | 开发调试动作 |
完成这一轮后,根包应尽量只保留极少数真正无法明确归属的顶层入口类。理想状态下,根包最终可以接近空壳。
---
## `action` 目录整理建议
当前项目已经有 `action` 包,但只覆盖了聊天窗口内部动作,属于“已经开了头但没有统一到底”的状态。
建议最终分为以下几组:
### `action/chat`
- `ChatSendAction`
- `ChatNewlineAction`
- `ChatCopyAction`
- `ChatCutAction`
- `ChatPasteAction`
- `ChatToolWindowAction`
- `SendShortcutSync`
### `action/editor`
- `SendSelectionToTerminalAction`
- `SendFilePathToInputAction`
- `QuickFixWithClaudeAction`
### `action/tab`
- `CreateNewTabAction`
- `RenameTabAction`
- `DetachTabAction`
### `action/vcs`
- `GenerateCommitMessageAction`
### `action/dev`
- `OpenDevToolsAction`
---
## `handler` 目录二次拆分建议
`handler` 是当前最需要继续细分的目录,但不建议一上来大改逻辑。最稳的方式是保留消息协议和入口类行为,只按职责移动文件。
### `handler/core`
建议归入:
- `BaseMessageHandler`
- `MessageHandler`
- `MessageDispatcher`
- `HandlerContext`
### `handler/file`
建议归入:
- `FileHandler`
- `OpenFileHandler`
- `FileExportHandler`
- `UndoFileHandler`
- `OpenFileCollector`
- `RecentFileCollector`
- `FileSystemCollector`
- `RuntimeContextCollector`
### `handler/history`
建议归入:
- `HistoryHandler`
- `HistoryLoadService`
- `HistoryDeleteService`
- `HistoryExportService`
- `HistoryMetadataService`
- `HistoryMessageInjector`
### `handler/provider`
建议归入:
- `ProviderHandler`
- `ClaudeProviderOperations`
- `CodexProviderOperations`
- `ProviderImportExportSupport`
- `ProviderOrderingService`
- `ModelProviderHandler`
### `handler/session`
建议归入:
- `SessionHandler`
### `handler/settings`
建议归入:
- `SettingsHandler`
- `NodePathHandler`
- `PermissionModeHandler`
- `SoundSettingsHandler`
- `InputHistoryHandler`
- `ProjectConfigHandler`
### `handler/skill`
建议归入:
- `SkillHandler`
- `AgentHandler`
- `McpServerHandler`
- `CodexMcpServerHandler`
- `DependencyHandler`
### `handler/window`
建议归入:
- `TabHandler`
- `WindowEventHandler`
### 保持原样的子目录
以下目录已经较清晰,可在第一阶段保持不动:
- `handler/context`
- `handler/diff`
---
## `util` 目录收敛原则
`util` 不建议继续作为“任何暂时不知道放哪就先塞进去”的目录。
推荐原则:
- **保留在 `util` 的类**:纯函数、无状态、跨多个功能域复用的工具类。
- **逐步迁出的类**:名称中带有明显业务语义、配置语义、主题语义、声音语义、语言语义的类。
可保留在 `util` 的典型类:
- `PathUtils`
- `LineSeparatorUtil`
- `TagExtractor`
- `IgnoreRuleParser`
- `IgnoreRuleMatcher`
- `TokenUsageUtils`
可作为后续候选迁出的类:
- `ThemeConfigService`
- `FontConfigService`
- `LanguageConfigService`
- `SoundNotificationService`
- `HtmlLoader`
- `JBCefBrowserFactory`
这一步不需要优先执行,但应作为结构治理的长期约束,避免 `util` 持续膨胀。
---
## 推荐执行顺序
### Phase 1:清理根包
目标:
- 先处理最容易确认归属的类。
- 最大化“第一眼可读性”提升。
- 降低后续继续细分时的认知负担。
建议顺序:
1. 迁移根包 Action 到 `action/*`
2. 迁移 `ClaudeSession``SessionLoadService``session`
3. 迁移 `CodemossSettingsService``settings`
4. 迁移 `SkillService``CodexSkillService``skill`
5. 迁移 `ClaudeChatWindow``ClaudeSDKToolWindow``CodeSnippetManager``ui/toolwindow`
6. 迁移 `DetachedChatFrame``DetachedWindowManager``ui/detached`
7. 迁移 `ToolInterceptor``permission`
8. 迁移 `ClaudeCodeGuiBundle``i18n`
### Phase 2:细分 `handler`
目标:
- 保持现有 `SUPPORTED_TYPES` 和消息分发协议不变。
- 按功能继续收拢文件位置。
建议顺序:
1. `core`
2. `history`
3. `file`
4. `provider`
5. `settings`
6. `skill`
7. `window`
8. `session`
### Phase 3:收敛 `util`
目标:
-`util` 恢复为“真正的工具类目录”。
- 将业务意味较强的对象迁回所属功能域。
### Phase 4:文档与命名复查
目标:
- 确保目录结构调整后仍易于新人理解。
- 避免“搬过去了,但命名还是旧上下文”的情况。
建议检查:
- 类名是否还反映当前职责
- 包名与类职责是否一致
- 文档、注释、注册文件是否同步更新
---
## 实施约束
为避免结构整理演变为高风险功能改造,本计划约束如下:
- 不在目录迁移时顺便改业务逻辑。
- 不在同一轮里同时改消息协议、UI 交互和包结构。
- 不一次性批量移动过多核心类,优先做低耦合迁移。
- 每次迁移后立即修正 import、注册类名和相关引用。
- 若发现某个类与多个目录强耦合,先暂停迁移,只记录为待决策项。
---
## 风险点
### 1. `plugin.xml` 注册路径失效
受影响对象:
- ToolWindow factory
- Action 注册
- 任何扩展点实现类
处理方式:
- 每一轮目录迁移后立即检查 `src/main/resources/META-INF/plugin.xml`
- 保证类路径与包名同步更新
### 2. 包级可见性与静态协作关系
例如窗口相关类之间存在包级方法调用或强协作关系,迁移时可能暴露出隐藏耦合。
处理方式:
- 先搬协作最紧密的一组类,避免拆散半套协作对象
- 必要时再决定是否提升可见性或引入更明确的 coordinator
### 3. 大目录移动引发大面积 import 修改
处理方式:
- 每次只移动一组相关类
- 每次移动后立即编译验证,避免把多个错误点叠到一起
### 4. `handler` 拆分时误伤消息协议
处理方式:
- 保留原入口类与消息类型定义
- 只做物理位置整理与内部委托调整,不改前端协议
---
## 验收标准
完成本计划时,应满足以下标准:
- 根包显著瘦身,不再混放窗口、Action、设置、技能、会话等多类职责。
- 目录结构能从名字直接反映功能域,而不是只能靠类名猜职责。
- `plugin.xml` 与所有 Java 引用同步更新,无失效注册。
- `handler` 不再是单层超大目录,核心子领域可以独立浏览。
- `util` 不再继续吸纳带业务语义的服务对象。
- 插件行为、消息协议、用户操作路径保持不变。
---
## 推荐验证方式
每一轮目录迁移后,至少执行以下验证:
### 编译 / 测试
- `./gradlew test`
### 定向人工检查
- ToolWindow 能否正常打开
- 新建标签页 / 重命名 / 分离窗口是否正常
- 编辑器右键发送代码、发送文件路径是否正常
- Quick Fix Action 是否仍可触发
- Commit Message Action 是否仍可显示
### 注册文件检查
- `src/main/resources/META-INF/plugin.xml` 中所有迁移类路径都已同步修改
---
## 非目标
本计划暂不包含以下内容:
- 重写现有业务逻辑
- 改造 `provider/claude``provider/codex` 的内部设计
- 大规模重命名消息类型或前后端协议
- 一次性清空所有历史结构问题
这是一份“结构整理计划”,不是“一步到位的架构重写计划”。
---
## 总结
当前项目更适合继续沿“按功能分组”的方向演进,而不是退回到“按 Service / Manager / Handler 类型分组”的做法。
最优先、最划算的一步,是先把根包清理干净;第二步再继续把 `handler` 拆成多个子目录;最后再逐步收敛 `util`
如果后续按本计划执行,项目目录会更接近“新同事第一次打开就能快速知道每块代码在哪”的状态,同时还能把重构风险控制在较低水平。
@@ -1,6 +1,6 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.google.gson.Gson;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.diagnostic.Logger;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.project.Project;
@@ -1,7 +1,7 @@
package com.github.claudecodegui.action;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ClaudeSDKToolWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,5 +1,6 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.dev;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -1,8 +1,11 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.editor;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.provider.common.MessageCallback;
import com.github.claudecodegui.provider.common.SDKResult;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,5 +1,7 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.editor;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,5 +1,7 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.editor;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -19,8 +21,6 @@ import com.intellij.util.concurrency.AppExecutorUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
/**
* Action that sends selected code to the plugin chat window.
* Supports cross-platform shortcuts: Mac (Cmd+Option+K) and Windows/Linux (Ctrl+Alt+K).
@@ -241,4 +241,3 @@ public class SendSelectionToTerminalAction extends AnAction implements DumbAware
}
}
}
@@ -1,5 +1,8 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.tab;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,5 +1,10 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.tab;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ui.detached.DetachedChatFrame;
import com.github.claudecodegui.ui.detached.DetachedWindowManager;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,6 +1,9 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.tab;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.settings.TabStateService;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -1,5 +1,6 @@
package com.github.claudecodegui;
package com.github.claudecodegui.action.vcs;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.service.GitCommitMessageService;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.model.ConflictStrategy;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@@ -128,7 +128,7 @@ public class ClaudeProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to add provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.addFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.addFailed", e.getMessage())));
});
}
}
@@ -163,7 +163,7 @@ public class ClaudeProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to update provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.updateFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.updateFailed", e.getMessage())));
});
}
}
@@ -182,7 +182,7 @@ public class ClaudeProviderOperations {
if (!data.has("id")) {
LOG.error("[ProviderHandler] ERROR: Missing 'id' field in request");
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.deleteMissingId")));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.deleteMissingId")));
});
return;
}
@@ -211,7 +211,7 @@ public class ClaudeProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Exception in handleDeleteProvider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.deleteFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.deleteFailed", e.getMessage())));
});
}
@@ -231,7 +231,7 @@ public class ClaudeProviderOperations {
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showSwitchSuccess",
context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.providerDisabled")));
context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.providerDisabled")));
handleGetProviders();
handleGetActiveProvider();
});
@@ -245,7 +245,7 @@ public class ClaudeProviderOperations {
LOG.warn("[ProviderHandler] Local settings.json does not exist at: " + settingsPath);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError",
context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.localProviderSettingsNotFound")));
context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.localProviderSettingsNotFound")));
});
return;
}
@@ -258,7 +258,7 @@ public class ClaudeProviderOperations {
LOG.error("[ProviderHandler] Invalid JSON in settings.json: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError",
context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.localProviderInvalidJson", e.getMessage())));
context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.localProviderInvalidJson", e.getMessage())));
});
return;
}
@@ -277,7 +277,7 @@ public class ClaudeProviderOperations {
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showSwitchSuccess",
context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.localProviderSwitchSuccess")));
context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.localProviderSwitchSuccess")));
handleGetProviders();
handleGetActiveProvider();
});
@@ -288,14 +288,14 @@ public class ClaudeProviderOperations {
context.getSettingsService().applyActiveProviderToClaudeSettings();
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showSwitchSuccess", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.providerSwitchSuccess") + com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.switchSyncClaude")));
context.callJavaScript("window.showSwitchSuccess", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.providerSwitchSuccess") + com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.switchSyncClaude")));
handleGetProviders();
handleGetActiveProvider();
});
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to switch provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.providerSwitchFailed") + ": " + e.getMessage()));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.providerSwitchFailed") + ": " + e.getMessage()));
});
}
}
@@ -68,7 +68,7 @@ public class CodexProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to add Codex provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.addCodexFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.addCodexFailed", e.getMessage())));
});
}
}
@@ -103,7 +103,7 @@ public class CodexProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to update Codex provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.updateCodexFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.updateCodexFailed", e.getMessage())));
});
}
}
@@ -122,7 +122,7 @@ public class CodexProviderOperations {
if (!data.has("id")) {
LOG.error("[ProviderHandler] ERROR: Missing 'id' field in request");
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.deleteCodexMissingId")));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.deleteCodexMissingId")));
});
return;
}
@@ -148,7 +148,7 @@ public class CodexProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Exception in handleDeleteCodexProvider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.deleteCodexFailed", e.getMessage())));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.deleteCodexFailed", e.getMessage())));
});
}
@@ -167,7 +167,7 @@ public class CodexProviderOperations {
context.getSettingsService().applyActiveProviderToCodexSettings();
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showSwitchSuccess", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.providerSwitchSuccess") + com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.switchSyncCodex")));
context.callJavaScript("window.showSwitchSuccess", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.providerSwitchSuccess") + com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.switchSyncCodex")));
handleGetCodexProviders(); // Refresh provider list
handleGetCurrentCodexConfig(); // Refresh Codex CLI config display
handleGetActiveCodexProvider(); // Refresh active provider config
@@ -175,7 +175,7 @@ public class CodexProviderOperations {
} catch (Exception e) {
LOG.error("[ProviderHandler] Failed to switch Codex provider: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("toast.providerSwitchFailed") + ": " + e.getMessage()));
context.callJavaScript("window.showError", context.escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("toast.providerSwitchFailed") + ": " + e.getMessage()));
});
}
}
@@ -41,11 +41,11 @@ public class FileExportHandler extends BaseMessageHandler {
public boolean handle(String type, String content) {
if ("save_markdown".equals(type)) {
LOG.info("[FileExportHandler] 处理: save_markdown");
handleSaveFile(content, ".md", com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveMarkdownDialog"));
handleSaveFile(content, ".md", com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveMarkdownDialog"));
return true;
} else if ("save_json".equals(type)) {
LOG.info("[FileExportHandler] 处理: save_json");
handleSaveFile(content, ".json", com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveJsonDialog"));
handleSaveFile(content, ".json", com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveJsonDialog"));
return true;
}
return false;
@@ -111,7 +111,7 @@ public class FileExportHandler extends BaseMessageHandler {
// Notify frontend of success
ApplicationManager.getApplication().invokeLater(() -> {
String successMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saved"));
String successMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saved"));
String jsCode = "if (window.addToast) { " +
" window.addToast('" + successMsg + "', 'success'); " +
"}";
@@ -123,8 +123,8 @@ public class FileExportHandler extends BaseMessageHandler {
// Notify frontend of failure
ApplicationManager.getApplication().invokeLater(() -> {
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveFailed");
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveFailed");
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String jsCode = "if (window.addToast) { " +
" window.addToast('" + errorMsg + "', 'error'); " +
"}";
@@ -138,8 +138,8 @@ public class FileExportHandler extends BaseMessageHandler {
} catch (Exception e) {
LOG.error("[FileExportHandler] ❌ 显示对话框失败: " + e.getMessage(), e);
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.showDialogFailed");
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.showDialogFailed");
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String jsCode = "if (window.addToast) { " +
" window.addToast('" + errorMsg + "', 'error'); " +
"}";
@@ -153,8 +153,8 @@ public class FileExportHandler extends BaseMessageHandler {
LOG.error("[FileExportHandler] ❌ 处理保存请求失败: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.unknownError");
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String errorDetail = e.getMessage() != null ? e.getMessage() : com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.unknownError");
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("file.saveFailedWithReason", errorDetail));
String jsCode = "if (window.addToast) { " +
" window.addToast('" + errorMsg + "', 'error'); " +
"}";
@@ -1,9 +1,9 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
import com.github.claudecodegui.provider.codex.CodexSDKBridge;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.ui.jcef.JBCefBrowser;
@@ -261,7 +261,7 @@ public class McpServerHandler extends BaseMessageHandler {
} catch (Exception e) {
LOG.error("[McpServerHandler] Failed to add MCP server: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("mcp.addServerFailedWithReason", e.getMessage()));
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("mcp.addServerFailedWithReason", e.getMessage()));
callJavaScript("window.showError", errorMsg);
});
}
@@ -284,7 +284,7 @@ public class McpServerHandler extends BaseMessageHandler {
} catch (Exception e) {
LOG.error("[McpServerHandler] Failed to update MCP server: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("mcp.updateServerFailedWithReason", e.getMessage()));
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("mcp.updateServerFailedWithReason", e.getMessage()));
callJavaScript("window.showError", errorMsg);
});
}
@@ -308,14 +308,14 @@ public class McpServerHandler extends BaseMessageHandler {
});
} else {
ApplicationManager.getApplication().invokeLater(() -> {
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("mcp.deleteServerFailedWithReason", com.github.claudecodegui.ClaudeCodeGuiBundle.message("mcp.serverNotFound")));
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("mcp.deleteServerFailedWithReason", com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("mcp.serverNotFound")));
callJavaScript("window.showError", errorMsg);
});
}
} catch (Exception e) {
LOG.error("[McpServerHandler] Failed to delete MCP server: " + e.getMessage(), e);
ApplicationManager.getApplication().invokeLater(() -> {
String errorMsg = escapeJs(com.github.claudecodegui.ClaudeCodeGuiBundle.message("mcp.deleteServerFailedWithReason", e.getMessage()));
String errorMsg = escapeJs(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("mcp.deleteServerFailedWithReason", e.getMessage()));
callJavaScript("window.showError", errorMsg);
});
}
@@ -167,8 +167,8 @@ public class PermissionHandler extends BaseMessageHandler {
}
// Get the window instance for the target project
com.github.claudecodegui.ClaudeChatWindow targetWindow =
com.github.claudecodegui.ClaudeSDKToolWindow.getChatWindow(targetProject);
com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow targetWindow =
com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow.getChatWindow(targetProject);
if (targetWindow == null) {
LOG.error("[PermissionHandler] Error: cannot find window instance for project " + targetProject.getName());
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.action.SendShortcutSync;
import com.github.claudecodegui.provider.claude.ClaudeHistoryReader;
import com.github.claudecodegui.provider.codex.CodexHistoryReader;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.model.ConflictStrategy;
import com.github.claudecodegui.model.PromptScope;
import com.github.claudecodegui.settings.AbstractPromptManager;
@@ -50,9 +50,9 @@ public class ProviderImportExportSupport {
LOG.info("[ProviderHandler] Database file exists: " + dbFile.exists());
if (!dbFile.exists()) {
String errorMsg = com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.notFound", dbFile.getAbsolutePath());
String errorMsg = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.notFound", dbFile.getAbsolutePath());
LOG.error("[ProviderHandler] " + errorMsg);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.notFoundTitle"), errorMsg);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.notFoundTitle"), errorMsg);
return;
}
@@ -63,7 +63,7 @@ public class ProviderImportExportSupport {
if (providers.isEmpty()) {
LOG.info("[ProviderHandler] No Claude provider configs found in database");
sendInfoToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.noDataTitle"), com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.noData"));
sendInfoToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.noDataTitle"), com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.noData"));
return;
}
@@ -80,9 +80,9 @@ public class ProviderImportExportSupport {
context.callJavaScript("window.import_preview_result", context.escapeJs(jsonStr));
} catch (Exception e) {
String errorDetails = com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailed") + ": " + e.getMessage();
String errorDetails = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailed") + ": " + e.getMessage();
LOG.error("[ProviderHandler] " + errorDetails, e);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailedTitle"), errorDetails);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailedTitle"), errorDetails);
}
});
});
@@ -103,8 +103,8 @@ public class ProviderImportExportSupport {
false // chooseMultiple
);
descriptor.setTitle(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.selectTitle"));
descriptor.setDescription(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.selectDesc"));
descriptor.setTitle(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.selectTitle"));
descriptor.setDescription(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.selectDesc"));
descriptor.withFileFilter(file -> {
String name = file.getName().toLowerCase();
return name.endsWith(".db");
@@ -131,7 +131,7 @@ public class ProviderImportExportSupport {
if (selectedFiles.length == 0) {
LOG.info("[ProviderHandler] User cancelled file selection");
sendInfoToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.cancelledTitle"), com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.cancelled"));
sendInfoToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.cancelledTitle"), com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.cancelled"));
return;
}
@@ -143,18 +143,18 @@ public class ProviderImportExportSupport {
LOG.info("[ProviderHandler] Database file exists: " + dbFile.exists());
if (!dbFile.exists()) {
String errorMsg = com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.notFound", dbFile.getAbsolutePath());
String errorMsg = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.notFound", dbFile.getAbsolutePath());
LOG.error("[ProviderHandler] " + errorMsg);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.notFoundTitle"), errorMsg);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.notFoundTitle"), errorMsg);
return;
}
if (!dbFile.canRead()) {
String errorMsg = com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.cannotReadFile") + "\n" +
String errorMsg = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.cannotReadFile") + "\n" +
dbFile.getAbsolutePath() + "\n" +
com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.checkFilePermissions");
com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.checkFilePermissions");
LOG.error("[ProviderHandler] " + errorMsg);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.permissionErrorTitle"), errorMsg);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.permissionErrorTitle"), errorMsg);
return;
}
@@ -166,7 +166,7 @@ public class ProviderImportExportSupport {
if (providers.isEmpty()) {
LOG.info("[ProviderHandler] No Claude provider configs found in database");
sendInfoToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.noDataTitle"), com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.noData"));
sendInfoToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.noDataTitle"), com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.noData"));
return;
}
@@ -183,16 +183,16 @@ public class ProviderImportExportSupport {
context.callJavaScript("window.import_preview_result", context.escapeJs(jsonStr));
} catch (Exception e) {
String errorDetails = com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailed") + ": " + e.getMessage();
String errorDetails = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailed") + ": " + e.getMessage();
LOG.error("[ProviderHandler] " + errorDetails, e);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailedTitle"), errorDetails);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.readFailedTitle"), errorDetails);
}
});
} catch (Exception e) {
String errorDetails = com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.fileChooserFailed") + ": " + e.getMessage();
String errorDetails = com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.fileChooserFailed") + ": " + e.getMessage();
LOG.error("[ProviderHandler] " + errorDetails, e);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.fileChooserFailedTitle"), errorDetails);
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.fileChooserFailedTitle"), errorDetails);
}
});
}
@@ -221,12 +221,12 @@ public class ProviderImportExportSupport {
ApplicationManager.getApplication().invokeLater(() -> {
claudeOps.handleGetProviders(); // Refresh UI
sendInfoToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.importSuccessTitle"), com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.importSuccess", count));
sendInfoToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.importSuccessTitle"), com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.importSuccess", count));
});
} catch (Exception e) {
LOG.error("Failed to save imported providers", e);
sendErrorToFrontend(com.github.claudecodegui.ClaudeCodeGuiBundle.message("provider.ccswitch.saveFailedTitle"), e.getMessage());
sendErrorToFrontend(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("provider.ccswitch.saveFailedTitle"), e.getMessage());
}
});
}
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.bridge.NodeDetector;
import com.github.claudecodegui.model.NodeDetectionResult;
import com.github.claudecodegui.notifications.ClaudeNotifier;
@@ -385,8 +385,8 @@ public class SessionHandler extends BaseMessageHandler {
// (relative paths are resolved only when projectPath is valid).
if (projectPath != null && new File(projectPath).exists()) {
try {
com.github.claudecodegui.CodemossSettingsService settingsService =
new com.github.claudecodegui.CodemossSettingsService();
com.github.claudecodegui.settings.CodemossSettingsService settingsService =
new com.github.claudecodegui.settings.CodemossSettingsService();
String customWorkingDir = settingsService.getCustomWorkingDirectory(projectPath);
if (customWorkingDir != null && !customWorkingDir.isEmpty()) {
@@ -1,7 +1,7 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.CodexSkillService;
import com.github.claudecodegui.SkillService;
import com.github.claudecodegui.skill.CodexSkillService;
import com.github.claudecodegui.skill.SkillService;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.intellij.openapi.application.ApplicationManager;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.util.SoundNotificationService;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
@@ -1,7 +1,7 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.ClaudeChatWindow;
import com.github.claudecodegui.ClaudeSDKToolWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.github.claudecodegui.settings.TabStateService;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -1,10 +1,10 @@
package com.github.claudecodegui.handler;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.util.TokenUsageUtils;
import com.github.claudecodegui.util.EditorFileUtils;
import com.github.claudecodegui.util.IgnoreRuleMatcher;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.intellij.openapi.application.ApplicationManager;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler.diff;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.util.ContentRebuildUtil;
import com.google.gson.Gson;
@@ -23,7 +23,7 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypes;
import com.github.claudecodegui.util.LineSeparatorUtil;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler.diff;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.handler.HandlerContext;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.handler.diff;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.util.ContentRebuildUtil;
import com.github.claudecodegui.util.EditorFileUtils;
@@ -1,4 +1,4 @@
package com.github.claudecodegui;
package com.github.claudecodegui.i18n;
import com.intellij.DynamicBundle;
import org.jetbrains.annotations.Nls;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.notifications;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.util.SoundNotificationService;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.notifications;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.CustomStatusBarWidget;
@@ -11,7 +11,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.Computable;
@@ -24,7 +24,7 @@ import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.intellij.openapi.diagnostic.Logger;
/**
* Permission request dialog.
@@ -1,8 +1,6 @@
package com.github.claudecodegui;
package com.github.claudecodegui.permission;
import com.google.gson.*;
import com.github.claudecodegui.permission.PermissionDialog;
import com.github.claudecodegui.permission.PermissionRequest;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.provider.claude;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.provider.common.DaemonBridge;
import com.github.claudecodegui.provider.common.MessageCallback;
import com.github.claudecodegui.provider.common.SDKResult;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.provider.claude;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.bridge.EnvironmentConfigurator;
import com.github.claudecodegui.bridge.NodeDetector;
import com.github.claudecodegui.bridge.ProcessManager;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.provider.claude;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
@@ -2,7 +2,7 @@ package com.github.claudecodegui.provider.claude;
import com.google.gson.JsonObject;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.model.NodeDetectionResult;
import com.github.claudecodegui.provider.common.BaseSDKBridge;
import com.github.claudecodegui.provider.common.MessageCallback;
@@ -4,8 +4,8 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.dependency.DependencyManager;
import com.github.claudecodegui.provider.common.BaseSDKBridge;
import com.github.claudecodegui.provider.common.MessageCallback;
@@ -1,7 +1,7 @@
package com.github.claudecodegui.service;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
import com.github.claudecodegui.provider.codex.CodexSDKBridge;
import com.github.claudecodegui.provider.common.MessageCallback;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.permission.PermissionRequest;
import java.util.List;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession.Message;
import com.github.claudecodegui.session.ClaudeSession.Message;
import com.github.claudecodegui.handler.SettingsHandler;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.provider.common.MessageCallback;
@@ -1,15 +1,9 @@
package com.github.claudecodegui;
package com.github.claudecodegui.session;
import com.github.claudecodegui.permission.PermissionManager;
import com.github.claudecodegui.permission.PermissionRequest;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
import com.github.claudecodegui.provider.codex.CodexSDKBridge;
import com.github.claudecodegui.session.SessionContextService;
import com.github.claudecodegui.session.SessionCallbackFacade;
import com.github.claudecodegui.session.SessionMessageOrchestrator;
import com.github.claudecodegui.session.SessionProviderRouter;
import com.github.claudecodegui.session.SessionSendService;
import com.github.claudecodegui.session.SessionState;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.intellij.openapi.diagnostic.Logger;
@@ -2,7 +2,7 @@ package com.github.claudecodegui.session;
import com.github.claudecodegui.provider.common.MessageCallback;
import com.github.claudecodegui.provider.common.SDKResult;
import com.github.claudecodegui.ClaudeSession.Message;
import com.github.claudecodegui.session.ClaudeSession.Message;
import com.intellij.openapi.diagnostic.Logger;
/**
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.handler.PermissionHandler;
import com.github.claudecodegui.permission.PermissionRequest;
import com.github.claudecodegui.util.JsUtils;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.permission.PermissionRequest;
import com.intellij.openapi.project.Project;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.service.RunConfigMonitorService;
import com.github.claudecodegui.terminal.TerminalMonitorService;
import com.google.gson.JsonArray;
@@ -1,8 +1,8 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.handler.SettingsHandler;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
@@ -1,4 +1,4 @@
package com.github.claudecodegui;
package com.github.claudecodegui.session;
/**
* Session load service (singleton).
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.handler.SettingsHandler;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.util.TokenUsageUtils;
@@ -1,7 +1,7 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.notifications.ClaudeNotifier;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
import com.github.claudecodegui.provider.codex.CodexSDKBridge;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import java.util.ArrayList;
import java.util.Collections;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.util.JsUtils;
import com.github.claudecodegui.util.MessageJsonConverter;
@@ -1,9 +1,9 @@
package com.github.claudecodegui;
package com.github.claudecodegui.settings;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.model.ConflictStrategy;
import com.github.claudecodegui.model.DeleteResult;
import com.github.claudecodegui.model.PromptScope;
import com.github.claudecodegui.settings.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.settings;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.bridge.NodeDetector;
import com.github.claudecodegui.model.DeleteResult;
import com.google.gson.Gson;
@@ -1,7 +1,6 @@
package com.github.claudecodegui;
package com.github.claudecodegui.skill;
import com.github.claudecodegui.settings.CodexSettingsManager;
import com.github.claudecodegui.skill.SkillFrontmatterParser;
import com.github.claudecodegui.util.PlatformUtils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@@ -1,6 +1,5 @@
package com.github.claudecodegui;
package com.github.claudecodegui.skill;
import com.github.claudecodegui.skill.SkillFrontmatterParser;
import com.github.claudecodegui.util.PlatformUtils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.skill;
import com.github.claudecodegui.CodexSkillService;
import com.github.claudecodegui.skill.CodexSkillService;
import com.github.claudecodegui.util.PlatformUtils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
@@ -1,8 +1,8 @@
package com.github.claudecodegui.ui;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.handler.AgentHandler;
import com.github.claudecodegui.handler.ClipboardHandler;
import com.github.claudecodegui.handler.CodexMcpServerHandler;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.ui;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.util.IgnoreRuleMatcher;
import com.github.claudecodegui.util.JsUtils;
import com.intellij.openapi.application.ApplicationManager;
@@ -53,7 +53,7 @@ public class ErrorPanelBuilder {
bottomPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 20, 20));
bottomPanel.setBackground(new Color(30, 30, 30));
JLabel nodeLabel = new JLabel(com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.nodePathLabel"));
JLabel nodeLabel = new JLabel(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.nodePathLabel"));
nodeLabel.setForeground(Color.WHITE);
nodeLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
@@ -74,7 +74,7 @@ public class ErrorPanelBuilder {
LOG.warn("Failed to preload Node.js path: " + e.getMessage());
}
JButton saveAndRetryButton = new JButton(com.github.claudecodegui.ClaudeCodeGuiBundle.message("error.saveButton"));
JButton saveAndRetryButton = new JButton(com.github.claudecodegui.i18n.ClaudeCodeGuiBundle.message("error.saveButton"));
saveAndRetryButton.setAlignmentX(Component.LEFT_ALIGNMENT);
saveAndRetryButton.addActionListener(e -> {
String manualPath = nodeField.getText();
@@ -1,6 +1,6 @@
package com.github.claudecodegui.ui;
import com.github.claudecodegui.ClaudeCodeGuiBundle;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.bridge.NodeDetector;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
@@ -1,5 +1,8 @@
package com.github.claudecodegui;
package com.github.claudecodegui.ui.detached;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow;
import com.intellij.ide.ui.LafManagerListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -1,5 +1,6 @@
package com.github.claudecodegui;
package com.github.claudecodegui.ui.detached;
import com.github.claudecodegui.ui.toolwindow.ClaudeChatWindow;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
@@ -1,4 +1,4 @@
package com.github.claudecodegui;
package com.github.claudecodegui.ui.toolwindow;
import com.github.claudecodegui.action.SendShortcutSync;
import com.github.claudecodegui.handler.HandlerContext;
@@ -9,9 +9,12 @@ import com.github.claudecodegui.permission.PermissionService;
import com.github.claudecodegui.provider.claude.ClaudeSDKBridge;
import com.github.claudecodegui.provider.codex.CodexSDKBridge;
import com.github.claudecodegui.provider.common.MessageCallback;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.session.SessionCallbackAdapter;
import com.github.claudecodegui.session.SessionLifecycleManager;
import com.github.claudecodegui.session.SessionLoadService;
import com.github.claudecodegui.session.StreamMessageCoalescer;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.ui.ChatWindowDelegate;
import com.github.claudecodegui.ui.EditorContextTracker;
import com.github.claudecodegui.ui.WebviewInitializer;
@@ -1,7 +1,9 @@
package com.github.claudecodegui;
package com.github.claudecodegui.ui.toolwindow;
import com.github.claudecodegui.i18n.ClaudeCodeGuiBundle;
import com.github.claudecodegui.settings.TabStateService;
import com.github.claudecodegui.startup.BridgePreloader;
import com.github.claudecodegui.ui.detached.DetachedWindowManager;
import com.github.claudecodegui.util.PlatformUtils;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -112,14 +114,14 @@ public class ClaudeSDKToolWindow implements ToolWindowFactory, DumbAware {
* Mark a Content as being detached (moving to a floating window).
* This prevents the contentRemoved listener from disposing the associated ClaudeChatWindow.
*/
static void markContentAsDetaching(Content content) {
public static void markContentAsDetaching(Content content) {
detachingContents.add(content);
}
/**
* Remove the detaching mark from a Content after the detach operation is complete.
*/
static void unmarkContentAsDetaching(Content content) {
public static void unmarkContentAsDetaching(Content content) {
detachingContents.remove(content);
}
@@ -1,4 +1,4 @@
package com.github.claudecodegui;
package com.github.claudecodegui.ui.toolwindow;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.util;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.handler.HandlerContext;
import com.github.claudecodegui.handler.SettingsHandler;
import com.google.gson.Gson;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.util;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import javazoom.jl.decoder.JavaLayerException;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.util;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.google.gson.JsonObject;
import java.util.List;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.watcher;
import com.github.claudecodegui.CodemossSettingsService;
import com.github.claudecodegui.settings.CodemossSettingsService;
import com.github.claudecodegui.model.PromptScope;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
+9 -9
View File
@@ -53,7 +53,7 @@
<!-- CC GUI tool window (includes history feature) -->
<toolWindow id="CCG"
anchor="right"
factoryClass="com.github.claudecodegui.ClaudeSDKToolWindow"
factoryClass="com.github.claudecodegui.ui.toolwindow.ClaudeSDKToolWindow"
icon="/icons/cc-gui-icon.svg"
canCloseContents="true"/>
@@ -77,7 +77,7 @@
<actions>
<!-- Action to send selected code to terminal -->
<action id="ClaudeCodeGUI.SendSelectionToTerminalAction"
class="com.github.claudecodegui.SendSelectionToTerminalAction"
class="com.github.claudecodegui.action.editor.SendSelectionToTerminalAction"
icon="/icons/send-to-terminal.svg">
<!-- Add to editor context menu (displayed at the top) -->
<add-to-group group-id="EditorPopupMenu" anchor="first"/>
@@ -88,7 +88,7 @@
<!-- Quick Fix with Claude Action -->
<action id="ClaudeCodeGUI.QuickFixWithClaudeAction"
class="com.github.claudecodegui.QuickFixWithClaudeAction"
class="com.github.claudecodegui.action.editor.QuickFixWithClaudeAction"
icon="/icons/quick-fix.svg">
<add-to-group group-id="EditorPopupMenu"
anchor="after"
@@ -100,27 +100,27 @@
<!-- Create New Tab Action (can be invoked via Find Action or programmatically) -->
<action id="ClaudeCodeGUI.CreateNewTabAction"
class="com.github.claudecodegui.CreateNewTabAction"
class="com.github.claudecodegui.action.tab.CreateNewTabAction"
icon="AllIcons.General.Add"/>
<!-- Rename Tab Action -->
<action id="ClaudeCodeGUI.RenameTabAction"
class="com.github.claudecodegui.RenameTabAction"
class="com.github.claudecodegui.action.tab.RenameTabAction"
icon="AllIcons.Actions.Edit"/>
<!-- Detach Tab Action -->
<action id="ClaudeCodeGUI.DetachTabAction"
class="com.github.claudecodegui.DetachTabAction"
class="com.github.claudecodegui.action.tab.DetachTabAction"
icon="AllIcons.Actions.MoveToWindow"/>
<!-- Open DevTools Action for JCEF debugging -->
<action id="ClaudeCodeGUI.OpenDevToolsAction"
class="com.github.claudecodegui.OpenDevToolsAction"
class="com.github.claudecodegui.action.dev.OpenDevToolsAction"
icon="AllIcons.Xml.Browsers.Chromium"/>
<!-- Action to send file path from the file tree to the input box -->
<action id="ClaudeCodeGUI.SendFilePathToInputAction"
class="com.github.claudecodegui.SendFilePathToInputAction"
class="com.github.claudecodegui.action.editor.SendFilePathToInputAction"
icon="/icons/send-to-terminal.svg">
<!-- Add to project file tree context menu -->
<add-to-group group-id="ProjectViewPopupMenu" anchor="first"/>
@@ -128,7 +128,7 @@
<!-- Generate Commit Message with AI Action -->
<action id="ClaudeCodeGUI.GenerateCommitMessageAction"
class="com.github.claudecodegui.GenerateCommitMessageAction"
class="com.github.claudecodegui.action.vcs.GenerateCommitMessageAction"
icon="/icons/logo-16.png">
<!-- Add to VCS Commit toolbar -->
<add-to-group group-id="Vcs.MessageActionGroup" anchor="last"/>
@@ -1,6 +1,6 @@
package com.github.claudecodegui.provider.claude;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.provider.common.MessageCallback;
import com.github.claudecodegui.provider.common.SDKResult;
import com.google.gson.Gson;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.junit.Rule;
@@ -1,6 +1,6 @@
package com.github.claudecodegui.session;
import com.github.claudecodegui.ClaudeSession;
import com.github.claudecodegui.session.ClaudeSession;
import com.github.claudecodegui.permission.PermissionRequest;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;