Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ covers:

Codex, Cursor, Windsurf, VS Code, VS Code Insiders, Zed, Gemini CLI, Cline,
Kilo Code, Roo Code, Kiro, Trae, Cherry Studio, OpenCode, Qwen Code,
Kimi Code CLI.
Kimi Code.

</details>

Expand Down
2 changes: 1 addition & 1 deletion docs/implementation-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ Adjacent reference docs:

See [Packaging & Distribution](packaging-distribution.md) for full detail. The short version:

- [x] clean install docs for Claude Code, Claude Desktop, Codex, and Antigravity (README + dock auto-configure with manual fallback for 19 clients including Cursor, Cline, Roo Code, Kilo, OpenCode, Zed, Windsurf, VS Code/Insiders, Trae, Kiro, Gemini CLI, Cherry Studio, Qwen Code, Kimi Code CLI)
- [x] clean install docs for Claude Code, Claude Desktop, Codex, and Antigravity (README + dock auto-configure with manual fallback for 19 clients including Cursor, Cline, Roo Code, Kilo, OpenCode, Zed, Windsurf, VS Code/Insiders, Trae, Kiro, Gemini CLI, Cherry Studio, Qwen Code, Kimi Code)
- [x] PyPI / `uvx` path works reliably — automated via `bump-and-release.yml`; live on PyPI as `godot-ai`; `uvx --from godot-ai~=VERSION godot-ai` is the canonical user-install command. Stdio-only clients (Claude Desktop, Zed) bridge through `uvx mcp-proxy`. Stale-index retries (`--refresh`) and cache priming on self-update prevent flaky first-run failures.
- [ ] desktop binary path is real, not aspirational
- [x] plugin is downloadable from the Godot AssetLib — live as [asset/5050](https://godotengine.org/asset-library/asset/5050) and on the new [Godot Asset Store](https://store.godotengine.org/asset/dlight/godot-ai/); release ZIP workflow ships `godot-ai-plugin.zip` via GitHub Releases; dock self-update banner offers one-click upgrades that survive without an editor restart (`update_reload_runner.gd` handoff). Local self-update smoke (`script/local-self-update-smoke`) is the regression gate.
Expand Down
8 changes: 4 additions & 4 deletions plugin/addons/godot_ai/clients/_cli_strategy.gd
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const _STATUS_TIMEOUT_MS := 6000
static func configure(client: McpClient, server_name: String, server_url: String) -> Dictionary:
var cli := _resolve_cli(client)
if cli.is_empty():
return {"status": "error", "message": "%s CLI not found" % client.display_name}
return {"status": "error", "message": "%s not found" % client.display_name}

# Best-effort prior cleanup so re-configure is idempotent. Bounded to
# the same budget — a hung unregister shouldn't block the configure
Expand All @@ -41,7 +41,7 @@ static func configure(client: McpClient, server_name: String, server_url: String
],
}
if result.get("spawn_failed", false):
return {"status": "error", "message": "Failed to spawn %s CLI" % client.display_name}
return {"status": "error", "message": "Failed to spawn %s" % client.display_name}
if int(result.get("exit_code", -1)) == 0:
return {"status": "ok", "message": "%s configured (HTTP: %s)" % [client.display_name, server_url]}
## `claude mcp add` writes its real failure diagnostics to stderr, so
Expand Down Expand Up @@ -103,7 +103,7 @@ static func _status_details(status: McpClient.Status, error_msg: String = "") ->
static func remove(client: McpClient, server_name: String) -> Dictionary:
var cli := _resolve_cli(client)
if cli.is_empty():
return {"status": "error", "message": "%s CLI not found" % client.display_name}
return {"status": "error", "message": "%s not found" % client.display_name}
if client.cli_unregister_template.is_empty():
return {"status": "error", "message": "%s descriptor missing cli_unregister_template" % client.display_name}
var args := _format_args(client.cli_unregister_template, server_name, "")
Expand All @@ -116,7 +116,7 @@ static func remove(client: McpClient, server_name: String) -> Dictionary:
],
}
if result.get("spawn_failed", false):
return {"status": "error", "message": "Failed to spawn %s CLI" % client.display_name}
return {"status": "error", "message": "Failed to spawn %s" % client.display_name}
if int(result.get("exit_code", -1)) == 0:
return {"status": "ok", "message": "%s configuration removed" % client.display_name}
## `claude mcp add` writes its real failure diagnostics to stderr, so
Expand Down
2 changes: 1 addition & 1 deletion plugin/addons/godot_ai/clients/kimi_code.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ extends McpClient

func _init() -> void:
id = "kimi_code"
display_name = "Kimi Code CLI"
display_name = "Kimi Code"
config_type = "cli"
doc_url = "https://moonshotai.github.io/kimi-cli/"
cli_names = PackedStringArray(["kimi", "kimi.exe"] if OS.get_name() == "Windows" else ["kimi"])
Expand Down
1 change: 1 addition & 0 deletions plugin/addons/godot_ai/clients/kimi_code.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://d2whd6a5fofhg
Loading