foliko 1.0.85 → 1.0.86

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 (169) hide show
  1. package/.agent/agents/code-assistant.json +14 -0
  2. package/.agent/agents/email-assistant.json +14 -0
  3. package/.agent/agents/file-assistant.json +15 -0
  4. package/.agent/agents/system-assistant.json +15 -0
  5. package/.agent/agents/web-assistant.json +12 -0
  6. package/.agent/data/ambient/goals.json +50 -0
  7. package/.agent/data/ambient/memories.json +7 -0
  8. package/.agent/data/default.json +4156 -244
  9. package/.agent/data/plugins-state.json +162 -174
  10. package/.agent/data/scheduler/tasks.json +1 -0
  11. package/.agent/data/weixin.json +6 -0
  12. package/.agent/mcp_config.json +1 -0
  13. package/.agent/package.json +8 -0
  14. package/.agent/plugins/__pycache__/test_plugin.cpython-312.pyc +0 -0
  15. package/.agent/plugins/daytona/README.md +89 -0
  16. package/.agent/plugins/daytona/index.js +377 -0
  17. package/.agent/plugins/daytona/package.json +12 -0
  18. package/.agent/plugins/marknative/README.md +134 -0
  19. package/.agent/plugins/marknative/index.js +233 -0
  20. package/.agent/plugins/marknative/package.json +12 -0
  21. package/.agent/plugins/marknative/update-readme.js +134 -0
  22. package/.agent/plugins/system-info/index.js +387 -0
  23. package/.agent/plugins/system-info/package.json +4 -0
  24. package/.agent/plugins/system-info/test.js +40 -0
  25. package/.agent/plugins/temp-repo/LICENSE +201 -0
  26. package/.agent/plugins/test_plugin.py +304 -0
  27. package/.agent/plugins.json +14 -5
  28. package/.agent/python-scripts/test_sample.py +24 -0
  29. package/.agent/skills/agent-browser/SKILL.md +311 -0
  30. package/.agent/skills/agent-browser/TEST_PLAN.md +200 -0
  31. package/.agent/skills/sysinfo/SKILL.md +38 -0
  32. package/.agent/skills/sysinfo/system-info.sh +130 -0
  33. package/.agent/skills/workflow/SKILL.md +324 -0
  34. package/.agent/workflows/email-digest.json +50 -0
  35. package/.agent/workflows/file-backup.json +21 -0
  36. package/.agent/workflows/get-ip-notify.json +32 -0
  37. package/.agent/workflows/news-aggregator.json +93 -0
  38. package/.agent/workflows/news-dashboard-v2.json +94 -0
  39. package/.agent/workflows/notification-batch.json +32 -0
  40. package/.claude/settings.local.json +171 -178
  41. package/.env.example +56 -56
  42. package/README.md +441 -441
  43. package/package.json +2 -2
  44. package/plugins/ambient-agent/EventWatcher.js +4 -4
  45. package/plugins/extension-executor-plugin.js +44 -1
  46. package/plugins/file-system-plugin.js +44 -5
  47. package/plugins/weixin-plugin.js +278 -29
  48. package/skills/find-skills/AGENTS.md +162 -162
  49. package/skills/find-skills/SKILL.md +133 -133
  50. package/skills/foliko-dev/SKILL.md +67 -0
  51. package/skills/python-plugin-dev/SKILL.md +238 -238
  52. package/src/core/agent-chat.js +4 -3
  53. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  54. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  55. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  56. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  57. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  58. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  59. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  60. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  61. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  62. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  63. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  64. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  65. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  66. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  67. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  68. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  69. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  70. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  71. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  72. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  73. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  74. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  75. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  76. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  77. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  78. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  79. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  80. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  81. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  82. package/.agent/ARCHITECTURE.md +0 -288
  83. package/.agent/agents/ambient-agent.md +0 -57
  84. package/.agent/agents/debugger.md +0 -55
  85. package/.agent/agents/email-assistant.md +0 -49
  86. package/.agent/agents/file-manager.md +0 -42
  87. package/.agent/agents/python-developer.md +0 -60
  88. package/.agent/agents/scheduler.md +0 -59
  89. package/.agent/agents/web-developer.md +0 -45
  90. package/.agent/data/puppeteer-sessions/undefined.json +0 -6
  91. package/.agent/mcp_config_updated.json +0 -12
  92. package/.agent/rules/GEMINI.md +0 -273
  93. package/.agent/rules/allow-rule.md +0 -77
  94. package/.agent/rules/log-rule.md +0 -83
  95. package/.agent/rules/security-rule.md +0 -93
  96. package/.agent/scripts/auto_preview.py +0 -148
  97. package/.agent/scripts/checklist.py +0 -217
  98. package/.agent/scripts/session_manager.py +0 -120
  99. package/.agent/scripts/verify_all.py +0 -327
  100. package/.agent/skills/api-patterns/SKILL.md +0 -81
  101. package/.agent/skills/api-patterns/api-style.md +0 -42
  102. package/.agent/skills/api-patterns/auth.md +0 -24
  103. package/.agent/skills/api-patterns/documentation.md +0 -26
  104. package/.agent/skills/api-patterns/graphql.md +0 -41
  105. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  106. package/.agent/skills/api-patterns/response.md +0 -37
  107. package/.agent/skills/api-patterns/rest.md +0 -40
  108. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  109. package/.agent/skills/api-patterns/security-testing.md +0 -122
  110. package/.agent/skills/api-patterns/trpc.md +0 -41
  111. package/.agent/skills/api-patterns/versioning.md +0 -22
  112. package/.agent/skills/app-builder/SKILL.md +0 -75
  113. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  114. package/.agent/skills/app-builder/feature-building.md +0 -53
  115. package/.agent/skills/app-builder/project-detection.md +0 -34
  116. package/.agent/skills/app-builder/scaffolding.md +0 -118
  117. package/.agent/skills/app-builder/tech-stack.md +0 -40
  118. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  119. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  120. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  121. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  122. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  123. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  124. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  125. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  126. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  127. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  128. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  129. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  130. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  131. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  132. package/.agent/skills/architecture/SKILL.md +0 -55
  133. package/.agent/skills/architecture/context-discovery.md +0 -43
  134. package/.agent/skills/architecture/examples.md +0 -94
  135. package/.agent/skills/architecture/pattern-selection.md +0 -68
  136. package/.agent/skills/architecture/patterns-reference.md +0 -50
  137. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  138. package/.agent/skills/clean-code/SKILL.md +0 -201
  139. package/.agent/skills/doc.md +0 -177
  140. package/.agent/skills/frontend-design/SKILL.md +0 -418
  141. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  142. package/.agent/skills/frontend-design/color-system.md +0 -311
  143. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  144. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  145. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  146. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  147. package/.agent/skills/frontend-design/typography-system.md +0 -345
  148. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  149. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  150. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  151. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  152. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  153. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  154. package/.agent/workflows/brainstorm.md +0 -113
  155. package/.agent/workflows/create.md +0 -59
  156. package/.agent/workflows/debug.md +0 -103
  157. package/.agent/workflows/deploy.md +0 -176
  158. package/.agent/workflows/enhance.md +0 -63
  159. package/.agent/workflows/orchestrate.md +0 -237
  160. package/.agent/workflows/plan.md +0 -89
  161. package/.agent/workflows/preview.md +0 -81
  162. package/.agent/workflows/simple-test.md +0 -42
  163. package/.agent/workflows/status.md +0 -86
  164. package/.agent/workflows/structured-orchestrate.md +0 -180
  165. package/.agent/workflows/test.md +0 -144
  166. package/.agent/workflows/ui-ux-pro-max.md +0 -296
  167. /package/.agent/plugins/{puppeteer-plugin → temp-repo/puppeteer-plugin}/README.md +0 -0
  168. /package/.agent/plugins/{puppeteer-plugin → temp-repo/puppeteer-plugin}/index.js +0 -0
  169. /package/.agent/plugins/{puppeteer-plugin → temp-repo/puppeteer-plugin}/package.json +0 -0
