[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2051":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":16,"starSnapshotCount":16,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},2051,"claude-code-java","fluentlc\u002Fclaude-code-java","fluentlc","claude-code-java 是一个可嵌入任何 Java 应用的 AI Agent 引擎。claude-code-java is an embeddable AI Agent engine for Java applications.","",null,"Java",49,6,132,1,0,42.54,"MIT License",false,"main",[],"2026-06-12 04:00:13","\u003Cdiv align=\"center\">\n\n# claude-code-java\n\n**可嵌入任何 Java 应用的 AI Agent 引擎 — CLI · REST API · Web Playground**\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Java](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJava-17+-orange.svg)](https:\u002F\u002Fopenjdk.org\u002F)\n[![Spring Boot](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSpring%20Boot-3.2-green.svg)](https:\u002F\u002Fspring.io\u002Fprojects\u002Fspring-boot)\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Ffluentlc\u002Fclaude-code-java?style=social)](https:\u002F\u002Fgithub.com\u002Ffluentlc\u002Fclaude-code-java\u002Fstargazers)\n\n[中文](#中文) | [English](#english)\n\n\u003C\u002Fdiv>\n\n---\n\n## 中文\n\n### 这是什么？\n\n**claude-code-java** 是一个可嵌入任何 Java 应用的 AI Agent 引擎。它兼容 **OpenAI Chat Completions 协议**，可对接 OpenAI、Azure OpenAI、Ollama、DashScope 或任何兼容端点。\n\n提供三种开箱即用的交互方式：\n- **CLI 模式** — 终端 REPL，适合本地开发和调试\n- **REST API 模式** — 标准 HTTP 接口（同步 + SSE 流式），适合集成到其他系统\n- **Web Playground** — 内置实时流式对话界面，可视化 Agent 工作过程\n\n所有能力都源自同一个核心循环：\n\n```java\n\u002F\u002F AI Agent 的本质\nwhile (\"tool_calls\".equals(finishReason)) {\n    response = client.chat(messages, tools);\n    executeTools(response);    \u002F\u002F 执行工具调用\n    appendResults(messages);   \u002F\u002F 将结果追回对话\n}\n\u002F\u002F 10 项核心能力只是往这个循环里注入新工具和新上下文\n```\n\n---\n\n### Web Playground\n\n启动服务后访问 `http:\u002F\u002Flocalhost:8080`，无需额外配置即可使用内置的对话界面。\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│  claude-code-java                                    [新对话]      │\n├──────────────────┬──────────────────────────────────────────────┤\n│ 对话历史          │                                              │\n│                  │  [Context Compressed]  第 1 次压缩  [查看 →]  │\n│ > 帮我审查代码    │                                              │\n│   创建 Agent 团队 │  ┌─ 🤖 assistant ──────────────────────┐    │\n│                  │  │ 我将为你创建两个专家 Teammate...     │    │\n│                  │  └─────────────────────────────────────┘    │\n│                  │                                              │\n│                  │  [reviewer · 正在执行 read_file ···]         │\n│                  │  [tester   · 正在执行 write_file ···]        │\n│                  │                                              │\n│                  │  ┌ ── ── ── ── ── ── ── ── ── ── ── ── ┐    │\n│                  │    ✦ reviewer 完成（12 个工具）[工作区 →]     │\n│                  │  └ ── ── ── ── ── ── ── ── ── ── ── ── ┘    │\n│                  │                                              │\n│                  │  [输入消息...                    发送]        │\n└──────────────────┴──────────────────────────────────────────────┘\n                                                 ┌──── 工作空间 ────┐\n                                                 │ 第1次  第2次      │\n                                                 │ [压缩前完整历史]  │\n                                                 │ [Teammate 工具流]│\n                                                 └──────────────────┘\n```\n\n**核心交互特性：**\n\n| 特性 | 说明 |\n|------|------|\n| **流式渲染** | 思考过程、工具调用、文字回复逐 token 实时呈现 |\n| **思考卡片** | 执行中展开、完成自动折叠，显示耗时 |\n| **工具卡片** | 展示 Input\u002FOutput，执行完自动折叠 |\n| **压缩卡片** | 上下文压缩后不中断对话，卡片展示摘要 + 可进入历史抽屉 |\n| **Teammate 悬浮条** | Agent Teams 工作时输入框上方实时显示各 Teammate 状态 |\n| **工作空间抽屉** | 右侧滑入面板，按 Tab 区分各次压缩历史和各 Teammate 工作细节 |\n| **压缩链导航** | 多次压缩形成链式历史，可逐层回溯查看每次压缩前的完整对话 |\n| **会话侧边栏** | 历史会话持久化，点击即恢复完整对话流（含所有卡片） |\n| **Markdown 渲染** | 所有 AI 回复、摘要均支持完整 Markdown 格式 |\n\n---\n\n### 架构\n\n```\nclaude-code-java （父 pom）\n├── claude-code-java-service  —— 纯 Java 17 库（无框架依赖）\n│   ├── core\u002F        OpenAiClient · BaseTools · SecurityUtils\n│   │                ShellUtils · ToolHandler\n│   ├── capability\u002F  TodoManager · ContextCompactor · BackgroundRunner\n│   │                TaskStore · WorktreeManager · SkillLoader\n│   │                MessageBus · TeammateRunner · SessionStore\n│   │                TeamProtocol · TaskPoller\n│   ├── tool\u002F        8 个 ToolProvider\n│   └── agent\u002F       AgentLoop · TeammateLoop · AgentAssembler · SlashRouter\n│\n└── claude-code-java-start    —— Spring Boot 3.2 应用层\n    ├── Application.java     统一入口\n    ├── cli\u002FCliRunner        @Profile(\"cli\") REPL\n    ├── web\u002Fcontroller\u002F      ChatController（REST + SSE 流式端点）\n    ├── web\u002Fservice\u002F         StreamService（AgentEventListener → SSE 事件）\n    │                        ChatService（同步对话）\n    ├── config\u002FAgentBeans   Spring @Bean 配置\n    └── resources\u002Fstatic\u002F   index.html（Web Playground 单页应用）\n```\n\n---\n\n### 10 项核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **TodoManager** | Agent 自我跟踪任务，每 3 轮未完成自动触发提醒 |\n| **SkillLoader** | 从 `.\u002Fskills\u002F` 目录按需注入技能提示词，不污染主上下文 |\n| **ContextCompactor** | 三层压缩管道（微压缩 → 自动压缩 40 条消息 → 手动 `\u002Fcompact`），压缩历史持久化为 `.transcripts\u002F` 文件 |\n| **TaskStore** | JSON 文件持久化任务状态，含依赖图，重启后自动恢复 |\n| **BackgroundRunner** | 线程池异步执行，fire-and-forget，完成后通知注入主循环 |\n| **MessageBus** | JSONL 格式收件箱\u002F发件箱，支持多 Agent 间消息传递 |\n| **TeammateRunner** | Agent Teams 核心 — 动态 spawn Teammate，每个 Teammate 在独立线程中运行完整 LLM 循环，通过 MessageBus 通信、TaskStore 自主认领任务；会话实时持久化（每次工具调用后），Web Playground 可实时查看 |\n| **SessionStore** | REST 会话持久化（`.sessions\u002F{id}.json`），进程重启后自动恢复；Teammate 子会话独立存储（`{leadId}-tm-{name}.json`） |\n| **TeamProtocol** | request_id 关联的关闭\u002F审批协议，规范 Agent 间交互 |\n| **WorktreeManager** | Git Worktree 目录级隔离，每个任务独立目录 + 独立分支 |\n\n---\n\n### 快速开始\n\n**第一步：克隆并配置**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffluentlc\u002Fclaude-code-java.git\ncd claude-code-java\n```\n\n启动后访问 Playground，点击顶部「设置」菜单配置模型：\n\n| 配置项 | 说明 |\n|--------|------|\n| API Key | 你的 OpenAI 协议 API 密钥 |\n| Base URL | 服务端地址，如 `https:\u002F\u002Fapi.openai.com` |\n| Model ID | 模型 ID，如 `gpt-4o` |\n\n配置保存在服务端 `.models\u002Fmodels.json`，重启后自动恢复。\n\n**第二步：编译**\n\n```bash\nmvn compile\n```\n\n**第三步：选择启动方式**\n\n```bash\n# Web Playground + REST API 模式（端口 8080，推荐）\nmvn exec:java -pl claude-code-java-start \\\n  -Dexec.mainClass=\"ai.claude.code.Application\"\n# 然后访问 http:\u002F\u002Flocalhost:8080\n\n# CLI 交互模式（REPL）\nmvn exec:java -pl claude-code-java-start \\\n  -Dexec.mainClass=\"ai.claude.code.Application\" \\\n  -Dspring.profiles.active=cli\n```\n\n---\n\n### REST API\n\n#### 同步接口\n\n```bash\n# 发送消息（首次对话，省略 sessionId）\ncurl -X POST http:\u002F\u002Flocalhost:8080\u002Fapi\u002Fchat \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"message\": \"帮我创建一个 Hello.java\"}'\n\n# 继续对话（携带上一次返回的 sessionId）\ncurl -X POST http:\u002F\u002Flocalhost:8080\u002Fapi\u002Fchat \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"sessionId\": \"550e8400-...\", \"message\": \"再添加一个 main 方法\"}'\n\n# 清除会话历史\ncurl -X DELETE http:\u002F\u002Flocalhost:8080\u002Fapi\u002Fsessions\u002F550e8400-...\n```\n\n#### SSE 流式接口\n\n```bash\n# 流式对话（Server-Sent Events）\ncurl -N -X POST http:\u002F\u002Flocalhost:8080\u002Fapi\u002Fchat\u002Fstream \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"message\": \"用 Python 写一个快排\"}'\n```\n\n**SSE 事件协议：**\n\n| 事件 | payload | 说明 |\n|------|---------|------|\n| `session_id` | `{\"sessionId\":\"...\"}` | 会话 ID（首条事件） |\n| `thinking_start` | — | 思考开始 |\n| `thinking_text` | `{\"text\":\"...\"}` | 思考内容 token |\n| `thinking_end` | `{\"ms\":1234}` | 思考结束（含耗时） |\n| `text_delta` | `{\"text\":\"...\"}` | 文字回复 token |\n| `tool_start` | `{\"toolName\":\"bash\",\"toolCallId\":\"...\",\"input\":\"...\"}` | 工具开始执行 |\n| `tool_end` | `{\"toolCallId\":\"...\",\"output\":\"...\"}` | 工具执行完成 |\n| `tool_error` | `{\"toolCallId\":\"...\",\"error\":\"...\"}` | 工具执行出错 |\n| `compact_done` | `{\"summary\":\"...\",\"transcriptFile\":\"...\"}` | 上下文压缩完成 |\n| `team_tool_start` | `{\"agentId\":\"...\",\"toolName\":\"...\"}` | Teammate 工具开始 |\n| `team_tool_end` | `{\"agentId\":\"...\",\"toolName\":\"...\"}` | Teammate 工具完成 |\n| `team_text` | `{\"agentId\":\"...\",\"text\":\"...\"}` | Teammate 文字输出 |\n| `team_done` | `{\"agentId\":\"...\"}` | Teammate 完成 |\n| `done` | — | 本轮对话结束 |\n| `error` | `{\"message\":\"...\"}` | 错误 |\n\n#### 会话与历史接口\n\n```bash\n# 获取所有会话列表（仅 lead 会话，按更新时间排序）\nGET \u002Fapi\u002Fsessions\n\n# 获取会话消息历史\nGET \u002Fapi\u002Fsessions\u002F{sessionId}\u002Fmessages\n\n# 获取会话关联的 Teammate 列表\nGET \u002Fapi\u002Fsessions\u002F{sessionId}\u002Fteammates\n\n# 获取压缩前历史记录文件（transcript chain 导航）\nGET \u002Fapi\u002Ftranscripts\u002F{filename}\n\n# 健康检查\nGET \u002Factuator\u002Fhealth\n```\n\n---\n\n### Slash 命令（CLI 模式）\n\n| 命令 | 说明 |\n|------|------|\n| `\u002Fhelp` | 显示所有可用命令 |\n| `\u002Ftasks` | 列出当前任务状态 |\n| `\u002Fskill [name]` | 加载指定技能 |\n| `\u002Fcompact` | 手动触发上下文压缩 |\n| `\u002Fteam` | 查看团队消息总线状态 |\n| `\u002Fworktree [name]` | 管理 Git Worktree |\n\n---\n\n### 扩展：添加自定义工具\n\n扩展只需两步：\n\n```java\n\u002F\u002F 第一步：实现 ToolProvider 接口\npublic class MyTool implements ToolProvider {\n    @Override\n    public Map\u003CString, ToolHandler> handlers() {\n        Map\u003CString, ToolHandler> m = new LinkedHashMap\u003C>();\n        m.put(\"my_tool\", input -> doSomething(input.get(\"arg\").getAsString()));\n        return m;\n    }\n\n    @Override\n    public List\u003CJsonObject> definitions() {\n        return List.of(ToolUtils.toolDef(\"my_tool\", \"Does something useful.\",\n            ToolUtils.schema(\"arg\", \"string\", \"true\")));\n    }\n}\n\n\u002F\u002F 第二步：在 AgentAssembler.buildProviders() 中注册\nlist.add(new MyTool());\n```\n\n---\n\n### Harness 实践\n\n本项目完整展示了以下 AI Agent harness 设计模式，可直接用于生产系统参考：\n\n#### AgentLoop 模式\n核心 while 循环是所有 Agent 框架的本质。`stop_reason == \"tool_calls\"` 继续，`\"end_turn\"` 退出。工具注册、上下文管理、多轮状态维护均封装在 `AgentLoop` 中，可被任何 Java 应用嵌入。\n\n#### ToolProvider 接口\n工具以插件式 `ToolProvider` 接口注册，每个工具类同时提供：\n- `handlers()` — 工具名到处理器函数的映射（执行逻辑）\n- `definitions()` — 供 LLM 识别的 JSON Schema 描述\n\n新增工具只需两行代码，不修改任何框架代码。\n\n#### AgentEventListener 事件总线\n`AgentLoop` 在每个关键节点发出事件（thinking start\u002Fend、tool start\u002Fend、compact done、team events）。通过 `AgentEventListener` 接口解耦，同一个 Agent 引擎可以同时服务：\n- CLI 模式（打印到 stdout）\n- SSE 流式模式（推送给浏览器）\n- 测试模式（收集断言数据）\n\n#### TeammateRunner 多 Agent 编排\nTeammate 在独立线程中运行完整 LLM 循环，通过 `MessageBus` 通信、`TaskStore` 自主认领任务、`sessionStore` 实时持久化。Lead 通过 `AgentEventListener` 接收 Teammate 事件，无需轮询。\n\n#### ContextCompactor 三层压缩\n- **Layer 1 Micro Compact**：每轮自动压缩旧 `tool_result`，保持最近 3 轮工具结果原文\n- **Layer 2 Auto Compact**：消息数超过阈值时 LLM 生成摘要，历史存档到 `.transcripts\u002F`\n- **Layer 3 Manual Compact**：用户随时可手动触发 `\u002Fcompact`\n\n每次压缩通过 `_transcript_file` 字段形成链式追溯，Web Playground 支持逐层回看。\n\n---\n\n### AI Coding 实践\n\n本项目本身是 **AI 辅助开发**的实际产物 — 所有迭代均通过与 Claude Code 的对话完成，0 行手写代码：\n\n- **完整 AI 开发流程**：从系统架构设计、Java 后端实现、Spring Boot 配置，到 Web 前端的全部代码，均在对话中生成\n- **迭代驱动**：每个版本（v0.1 → v0.13）对应一轮对话，见 [docs\u002FCHANGELOG.md](docs\u002FCHANGELOG.md)\n- **实时调试**：通过 Web Playground 观察 Agent 自身的思考和工具调用过程，发现并修复 bug\n- **自举验证**：用 claude-code-java 引擎驱动 Claude Code Agent，生成并维护这个 claude-code-java 项目本身\n\n这是一个「用 AI 工具构建 AI 工具」的完整循环，每条 CHANGELOG 条目都是 AI 辅助开发的真实记录。\n\n---\n\n### 安全模型\n\n- **`SecurityUtils.isDangerous()`** — 危险命令黑名单（`rm -rf \u002F`、`sudo`、`shutdown` 等）\n- **`BaseTools.safePath()`** — 路径穿越保护，所有文件操作严格限制在工作目录内\n- **`ShellUtils`** — 可配置执行超时 + 输出截断，防止失控命令阻塞主循环\n- **Transcript API** — basename 校验防路径穿越，只读取 `.transcripts\u002F` 目录内文件\n\n---\n\n### 参与贡献\n\n欢迎任何形式的贡献：\n\n- **发现 Bug** — [提交 Issue](https:\u002F\u002Fgithub.com\u002Ffluentlc\u002Fclaude-code-java\u002Fissues)\n- **有新想法** — [发起讨论](https:\u002F\u002Fgithub.com\u002Ffluentlc\u002Fclaude-code-java\u002Fissues)\n- **想改代码** — Fork → 新建分支 → 提 PR\n\n贡献前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n---\n\n### 开源协议\n\n本项目采用 [MIT License](LICENSE) 开源。\n\n© 2026 fluentlc\n\n---\n\n\u003Cdiv align=\"center\">\n\n如果这个项目对你有帮助，欢迎点一个 Star ⭐\n\n\u003C\u002Fdiv>\n\n---\n\n## English\n\n### What is this?\n\n**claude-code-java** is an embeddable AI Agent engine for Java applications. It speaks the **OpenAI Chat Completions protocol** and works with OpenAI, Azure OpenAI, Ollama, DashScope, or any compatible endpoint.\n\nThree interaction modes out of the box:\n- **CLI mode** — Terminal REPL for local development\n- **REST API mode** — Standard HTTP interface (synchronous + SSE streaming) for system integration\n- **Web Playground** — Built-in real-time streaming UI to visualize agent execution\n\n---\n\n### Web Playground\n\nStart the server and visit `http:\u002F\u002Flocalhost:8080` — no extra configuration needed.\n\nKey features:\n- **Real-time SSE streaming** — thinking blocks, tool calls, and text replies rendered token-by-token\n- **Agent Teams visualization** — floating teammate status bar + workspace drawer with per-agent tabs\n- **Context compression history** — multi-layer transcript chain, navigate between compression snapshots\n- **Session sidebar** — persistent session history, click to restore full conversation with all cards\n- **Workspace drawer** — right-side sliding panel for compression history and teammate work details\n\n---\n\n### Architecture\n\n```\nclaude-code-java (parent pom)\n├── claude-code-java-service  — Pure Java 17 library (no framework dependencies)\n│   ├── core\u002F        OpenAiClient · BaseTools · SecurityUtils\n│   │                ShellUtils · ToolHandler\n│   ├── capability\u002F  TodoManager · ContextCompactor · BackgroundRunner\n│   │                TaskStore · WorktreeManager · SkillLoader\n│   │                MessageBus · TeammateRunner · SessionStore\n│   │                TeamProtocol · TaskPoller\n│   ├── tool\u002F        8 ToolProviders\n│   └── agent\u002F       AgentLoop · TeammateLoop · AgentAssembler · SlashRouter\n│\n└── claude-code-java-start    — Spring Boot 3.2 application layer\n    ├── Application.java     unified entry point\n    ├── cli\u002FCliRunner        @Profile(\"cli\") REPL\n    ├── web\u002Fcontroller\u002F      ChatController (REST + SSE streaming)\n    ├── web\u002Fservice\u002F         StreamService (AgentEventListener → SSE events)\n    │                        ChatService (synchronous chat)\n    ├── config\u002FAgentBeans   Spring @Bean configuration\n    └── resources\u002Fstatic\u002F   index.html (Web Playground SPA)\n```\n\n---\n\n### Quick Start\n\n**Step 1: Clone and configure**\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ffluentlc\u002Fclaude-code-java.git\ncd claude-code-java\n```\n\nAfter starting the server, open the Playground and configure your model via the **Settings** menu in the top nav:\n\n| Setting | Description |\n|---------|-------------|\n| API Key | Your OpenAI-compatible API key |\n| Base URL | Endpoint, e.g. `https:\u002F\u002Fapi.openai.com` |\n| Model ID | Model identifier, e.g. `gpt-4o` |\n\nConfiguration is persisted server-side in `.models\u002Fmodels.json` and survives restarts.\n\n**Step 2: Build**\n\n```bash\nmvn compile\n```\n\n**Step 3: Start**\n\n```bash\n# Web Playground + REST API mode (port 8080, recommended)\nmvn exec:java -pl claude-code-java-start \\\n  -Dexec.mainClass=\"ai.claude.code.Application\"\n# Visit http:\u002F\u002Flocalhost:8080\n\n# CLI mode (REPL)\nmvn exec:java -pl claude-code-java-start \\\n  -Dexec.mainClass=\"ai.claude.code.Application\" \\\n  -Dspring.profiles.active=cli\n```\n\n---\n\n### Harness Patterns\n\nThis project demonstrates production-grade AI Agent harness patterns:\n\n**AgentLoop** — The fundamental while-loop of every Agent framework. `stop_reason == \"tool_calls\"` continues execution; `\"end_turn\"` exits. Embeddable in any Java application.\n\n**ToolProvider** — Plugin interface for tools. Each class provides `handlers()` (execution logic) and `definitions()` (JSON Schema for LLM). Register in one line.\n\n**AgentEventListener** — Event bus for the agent lifecycle. Same engine serves CLI, SSE streaming, and test mode by swapping the listener implementation.\n\n**TeammateRunner** — Multi-agent orchestration with independent LLM loops per teammate, shared MessageBus, TaskStore for task claiming, and real-time session persistence.\n\n**ContextCompactor** — Three-layer compression pipeline with transcript chain linking for full history navigation.\n\n---\n\n### Extension Guide\n\n```java\n\u002F\u002F Step 1: implement ToolProvider\npublic class MyTool implements ToolProvider {\n    @Override\n    public Map\u003CString, ToolHandler> handlers() {\n        var m = new LinkedHashMap\u003CString, ToolHandler>();\n        m.put(\"my_tool\", input -> doSomething(input.get(\"arg\").getAsString()));\n        return m;\n    }\n    @Override\n    public List\u003CJsonObject> definitions() {\n        return List.of(ToolUtils.toolDef(\"my_tool\", \"Does something useful.\",\n            ToolUtils.schema(\"arg\", \"string\", \"true\")));\n    }\n}\n\n\u002F\u002F Step 2: register in AgentAssembler.buildProviders()\nlist.add(new MyTool());\n```\n\n---\n\n### License\n\n[MIT License](LICENSE) — © 2026 fluentlc\n\n---\n\n\u003Cdiv align=\"center\">\n\nIf this project helps you, a Star goes a long way ⭐\n\n\u003C\u002Fdiv>\n","claude-code-java 是一个可嵌入任何 Java 应用的 AI Agent 引擎，兼容 OpenAI Chat Completions 协议，支持对接多种 AI 服务。该项目提供了三种交互方式：CLI 模式、REST API 模式以及 Web Playground，分别适用于本地开发调试、系统集成和实时对话展示。其核心功能基于一个简洁的循环机制，通过执行工具调用并追加结果来实现与用户的多轮对话。特别适合需要在 Java 应用中引入智能代理功能的开发者，如代码审查、自动化测试等场景。",2,"2026-06-11 02:47:47","CREATED_QUERY"]