feihong-code 8.0.0 → 8.0.2
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/.github/workflows/ci.yml +193 -193
- package/CHANGELOG.md +140 -117
- package/README.md +656 -636
- package/agent-team/.env.example +13 -0
- package/agent-team/README.md +42 -0
- package/agent-team/agents/__init__.py +0 -0
- package/agent-team/agents/l1_acquisition.py +207 -0
- package/agent-team/agents/l2_content.py +237 -0
- package/agent-team/agents/l3_conversion.py +148 -0
- package/agent-team/agents/l4_analysis.py +118 -0
- package/agent-team/agents/l5_management.py +52 -0
- package/agent-team/agents/registry.py +60 -0
- package/agent-team/config.py +39 -0
- package/agent-team/core/__init__.py +0 -0
- package/agent-team/core/agent.py +73 -0
- package/agent-team/core/models.py +347 -0
- package/agent-team/core/scheduler.py +150 -0
- package/agent-team/core/task.py +121 -0
- package/agent-team/feihongzhi.db +0 -0
- package/agent-team/llm/__init__.py +12 -0
- package/agent-team/llm/base.py +22 -0
- package/agent-team/llm/doubao_llm.py +52 -0
- package/agent-team/llm/mock_llm.py +42 -0
- package/agent-team/main.py +235 -0
- package/agent-team/requirements.txt +2 -0
- package/agent-team/skill_packager.py +248 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/SKILL.md +40 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/run.py +111 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/SKILL.md +38 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/run.py +108 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/run.py +106 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/run.py +107 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/SKILL.md +38 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/run.py +99 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/run.py +103 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/SKILL.md +39 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/run.py +103 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/SKILL.md +40 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/run.py +97 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/run.py +106 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/run.py +108 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/run.py +111 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/run.py +104 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/run.py +105 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/SKILL.md +39 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/run.py +108 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/run.py +105 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/SKILL.md +38 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/run.py +108 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/run.py +106 -0
- package/agent-team/tests/__init__.py +0 -0
- package/agent-team/tests/test_core.py +156 -0
- package/dist/agent/agent-session.js +103 -0
- package/dist/agent/agent-session.js.map +1 -0
- package/dist/agent/orchestrator.js +8 -0
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/steer.js +52 -0
- package/dist/agent/steer.js.map +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/node-guard.js +17 -0
- package/dist/cli/node-guard.js.map +1 -0
- package/dist/cli/run.js +2 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/enterprise/policy.js +40 -17
- package/dist/enterprise/policy.js.map +1 -1
- package/dist/tools/agents/agents-bridge.js +144 -0
- package/dist/tools/agents/agents-bridge.js.map +1 -0
- package/dist/tools/desktop/desktop-guard.js +81 -0
- package/dist/tools/desktop/desktop-guard.js.map +1 -0
- package/dist/tools/desktop/desktop.tool.js +201 -0
- package/dist/tools/desktop/desktop.tool.js.map +1 -0
- package/dist/tools/desktop/feihong-win.js +163 -0
- package/dist/tools/desktop/feihong-win.js.map +1 -0
- package/dist/tools/desktop/index.js +37 -0
- package/dist/tools/desktop/index.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/index.js +10 -2
- package/dist/tools/mcp/index.js.map +1 -1
- package/dist/tools/mcp/mcp-client.js +4 -0
- package/dist/tools/mcp/mcp-client.js.map +1 -1
- package/dist/tools/sandbox.js +28 -0
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/web/public/public/css/style.css +1756 -0
- package/dist/web/public/public/favicon.svg +11 -0
- package/dist/web/public/public/index.html +1246 -0
- package/dist/web/public/public/js/api.js +558 -0
- package/dist/web/public/public/js/app.js +2233 -0
- package/dist/web/public/public/js/mock-api.js +259 -0
- package/dist/web/public/public/js/monaco-editor.js +363 -0
- package/dist/web/public/public/js/ui.js +2217 -0
- package/dist/web/public/public/js/utils.js +214 -0
- package/dist/web/public/public/manifest.json +59 -0
- package/dist/web/public/public/robots.txt +14 -0
- package/dist/web/public/public/service-worker.js +149 -0
- package/docs/AI/345/221/230/345/267/245/345/206/233/345/233/242-/346/225/264/345/220/210/350/257/264/346/230/216.md +68 -0
- package/docs/API.md +1 -1
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +3 -3
- package/docs/P1.1-P3-P5/345/267/245/347/250/213/345/256/236/346/226/275/346/200/273/347/273/223.md +328 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-mock/346/250/241/345/274/217.json +125 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-/347/234/237/345/256/236/346/250/241/345/236/213.json +138 -0
- package/docs/P5-pi-compare-real-report.json +138 -0
- package/docs/P5-pi-compare-report.json +125 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code-MVP/351/233/206/346/210/220/344/272/244/344/273/230/347/211/251.md +355 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/345/210/206/346/236/220-/345/274/200/345/217/221/346/226/207/346/241/243.md +291 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/351/207/215/344/274/260-/345/217/257/350/247/206/345/214/226.html +84 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/346/234/200/347/273/210/346/212/245/345/221/212.json +2012 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +74 -0
- package/docs/SWE-bench-Lite-DeepSeek-V4-Flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +102 -0
- package/docs/TECHNICAL-SPECIFICATION.md +66 -0
- package/docs/TECHNICAL-SPECIFICATION.pdf +0 -0
- package/docs/Windows/346/211/213/350/204/232-POC/346/274/224/347/244/272/350/204/232/346/234/254.md +131 -0
- package/docs/Windows/346/211/213/350/204/232/346/216/245/345/205/245/346/214/207/345/215/227.md +181 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.1.md +146 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-guard.js","sourceRoot":"","sources":["../../../src/tools/desktop/desktop-guard.ts"],"names":[],"mappings":";;;AA4DA,sDASC;AAUD,8CAkCC;AAxFY,QAAA,eAAe,GAAoB;IAC9C,MAAM;IACN,OAAO;IACP,aAAa;IACb,MAAM;IACN,QAAQ;IACR,eAAe;IACf,QAAQ;CACT,CAAC;AAEF;;;;GAIG;AACU,QAAA,uBAAuB,GAAa;IAC/C,OAAO;IACP,cAAc;IACd,QAAQ;IACR,iBAAiB;IACjB,QAAQ;IACR,sBAAsB;IACtB,cAAc;IACd,kBAAkB;IAClB,MAAM;IACN,sBAAsB;IACtB,OAAO;IACP,gBAAgB;IAChB,MAAM;IACN,iBAAiB;IACjB,QAAQ;IACR,OAAO;CACR,CAAC;AAEF,oDAAoD;AACpD,SAAgB,qBAAqB,CAAC,KAAc;IAClD,MAAM,IAAI,GAAG,CAAC,GAAG,+BAAuB,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAOD;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,KAAsB,EACtB,iBAA2B,+BAAuB;IAElD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/C,WAAW;IACX,IAAI,CAAC,uBAAe,CAAC,QAAQ,CAAC,MAAuB,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,WAAW,MAAM,IAAI,KAAK,WAAW,uBAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;SAC1E,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,sCAAsC;SAC/C,CAAC;IACJ,CAAC;IAED,aAAa;IACb,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,KAAK,eAAe,GAAG,GAAG,EAAE,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.feihongDesktopTools = exports.feihongDesktopVerifyTool = exports.feihongDesktopActTool = exports.feihongDesktopSeeTool = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
6
|
+
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
7
|
+
*
|
|
8
|
+
* C 层 · feihong-desktop 原生工具(模型可见的强类型入口)
|
|
9
|
+
*
|
|
10
|
+
* 三个工具,对应「看 → 动 → 验」闭环:
|
|
11
|
+
* feihong_desktop_see 只读:桌面状态勘察(焦点/窗口/光标)
|
|
12
|
+
* feihong_desktop_act 写:标准动作序列(guard → focus → act → 取证)
|
|
13
|
+
* feihong_desktop_verify 只读:截图+状态回读,验证动作是否生效
|
|
14
|
+
*
|
|
15
|
+
* 与 MCP 直通工具(desktop_*)的区别:
|
|
16
|
+
* - zod 强类型参数(不再是 z.record 宽松透传)
|
|
17
|
+
* - 内置停手线 + 强制取证(MCP 直通没有)
|
|
18
|
+
* - 语义化动作名(type/click/launch…),模型心智负担更低
|
|
19
|
+
*/
|
|
20
|
+
const zod_1 = require("zod");
|
|
21
|
+
const feihong_win_1 = require("./feihong-win");
|
|
22
|
+
const desktop_guard_1 = require("./desktop-guard");
|
|
23
|
+
/** 从 ToolContext 取 runId(构造取证目录用) */
|
|
24
|
+
function runIdOf(ctx) {
|
|
25
|
+
return typeof ctx.runId === 'string' ? ctx.runId : String(ctx.runId ?? 'session');
|
|
26
|
+
}
|
|
27
|
+
/* ================= feihong_desktop_see(只读勘察) ================= */
|
|
28
|
+
const seeSchema = zod_1.z.object({
|
|
29
|
+
/** 可选:按窗口标题/进程名过滤可见窗口(子串匹配) */
|
|
30
|
+
filter: zod_1.z.string().optional(),
|
|
31
|
+
});
|
|
32
|
+
exports.feihongDesktopSeeTool = {
|
|
33
|
+
name: 'feihong_desktop_see',
|
|
34
|
+
description: '只读勘察当前 Windows 桌面:焦点窗口、可见窗口、光标位置。不改变任何状态。',
|
|
35
|
+
jsonSchema: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
filter: { type: 'string', description: '可选:按窗口标题/进程名过滤(子串匹配)' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
schema: seeSchema,
|
|
42
|
+
async execute(args, ctx) {
|
|
43
|
+
const client = ctx._desktopClient;
|
|
44
|
+
if (!client) {
|
|
45
|
+
return { ok: false, output: '', error: 'feihong-desktop 未挂载(当前会话无 desktop MCP)' };
|
|
46
|
+
}
|
|
47
|
+
const { filter } = seeSchema.parse(args);
|
|
48
|
+
try {
|
|
49
|
+
const state = await client.callTool('desktop_state', {});
|
|
50
|
+
if (!state.ok)
|
|
51
|
+
return { ok: false, output: '', error: `desktop_state 失败: ${state.error ?? state.output}` };
|
|
52
|
+
let out = state.output;
|
|
53
|
+
if (filter) {
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(state.output);
|
|
56
|
+
const hits = (parsed.visibleWindows ?? []).filter((w) => (w.title ?? '').toLowerCase().includes(filter.toLowerCase()) ||
|
|
57
|
+
(w.processName ?? '').toLowerCase().includes(filter.toLowerCase()));
|
|
58
|
+
out = JSON.stringify({ ...parsed, visibleWindows: hits, filteredBy: filter });
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// 服务器返回非 JSON 时不强行解析,原样返回
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { ok: true, output: out };
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
return { ok: false, output: '', error: e instanceof Error ? e.message : String(e) };
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
/* ================= feihong_desktop_act(写 · 标准动作序列) ================= */
|
|
72
|
+
const actSchema = zod_1.z.object({
|
|
73
|
+
/** 目标窗口标题(type/click/mouse_click/drag/scroll/terminal_send 必填;launch 豁免) */
|
|
74
|
+
windowTitle: zod_1.z.string().optional(),
|
|
75
|
+
/** 动作类型 */
|
|
76
|
+
action: zod_1.z.enum(desktop_guard_1.ALLOWED_ACTIONS),
|
|
77
|
+
/** type/terminal_send 的文本内容 */
|
|
78
|
+
text: zod_1.z.string().optional(),
|
|
79
|
+
/** click 的 UIA 元素名/automationId */
|
|
80
|
+
element: zod_1.z.string().optional(),
|
|
81
|
+
/** mouse_click / drag 起点坐标 */
|
|
82
|
+
x: zod_1.z.number().optional(),
|
|
83
|
+
y: zod_1.z.number().optional(),
|
|
84
|
+
/** drag 终点坐标 */
|
|
85
|
+
endX: zod_1.z.number().optional(),
|
|
86
|
+
endY: zod_1.z.number().optional(),
|
|
87
|
+
/** scroll 增量 */
|
|
88
|
+
deltaX: zod_1.z.number().optional(),
|
|
89
|
+
deltaY: zod_1.z.number().optional(),
|
|
90
|
+
/** launch 的应用命令 */
|
|
91
|
+
command: zod_1.z.string().optional(),
|
|
92
|
+
/** launch 等待窗口出现毫秒数(默认 5000) */
|
|
93
|
+
waitMs: zod_1.z.number().optional(),
|
|
94
|
+
});
|
|
95
|
+
exports.feihongDesktopActTool = {
|
|
96
|
+
name: 'feihong_desktop_act',
|
|
97
|
+
description: '对 Windows 桌面执行动作(需审批):type 键盘输入 / click UIA 点击 / mouse_click 坐标点击 / drag 拖拽 / scroll 滚动 / terminal_send 终端命令 / launch 启动应用。自动执行:停手线检查 → 聚焦目标窗口 → 动作 → 截图取证。',
|
|
98
|
+
jsonSchema: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {
|
|
101
|
+
windowTitle: { type: 'string', description: '目标窗口标题(写操作必填)' },
|
|
102
|
+
action: { type: 'string', enum: desktop_guard_1.ALLOWED_ACTIONS, description: '动作类型' },
|
|
103
|
+
text: { type: 'string', description: 'type/terminal_send 的文本' },
|
|
104
|
+
element: { type: 'string', description: 'click 的 UIA 元素名' },
|
|
105
|
+
x: { type: 'number', description: 'mouse_click/drag 起点 x' },
|
|
106
|
+
y: { type: 'number', description: 'mouse_click/drag 起点 y' },
|
|
107
|
+
endX: { type: 'number', description: 'drag 终点 x' },
|
|
108
|
+
endY: { type: 'number', description: 'drag 终点 y' },
|
|
109
|
+
deltaX: { type: 'number', description: 'scroll 水平增量' },
|
|
110
|
+
deltaY: { type: 'number', description: 'scroll 垂直增量(负=向上)' },
|
|
111
|
+
command: { type: 'string', description: 'launch 的应用命令' },
|
|
112
|
+
waitMs: { type: 'number', description: 'launch 等待毫秒数' },
|
|
113
|
+
},
|
|
114
|
+
required: ['action'],
|
|
115
|
+
},
|
|
116
|
+
schema: actSchema,
|
|
117
|
+
async execute(args, ctx) {
|
|
118
|
+
const client = ctx._desktopClient;
|
|
119
|
+
if (!client) {
|
|
120
|
+
return { ok: false, output: '', error: 'feihong-desktop 未挂载(当前会话无 desktop MCP)' };
|
|
121
|
+
}
|
|
122
|
+
const p = actSchema.parse(args);
|
|
123
|
+
const forensics = new feihong_win_1.ForensicsLogger((0, feihong_win_1.resolveForensicsDir)(runIdOf(ctx)), client);
|
|
124
|
+
const r = await (0, feihong_win_1.feihongDesktopAct)(client, forensics, p);
|
|
125
|
+
if (!r.ok) {
|
|
126
|
+
return { ok: false, output: '', error: r.error, ...(r.forensicsPath ? { output: `取证: ${r.forensicsPath}` } : {}) };
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
ok: true,
|
|
130
|
+
output: `${r.output}\n[取证] ${r.forensicsPath ?? ''}\n[提示] 若需确认效果,调用 feihong_desktop_verify`,
|
|
131
|
+
};
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
/* ================= feihong_desktop_verify(只读回读验证) ================= */
|
|
135
|
+
const verifySchema = zod_1.z.object({
|
|
136
|
+
/** 期望出现的文本(在截图 OCR / 状态输出中匹配,子串) */
|
|
137
|
+
expectText: zod_1.z.string().optional(),
|
|
138
|
+
/** 期望处于焦点的窗口标题(子串) */
|
|
139
|
+
expectWindow: zod_1.z.string().optional(),
|
|
140
|
+
});
|
|
141
|
+
exports.feihongDesktopVerifyTool = {
|
|
142
|
+
name: 'feihong_desktop_verify',
|
|
143
|
+
description: '只读回读验证:截图 + 桌面状态,检查动作是否生效(期望文本是否出现/期望窗口是否聚焦)。',
|
|
144
|
+
jsonSchema: {
|
|
145
|
+
type: 'object',
|
|
146
|
+
properties: {
|
|
147
|
+
expectText: { type: 'string', description: '期望出现的文本(子串匹配)' },
|
|
148
|
+
expectWindow: { type: 'string', description: '期望聚焦的窗口标题(子串)' },
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
schema: verifySchema,
|
|
152
|
+
async execute(args, ctx) {
|
|
153
|
+
const client = ctx._desktopClient;
|
|
154
|
+
if (!client) {
|
|
155
|
+
return { ok: false, output: '', error: 'feihong-desktop 未挂载(当前会话无 desktop MCP)' };
|
|
156
|
+
}
|
|
157
|
+
const { expectText, expectWindow } = verifySchema.parse(args);
|
|
158
|
+
try {
|
|
159
|
+
const [shot, state] = await Promise.all([
|
|
160
|
+
client.callTool('screenshot', {}),
|
|
161
|
+
client.callTool('desktop_state', {}),
|
|
162
|
+
]);
|
|
163
|
+
const checks = [];
|
|
164
|
+
let passed = true;
|
|
165
|
+
if (expectWindow) {
|
|
166
|
+
try {
|
|
167
|
+
const st = JSON.parse(state.output);
|
|
168
|
+
const focused = st.focusedWindow?.title ?? '';
|
|
169
|
+
const hit = focused.toLowerCase().includes(expectWindow.toLowerCase());
|
|
170
|
+
checks.push(`窗口焦点: ${hit ? '命中' : '未命中'}(当前焦点: ${focused || '(无)'})`);
|
|
171
|
+
if (!hit)
|
|
172
|
+
passed = false;
|
|
173
|
+
}
|
|
174
|
+
catch { /* 解析失败跳过该项 */ }
|
|
175
|
+
}
|
|
176
|
+
if (expectText) {
|
|
177
|
+
const ocrText = (shot.output ?? '') + (state.output ?? '');
|
|
178
|
+
const hit = ocrText.includes(expectText);
|
|
179
|
+
checks.push(`文本匹配: ${hit ? '命中' : '未命中'}(在截图/状态输出中检索 "${expectText}")`);
|
|
180
|
+
if (!hit)
|
|
181
|
+
passed = false;
|
|
182
|
+
}
|
|
183
|
+
if (checks.length === 0) {
|
|
184
|
+
checks.push('未提供期望条件,仅返回截图与状态(请用 expectText/expectWindow 做断言)');
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
ok: true,
|
|
188
|
+
output: `验证${passed ? '通过' : '未通过'}:\n- ${checks.join('\n- ')}\n--- 状态 ---\n${state.output.slice(0, 400)}\n--- 截图返回 ---\n${shot.output.slice(0, 200)}`,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
return { ok: false, output: '', error: e instanceof Error ? e.message : String(e) };
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
exports.feihongDesktopTools = [
|
|
197
|
+
exports.feihongDesktopSeeTool,
|
|
198
|
+
exports.feihongDesktopActTool,
|
|
199
|
+
exports.feihongDesktopVerifyTool,
|
|
200
|
+
];
|
|
201
|
+
//# sourceMappingURL=desktop.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop.tool.js","sourceRoot":"","sources":["../../../src/tools/desktop/desktop.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForensicsLogger = void 0;
|
|
4
|
+
exports.resolveForensicsDir = resolveForensicsDir;
|
|
5
|
+
exports.feihongDesktopAct = feihongDesktopAct;
|
|
6
|
+
exports.forensicsDirExists = forensicsDirExists;
|
|
7
|
+
exports.touchFile = touchFile;
|
|
8
|
+
/**
|
|
9
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
10
|
+
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
11
|
+
*
|
|
12
|
+
* C 层 · feihong-win 内化核心(Windows 手脚标准动作序列)
|
|
13
|
+
*
|
|
14
|
+
* 把 desktop-touch-mcp 的零散 MCP 调用固化成一条纪律化流水线:
|
|
15
|
+
* probe(可选)→ guard(停手线)→ focus(验证目标窗口)→ act(执行动作)
|
|
16
|
+
* → verify(截图回读)→ forensics(取证落盘)
|
|
17
|
+
*
|
|
18
|
+
* 设计要点:
|
|
19
|
+
* - 复用主流程 attachMcpTools 创建的 McpClient(不重复 spawn 进程)
|
|
20
|
+
* - 取证目录:FH_HOME/forensics/<runId>/manifest.jsonl + shots/,与审计链同源
|
|
21
|
+
* - 每次写操作后强制截图取证,保证「操作留痕、可复盘、可甩锅」
|
|
22
|
+
*/
|
|
23
|
+
const fs_1 = require("fs");
|
|
24
|
+
const path_1 = require("path");
|
|
25
|
+
const os_1 = require("os");
|
|
26
|
+
const desktop_guard_1 = require("./desktop-guard");
|
|
27
|
+
/** 取证目录解析:FH_FORENSICS_DIR 覆盖,缺省 FH_HOME/forensics */
|
|
28
|
+
function resolveForensicsDir(runId) {
|
|
29
|
+
const base = process.env.FH_FORENSICS_DIR || (0, path_1.join)((0, os_1.homedir)(), '.feihong-code', 'forensics');
|
|
30
|
+
const dir = (0, path_1.join)(base, runId.replace(/[^a-zA-Z0-9_-]/g, '_'));
|
|
31
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
32
|
+
(0, fs_1.mkdirSync)((0, path_1.join)(dir, 'shots'), { recursive: true });
|
|
33
|
+
return dir;
|
|
34
|
+
}
|
|
35
|
+
/** 取证记录器:JSONL manifest + 截图目录 */
|
|
36
|
+
class ForensicsLogger {
|
|
37
|
+
dir;
|
|
38
|
+
client;
|
|
39
|
+
constructor(dir, client) {
|
|
40
|
+
this.dir = dir;
|
|
41
|
+
this.client = client;
|
|
42
|
+
}
|
|
43
|
+
/** 追加一条动作记录(工具/入参摘要/结果摘要/时间) */
|
|
44
|
+
record(entry) {
|
|
45
|
+
try {
|
|
46
|
+
(0, fs_1.appendFileSync)((0, path_1.join)(this.dir, 'manifest.jsonl'), JSON.stringify({ ts: new Date().toISOString(), ...entry }) + '\n', 'utf8');
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// 取证写入失败不阻断主流程,但把错误带进返回(调用方可见)
|
|
50
|
+
// eslint-disable-next-line no-console
|
|
51
|
+
console.warn('[forensics] manifest 写入失败:', e instanceof Error ? e.message : String(e));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** 执行后强制截图取证:截图返回全文记入 manifest;desktop-touch 磁盘缓存保留原图 */
|
|
55
|
+
async snapshot(note) {
|
|
56
|
+
const res = await this.client.callTool('screenshot', {});
|
|
57
|
+
this.record({ event: 'snapshot', note, screenshotOutput: res.output?.slice(0, 500) || '' });
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
get manifestPath() {
|
|
61
|
+
return (0, path_1.join)(this.dir, 'manifest.jsonl');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.ForensicsLogger = ForensicsLogger;
|
|
65
|
+
/** 动作 → desktop-touch MCP 工具调用映射(入参对齐已实测的工具 schema) */
|
|
66
|
+
function mapAction(p) {
|
|
67
|
+
switch (p.action) {
|
|
68
|
+
// type 用 '@active':feihong 层已 focus 目标窗口(停手线校验过标题),
|
|
69
|
+
// keyboard 直接瞄准当前前台窗口,规避「标题中英文差异导致 AutoGuard 拦截」。
|
|
70
|
+
case 'type':
|
|
71
|
+
return { tool: 'keyboard', args: { action: 'type', text: p.text ?? '', windowTitle: '@active' } };
|
|
72
|
+
case 'click':
|
|
73
|
+
return { tool: 'click_element', args: { name: p.element ?? '', windowTitle: p.windowTitle } };
|
|
74
|
+
case 'mouse_click':
|
|
75
|
+
return { tool: 'mouse_click', args: { x: p.x ?? 0, y: p.y ?? 0, windowTitle: p.windowTitle } };
|
|
76
|
+
case 'drag':
|
|
77
|
+
return {
|
|
78
|
+
tool: 'mouse_drag',
|
|
79
|
+
args: { startX: p.x ?? 0, startY: p.y ?? 0, endX: p.endX ?? 0, endY: p.endY ?? 0, windowTitle: p.windowTitle },
|
|
80
|
+
};
|
|
81
|
+
case 'scroll':
|
|
82
|
+
return { tool: 'scroll', args: { deltaX: p.deltaX ?? 0, deltaY: p.deltaY ?? -100, windowTitle: p.windowTitle } };
|
|
83
|
+
case 'terminal_send':
|
|
84
|
+
return { tool: 'terminal', args: { action: 'send', text: p.text ?? '', windowTitle: p.windowTitle } };
|
|
85
|
+
case 'launch':
|
|
86
|
+
return { tool: 'workspace_launch', args: { command: p.command ?? '', waitMs: p.waitMs ?? 5000 } };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* MCP 结果语义判定:desktop-touch 的感知守卫/错误码会以"正常返回"携带错误文本,
|
|
91
|
+
* 仅看 MCP 层 ok 会漏判。命中错误码 → 视为失败,并保留原始输出供模型复盘。
|
|
92
|
+
*/
|
|
93
|
+
const DESKTOP_ERROR_CODES = [
|
|
94
|
+
'AutoGuardBlocked',
|
|
95
|
+
'GuardFailed',
|
|
96
|
+
'DestinationRequired',
|
|
97
|
+
'ElementDisabled',
|
|
98
|
+
'InvokePatternNotSupported',
|
|
99
|
+
'WindowNotFound',
|
|
100
|
+
'FocusFailed',
|
|
101
|
+
];
|
|
102
|
+
function isDesktopError(output) {
|
|
103
|
+
for (const code of DESKTOP_ERROR_CODES) {
|
|
104
|
+
if (output.includes(code))
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 标准动作序列:guard → focus(launch 豁免)→ act → 取证截图
|
|
111
|
+
* 返回结构化结果:动作输出 + 取证 manifest 路径 + 截图回读
|
|
112
|
+
*/
|
|
113
|
+
async function feihongDesktopAct(client, forensics, params) {
|
|
114
|
+
// 1) 停手线(硬编码,任何角色不可绕过)
|
|
115
|
+
const guard = (0, desktop_guard_1.checkDesktopGuard)({ windowTitle: params.windowTitle, action: params.action });
|
|
116
|
+
if (guard.blocked) {
|
|
117
|
+
forensics.record({ event: 'act_blocked', action: params.action, windowTitle: params.windowTitle, reason: guard.reason });
|
|
118
|
+
return { ok: false, output: '', error: guard.reason, forensicsPath: forensics.manifestPath };
|
|
119
|
+
}
|
|
120
|
+
// 2) 聚焦目标窗口(launch 无既有窗口,豁免)
|
|
121
|
+
if (params.action !== 'launch' && params.windowTitle) {
|
|
122
|
+
const f = await client.callTool('focus_window', { title: params.windowTitle });
|
|
123
|
+
if (!f.ok) {
|
|
124
|
+
forensics.record({ event: 'focus_failed', windowTitle: params.windowTitle, error: f.error });
|
|
125
|
+
return { ok: false, output: '', error: `聚焦窗口失败: ${f.error ?? f.output}`, forensicsPath: forensics.manifestPath };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 3) 执行动作
|
|
129
|
+
const { tool, args } = mapAction(params);
|
|
130
|
+
const res = await client.callTool(tool, args);
|
|
131
|
+
// 3.5) 结果语义判定:MCP 层 ok 但输出携带感知守卫错误码 → 视为失败
|
|
132
|
+
const semanticallyFailed = res.ok && isDesktopError(res.output ?? '');
|
|
133
|
+
// 4) 取证截图(无论成败都截图——失败现场同样可复盘)
|
|
134
|
+
const shot = await forensics.snapshot(`${params.action}@${params.windowTitle ?? params.command ?? ''}`);
|
|
135
|
+
forensics.record({
|
|
136
|
+
event: 'act',
|
|
137
|
+
action: params.action,
|
|
138
|
+
windowTitle: params.windowTitle,
|
|
139
|
+
command: params.command,
|
|
140
|
+
tool,
|
|
141
|
+
args: JSON.stringify(args).slice(0, 300),
|
|
142
|
+
resultOk: res.ok,
|
|
143
|
+
result: res.output?.slice(0, 300) || res.error || '',
|
|
144
|
+
shotOk: shot.ok,
|
|
145
|
+
});
|
|
146
|
+
if (!res.ok || semanticallyFailed) {
|
|
147
|
+
const errText = res.error ?? res.output ?? '';
|
|
148
|
+
const hint = semanticallyFailed
|
|
149
|
+
? '(desktop-touch 感知守卫拦截,请根据输出中的 suggest 调整后重试)'
|
|
150
|
+
: '';
|
|
151
|
+
return { ok: false, output: '', error: `${errText.slice(0, 400)}${hint}`, forensicsPath: forensics.manifestPath };
|
|
152
|
+
}
|
|
153
|
+
return { ok: true, output: res.output, forensicsPath: forensics.manifestPath };
|
|
154
|
+
}
|
|
155
|
+
/** 目录是否已存在(测试辅助) */
|
|
156
|
+
function forensicsDirExists(dir) {
|
|
157
|
+
return (0, fs_1.existsSync)((0, path_1.join)(dir, 'manifest.jsonl')) || (0, fs_1.existsSync)(dir);
|
|
158
|
+
}
|
|
159
|
+
/** 写一个空占位文件(测试辅助,正常流程由 resolveForensicsDir 创建) */
|
|
160
|
+
function touchFile(p) {
|
|
161
|
+
(0, fs_1.writeFileSync)(p, '', 'utf8');
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=feihong-win.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feihong-win.js","sourceRoot":"","sources":["../../../src/tools/desktop/feihong-win.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachDesktopTools = attachDesktopTools;
|
|
4
|
+
const desktop_tool_1 = require("./desktop.tool");
|
|
5
|
+
const logger_1 = require("../../shared/logger");
|
|
6
|
+
const DESKTOP_SERVER = 'desktop';
|
|
7
|
+
/**
|
|
8
|
+
* 找到已连接的 desktop MCP client 并注册 feihong 原生工具。
|
|
9
|
+
* 未连接(未配置/attach 失败)时静默跳过——不影响主流程。
|
|
10
|
+
* 返回是否成功挂载。
|
|
11
|
+
*/
|
|
12
|
+
function attachDesktopTools(registry, clients) {
|
|
13
|
+
const client = clients.find((c) => c.serverName === DESKTOP_SERVER);
|
|
14
|
+
if (!client) {
|
|
15
|
+
logger_1.logger.info('feihong-desktop 未挂载(未找到 desktop MCP client)');
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const desktopClient = {
|
|
19
|
+
callTool: (name, args) => client.callTool(name, args),
|
|
20
|
+
};
|
|
21
|
+
for (const t of desktop_tool_1.feihongDesktopTools) {
|
|
22
|
+
registry.register(withClient(t, desktopClient));
|
|
23
|
+
}
|
|
24
|
+
logger_1.logger.info('feihong-desktop 已挂载', { tools: desktop_tool_1.feihongDesktopTools.map((t) => t.name).join(',') });
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/** 包装:把 desktopClient 注入 execute 的 ctx */
|
|
28
|
+
function withClient(tool, client) {
|
|
29
|
+
const base = { ...tool };
|
|
30
|
+
return {
|
|
31
|
+
...base,
|
|
32
|
+
async execute(args, ctx) {
|
|
33
|
+
return tool.execute(args, { ...ctx, _desktopClient: client });
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/desktop/index.ts"],"names":[],"mappings":";;AAoBA,gDAiBC;AA3BD,iDAAqD;AACrD,gDAA6C;AAE7C,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,QAAqC,EACrC,OAAoB;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,CAAC,IAAY,EAAE,IAA6B,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;KACvF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,kCAAmB,EAAE,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,eAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,kCAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0CAA0C;AAC1C,SAAS,UAAU,CAAC,IAAU,EAAE,MAAmF;IACjH,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACzB,OAAO;QACL,GAAG,IAAI;QACP,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,cAAc,EAAE,MAAM,EAAW,CAAC,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -34,6 +34,7 @@ const build_check_tool_1 = require("./verify/build-check.tool");
|
|
|
34
34
|
const load_skill_tool_1 = require("./skills/load-skill.tool");
|
|
35
35
|
const web_tool_1 = require("./web/web.tool");
|
|
36
36
|
const browser_tool_1 = require("./browser/browser.tool");
|
|
37
|
+
const agents_bridge_1 = require("./agents/agents-bridge");
|
|
37
38
|
function createDefaultRegistry() {
|
|
38
39
|
const reg = new tool_registry_1.ToolRegistry();
|
|
39
40
|
for (const t of [
|
|
@@ -49,6 +50,7 @@ function createDefaultRegistry() {
|
|
|
49
50
|
web_tool_1.webFetchTool,
|
|
50
51
|
web_tool_1.webSearchTool,
|
|
51
52
|
...browser_tool_1.browserTools,
|
|
53
|
+
...agents_bridge_1.agentsTools,
|
|
52
54
|
]) {
|
|
53
55
|
reg.register(t);
|
|
54
56
|
}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAoBA,sDAoBC;AAxCD;;;;;GAKG;AACH,mDAA+C;AAC/C,gDAAgD;AAChD,kDAAkD;AAClD,gDAAgD;AAChD,gDAA+C;AAC/C,kDAA8C;AAC9C,2DAAsD;AACtD,0DAAsD;AACtD,gEAA2D;AAC3D,8DAAyD;AACzD,6CAA6D;AAC7D,yDAAsD;AACtD,0DAAqD;AAErD,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAI,4BAAY,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI;QACd,wBAAY;QACZ,0BAAa;QACb,wBAAY;QACZ,uBAAW;QACX,oBAAQ;QACR,6BAAY;QACZ,4BAAY;QACZ,iCAAc;QACd,+BAAa;QACb,uBAAY;QACZ,wBAAa;QACb,GAAG,2BAAY;QACf,GAAG,2BAAW;KACf,EAAE,CAAC;QACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAiC"}
|
package/dist/tools/mcp/index.js
CHANGED
|
@@ -62,11 +62,19 @@ async function attachMcpTools(registry, servers) {
|
|
|
62
62
|
try {
|
|
63
63
|
const client = await (0, mcp_client_1.connectMcp)(cfg);
|
|
64
64
|
const tools = await client.listTools();
|
|
65
|
-
|
|
65
|
+
// tools 白名单:按原始工具名过滤(desktop 配置 11 个原始名),未命中工具不注册
|
|
66
|
+
const filtered = cfg.tools && cfg.tools.length > 0
|
|
67
|
+
? tools.filter((t) => cfg.tools.includes(t.name))
|
|
68
|
+
: tools;
|
|
69
|
+
for (const t of filtered) {
|
|
66
70
|
registry.register(wrapMcpTool(cfg.name, t, client));
|
|
67
71
|
}
|
|
68
72
|
clients.push(client);
|
|
69
|
-
logger_1.logger.info('MCP server attached', {
|
|
73
|
+
logger_1.logger.info('MCP server attached', {
|
|
74
|
+
name: cfg.name,
|
|
75
|
+
tools: filtered.length,
|
|
76
|
+
filtered: tools.length - filtered.length,
|
|
77
|
+
});
|
|
70
78
|
}
|
|
71
79
|
catch (e) {
|
|
72
80
|
logger_1.logger.warn('MCP server attach failed(跳过,不影响主流程)', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/mcp/index.ts"],"names":[],"mappings":";;AAeA,0CAYC;AA0BD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/tools/mcp/mcp-client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../src/tools/mcp/mcp-client.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/sandbox.js
CHANGED
|
@@ -18,6 +18,31 @@ function normalizeSandboxMode(raw) {
|
|
|
18
18
|
}
|
|
19
19
|
/** 写类工具:read-only 模式下禁止 */
|
|
20
20
|
const WRITE_TOOLS = new Set(['write_file', 'edit_file']);
|
|
21
|
+
/** desktop-touch 写工具 + feihong 原生桌面写工具 + AI 员工军团提交(read-only 一律拦截) */
|
|
22
|
+
const DESKTOP_WRITE_TOOLS = new Set([
|
|
23
|
+
'desktop_launch',
|
|
24
|
+
'desktop_focus',
|
|
25
|
+
'desktop_click',
|
|
26
|
+
'desktop_type',
|
|
27
|
+
'desktop_keyboard',
|
|
28
|
+
'desktop_shell',
|
|
29
|
+
'desktop_terminal',
|
|
30
|
+
'desktop_terminal_send',
|
|
31
|
+
'desktop_workspace_launch',
|
|
32
|
+
'desktop_click_element',
|
|
33
|
+
'desktop_drag',
|
|
34
|
+
'desktop_scroll',
|
|
35
|
+
'desktop_double_click',
|
|
36
|
+
'desktop_right_click',
|
|
37
|
+
'desktop_select',
|
|
38
|
+
'desktop_hover',
|
|
39
|
+
'desktop_hotkey',
|
|
40
|
+
'desktop_open_url',
|
|
41
|
+
'desktop_close_window',
|
|
42
|
+
'desktop_desktop_act',
|
|
43
|
+
'feihong_desktop_act',
|
|
44
|
+
'feihong_agents_submit',
|
|
45
|
+
]);
|
|
21
46
|
/** 提取命令中出现的 http(s) 目标主机名(简单解析,不做 DNS 解析) */
|
|
22
47
|
function extractNetworkHosts(cmd) {
|
|
23
48
|
const hosts = new Set();
|
|
@@ -81,6 +106,9 @@ function checkSandbox(mode, tool, args, rules) {
|
|
|
81
106
|
if (WRITE_TOOLS.has(tool)) {
|
|
82
107
|
return { blocked: true, reason: 'read-only 模式禁止写文件(仅允许 read/list/grep)' };
|
|
83
108
|
}
|
|
109
|
+
if (DESKTOP_WRITE_TOOLS.has(tool)) {
|
|
110
|
+
return { blocked: true, reason: 'read-only 模式禁止桌面写操作与 AI 员工任务提交' };
|
|
111
|
+
}
|
|
84
112
|
if (tool === 'run_shell') {
|
|
85
113
|
return { blocked: true, reason: 'read-only 模式禁止执行 shell 命令' };
|
|
86
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":";;AA+BA,oDAMC;
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":"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"}
|