@cicctencent/agent-core 1.0.32 → 1.0.34
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/cjs/agent/runtime-builder.d.ts +4 -2
- package/dist/cjs/agent/runtime-builder.d.ts.map +1 -1
- package/dist/cjs/agent/runtime-builder.js +7 -2
- package/dist/cjs/agent/runtime-builder.js.map +1 -1
- package/dist/cjs/automation/node-task-types.d.ts +17 -1
- package/dist/cjs/automation/node-task-types.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +3 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction/service.d.ts +2 -0
- package/dist/cjs/interaction/service.d.ts.map +1 -1
- package/dist/cjs/interaction/service.js +8 -0
- package/dist/cjs/interaction/service.js.map +1 -1
- package/dist/cjs/sandbox/local-sandbox.d.ts +2 -4
- package/dist/cjs/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/cjs/sandbox/local-sandbox.js +4 -44
- package/dist/cjs/sandbox/local-sandbox.js.map +1 -1
- package/dist/cjs/sandbox/path-guard.d.ts +20 -0
- package/dist/cjs/sandbox/path-guard.d.ts.map +1 -0
- package/dist/cjs/sandbox/path-guard.js +123 -0
- package/dist/cjs/sandbox/path-guard.js.map +1 -0
- package/dist/cjs/security/risk.d.ts.map +1 -1
- package/dist/cjs/security/risk.js +5 -2
- package/dist/cjs/security/risk.js.map +1 -1
- package/dist/cjs/skill/manager.d.ts.map +1 -1
- package/dist/cjs/skill/manager.js +5 -0
- package/dist/cjs/skill/manager.js.map +1 -1
- package/dist/cjs/tool/ask-user.d.ts.map +1 -1
- package/dist/cjs/tool/ask-user.js +59 -9
- package/dist/cjs/tool/ask-user.js.map +1 -1
- package/dist/cjs/utils/python-command.d.ts +13 -4
- package/dist/cjs/utils/python-command.d.ts.map +1 -1
- package/dist/cjs/utils/python-command.js +46 -20
- package/dist/cjs/utils/python-command.js.map +1 -1
- package/dist/esm/agent/runtime-builder.d.ts +4 -2
- package/dist/esm/agent/runtime-builder.d.ts.map +1 -1
- package/dist/esm/agent/runtime-builder.js +7 -2
- package/dist/esm/agent/runtime-builder.js.map +1 -1
- package/dist/esm/automation/node-task-types.d.ts +17 -1
- package/dist/esm/automation/node-task-types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction/service.d.ts +2 -0
- package/dist/esm/interaction/service.d.ts.map +1 -1
- package/dist/esm/interaction/service.js +8 -0
- package/dist/esm/interaction/service.js.map +1 -1
- package/dist/esm/sandbox/local-sandbox.d.ts +2 -4
- package/dist/esm/sandbox/local-sandbox.d.ts.map +1 -1
- package/dist/esm/sandbox/local-sandbox.js +4 -44
- package/dist/esm/sandbox/local-sandbox.js.map +1 -1
- package/dist/esm/sandbox/path-guard.d.ts +20 -0
- package/dist/esm/sandbox/path-guard.d.ts.map +1 -0
- package/dist/esm/sandbox/path-guard.js +86 -0
- package/dist/esm/sandbox/path-guard.js.map +1 -0
- package/dist/esm/security/risk.d.ts.map +1 -1
- package/dist/esm/security/risk.js +5 -2
- package/dist/esm/security/risk.js.map +1 -1
- package/dist/esm/skill/manager.d.ts.map +1 -1
- package/dist/esm/skill/manager.js +5 -0
- package/dist/esm/skill/manager.js.map +1 -1
- package/dist/esm/tool/ask-user.d.ts.map +1 -1
- package/dist/esm/tool/ask-user.js +59 -9
- package/dist/esm/tool/ask-user.js.map +1 -1
- package/dist/esm/utils/python-command.d.ts +13 -4
- package/dist/esm/utils/python-command.d.ts.map +1 -1
- package/dist/esm/utils/python-command.js +45 -20
- package/dist/esm/utils/python-command.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,37 +6,51 @@
|
|
|
6
6
|
* 没有 `python3`。此前该命令名散落在多处硬编码(local-sandbox、skill-resources、
|
|
7
7
|
* mcp-config.helper 等),导致「本机只有 python 没有 python3」时部分入口直接 ENOENT 失败。
|
|
8
8
|
*
|
|
9
|
+
* Windows 还存在「应用执行别名」陷阱:Microsoft Store 会在 PATH 中注入一个 0 字节的
|
|
10
|
+
* `python3.exe` 占位壳(AppInstallerPythonRedirector.exe),`where`/`command -v` 能找到它,
|
|
11
|
+
* 但调用时并不执行脚本(静默退出码 49,无任何 stdout/stderr)。因此**探测必须以"实际试跑"为准**,
|
|
12
|
+
* 而非仅检查名字是否在 PATH 中可解析,否则会误判该假壳"可用"。
|
|
13
|
+
*
|
|
9
14
|
* 本模块把「探测可用 Python 命令」内聚到唯一来源:
|
|
10
|
-
* -
|
|
15
|
+
* - 候选顺序 `python3` → `python` → `py -3`(py -3 指向 Windows Store / 系统已注册的 Python 3);
|
|
16
|
+
* - 每个候选均通过"实际运行一条验证语句"判定可用,过滤掉 Store 假壳;
|
|
11
17
|
* - 探测结果进程内缓存,避免每次 spawn 重复探测;
|
|
12
|
-
* -
|
|
13
|
-
* - 若两者都不可用,返回默认 `python3` 并让上层 spawn 时暴露明确 ENOENT 错误。
|
|
18
|
+
* - 若全部不可用,返回默认 `python3` 并让上层 spawn 时暴露明确 ENOENT 错误。
|
|
14
19
|
*/
|
|
15
20
|
import { spawn, spawnSync } from 'child_process';
|
|
16
21
|
/** 候选命令的优先级顺序(越靠前越优先) */
|
|
17
|
-
const PYTHON_CANDIDATES = ['python3', 'python'];
|
|
18
|
-
/**
|
|
22
|
+
const PYTHON_CANDIDATES = ['python3', 'python', 'py -3'];
|
|
23
|
+
/**
|
|
24
|
+
* 通过"实际试跑"判定候选命令是否真的能执行 Python 代码。
|
|
25
|
+
* 仅用 `where`/`command -v` 会命中 Windows Store 的 0 字节占位壳,故必须以真实执行为准。
|
|
26
|
+
* 直接以 args 数组形式 spawn 解释器(不经由 cmd /c 包装),避免引号被 shell 二次解析导致
|
|
27
|
+
* 误判;store 占位壳被直接运行时退出非 0 或产出不了版本号,从而被过滤。
|
|
28
|
+
* @param candidate 候选命令(可能含空格,如 `py -3`)
|
|
29
|
+
*/
|
|
19
30
|
function probeCommand(candidate) {
|
|
20
31
|
return new Promise((resolve) => {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
found = true;
|
|
28
|
-
});
|
|
32
|
+
const parts = candidate.split(' ');
|
|
33
|
+
const bin = parts[0];
|
|
34
|
+
const args = [...parts.slice(1), '-c', 'import sys; print(sys.version.split()[0])'];
|
|
35
|
+
const detacher = spawn(bin, args, { windowsHide: true, timeout: 5000 });
|
|
36
|
+
let out = '';
|
|
37
|
+
detacher.stdout?.on('data', (d) => { out += d.toString(); });
|
|
29
38
|
detacher.on('error', () => resolve(false));
|
|
30
|
-
detacher.on('close', (code) =>
|
|
39
|
+
detacher.on('close', (code) => {
|
|
40
|
+
// 退出 0 且能产出预期的版本号字符串,才视为真实可用
|
|
41
|
+
resolve(code === 0 && /\d+\.\d+/.test(out.trim()));
|
|
42
|
+
});
|
|
31
43
|
});
|
|
32
44
|
}
|
|
33
45
|
/** 同步探测版本(供无法使用 await 的同步上下文,如 buildMCPConfig 复用同一缓存与候选顺序) */
|
|
34
46
|
function probeCommandSync(candidate) {
|
|
35
47
|
try {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
const parts = candidate.split(' ');
|
|
49
|
+
const bin = parts[0];
|
|
50
|
+
const args = [...parts.slice(1), '-c', 'import sys; print(sys.version.split()[0])'];
|
|
51
|
+
const result = spawnSync(bin, args, { windowsHide: true, timeout: 5000 });
|
|
52
|
+
const out = result.stdout?.toString() ?? '';
|
|
53
|
+
return result.status === 0 && /\d+\.\d+/.test(out.trim());
|
|
40
54
|
}
|
|
41
55
|
catch {
|
|
42
56
|
return false;
|
|
@@ -45,7 +59,7 @@ function probeCommandSync(candidate) {
|
|
|
45
59
|
let cachedCommand = null;
|
|
46
60
|
/**
|
|
47
61
|
* 解析当前环境可用的 Python 可执行命令名(带缓存)。
|
|
48
|
-
* 优先 `python3`,回退 `python
|
|
62
|
+
* 优先 `python3`,回退 `python`,再回退 `py -3`,全部不可用则返回默认 `python3`。
|
|
49
63
|
*/
|
|
50
64
|
export async function resolvePythonCommand() {
|
|
51
65
|
if (cachedCommand)
|
|
@@ -56,7 +70,7 @@ export async function resolvePythonCommand() {
|
|
|
56
70
|
return cachedCommand;
|
|
57
71
|
}
|
|
58
72
|
}
|
|
59
|
-
//
|
|
73
|
+
// 都不存在(或全是 Store 假壳):返回常用默认名,由上层 spawn 暴露明确的「命令未找到」错误
|
|
60
74
|
cachedCommand = 'python3';
|
|
61
75
|
return cachedCommand;
|
|
62
76
|
}
|
|
@@ -80,4 +94,15 @@ export function resolvePythonCommandSync() {
|
|
|
80
94
|
cachedCommand = 'python3';
|
|
81
95
|
return cachedCommand;
|
|
82
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* 当所有候选均不可用时,给出的可操作排查建议(尤其针对 Windows 应用执行别名陷阱)。
|
|
99
|
+
*/
|
|
100
|
+
export const PYTHON_UNAVAILABLE_HINT = [
|
|
101
|
+
'未找到可用的 Python 解释器。排查建议:',
|
|
102
|
+
' - Windows:若 `python3` 指向 Microsoft Store 的"应用执行别名"占位壳,请到',
|
|
103
|
+
' 设置 → 应用 → 应用执行别名 中关闭 python3/python 的别名开关,改从 python.org 安装并勾选 "Add to PATH";',
|
|
104
|
+
' - 或确保 `python` / `py -3` 命令可用(Python Launcher for Windows 默认提供 `py`);',
|
|
105
|
+
' - Linux/macOS:apt-get install -y python3 / brew install python3。',
|
|
106
|
+
'请运维在运行 agent-server 的主机上安装对应解释器后重试。',
|
|
107
|
+
].join('\n');
|
|
83
108
|
//# sourceMappingURL=python-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python-command.js","sourceRoot":"","sources":["../../../src/utils/python-command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"python-command.js","sourceRoot":"","sources":["../../../src/utils/python-command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cicctencent/agent-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.34",
|
|
4
4
|
"description": "Core engine for AI agent — LLM orchestration, tool execution, MCP, skill routing, security, and memory pipeline.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|