feat: add Claude Code and Qoder agent engines

- Introduce `engine` field on agent profiles (codex/claude/qoder); auto-inferred from command when omitted.
- Default profiles now include `claude-bypass` (mirrors `ccx='claude --permission-mode bypassPermissions'`) and `qoder-yolo` (mirrors `qxx='qodercli --yolo'`), both running headless with `-p --output-format stream-json` so session ids can be extracted for resume.
- Stream-json engines share parsing: session_id pulled from `system.init`, task stdout shows only assistant text plus a `[done]` line, tool_use/tool_result noise dropped.
- Resume builds `--resume <sid> <prompt>` for stream-json engines, keeps Codex's `resume <sid> <prompt>` positional form.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 15:08:28 +08:00
parent 677d41074b
commit 7ab826ac7e
3 changed files with 228 additions and 14 deletions

View File

@@ -94,6 +94,7 @@ npm start
{
"id": "codex-full",
"label": "Codex Full Permission",
"engine": "codex",
"command": "codex",
"args": [
"--dangerously-bypass-approvals-and-sandbox",
@@ -103,6 +104,32 @@ npm start
"--cd",
"{workspace_path}"
]
},
{
"id": "claude-bypass",
"label": "Claude Code Bypass",
"engine": "claude",
"command": "claude",
"args": [
"--permission-mode",
"bypassPermissions",
"-p",
"--output-format",
"stream-json",
"--verbose"
]
},
{
"id": "qoder-yolo",
"label": "Qoder YOLO",
"engine": "qoder",
"command": "qodercli",
"args": [
"--yolo",
"-p",
"--output-format",
"stream-json"
]
}
]
}
@@ -132,10 +159,25 @@ IPADS_API_KEY=replace-with-your-ipads-api-key
## Agent Session 历史
任务历史会保存到 `~/.config/local-kanban/state.json`。每次 Codex 启动后,服务会从输出中提取 `session id` 并记录到对应的 project/branch。之后在同一个 project/branch 下,可以在 Web UI 的 “历史 Session” 下拉框里选择之前的任务,点击 “继续 Session” 发送新指令。
任务历史会保存到 `~/.config/local-kanban/state.json`。每次 agent 启动后,服务会从输出中提取 `session id` 并记录到对应的 project/branch。之后在同一个 project/branch 下,可以在 Web UI 的 “历史 Session” 下拉框里选择之前的任务,点击 “继续 Session” 发送新指令。
继续会话使用
默认内置三个 agent profile可在 Agent 配置下拉框里切换
- `codex-full` — Codex完全权限模式
- `claude-bypass` — Claude Code等价于本地 `alias ccx='claude --permission-mode bypassPermissions'`,但跑在 headless 模式下(`-p --output-format stream-json --verbose`),方便提取 `session_id`
- `qoder-yolo` — Qoder CLI等价于本地 `alias qxx='qodercli --yolo'`headless 模式下加 `-p --output-format stream-json`
继续会话使用(按 engine
```bash
# codex
codex --dangerously-bypass-approvals-and-sandbox exec --sandbox danger-full-access --cd <workspace> resume <session_id> <prompt>
# claude
claude --permission-mode bypassPermissions -p --output-format stream-json --verbose --resume <session_id> <prompt>
# qoder
qodercli --yolo -p --output-format stream-json --resume <session_id> <prompt>
```
Profile 自定义时可设 `engine: "codex"` / `"claude"` / `"qoder"` 来选择参数构造与 session id 解析方式;省略时根据 `command` 推断。Claude 和 Qoder 的 stream-json 输出 schema 一致,前端展示时都只渲染 assistant 文本和最终 `[done]` 行。