@@ -0,0 +1,304 @@
1
+ # .agent/plugins/test_plugin.py
2
+ """
3
+ Python 测试插件 - 提供单元测试和覆盖率测试功能
4
+ """
5
+
6
+ PLUGIN = {
7
+ "name": "test_plugin",
8
+ "version": "1.0.0",
9
+ "description": "Python 单元测试和覆盖率测试插件"
10
+ }
11
+
12
+ TOOLS = [
13
+ {
14
+ "name": "run_tests",
15
+ "description": "运行 Python 测试文件或目录中的测试用例",
16
+ "params": {
17
+ "path": "string",
18
+ "verbose": "boolean",
19
+ "pattern": "string"
20
+ }
21
+ },
22
+ {
23
+ "name": "create_test",
24
+ "description": "创建单元测试文件模板",
25
+ "params": {
26
+ "path": "string",
27
+ "class_name": "string",
28
+ "test_methods": "array",
29
+ "module_name": "string"
30
+ }
31
+ },
32
+ {
33
+ "name": "run_coverage",
34
+ "description": "运行测试并生成覆盖率报告",
35
+ "params": {
36
+ "path": "string",
37
+ "source": "string",
38
+ "report_type": "string"
39
+ }
40
+ },
41
+ {
42
+ "name": "assert_equal",
43
+ "description": "断言两个值相等(测试辅助)",
44
+ "params": {
45
+ "actual": "any",
46
+ "expected": "any",
47
+ "message": "string"
48
+ }
49
+ },
50
+ {
51
+ "name": "mock_function",
52
+ "description": "创建模拟函数用于测试",
53
+ "params": {
54
+ "return_value": "any",
55
+ "side_effect": "array",
56
+ "called_count": "number"
57
+ }
58
+ }
59
+ ]
60
+
61
+ # === 工具实现 ===
62
+
63
+ import os
64
+ import json
65
+ import subprocess
66
+ import traceback
67
+ from datetime import datetime
68
+
69
+
70
+ def run_tests(params):
71
+ """运行 Python 测试文件或目录中的测试用例"""
72
+ path = params.get("path", ".")
73
+ verbose = params.get("verbose", True)
74
+ pattern = params.get("pattern", "test_*.py")
75
+
76
+ if not os.path.exists(path):
77
+ return {"success": False, "error": f"Path not found: {path}"}
78
+
79
+ # 构建 pytest 命令
80
+ cmd = ["pytest", path]
81
+ if verbose:
82
+ cmd.append("-v")
83
+
84
+ try:
85
+ result = subprocess.run(
86
+ cmd,
87
+ capture_output=True,
88
+ text=True,
89
+ timeout=60
90
+ )
91
+
92
+ output = result.stdout + result.stderr
93
+
94
+ return {
95
+ "success": result.returncode == 0,
96
+ "result": {
97
+ "passed": result.returncode == 0,
98
+ "output": output,
99
+ "return_code": result.returncode
100
+ }
101
+ }
102
+ except subprocess.TimeoutExpired:
103
+ return {"success": False, "error": "Test execution timed out"}
104
+ except Exception as e:
105
+ return {"success": False, "error": str(e)}
106
+
107
+
108
+ def create_test(params):
109
+ """创建单元测试文件模板"""
110
+ path = params.get("path")
111
+ class_name = params.get("class_name", "TestModule")
112
+ test_methods = params.get("test_methods", ["test_case"])
113
+ module_name = params.get("module_name", "")
114
+
115
+ if not path:
116
+ return {"success": False, "error": "path is required"}
117
+
118
+ # 确保目录存在
119
+ os.makedirs(os.path.dirname(path) if os.path.dirname(path) else ".", exist_ok=True)
120
+
121
+ # 生成测试模板
122
+ template = f'''"""
123
+ 测试模块 - {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
124
+ """
125
+
126
+ import unittest
127
+ {"import " + module_name if module_name else ""}
128
+
129
+
130
+ class {class_name}(unittest.TestCase):
131
+ """{class_name} 测试类"""
132
+ '''
133
+
134
+ for method in test_methods:
135
+ template += f'''
136
+ def {method}(self):
137
+ """测试用例: {method}"""
138
+ # TODO: 实现测试逻辑
139
+ self.assertTrue(True)
140
+ '''
141
+
142
+ template += '''
143
+
144
+ if __name__ == "__main__":
145
+ unittest.main()
146
+ '''
147
+
148
+ try:
149
+ with open(path, "w", encoding="utf-8") as f:
150
+ f.write(template)
151
+
152
+ return {
153
+ "success": True,
154
+ "result": {
155
+ "path": path,
156
+ "class_name": class_name,
157
+ "methods": test_methods
158
+ }
159
+ }
160
+ except Exception as e:
161
+ return {"success": False, "error": str(e)}
162
+
163
+
164
+ def run_coverage(params):
165
+ """运行测试并生成覆盖率报告"""
166
+ path = params.get("path", ".")
167
+ source = params.get("source", "")
168
+ report_type = params.get("report_type", "term")
169
+
170
+ if not os.path.exists(path):
171
+ return {"success": False, "error": f"Path not found: {path}"}
172
+
173
+ # 构建 coverage 命令
174
+ cmd = ["coverage", "run", "-m", "pytest", path]
175
+ if source:
176
+ cmd = ["coverage", "run", "--source", source, "-m", "pytest", path]
177
+
178
+ try:
179
+ # 运行测试
180
+ subprocess.run(cmd, capture_output=True, timeout=60)
181
+
182
+ # 生成报告
183
+ if report_type == "term":
184
+ report_result = subprocess.run(
185
+ ["coverage", "report"],
186
+ capture_output=True,
187
+ text=True
188
+ )
189
+ output = report_result.stdout
190
+ elif report_type == "html":
191
+ subprocess.run(
192
+ ["coverage", "html", "-d", "htmlcov"],
193
+ capture_output=True,
194
+ timeout=30
195
+ )
196
+ output = "Coverage HTML report generated at htmlcov/"
197
+ elif report_type == "json":
198
+ report_result = subprocess.run(
199
+ ["coverage", "json"],
200
+ capture_output=True,
201
+ text=True
202
+ )
203
+ output = report_result.stdout
204
+ else:
205
+ output = "Unknown report type"
206
+
207
+ return {
208
+ "success": True,
209
+ "result": {
210
+ "report": output,
211
+ "type": report_type
212
+ }
213
+ }
214
+ except subprocess.TimeoutExpired:
215
+ return {"success": False, "error": "Coverage execution timed out"}
216
+ except FileNotFoundError:
217
+ return {"success": False, "error": "coverage module not installed. Run: pip install coverage"}
218
+ except Exception as e:
219
+ return {"success": False, "error": str(e)}
220
+
221
+
222
+ def assert_equal(params):
223
+ """断言两个值相等(测试辅助)"""
224
+ actual = params.get("actual")
225
+ expected = params.get("expected")
226
+ message = params.get("message", "")
227
+
228
+ try:
229
+ # 处理 JSON 字符串比较
230
+ if isinstance(actual, str):
231
+ try:
232
+ actual = json.loads(actual)
233
+ except (json.JSONDecodeError, TypeError):
234
+ pass
235
+
236
+ if isinstance(expected, str):
237
+ try:
238
+ expected = json.loads(expected)
239
+ except (json.JSONDecodeError, TypeError):
240
+ pass
241
+
242
+ if actual == expected:
243
+ return {
244
+ "success": True,
245
+ "result": {
246
+ "passed": True,
247
+ "message": f"Assertion passed: {actual} == {expected}",
248
+ "actual": actual,
249
+ "expected": expected
250
+ }
251
+ }
252
+ else:
253
+ return {
254
+ "success": True,
255
+ "result": {
256
+ "passed": False,
257
+ "message": f"Assertion failed: {actual} != {expected}",
258
+ "actual": actual,
259
+ "expected": expected
260
+ }
261
+ }
262
+ except Exception as e:
263
+ return {"success": False, "error": str(e)}
264
+
265
+
266
+ def mock_function(params):
267
+ """创建模拟函数用于测试"""
268
+ return_value = params.get("return_value")
269
+ side_effect = params.get("side_effect", [])
270
+ called_count = params.get("called_count", 0)
271
+
272
+ class MockResult:
273
+ def __init__(self):
274
+ self.call_count = 0
275
+ self.call_args = []
276
+ self.side_effects = side_effect
277
+
278
+ def __call__(self, *args, **kwargs):
279
+ self.call_count += 1
280
+ self.call_args.append({"args": args, "kwargs": kwargs})
281
+
282
+ # 如果有 side_effect,按顺序返回
283
+ if self.side_effects:
284
+ index = min(self.call_count - 1, len(self.side_effects) - 1)
285
+ return self.side_effects[index]
286
+
287
+ return return_value
288
+
289
+ def reset(self):
290
+ self.call_count = 0
291
+ self.call_args = []
292
+
293
+ mock = MockResult()
294
+ mock.call_count = called_count
295
+
296
+ return {
297
+ "success": True,
298
+ "result": {
299
+ "mock_type": "MockFunction",
300
+ "return_value": return_value,
301
+ "side_effects": side_effect,
302
+ "description": "Use this mock function in your tests"
303
+ }
304
+ }
@@ -1,5 +1,14 @@
1
- {
2
- "weixin": {
3
- "enabled": true
4
- }
5
- }
1
+ {
2
+ "email": {
3
+ "enabled": true,
4
+ "smtp": {
5
+ "host": "smtp.gmail.com",
6
+ "port": 587,
7
+ "secure": false
8
+ },
9
+ "imap": {
10
+ "host": "imap.gmail.com",
11
+ "port": 993
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,24 @@
1
+ """
2
+ 测试模块 - 2026-04-02 02:52:12
3
+ """
4
+
5
+ import unittest
6
+
7
+
8
+
9
+ class TestMath(unittest.TestCase):
10
+ """TestMath 测试类"""
11
+
12
+ def test_add(self):
13
+ """测试用例: test_add"""
14
+ # TODO: 实现测试逻辑
15
+ self.assertTrue(True)
16
+
17
+ def test_subtract(self):
18
+ """测试用例: test_subtract"""
19
+ # TODO: 实现测试逻辑
20
+ self.assertTrue(True)
21
+
22
+
23
+ if __name__ == "__main__":
24
+ unittest.main()
@@ -0,0 +1,311 @@
1
+ ---
2
+ name: agent-browser
3
+ description: 浏览器自动化工具,用于 AI 代理的网页操作。当用户说"打开浏览器"、"访问网页"、"抓取页面"、"填写表单"、"点击按钮"、"截图"、"网页自动化"时调用此技能。
4
+ allowed-tools:
5
+ - shell
6
+ - execute_command
7
+ - read_file
8
+ - write_file
9
+ license: Apache-2.0
10
+ compatibility: v1.0.0
11
+ ---
12
+
13
+ # Agent Browser - 浏览器自动化技能
14
+
15
+ ## 概述
16
+
17
+ `agent-browser` 是 Vercel Labs 开发的浏览器自动化 CLI 工具,专为 AI 代理设计。基于 Chrome/Playwright,支持完整的网页交互功能。
18
+
19
+ **官方文档**: https://agent-browser.dev
20
+ **GitHub**: https://github.com/vercel-labs/agent-browser
21
+
22
+ ## 安装
23
+
24
+ ```bash
25
+ # 全局安装(推荐)
26
+ npm install -g agent-browser
27
+ agent-browser install # 首次下载 Chrome
28
+
29
+ # 或使用 npx(无需安装)
30
+ npx agent-browser install
31
+ ```
32
+
33
+ ## 核心工作流程
34
+
35
+ ### 1. 打开网页
36
+ ```bash
37
+ agent-browser open <url>
38
+ # 示例
39
+ agent-browser open https://example.com
40
+ ```
41
+
42
+ ### 2. 获取页面快照(AI 推荐)
43
+ ```bash
44
+ # 获取可访问性树和元素引用
45
+ agent-browser snapshot -i
46
+
47
+ # 输出示例:
48
+ # - heading "Example Domain" [ref=e1] [level=1]
49
+ # - button "Submit" [ref=e2]
50
+ # - textbox "Email" [ref=e3]
51
+ # - link "Learn more" [ref=e4]
52
+ ```
53
+
54
+ ### 3. 使用引用交互
55
+ ```bash
56
+ agent-browser click @e2 # 点击按钮
57
+ agent-browser fill @e3 "test@example.com" # 填写输入框
58
+ agent-browser get text @e1 # 获取文本
59
+ agent-browser hover @e4 # 悬停链接
60
+ ```
61
+
62
+ ### 4. 截图
63
+ ```bash
64
+ agent-browser screenshot page.png # 保存截图
65
+ agent-browser screenshot --full # 全页面截图
66
+ agent-browser screenshot --annotate # 带编号标签的截图
67
+ ```
68
+
69
+ ### 5. 关闭浏览器
70
+ ```bash
71
+ agent-browser close
72
+ ```
73
+
74
+ ## 常用命令
75
+
76
+ ### 页面导航
77
+ ```bash
78
+ agent-browser open <url> # 打开 URL
79
+ agent-browser back # 后退
80
+ agent-browser forward # 前进
81
+ agent-browser reload # 刷新
82
+ ```
83
+
84
+ ### 元素交互
85
+ ```bash
86
+ agent-browser click <sel> # 点击元素
87
+ agent-browser dblclick <sel> # 双击
88
+ agent-browser hover <sel> # 悬停
89
+ agent-browser focus <sel> # 聚焦
90
+ agent-browser fill <sel> <text> # 清空并填写
91
+ agent-browser type <sel> <text> # 追加输入
92
+ agent-browser press <key> # 按键(Enter, Tab, Control+a)
93
+ agent-browser select <sel> <value> # 下拉选择
94
+ agent-browser check <sel> # 勾选
95
+ agent-browser scroll <dir> [px] # 滚动(up/down/left/right)
96
+ ```
97
+
98
+ ### 获取信息
99
+ ```bash
100
+ agent-browser get text <sel> # 获取文本
101
+ agent-browser get html <sel> # 获取 HTML
102
+ agent-browser get value <sel> # 获取输入值
103
+ agent-browser get attr <sel> <attr> # 获取属性
104
+ agent-browser get title # 获取标题
105
+ agent-browser get url # 获取 URL
106
+ agent-browser get count <sel> # 计数元素
107
+ ```
108
+
109
+ ### 状态检查
110
+ ```bash
111
+ agent-browser is visible <sel> # 是否可见
112
+ agent-browser is enabled <sel> # 是否可用
113
+ agent-browser is checked <sel> # 是否勾选
114
+ ```
115
+
116
+ ### 语义定位器(AI 推荐)
117
+ ```bash
118
+ # 按 ARIA 角色查找
119
+ agent-browser find role button click --name "Submit"
120
+ agent-browser find role link text --name "More"
121
+
122
+ # 按文本查找
123
+ agent-browser find text "Sign In" click
124
+
125
+ # 按标签查找
126
+ agent-browser find label "Email" fill "test@test.com"
127
+
128
+ # 按占位符查找
129
+ agent-browser find placeholder "Search..." fill "query"
130
+
131
+ # 按 testid 查找
132
+ agent-browser find testid "submit-btn" click
133
+
134
+ # 位置选择
135
+ agent-browser find first ".item" click
136
+ agent-browser find last "a" click
137
+ agent-browser find nth 2 "a" text
138
+ ```
139
+
140
+ ### 等待
141
+ ```bash
142
+ agent-browser wait <selector> # 等待元素可见
143
+ agent-browser wait <ms> # 等待毫秒
144
+ agent-browser wait --text "Welcome" # 等待文本出现
145
+ agent-browser wait --url "**/dash" # 等待 URL 匹配
146
+ agent-browser wait --load networkidle # 等待网络空闲
147
+ ```
148
+
149
+ ### 网络拦截
150
+ ```bash
151
+ agent-browser network route <url> --abort # 阻止请求
152
+ agent-browser network route <url> --body '<json>' # Mock 响应
153
+ agent-browser network requests # 查看请求
154
+ ```
155
+
156
+ ### 键盘操作
157
+ ```bash
158
+ agent-browser keyboard type "Hello" # 键盘输入
159
+ agent-browser keyboard inserttext "text" # 直接插入文本
160
+ agent-browser keydown <key> # 按键按下
161
+ agent-browser keyup <key> # 按键释放
162
+ ```
163
+
164
+ ### 鼠标操作
165
+ ```bash
166
+ agent-browser mouse move <x> <y> # 移动鼠标
167
+ agent-browser mouse down [button] # 鼠标按下
168
+ agent-browser mouse up [button] # 鼠标释放
169
+ agent-browser mouse wheel <dy> [dx] # 滚轮滚动
170
+ ```
171
+
172
+ ### 剪贴板
173
+ ```bash
174
+ agent-browser clipboard read # 读取
175
+ agent-browser clipboard write "Hello" # 写入
176
+ ```
177
+
178
+ ## 选择器类型
179
+
180
+ ### 引用(推荐用于 AI)
181
+ ```
182
+ @e1, @e2, @e3 # 来自 snapshot 的元素引用
183
+ ```
184
+
185
+ ### CSS 选择器
186
+ ```bash
187
+ agent-browser click "#submit"
188
+ agent-browser click ".class-name"
189
+ agent-browser click "div > button"
190
+ ```
191
+
192
+ ### 文本和 XPath
193
+ ```bash
194
+ agent-browser click "text=Submit"
195
+ agent-browser click "xpath=//button"
196
+ ```
197
+
198
+ ## 会话管理
199
+
200
+ ```bash
201
+ # 多会话隔离
202
+ agent-browser --session session1 open site-a.com
203
+ agent-browser --session session2 open site-b.com
204
+
205
+ # 持久化配置
206
+ agent-browser --profile ~/.myapp-profile open myapp.com
207
+
208
+ # 自动保存/恢复状态
209
+ agent-browser --session-name myapp open twitter.com
210
+ ```
211
+
212
+ ## 认证管理
213
+
214
+ ```bash
215
+ # 从已有 Chrome 导入认证状态
216
+ agent-browser --auto-connect state save ./auth.json
217
+ agent-browser --state ./auth.json open app.com
218
+
219
+ # 或者用 session-name 自动持久化
220
+ agent-browser --session-name myapp state load ./auth.json
221
+ ```
222
+
223
+ ## 调试功能
224
+
225
+ ```bash
226
+ agent-browser --headed # 显示浏览器窗口
227
+ agent-browser console # 查看控制台消息
228
+ agent-browser errors # 查看页面错误
229
+ agent-browser highlight <sel> # 高亮元素
230
+ agent-browser inspect # 打开 DevTools
231
+ ```
232
+
233
+ ## 选项
234
+
235
+ | 选项 | 说明 |
236
+ |------|------|
237
+ | `--session <name>` | 使用隔离会话 |
238
+ | `--profile <path>` | 持久化浏览器配置目录 |
239
+ | `--state <path>` | 加载存储状态文件 |
240
+ | `--headers <json>` | 设置 HTTP 头 |
241
+ | `--headed` | 显示浏览器窗口 |
242
+ | `--json` | JSON 输出(AI 推荐) |
243
+ | `--annotate` | 带编号标签的截图 |
244
+ | `--cdp <port>` | 通过 CDP 连接 |
245
+ | `--allowed-domains` | 限制允许的域名 |
246
+ | `--max-output <n>` | 最大输出字符数 |
247
+
248
+ ## 最佳实践
249
+
250
+ ### AI 推荐的交互流程
251
+ ```bash
252
+ # 1. 打开并获取快照
253
+ agent-browser open example.com
254
+ agent-browser snapshot -i --json # AI 解析树和引用
255
+
256
+ # 2. AI 从快照识别目标元素
257
+ # 3. 使用引用执行操作
258
+ agent-browser click @e2
259
+ agent-browser fill @e3 "input text"
260
+
261
+ # 4. 页面变化后重新获取快照
262
+ agent-browser snapshot -i --json
263
+ ```
264
+
265
+ ### 命令链
266
+ ```bash
267
+ # 使用 && 链接多个命令
268
+ agent-browser open example.com && agent-browser wait --load networkidle && agent-browser snapshot -i
269
+
270
+ # 管道输入批量命令
271
+ echo '[["open","https://example.com"],["snapshot","-i"],["click","@e1"]]' | agent-browser batch --json
272
+ ```
273
+
274
+ ### 处理弹窗
275
+ ```bash
276
+ agent-browser dialog accept # 接受弹窗
277
+ agent-browser dialog dismiss # 拒绝弹窗
278
+ agent-browser dialog status # 检查弹窗状态
279
+ ```
280
+
281
+ ### 标签页操作
282
+ ```bash
283
+ agent-browser tab # 列出标签
284
+ agent-browser tab new [url] # 新建标签
285
+ agent-browser tab 1 # 切换到标签 1
286
+ agent-browser tab close [n] # 关闭标签
287
+ ```
288
+
289
+ ## 注意事项
290
+
291
+ 1. **首次使用**: 需要运行 `agent-browser install` 下载 Chrome
292
+ 2. **超时**: 默认操作超时 25 秒,可通过 `AGENT_BROWSER_DEFAULT_TIMEOUT` 调整
293
+ 3. **安全**: 敏感操作使用 `--confirm-actions eval,download` 确认
294
+ 4. **会话**: 不同会话有独立的 cookies、历史、认证状态
295
+ 5. **引用稳定性**: 每次 `snapshot` 后引用可能变化,需重新获取
296
+
297
+ ## 故障排除
298
+
299
+ ```bash
300
+ # 查看帮助
301
+ agent-browser --help
302
+
303
+ # 调试模式
304
+ agent-browser open example.com --debug
305
+
306
+ # 安装 Chrome
307
+ agent-browser install
308
+
309
+ # 升级
310
+ agent-browser upgrade
311
+ ```