Wave 3: 补齐九个适配器(Qwen/CodeBuddy/Cline/Copilot/Crush/Goose/Aider/Cursor/Warp)
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -214,7 +214,24 @@
|
||||
"type": { "type": "string", "enum": ["string", "url", "enum", "bool"] },
|
||||
"storage": { "type": "string", "enum": ["file", "env", "keyring"], "description": "keyring 永不进普通备份" },
|
||||
"platforms": { "type": "array", "items": { "type": "string", "enum": ["windows", "linux"] } },
|
||||
"docs_url": { "type": "string", "format": "uri" }
|
||||
"docs_url": { "type": "string", "format": "uri" },
|
||||
"options": {
|
||||
"type": "array",
|
||||
"description": "enum 类型的可选值(value + 中文名)",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["value", "label_zh"],
|
||||
"properties": {
|
||||
"value": { "type": "string" },
|
||||
"label_zh": { "type": "string" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"type": "string",
|
||||
"description": "表单分组:auth(授权/登录)| common(常用配置)| advanced(高级配置,默认折叠)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -236,6 +253,8 @@
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"quickstart_zh": { "type": "string" },
|
||||
"install_zh": { "type": "string", "description": "安装说明(中文)" },
|
||||
"auth_zh": { "type": "string", "description": "授权说明(中文)" },
|
||||
"commands": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -247,6 +266,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"params": {
|
||||
"type": "array",
|
||||
"description": "常用参数(中文)",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"param": { "type": "string" },
|
||||
"desc_zh": { "type": "string" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"updated_at": { "type": "string", "format": "date" },
|
||||
"risks_zh": { "type": "array", "items": { "type": "string" } }
|
||||
}
|
||||
|
||||
+139
-21
@@ -1,28 +1,146 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Aider(aider.chat)(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# 注意:官方独立安装器 aider-install / PyPI aider-chat;不走 brew;独立 Python 3.12 环境。
|
||||
# ============================================================
|
||||
id: aider
|
||||
name: Aider
|
||||
name_zh: Aider
|
||||
vendor: aider.chat
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: Apache-2.0
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 官方 PS 脚本 / PyPI;独立 Python 3.12 环境
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://aider.chat
|
||||
docs: https://aider.chat/docs/
|
||||
allowed_hosts: [aider.chat, pypi.org, github.com]
|
||||
|
||||
runtime_deps:
|
||||
- id: uv
|
||||
semver_range: ">=0"
|
||||
required_for: [install]
|
||||
- id: python
|
||||
semver_range: ">=3.12"
|
||||
required_for: [run]
|
||||
|
||||
install:
|
||||
preferred: official_script
|
||||
channels:
|
||||
- id: official_script
|
||||
platforms: [windows]
|
||||
script:
|
||||
url: https://aider.chat/install.ps1
|
||||
kind: powershell_irm
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: official_script
|
||||
platforms: [linux]
|
||||
script:
|
||||
url: https://aider.chat/install.sh
|
||||
kind: bash_pipe
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: pypi_uv
|
||||
platforms: [windows, linux]
|
||||
command: [uv, tool, install, aider-chat]
|
||||
package: aider-chat
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: aider
|
||||
version_args: ["--version"]
|
||||
|
||||
update:
|
||||
method: pypi_upgrade
|
||||
command: [uv, tool, upgrade, aider-chat]
|
||||
|
||||
uninstall:
|
||||
method: package_manager
|
||||
command: [uv, tool, uninstall, aider-chat]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: api_key
|
||||
env_keys: [ANTHROPIC_API_KEY, OPENAI_API_KEY]
|
||||
notes_zh: 仅 API Key:各家模型 Key(Anthropic / OpenAI 等)
|
||||
|
||||
# 配置机制(调研底稿 Aider 章节):YAML。用户级 ~/.aider.conf.yml(项目级 .aider.conf.yml)。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.aider.conf.yml"
|
||||
format: yaml
|
||||
scope: user
|
||||
environment:
|
||||
- key: ANTHROPIC_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: model
|
||||
label_zh: 主模型
|
||||
group: common
|
||||
help_zh: 官方键 model,Aider 主模型(如 anthropic/claude-sonnet-4)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://aider.chat/docs/configuration/aider_conf.html
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 ANTHROPIC_API_KEY / OPENAI_API_KEY 等环境变量)
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://aider.chat/docs/configuration/api-keys.html
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: dependency.uv
|
||||
- rule_id: dependency.python_below_min
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后配置 API Key,在项目目录运行 `aider`,或用 `aider --message "提示词"` 无头执行。
|
||||
install_zh: 推荐官方独立安装器 aider-install(Windows 用 install.ps1 / Linux 用 install.sh,自动装独立 Python 3.12 环境);也可用 PyPI `uv tool install aider-chat`。不走 brew。
|
||||
auth_zh: 仅 API Key:各家模型 Key(ANTHROPIC_API_KEY / OPENAI_API_KEY 等),保存后经环境变量注入。
|
||||
commands:
|
||||
- cmd: aider
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: aider --message "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: aider --model <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: aider --version
|
||||
desc_zh: 显示版本号
|
||||
- cmd: aider --yes
|
||||
desc_zh: 自动接受所有建议
|
||||
params:
|
||||
- param: --message / --msg
|
||||
desc_zh: 无头单次执行
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --yes
|
||||
desc_zh: 自动接受所有建议
|
||||
- param: --edit-format
|
||||
desc_zh: 编辑格式
|
||||
- param: --chat-mode
|
||||
desc_zh: 会话模式
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 不走 brew(官方不推荐,安装路径与依赖易出问题)
|
||||
- 官方独立安装器自动装独立 Python 3.12 环境,本适配器声明 uv/python 依赖仅针对 PyPI 渠道
|
||||
- 项目级 .aider.conf.yml 与多 provider 高级配置本表单不覆盖,以官方文档为准
|
||||
|
||||
+116
-21
@@ -1,28 +1,123 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Cline(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# ============================================================
|
||||
id: cline
|
||||
name: Cline
|
||||
name_zh: Cline
|
||||
vendor: Cline
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: Apache-2.0
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 原生支持(npm,非 WSL)
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://github.com/cline/cline
|
||||
docs: https://docs.cline.bot/
|
||||
allowed_hosts: [registry.npmjs.org, github.com, docs.cline.bot]
|
||||
|
||||
runtime_deps:
|
||||
- id: node
|
||||
semver_range: ">=22"
|
||||
required_for: [install, run]
|
||||
|
||||
install:
|
||||
preferred: npm
|
||||
channels:
|
||||
- id: npm
|
||||
platforms: [windows, linux]
|
||||
command: [npm, install, -g, "cline"]
|
||||
package: cline
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: npm
|
||||
platforms: [windows, linux]
|
||||
command: [npm, install, -g, "cline@nightly"]
|
||||
package: cline
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: cline
|
||||
version_args: ["--version"]
|
||||
|
||||
update:
|
||||
method: npm_update
|
||||
command: [npm, update, -g, "cline"]
|
||||
|
||||
uninstall:
|
||||
method: npm_uninstall
|
||||
command: [npm, uninstall, -g, "cline"]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: browser_oauth
|
||||
command: [cline]
|
||||
notes_zh: 运行 cline 后按提示浏览器登录(各家模型账号)
|
||||
- mode: api_key
|
||||
env_keys: [ANTHROPIC_API_KEY, OPENAI_API_KEY]
|
||||
notes_zh: 各家 API Key(存入系统钥匙串;Cline 密钥本就进系统 keychain)
|
||||
|
||||
# 配置机制(调研底稿 Cline 章节):用户级 ~/.cline/data/settings/providers.json(JSON)。
|
||||
# 密钥已用系统 keychain(与 AgentDock 密钥库策略一致)。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.cline/data/settings/providers.json"
|
||||
format: json
|
||||
scope: user
|
||||
environment:
|
||||
- key: ANTHROPIC_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 ANTHROPIC_API_KEY 等环境变量)
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://docs.cline.bot/
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: dependency.node_below_min
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后运行 `cline` 登录,或用 `cline -p "提示词"` 无头执行。
|
||||
install_zh: 推荐 `npm install -g cline`(本适配器默认渠道,需 Node 22+);另有 nightly 通道 `npm install -g cline@nightly`。
|
||||
auth_zh: ① 浏览器登录(运行 `cline` 后按提示);② API Key(各家模型,存入系统钥匙串);③ 本地模型(Ollama/LM Studio 等)。密钥本就进系统 keychain。
|
||||
commands:
|
||||
- cmd: cline
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: cline -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: cline --model <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: cline --version
|
||||
desc_zh: 显示版本号
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式执行后退出
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --allowedTools
|
||||
desc_zh: 预授权工具
|
||||
- param: --continue
|
||||
desc_zh: 续接最近会话
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 密钥存入系统 keychain(与 AgentDock 密钥库策略一致,不额外落明文)
|
||||
- providers.json 多 provider 高级配置本表单不覆盖,以官方文档为准
|
||||
|
||||
+151
-21
@@ -1,28 +1,158 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · CodeBuddy Code(腾讯)(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3 + 真机实测
|
||||
# 真机:codebuddy --version → 2.132.0;配置 ~/.codebuddy/settings.json(JSON,实测补齐)
|
||||
# 双升级路径:npm(@tencent-ai/codebuddy-code)/ 原生(codebuddy install stable)
|
||||
# ============================================================
|
||||
id: codebuddy
|
||||
name: CodeBuddy Code
|
||||
name_zh: CodeBuddy Code
|
||||
vendor: 腾讯
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: 专有(仅官方渠道安装、不重打包)
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 原生支持(npm / 原生线,非 WSL)
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://codebuddy.ai
|
||||
docs: https://codebuddy.ai/docs
|
||||
allowed_hosts: [registry.npmjs.org, codebuddy.ai, github.com]
|
||||
|
||||
runtime_deps:
|
||||
- id: node
|
||||
semver_range: ">=22"
|
||||
required_for: [install, run]
|
||||
|
||||
install:
|
||||
preferred: npm
|
||||
channels:
|
||||
- id: npm
|
||||
platforms: [windows, linux]
|
||||
command: [npm, install, -g, "@tencent-ai/codebuddy-code"]
|
||||
package: "@tencent-ai/codebuddy-code"
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: official_script
|
||||
platforms: [windows, linux]
|
||||
command: [codebuddy, install, stable]
|
||||
package: codebuddy-native
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: codebuddy
|
||||
version_args: ["--version"]
|
||||
version_regex: "^v?(\\d+\\.\\d+\\.\\d+)"
|
||||
|
||||
update:
|
||||
method: npm_update
|
||||
command: [npm, update, -g, "@tencent-ai/codebuddy-code"]
|
||||
|
||||
uninstall:
|
||||
method: npm_uninstall
|
||||
command: [npm, uninstall, -g, "@tencent-ai/codebuddy-code"]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: browser_oauth
|
||||
command: [codebuddy]
|
||||
notes_zh: 运行 codebuddy 后按提示用微信扫码登录(也可在会话中输入 /login)
|
||||
- mode: local_tui
|
||||
command: [codebuddy]
|
||||
notes_zh: 在一次性终端窗口内完成微信扫码登录
|
||||
|
||||
# 配置机制(真机实测补齐):~/.codebuddy/settings.json(JSON)。
|
||||
# 官方未披露配置文件位置,本波真机定位到 ~/.codebuddy/settings.json;
|
||||
# 主要配置经 `codebuddy config set [-g] <key> <value>` 管理,API Key 未确认(以微信登录为主)。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.codebuddy/settings.json"
|
||||
format: json
|
||||
scope: user
|
||||
environment: []
|
||||
fields:
|
||||
- id: model
|
||||
label_zh: 默认模型
|
||||
group: common
|
||||
help_zh: 默认模型 ID(对应 --model 参数,如 deepseek-v4-pro / glm-5.3 等);可用 `codebuddy config set -g model <id>` 设置
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://codebuddy.ai/docs
|
||||
- id: theme
|
||||
label_zh: 主题
|
||||
group: common
|
||||
help_zh: 界面主题(对应 `codebuddy config set -g theme <dark|light>`)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: enum
|
||||
storage: file
|
||||
docs_url: https://codebuddy.ai/docs
|
||||
options:
|
||||
- value: dark
|
||||
label_zh: 深色
|
||||
- value: light
|
||||
label_zh: 浅色
|
||||
- id: sandbox.enabled
|
||||
label_zh: 沙箱模式
|
||||
group: advanced
|
||||
help_zh: 官方键 sandbox.enabled,是否启用沙箱(默认关闭)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: bool
|
||||
storage: file
|
||||
docs_url: https://codebuddy.ai/docs
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: dependency.node_below_min
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后运行 `codebuddy` 微信扫码登录,或用 `codebuddy -p "提示词"` 无头执行。
|
||||
install_zh: 双升级路径:① npm `@tencent-ai/codebuddy-code`(本适配器默认渠道,需 Node 22+);② 原生线 `codebuddy install stable`。两线均走官方渠道,不重打包。
|
||||
auth_zh: 微信扫码登录(运行 `codebuddy` 后按提示,或在会话中输入 /login)。API Key 官方未确认,本适配器不提供。
|
||||
commands:
|
||||
- cmd: codebuddy
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: codebuddy -p "提示词"
|
||||
desc_zh: 无头单次执行(--print)
|
||||
- cmd: codebuddy --output-format json -p "提示词"
|
||||
desc_zh: 以 JSON 输出
|
||||
- cmd: codebuddy --model <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: codebuddy config set -g theme dark
|
||||
desc_zh: 修改全局配置项
|
||||
- cmd: codebuddy install stable
|
||||
desc_zh: 安装原生线稳定版
|
||||
- cmd: codebuddy update
|
||||
desc_zh: 检查并安装更新
|
||||
- cmd: codebuddy doctor
|
||||
desc_zh: 自更新健康检查
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式,执行后退出
|
||||
- param: --output-format
|
||||
desc_zh: 输出格式(text / json / stream-json)
|
||||
- param: --model
|
||||
desc_zh: 指定模型 ID
|
||||
- param: -c / --continue
|
||||
desc_zh: 续接最近会话
|
||||
- param: -y / --dangerously-skip-permissions
|
||||
desc_zh: 跳过权限检查(仅限无外网沙箱)
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 配置路径官方未披露,本波真机实测定位到 ~/.codebuddy/settings.json
|
||||
- API Key 官方未确认,本适配器仅提供微信登录,不提供 API Key 配置
|
||||
- 专有许可:只引导官方渠道安装,不重打包、不修改二进制
|
||||
|
||||
+110
-21
@@ -1,28 +1,117 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · GitHub Copilot CLI(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# 备注:登录方式以本机终端 /login 为主;无头用 PAT 环境变量授权;需 Copilot 订阅。
|
||||
# ============================================================
|
||||
id: copilot
|
||||
name: Copilot CLI
|
||||
name_zh: Copilot CLI
|
||||
vendor: GitHub
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: 专有(仅官方渠道安装、不重打包)
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: winget 渠道需 PowerShell 6+(winget 安装 GitHub.Copilot)
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://github.com/features/copilot
|
||||
docs: https://docs.github.com/copilot
|
||||
allowed_hosts: [github.com, docs.github.com, registry.npmjs.org]
|
||||
|
||||
runtime_deps: []
|
||||
|
||||
install:
|
||||
preferred: winget
|
||||
channels:
|
||||
- id: winget
|
||||
platforms: [windows]
|
||||
command: [winget, install, GitHub.Copilot]
|
||||
package: GitHub.Copilot
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: npm
|
||||
platforms: [windows, linux]
|
||||
command: [npm, install, -g, "@github/copilot"]
|
||||
package: "@github/copilot"
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: copilot
|
||||
version_args: ["--version"]
|
||||
version_regex: "(\\d+\\.\\d+\\.\\d+)"
|
||||
|
||||
update:
|
||||
method: winget_upgrade
|
||||
command: [winget, upgrade, GitHub.Copilot]
|
||||
|
||||
uninstall:
|
||||
method: package_manager
|
||||
command: [winget, uninstall, GitHub.Copilot]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: local_tui
|
||||
command: [copilot]
|
||||
notes_zh: 运行 copilot 后输入 /login 在终端内登录 GitHub 账号
|
||||
- mode: api_key
|
||||
env_keys: [GH_TOKEN]
|
||||
notes_zh: 无头授权:设置 GitHub PAT(GH_TOKEN)环境变量后无需交互登录
|
||||
|
||||
# 配置机制(调研底稿 Copilot 章节):JSON + 环境变量(COPILOT_*)。
|
||||
# 无头授权用 PAT 环境变量;交互登录经 /login 写回本机会话。
|
||||
configuration:
|
||||
files: []
|
||||
environment:
|
||||
- key: GH_TOKEN
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
- key: COPILOT_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: api_key
|
||||
label_zh: 访问令牌(PAT)
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 GH_TOKEN / COPILOT_API_KEY),用于无头授权;需 Copilot 订阅
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://docs.github.com/copilot
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后运行 `copilot`,在终端输入 `/login` 登录 GitHub 账号;或用 `copilot -p "提示词"` 无头执行。
|
||||
install_zh: Windows 推荐 winget `GitHub.Copilot`(需 PowerShell 6+);双端可用 npm `@github/copilot`。Ubuntu 另有官方脚本 / brew 渠道。
|
||||
auth_zh: ① 本机终端登录:运行 `copilot` 输入 /login(交互);② 无头 PAT:设置 GH_TOKEN(或 COPILOT_API_KEY)环境变量。需要有效 Copilot 订阅(个人/商业/企业)。
|
||||
commands:
|
||||
- cmd: copilot
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: copilot -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: copilot --help
|
||||
desc_zh: 查看帮助
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式执行后退出
|
||||
- param: --output-format
|
||||
desc_zh: 输出格式
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 需要有效 Copilot 订阅(免费 GitHub 账号不提供 Copilot CLI 完整能力)
|
||||
- 真机 `copilot --version` 返回「GitHub Copilot CLI 1.0.80.」,版本检测已据此确认
|
||||
- winget 渠道需 PowerShell 6+(见 platforms.notes)
|
||||
|
||||
+128
-21
@@ -1,28 +1,135 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Crush(Charm)(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# 注意:crushrc 是 Bash 语法配置,走 Wave 1 专用解析器(只识别内建赋值,不执行任意脚本)。
|
||||
# ============================================================
|
||||
id: crush
|
||||
name: Crush
|
||||
name_zh: Crush
|
||||
vendor: Charm
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: FSL(Functional Source License,仅引导官方安装、不重分发源码)
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: winget / scoop / Releases 渠道
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://github.com/charmbracelet/crush
|
||||
docs: https://github.com/charmbracelet/crush
|
||||
allowed_hosts: [github.com, charm.sh]
|
||||
|
||||
runtime_deps: []
|
||||
|
||||
install:
|
||||
preferred: winget
|
||||
channels:
|
||||
- id: winget
|
||||
platforms: [windows]
|
||||
command: [winget, install, charmbracelet.crush]
|
||||
package: charmbracelet.crush
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: apt
|
||||
platforms: [linux]
|
||||
command: [sudo, apt-get, install, -y, crush]
|
||||
package: crush
|
||||
elevate: required
|
||||
elevate_reason_zh: 官方 apt 仓库(GPG)安装需要管理员权限
|
||||
post_checks: [detect]
|
||||
- id: github_release
|
||||
platforms: [windows, linux]
|
||||
package: crush
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: crush
|
||||
version_args: ["--version"]
|
||||
version_unconfirmed: true
|
||||
|
||||
update:
|
||||
method: winget_upgrade
|
||||
command: [winget, upgrade, charmbracelet.crush]
|
||||
|
||||
uninstall:
|
||||
method: package_manager
|
||||
command: [winget, uninstall, charmbracelet.crush]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: api_key
|
||||
env_keys: [OPENAI_API_KEY, ANTHROPIC_API_KEY]
|
||||
notes_zh: 各家模型 API Key(环境变量注入);crushrc 内亦可用 export 语句
|
||||
|
||||
# 配置机制:crushrc 是 Bash 语法配置(~/.config/crush/crushrc)。
|
||||
# 走 Wave 1 专用解析器:只识别内建赋值(export KEY=value 等),不执行任意脚本,未知行原样保留。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.config/crush/crushrc"
|
||||
format: crushrc
|
||||
scope: user
|
||||
environment:
|
||||
- key: OPENAI_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 OPENAI_API_KEY 等环境变量);crushrc 内也可用 export 注入
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://github.com/charmbracelet/crush
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后配置 API Key,运行 `crush` 进入会话,或用 `crush -p "提示词"` 无头执行。
|
||||
install_zh: Windows 推荐 winget `charmbracelet.crush`;Ubuntu 用官方 apt 仓库(GPG)。备选 scoop / GitHub Releases(本适配器 npm 渠道按调研底稿标记为备选,非默认)。
|
||||
auth_zh: 仅 API Key(环境变量注入):OPENAI_API_KEY / ANTHROPIC_API_KEY 等各家模型 Key。crushrc 内也可用 export 语句。
|
||||
commands:
|
||||
- cmd: crush
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: crush "提示词"
|
||||
desc_zh: 直接以提示词启动
|
||||
- cmd: crush -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: crush --session <名称>
|
||||
desc_zh: 指定会话名
|
||||
- cmd: crush --continue
|
||||
desc_zh: 续接最近会话
|
||||
- cmd: crush --list-sessions
|
||||
desc_zh: 列出会话
|
||||
- cmd: crush --model <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: crush --version
|
||||
desc_zh: 显示版本号
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式单次执行
|
||||
- param: --session
|
||||
desc_zh: 指定会话名
|
||||
- param: --continue
|
||||
desc_zh: 续接最近会话
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --list-sessions
|
||||
desc_zh: 列出会话
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- crushrc 是 Bash 语法配置,AgentDock 走专用解析器,只识别内建赋值、不执行任意脚本
|
||||
- --version 官方未确认,适配器已标 version_unconfirmed(命令细节以 `crush --help` 实测为准)
|
||||
- FSL 许可:仅引导官方安装,不重分发源码、不修改二进制
|
||||
|
||||
+149
-21
@@ -1,28 +1,156 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Cursor CLI(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3 + 真机实测
|
||||
# 真机:agent --version → 2026.08.11-e8db854;配置 ~/.cursor/cli-config.json(JSON)。
|
||||
# 铁律:命令名是 `agent`(不是 cursor-agent);只有官方脚本渠道,无 npm。
|
||||
# ============================================================
|
||||
id: cursor
|
||||
name: Cursor CLI
|
||||
name_zh: Cursor CLI
|
||||
vendor: Cursor
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: 专有(仅官方渠道安装、不重打包)
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 仅官方脚本渠道;命令名为 agent
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://cursor.com
|
||||
docs: https://cursor.com/docs/cli
|
||||
allowed_hosts: [cursor.com, api2.cursor.sh]
|
||||
|
||||
runtime_deps: []
|
||||
|
||||
install:
|
||||
preferred: official_script
|
||||
channels:
|
||||
- id: official_script
|
||||
platforms: [windows]
|
||||
script:
|
||||
url: https://cursor.com/install.ps1
|
||||
kind: powershell_irm
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: official_script
|
||||
platforms: [linux]
|
||||
script:
|
||||
url: https://cursor.com/install.sh
|
||||
kind: bash_pipe
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: agent
|
||||
version_args: ["--version"]
|
||||
version_regex: "^(\\d{4}\\.\\d{2}\\.\\d{2})"
|
||||
path_hints:
|
||||
- "%LOCALAPPDATA%\\cursor-agent\\agent.cmd"
|
||||
|
||||
update:
|
||||
method: self_update_cmd
|
||||
command: [agent, update]
|
||||
|
||||
uninstall:
|
||||
method: manual_delete
|
||||
command: []
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: browser_oauth
|
||||
command: [agent, login]
|
||||
status_command: [agent, status]
|
||||
notes_zh: 浏览器登录 Cursor 账号(NO_OPEN_BROWSER 可禁用自动打开浏览器)
|
||||
- mode: api_key
|
||||
env_keys: [CURSOR_API_KEY]
|
||||
notes_zh: API Key(CURSOR_API_KEY 环境变量或 --api-key 参数)
|
||||
|
||||
# 配置机制(真机实测):~/.cursor/cli-config.json(JSON)。
|
||||
# 账户体系为主(authInfo 存 OAuth 登录态);model.modelId / approvalMode 可经文件或 agent 命令调整。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.cursor/cli-config.json"
|
||||
format: json
|
||||
scope: user
|
||||
environment:
|
||||
- key: CURSOR_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: model.modelId
|
||||
label_zh: 默认模型
|
||||
group: common
|
||||
help_zh: 官方键 model.modelId,默认模型(真机为 default,即 auto)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://cursor.com/docs/cli
|
||||
- id: approvalMode
|
||||
label_zh: 审批模式
|
||||
group: advanced
|
||||
help_zh: 官方键 approvalMode(allowlist / yolo / default 等)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://cursor.com/docs/cli
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 CURSOR_API_KEY 环境变量;一般用账号登录即可,无需 API Key)
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://cursor.com/docs/cli
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后运行 `agent login` 登录 Cursor 账号,或用 `agent -p "提示词"` 无头执行。
|
||||
install_zh: 仅官方脚本渠道(Windows install.ps1 / Linux install.sh),无 npm。`agent` 命令随 Cursor 安装(也可在 Cursor 内「Install agent command」)。
|
||||
auth_zh: ① 浏览器登录:`agent login`(`agent status` 查看状态);② API Key:CURSOR_API_KEY 环境变量或 --api-key。
|
||||
commands:
|
||||
- cmd: agent
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: agent -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: agent login
|
||||
desc_zh: 浏览器登录 Cursor 账号
|
||||
- cmd: agent status
|
||||
desc_zh: 查看认证状态
|
||||
- cmd: agent --model <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: agent update
|
||||
desc_zh: 更新到最新版
|
||||
- cmd: agent --list-models
|
||||
desc_zh: 列出可用模型
|
||||
- cmd: agent --version
|
||||
desc_zh: 显示版本号
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式执行后退出
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --output-format
|
||||
desc_zh: 输出格式(text / json / stream-json)
|
||||
- param: --sandbox
|
||||
desc_zh: 沙箱模式(enabled / disabled)
|
||||
- param: --list-models
|
||||
desc_zh: 列出可用模型
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 命令名是 `agent`(不是 cursor-agent),detect 以 agent 为准
|
||||
- 真机 `agent --version` 返回日期式版本 2026.08.11-e8db854(version_regex 已据此填写)
|
||||
- 账户体系为主,cli-config.json 高级键本表单只覆盖常用项,以官方文档为准
|
||||
|
||||
+136
-21
@@ -1,28 +1,143 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Goose(Linux 基金会 AAIF / Block)(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# 注意:配置 YAML;Windows 路径差异 %APPDATA%\Block\goose\;密钥默认进系统钥匙串。
|
||||
# ============================================================
|
||||
id: goose
|
||||
name: Goose
|
||||
name_zh: Goose
|
||||
vendor: Linux 基金会(AAIF)
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: Apache-2.0
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 官方 download_cli.ps1;配置位于 %APPDATA%\Block\goose\
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://block.github.io/goose/
|
||||
docs: https://block.github.io/goose/docs/
|
||||
allowed_hosts: [github.com, block.github.io]
|
||||
|
||||
runtime_deps: []
|
||||
|
||||
install:
|
||||
preferred: official_script
|
||||
channels:
|
||||
- id: official_script
|
||||
platforms: [windows]
|
||||
script:
|
||||
url: https://github.com/block/goose/releases/download/stable/download_cli.ps1
|
||||
kind: powershell_irm
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: official_script
|
||||
platforms: [linux]
|
||||
script:
|
||||
url: https://github.com/block/goose/releases/download/stable/download_cli.sh
|
||||
kind: bash_pipe
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: github_release
|
||||
platforms: [windows, linux]
|
||||
package: goose
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: goose
|
||||
version_args: ["--version"]
|
||||
|
||||
update:
|
||||
method: self_update_cmd
|
||||
command: [goose, update]
|
||||
|
||||
uninstall:
|
||||
method: manual_delete
|
||||
command: []
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: api_key
|
||||
env_keys: [ANTHROPIC_API_KEY, OPENAI_API_KEY]
|
||||
notes_zh: 各家模型 API Key(密钥默认进系统钥匙串);另有订阅 ACP 接入
|
||||
|
||||
# 配置机制(调研底稿 Goose 章节):YAML。Windows 路径为 %APPDATA%\Block\goose\config.yaml,
|
||||
# Linux 为 ~/.config/goose/config.yaml。密钥默认进系统钥匙串,不写入 config.yaml。
|
||||
configuration:
|
||||
files:
|
||||
- path: "%APPDATA%\\Block\\goose\\config.yaml"
|
||||
format: yaml
|
||||
scope: user
|
||||
environment:
|
||||
- key: ANTHROPIC_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: GOOSE_PROVIDER
|
||||
label_zh: 默认 Provider
|
||||
group: common
|
||||
help_zh: 官方键 GOOSE_PROVIDER(如 anthropic / openai / databricks / ollama 等)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://block.github.io/goose/docs/
|
||||
- id: GOOSE_MODEL
|
||||
label_zh: 默认模型
|
||||
group: common
|
||||
help_zh: 官方键 GOOSE_MODEL,默认模型
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://block.github.io/goose/docs/
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统钥匙串(Goose 密钥本就默认进系统钥匙串,不写入 config.yaml)
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://block.github.io/goose/docs/
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后配置 provider 与 API Key,运行 `goose` 进入会话,或用 `goose -p "提示词"` 无头执行。
|
||||
install_zh: Windows 用官方 download_cli.ps1;Ubuntu 用官方 download_cli.sh。备选 GitHub Releases 二进制 / brew / deb。
|
||||
auth_zh: ① API Key:各家模型 Key(Anthropic/OpenAI 等),密钥默认进系统钥匙串;② 订阅 ACP(Agent Client Protocol)接入。
|
||||
commands:
|
||||
- cmd: goose
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: goose -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: goose configure
|
||||
desc_zh: 交互式配置 provider/模型
|
||||
- cmd: goose --version
|
||||
desc_zh: 显示版本号
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式执行后退出
|
||||
- param: --provider
|
||||
desc_zh: 指定 provider
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --version
|
||||
desc_zh: 显示版本号
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- Windows 配置路径为 %APPDATA%\Block\goose\(Linux 为 ~/.config/goose/),本适配器以 Windows 路径为准
|
||||
- 密钥默认进系统钥匙串,AgentDock 与之对齐,不把 Key 写入 config.yaml
|
||||
- extensions / profiles 等高级配置本表单不覆盖,以官方文档为准
|
||||
|
||||
+140
-21
@@ -1,28 +1,147 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Qwen Code(阿里巴巴)(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3 + 真机实测
|
||||
# 真机:qwen --version → 0.21.15;配置 ~/.qwen/settings.json(JSON,env/modelProviders/model)
|
||||
# ============================================================
|
||||
id: qwen
|
||||
name: Qwen Code
|
||||
name_zh: Qwen Code
|
||||
vendor: 阿里巴巴
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: Apache-2.0
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 原生支持(npm / 阿里 OSS 独立脚本,非 WSL)
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://github.com/QwenLM/qwen-code
|
||||
docs: https://qwen.ai/
|
||||
allowed_hosts: [registry.npmjs.org, github.com, qwen.ai, dashscope.aliyuncs.com]
|
||||
|
||||
runtime_deps:
|
||||
- id: node
|
||||
semver_range: ">=22"
|
||||
required_for: [install, run]
|
||||
|
||||
install:
|
||||
preferred: npm
|
||||
channels:
|
||||
- id: npm
|
||||
platforms: [windows, linux]
|
||||
command: [npm, install, -g, "@qwen-code/qwen-code"]
|
||||
package: "@qwen-code/qwen-code"
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: qwen
|
||||
version_args: ["--version"]
|
||||
version_regex: "^v?(\\d+\\.\\d+\\.\\d+)"
|
||||
|
||||
update:
|
||||
method: npm_update
|
||||
command: [npm, update, -g, "@qwen-code/qwen-code"]
|
||||
|
||||
uninstall:
|
||||
method: npm_uninstall
|
||||
command: [npm, uninstall, -g, "@qwen-code/qwen-code"]
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: api_key
|
||||
env_keys: [DASHSCOPE_API_KEY]
|
||||
notes_zh: 免费 OAuth 已停用(qwen auth 命令已移除),仅支持 API Key(阿里云百炼 DashScope;也可在 settings.json 接 OpenAI 兼容端点)
|
||||
|
||||
# 配置机制(真机 ~/.qwen/settings.json,JSON):model.name / model.baseUrl 设默认模型;
|
||||
# env 块注入环境变量(API Key);modelProviders 接多 provider(含 OpenAI 兼容端点)。
|
||||
configuration:
|
||||
files:
|
||||
- path: "~/.qwen/settings.json"
|
||||
format: json
|
||||
scope: user
|
||||
environment:
|
||||
- key: DASHSCOPE_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: model.name
|
||||
label_zh: 默认模型
|
||||
group: common
|
||||
help_zh: 官方键 model.name,settings.json 中的默认模型
|
||||
required: false
|
||||
sensitive: false
|
||||
type: string
|
||||
storage: file
|
||||
docs_url: https://qwen.ai/
|
||||
- id: model.baseUrl
|
||||
label_zh: Base URL
|
||||
group: advanced
|
||||
help_zh: 官方键 model.baseUrl,默认模型服务端点(OpenAI 兼容网关/代理场景)
|
||||
required: false
|
||||
sensitive: false
|
||||
type: url
|
||||
storage: file
|
||||
docs_url: https://qwen.ai/
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应环境变量 DASHSCOPE_API_KEY,阿里云百炼申请)
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://qwen.ai/
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: dependency.node_below_min
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
- rule_id: config.corrupt
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后配置 API Key,用 `qwen -p "提示词"` 无头执行,或 `qwen` 进入交互会话。
|
||||
install_zh: 推荐 `npm install -g @qwen-code/qwen-code`(需 Node 22+);也可用 `npx @qwen-code/qwen-code` 临时试用。阿里 OSS 独立脚本见官方文档。
|
||||
auth_zh: 仅支持 API Key:免费 OAuth 已停用(`qwen auth` 命令已移除)。请在阿里云百炼(DashScope)申请 API Key 后粘贴保存(经 DASHSCOPE_API_KEY 注入);也可在 settings.json 的 modelProviders 接 OpenAI 兼容端点(自定义 envKey)。
|
||||
commands:
|
||||
- cmd: qwen
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: qwen -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: qwen -m <模型>
|
||||
desc_zh: 指定模型
|
||||
- cmd: qwen -o json -p "提示词"
|
||||
desc_zh: 以 JSON 输出
|
||||
- cmd: qwen --version
|
||||
desc_zh: 显示版本号
|
||||
- cmd: qwen update
|
||||
desc_zh: 检查并安装更新
|
||||
- cmd: qwen sessions
|
||||
desc_zh: 管理会话
|
||||
- cmd: npx @qwen-code/qwen-code
|
||||
desc_zh: 免安装临时运行
|
||||
params:
|
||||
- param: -p / --prompt
|
||||
desc_zh: 无头模式单次执行
|
||||
- param: -m / --model
|
||||
desc_zh: 指定模型
|
||||
- param: -o / --output-format
|
||||
desc_zh: 输出格式(text / json / stream-json)
|
||||
- param: -s / --sandbox
|
||||
desc_zh: 沙箱执行
|
||||
- param: -c / --continue
|
||||
desc_zh: 续接最近会话
|
||||
- param: -v / --version
|
||||
desc_zh: 显示版本号
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 免费 OAuth 已停用,仅支持 API Key(真机 `qwen auth` 命令显示 removed)
|
||||
- 真机 `qwen --version` 返回 0.21.15,版本检测已据此确认
|
||||
- modelProviders 多 provider / env 块自定义 envKey 等高级配置本表单不覆盖,以官方文档为准
|
||||
|
||||
+115
-21
@@ -1,28 +1,122 @@
|
||||
# ============================================================
|
||||
# AgentDock 适配器占位(Wave 1,对齐架构 §3.1 完整 schema)
|
||||
# 本波仅填五字段(id/name/name_zh/vendor/status);其余字段留空,
|
||||
# Wave 2 起按调研底稿 agent-cli-survey-2026-08-24.md 逐项填充,禁止编造。
|
||||
#
|
||||
# 完整字段(全部留空占位,Wave 2 填写):
|
||||
# adapter_version # semver,如 1.2.0
|
||||
# license # 展示用;专有许可注明「仅官方渠道安装、不重打包」
|
||||
# platforms # windows/linux:architectures、notes、min_ubuntu
|
||||
# official # homepage / docs / allowed_hosts(网络白名单)
|
||||
# runtime_deps # [ { id, semver_range, required_for: [install|run] } ]
|
||||
# install # preferred + channels[ {id, platforms, command[], script, package, elevate, elevate_reason_zh, post_checks} ]
|
||||
# detect # executable / version_args / version_regex / version_unconfirmed / path_hints
|
||||
# update # method + command[]
|
||||
# uninstall # method + command[] + keep_config_default
|
||||
# authorization # modes[ {mode, command[], env_keys[], status_command[], notes_zh} ]
|
||||
# configuration # files[] / environment[] / fields[]
|
||||
# diagnostics # [ { rule_id } ]
|
||||
# documentation # quickstart_zh / commands[] / updated_at / risks_zh[]
|
||||
#
|
||||
# 铁律:所有 command 一律 argv 数组,禁止 shell 元字符(| & ; $ \ > < (`);
|
||||
# 本波不实现任何真实安装/检测/配置/授权命令(那是 Wave 2 的事)。
|
||||
# AgentDock 适配器 · Warp Agent CLI(Wave 3)
|
||||
# 数据依据:调研底稿 agent-cli-survey-2026-08-24.md + 架构 §3.3
|
||||
# 注意:只管 Agent CLI(命令 warp),不管 Warp 终端本体;设备码+浏览器+API Key 三授权。
|
||||
# ============================================================
|
||||
id: warp
|
||||
name: Warp Agent CLI
|
||||
name_zh: Warp Agent CLI
|
||||
vendor: Warp
|
||||
status: available
|
||||
adapter_version: 1.1.0
|
||||
license: 专有(仅官方渠道安装、不重打包)
|
||||
|
||||
platforms:
|
||||
windows:
|
||||
architectures: [x64]
|
||||
notes: 官方 agent-cli.ps1 脚本渠道
|
||||
linux:
|
||||
distributions: [ubuntu]
|
||||
architectures: [x64]
|
||||
|
||||
official:
|
||||
homepage: https://www.warp.dev
|
||||
docs: https://docs.warp.dev/agent-mode
|
||||
allowed_hosts: [warp.dev, app.warp.dev, www.warp.dev]
|
||||
|
||||
runtime_deps: []
|
||||
|
||||
install:
|
||||
preferred: official_script
|
||||
channels:
|
||||
- id: official_script
|
||||
platforms: [windows]
|
||||
script:
|
||||
url: https://app.warp.dev/download/agent-cli.ps1
|
||||
kind: powershell_irm
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
- id: official_script
|
||||
platforms: [linux]
|
||||
script:
|
||||
url: https://app.warp.dev/download/agent-cli
|
||||
kind: bash_pipe
|
||||
elevate: never
|
||||
post_checks: [detect]
|
||||
|
||||
detect:
|
||||
executable: warp
|
||||
version_args: ["--version"]
|
||||
|
||||
update:
|
||||
method: self_update_cmd
|
||||
command: [warp, update]
|
||||
|
||||
uninstall:
|
||||
method: manual_delete
|
||||
command: []
|
||||
keep_config_default: true
|
||||
|
||||
authorization:
|
||||
modes:
|
||||
- mode: browser_oauth
|
||||
command: [warp, login]
|
||||
notes_zh: 浏览器登录 Warp 账号
|
||||
- mode: device_code
|
||||
command: [warp, login]
|
||||
notes_zh: 设备码登录(不弹浏览器)
|
||||
- mode: api_key
|
||||
env_keys: [WARP_API_KEY]
|
||||
notes_zh: WARP_API_KEY 环境变量(API Key 授权)
|
||||
|
||||
# 配置机制(调研底稿 Warp 章节):Warp 账户体系为主,API Key 经 WARP_API_KEY 环境变量。
|
||||
configuration:
|
||||
files: []
|
||||
environment:
|
||||
- key: WARP_API_KEY
|
||||
sensitive: true
|
||||
maps_to_field: api_key
|
||||
fields:
|
||||
- id: api_key
|
||||
label_zh: API Key
|
||||
group: auth
|
||||
help_zh: 存入系统密钥库(对应 WARP_API_KEY 环境变量);一般用账号登录即可
|
||||
required: false
|
||||
sensitive: true
|
||||
type: string
|
||||
storage: keyring
|
||||
docs_url: https://docs.warp.dev/agent-mode
|
||||
|
||||
diagnostics:
|
||||
- rule_id: path.not_installed
|
||||
- rule_id: path.not_in_path
|
||||
- rule_id: version_conflict.multiple_copies
|
||||
|
||||
documentation:
|
||||
quickstart_zh: 安装后运行 `warp login` 登录 Warp 账号,或用 `warp -p "提示词"` 无头执行。
|
||||
install_zh: 仅官方脚本渠道:Windows agent-cli.ps1 / Linux curl 脚本。只管 Agent CLI,不管 Warp 终端本体。
|
||||
auth_zh: 三授权:① 浏览器登录(`warp login`);② 设备码(`warp login`,不弹浏览器);③ API Key(WARP_API_KEY 环境变量)。
|
||||
commands:
|
||||
- cmd: warp
|
||||
desc_zh: 启动交互式会话
|
||||
- cmd: warp -p "提示词"
|
||||
desc_zh: 无头单次执行
|
||||
- cmd: warp login
|
||||
desc_zh: 登录 Warp 账号
|
||||
- cmd: warp logout
|
||||
desc_zh: 退出登录
|
||||
- cmd: warp --version
|
||||
desc_zh: 显示版本号
|
||||
params:
|
||||
- param: -p / --print
|
||||
desc_zh: 无头模式执行后退出
|
||||
- param: --model
|
||||
desc_zh: 指定模型
|
||||
- param: --output-format
|
||||
desc_zh: 输出格式
|
||||
- param: --version
|
||||
desc_zh: 显示版本号
|
||||
updated_at: "2026-08-25"
|
||||
risks_zh:
|
||||
- 只管 Agent CLI(命令 warp),不管 Warp 终端本体
|
||||
- 官方脚本 URL 以 docs.warp.dev/agent-mode 为准,安装前请核对
|
||||
|
||||
@@ -14,9 +14,10 @@ pub use error::ConfigError;
|
||||
use std::path::PathBuf;
|
||||
|
||||
/// 解析适配器声明的配置文件路径:展开 `~`(用户主目录),
|
||||
/// 以及平台变量(Windows `%VAR%` / `${VAR}`,如 `%APPDATA%`)。
|
||||
/// 并把 Windows 路径分隔符统一处理(YAML 里写的是 `~/.codex/...`)。
|
||||
pub fn resolve_path(raw: &str) -> PathBuf {
|
||||
let expanded = expand_home(raw);
|
||||
let expanded = expand_env_vars(&expand_home(raw));
|
||||
PathBuf::from(expanded)
|
||||
}
|
||||
|
||||
@@ -34,6 +35,65 @@ pub fn expand_home(raw: &str) -> String {
|
||||
raw.to_string()
|
||||
}
|
||||
|
||||
/// 展开平台环境变量:`%VAR%`(Windows)与 `${VAR}`。
|
||||
/// 未定义或非法变量名保持原样,不做静默吞并。
|
||||
pub fn expand_env_vars(raw: &str) -> String {
|
||||
// 先用 ${VAR} 处理(避免与 %VAR% 互相干扰)
|
||||
let mut out = String::with_capacity(raw.len());
|
||||
let bytes: Vec<char> = raw.chars().collect();
|
||||
let mut i = 0;
|
||||
while i < bytes.len() {
|
||||
if bytes[i] == '%' {
|
||||
if let Some((name, end)) = take_until(&bytes, i + 1, '%') {
|
||||
if is_valid_var_name(&name) {
|
||||
if let Ok(v) = std::env::var(&name) {
|
||||
out.push_str(&v);
|
||||
i = end + 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if bytes[i] == '$' && i + 1 < bytes.len() && bytes[i + 1] == '{' {
|
||||
if let Some((name, end)) = take_until(&bytes, i + 2, '}') {
|
||||
if is_valid_var_name(&name) {
|
||||
if let Ok(v) = std::env::var(&name) {
|
||||
out.push_str(&v);
|
||||
i = end + 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
out.push(bytes[i]);
|
||||
i += 1;
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
/// 从 `from` 开始找 `close`,返回 (变量名, close 下标)。找不到返回 None。
|
||||
fn take_until(chars: &[char], from: usize, close: char) -> Option<(String, usize)> {
|
||||
let mut end = from;
|
||||
while end < chars.len() {
|
||||
if chars[end] == close {
|
||||
let name: String = chars[from..end].iter().collect();
|
||||
return Some((name, end));
|
||||
}
|
||||
end += 1;
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
/// 环境变量名合法性:`[A-Za-z_][A-Za-z0-9_]*`(与常见 shell/OS 约定一致)。
|
||||
fn is_valid_var_name(name: &str) -> bool {
|
||||
let mut chars = name.chars();
|
||||
match chars.next() {
|
||||
Some(c) if c.is_ascii_alphabetic() || c == '_' => {}
|
||||
_ => return false,
|
||||
}
|
||||
chars.all(|c| c.is_ascii_alphanumeric() || c == '_')
|
||||
}
|
||||
|
||||
/// 用户主目录(含路径分隔符兜底)。
|
||||
pub fn home_dir() -> String {
|
||||
#[cfg(windows)]
|
||||
@@ -63,4 +123,20 @@ mod tests {
|
||||
fn plain_path_unchanged() {
|
||||
assert_eq!(expand_home("/etc/codex/config.toml"), "/etc/codex/config.toml");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn expand_env_vars_windows_and_braces() {
|
||||
std::env::set_var("AGENTDOCK_TEST_VAR", "C:\\Users\\Test");
|
||||
assert_eq!(
|
||||
expand_env_vars("%AGENTDOCK_TEST_VAR%\\block\\goose"),
|
||||
"C:\\Users\\Test\\block\\goose"
|
||||
);
|
||||
assert_eq!(
|
||||
expand_env_vars("${AGENTDOCK_TEST_VAR}/x"),
|
||||
"C:\\Users\\Test/x"
|
||||
);
|
||||
// 未定义变量保持原样
|
||||
assert_eq!(expand_env_vars("%AGENTDOCK_NOT_SET_VAR%\\x"), "%AGENTDOCK_NOT_SET_VAR%\\x");
|
||||
std::env::remove_var("AGENTDOCK_TEST_VAR");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1534,6 +1534,31 @@ configuration:
|
||||
}
|
||||
}
|
||||
|
||||
/// 真机检测记录:对 Wave 3 九个新工具逐项 detect 并打印结果(自测记录用)。
|
||||
/// 运行:cargo test -p agentdock-core real_machine_detect_wave3 -- --ignored --nocapture
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn real_machine_detect_wave3() {
|
||||
let dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../../adapters");
|
||||
let adapters = load_adapters(&dir).expect("适配器目录应可加载");
|
||||
let nine = ["qwen", "codebuddy", "cline", "copilot", "crush", "goose", "aider", "cursor", "warp"];
|
||||
for id in nine {
|
||||
let Some(adapter) = adapters.iter().find(|a| a.id == id) else {
|
||||
panic!("缺少 {id}");
|
||||
};
|
||||
let r = detect_one(adapter);
|
||||
println!(
|
||||
"{} ({}): status={} version={:?} exe={:?}",
|
||||
id, adapter.name_zh, r.status, r.version, r.executable
|
||||
);
|
||||
assert!([
|
||||
"installed", "not_installed", "not_in_path", "permission_denied",
|
||||
"exec_failed", "version_unparseable",
|
||||
]
|
||||
.contains(&r.status.as_str()));
|
||||
}
|
||||
}
|
||||
|
||||
/// 真机安装/卸载往返:gemini(npm 渠道,用户目录、可逆)。
|
||||
/// 运行:cargo test -p agentdock-core real_machine_install_uninstall_gemini -- --ignored --nocapture
|
||||
#[test]
|
||||
|
||||
@@ -22,6 +22,21 @@ pub fn runtime_for_prog(prog: &str) -> Option<&'static str> {
|
||||
}
|
||||
}
|
||||
|
||||
/// 运行时 id → 中文显示名(与前端 RuntimeInstallModal 的 RUNTIME_LABELS 对齐)。
|
||||
/// 「node」统一显示为「Node.js」,避免人话提示里出现 id 与按钮文案不一致。
|
||||
pub fn runtime_label_zh(id: &str) -> &'static str {
|
||||
match id {
|
||||
"node" => "Node.js",
|
||||
"python" => "Python",
|
||||
"git" => "Git",
|
||||
"winget" => "winget",
|
||||
"uv" => "uv",
|
||||
"choco" => "choco",
|
||||
"scoop" => "scoop",
|
||||
_ => "运行时",
|
||||
}
|
||||
}
|
||||
|
||||
/// 主入口:结合 spawn 错误与 stderr 尾部文本,产出结构化错误提示。
|
||||
/// `spawn_err` 为 `Command::spawn` 的 io::Error(None 表示进程已启动但退出非 0)。
|
||||
pub fn map_exec_error(prog: &str, spawn_err: Option<&std::io::Error>, stderr_tail: &str) -> ErrorHint {
|
||||
@@ -33,7 +48,7 @@ pub fn map_exec_error(prog: &str, spawn_err: Option<&std::io::Error>, stderr_tai
|
||||
ErrorKind::NotFound => {
|
||||
let missing = runtime_for_prog(prog);
|
||||
let friendly = match missing {
|
||||
Some(r) => format!("未找到 {prog} 命令:需要先安装 {r}(可在下方「本机环境」区一键安装)"),
|
||||
Some(r) => format!("未找到 {prog} 命令:需要先安装 {}(可在下方「本机环境」区一键安装)", runtime_label_zh(r)),
|
||||
None => format!("未找到 {prog} 命令:请确认 {prog} 已安装并加入 PATH"),
|
||||
};
|
||||
return ErrorHint {
|
||||
@@ -102,7 +117,17 @@ mod tests {
|
||||
let h = map_exec_error("npm", Some(¬_found()), "");
|
||||
assert_eq!(h.code, "program_not_found");
|
||||
assert_eq!(h.missing_runtime.as_deref(), Some("node"));
|
||||
assert!(h.friendly_zh.contains("Node") || h.friendly_zh.contains("node"));
|
||||
// 文案统一为「Node.js」(与按钮/运行时中文名一致,而非裸 id「node」)
|
||||
assert!(h.friendly_zh.contains("Node.js"), "人话提示应显示 Node.js:{}", h.friendly_zh);
|
||||
assert!(!h.friendly_zh.contains("安装 node"), "不应出现裸 id「node」:{}", h.friendly_zh);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_label_zh_maps_node() {
|
||||
assert_eq!(runtime_label_zh("node"), "Node.js");
|
||||
assert_eq!(runtime_label_zh("python"), "Python");
|
||||
assert_eq!(runtime_label_zh("git"), "Git");
|
||||
assert_eq!(runtime_label_zh("winget"), "winget");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user