From 0c75ed1a208aa70e14304c4f82e8db0e6569a12b Mon Sep 17 00:00:00 2001 From: Clawd Date: Fri, 13 Mar 2026 09:50:09 +0800 Subject: [PATCH 1/2] fix: use kiro-cli-chat directly to prevent orphan child processes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kiro-cli is a wrapper that forks kiro-cli-chat as the actual ACP server process. When acpx sends SIGTERM to kiro-cli on session close, only the wrapper is killed while kiro-cli-chat continues running as an orphan process. These orphaned processes accumulate over time and cause port/resource conflicts that result in ACP_TURN_FAILED errors on subsequent messages in persistent sessions. Fix: point the built-in kiro agent directly at kiro-cli-chat acp, bypassing the wrapper entirely. This ensures clean process lifecycle without needing process group kill logic. Related: #42 (proposed process group cleanup approach — this commit provides a simpler fix by avoiding the wrapper altogether) --- CHANGELOG.md | 1 + README.md | 2 +- agents/Kiro.md | 2 +- agents/README.md | 4 ++-- skills/acpx/SKILL.md | 2 +- src/agent-registry.ts | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b546364..7f07d503 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ Repo: https://github.com/openclaw/acpx ### Fixes +- Agents/kiro: use `kiro-cli-chat acp` for the built-in Kiro adapter command to avoid orphan child processes. (#129) Thanks @vokako. - Agents/cursor: recognize Cursor's `Session \"...\" not found` `session/load` error format so reconnects fall back to `session/new` instead of failing. (#162) Thanks @log-li. - Output/thinking: preserve line breaks in text-mode `[thinking]` output instead of flattening multi-line thought chunks into one line. (#144) Thanks @Huarong. - Sessions/load: fall back to a fresh ACP session when adapters reject `session/load` with JSON-RPC `-32601` or `-32602`, so persistent session reconnects do not crash on partial load support. (#174) Thanks @Bortlesboat. diff --git a/README.md b/README.md index 294977a0..652be2f9 100644 --- a/README.md +++ b/README.md @@ -339,7 +339,7 @@ Built-ins: | `iflow` | native (`iflow --experimental-acp`) | [iFlow CLI](https://github.com/iflow-ai/iflow-cli) | | `kilocode` | `npx -y @kilocode/cli acp` | [Kilocode](https://kilocode.ai) | | `kimi` | native (`kimi acp`) | [Kimi CLI](https://github.com/MoonshotAI/kimi-cli) | -| `kiro` | native (`kiro-cli acp`) | [Kiro CLI](https://kiro.dev) | +| `kiro` | native (`kiro-cli-chat acp`) | [Kiro CLI](https://kiro.dev) | | `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) | | `qoder` | native (`qodercli --acp`) | [Qoder CLI](https://docs.qoder.com/cli/acp) | | `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) | diff --git a/agents/Kiro.md b/agents/Kiro.md index 3f92fd36..07568fd5 100644 --- a/agents/Kiro.md +++ b/agents/Kiro.md @@ -1,5 +1,5 @@ # Kiro - Built-in name: `kiro` -- Default command: `kiro-cli acp` +- Default command: `kiro-cli-chat acp` - Upstream: https://kiro.dev diff --git a/agents/README.md b/agents/README.md index e9f23cf2..3c60ab63 100644 --- a/agents/README.md +++ b/agents/README.md @@ -13,7 +13,7 @@ Built-in agents: - `iflow -> iflow --experimental-acp` - `kilocode -> npx -y @kilocode/cli acp` - `kimi -> kimi acp` -- `kiro -> kiro-cli acp` +- `kiro -> kiro-cli-chat acp` - `opencode -> npx -y opencode-ai acp` - `qoder -> qodercli --acp` - `qwen -> qwen --acp` @@ -29,7 +29,7 @@ Harness-specific docs in this directory: - [iFlow](Iflow.md): built-in `iflow -> iflow --experimental-acp` - [Kilocode](Kilocode.md): built-in `kilocode -> npx -y @kilocode/cli acp` - [Kimi](Kimi.md): built-in `kimi -> kimi acp` -- [Kiro](Kiro.md): built-in `kiro -> kiro-cli acp` +- [Kiro](Kiro.md): built-in `kiro -> kiro-cli-chat acp` - [OpenCode](OpenCode.md): built-in `opencode -> npx -y opencode-ai acp` - [Qoder](Qoder.md): built-in `qoder -> qodercli --acp` - [Qwen](Qwen.md): built-in `qwen -> qwen --acp` diff --git a/skills/acpx/SKILL.md b/skills/acpx/SKILL.md index 13c51152..08af1ebf 100644 --- a/skills/acpx/SKILL.md +++ b/skills/acpx/SKILL.md @@ -82,7 +82,7 @@ Friendly agent names resolve to commands: - `iflow` -> `iflow --experimental-acp` - `kilocode` -> `npx -y @kilocode/cli acp` - `kimi` -> `kimi acp` -- `kiro` -> `kiro-cli acp` +- `kiro` -> `kiro-cli-chat acp` - `opencode` -> `npx -y opencode-ai acp` - `qoder` -> `qodercli --acp` Forwards Qoder-native `--allowed-tools` and `--max-turns` startup flags from `acpx` session options. diff --git a/src/agent-registry.ts b/src/agent-registry.ts index f95892b5..7267842c 100644 --- a/src/agent-registry.ts +++ b/src/agent-registry.ts @@ -16,7 +16,7 @@ export const AGENT_REGISTRY: Record = { iflow: "iflow --experimental-acp", kilocode: "npx -y @kilocode/cli acp", kimi: "kimi acp", - kiro: "kiro-cli acp", + kiro: "kiro-cli-chat acp", opencode: "npx -y opencode-ai acp", qoder: "qodercli --acp", qwen: "qwen --acp", From 2999769c8930ec0c764dbc5c0c5d5fecfbffa5e5 Mon Sep 17 00:00:00 2001 From: Onur Solmaz <2453968+osolmaz@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:25:09 +0200 Subject: [PATCH 2/2] test: cover built-in kiro command (#129) --- test/agent-registry.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/agent-registry.test.ts b/test/agent-registry.test.ts index c0e42383..00624798 100644 --- a/test/agent-registry.test.ts +++ b/test/agent-registry.test.ts @@ -37,6 +37,11 @@ test("trae built-in uses the standard traecli executable", () => { assert.equal(resolveAgentCommand("trae"), "traecli acp serve"); }); +test("kiro built-in uses kiro-cli-chat directly", () => { + assert.equal(AGENT_REGISTRY.kiro, "kiro-cli-chat acp"); + assert.equal(resolveAgentCommand("kiro"), "kiro-cli-chat acp"); +}); + test("listBuiltInAgents preserves the required example prefix and alphabetical tail", () => { const agents = listBuiltInAgents(); assert.deepEqual(agents, Object.keys(AGENT_REGISTRY));