feihong-code 7.6.0 → 8.0.1

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.
Files changed (146) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -22
  2. package/.github/ISSUE_TEMPLATE/config.yml +10 -13
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +38 -13
  4. package/.github/PULL_REQUEST_TEMPLATE.md +65 -30
  5. package/.github/workflows/ci.yml +2 -2
  6. package/.github/workflows/release.yml +5 -5
  7. package/.github/workflows/swebench-real.yml +2 -2
  8. package/CONTRIBUTING.md +52 -3
  9. package/README.md +656 -636
  10. package/agent-team/.env.example +13 -0
  11. package/agent-team/README.md +42 -0
  12. package/agent-team/agents/__init__.py +0 -0
  13. package/agent-team/agents/l1_acquisition.py +207 -0
  14. package/agent-team/agents/l2_content.py +237 -0
  15. package/agent-team/agents/l3_conversion.py +148 -0
  16. package/agent-team/agents/l4_analysis.py +118 -0
  17. package/agent-team/agents/l5_management.py +52 -0
  18. package/agent-team/agents/registry.py +60 -0
  19. package/agent-team/config.py +39 -0
  20. package/agent-team/core/__init__.py +0 -0
  21. package/agent-team/core/agent.py +73 -0
  22. package/agent-team/core/models.py +347 -0
  23. package/agent-team/core/scheduler.py +150 -0
  24. package/agent-team/core/task.py +121 -0
  25. package/agent-team/feihongzhi.db +0 -0
  26. package/agent-team/llm/__init__.py +12 -0
  27. package/agent-team/llm/base.py +22 -0
  28. package/agent-team/llm/doubao_llm.py +52 -0
  29. package/agent-team/llm/mock_llm.py +42 -0
  30. package/agent-team/main.py +235 -0
  31. package/agent-team/requirements.txt +2 -0
  32. package/agent-team/skill_packager.py +248 -0
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. package/agent-team/tests/__init__.py +0 -0
  68. package/agent-team/tests/test_core.py +156 -0
  69. package/dist/agent/agent-session.js +103 -0
  70. package/dist/agent/agent-session.js.map +1 -0
  71. package/dist/agent/orchestrator.js +8 -0
  72. package/dist/agent/orchestrator.js.map +1 -1
  73. package/dist/agent/steer.js +52 -0
  74. package/dist/agent/steer.js.map +1 -0
  75. package/dist/cli/run.js +2 -0
  76. package/dist/cli/run.js.map +1 -1
  77. package/dist/cli/version.js +1 -1
  78. package/dist/enterprise/policy.js +40 -17
  79. package/dist/enterprise/policy.js.map +1 -1
  80. package/dist/memory/honcho-store.js +231 -0
  81. package/dist/memory/honcho-store.js.map +1 -0
  82. package/dist/shared/log-rotator.js +238 -0
  83. package/dist/shared/log-rotator.js.map +1 -0
  84. package/dist/shared/sqlite-store.js +512 -0
  85. package/dist/shared/sqlite-store.js.map +1 -0
  86. package/dist/tools/agents/agents-bridge.js +144 -0
  87. package/dist/tools/agents/agents-bridge.js.map +1 -0
  88. package/dist/tools/desktop/desktop-guard.js +81 -0
  89. package/dist/tools/desktop/desktop-guard.js.map +1 -0
  90. package/dist/tools/desktop/desktop.tool.js +201 -0
  91. package/dist/tools/desktop/desktop.tool.js.map +1 -0
  92. package/dist/tools/desktop/feihong-win.js +163 -0
  93. package/dist/tools/desktop/feihong-win.js.map +1 -0
  94. package/dist/tools/desktop/index.js +37 -0
  95. package/dist/tools/desktop/index.js.map +1 -0
  96. package/dist/tools/docker-sandbox.js +212 -0
  97. package/dist/tools/docker-sandbox.js.map +1 -0
  98. package/dist/tools/index.js +2 -0
  99. package/dist/tools/index.js.map +1 -1
  100. package/dist/tools/mcp/index.js +10 -2
  101. package/dist/tools/mcp/index.js.map +1 -1
  102. package/dist/tools/mcp/mcp-client.js +4 -0
  103. package/dist/tools/mcp/mcp-client.js.map +1 -1
  104. package/dist/tools/sandbox.js +28 -0
  105. package/dist/tools/sandbox.js.map +1 -1
  106. package/dist/web/public/favicon.svg +11 -0
  107. package/dist/web/public/index.html +4 -1
  108. package/dist/web/public/public/css/style.css +1756 -0
  109. package/dist/web/public/public/favicon.svg +11 -0
  110. package/dist/web/public/public/index.html +1246 -0
  111. package/dist/web/public/public/js/api.js +558 -0
  112. package/dist/web/public/public/js/app.js +2233 -0
  113. package/dist/web/public/public/js/mock-api.js +259 -0
  114. package/dist/web/public/public/js/monaco-editor.js +363 -0
  115. package/dist/web/public/public/js/ui.js +2217 -0
  116. package/dist/web/public/public/js/utils.js +214 -0
  117. package/dist/web/public/public/manifest.json +59 -0
  118. package/dist/web/public/public/robots.txt +14 -0
  119. package/dist/web/public/public/service-worker.js +149 -0
  120. package/dist/web/public/robots.txt +14 -0
  121. package/dist/web/server.js +70 -0
  122. package/dist/web/server.js.map +1 -1
  123. 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
  124. package/docs/API.md +827 -0
  125. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +3 -3
  126. 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
  127. 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
  128. 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
  129. package/docs/P5-pi-compare-real-report.json +138 -0
  130. package/docs/P5-pi-compare-report.json +125 -0
  131. package/docs/PROJECT-ANALYSIS-AND-TEST.md +721 -0
  132. 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
  133. 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
  134. 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
  135. package/docs/SWE-bench-300-agnes-2.5-flash-/346/234/200/347/273/210/346/212/245/345/221/212.json +2012 -0
  136. package/docs/SWE-bench-300-agnes-2.5-flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +74 -0
  137. package/docs/SWE-bench-Lite-DeepSeek-V4-Flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +102 -0
  138. package/docs/TECHNICAL-SPECIFICATION.md +812 -0
  139. package/docs/TECHNICAL-SPECIFICATION.pdf +0 -0
  140. package/docs/UPGRADE-v7.9.0.md +291 -0
  141. package/docs/UPGRADE-v8.0.0.md +237 -0
  142. 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
  143. package/docs/Windows/346/211/213/350/204/232/346/216/245/345/205/245/346/214/207/345/215/227.md +181 -0
  144. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.0.md +922 -0
  145. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.1.md +146 -0
  146. package/package.json +7 -6
