foliko 1.1.2 → 1.1.4
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/.agent/agents/code-assistant.json +14 -0
- package/.agent/agents/email-assistant.json +14 -0
- package/.agent/agents/file-assistant.json +15 -0
- package/.agent/agents/system-assistant.json +15 -0
- package/.agent/agents/web-assistant.json +12 -0
- package/.agent/data/ambient/goals.json +50 -0
- package/.agent/data/ambient/memories.json +7 -0
- package/.agent/data/default.json +3 -412
- package/.agent/data/plugins-state.json +174 -173
- package/.agent/data/scheduler/tasks.json +1 -0
- package/.agent/memory/core.md +1 -0
- package/.agent/memory/project/mnn93ogy-ypjn27.md +9 -0
- package/.agent/memory/project/mnn98fqy-5nhc1u.md +25 -0
- package/.agent/memory/reference/mnq3oenw-46haj6.md +63 -0
- package/.agent/memory/reference/mnq5qxm2-mjoooh.md +116 -0
- package/.agent/memory/user/mnm67t9m-x8rekk.md +9 -0
- package/.agent/memory/user/mnn5mmqh-w6aktx.md +11 -0
- package/.agent/memory/user/mnnbfhhn-dk1bd1.md +22 -0
- package/.agent/package.json +8 -0
- package/.agent/plugins/__pycache__/file_writer.cpython-312.pyc +0 -0
- package/.agent/plugins/daytona/README.md +89 -0
- package/.agent/plugins/daytona/index.js +377 -0
- package/.agent/plugins/daytona/package.json +12 -0
- package/.agent/plugins/marknative/README.md +134 -0
- package/.agent/plugins/marknative/fonts/SegoeUI Emoji.ttf +0 -0
- package/.agent/plugins/marknative/index.js +256 -0
- package/.agent/plugins/marknative/package.json +12 -0
- package/.agent/plugins/marknative/update-readme.js +134 -0
- package/.agent/plugins/poster-plugin/emojis/rocket.png +1 -0
- package/.agent/plugins/poster-plugin/fonts/SegoeUI Emoji.ttf +0 -0
- package/.agent/plugins/poster-plugin/src/elements/text.js +3 -1
- package/.agent/plugins/poster-plugin/src/fonts.js +10 -0
- package/.agent/plugins/poster-plugin/yarn.lock +1007 -0
- package/.agent/plugins/system-info/index.js +387 -0
- package/.agent/plugins/system-info/package.json +4 -0
- package/.agent/plugins/system-info/test.js +40 -0
- package/.agent/plugins.json +11 -5
- package/.agent/python-scripts/test_sample.py +24 -0
- package/.agent/sessions/cli_default.json +1869 -691
- package/.agent/skills/agent-browser/SKILL.md +311 -0
- package/.agent/skills/agent-browser/TEST_PLAN.md +200 -0
- package/.agent/skills/sysinfo/SKILL.md +38 -0
- package/.agent/skills/sysinfo/system-info.sh +130 -0
- package/.agent/skills/workflow/SKILL.md +324 -0
- package/.agent/weixin.json +6 -0
- package/.agent/workflows/email-digest.json +50 -0
- package/.agent/workflows/file-backup.json +21 -0
- package/.agent/workflows/get-ip-notify.json +32 -0
- package/.agent/workflows/news-aggregator.json +93 -0
- package/.agent/workflows/news-dashboard-v2.json +94 -0
- package/.agent/workflows/notification-batch.json +32 -0
- package/.claude/settings.local.json +1 -20
- package/.env.example +56 -56
- package/README.md +441 -441
- package/cli/src/commands/chat.js +22 -13
- package/cli/src/ui/chat-ui.js +50 -37
- package/output/emoji-segoe-test-v2.png +0 -0
- package/output/emoji-segoe-test.png +0 -0
- package/output/emoji-test.png +0 -0
- package/output/emoji-windows-test.png +0 -0
- package/output/foliko-emoji-poster.png +0 -0
- package/output/foliko-muji-poster-final.png +0 -0
- package/output/foliko-muji-poster-v2.png +0 -0
- package/output/foliko-muji-poster.png +0 -0
- package/output/foliko-share.png +0 -0
- package/output/progress-circle-test.png +0 -0
- package/output/vb-agent-poster.png +0 -0
- package/package.json +1 -2
- package/plugins/default-plugins.js +4 -3
- package/plugins/extension-executor-plugin.js +12 -91
- package/plugins/file-system-plugin.js +19 -4
- package/plugins/memory-plugin.js +33 -4
- package/plugins/subagent-plugin.js +14 -37
- package/plugins/weixin-plugin.js +40 -168
- package/skills/find-skills/AGENTS.md +162 -162
- package/skills/find-skills/SKILL.md +133 -133
- package/skills/poster-guide/SKILL.md +669 -1426
- package/src/core/agent-chat.js +439 -269
- package/src/core/agent.js +3 -6
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
- package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
- package/.agent/ARCHITECTURE.md +0 -288
- package/.agent/agents/ambient-agent.md +0 -57
- package/.agent/agents/debugger.md +0 -55
- package/.agent/agents/email-assistant.md +0 -49
- package/.agent/agents/file-manager.md +0 -42
- package/.agent/agents/python-developer.md +0 -60
- package/.agent/agents/scheduler.md +0 -59
- package/.agent/agents/web-developer.md +0 -45
- package/.agent/data/puppeteer-sessions/undefined.json +0 -6
- package/.agent/data/weixin-media/2026-04-08/img_1775618677512.jpg +0 -0
- package/.agent/data/weixin-media/2026-04-08/img_1775619073340.jpg +0 -0
- package/.agent/data/weixin-media/2026-04-08/img_1775619097536.jpg +0 -0
- package/.agent/data/weixin-media/2026-04-08/img_1775619209388.jpg +0 -0
- package/.agent/mcp_config_updated.json +0 -12
- package/.agent/plugins/poster-plugin/fonts/NotoColorEmoji-Regular.ttf +0 -0
- package/.agent/plugins/puppeteer-plugin/README.md +0 -147
- package/.agent/plugins/puppeteer-plugin/index.js +0 -1418
- package/.agent/plugins/puppeteer-plugin/package.json +0 -9
- package/.agent/rules/GEMINI.md +0 -273
- package/.agent/rules/allow-rule.md +0 -77
- package/.agent/rules/log-rule.md +0 -83
- package/.agent/rules/security-rule.md +0 -93
- package/.agent/scripts/auto_preview.py +0 -148
- package/.agent/scripts/checklist.py +0 -217
- package/.agent/scripts/session_manager.py +0 -120
- package/.agent/scripts/verify_all.py +0 -327
- package/.agent/sessions/weixin_o9cq80zgZqKPA2-s59PN43GdDy1w@im.wechat.json +0 -11097
- package/.agent/skills/api-patterns/SKILL.md +0 -81
- package/.agent/skills/api-patterns/api-style.md +0 -42
- package/.agent/skills/api-patterns/auth.md +0 -24
- package/.agent/skills/api-patterns/documentation.md +0 -26
- package/.agent/skills/api-patterns/graphql.md +0 -41
- package/.agent/skills/api-patterns/rate-limiting.md +0 -31
- package/.agent/skills/api-patterns/response.md +0 -37
- package/.agent/skills/api-patterns/rest.md +0 -40
- package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
- package/.agent/skills/api-patterns/security-testing.md +0 -122
- package/.agent/skills/api-patterns/trpc.md +0 -41
- package/.agent/skills/api-patterns/versioning.md +0 -22
- package/.agent/skills/app-builder/SKILL.md +0 -75
- package/.agent/skills/app-builder/agent-coordination.md +0 -71
- package/.agent/skills/app-builder/feature-building.md +0 -53
- package/.agent/skills/app-builder/project-detection.md +0 -34
- package/.agent/skills/app-builder/scaffolding.md +0 -118
- package/.agent/skills/app-builder/tech-stack.md +0 -40
- package/.agent/skills/app-builder/templates/SKILL.md +0 -39
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
- package/.agent/skills/architecture/SKILL.md +0 -55
- package/.agent/skills/architecture/context-discovery.md +0 -43
- package/.agent/skills/architecture/examples.md +0 -94
- package/.agent/skills/architecture/pattern-selection.md +0 -68
- package/.agent/skills/architecture/patterns-reference.md +0 -50
- package/.agent/skills/architecture/trade-off-analysis.md +0 -77
- package/.agent/skills/clean-code/SKILL.md +0 -201
- package/.agent/skills/doc.md +0 -177
- package/.agent/skills/frontend-design/SKILL.md +0 -418
- package/.agent/skills/frontend-design/animation-guide.md +0 -331
- package/.agent/skills/frontend-design/color-system.md +0 -311
- package/.agent/skills/frontend-design/decision-trees.md +0 -418
- package/.agent/skills/frontend-design/motion-graphics.md +0 -306
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
- package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
- package/.agent/skills/frontend-design/typography-system.md +0 -345
- package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
- package/.agent/skills/frontend-design/visual-effects.md +0 -383
- package/.agent/skills/i18n-localization/SKILL.md +0 -154
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
- package/.agent/skills/mcp-builder/SKILL.md +0 -176
- package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
- package/.agent/workflows/brainstorm.md +0 -113
- package/.agent/workflows/create.md +0 -59
- package/.agent/workflows/debug.md +0 -103
- package/.agent/workflows/deploy.md +0 -176
- package/.agent/workflows/enhance.md +0 -63
- package/.agent/workflows/orchestrate.md +0 -237
- package/.agent/workflows/plan.md +0 -89
- package/.agent/workflows/preview.md +0 -81
- package/.agent/workflows/simple-test.md +0 -42
- package/.agent/workflows/status.md +0 -86
- package/.agent/workflows/structured-orchestrate.md +0 -180
- package/.agent/workflows/test.md +0 -144
- package/.agent/workflows/ui-ux-pro-max.md +0 -296
- package/output/beef-love-poster.png +0 -0
- package/output/international-news-daily.png +0 -0
- package/poster-test-2.png +0 -0
|
@@ -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
|
+
```
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Agent Browser 技能测试计划
|
|
2
|
+
|
|
3
|
+
**项目**: agent-browser skill
|
|
4
|
+
**版本**: v1.0.0
|
|
5
|
+
**日期**: 2024年
|
|
6
|
+
**测试环境**: Windows/macOS/Linux + Node.js 18+
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. 测试范围
|
|
11
|
+
|
|
12
|
+
### 1.1 功能测试
|
|
13
|
+
- [ ] 安装与初始化
|
|
14
|
+
- [ ] 页面导航操作
|
|
15
|
+
- [ ] 元素定位与交互
|
|
16
|
+
- [ ] 信息获取
|
|
17
|
+
- [ ] 状态检查
|
|
18
|
+
- [ ] 截图功能
|
|
19
|
+
- [ ] 键盘鼠标操作
|
|
20
|
+
- [ ] 网络拦截
|
|
21
|
+
- [ ] 会话管理
|
|
22
|
+
- [ ] 认证管理
|
|
23
|
+
|
|
24
|
+
### 1.2 集成测试
|
|
25
|
+
- [ ] 与 skill 工具集成
|
|
26
|
+
- [ ] 错误处理
|
|
27
|
+
- [ ] 超时机制
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. 前置条件
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# 1. 安装依赖
|
|
35
|
+
npm install -g agent-browser
|
|
36
|
+
|
|
37
|
+
# 2. 安装 Chrome
|
|
38
|
+
agent-browser install
|
|
39
|
+
|
|
40
|
+
# 3. 验证安装
|
|
41
|
+
agent-browser --version
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 3. 测试用例
|
|
47
|
+
|
|
48
|
+
### 3.1 安装测试
|
|
49
|
+
|
|
50
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
51
|
+
|----|--------|------|----------|
|
|
52
|
+
| INST-01 | 全局安装 | `npm install -g agent-browser` | 无错误,安装成功 |
|
|
53
|
+
| INST-02 | Chrome 下载 | `agent-browser install` | Chrome 成功下载 |
|
|
54
|
+
| INST-03 | 版本验证 | `agent-browser --version` | 显示版本号 v0.23.4 |
|
|
55
|
+
|
|
56
|
+
### 3.2 页面导航测试
|
|
57
|
+
|
|
58
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
59
|
+
|----|--------|------|----------|
|
|
60
|
+
| NAV-01 | 打开网页 | `agent-browser open https://example.com` | 浏览器打开页面 |
|
|
61
|
+
| NAV-02 | 获取标题 | `agent-browser get title` | 返回 "Example Domain" |
|
|
62
|
+
| NAV-03 | 获取 URL | `agent-browser get url` | 返回完整 URL |
|
|
63
|
+
| NAV-04 | 刷新页面 | `agent-browser reload` | 页面刷新 |
|
|
64
|
+
| NAV-05 | 关闭浏览器 | `agent-browser close` | 浏览器关闭 |
|
|
65
|
+
|
|
66
|
+
### 3.3 元素交互测试
|
|
67
|
+
|
|
68
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
69
|
+
|----|--------|------|----------|
|
|
70
|
+
| INT-01 | 获取快照 | `agent-browser snapshot -i --json` | 返回可访问性树和引用 |
|
|
71
|
+
| INT-02 | 点击元素 | `agent-browser click @e1` | 元素被点击 |
|
|
72
|
+
| INT-03 | 填写表单 | `agent-browser fill @input "test@test.com"` | 输入框被填充 |
|
|
73
|
+
| INT-04 | 悬停元素 | `agent-browser hover @e2` | 鼠标悬停 |
|
|
74
|
+
| INT-05 | 滚动页面 | `agent-browser scroll down 500` | 页面滚动 |
|
|
75
|
+
|
|
76
|
+
### 3.4 信息获取测试
|
|
77
|
+
|
|
78
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
79
|
+
|----|--------|------|----------|
|
|
80
|
+
| GET-01 | 获取文本 | `agent-browser get text @e1` | 返回元素文本 |
|
|
81
|
+
| GET-02 | 获取 HTML | `agent-browser get html @e1` | 返回元素 HTML |
|
|
82
|
+
| GET-03 | 获取属性 | `agent-browser get attr @e1 href` | 返回属性值 |
|
|
83
|
+
| GET-04 | 元素计数 | `agent-browser get count "a"` | 返回链接数量 |
|
|
84
|
+
|
|
85
|
+
### 3.5 状态检查测试
|
|
86
|
+
|
|
87
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
88
|
+
|----|--------|------|----------|
|
|
89
|
+
| STA-01 | 可见性检查 | `agent-browser is visible @e1` | 返回 true/false |
|
|
90
|
+
| STA-02 | 可用性检查 | `agent-browser is enabled @e1` | 返回 true/false |
|
|
91
|
+
|
|
92
|
+
### 3.6 截图功能测试
|
|
93
|
+
|
|
94
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
95
|
+
|----|--------|------|----------|
|
|
96
|
+
| SCR-01 | 普通截图 | `agent-browser screenshot test.png` | 生成截图文件 |
|
|
97
|
+
| SCR-02 | 全页面截图 | `agent-browser screenshot --full full.png` | 生成全页面截图 |
|
|
98
|
+
| SCR-03 | 带标注截图 | `agent-browser screenshot --annotate anno.png` | 生成带编号标签的截图 |
|
|
99
|
+
|
|
100
|
+
### 3.7 语义定位器测试
|
|
101
|
+
|
|
102
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
103
|
+
|----|--------|------|----------|
|
|
104
|
+
| SEM-01 | 按角色查找 | `agent-browser find role button click` | 找到并点击按钮 |
|
|
105
|
+
| SEM-02 | 按文本查找 | `agent-browser find text "Submit" click` | 找到并点击 |
|
|
106
|
+
| SEM-03 | 按标签查找 | `agent-browser find label "Email" fill "test.com"` | 找到并填写 |
|
|
107
|
+
| SEM-04 | 位置选择 | `agent-browser find first "a" click` | 点击第一个链接 |
|
|
108
|
+
|
|
109
|
+
### 3.8 等待机制测试
|
|
110
|
+
|
|
111
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
112
|
+
|----|--------|------|----------|
|
|
113
|
+
| WAI-01 | 等待元素 | `agent-browser wait "#element"` | 元素出现后继续 |
|
|
114
|
+
| WAI-02 | 等待文本 | `agent-browser wait --text "Success"` | 文本出现后继续 |
|
|
115
|
+
| WAI-03 | 等待网络空闲 | `agent-browser wait --load networkidle` | 网络空闲后继续 |
|
|
116
|
+
|
|
117
|
+
### 3.9 网络拦截测试
|
|
118
|
+
|
|
119
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
120
|
+
|----|--------|------|----------|
|
|
121
|
+
| NET-01 | 阻止请求 | `agent-browser network route "*.js" --abort` | 资源被阻止 |
|
|
122
|
+
| NET-02 | Mock 响应 | `agent-browser network route "*/api/*" --body '{"ok":true}'` | 返回 Mock 数据 |
|
|
123
|
+
| NET-03 | 查看请求 | `agent-browser network requests` | 列出所有请求 |
|
|
124
|
+
|
|
125
|
+
### 3.10 会话管理测试
|
|
126
|
+
|
|
127
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
128
|
+
|----|--------|------|----------|
|
|
129
|
+
| SES-01 | 隔离会话 | `agent-browser --session s1 open a.com` | 独立会话打开 |
|
|
130
|
+
| SES-02 | 会话隔离验证 | `agent-browser --session s2 open b.com` | 不同会话状态隔离 |
|
|
131
|
+
|
|
132
|
+
### 3.11 键盘鼠标操作测试
|
|
133
|
+
|
|
134
|
+
| ID | 测试项 | 命令 | 预期结果 |
|
|
135
|
+
|----|--------|------|----------|
|
|
136
|
+
| KEY-01 | 键盘输入 | `agent-browser keyboard type "Hello"` | 文本被输入 |
|
|
137
|
+
| KEY-02 | 按键操作 | `agent-browser press Enter` | 按下 Enter 键 |
|
|
138
|
+
| MOU-01 | 移动鼠标 | `agent-browser mouse move 100 200` | 鼠标移动 |
|
|
139
|
+
| MOU-02 | 滚轮滚动 | `agent-browser mouse wheel 100` | 页面滚动 |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 4. 自动化测试脚本
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# test_basic.sh - 基础功能测试
|
|
147
|
+
#!/bin/bash
|
|
148
|
+
|
|
149
|
+
echo "=== Agent Browser 基础测试 ==="
|
|
150
|
+
|
|
151
|
+
# 测试打开网页
|
|
152
|
+
echo "[TEST] 打开网页..."
|
|
153
|
+
agent-browser open https://example.com
|
|
154
|
+
sleep 2
|
|
155
|
+
|
|
156
|
+
# 测试获取快照
|
|
157
|
+
echo "[TEST] 获取快照..."
|
|
158
|
+
agent-browser snapshot -i --json > snapshot.json
|
|
159
|
+
cat snapshot.json
|
|
160
|
+
|
|
161
|
+
# 测试截图
|
|
162
|
+
echo "[TEST] 截图..."
|
|
163
|
+
agent-browser screenshot output.png
|
|
164
|
+
|
|
165
|
+
# 关闭
|
|
166
|
+
echo "[TEST] 关闭浏览器..."
|
|
167
|
+
agent-browser close
|
|
168
|
+
|
|
169
|
+
echo "=== 测试完成 ==="
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 5. 预期产出
|
|
175
|
+
|
|
176
|
+
| 类型 | 文件 | 说明 |
|
|
177
|
+
|------|------|------|
|
|
178
|
+
| 截图 | `*.png` | 测试截图输出 |
|
|
179
|
+
| 快照 | `snapshot.json` | 页面元素树 JSON |
|
|
180
|
+
| 日志 | `debug.log` | 调试模式日志 |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 6. 风险评估
|
|
185
|
+
|
|
186
|
+
| 风险 | 影响 | 缓解措施 |
|
|
187
|
+
|------|------|----------|
|
|
188
|
+
| Chrome 未安装 | 无法运行 | 提供 `agent-browser install` 说明 |
|
|
189
|
+
| 网络超时 | 测试失败 | 增加 wait 等待时间 |
|
|
190
|
+
| 元素引用失效 | 交互失败 | 每次操作前重新 snapshot |
|
|
191
|
+
| 端口占用 | 启动失败 | 使用 `--port` 指定端口 |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 7. 通过标准
|
|
196
|
+
|
|
197
|
+
- [ ] 所有 P0 测试用例通过
|
|
198
|
+
- [ ] 截图功能正常生成图片
|
|
199
|
+
- [ ] 元素交互命令无报错
|
|
200
|
+
- [ ] 会话隔离功能正常
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sysinfo
|
|
3
|
+
description: 使用 Bash 脚本查询系统信息(CPU、内存、磁盘、网络)
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- get_cpu_info
|
|
6
|
+
- get_memory_info
|
|
7
|
+
- get_disk_info
|
|
8
|
+
- get_network_info
|
|
9
|
+
- get_full_system_info
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 系统信息查询 (sysinfo)
|
|
13
|
+
|
|
14
|
+
使用 Bash 脚本查询系统信息,支持模块化查询。
|
|
15
|
+
|
|
16
|
+
## 使用方法
|
|
17
|
+
|
|
18
|
+
### 完整系统信息
|
|
19
|
+
```bash
|
|
20
|
+
bash .agent/skills/sysinfo/system-info.sh
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 分模块查询
|
|
24
|
+
```bash
|
|
25
|
+
bash .agent/skills/sysinfo/system-info.sh cpu # CPU 信息
|
|
26
|
+
bash .agent/skills/sysinfo/system-info.sh memory # 内存信息
|
|
27
|
+
bash .agent/skills/sysinfo/system-info.sh disk # 磁盘信息
|
|
28
|
+
bash .agent/skills/sysinfo/system-info.sh network # 网络信息
|
|
29
|
+
bash .agent/skills/sysinfo/system-info.sh system # 系统基本信息
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 输出示例
|
|
33
|
+
|
|
34
|
+
- **CPU**: 型号、核心数、使用率
|
|
35
|
+
- **Memory**: 总内存、已用、可用、使用率
|
|
36
|
+
- **Disk**: 各分区容量和使用情况
|
|
37
|
+
- **Network**: IP 地址、网卡信息
|
|
38
|
+
- **System**: 主机名、操作系统、内核版本
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 系统信息查询脚本(跨平台支持)
|
|
3
|
+
# 用法: system-info [option]
|
|
4
|
+
# 选项: all (默认), cpu, memory, disk, network, system
|
|
5
|
+
|
|
6
|
+
OPTION=${1:-all}
|
|
7
|
+
|
|
8
|
+
echo "=========================================="
|
|
9
|
+
echo " System Info Report - $(date '+%Y-%m-%d %H:%M:%S')"
|
|
10
|
+
echo "=========================================="
|
|
11
|
+
echo ""
|
|
12
|
+
|
|
13
|
+
# 系统基本信息
|
|
14
|
+
show_system() {
|
|
15
|
+
echo "[System Info]"
|
|
16
|
+
echo " Hostname: $(hostname)"
|
|
17
|
+
echo " OS: $(uname -s)"
|
|
18
|
+
echo " Kernel: $(uname -r)"
|
|
19
|
+
echo " Arch: $(uname -m)"
|
|
20
|
+
echo ""
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
# CPU 信息
|
|
24
|
+
show_cpu() {
|
|
25
|
+
echo "[CPU Info]"
|
|
26
|
+
if [ -f /proc/cpuinfo ]; then
|
|
27
|
+
echo " Model: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d':' -f2 | xargs)"
|
|
28
|
+
echo " Cores: $(grep -c ^processor /proc/cpuinfo)"
|
|
29
|
+
elif command -v powershell &> /dev/null; then
|
|
30
|
+
cpu_info=$(powershell -NoProfile -Command "
|
|
31
|
+
\$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
|
|
32
|
+
\$cores = (Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfCores -Sum).Sum
|
|
33
|
+
\$threads = (Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfLogicalProcessors -Sum).Sum
|
|
34
|
+
Write-Output \"\$(\$cpu.Name)|\$cores|\$threads\"
|
|
35
|
+
")
|
|
36
|
+
cpu_name=$(echo "$cpu_info" | cut -d'|' -f1)
|
|
37
|
+
cpu_cores=$(echo "$cpu_info" | cut -d'|' -f2)
|
|
38
|
+
cpu_threads=$(echo "$cpu_info" | cut -d'|' -f3)
|
|
39
|
+
echo " Model: $cpu_name"
|
|
40
|
+
echo " Cores: $cpu_cores"
|
|
41
|
+
echo " Threads: $cpu_threads"
|
|
42
|
+
else
|
|
43
|
+
echo " Model: $(sysctl -n machdep.cpu.brand_string 2>/dev/null || echo 'Unknown')"
|
|
44
|
+
fi
|
|
45
|
+
echo ""
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# 内存信息
|
|
49
|
+
show_memory() {
|
|
50
|
+
echo "[Memory Info]"
|
|
51
|
+
if [ -f /proc/meminfo ]; then
|
|
52
|
+
mem_total=$(grep MemTotal /proc/meminfo | awk '{printf "%.2f GB", $2/1024/1024}')
|
|
53
|
+
mem_free=$(grep MemFree /proc/meminfo | awk '{printf "%.2f GB", $2/1024/1024}')
|
|
54
|
+
mem_avail=$(grep MemAvailable /proc/meminfo 2>/dev/null | awk '{printf "%.2f GB", $2/1024/1024}')
|
|
55
|
+
echo " Total: $mem_total"
|
|
56
|
+
echo " Free: $mem_free"
|
|
57
|
+
echo " Available: ${mem_avail:-N/A}"
|
|
58
|
+
elif command -v powershell &> /dev/null; then
|
|
59
|
+
mem_info=$(powershell -NoProfile -Command "
|
|
60
|
+
\$os = Get-CimInstance Win32_OperatingSystem
|
|
61
|
+
\$total = [math]::Round(\$os.TotalVisibleMemorySize / 1MB, 2)
|
|
62
|
+
\$free = [math]::Round(\$os.FreePhysicalMemory / 1MB, 2)
|
|
63
|
+
\$used = [math]::Round(\$total - \$free, 2)
|
|
64
|
+
\$pct = [math]::Round((\$used / \$total) * 100, 1)
|
|
65
|
+
Write-Output \"\$total|\$used|\$free|\$pct\"
|
|
66
|
+
")
|
|
67
|
+
total=$(echo "$mem_info" | cut -d'|' -f1)
|
|
68
|
+
used=$(echo "$mem_info" | cut -d'|' -f2)
|
|
69
|
+
free=$(echo "$mem_info" | cut -d'|' -f3)
|
|
70
|
+
pct=$(echo "$mem_info" | cut -d'|' -f4)
|
|
71
|
+
echo " Total: ${total} GB"
|
|
72
|
+
echo " Used: ${used} GB (${pct}%)"
|
|
73
|
+
echo " Free: ${free} GB"
|
|
74
|
+
else
|
|
75
|
+
echo " Unable to get memory info"
|
|
76
|
+
fi
|
|
77
|
+
echo ""
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
# 磁盘信息
|
|
81
|
+
show_disk() {
|
|
82
|
+
echo "[Disk Info]"
|
|
83
|
+
if command -v powershell &> /dev/null; then
|
|
84
|
+
# Windows PowerShell - 使用 UTF8 编码输出
|
|
85
|
+
powershell -NoProfile -Command "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Get-CimInstance Win32_LogicalDisk -Filter \"DriveType=3\" | Format-Table -AutoSize | Out-String"
|
|
86
|
+
elif [ -f /proc/mounts ] && command -v df &> /dev/null; then
|
|
87
|
+
df -h | grep -E '^/dev/' | awk '{
|
|
88
|
+
printf " %s: Total %s, Used %s (%s), Free %s\n", $1, $2, $3, $5, $4
|
|
89
|
+
}'
|
|
90
|
+
else
|
|
91
|
+
echo " Unable to get disk info"
|
|
92
|
+
fi
|
|
93
|
+
echo ""
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# 网络信息
|
|
97
|
+
show_network() {
|
|
98
|
+
echo "[Network Info]"
|
|
99
|
+
echo " IP Addresses:"
|
|
100
|
+
if command -v ip &> /dev/null; then
|
|
101
|
+
ip addr show | grep inet | grep -v '127.0.0.1' | awk '{printf " %s\n", $2}'
|
|
102
|
+
elif command -v ifconfig &> /dev/null; then
|
|
103
|
+
ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{printf " %s\n", $2}'
|
|
104
|
+
elif command -v powershell &> /dev/null; then
|
|
105
|
+
powershell -NoProfile -Command "Get-NetIPAddress -AddressFamily IPv4 | Where-Object { \$_.IPAddress -ne '127.0.0.1' } | ForEach-Object { Write-Output \" \$(\$_.IPAddress)\" }"
|
|
106
|
+
fi
|
|
107
|
+
echo ""
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# 执行选项
|
|
111
|
+
case $OPTION in
|
|
112
|
+
all)
|
|
113
|
+
show_system
|
|
114
|
+
show_cpu
|
|
115
|
+
show_memory
|
|
116
|
+
show_disk
|
|
117
|
+
show_network
|
|
118
|
+
;;
|
|
119
|
+
cpu) show_cpu ;;
|
|
120
|
+
memory) show_memory ;;
|
|
121
|
+
disk) show_disk ;;
|
|
122
|
+
network) show_network ;;
|
|
123
|
+
system) show_system ;;
|
|
124
|
+
*)
|
|
125
|
+
echo "Usage: system-info [all|cpu|memory|disk|network|system]"
|
|
126
|
+
exit 1
|
|
127
|
+
;;
|
|
128
|
+
esac
|
|
129
|
+
|
|
130
|
+
echo "=========================================="
|