diff --git a/docs/plans/2026-03-22-java-package-structure-reorganization-plan.md b/docs/plans/2026-03-22-java-package-structure-reorganization-plan.md new file mode 100644 index 00000000..6946deef --- /dev/null +++ b/docs/plans/2026-03-22-java-package-structure-reorganization-plan.md @@ -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`。 + +如果后续按本计划执行,项目目录会更接近“新同事第一次打开就能快速知道每块代码在哪”的状态,同时还能把重构风险控制在较低水平。 diff --git a/src/main/java/com/github/claudecodegui/action/ChatCopyAction.java b/src/main/java/com/github/claudecodegui/action/ChatCopyAction.java index 2cf7259b..67352a30 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatCopyAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatCopyAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/action/ChatCutAction.java b/src/main/java/com/github/claudecodegui/action/ChatCutAction.java index 685448d1..39623921 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatCutAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatCutAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/action/ChatNewlineAction.java b/src/main/java/com/github/claudecodegui/action/ChatNewlineAction.java index 784eecb8..b539bc0a 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatNewlineAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatNewlineAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/action/ChatPasteAction.java b/src/main/java/com/github/claudecodegui/action/ChatPasteAction.java index bea30831..3d361b0d 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatPasteAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatPasteAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/action/ChatSendAction.java b/src/main/java/com/github/claudecodegui/action/ChatSendAction.java index 8d2741e1..a58c2eff 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatSendAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatSendAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/action/ChatToolWindowAction.java b/src/main/java/com/github/claudecodegui/action/ChatToolWindowAction.java index e82c1313..6ccda9fe 100644 --- a/src/main/java/com/github/claudecodegui/action/ChatToolWindowAction.java +++ b/src/main/java/com/github/claudecodegui/action/ChatToolWindowAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/OpenDevToolsAction.java b/src/main/java/com/github/claudecodegui/action/dev/OpenDevToolsAction.java similarity index 99% rename from src/main/java/com/github/claudecodegui/OpenDevToolsAction.java rename to src/main/java/com/github/claudecodegui/action/dev/OpenDevToolsAction.java index 3a2aff9a..4ff4cee7 100644 --- a/src/main/java/com/github/claudecodegui/OpenDevToolsAction.java +++ b/src/main/java/com/github/claudecodegui/action/dev/OpenDevToolsAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/QuickFixWithClaudeAction.java b/src/main/java/com/github/claudecodegui/action/editor/QuickFixWithClaudeAction.java similarity index 97% rename from src/main/java/com/github/claudecodegui/QuickFixWithClaudeAction.java rename to src/main/java/com/github/claudecodegui/action/editor/QuickFixWithClaudeAction.java index 2955d699..e69b578f 100644 --- a/src/main/java/com/github/claudecodegui/QuickFixWithClaudeAction.java +++ b/src/main/java/com/github/claudecodegui/action/editor/QuickFixWithClaudeAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/SendFilePathToInputAction.java b/src/main/java/com/github/claudecodegui/action/editor/SendFilePathToInputAction.java similarity index 97% rename from src/main/java/com/github/claudecodegui/SendFilePathToInputAction.java rename to src/main/java/com/github/claudecodegui/action/editor/SendFilePathToInputAction.java index c234f82a..383c06a0 100644 --- a/src/main/java/com/github/claudecodegui/SendFilePathToInputAction.java +++ b/src/main/java/com/github/claudecodegui/action/editor/SendFilePathToInputAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/SendSelectionToTerminalAction.java b/src/main/java/com/github/claudecodegui/action/editor/SendSelectionToTerminalAction.java similarity index 98% rename from src/main/java/com/github/claudecodegui/SendSelectionToTerminalAction.java rename to src/main/java/com/github/claudecodegui/action/editor/SendSelectionToTerminalAction.java index 3fc8e8e5..a13fb660 100644 --- a/src/main/java/com/github/claudecodegui/SendSelectionToTerminalAction.java +++ b/src/main/java/com/github/claudecodegui/action/editor/SendSelectionToTerminalAction.java @@ -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 } } } - diff --git a/src/main/java/com/github/claudecodegui/CreateNewTabAction.java b/src/main/java/com/github/claudecodegui/action/tab/CreateNewTabAction.java similarity index 92% rename from src/main/java/com/github/claudecodegui/CreateNewTabAction.java rename to src/main/java/com/github/claudecodegui/action/tab/CreateNewTabAction.java index 6861680d..d78ee82e 100644 --- a/src/main/java/com/github/claudecodegui/CreateNewTabAction.java +++ b/src/main/java/com/github/claudecodegui/action/tab/CreateNewTabAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/DetachTabAction.java b/src/main/java/com/github/claudecodegui/action/tab/DetachTabAction.java similarity index 95% rename from src/main/java/com/github/claudecodegui/DetachTabAction.java rename to src/main/java/com/github/claudecodegui/action/tab/DetachTabAction.java index 292fe8e6..3e309451 100644 --- a/src/main/java/com/github/claudecodegui/DetachTabAction.java +++ b/src/main/java/com/github/claudecodegui/action/tab/DetachTabAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/RenameTabAction.java b/src/main/java/com/github/claudecodegui/action/tab/RenameTabAction.java similarity index 95% rename from src/main/java/com/github/claudecodegui/RenameTabAction.java rename to src/main/java/com/github/claudecodegui/action/tab/RenameTabAction.java index 74bec688..04c69e21 100644 --- a/src/main/java/com/github/claudecodegui/RenameTabAction.java +++ b/src/main/java/com/github/claudecodegui/action/tab/RenameTabAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/GenerateCommitMessageAction.java b/src/main/java/com/github/claudecodegui/action/vcs/GenerateCommitMessageAction.java similarity index 99% rename from src/main/java/com/github/claudecodegui/GenerateCommitMessageAction.java rename to src/main/java/com/github/claudecodegui/action/vcs/GenerateCommitMessageAction.java index 8fb9c57f..aa7ecfd1 100644 --- a/src/main/java/com/github/claudecodegui/GenerateCommitMessageAction.java +++ b/src/main/java/com/github/claudecodegui/action/vcs/GenerateCommitMessageAction.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/AgentHandler.java b/src/main/java/com/github/claudecodegui/handler/AgentHandler.java index 2c17b51f..cb9165ad 100644 --- a/src/main/java/com/github/claudecodegui/handler/AgentHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/AgentHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/ClaudeProviderOperations.java b/src/main/java/com/github/claudecodegui/handler/ClaudeProviderOperations.java index 78bf08d6..84b3dde6 100644 --- a/src/main/java/com/github/claudecodegui/handler/ClaudeProviderOperations.java +++ b/src/main/java/com/github/claudecodegui/handler/ClaudeProviderOperations.java @@ -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())); }); } } diff --git a/src/main/java/com/github/claudecodegui/handler/CodexProviderOperations.java b/src/main/java/com/github/claudecodegui/handler/CodexProviderOperations.java index ebdb508e..e782ff98 100644 --- a/src/main/java/com/github/claudecodegui/handler/CodexProviderOperations.java +++ b/src/main/java/com/github/claudecodegui/handler/CodexProviderOperations.java @@ -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())); }); } } diff --git a/src/main/java/com/github/claudecodegui/handler/FileExportHandler.java b/src/main/java/com/github/claudecodegui/handler/FileExportHandler.java index 2dc461e9..729b2646 100644 --- a/src/main/java/com/github/claudecodegui/handler/FileExportHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/FileExportHandler.java @@ -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'); " + "}"; diff --git a/src/main/java/com/github/claudecodegui/handler/HandlerContext.java b/src/main/java/com/github/claudecodegui/handler/HandlerContext.java index 6d73e97a..8a7bd304 100644 --- a/src/main/java/com/github/claudecodegui/handler/HandlerContext.java +++ b/src/main/java/com/github/claudecodegui/handler/HandlerContext.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/McpServerHandler.java b/src/main/java/com/github/claudecodegui/handler/McpServerHandler.java index 9ee2997f..2ec7d8a7 100644 --- a/src/main/java/com/github/claudecodegui/handler/McpServerHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/McpServerHandler.java @@ -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); }); } diff --git a/src/main/java/com/github/claudecodegui/handler/PermissionHandler.java b/src/main/java/com/github/claudecodegui/handler/PermissionHandler.java index ccd89b91..b2bdb0d8 100644 --- a/src/main/java/com/github/claudecodegui/handler/PermissionHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/PermissionHandler.java @@ -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()); diff --git a/src/main/java/com/github/claudecodegui/handler/ProjectConfigHandler.java b/src/main/java/com/github/claudecodegui/handler/ProjectConfigHandler.java index 5cf8966a..8f68ea07 100644 --- a/src/main/java/com/github/claudecodegui/handler/ProjectConfigHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/ProjectConfigHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/PromptHandler.java b/src/main/java/com/github/claudecodegui/handler/PromptHandler.java index c52360d8..4e8542b3 100644 --- a/src/main/java/com/github/claudecodegui/handler/PromptHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/PromptHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/ProviderImportExportSupport.java b/src/main/java/com/github/claudecodegui/handler/ProviderImportExportSupport.java index c9e6304d..0e6d274e 100644 --- a/src/main/java/com/github/claudecodegui/handler/ProviderImportExportSupport.java +++ b/src/main/java/com/github/claudecodegui/handler/ProviderImportExportSupport.java @@ -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()); } }); } diff --git a/src/main/java/com/github/claudecodegui/handler/SessionHandler.java b/src/main/java/com/github/claudecodegui/handler/SessionHandler.java index 9560ed7d..b9a19762 100644 --- a/src/main/java/com/github/claudecodegui/handler/SessionHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/SessionHandler.java @@ -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()) { diff --git a/src/main/java/com/github/claudecodegui/handler/SkillHandler.java b/src/main/java/com/github/claudecodegui/handler/SkillHandler.java index 23635fd6..55e47f6c 100644 --- a/src/main/java/com/github/claudecodegui/handler/SkillHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/SkillHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/SoundSettingsHandler.java b/src/main/java/com/github/claudecodegui/handler/SoundSettingsHandler.java index e33f860a..ad877446 100644 --- a/src/main/java/com/github/claudecodegui/handler/SoundSettingsHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/SoundSettingsHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/TabHandler.java b/src/main/java/com/github/claudecodegui/handler/TabHandler.java index b5925078..e252c986 100644 --- a/src/main/java/com/github/claudecodegui/handler/TabHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/TabHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/UsagePushService.java b/src/main/java/com/github/claudecodegui/handler/UsagePushService.java index 701757ff..ae76fc2b 100644 --- a/src/main/java/com/github/claudecodegui/handler/UsagePushService.java +++ b/src/main/java/com/github/claudecodegui/handler/UsagePushService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/diff/EditableDiffHandler.java b/src/main/java/com/github/claudecodegui/handler/diff/EditableDiffHandler.java index 0dcace9b..698145c8 100644 --- a/src/main/java/com/github/claudecodegui/handler/diff/EditableDiffHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/diff/EditableDiffHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffManager.java b/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffManager.java index 85121a1b..30c4dc7b 100644 --- a/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffManager.java +++ b/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffManager.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffMessageHandler.java b/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffMessageHandler.java index 68032df1..c8f3f0eb 100644 --- a/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffMessageHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/diff/InteractiveDiffMessageHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/handler/diff/SimpleDiffDisplayHandler.java b/src/main/java/com/github/claudecodegui/handler/diff/SimpleDiffDisplayHandler.java index 2771c4d6..a9a5cb1b 100644 --- a/src/main/java/com/github/claudecodegui/handler/diff/SimpleDiffDisplayHandler.java +++ b/src/main/java/com/github/claudecodegui/handler/diff/SimpleDiffDisplayHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ClaudeCodeGuiBundle.java b/src/main/java/com/github/claudecodegui/i18n/ClaudeCodeGuiBundle.java similarity index 96% rename from src/main/java/com/github/claudecodegui/ClaudeCodeGuiBundle.java rename to src/main/java/com/github/claudecodegui/i18n/ClaudeCodeGuiBundle.java index bfaab2be..778fb69b 100644 --- a/src/main/java/com/github/claudecodegui/ClaudeCodeGuiBundle.java +++ b/src/main/java/com/github/claudecodegui/i18n/ClaudeCodeGuiBundle.java @@ -1,4 +1,4 @@ -package com.github.claudecodegui; +package com.github.claudecodegui.i18n; import com.intellij.DynamicBundle; import org.jetbrains.annotations.Nls; diff --git a/src/main/java/com/github/claudecodegui/notifications/ClaudeNotifier.java b/src/main/java/com/github/claudecodegui/notifications/ClaudeNotifier.java index a914aca5..2416f611 100644 --- a/src/main/java/com/github/claudecodegui/notifications/ClaudeNotifier.java +++ b/src/main/java/com/github/claudecodegui/notifications/ClaudeNotifier.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/notifications/ClaudeStatusBarWidget.java b/src/main/java/com/github/claudecodegui/notifications/ClaudeStatusBarWidget.java index efc2451c..bcd17b1e 100644 --- a/src/main/java/com/github/claudecodegui/notifications/ClaudeStatusBarWidget.java +++ b/src/main/java/com/github/claudecodegui/notifications/ClaudeStatusBarWidget.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/permission/DiffReviewService.java b/src/main/java/com/github/claudecodegui/permission/DiffReviewService.java index 7e4a3079..c59faeea 100644 --- a/src/main/java/com/github/claudecodegui/permission/DiffReviewService.java +++ b/src/main/java/com/github/claudecodegui/permission/DiffReviewService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/permission/PermissionDialog.java b/src/main/java/com/github/claudecodegui/permission/PermissionDialog.java index 9694df4e..9d2d8b98 100644 --- a/src/main/java/com/github/claudecodegui/permission/PermissionDialog.java +++ b/src/main/java/com/github/claudecodegui/permission/PermissionDialog.java @@ -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. diff --git a/src/main/java/com/github/claudecodegui/ToolInterceptor.java b/src/main/java/com/github/claudecodegui/permission/ToolInterceptor.java similarity index 97% rename from src/main/java/com/github/claudecodegui/ToolInterceptor.java rename to src/main/java/com/github/claudecodegui/permission/ToolInterceptor.java index 6dbd4c0c..0f621eb5 100644 --- a/src/main/java/com/github/claudecodegui/ToolInterceptor.java +++ b/src/main/java/com/github/claudecodegui/permission/ToolInterceptor.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeDaemonRequestExecutor.java b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeDaemonRequestExecutor.java index fb67de3e..8a036e79 100644 --- a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeDaemonRequestExecutor.java +++ b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeDaemonRequestExecutor.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeProcessInvoker.java b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeProcessInvoker.java index 63c8160a..55d966c3 100644 --- a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeProcessInvoker.java +++ b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeProcessInvoker.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeRequestParamsBuilder.java b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeRequestParamsBuilder.java index be898c33..cf051166 100644 --- a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeRequestParamsBuilder.java +++ b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeRequestParamsBuilder.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridge.java b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridge.java index ef539444..a0a899ea 100644 --- a/src/main/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridge.java +++ b/src/main/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridge.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/provider/codex/CodexSDKBridge.java b/src/main/java/com/github/claudecodegui/provider/codex/CodexSDKBridge.java index f4d96b4d..c6922622 100644 --- a/src/main/java/com/github/claudecodegui/provider/codex/CodexSDKBridge.java +++ b/src/main/java/com/github/claudecodegui/provider/codex/CodexSDKBridge.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/service/GitCommitMessageService.java b/src/main/java/com/github/claudecodegui/service/GitCommitMessageService.java index 4f180ce3..af8321eb 100644 --- a/src/main/java/com/github/claudecodegui/service/GitCommitMessageService.java +++ b/src/main/java/com/github/claudecodegui/service/GitCommitMessageService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/CallbackHandler.java b/src/main/java/com/github/claudecodegui/session/CallbackHandler.java index bb494985..bb1e5470 100644 --- a/src/main/java/com/github/claudecodegui/session/CallbackHandler.java +++ b/src/main/java/com/github/claudecodegui/session/CallbackHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/ClaudeMessageHandler.java b/src/main/java/com/github/claudecodegui/session/ClaudeMessageHandler.java index 627e6e7c..14493d3c 100644 --- a/src/main/java/com/github/claudecodegui/session/ClaudeMessageHandler.java +++ b/src/main/java/com/github/claudecodegui/session/ClaudeMessageHandler.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ClaudeSession.java b/src/main/java/com/github/claudecodegui/session/ClaudeSession.java similarity index 98% rename from src/main/java/com/github/claudecodegui/ClaudeSession.java rename to src/main/java/com/github/claudecodegui/session/ClaudeSession.java index 4f89c93b..e86d4ef6 100644 --- a/src/main/java/com/github/claudecodegui/ClaudeSession.java +++ b/src/main/java/com/github/claudecodegui/session/ClaudeSession.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/CodexMessageHandler.java b/src/main/java/com/github/claudecodegui/session/CodexMessageHandler.java index 0b8d8dfc..8b4c5249 100644 --- a/src/main/java/com/github/claudecodegui/session/CodexMessageHandler.java +++ b/src/main/java/com/github/claudecodegui/session/CodexMessageHandler.java @@ -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; /** diff --git a/src/main/java/com/github/claudecodegui/session/MessageParser.java b/src/main/java/com/github/claudecodegui/session/MessageParser.java index 46a87d13..2ddb334c 100644 --- a/src/main/java/com/github/claudecodegui/session/MessageParser.java +++ b/src/main/java/com/github/claudecodegui/session/MessageParser.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionCallbackAdapter.java b/src/main/java/com/github/claudecodegui/session/SessionCallbackAdapter.java index 77c58135..c39cc533 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionCallbackAdapter.java +++ b/src/main/java/com/github/claudecodegui/session/SessionCallbackAdapter.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionCallbackFacade.java b/src/main/java/com/github/claudecodegui/session/SessionCallbackFacade.java index 027f6b4e..5d5df414 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionCallbackFacade.java +++ b/src/main/java/com/github/claudecodegui/session/SessionCallbackFacade.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionContextService.java b/src/main/java/com/github/claudecodegui/session/SessionContextService.java index 5eb72298..04a4951c 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionContextService.java +++ b/src/main/java/com/github/claudecodegui/session/SessionContextService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionLifecycleManager.java b/src/main/java/com/github/claudecodegui/session/SessionLifecycleManager.java index fb3384da..8f710c02 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionLifecycleManager.java +++ b/src/main/java/com/github/claudecodegui/session/SessionLifecycleManager.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/SessionLoadService.java b/src/main/java/com/github/claudecodegui/session/SessionLoadService.java similarity index 97% rename from src/main/java/com/github/claudecodegui/SessionLoadService.java rename to src/main/java/com/github/claudecodegui/session/SessionLoadService.java index d74ab298..27f8eb71 100644 --- a/src/main/java/com/github/claudecodegui/SessionLoadService.java +++ b/src/main/java/com/github/claudecodegui/session/SessionLoadService.java @@ -1,4 +1,4 @@ -package com.github.claudecodegui; +package com.github.claudecodegui.session; /** * Session load service (singleton). diff --git a/src/main/java/com/github/claudecodegui/session/SessionMessageOrchestrator.java b/src/main/java/com/github/claudecodegui/session/SessionMessageOrchestrator.java index 844ac97a..ad5a38b7 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionMessageOrchestrator.java +++ b/src/main/java/com/github/claudecodegui/session/SessionMessageOrchestrator.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionSendService.java b/src/main/java/com/github/claudecodegui/session/SessionSendService.java index 821436fa..572a2f77 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionSendService.java +++ b/src/main/java/com/github/claudecodegui/session/SessionSendService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/SessionState.java b/src/main/java/com/github/claudecodegui/session/SessionState.java index c922a099..27ab0324 100644 --- a/src/main/java/com/github/claudecodegui/session/SessionState.java +++ b/src/main/java/com/github/claudecodegui/session/SessionState.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/session/StreamMessageCoalescer.java b/src/main/java/com/github/claudecodegui/session/StreamMessageCoalescer.java index 29e4069b..f10a279f 100644 --- a/src/main/java/com/github/claudecodegui/session/StreamMessageCoalescer.java +++ b/src/main/java/com/github/claudecodegui/session/StreamMessageCoalescer.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/CodemossSettingsService.java b/src/main/java/com/github/claudecodegui/settings/CodemossSettingsService.java similarity index 99% rename from src/main/java/com/github/claudecodegui/CodemossSettingsService.java rename to src/main/java/com/github/claudecodegui/settings/CodemossSettingsService.java index c4fce5d4..5339b734 100644 --- a/src/main/java/com/github/claudecodegui/CodemossSettingsService.java +++ b/src/main/java/com/github/claudecodegui/settings/CodemossSettingsService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/settings/ProviderManager.java b/src/main/java/com/github/claudecodegui/settings/ProviderManager.java index 3b86bd91..97835ce7 100644 --- a/src/main/java/com/github/claudecodegui/settings/ProviderManager.java +++ b/src/main/java/com/github/claudecodegui/settings/ProviderManager.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/CodexSkillService.java b/src/main/java/com/github/claudecodegui/skill/CodexSkillService.java similarity index 99% rename from src/main/java/com/github/claudecodegui/CodexSkillService.java rename to src/main/java/com/github/claudecodegui/skill/CodexSkillService.java index b46ee911..db1b9074 100644 --- a/src/main/java/com/github/claudecodegui/CodexSkillService.java +++ b/src/main/java/com/github/claudecodegui/skill/CodexSkillService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/SkillService.java b/src/main/java/com/github/claudecodegui/skill/SkillService.java similarity index 99% rename from src/main/java/com/github/claudecodegui/SkillService.java rename to src/main/java/com/github/claudecodegui/skill/SkillService.java index 34c143e1..e688f1df 100644 --- a/src/main/java/com/github/claudecodegui/SkillService.java +++ b/src/main/java/com/github/claudecodegui/skill/SkillService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/skill/SlashCommandRegistry.java b/src/main/java/com/github/claudecodegui/skill/SlashCommandRegistry.java index cf7e421a..40559dc4 100644 --- a/src/main/java/com/github/claudecodegui/skill/SlashCommandRegistry.java +++ b/src/main/java/com/github/claudecodegui/skill/SlashCommandRegistry.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ui/ChatWindowDelegate.java b/src/main/java/com/github/claudecodegui/ui/ChatWindowDelegate.java index d44f7ee4..5fe6888a 100644 --- a/src/main/java/com/github/claudecodegui/ui/ChatWindowDelegate.java +++ b/src/main/java/com/github/claudecodegui/ui/ChatWindowDelegate.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ui/EditorContextTracker.java b/src/main/java/com/github/claudecodegui/ui/EditorContextTracker.java index c269d0e0..63f45cf4 100644 --- a/src/main/java/com/github/claudecodegui/ui/EditorContextTracker.java +++ b/src/main/java/com/github/claudecodegui/ui/EditorContextTracker.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ui/ErrorPanelBuilder.java b/src/main/java/com/github/claudecodegui/ui/ErrorPanelBuilder.java index 46a75e06..32c19b61 100644 --- a/src/main/java/com/github/claudecodegui/ui/ErrorPanelBuilder.java +++ b/src/main/java/com/github/claudecodegui/ui/ErrorPanelBuilder.java @@ -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(); diff --git a/src/main/java/com/github/claudecodegui/ui/WebviewInitializer.java b/src/main/java/com/github/claudecodegui/ui/WebviewInitializer.java index ab4c50cd..2b93b933 100644 --- a/src/main/java/com/github/claudecodegui/ui/WebviewInitializer.java +++ b/src/main/java/com/github/claudecodegui/ui/WebviewInitializer.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/DetachedChatFrame.java b/src/main/java/com/github/claudecodegui/ui/detached/DetachedChatFrame.java similarity index 98% rename from src/main/java/com/github/claudecodegui/DetachedChatFrame.java rename to src/main/java/com/github/claudecodegui/ui/detached/DetachedChatFrame.java index fd4a2ab5..5c0c0c37 100644 --- a/src/main/java/com/github/claudecodegui/DetachedChatFrame.java +++ b/src/main/java/com/github/claudecodegui/ui/detached/DetachedChatFrame.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/DetachedWindowManager.java b/src/main/java/com/github/claudecodegui/ui/detached/DetachedWindowManager.java similarity index 98% rename from src/main/java/com/github/claudecodegui/DetachedWindowManager.java rename to src/main/java/com/github/claudecodegui/ui/detached/DetachedWindowManager.java index f24fd178..2d030ad0 100644 --- a/src/main/java/com/github/claudecodegui/DetachedWindowManager.java +++ b/src/main/java/com/github/claudecodegui/ui/detached/DetachedWindowManager.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ClaudeChatWindow.java b/src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeChatWindow.java similarity index 99% rename from src/main/java/com/github/claudecodegui/ClaudeChatWindow.java rename to src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeChatWindow.java index 1233c422..b1534ea4 100644 --- a/src/main/java/com/github/claudecodegui/ClaudeChatWindow.java +++ b/src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeChatWindow.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/ClaudeSDKToolWindow.java b/src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeSDKToolWindow.java similarity index 98% rename from src/main/java/com/github/claudecodegui/ClaudeSDKToolWindow.java rename to src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeSDKToolWindow.java index 366bb4f8..4e2f63a6 100644 --- a/src/main/java/com/github/claudecodegui/ClaudeSDKToolWindow.java +++ b/src/main/java/com/github/claudecodegui/ui/toolwindow/ClaudeSDKToolWindow.java @@ -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); } diff --git a/src/main/java/com/github/claudecodegui/CodeSnippetManager.java b/src/main/java/com/github/claudecodegui/ui/toolwindow/CodeSnippetManager.java similarity index 99% rename from src/main/java/com/github/claudecodegui/CodeSnippetManager.java rename to src/main/java/com/github/claudecodegui/ui/toolwindow/CodeSnippetManager.java index 0b4069a6..09ed3b09 100644 --- a/src/main/java/com/github/claudecodegui/CodeSnippetManager.java +++ b/src/main/java/com/github/claudecodegui/ui/toolwindow/CodeSnippetManager.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/util/MessageJsonConverter.java b/src/main/java/com/github/claudecodegui/util/MessageJsonConverter.java index da176d1b..65933e73 100644 --- a/src/main/java/com/github/claudecodegui/util/MessageJsonConverter.java +++ b/src/main/java/com/github/claudecodegui/util/MessageJsonConverter.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/util/SoundNotificationService.java b/src/main/java/com/github/claudecodegui/util/SoundNotificationService.java index dc6f145d..0d9c405f 100644 --- a/src/main/java/com/github/claudecodegui/util/SoundNotificationService.java +++ b/src/main/java/com/github/claudecodegui/util/SoundNotificationService.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/util/TokenUsageUtils.java b/src/main/java/com/github/claudecodegui/util/TokenUsageUtils.java index f37f3e20..51acd6b5 100644 --- a/src/main/java/com/github/claudecodegui/util/TokenUsageUtils.java +++ b/src/main/java/com/github/claudecodegui/util/TokenUsageUtils.java @@ -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; diff --git a/src/main/java/com/github/claudecodegui/watcher/PromptFileWatcher.java b/src/main/java/com/github/claudecodegui/watcher/PromptFileWatcher.java index 933ee11a..e591fad0 100644 --- a/src/main/java/com/github/claudecodegui/watcher/PromptFileWatcher.java +++ b/src/main/java/com/github/claudecodegui/watcher/PromptFileWatcher.java @@ -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; diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index fb42772e..547e7d9e 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -53,7 +53,7 @@ @@ -77,7 +77,7 @@ @@ -88,7 +88,7 @@ @@ -128,7 +128,7 @@ diff --git a/src/test/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridgeRefactorTest.java b/src/test/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridgeRefactorTest.java index c410652b..9e35718a 100644 --- a/src/test/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridgeRefactorTest.java +++ b/src/test/java/com/github/claudecodegui/provider/claude/ClaudeSDKBridgeRefactorTest.java @@ -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; diff --git a/src/test/java/com/github/claudecodegui/session/SessionContextServiceTest.java b/src/test/java/com/github/claudecodegui/session/SessionContextServiceTest.java index c610f72f..43df20c5 100644 --- a/src/test/java/com/github/claudecodegui/session/SessionContextServiceTest.java +++ b/src/test/java/com/github/claudecodegui/session/SessionContextServiceTest.java @@ -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; diff --git a/src/test/java/com/github/claudecodegui/session/SessionMessageOrchestratorTest.java b/src/test/java/com/github/claudecodegui/session/SessionMessageOrchestratorTest.java index f3010741..a7db1705 100644 --- a/src/test/java/com/github/claudecodegui/session/SessionMessageOrchestratorTest.java +++ b/src/test/java/com/github/claudecodegui/session/SessionMessageOrchestratorTest.java @@ -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;