@@ -0,0 +1,181 @@
1
+ # Windows 手脚接入指南(feihong-desktop)
2
+
3
+ > 版本:v8.0.0+(C 层内化)| 更新:2026-09-08 | 晋江市飞虹智科技企业管理有限公司
4
+ >
5
+ > 本文档说明如何把 **desktop-touch-mcp**(Windows 桌面自动化引擎)嫁接为飞虹 Code 的「手脚」,
6
+ > 以及三层嫁接(A 配置接入 / B 策略约束 / C 内化封装)的配置与运维口径。
7
+
8
+ ---
9
+
10
+ ## 1. 架构总览
11
+
12
+ ```
13
+ desktop-touch-mcp(32 工具 · Rust UIA 引擎 · 自带感知守卫)
14
+ │ A 配置接入(mcpServers 注册)
15
+
16
+ 飞虹 MCP 客户端(src/tools/mcp/mcp-client.ts,纯 Node 零依赖)
17
+ │ 工具自动注册为 desktop_*(白名单 11 个核心工具)
18
+
19
+ 飞虹 ToolRegistry(zod 校验 → 沙箱 → hook → M4 守卫 → 审计)
20
+ │ B 策略约束(policy.ts 角色矩阵 + sandbox.ts 沙箱规则)
21
+
22
+ feihong-desktop 内化层(src/tools/desktop/)
23
+ │ C 内化封装:停手线 + 标准动作序列 + 取证
24
+
25
+ feihong_desktop_see / feihong_desktop_act / feihong_desktop_verify
26
+ │ 模型可见的强类型工具(看 → 动 → 验 闭环)
27
+
28
+ Windows 原生 app(ERP / Excel / 桌面软件 / 记事本…)
29
+ ```
30
+
31
+ - **A 层**解决「能不能用」(改配置,零代码)
32
+ - **B 层**解决「谁能用、要不要审批」(策略 + 沙箱)
33
+ - **C 层**解决「用得安全、用得留痕」(停手线 + 取证)
34
+
35
+ ---
36
+
37
+ ## 2. 安装与配置(A 层)
38
+
39
+ ### 2.1 安装 desktop-touch-mcp 运行时(离线/在线)
40
+
41
+ ```powershell
42
+ # 在线(npm registry 可用时)
43
+ npm install -g @harusame64/desktop-touch-mcp
44
+
45
+ # 离线(GitHub 不可达时,用镜像下载 ZIP 并校验)
46
+ # 参考:%USERPROFILE%\.desktop-touch-mcp\releases\v1.16.0\(已校验 SHA256)
47
+ ```
48
+
49
+ 关键环境变量:
50
+
51
+ | 变量 | 说明 |
52
+ | --- | --- |
53
+ | `DESKTOP_TOUCH_MCP_OFFLINE_FALLBACK=1` | 离线启动开关(不联网检查更新) |
54
+ | `DESKTOP_TOUCH_MCP_FETCH_TIMEOUT_MS=8000` | 启动拉取超时 |
55
+
56
+ ### 2.2 飞虹配置(fhcode.config.json)
57
+
58
+ ```json
59
+ {
60
+ "mcp": {
61
+ "servers": [
62
+ {
63
+ "name": "desktop",
64
+ "command": "node",
65
+ "args": ["C:/Users/<用户>/.desktop-touch-mcp/releases/v1.16.0/dist/index.js"],
66
+ "env": { "DESKTOP_TOUCH_MCP_OFFLINE_FALLBACK": "1" },
67
+ "initTimeoutMs": 20000,
68
+ "callTimeoutMs": 120000,
69
+ "tools": [
70
+ "desktop_state", "screenshot", "server_status", "desktop_discover",
71
+ "workspace_launch", "focus_window", "click_element", "keyboard",
72
+ "terminal", "excel", "wait_until"
73
+ ]
74
+ }
75
+ ]
76
+ }
77
+ }
78
+ ```
79
+
80
+ > **注意**:`tools` 是**原始工具名**(不带 `desktop_` 前缀),filter 在注册前生效。
81
+ > 白名单只暴露 11 个核心工具,防止 32 个工具全部进入模型上下文导致注意力稀释。
82
+ > 修改配置后需重启飞虹会话;原配置请先备份(`fhcode.config.json.bak-<日期>`)。
83
+
84
+ ---
85
+
86
+ ## 3. 策略与沙箱(B 层)
87
+
88
+ ### 3.1 角色矩阵(src/enterprise/policy.ts)
89
+
90
+ | 角色 | desktop 只读 | desktop 写 | 说明 |
91
+ | --- | --- | --- | --- |
92
+ | viewer | 否 | 否 | 无 desktop 权限 |
93
+ | developer | 否 | 否 | 编码角色,不开放桌面操控 |
94
+ | operator | 放行 | **需审批** | 业务操作员:`feihong_desktop_act` 及 `desktop_*` 写工具一律审批 |
95
+ | admin | 放行 | **需审批** | 管理员同样审批——不可逆动作留给人 |
96
+
97
+ 写工具清单(`DESKTOP_APPROVAL_TOOLS`,共 20 个):`keyboard / mouse_click / mouse_drag / scroll / click_element / focus_window / workspace_launch / run_macro / terminal / clipboard / window_dock / excel / key_locker / screenshot_gc / browser_click / browser_open / browser_navigate / browser_eval / browser_fill / desktop_act`,另加 `feihong_desktop_act`。
98
+
99
+ > **已修复缺陷**:`allowTools: ['*']` 时 `approvalTools` 曾不生效(approval 判定顺序错误),
100
+ > 现改为 **approval 优先**——审批清单中的工具任何角色(含 admin)都需审批。
101
+
102
+ ### 3.2 沙箱规则(src/tools/sandbox.ts)
103
+
104
+ - **read-only 模式**:拦截全部 desktop 写工具(`DESKTOP_WRITE_TOOLS` 20 个 + `feihong_desktop_act`)——只读勘察会话中 agent「只能看,不能动」
105
+ - **workspace-write / danger-full-access**:桌面写操作放行到策略层(审批决定)
106
+
107
+ ---
108
+
109
+ ## 4. 停手线(C 层 · src/tools/desktop/desktop-guard.ts)
110
+
111
+ 硬编码安全边界,**任何角色(含 admin)不可绕过**,不依赖 MCP 服务器:
112
+
113
+ | 规则 | 说明 |
114
+ | --- | --- |
115
+ | 动作白名单 | 仅允许 `type / click / mouse_click / drag / scroll / terminal_send / launch` |
116
+ | 目标窗口必填 | 写操作(除 launch)必须显式指定 `windowTitle`,防误操作到无关窗口 |
117
+ | 危险窗口黑名单 | 任务管理器 / 注册表编辑器 / UAC / Windows 安全中心 / 系统配置 / 设备管理器 / 磁盘管理 / 本地组策略…(子串匹配,不区分大小写) |
118
+ | 用户扩展黑名单 | 环境变量 `FEIHONG_DESKTOP_BLOCK_WINDOWS`(逗号分隔)追加,例如保护微信/企业微信 |
119
+
120
+ ---
121
+
122
+ ## 5. 取证目录(C 层)
123
+
124
+ - 位置:`<FH_HOME>/forensics/<runId>/`(默认 `%USERPROFILE%\.feihong-code\forensics\`,可用 `FH_FORENSICS_DIR` 覆盖)
125
+ - 结构:
126
+ ```
127
+ forensics/<runId>/
128
+ ├── manifest.jsonl # 每次动作一行 JSON:ts/event/action/tool/args 摘要/结果/截图回读
129
+ └── shots/ # 截图目录(desktop-touch 磁盘缓存保留原图,可复核)
130
+ ```
131
+ - **语义**:每次写操作(无论成败)强制截图取证——「操作留痕、可复盘、可甩锅」,是给企业客户交付的证据链。
132
+
133
+ ---
134
+
135
+ ## 6. feihong 工具参考
136
+
137
+ | 工具 | 读写 | 说明 | 关键参数 |
138
+ | --- | --- | --- | --- |
139
+ | `feihong_desktop_see` | 只读 | 桌面勘察:焦点/可见窗口/光标 | `filter?` 按标题/进程过滤 |
140
+ | `feihong_desktop_act` | 写(需审批) | 标准动作序列:停手线 → focus → 动作 → 取证 | `action` + `windowTitle` + 动作参数 |
141
+ | `feihong_desktop_verify` | 只读 | 截图+状态回读断言 | `expectText?` / `expectWindow?` |
142
+
143
+ ### 动作参数(feihong_desktop_act)
144
+
145
+ | action | MCP 工具 | 关键参数 |
146
+ | --- | --- | --- |
147
+ | `type` | keyboard | `text`(自动 `@active` 瞄准前台) |
148
+ | `click` | click_element | `element`(UIA 名称,可先 discover) |
149
+ | `mouse_click` | mouse_click | `x` `y` |
150
+ | `drag` | mouse_drag | `x` `y` `endX` `endY` |
151
+ | `scroll` | scroll | `deltaX` `deltaY` |
152
+ | `terminal_send` | terminal | `text` |
153
+ | `launch` | workspace_launch | `command` `waitMs`(默认 5000) |
154
+
155
+ ---
156
+
157
+ ## 7. 实战经验与已知边界(重要)
158
+
159
+ 1. **标题中英文差异**:Windows 11 中文系统记事本窗口标题可能是 `Notepad`(英文)或 `记事本`。
160
+ `focus_window` 按子串匹配,**建议先 `feihong_desktop_see` 拿到精确标题再操作**。
161
+ 2. **type 必须走 `@active`**:feihong 层已 focus 目标窗口后,`keyboard` 用 `windowTitle:'@active'`
162
+ 瞄准前台,可规避标题匹配歧义;若直接传标题,可能触发 desktop-touch 感知守卫
163
+ `AutoGuardBlocked`(提示先 `desktop_discover` 验证)。
164
+ 3. **感知守卫错误码**:`AutoGuardBlocked / GuardFailed / DestinationRequired / ElementDisabled /
165
+ InvokePatternNotSupported / WindowNotFound / FocusFailed` 会以「正常返回」携带错误文本,
166
+ feihong 层已做语义判定(视为失败并附带 suggest 提示)。
167
+ 4. **keyboard 限制**:`win+r / win+x / win+s / win+l` 被服务器硬编码拦截;非 ASCII 文本
168
+ (CJK/emoji)走自动剪贴板,IME 组合中不会落地。
169
+ 5. **Excel 工具**(VBA COM):只读动作建议直接调用 `desktop_excel`;写动作走审批。
170
+ 6. **焦点即信任**:`@active` 瞄准的是**当前前台窗口**——动作前务必 `see` 确认焦点,
171
+ 防止输入进入用户正在使用的窗口(演示/生产都适用)。
172
+
173
+ ---
174
+
175
+ ## 8. 运维清单
176
+
177
+ - [ ] 配置修改前备份 `fhcode.config.json`
178
+ - [ ] 变更后重启飞虹会话,确认日志出现 `MCP server attached · desktop · 11 tools`
179
+ - [ ] 修改策略后跑 `npm run typecheck` + `npm test`
180
+ - [ ] 定期检查取证目录容量(截图累积),按需清理
181
+ - [ ] 客户机部署时:每台机需单独安装运行时 + 单独授权(TCC/辅助功能等价物),并配置各自白名单