@router-agent/runtime 0.3.31 → 0.3.33
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-trust.d.ts +29 -0
- package/dist/agents/claude-trust.js +94 -0
- package/dist/agents/claude-trust.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugins/loader.d.ts +1 -0
- package/dist/plugins/loader.js +2 -0
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/types.d.ts +2 -0
- package/dist/port.d.ts +7 -0
- package/dist/port.js.map +1 -1
- package/dist/runtimes/builtin-options.d.ts +1 -0
- package/dist/runtimes/builtin-options.js +34 -0
- package/dist/runtimes/builtin-options.js.map +1 -1
- package/dist/runtimes/catalog.d.ts +1 -0
- package/dist/runtimes/catalog.js +9 -0
- package/dist/runtimes/catalog.js.map +1 -1
- package/dist/runtimes/options.d.ts +1 -1
- package/dist/runtimes/options.js +3 -3
- package/dist/runtimes/options.js.map +1 -1
- package/package.json +3 -3
- package/dist/orca/commands.js +0 -60
- package/dist/orca/commands.js.map +0 -1
- package/dist/orca/index.js +0 -452
- package/dist/orca/index.js.map +0 -1
- package/dist/orca/options.js +0 -33
- package/dist/orca/options.js.map +0 -1
- package/dist/orca/report-poller.js +0 -143
- package/dist/orca/report-poller.js.map +0 -1
- package/dist/runtimes/acp/admin.js +0 -470
- package/dist/runtimes/acp/admin.js.map +0 -1
- package/dist/runtimes/acp/agents.js +0 -167
- package/dist/runtimes/acp/agents.js.map +0 -1
- package/dist/runtimes/acp/detect.js +0 -379
- package/dist/runtimes/acp/detect.js.map +0 -1
- package/dist/runtimes/acp/index.js +0 -633
- package/dist/runtimes/acp/index.js.map +0 -1
- package/dist/runtimes/acp/install.js +0 -264
- package/dist/runtimes/acp/install.js.map +0 -1
- package/dist/runtimes/acp/permissions.js +0 -83
- package/dist/runtimes/acp/permissions.js.map +0 -1
- package/dist/runtimes/acp/protocol.js +0 -207
- package/dist/runtimes/acp/protocol.js.map +0 -1
- package/dist/runtimes/claude-code/index.js +0 -544
- package/dist/runtimes/claude-code/index.js.map +0 -1
- package/dist/runtimes/claude-code/inject.js +0 -71
- package/dist/runtimes/claude-code/inject.js.map +0 -1
- package/dist/runtimes/codex/client.js +0 -203
- package/dist/runtimes/codex/client.js.map +0 -1
- package/dist/runtimes/codex/detect.js +0 -240
- package/dist/runtimes/codex/detect.js.map +0 -1
- package/dist/runtimes/codex/index.js +0 -1066
- package/dist/runtimes/codex/index.js.map +0 -1
- package/dist/runtimes/herdr/agents.js +0 -38
- package/dist/runtimes/herdr/agents.js.map +0 -1
- package/dist/runtimes/herdr/commands.js +0 -68
- package/dist/runtimes/herdr/commands.js.map +0 -1
- package/dist/runtimes/herdr/index.js +0 -712
- package/dist/runtimes/herdr/index.js.map +0 -1
- package/dist/runtimes/herdr/options.js +0 -29
- package/dist/runtimes/herdr/options.js.map +0 -1
- package/dist/runtimes/herdr/server.js +0 -75
- package/dist/runtimes/herdr/server.js.map +0 -1
|
@@ -1,167 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../../../../packages/runtime/src/runtimes/acp/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,379 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../../../../packages/runtime/src/runtimes/acp/detect.ts"],"names":[],"mappings":"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"}
|