@router-agent/runtime 0.0.0-stage → 0.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/claude.d.ts +51 -0
- package/dist/agents/claude.js +270 -0
- package/dist/agents/claude.js.map +1 -0
- package/dist/agents/codex.d.ts +36 -0
- package/dist/agents/codex.js +292 -0
- package/dist/agents/codex.js.map +1 -0
- package/dist/agents/profile.d.ts +39 -0
- package/dist/agents/profile.js +2 -0
- package/dist/agents/profile.js.map +1 -0
- package/dist/agents/registry.d.ts +21 -0
- package/dist/agents/registry.js +78 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/evidence-gate.d.ts +78 -0
- package/dist/evidence-gate.js +196 -0
- package/dist/evidence-gate.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/naming.d.ts +23 -0
- package/dist/naming.js +40 -0
- package/dist/naming.js.map +1 -0
- package/dist/orca/commands.js +60 -0
- package/dist/orca/commands.js.map +1 -0
- package/dist/orca/index.js +452 -0
- package/dist/orca/index.js.map +1 -0
- package/dist/orca/options.js +33 -0
- package/dist/orca/options.js.map +1 -0
- package/dist/orca/report-poller.js +143 -0
- package/dist/orca/report-poller.js.map +1 -0
- package/dist/permissions/acp.d.ts +21 -0
- package/dist/permissions/acp.js +73 -0
- package/dist/permissions/acp.js.map +1 -0
- package/dist/permissions.d.ts +1 -0
- package/dist/permissions.js +2 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugins/loader.d.ts +46 -0
- package/dist/plugins/loader.js +117 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +52 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/port.d.ts +295 -0
- package/dist/port.js +17 -0
- package/dist/port.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.js +35 -0
- package/dist/registry.js.map +1 -0
- package/dist/report-poller.d.ts +58 -0
- package/dist/report-poller.js +130 -0
- package/dist/report-poller.js.map +1 -0
- package/dist/resume.d.ts +52 -0
- package/dist/resume.js +109 -0
- package/dist/resume.js.map +1 -0
- package/dist/runtimes/acp/admin.js +470 -0
- package/dist/runtimes/acp/admin.js.map +1 -0
- package/dist/runtimes/acp/agents.js +167 -0
- package/dist/runtimes/acp/agents.js.map +1 -0
- package/dist/runtimes/acp/detect.js +379 -0
- package/dist/runtimes/acp/detect.js.map +1 -0
- package/dist/runtimes/acp/index.js +633 -0
- package/dist/runtimes/acp/index.js.map +1 -0
- package/dist/runtimes/acp/install.js +264 -0
- package/dist/runtimes/acp/install.js.map +1 -0
- package/dist/runtimes/acp/permissions.js +83 -0
- package/dist/runtimes/acp/permissions.js.map +1 -0
- package/dist/runtimes/acp/protocol.js +207 -0
- package/dist/runtimes/acp/protocol.js.map +1 -0
- package/dist/runtimes/acp-agents.d.ts +85 -0
- package/dist/runtimes/acp-agents.js +167 -0
- package/dist/runtimes/acp-agents.js.map +1 -0
- package/dist/runtimes/acp-detect-utils.d.ts +4 -0
- package/dist/runtimes/acp-detect-utils.js +35 -0
- package/dist/runtimes/acp-detect-utils.js.map +1 -0
- package/dist/runtimes/builtin-options.d.ts +3 -0
- package/dist/runtimes/builtin-options.js +44 -0
- package/dist/runtimes/builtin-options.js.map +1 -0
- package/dist/runtimes/catalog.d.ts +31 -0
- package/dist/runtimes/catalog.js +75 -0
- package/dist/runtimes/catalog.js.map +1 -0
- package/dist/runtimes/claude-code/index.js +544 -0
- package/dist/runtimes/claude-code/index.js.map +1 -0
- package/dist/runtimes/claude-code/inject.js +71 -0
- package/dist/runtimes/claude-code/inject.js.map +1 -0
- package/dist/runtimes/codex/client.js +203 -0
- package/dist/runtimes/codex/client.js.map +1 -0
- package/dist/runtimes/codex/detect.js +240 -0
- package/dist/runtimes/codex/detect.js.map +1 -0
- package/dist/runtimes/codex/index.js +1066 -0
- package/dist/runtimes/codex/index.js.map +1 -0
- package/dist/runtimes/herdr/agents.js +38 -0
- package/dist/runtimes/herdr/agents.js.map +1 -0
- package/dist/runtimes/herdr/commands.js +68 -0
- package/dist/runtimes/herdr/commands.js.map +1 -0
- package/dist/runtimes/herdr/index.js +712 -0
- package/dist/runtimes/herdr/index.js.map +1 -0
- package/dist/runtimes/herdr/options.js +29 -0
- package/dist/runtimes/herdr/options.js.map +1 -0
- package/dist/runtimes/herdr/server.js +75 -0
- package/dist/runtimes/herdr/server.js.map +1 -0
- package/dist/runtimes/options.d.ts +60 -0
- package/dist/runtimes/options.js +89 -0
- package/dist/runtimes/options.js.map +1 -0
- package/dist/spec/contract.md +120 -0
- package/dist/spec/index.d.ts +35 -0
- package/dist/spec/index.js +59 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/prompt-mode.md +176 -0
- package/dist/spec/reader.d.ts +5 -0
- package/dist/spec/reader.js +32 -0
- package/dist/spec/reader.js.map +1 -0
- package/dist/status.d.ts +8 -0
- package/dist/status.js +22 -0
- package/dist/status.js.map +1 -0
- package/dist/workspaces/git-worktree.d.ts +44 -0
- package/dist/workspaces/git-worktree.js +183 -0
- package/dist/workspaces/git-worktree.js.map +1 -0
- package/dist/workspaces/overview.d.ts +66 -0
- package/dist/workspaces/overview.js +12 -0
- package/dist/workspaces/overview.js.map +1 -0
- package/package.json +36 -4
- package/README.md +0 -3
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP Agent 静态目录。
|
|
3
|
+
*
|
|
4
|
+
* 这里只放纯常量与纯函数,不能依赖任何 Node 内置模块 —— Web 面板会把它
|
|
5
|
+
* 一起打进前端包。探测、安装、spawn 等 Node-only 逻辑放在 detect.ts / install.ts。
|
|
6
|
+
*/
|
|
7
|
+
export const ACP_AGENTS = [
|
|
8
|
+
{
|
|
9
|
+
id: 'claude',
|
|
10
|
+
runtimeId: 'acp-claude',
|
|
11
|
+
name: 'Claude Code',
|
|
12
|
+
label: 'Claude Code (ACP)',
|
|
13
|
+
hint: '通过 claude-agent-acp 接入,支持断线后 session/load 恢复',
|
|
14
|
+
command: 'claude-agent-acp',
|
|
15
|
+
args: [],
|
|
16
|
+
package: { name: '@agentclientprotocol/claude-agent-acp', version: '0.101.0' },
|
|
17
|
+
packageUrl: 'https://www.npmjs.com/package/@agentclientprotocol/claude-agent-acp',
|
|
18
|
+
cli: {
|
|
19
|
+
command: 'claude',
|
|
20
|
+
label: 'Claude Code CLI',
|
|
21
|
+
installUrl: 'https://docs.claude.com/en/docs/claude-code/setup',
|
|
22
|
+
},
|
|
23
|
+
probeArgs: ['--version'],
|
|
24
|
+
env: { CLAUDE_AGENT_ACP_PROTOCOL: 'v1' },
|
|
25
|
+
login: { command: 'claude', args: [], hint: '先完成 Claude Code 登录(claude 能正常对话)' },
|
|
26
|
+
loadSession: true,
|
|
27
|
+
// 已有 claude-code 内置运行时,Web 面板不再把它作为可选项展示。
|
|
28
|
+
deprecated: true,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'codex',
|
|
32
|
+
runtimeId: 'acp-codex',
|
|
33
|
+
name: 'Codex',
|
|
34
|
+
label: 'Codex (ACP)',
|
|
35
|
+
hint: 'baldaworks codex-acp;依赖本机 codex CLI,不支持断线恢复',
|
|
36
|
+
command: 'codex-acp',
|
|
37
|
+
args: ['--message-streaming'],
|
|
38
|
+
package: { name: 'codex-acp', version: '1.11.0' },
|
|
39
|
+
packageUrl: 'https://www.npmjs.com/package/codex-acp',
|
|
40
|
+
cli: {
|
|
41
|
+
command: 'codex',
|
|
42
|
+
label: 'OpenAI Codex CLI',
|
|
43
|
+
installUrl: 'https://github.com/openai/codex',
|
|
44
|
+
},
|
|
45
|
+
probeArgs: ['version'],
|
|
46
|
+
requires: [
|
|
47
|
+
{
|
|
48
|
+
command: 'codex',
|
|
49
|
+
label: 'Codex CLI',
|
|
50
|
+
capabilityArgs: ['app-server', '--help'],
|
|
51
|
+
hint: '需要本机安装 codex CLI,且版本包含 app-server 子命令',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
login: {
|
|
55
|
+
command: 'codex-acp',
|
|
56
|
+
args: ['login'],
|
|
57
|
+
hint: '先运行 codex-acp login',
|
|
58
|
+
check: { command: 'codex', args: ['login', 'status'] },
|
|
59
|
+
},
|
|
60
|
+
loadSession: false,
|
|
61
|
+
// 已有 codex-app 内置运行时,Web 面板不再把它作为可选项展示。
|
|
62
|
+
deprecated: true,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'opencode',
|
|
66
|
+
runtimeId: 'acp-opencode',
|
|
67
|
+
name: 'OpenCode',
|
|
68
|
+
label: 'OpenCode',
|
|
69
|
+
hint: 'opencode acp 原生 ACP 模式',
|
|
70
|
+
command: 'opencode',
|
|
71
|
+
args: ['acp'],
|
|
72
|
+
probeArgs: ['--version'],
|
|
73
|
+
installHint: 'brew install opencode(或参考 opencode 官方安装说明)',
|
|
74
|
+
installUrl: 'https://opencode.ai/docs/',
|
|
75
|
+
cli: { command: 'opencode', label: 'OpenCode CLI', installUrl: 'https://opencode.ai/docs/' },
|
|
76
|
+
verifyRequired: true,
|
|
77
|
+
loadSession: true,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'gemini',
|
|
81
|
+
runtimeId: 'acp-gemini',
|
|
82
|
+
name: 'Gemini CLI',
|
|
83
|
+
label: 'Gemini CLI',
|
|
84
|
+
hint: 'gemini --acp 实验性 ACP 模式',
|
|
85
|
+
command: 'gemini',
|
|
86
|
+
args: ['--acp'],
|
|
87
|
+
probeArgs: ['--version'],
|
|
88
|
+
installHint: 'npm i -g @google/gemini-cli',
|
|
89
|
+
installUrl: 'https://github.com/google-gemini/gemini-cli',
|
|
90
|
+
cli: { command: 'gemini', label: 'Gemini CLI', installUrl: 'https://github.com/google-gemini/gemini-cli' },
|
|
91
|
+
verifyRequired: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'copilot',
|
|
95
|
+
runtimeId: 'acp-copilot',
|
|
96
|
+
name: 'GitHub Copilot CLI',
|
|
97
|
+
label: 'GitHub Copilot CLI',
|
|
98
|
+
hint: 'copilot --acp --stdio',
|
|
99
|
+
command: 'copilot',
|
|
100
|
+
args: ['--acp', '--stdio'],
|
|
101
|
+
probeArgs: ['--version'],
|
|
102
|
+
installHint: '参考 GitHub Copilot CLI 官方安装说明',
|
|
103
|
+
installUrl: 'https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli',
|
|
104
|
+
cli: {
|
|
105
|
+
command: 'copilot',
|
|
106
|
+
label: 'GitHub Copilot CLI',
|
|
107
|
+
installUrl: 'https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli',
|
|
108
|
+
},
|
|
109
|
+
verifyRequired: true,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: 'cursor',
|
|
113
|
+
runtimeId: 'acp-cursor',
|
|
114
|
+
name: 'Cursor CLI',
|
|
115
|
+
label: 'Cursor CLI',
|
|
116
|
+
hint: 'cursor-agent acp;旧版本可能没有 acp 子命令',
|
|
117
|
+
command: 'cursor-agent',
|
|
118
|
+
args: ['acp'],
|
|
119
|
+
probeArgs: ['--version'],
|
|
120
|
+
installHint: '升级 cursor-agent 到支持 acp 子命令的版本',
|
|
121
|
+
installUrl: 'https://cursor.com/cli',
|
|
122
|
+
cli: { command: 'cursor-agent', label: 'Cursor CLI', installUrl: 'https://cursor.com/cli' },
|
|
123
|
+
verifyRequired: true,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: 'goose',
|
|
127
|
+
runtimeId: 'acp-goose',
|
|
128
|
+
name: 'Goose',
|
|
129
|
+
label: 'Goose',
|
|
130
|
+
hint: 'goose acp 原生 ACP 模式',
|
|
131
|
+
command: 'goose',
|
|
132
|
+
args: ['acp'],
|
|
133
|
+
probeArgs: ['--version'],
|
|
134
|
+
installHint: 'brew install block-goose-cli(或参考 Goose 官方安装说明)',
|
|
135
|
+
installUrl: 'https://block.github.io/goose/docs/getting-started/installation',
|
|
136
|
+
cli: {
|
|
137
|
+
command: 'goose',
|
|
138
|
+
label: 'Goose CLI',
|
|
139
|
+
installUrl: 'https://block.github.io/goose/docs/getting-started/installation',
|
|
140
|
+
},
|
|
141
|
+
verifyRequired: true,
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
/** 按 agent id 或 runtime id 查目录项。 */
|
|
145
|
+
export function acpAgentOf(idOrRuntimeId) {
|
|
146
|
+
const value = idOrRuntimeId.trim();
|
|
147
|
+
return ACP_AGENTS.find(agent => agent.id === value || agent.runtimeId === value);
|
|
148
|
+
}
|
|
149
|
+
/** 是否是目录内的动态 ACP 运行时 id(不含旧的通用 `acp`)。 */
|
|
150
|
+
export function isAcpRuntimeId(id) {
|
|
151
|
+
const value = id.trim();
|
|
152
|
+
return ACP_AGENTS.some(agent => agent.runtimeId === value);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 是否是已有原生运行时替代品的 ACP 运行时(Claude Code / Codex)。
|
|
156
|
+
*
|
|
157
|
+
* 这类运行时 id 依旧合法、依旧能派工,只是 Web 面板不再把它们列为可选项。
|
|
158
|
+
*/
|
|
159
|
+
export function isDeprecatedAcpRuntimeId(id) {
|
|
160
|
+
const value = id.trim();
|
|
161
|
+
return ACP_AGENTS.some(agent => agent.runtimeId === value && agent.deprecated === true);
|
|
162
|
+
}
|
|
163
|
+
/** agent id → runtime id;未知 id 返回 null。 */
|
|
164
|
+
export function acpRuntimeIdOf(idOrRuntimeId) {
|
|
165
|
+
return acpAgentOf(idOrRuntimeId)?.runtimeId ?? null;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../../../../packages/runtime/src/runtimes/acp/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { delimiter, isAbsolute, join } from 'node:path';
|
|
4
|
+
import { realRunner } from '@router-agent/infra/process.js';
|
|
5
|
+
import { acpAgentOf, ACP_AGENTS } from './agents.js';
|
|
6
|
+
import { AcpConnection, AcpProtocolError } from './protocol.js';
|
|
7
|
+
const DEFAULT_TIMEOUT_MS = 2_500;
|
|
8
|
+
const REQUIRE_TIMEOUT_MS = 1_500;
|
|
9
|
+
/** 运行时目录根:~/.router-agent/runtimes */
|
|
10
|
+
export function acpRuntimesRoot(home) {
|
|
11
|
+
return join(home, 'runtimes');
|
|
12
|
+
}
|
|
13
|
+
/** 某个 Agent 的 managed 安装目录:~/.router-agent/runtimes/<agentId> */
|
|
14
|
+
export function managedAgentDir(home, agentId) {
|
|
15
|
+
return join(acpRuntimesRoot(home), agentId);
|
|
16
|
+
}
|
|
17
|
+
/** 在 PATH 里解析命令;支持 Windows 的 PATHEXT。返回绝对路径。 */
|
|
18
|
+
export function resolveExecutable(command, env) {
|
|
19
|
+
const value = command.trim();
|
|
20
|
+
if (!value)
|
|
21
|
+
return undefined;
|
|
22
|
+
if (isAbsolute(value) || value.includes('/') || value.includes('\\')) {
|
|
23
|
+
return existsSync(value) ? value : undefined;
|
|
24
|
+
}
|
|
25
|
+
const pathValue = env.PATH ?? env.Path ?? '';
|
|
26
|
+
const extensions = process.platform === 'win32'
|
|
27
|
+
? ['', '.cmd', '.exe', '.bat']
|
|
28
|
+
: [''];
|
|
29
|
+
for (const dir of pathValue.split(delimiter)) {
|
|
30
|
+
if (!dir)
|
|
31
|
+
continue;
|
|
32
|
+
for (const ext of extensions) {
|
|
33
|
+
const candidate = join(dir, `${value}${ext}`);
|
|
34
|
+
if (existsSync(candidate))
|
|
35
|
+
return candidate;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function managedBin(agent, home) {
|
|
41
|
+
const dir = join(managedAgentDir(home, agent.id), 'node_modules', '.bin');
|
|
42
|
+
const names = process.platform === 'win32'
|
|
43
|
+
? [`${agent.command}.cmd`, `${agent.command}.exe`, agent.command]
|
|
44
|
+
: [agent.command];
|
|
45
|
+
for (const name of names) {
|
|
46
|
+
const candidate = join(dir, name);
|
|
47
|
+
if (existsSync(candidate))
|
|
48
|
+
return candidate;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function optionRecordOf(config, runtimeId) {
|
|
53
|
+
const value = config.runtime.options?.[runtimeId];
|
|
54
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
55
|
+
}
|
|
56
|
+
/** 读取某个 ACP 运行时的 args/env 覆盖。registry 与探测共用。 */
|
|
57
|
+
export function acpRuntimeConfig(agent, config) {
|
|
58
|
+
const options = optionRecordOf(config, agent.runtimeId);
|
|
59
|
+
const args = Array.isArray(options.args)
|
|
60
|
+
? options.args.filter((item) => typeof item === 'string')
|
|
61
|
+
: [...agent.args];
|
|
62
|
+
const env = { ...(agent.env ?? {}) };
|
|
63
|
+
if (options.env && typeof options.env === 'object' && !Array.isArray(options.env)) {
|
|
64
|
+
for (const [key, value] of Object.entries(options.env)) {
|
|
65
|
+
if (typeof value === 'string')
|
|
66
|
+
env[key] = value;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { args, env };
|
|
70
|
+
}
|
|
71
|
+
export function installHintOf(agent) {
|
|
72
|
+
return agent.package ? `ra runtime install ${agent.runtimeId}` : agent.installHint;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 同步解析 Agent 命令,不 spawn 任何进程。
|
|
76
|
+
*
|
|
77
|
+
* 优先级:runtime.options.<id>.command → ~/.router-agent/runtimes/<agent>/node_modules/.bin
|
|
78
|
+
* → PATH。找不到时返回 reason,registry 会把它变成 start() 的 runtime:unavailable。
|
|
79
|
+
*/
|
|
80
|
+
export function resolveAgentCommand(agent, opts) {
|
|
81
|
+
const options = optionRecordOf(opts.config, agent.runtimeId);
|
|
82
|
+
const override = typeof options.command === 'string' ? options.command.trim() : '';
|
|
83
|
+
if (override) {
|
|
84
|
+
const resolved = resolveExecutable(override, opts.env);
|
|
85
|
+
return resolved
|
|
86
|
+
? { command: resolved, source: 'config' }
|
|
87
|
+
: { source: 'config', reason: `runtime.options.${agent.runtimeId}.command 指向的文件不存在:${override}` };
|
|
88
|
+
}
|
|
89
|
+
const managed = managedBin(agent, opts.home);
|
|
90
|
+
if (managed)
|
|
91
|
+
return { command: managed, source: 'managed' };
|
|
92
|
+
const onPath = resolveExecutable(agent.command, opts.env);
|
|
93
|
+
if (onPath)
|
|
94
|
+
return { command: onPath, source: 'path' };
|
|
95
|
+
return { reason: `未找到 ${agent.command},也没有 managed 安装` };
|
|
96
|
+
}
|
|
97
|
+
export function parseVersion(text) {
|
|
98
|
+
const match = /(\d+)\.(\d+)\.(\d+)/.exec(text);
|
|
99
|
+
return match ? `${match[1]}.${match[2]}.${match[3]}` : undefined;
|
|
100
|
+
}
|
|
101
|
+
function compareVersion(a, b) {
|
|
102
|
+
const pa = a.split('.').map(Number);
|
|
103
|
+
const pb = b.split('.').map(Number);
|
|
104
|
+
for (let i = 0; i < 3; i += 1) {
|
|
105
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
106
|
+
if (diff !== 0)
|
|
107
|
+
return diff;
|
|
108
|
+
}
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
function tail(text, max = 300) {
|
|
112
|
+
const value = text.trim().replace(/\s+/g, ' ');
|
|
113
|
+
return value.length <= max ? value : `…${value.slice(-max)}`;
|
|
114
|
+
}
|
|
115
|
+
async function probe(runner, bin, args, opts) {
|
|
116
|
+
try {
|
|
117
|
+
return await runner(bin).run([...args], {
|
|
118
|
+
cwd: opts.cwd,
|
|
119
|
+
env: { ...process.env, ...opts.env },
|
|
120
|
+
timeoutMs: opts.timeoutMs,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
return { code: 127, stdout: '', stderr: error instanceof Error ? error.message : String(error) };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function detectOne(agent, opts) {
|
|
128
|
+
const runner = opts.runner ?? realRunner;
|
|
129
|
+
const base = {
|
|
130
|
+
id: agent.runtimeId,
|
|
131
|
+
name: agent.name,
|
|
132
|
+
label: agent.label,
|
|
133
|
+
hint: agent.hint,
|
|
134
|
+
status: 'not-installed',
|
|
135
|
+
installable: Boolean(agent.package),
|
|
136
|
+
...(agent.package ? { packageName: agent.package.name } : {}),
|
|
137
|
+
...(installHintOf(agent) ? { installHint: installHintOf(agent) } : {}),
|
|
138
|
+
...(agent.login ? { loginHint: agent.login.hint } : {}),
|
|
139
|
+
...(agent.loadSession !== undefined ? { loadSession: agent.loadSession } : {}),
|
|
140
|
+
...(agent.verifyRequired ? { verifyRequired: true } : {}),
|
|
141
|
+
...(agent.deprecated ? { deprecated: true } : {}),
|
|
142
|
+
};
|
|
143
|
+
const resolved = resolveAgentCommand(agent, { home: opts.home, env: opts.env, config: opts.config });
|
|
144
|
+
// CLI 与 ACP 扩展分开探测:例如 claude 已安装但 claude-agent-acp 还没装,
|
|
145
|
+
// 卡片应该只显示「安装 ACP 扩展」,而不是笼统的「未安装」。
|
|
146
|
+
const cliCommand = agent.cli?.command ?? agent.command;
|
|
147
|
+
const cliBin = cliCommand === agent.command && resolved.command
|
|
148
|
+
? resolved.command
|
|
149
|
+
: resolveExecutable(cliCommand, opts.env);
|
|
150
|
+
let cliVersion;
|
|
151
|
+
if (cliBin && cliCommand !== agent.command) {
|
|
152
|
+
const cliProbe = await probe(runner, cliBin, ['--version'], {
|
|
153
|
+
cwd: opts.home,
|
|
154
|
+
env: opts.env,
|
|
155
|
+
timeoutMs: REQUIRE_TIMEOUT_MS,
|
|
156
|
+
});
|
|
157
|
+
if (cliProbe.code === 0)
|
|
158
|
+
cliVersion = parseVersion(cliProbe.stdout) ?? parseVersion(cliProbe.stderr);
|
|
159
|
+
}
|
|
160
|
+
const installUrl = agent.cli?.installUrl ?? agent.installUrl;
|
|
161
|
+
const cli = {
|
|
162
|
+
command: cliCommand,
|
|
163
|
+
label: agent.cli?.label ?? agent.label,
|
|
164
|
+
installed: Boolean(cliBin),
|
|
165
|
+
...(cliVersion ? { version: cliVersion } : {}),
|
|
166
|
+
...(installUrl ? { installUrl } : {}),
|
|
167
|
+
};
|
|
168
|
+
base.cli = cli;
|
|
169
|
+
if (agent.package) {
|
|
170
|
+
base.extension = {
|
|
171
|
+
packageName: agent.package.name,
|
|
172
|
+
installed: Boolean(resolved.command),
|
|
173
|
+
installable: true,
|
|
174
|
+
...(agent.packageUrl ? { installUrl: agent.packageUrl } : {}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (!resolved.command) {
|
|
178
|
+
return { ...base, source: resolved.source, reason: resolved.reason };
|
|
179
|
+
}
|
|
180
|
+
const command = resolved.command;
|
|
181
|
+
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
182
|
+
const probeArgs = agent.probeArgs ?? ['--version'];
|
|
183
|
+
const versionResult = await probe(runner, command, probeArgs, { cwd: opts.home, env: opts.env, timeoutMs });
|
|
184
|
+
if (versionResult.code !== 0) {
|
|
185
|
+
return {
|
|
186
|
+
...base,
|
|
187
|
+
status: 'incompatible',
|
|
188
|
+
command,
|
|
189
|
+
source: resolved.source,
|
|
190
|
+
reason: `版本探测失败(${probeArgs.join(' ')}):${tail(versionResult.stderr || versionResult.stdout)}`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const version = parseVersion(versionResult.stdout) ?? parseVersion(versionResult.stderr);
|
|
194
|
+
if (version && cli.command === agent.command)
|
|
195
|
+
cli.version = version;
|
|
196
|
+
const requirements = [];
|
|
197
|
+
let failure;
|
|
198
|
+
for (const requirement of agent.requires ?? []) {
|
|
199
|
+
const bin = resolveExecutable(requirement.command, opts.env);
|
|
200
|
+
if (!bin) {
|
|
201
|
+
const reason = `未找到 ${requirement.label}(${requirement.command})`;
|
|
202
|
+
requirements.push({ label: requirement.label, ok: false, reason });
|
|
203
|
+
failure ??= `${reason};${requirement.hint}`;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const versionProbe = await probe(runner, bin, ['--version'], { cwd: opts.home, env: opts.env, timeoutMs: REQUIRE_TIMEOUT_MS });
|
|
207
|
+
const requiredVersion = versionProbe.code === 0 ? parseVersion(versionProbe.stdout || versionProbe.stderr) : undefined;
|
|
208
|
+
if (requirement.minVersion && requiredVersion && compareVersion(requiredVersion, requirement.minVersion) < 0) {
|
|
209
|
+
const reason = `${requirement.label} ${requiredVersion} 低于要求 ${requirement.minVersion}`;
|
|
210
|
+
requirements.push({ label: requirement.label, ok: false, version: requiredVersion, reason });
|
|
211
|
+
failure ??= `${reason};${requirement.hint}`;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (requirement.capabilityArgs) {
|
|
215
|
+
const capability = await probe(runner, bin, requirement.capabilityArgs, { cwd: opts.home, env: opts.env, timeoutMs: REQUIRE_TIMEOUT_MS });
|
|
216
|
+
if (capability.code !== 0) {
|
|
217
|
+
const reason = `${requirement.label} 缺少 ${requirement.capabilityArgs.join(' ')} 能力(可能是版本过旧)`;
|
|
218
|
+
requirements.push({ label: requirement.label, ok: false, version: requiredVersion, reason });
|
|
219
|
+
failure ??= `${reason};${requirement.hint}`;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
requirements.push({ label: requirement.label, ok: true, ...(requiredVersion ? { version: requiredVersion } : {}) });
|
|
224
|
+
}
|
|
225
|
+
if (failure) {
|
|
226
|
+
return {
|
|
227
|
+
...base,
|
|
228
|
+
status: 'incompatible',
|
|
229
|
+
command,
|
|
230
|
+
source: resolved.source,
|
|
231
|
+
...(version ? { version } : {}),
|
|
232
|
+
reason: failure,
|
|
233
|
+
...(requirements.length > 0 ? { requires: requirements } : {}),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
if (agent.login?.check) {
|
|
237
|
+
const login = await probe(runner, resolveExecutable(agent.login.check.command, opts.env) ?? agent.login.check.command, agent.login.check.args, {
|
|
238
|
+
cwd: opts.home,
|
|
239
|
+
env: opts.env,
|
|
240
|
+
timeoutMs: REQUIRE_TIMEOUT_MS,
|
|
241
|
+
});
|
|
242
|
+
if (login.code !== 0) {
|
|
243
|
+
return {
|
|
244
|
+
...base,
|
|
245
|
+
status: 'needs-auth',
|
|
246
|
+
command,
|
|
247
|
+
source: resolved.source,
|
|
248
|
+
...(version ? { version } : {}),
|
|
249
|
+
reason: agent.login.hint,
|
|
250
|
+
...(requirements.length > 0 ? { requires: requirements } : {}),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (agent.verifyRequired) {
|
|
255
|
+
return {
|
|
256
|
+
...base,
|
|
257
|
+
status: 'unverified',
|
|
258
|
+
command,
|
|
259
|
+
source: resolved.source,
|
|
260
|
+
...(version ? { version } : {}),
|
|
261
|
+
reason: '版本探测通过,建议运行 ra runtime check 做完整 ACP 握手',
|
|
262
|
+
...(requirements.length > 0 ? { requires: requirements } : {}),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
...base,
|
|
267
|
+
status: 'ready',
|
|
268
|
+
command,
|
|
269
|
+
source: resolved.source,
|
|
270
|
+
...(version ? { version } : {}),
|
|
271
|
+
...(requirements.length > 0 ? { requires: requirements } : {}),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/** 并行探测全部 ACP Agent;单个失败不抛,只体现在 status/reason。 */
|
|
275
|
+
export async function detectAcpAgents(opts) {
|
|
276
|
+
const choices = await Promise.all(ACP_AGENTS.map(agent => detectOne(agent, opts)));
|
|
277
|
+
return { detectedAt: new Date().toISOString(), choices };
|
|
278
|
+
}
|
|
279
|
+
/** 只探测一个 Agent;未知 id 返回 null。 */
|
|
280
|
+
export async function detectAcpAgent(idOrRuntimeId, opts) {
|
|
281
|
+
const agent = acpAgentOf(idOrRuntimeId);
|
|
282
|
+
return agent ? detectOne(agent, opts) : null;
|
|
283
|
+
}
|
|
284
|
+
function detectCachePath(home) {
|
|
285
|
+
return join(acpRuntimesRoot(home), 'detect.json');
|
|
286
|
+
}
|
|
287
|
+
export function readDetectionSnapshot(home) {
|
|
288
|
+
try {
|
|
289
|
+
const parsed = JSON.parse(readFileSync(detectCachePath(home), 'utf8'));
|
|
290
|
+
return Array.isArray(parsed?.choices) ? parsed : null;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
export function writeDetectionSnapshot(home, snapshot) {
|
|
297
|
+
const path = detectCachePath(home);
|
|
298
|
+
mkdirSync(acpRuntimesRoot(home), { recursive: true });
|
|
299
|
+
const tmp = `${path}.tmp`;
|
|
300
|
+
writeFileSync(tmp, `${JSON.stringify(snapshot, null, 2)}\n`, 'utf8');
|
|
301
|
+
renameSync(tmp, path);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* L2 完整握手:initialize + session/new(临时 cwd),随后关闭。
|
|
305
|
+
* 只在 `ra runtime check` / Web「检查」时调用。
|
|
306
|
+
*/
|
|
307
|
+
export async function checkAcpAgent(idOrRuntimeId, opts) {
|
|
308
|
+
const agent = acpAgentOf(idOrRuntimeId);
|
|
309
|
+
if (!agent)
|
|
310
|
+
return { ok: false, status: 'not-installed', detail: `未知 ACP Agent: ${idOrRuntimeId}` };
|
|
311
|
+
const resolved = resolveAgentCommand(agent, { home: opts.home, env: opts.env, config: opts.config });
|
|
312
|
+
if (!resolved.command) {
|
|
313
|
+
return { ok: false, status: 'not-installed', detail: resolved.reason ?? '未找到可执行文件' };
|
|
314
|
+
}
|
|
315
|
+
const { args, env } = acpRuntimeConfig(agent, opts.config);
|
|
316
|
+
const timeoutMs = opts.timeoutMs ?? 10_000;
|
|
317
|
+
const cwd = mkdtempSync(join(tmpdir(), 'ra-acp-check-'));
|
|
318
|
+
const connection = new AcpConnection({
|
|
319
|
+
command: resolved.command,
|
|
320
|
+
args,
|
|
321
|
+
cwd,
|
|
322
|
+
env: { ...process.env, ...opts.env, ...env },
|
|
323
|
+
onNotification: () => { },
|
|
324
|
+
onRequest: async (method) => {
|
|
325
|
+
if (method === 'session/request_permission')
|
|
326
|
+
return { outcome: { outcome: 'cancelled' } };
|
|
327
|
+
throw new AcpProtocolError(-32601, `ra runtime check 不处理该请求: ${method}`);
|
|
328
|
+
},
|
|
329
|
+
onExit: () => { },
|
|
330
|
+
});
|
|
331
|
+
let protocolVersion;
|
|
332
|
+
let agentInfo;
|
|
333
|
+
let loadSession;
|
|
334
|
+
try {
|
|
335
|
+
const init = await connection.request('initialize', {
|
|
336
|
+
protocolVersion: 1,
|
|
337
|
+
clientCapabilities: { fs: { readTextFile: false, writeTextFile: false }, terminal: false },
|
|
338
|
+
clientInfo: { name: 'router-agent', title: 'Router Agent', version: '0.1.0' },
|
|
339
|
+
}, timeoutMs);
|
|
340
|
+
protocolVersion = init?.protocolVersion;
|
|
341
|
+
agentInfo = init?.agentInfo;
|
|
342
|
+
loadSession = init?.agentCapabilities?.loadSession;
|
|
343
|
+
if (Number(protocolVersion) !== 1) {
|
|
344
|
+
return {
|
|
345
|
+
ok: false,
|
|
346
|
+
status: 'incompatible',
|
|
347
|
+
detail: `协议版本不兼容: ${protocolVersion ?? 'unknown'}`,
|
|
348
|
+
...(protocolVersion !== undefined ? { protocolVersion } : {}),
|
|
349
|
+
...(agentInfo ? { agentInfo } : {}),
|
|
350
|
+
...(loadSession !== undefined ? { loadSession } : {}),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
await connection.request('session/new', { cwd, mcpServers: [] }, timeoutMs);
|
|
354
|
+
return {
|
|
355
|
+
ok: true,
|
|
356
|
+
status: 'ready',
|
|
357
|
+
detail: `initialize + session/new 成功(协议 v1${loadSession ? ',支持 session/load' : ''})`,
|
|
358
|
+
...(protocolVersion !== undefined ? { protocolVersion } : {}),
|
|
359
|
+
...(agentInfo ? { agentInfo } : {}),
|
|
360
|
+
...(loadSession !== undefined ? { loadSession } : {}),
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
365
|
+
return {
|
|
366
|
+
ok: false,
|
|
367
|
+
status: 'incompatible',
|
|
368
|
+
detail,
|
|
369
|
+
...(protocolVersion !== undefined ? { protocolVersion } : {}),
|
|
370
|
+
...(agentInfo ? { agentInfo } : {}),
|
|
371
|
+
...(loadSession !== undefined ? { loadSession } : {}),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
await connection.close().catch(() => { });
|
|
376
|
+
rmSync(cwd, { recursive: true, force: true });
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../../../../packages/runtime/src/runtimes/acp/detect.ts"],"names":[],"mappings":"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"}
|