page-agent-claw 1.0.4 → 1.0.6
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/README.md +64 -5
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/client/assets/index-Czc9BEbw.css +1 -0
- package/dist/client/assets/{index-C9X-HvEc.js → index-e9FcsTmu.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +10 -200
- package/dist/server/index.js.map +1 -1
- package/dist/server/middleware/proxy.d.ts +3 -0
- package/dist/server/middleware/proxy.d.ts.map +1 -0
- package/dist/server/middleware/proxy.js +42 -0
- package/dist/server/middleware/proxy.js.map +1 -0
- package/dist/server/proxy.d.ts +3 -0
- package/dist/server/proxy.d.ts.map +1 -0
- package/dist/server/proxy.js +42 -0
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/routes/task.d.ts +3 -0
- package/dist/server/routes/task.d.ts.map +1 -0
- package/dist/server/routes/task.js +100 -0
- package/dist/server/routes/task.js.map +1 -0
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +73 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/types.d.ts +23 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/websocket/index.d.ts +11 -0
- package/dist/server/websocket/index.d.ts.map +1 -0
- package/dist/server/websocket/index.js +110 -0
- package/dist/server/websocket/index.js.map +1 -0
- package/dist/server/websocket/types.d.ts +10 -0
- package/dist/server/websocket/types.d.ts.map +1 -0
- package/dist/server/websocket/types.js +2 -0
- package/dist/server/websocket/types.js.map +1 -0
- package/dist/server/websocket.d.ts +10 -0
- package/dist/server/websocket.d.ts.map +1 -0
- package/dist/server/websocket.js +95 -0
- package/dist/server/websocket.js.map +1 -0
- package/package.json +1 -1
- package/dist/client/assets/index-CeXFQJ9K.css +0 -1
package/README.md
CHANGED
|
@@ -48,18 +48,77 @@ PORT=8080 page-agent-claw
|
|
|
48
48
|
|------|------|------|
|
|
49
49
|
| `/health` | GET | 健康检查 |
|
|
50
50
|
| `/api/task` | POST | 提交任务 |
|
|
51
|
-
| `/api/clients` | GET |
|
|
51
|
+
| `/api/clients` | GET | 查看连接的客户端数 |
|
|
52
|
+
| `/api/status` | GET | 状态监测 |
|
|
53
|
+
| `/proxy/:target` | ALL | 代理请求(解决跨域) |
|
|
52
54
|
| WebSocket | WS | 实时通信(端口 4222) |
|
|
53
55
|
|
|
56
|
+
### POST /api/task
|
|
57
|
+
|
|
58
|
+
提交任务到已连接的客户端执行。
|
|
59
|
+
|
|
60
|
+
**请求体:**
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"task": "在当前页面执行某个操作",
|
|
65
|
+
"metadata": { }
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**响应:**
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"success": true,
|
|
74
|
+
"taskId": "task_1234567890_abc",
|
|
75
|
+
"result": {
|
|
76
|
+
"success": true,
|
|
77
|
+
"data": "执行结果",
|
|
78
|
+
"history": []
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### /api/status 状态码
|
|
84
|
+
|
|
85
|
+
| 状态码 | 含义 |
|
|
86
|
+
|--------|------|
|
|
87
|
+
| 100 | 仅 node 服务启动,无 WebSocket 连接(页面未打开) |
|
|
88
|
+
| 105 | 有 WebSocket 连接,但 page-agent(扩展)未连接 |
|
|
89
|
+
| 200 | 正常(WebSocket + page-agent 已连接) |
|
|
90
|
+
|
|
91
|
+
**响应示例:**
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
// 100 无连接
|
|
95
|
+
{"code":100,"message":"请打开 localhost:4222 页面","connectedNumber":0}
|
|
96
|
+
|
|
97
|
+
// 105 有连接但无 page-agent
|
|
98
|
+
{"code":105,"message":"page-agent 未连接","connectedNumber":1}
|
|
99
|
+
|
|
100
|
+
// 200 正常
|
|
101
|
+
{"code":200,"message":"正常","connectedNumber":1,"pageAgentCount":1}
|
|
102
|
+
```
|
|
103
|
+
|
|
54
104
|
## 项目结构
|
|
55
105
|
|
|
56
106
|
```
|
|
57
107
|
page-agent-claw/
|
|
58
108
|
├── src/
|
|
59
|
-
│ ├── server/
|
|
60
|
-
│
|
|
61
|
-
├──
|
|
62
|
-
├──
|
|
109
|
+
│ ├── server/
|
|
110
|
+
│ │ ├── index.ts # 服务器入口
|
|
111
|
+
│ │ ├── types.ts # 共享类型定义
|
|
112
|
+
│ │ ├── middleware/
|
|
113
|
+
│ │ │ └── proxy.ts # 代理中间件
|
|
114
|
+
│ │ ├── routes/
|
|
115
|
+
│ │ │ └── task.ts # API 路由
|
|
116
|
+
│ │ └── websocket/
|
|
117
|
+
│ │ ├── index.ts # WebSocket 服务
|
|
118
|
+
│ │ └── types.ts # WebSocket 类型
|
|
119
|
+
│ └── cli/index.ts # CLI 入口
|
|
120
|
+
├── client/ # 前端页面源码(React)
|
|
121
|
+
├── dist/ # 构建输出
|
|
63
122
|
└── package.json
|
|
64
123
|
```
|
|
65
124
|
|
package/dist/cli/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { spawn } from 'child_process';
|
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { createServer } from 'http';
|
|
6
|
+
import { readFileSync } from 'fs';
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
8
|
const __dirname = path.dirname(__filename);
|
|
8
9
|
const projectRoot = path.join(__dirname, '../..');
|
|
@@ -55,8 +56,7 @@ async function main() {
|
|
|
55
56
|
// Check for version flag
|
|
56
57
|
const args = process.argv.slice(2);
|
|
57
58
|
if (args.includes('-v') || args.includes('--version')) {
|
|
58
|
-
|
|
59
|
-
const packageJson = require('../package.json');
|
|
59
|
+
const packageJson = JSON.parse(readFileSync(path.join(projectRoot, 'package.json'), 'utf-8'));
|
|
60
60
|
console.log(`page-agent-claw v${packageJson.version}`);
|
|
61
61
|
return;
|
|
62
62
|
}
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*{box-sizing:border-box}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;line-height:1.5}body{background:#f5f5f5;min-width:320px;min-height:100vh;margin:0}#root{min-height:100vh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f3f4f6}::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#9ca3af}::selection{color:#1f2937;background:#6366f133}.app{color:#1f2937;background:#f5f5f5;min-height:100vh;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.header{z-index:100;background:#fff;border-bottom:1px solid #e5e7eb;padding:16px 24px;position:sticky;top:0;box-shadow:0 1px 3px #0000000d}.header-content{justify-content:space-between;align-items:center;max-width:1400px;margin:0 auto;display:flex}.app-title{align-items:center;gap:10px;margin:0;font-size:20px;font-weight:600;display:flex}.title-icon{font-size:24px}.extension-status{background:#f3f4f6;border-radius:20px;align-items:center;gap:8px;padding:6px 12px;font-size:13px;display:flex}.status-indicator{border-radius:50%;width:8px;height:8px}.extension-status.connected .status-indicator{background:#10b981}.extension-status.disconnected .status-indicator{background:#ef4444}.extension-status.checking .status-indicator{background:#3b82f6}.extension-status.connected{color:#10b981}.extension-status.disconnected{color:#ef4444}.extension-status.checking{color:#3b82f6}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.pulse{animation:1.5s ease-in-out infinite pulse}.main{max-width:1400px;margin:0 auto;padding:24px}.warning-banner{background:#ef44441a;border:1px solid #ef44444d;border-radius:8px;align-items:flex-start;gap:12px;margin-bottom:24px;padding:16px;display:flex}.warning-icon{font-size:20px}.warning-content strong{color:#ef4444;margin-bottom:4px;display:block}.warning-content p{color:#9ca3af;margin:0;font-size:14px}.intro-banner{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);margin:0 auto;padding:20px 24px}.intro-content{color:#fff;max-width:1400px;margin:0 auto}.intro-content h2{margin:0 0 12px;font-size:18px;font-weight:600}.intro-content p{margin:0 0 8px;font-size:14px;line-height:1.6}.intro-content a{color:#fff;text-decoration:underline}.intro-content a:hover{text-decoration:none}.intro-en{opacity:.85;font-size:13px!important}.content-grid{grid-template-columns:1fr 1.5fr;gap:24px;display:grid}@media (width<=900px){.content-grid{grid-template-columns:1fr}}.config-panel,.results-panel{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:20px;box-shadow:0 1px 3px #0000000d}.section-title{color:#9ca3af;text-transform:uppercase;letter-spacing:.5px;align-items:center;gap:8px;margin:0 0 16px;font-size:14px;font-weight:600;display:flex}.section-icon{font-size:16px}.panel-section{border-bottom:1px solid #e5e7eb;margin-bottom:24px;padding-bottom:24px}.panel-section:last-of-type{border-bottom:none;margin-bottom:0}.input-group{margin-bottom:16px}.input-group:last-child{margin-bottom:0}.input-group label{color:#9ca3af;margin-bottom:6px;font-size:13px;display:block}.input-group input,.input-group textarea{color:#1f2937;box-sizing:border-box;background:#fff;border:1px solid #d1d5db;border-radius:6px;width:100%;padding:10px 12px;font-family:inherit;font-size:14px;transition:border-color .2s,box-shadow .2s}.input-group input:focus,.input-group textarea:focus{border-color:#10b981;outline:none;box-shadow:0 0 0 3px #10b9811a}.input-group input:disabled,.input-group textarea:disabled{opacity:.5;cursor:not-allowed}.input-group textarea{resize:vertical;min-height:100px}.input-hint{color:#6b7280;margin-top:6px;font-size:12px;display:block}.password-input{gap:8px;display:flex}.password-input input{flex:1}.toggle-visibility{color:#6b7280;cursor:pointer;white-space:nowrap;background:#f3f4f6;border:1px solid #d1d5db;border-radius:6px;padding:8px 12px;font-size:12px;transition:background .2s,color .2s}.toggle-visibility:hover{color:#1f2937;background:#e5e7eb}.action-buttons{margin-top:24px}.btn{cursor:pointer;border:none;border-radius:6px;justify-content:center;align-items:center;gap:8px;padding:12px 24px;font-size:14px;font-weight:500;transition:all .2s;display:inline-flex}.btn-icon{font-size:12px}.btn-primary{color:#fff;background:#6366f1;width:100%}.btn-primary:hover:not(:disabled){background:#5558e3}.btn-primary:disabled{color:#fff;cursor:not-allowed;background:#9ca3af}.btn-danger{color:#ef4444;background:0 0;border:1px solid #ef4444;width:100%}.btn-danger:hover{background:#ef44441a}.status-card{margin-bottom:24px}.status-badge{border-radius:20px;align-items:center;gap:8px;padding:8px 16px;font-size:14px;font-weight:500;display:inline-flex}.status-dot{border-radius:50%;width:8px;height:8px}.status-idle{color:#9ca3af;background:#6b728033}.status-idle .status-dot{background:#6b7280}.status-running{color:#3b82f6;background:#3b82f633}.status-running .status-dot{background:#3b82f6}.status-completed{color:#10b981;background:#10b98133}.status-completed .status-dot{background:#10b981}.status-error{color:#ef4444;background:#ef444433}.status-error .status-dot{background:#ef4444}.elapsed-time{opacity:.8;border-left:1px solid;margin-left:8px;padding-left:8px;font-size:12px}.activity-section{margin-bottom:24px}.activity-log{background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;max-height:300px;padding:12px;font-family:JetBrains Mono,Fira Code,monospace;font-size:12px;overflow-y:auto}.empty-state{color:#6b7280;text-align:center;padding:24px;font-family:Inter,-apple-system,sans-serif}.activity-item{border-bottom:1px solid #e5e7eb;align-items:flex-start;gap:8px;padding:8px 0;animation:.2s ease-out fadeIn;display:flex}.activity-item:last-child{border-bottom:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.activity-icon{text-align:center;flex-shrink:0;width:20px}.activity-item code{color:#059669;background:#e5e7eb;border-radius:4px;padding:2px 6px;font-size:11px}.duration{color:#6b7280;margin-left:8px;font-size:11px}.activity-executed-content{flex:1;min-width:0}.activity-output{color:#374151;white-space:pre-wrap;word-break:break-word;background:#fff;border:1px solid #e5e7eb;border-radius:4px;max-height:150px;margin:8px 0 0;padding:8px 12px;font-family:JetBrains Mono,Fira Code,monospace;font-size:11px;overflow-y:auto}.error-text{color:#ef4444}.result-section{margin-top:24px}.result-card{background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;padding:16px}.result-header{margin-bottom:12px}.result-status{text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}.result-status.success{color:#10b981}.result-status.error{color:#ef4444}.result-data{white-space:pre-wrap;word-break:break-word;background:#fff;border-radius:4px;max-height:200px;margin:0;padding:12px;font-family:JetBrains Mono,Fira Code,monospace;font-size:12px;overflow:auto}.history-section{border-top:1px solid #e5e7eb;margin-top:16px;padding-top:16px}.history-section h3{color:#9ca3af;margin:0 0 12px;font-size:13px}.history-list{flex-direction:column;gap:8px;display:flex}.history-item{background:#f3f4f6;border-radius:4px;align-items:center;gap:8px;padding:8px;font-size:12px;display:flex}.history-type{text-transform:uppercase;color:#6b7280;background:#e5e7eb;border-radius:4px;padding:2px 6px;font-size:10px}.history-content{color:#374151;text-overflow:ellipsis;white-space:nowrap;font-family:JetBrains Mono,monospace;overflow:hidden}
|