
https://github.com/ruokkkkk/jcode
jcode 是一个基于 Java 的 AI 命令行编程助手,灵感来自 Claude Code,由 AgentScope Java Harness 驱动。它能读写文件、 搜索代码、执行 shell 命令,并通过持久化记忆与会话跨进程保持上下文。
jcode> read README.md and summarize the build steps
目录
- 特性
- 先决条件
- 快速开始
- 配置
- 使用
斜杠命令 - 多行输入
- 会话与恢复
- 架构
- 项目结构
- 常见问题
- 开发
- 更多文档
- License
特性
- 文件操作:读、写、编辑、搜索项目文件(基于 AgentScope
LocalFilesystemWithShell) - Shell 执行:运行构建、测试和任意 shell 命令;Windows 下自动复用 Git Bash 的
sh.exe - 持久化记忆:每日事实日志 + 长期记忆双层结构,跨会话保留
- 上下文压缩:历史过长时自动摘要,长会话也不会爆 token
- 会话管理:固定 session ID 持久化,或按编号恢复最近的工作区会话
- 流式输出:助手回复随生成增量渲染,不必等待整轮完成
- REPL 体验:持久输入历史、多行续行(
\、未闭合 fence/括号)、斜杠命令补全 - 健康诊断:
/doctor一键自检文件系统与 shell 能力
先决条件
| JDK 21+ | |
| OpenAI 兼容 API Key | |
| Git Bash(Windows 仅) | sh.exe 给 shell 工具调用;安装 Git for Windows 即可 |
不需要预装 Maven —— 仓库内置 Maven Wrapper(
mvnw/mvnw.cmd),首次构建会自动下载 Maven 3.9.9。
快速开始
1. 获取代码
git clone <repo-url>
cd jcode
2. 配置 API Key
方式 A — 环境变量(推荐,不入库)
# macOS / Linux
export OPENAI_API_KEY=sk-...
# Windows PowerShell
$env:OPENAI_API_KEY = "sk-..."
方式 B — application.properties
编辑 src/main/resources/application.properties:
openai.api.key=sk-...
openai.base.url=https://api.openai.com/v1 # 可选,自定义端点
openai.model=gpt-4o # 可选
如果你打算把项目入库到公开仓库,把这个文件加入
.gitignore。
3. 构建并运行
Windows
.\mvnw.cmd package -DskipTests
java -jar target\jcode-0.1.0-SNAPSHOT.jar
或直接用打包好的脚本(自动校验 API Key、注入 sh.exe 到 PATH):
.\jcode.bat
macOS / Linux
./mvnw package -DskipTests
java -jar target/jcode-0.1.0-SNAPSHOT.jar
开发模式(不打包,直接 exec):
./mvnw exec:java # macOS / Linux
.\mvnw.cmd exec:java # Windows
启动后将看到:
jcode 0.1.0
Type /help for available commands.
jcode>
配置
openai.api.key | OPENAI_API_KEY | (必填) | |
openai.base.url | OPENAI_BASE_URL | https://api.openai.com/v1 | |
openai.model | JCODE_MODEL | gpt-4o | |
jcode.workspace | JCODE_WORKSPACE | .jcode/workspace | |
jcode.session | JCODE_SESSION | (自动生成) |
优先级(从高到低):环境变量 → application.properties → 内置默认值。
使用
启动后进入 REPL,普通输入会发送给 AI 智能体;以 / 开头的输入会被解释为本地命令。
斜杠命令
/help | |
/exit/quit | |
/clear | |
/model | |
/session(或 /session list) | |
/resume <编号或 ID> | /resume 1 或 /resume jcode-4527b76d) |
/compact | |
/doctor | |
/rm <path> |
多行输入
需要粘贴多行代码或长 prompt 时:
- 行末加
\显式续行 - 未闭合的
围栏会自动续行 - 未闭合的
()、[]、{}会自动续行 - 历史可用 ↑/↓ 翻阅,跨进程持久化
会话与恢复
jcode> /session
Current session: jcode-4527b76d
jcode> /session list
1 jcode-4527b76d (last used 5m ago)
2 jcode-91ac2f01 (last used 2h ago)
jcode> /resume 2
Resumed session jcode-91ac2f01
或者启动时直接固定 session:
JCODE_SESSION=my-project java -jar target/jcode-0.1.0-SNAPSHOT.jar
架构
┌────────────┐ ┌────────────────┐ ┌─────────────────────────┐
│ User Input │───▶│ JCodeShell │───▶│ CommandDispatcher │
└────────────┘ └────────────────┘ └────────────┬────────────┘
│
┌──────────────────────┴──────────────────────┐
▼ ▼
┌──────────────────────────┐ ┌──────────────────────────┐
│ AgentConversationService │ │ SlashCommands │
│ (HarnessAgent + Tools) │ │ help/exit/model/... │
└────────────┬─────────────┘ └──────────────────────────┘
│
▼
┌──────────────────────┐
│ AgentScope Harness │
│ • Filesystem Tool │
│ • Shell Tool │
│ • Memory & Compact │
│ • Session Persist │
└──────────────────────┘
底层依赖 AgentScope Java Harness 提供:
- Workspace 上下文注入:从工作区文件加载 agent persona 与领域知识
- 两层记忆:每日事实日志 + 长期合并记忆
- 自动压缩:历史过长时摘要后再继续
- 会话持久化:跨进程恢复同一会话状态
项目结构
jcode/
├── mvnw / mvnw.cmd # Maven Wrapper
├── .mvn/wrapper/ # Wrapper 配置
├── pom.xml # 构建定义
├── jcode.bat # Windows 一键启动脚本
├── docs/ # 详细文档
│ ├── INSTALLATION.md
│ └── DOCKER_DEPLOYMENT.md
├── src/main/java/jcode/
│ ├── JCodeRepl.java # 入口
│ ├── JCodeConfig.java # 配置加载
│ ├── AnsiColors.java # 终端着色
│ ├── agent/ # AI 对话与工具调用
│ ├── command/ # 斜杠命令实现
│ ├── filesystem/ # 文件系统适配 / 路径规范化
│ ├── session/ # 会话状态与持久化
│ ├── shell/ # REPL 主循环、命令分发、补全
│ └── ui/ # CLI 渲染
├── src/main/resources/
│ └── application.properties # 默认配置模板
└── .jcode/workspace/ # 运行时工作区(自动创建)
常见问题
启动报 Invalid signature file digest for Manifest main attributes
shaded fat-jar 中包含了被签名过的依赖(如 jna),Shade 重新打包后签名失效。 本项目 pom.xml 已在 maven-shade-plugin 中配置 META-INF/*.SF|*.DSA|*.RSA 过滤;如果你 fork 后自己改了 shade 配置导致复发,请确保 filter 段保留。
Windows 下 shell 工具报 sh.exe not found
AgentScope 的 shell 工具依赖 POSIX sh。安装 Git for Windows, 然后运行 jcode.bat(它会自动把 Git 自带的 sh.exe 加入 PATH)。或手动:
$env:PATH = "C:\Program Files\Git\bin;$env:PATH"
java -jar target\jcode-0.1.0-SNAPSHOT.jar
模型一直返回 401 / 网络错误
jcode> /doctor
会打印当前的端点、模型、工作区、文件系统类型,帮助快速定位是 key、URL 还是网络问题。
想用第三方 OpenAI 协议端点(DeepSeek / LongCat / 通义千问 等)
只需配置 openai.base.url 和 openai.model 即可,例如:
openai.api.key=ak_xxxx
openai.base.url=https://api.longcat.chat/openai
openai.model=LongCat-2.0-Preview
开发
运行测试
./mvnw test# macOS / Linux
.\mvnw.cmd test# Windows
加一个新斜杠命令
- 在
src/main/java/jcode/command/下新建XxxCommand.java,实现CommandHandler接口 - 在
JCodeRepl启动时通过CommandRegistry.register(...)注册 /help会自动列出新命令
构建可执行 fat-jar
./mvnw clean package -DskipTests
# 产物: target/jcode-0.1.0-SNAPSHOT.jar
更多文档
- docs/INSTALLATION.md — 详细安装指南(含 IDE 配置、JDK 安装、验证步骤)
- docs/DOCKER_DEPLOYMENT.md — Docker 部署
- AgentScope Java 文档 — 底层 Harness 的能力与扩展点
License
MIT
夜雨聆风