@reskill/agent-aware-server 0.2.0 → 0.4.0
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 +218 -0
- package/dist/cli.d.ts +6 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +58 -10
- package/dist/cli.js.map +1 -1
- package/dist/detector/alertDetector.d.ts +39 -0
- package/dist/detector/alertDetector.d.ts.map +1 -0
- package/dist/detector/alertDetector.js +117 -0
- package/dist/detector/alertDetector.js.map +1 -0
- package/dist/detector/behaviorDetector.d.ts +39 -0
- package/dist/detector/behaviorDetector.d.ts.map +1 -0
- package/dist/detector/behaviorDetector.js +124 -0
- package/dist/detector/behaviorDetector.js.map +1 -0
- package/dist/httpApi.d.ts +4 -2
- package/dist/httpApi.d.ts.map +1 -1
- package/dist/httpApi.js +16 -2
- package/dist/httpApi.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -25
- package/dist/index.js.map +1 -1
- package/dist/store/behaviorStore.d.ts +8 -2
- package/dist/store/behaviorStore.d.ts.map +1 -1
- package/dist/store/behaviorStore.js +19 -4
- package/dist/store/behaviorStore.js.map +1 -1
- package/dist/store/errorStore.d.ts +8 -2
- package/dist/store/errorStore.d.ts.map +1 -1
- package/dist/store/errorStore.js +19 -4
- package/dist/store/errorStore.js.map +1 -1
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# @reskill/agent-aware-server
|
|
2
|
+
|
|
3
|
+
Agent-aware Server 提供 HTTP API 来收集用户交互行为和页面报错信息,并通过智能检测器主动发现问题。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
### 1. 数据收集
|
|
8
|
+
|
|
9
|
+
- **行为数据收集**:从 `http://localhost:4100` 接收 SDK 上报的用户交互数据
|
|
10
|
+
- **错误数据收集**:收集运行时错误、Promise 异常和 Console 错误
|
|
11
|
+
|
|
12
|
+
### 2. 智能检测器
|
|
13
|
+
|
|
14
|
+
重构后的架构包含两个独立的检测器:
|
|
15
|
+
|
|
16
|
+
#### BehaviorDetector(行为检测器)
|
|
17
|
+
- 检测消极的用户交互行为
|
|
18
|
+
- 触发条件:
|
|
19
|
+
- 挫折指数 >= 70(Critical)
|
|
20
|
+
- 挫折指数 50-70(Warning)
|
|
21
|
+
- 愤怒点击 >= 3 次(Warning)
|
|
22
|
+
- 死点击 >= 2 次(Warning)
|
|
23
|
+
- 输出文件:`.agent-aware/alert/behavior.json`
|
|
24
|
+
|
|
25
|
+
#### AlertDetector(错误检测器)
|
|
26
|
+
- 检测高危的运行时错误
|
|
27
|
+
- 触发条件:
|
|
28
|
+
- 错误数 >= 1(Critical)
|
|
29
|
+
- 输出文件:`.agent-aware/alert/error.json`
|
|
30
|
+
|
|
31
|
+
### 3. 数据存储
|
|
32
|
+
|
|
33
|
+
**所有数据统一存储到用户项目根目录的 `.agent-aware/` 目录**:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
.agent-aware/
|
|
37
|
+
├── alert/ # 检测告警文件(供 Agent 监控)
|
|
38
|
+
│ ├── behavior.json # 行为检测告警(最多 100 条历史)
|
|
39
|
+
│ └── error.json # 错误检测告警(最多 100 条历史)
|
|
40
|
+
└── detail/ # 详细数据文件(供 HTTP API 查询)
|
|
41
|
+
├── behaviors.json # 行为详细数据(最多 1000 条)
|
|
42
|
+
└── errors.json # 错误详细数据(最多 1000 条)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 使用方式
|
|
46
|
+
|
|
47
|
+
### 安装(推荐项目级别开发依赖)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install --save-dev @reskill/agent-aware-server
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 启动服务
|
|
54
|
+
|
|
55
|
+
#### 方式 1:使用 CLI(推荐)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# 默认启动(输出到当前目录)
|
|
59
|
+
npx agent-aware-server start
|
|
60
|
+
|
|
61
|
+
# 指定项目根目录
|
|
62
|
+
npx agent-aware-server start --project-root /path/to/project
|
|
63
|
+
|
|
64
|
+
# 使用环境变量(优先级最高)
|
|
65
|
+
USER_PROJECT_ROOT=/path/to/project npx agent-aware-server start
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### 方式 2:编程方式
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { serve } from '@hono/node-server'
|
|
72
|
+
import { createHttpApi } from '@reskill/agent-aware-server/httpApi'
|
|
73
|
+
import { BehaviorStore } from '@reskill/agent-aware-server/store/behaviorStore'
|
|
74
|
+
import { ErrorStore } from '@reskill/agent-aware-server/store/errorStore'
|
|
75
|
+
import { BehaviorDetector } from '@reskill/agent-aware-server/detector/behaviorDetector'
|
|
76
|
+
import { AlertDetector } from '@reskill/agent-aware-server/detector/alertDetector'
|
|
77
|
+
|
|
78
|
+
const PORT = 4100
|
|
79
|
+
const PROJECT_ROOT = process.env.USER_PROJECT_ROOT || process.cwd()
|
|
80
|
+
|
|
81
|
+
// 所有组件统一使用 PROJECT_ROOT,数据存储在 .agent-aware/ 目录下
|
|
82
|
+
const store = new BehaviorStore(PROJECT_ROOT)
|
|
83
|
+
const errorStore = new ErrorStore(PROJECT_ROOT)
|
|
84
|
+
const behaviorDetector = new BehaviorDetector(PROJECT_ROOT)
|
|
85
|
+
const alertDetector = new AlertDetector(PROJECT_ROOT)
|
|
86
|
+
|
|
87
|
+
const app = createHttpApi(store, errorStore, behaviorDetector, alertDetector)
|
|
88
|
+
|
|
89
|
+
serve({
|
|
90
|
+
fetch: app.fetch,
|
|
91
|
+
port: PORT,
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
console.log(`Server running on http://localhost:${PORT}`)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## HTTP API
|
|
98
|
+
|
|
99
|
+
### 行为相关
|
|
100
|
+
|
|
101
|
+
- **POST /behaviors** - 接收行为数据(SDK 上报)
|
|
102
|
+
- **GET /behaviors** - 查询行为数据
|
|
103
|
+
- 参数:`types`(可选)、`limit`(可选)
|
|
104
|
+
- **GET /summary** - 获取行为摘要
|
|
105
|
+
- **GET /hotspots** - 获取交互热点
|
|
106
|
+
- 参数:`limit`(可选)
|
|
107
|
+
- **DELETE /behaviors** - 清空行为数据
|
|
108
|
+
|
|
109
|
+
### 错误相关
|
|
110
|
+
|
|
111
|
+
- **POST /errors** - 接收错误数据(SDK 上报)
|
|
112
|
+
- **GET /errors** - 查询错误数据
|
|
113
|
+
- 参数:`errorTypes`(可选)、`limit`(可选)
|
|
114
|
+
- **GET /errors/summary** - 获取错误摘要
|
|
115
|
+
- **DELETE /errors** - 清空错误数据
|
|
116
|
+
|
|
117
|
+
### 健康检查
|
|
118
|
+
|
|
119
|
+
- **GET /health** - 健康检查
|
|
120
|
+
|
|
121
|
+
## 项目根目录配置
|
|
122
|
+
|
|
123
|
+
检测器输出文件的位置由以下优先级决定:
|
|
124
|
+
|
|
125
|
+
1. **环境变量** `USER_PROJECT_ROOT`(优先级最高)
|
|
126
|
+
2. **启动参数** `--project-root`
|
|
127
|
+
3. **默认值** `process.cwd()`(当前工作目录)
|
|
128
|
+
|
|
129
|
+
## 输出文件示例
|
|
130
|
+
|
|
131
|
+
告警文件保留历史记录(最多 100 条),新格式如下:
|
|
132
|
+
|
|
133
|
+
### alert/behavior.json
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"version": "1.0",
|
|
138
|
+
"alerts": [
|
|
139
|
+
{
|
|
140
|
+
"timestamp": "2026-01-30T10:30:00.000Z",
|
|
141
|
+
"severity": "critical",
|
|
142
|
+
"type": "frustration",
|
|
143
|
+
"summary": "检测到用户挫折行为",
|
|
144
|
+
"details": {
|
|
145
|
+
"frustrationScore": 75,
|
|
146
|
+
"rageClickCount": 5,
|
|
147
|
+
"deadClickCount": 3,
|
|
148
|
+
"totalInteractions": 50
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### alert/error.json
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"version": "1.0",
|
|
160
|
+
"alerts": [
|
|
161
|
+
{
|
|
162
|
+
"timestamp": "2026-01-30T10:30:00.000Z",
|
|
163
|
+
"severity": "critical",
|
|
164
|
+
"type": "error",
|
|
165
|
+
"summary": "检测到 3 个运行时错误",
|
|
166
|
+
"details": {
|
|
167
|
+
"totalErrors": 3,
|
|
168
|
+
"runtimeErrorCount": 2,
|
|
169
|
+
"unhandledRejectionCount": 1,
|
|
170
|
+
"consoleErrorCount": 0,
|
|
171
|
+
"recentErrors": [
|
|
172
|
+
{
|
|
173
|
+
"id": "uuid-1",
|
|
174
|
+
"timestamp": 1738233000000,
|
|
175
|
+
"errorType": "runtime",
|
|
176
|
+
"message": "Cannot read property 'foo' of undefined"
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## 冷却期机制
|
|
186
|
+
|
|
187
|
+
为避免告警风暴,每个检测器都有 10 秒的冷却期:
|
|
188
|
+
- 同一检测器的文件写入间隔至少 10 秒
|
|
189
|
+
- 冷却期内的新问题会累积到下次写入
|
|
190
|
+
|
|
191
|
+
## 架构说明
|
|
192
|
+
|
|
193
|
+
基于 [SPEC-SRV-005: Detector 架构重构](../../specs/server/005-detector-refactor.md)
|
|
194
|
+
|
|
195
|
+
### 设计原则
|
|
196
|
+
|
|
197
|
+
1. **职责分离**:BehaviorDetector 和 AlertDetector 各司其职
|
|
198
|
+
2. **异步检测**:检测逻辑不阻塞 API 响应
|
|
199
|
+
3. **容错设计**:文件写入失败不影响数据接收
|
|
200
|
+
4. **独立工作**:每个检测器独立工作,互不干扰
|
|
201
|
+
|
|
202
|
+
## 开发
|
|
203
|
+
|
|
204
|
+
### 运行测试
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
npm test
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### 构建
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
npm run build
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## License
|
|
217
|
+
|
|
218
|
+
MIT
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Agent-aware CLI
|
|
4
4
|
* 启动 HTTP Server
|
|
5
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
5
6
|
*
|
|
6
7
|
* 使用方式:
|
|
7
|
-
* npx agent-aware-server start
|
|
8
|
+
* npx agent-aware-server start [--project-root <path>]
|
|
9
|
+
*
|
|
10
|
+
* 所有输出文件统一到 <project-root>/.agent-aware/ 目录:
|
|
11
|
+
* - .agent-aware/alert/ - 检测告警文件
|
|
12
|
+
* - .agent-aware/detail/ - 详细数据文件
|
|
8
13
|
*/
|
|
9
14
|
export {};
|
|
10
15
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/cli.js
CHANGED
|
@@ -2,31 +2,62 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Agent-aware CLI
|
|
4
4
|
* 启动 HTTP Server
|
|
5
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
5
6
|
*
|
|
6
7
|
* 使用方式:
|
|
7
|
-
* npx agent-aware-server start
|
|
8
|
+
* npx agent-aware-server start [--project-root <path>]
|
|
9
|
+
*
|
|
10
|
+
* 所有输出文件统一到 <project-root>/.agent-aware/ 目录:
|
|
11
|
+
* - .agent-aware/alert/ - 检测告警文件
|
|
12
|
+
* - .agent-aware/detail/ - 详细数据文件
|
|
8
13
|
*/
|
|
9
14
|
import { serve } from '@hono/node-server';
|
|
10
15
|
import { createHttpApi } from './httpApi.js';
|
|
11
16
|
import { BehaviorStore } from './store/behaviorStore.js';
|
|
17
|
+
import { ErrorStore } from './store/errorStore.js';
|
|
18
|
+
import { BehaviorDetector } from './detector/behaviorDetector.js';
|
|
19
|
+
import { AlertDetector } from './detector/alertDetector.js';
|
|
12
20
|
const HTTP_PORT = 4100;
|
|
13
|
-
|
|
21
|
+
function parseArgs() {
|
|
22
|
+
const args = process.argv.slice(2);
|
|
23
|
+
let projectRoot = process.env.USER_PROJECT_ROOT || process.cwd();
|
|
24
|
+
// 解析 --project-root 参数
|
|
25
|
+
const projectRootIndex = args.indexOf('--project-root');
|
|
26
|
+
if (projectRootIndex !== -1 && args[projectRootIndex + 1]) {
|
|
27
|
+
projectRoot = args[projectRootIndex + 1];
|
|
28
|
+
}
|
|
29
|
+
return { projectRoot };
|
|
30
|
+
}
|
|
14
31
|
function start() {
|
|
15
|
-
const
|
|
16
|
-
|
|
32
|
+
const { projectRoot } = parseArgs();
|
|
33
|
+
// 所有组件统一使用 projectRoot,输出到 .agent-aware/ 目录
|
|
34
|
+
const store = new BehaviorStore(projectRoot);
|
|
35
|
+
const errorStore = new ErrorStore(projectRoot);
|
|
36
|
+
const behaviorDetector = new BehaviorDetector(projectRoot);
|
|
37
|
+
const alertDetector = new AlertDetector(projectRoot);
|
|
38
|
+
const app = createHttpApi(store, errorStore, behaviorDetector, alertDetector);
|
|
17
39
|
console.log(`
|
|
18
40
|
╔═══════════════════════════════════════════════════════════╗
|
|
19
41
|
║ ║
|
|
20
42
|
║ Agent-aware Server ║
|
|
21
43
|
║ ║
|
|
22
44
|
║ HTTP API: http://localhost:${HTTP_PORT} ║
|
|
45
|
+
║ Project Root: ${projectRoot.slice(0, 38).padEnd(38)}║
|
|
46
|
+
║ ║
|
|
47
|
+
║ Output: ║
|
|
48
|
+
║ Alert: .agent-aware/alert/ ║
|
|
49
|
+
║ Detail: .agent-aware/detail/ ║
|
|
23
50
|
║ ║
|
|
24
51
|
║ Endpoints: ║
|
|
25
|
-
║ POST /behaviors
|
|
26
|
-
║ GET /behaviors
|
|
27
|
-
║ GET /summary
|
|
28
|
-
║ GET /hotspots
|
|
29
|
-
║ DELETE /behaviors
|
|
52
|
+
║ POST /behaviors - SDK 上报行为数据 ║
|
|
53
|
+
║ GET /behaviors - 查询行为列表 ║
|
|
54
|
+
║ GET /summary - 获取行为摘要 ║
|
|
55
|
+
║ GET /hotspots - 获取交互热点 ║
|
|
56
|
+
║ DELETE /behaviors - 清空行为数据 ║
|
|
57
|
+
║ POST /errors - SDK 上报错误数据 ║
|
|
58
|
+
║ GET /errors - 查询错误列表 ║
|
|
59
|
+
║ GET /errors/summary - 获取错误摘要 ║
|
|
60
|
+
║ DELETE /errors - 清空错误数据 ║
|
|
30
61
|
║ ║
|
|
31
62
|
╚═══════════════════════════════════════════════════════════╝
|
|
32
63
|
`);
|
|
@@ -41,13 +72,30 @@ function showHelp() {
|
|
|
41
72
|
Agent-aware CLI
|
|
42
73
|
|
|
43
74
|
用法:
|
|
44
|
-
npx agent-aware-server <command>
|
|
75
|
+
npx agent-aware-server <command> [options]
|
|
45
76
|
|
|
46
77
|
命令:
|
|
47
78
|
start 启动 HTTP Server(默认端口 4100)
|
|
48
79
|
|
|
80
|
+
选项:
|
|
81
|
+
--project-root <path> 指定用户项目根目录(输出 .agent-aware/ 目录)
|
|
82
|
+
|
|
83
|
+
环境变量:
|
|
84
|
+
USER_PROJECT_ROOT 用户项目根目录(优先级高于 --project-root)
|
|
85
|
+
|
|
86
|
+
输出目录结构:
|
|
87
|
+
<project-root>/.agent-aware/
|
|
88
|
+
├── alert/ # 检测告警文件(供 Agent 监控)
|
|
89
|
+
│ ├── behavior.json # 行为检测告警
|
|
90
|
+
│ └── error.json # 错误检测告警
|
|
91
|
+
└── detail/ # 详细数据文件(供 HTTP API 查询)
|
|
92
|
+
├── behaviors.json # 行为详细数据
|
|
93
|
+
└── errors.json # 错误详细数据
|
|
94
|
+
|
|
49
95
|
示例:
|
|
50
96
|
npx agent-aware-server start
|
|
97
|
+
npx agent-aware-server start --project-root /path/to/project
|
|
98
|
+
USER_PROJECT_ROOT=/path/to/project npx agent-aware-server start
|
|
51
99
|
`);
|
|
52
100
|
}
|
|
53
101
|
// 主入口
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,MAAM,SAAS,GAAG,IAAI,CAAA;AAEtB,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAEhE,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACvD,IAAI,gBAAgB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1D,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC;AAED,SAAS,KAAK;IACZ,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,CAAA;IAEnC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;IAC9C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAA;IAE7E,OAAO,CAAC,GAAG,CAAC;;;;;iCAKmB,SAAS;oBACtB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;CAkBtD,CAAC,CAAA;IAEA,KAAK,CAAC;QACJ,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,SAAS;KAChB,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Bb,CAAC,CAAA;AACF,CAAC;AAED,MAAM;AACN,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO,CAAC;IACb,KAAK,SAAS;QACZ,KAAK,EAAE,CAAA;QACP,MAAK;IACP,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI;QACP,QAAQ,EAAE,CAAA;QACV,MAAK;IACP;QACE,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,CAAC,CAAA;QACjC,QAAQ,EAAE,CAAA;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDetector - 错误检测器
|
|
3
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
4
|
+
*
|
|
5
|
+
* 职责:检测高危的运行时错误
|
|
6
|
+
*/
|
|
7
|
+
import type { ErrorSummary } from '../types';
|
|
8
|
+
export type IssueSeverity = 'critical' | 'warning' | 'info';
|
|
9
|
+
export declare class AlertDetector {
|
|
10
|
+
private alertDir;
|
|
11
|
+
private errorPath;
|
|
12
|
+
private lastAlertTime;
|
|
13
|
+
/**
|
|
14
|
+
* @param projectRoot 用户项目根目录,告警将写入 <projectRoot>/.agent-aware/alert/
|
|
15
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
16
|
+
*/
|
|
17
|
+
constructor(projectRoot?: string);
|
|
18
|
+
/**
|
|
19
|
+
* 计算严重级别
|
|
20
|
+
*/
|
|
21
|
+
calculateSeverity(errorSummary: ErrorSummary): IssueSeverity;
|
|
22
|
+
/**
|
|
23
|
+
* 检测并写入问题
|
|
24
|
+
*/
|
|
25
|
+
checkAndAlert(errorSummary: ErrorSummary): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 读取现有的告警数据
|
|
28
|
+
*/
|
|
29
|
+
private readAlerts;
|
|
30
|
+
/**
|
|
31
|
+
* 写入 error.json(保留历史记录,最多 100 条)
|
|
32
|
+
*/
|
|
33
|
+
private writeAlert;
|
|
34
|
+
/**
|
|
35
|
+
* 生成问题描述
|
|
36
|
+
*/
|
|
37
|
+
private generateDescription;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=alertDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alertDetector.d.ts","sourceRoot":"","sources":["../../src/detector/alertDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAiB5C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;AA0B3D,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAAY;IAEjC;;;OAGG;gBACS,WAAW,GAAE,MAAgC;IAKzD;;OAEG;IACH,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa;IAS5D;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9D;;OAEG;YACW,UAAU;IAUxB;;OAEG;YACW,UAAU;IAqBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAG5B"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDetector - 错误检测器
|
|
3
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
4
|
+
*
|
|
5
|
+
* 职责:检测高危的运行时错误
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
const AGENT_AWARE_DIR = '.agent-aware';
|
|
10
|
+
const ALERT_DIR = 'alert';
|
|
11
|
+
const ERROR_FILE = 'error.json';
|
|
12
|
+
const ALERT_COOLDOWN_MS = 10000; // 10 秒冷却期
|
|
13
|
+
const MAX_ALERTS = 100; // 最多保留 100 条历史记录
|
|
14
|
+
const STORAGE_VERSION = '1.0';
|
|
15
|
+
/**
|
|
16
|
+
* 获取默认的项目根目录
|
|
17
|
+
* 优先级:环境变量 USER_PROJECT_ROOT > process.cwd()
|
|
18
|
+
*/
|
|
19
|
+
function getDefaultProjectRoot() {
|
|
20
|
+
return process.env.USER_PROJECT_ROOT || process.cwd();
|
|
21
|
+
}
|
|
22
|
+
export class AlertDetector {
|
|
23
|
+
/**
|
|
24
|
+
* @param projectRoot 用户项目根目录,告警将写入 <projectRoot>/.agent-aware/alert/
|
|
25
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
26
|
+
*/
|
|
27
|
+
constructor(projectRoot = getDefaultProjectRoot()) {
|
|
28
|
+
this.lastAlertTime = 0;
|
|
29
|
+
this.alertDir = join(projectRoot, AGENT_AWARE_DIR, ALERT_DIR);
|
|
30
|
+
this.errorPath = join(this.alertDir, ERROR_FILE);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 计算严重级别
|
|
34
|
+
*/
|
|
35
|
+
calculateSeverity(errorSummary) {
|
|
36
|
+
// Critical: 有错误
|
|
37
|
+
if (errorSummary.totalErrors >= 1) {
|
|
38
|
+
return 'critical';
|
|
39
|
+
}
|
|
40
|
+
return 'info';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 检测并写入问题
|
|
44
|
+
*/
|
|
45
|
+
async checkAndAlert(errorSummary) {
|
|
46
|
+
const severity = this.calculateSeverity(errorSummary);
|
|
47
|
+
// Info 级别不记录
|
|
48
|
+
if (severity === 'info') {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// 检查冷却期
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
if (now - this.lastAlertTime < ALERT_COOLDOWN_MS) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// 写入 error.json
|
|
57
|
+
await this.writeAlert({
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
severity,
|
|
60
|
+
type: 'error',
|
|
61
|
+
summary: this.generateDescription(errorSummary),
|
|
62
|
+
details: {
|
|
63
|
+
totalErrors: errorSummary.totalErrors,
|
|
64
|
+
runtimeErrorCount: errorSummary.runtimeErrorCount,
|
|
65
|
+
unhandledRejectionCount: errorSummary.unhandledRejectionCount,
|
|
66
|
+
consoleErrorCount: errorSummary.consoleErrorCount,
|
|
67
|
+
recentErrors: errorSummary.recentErrors.map((error) => ({
|
|
68
|
+
id: error.id,
|
|
69
|
+
timestamp: error.timestamp,
|
|
70
|
+
errorType: error.errorType,
|
|
71
|
+
message: error.error.message,
|
|
72
|
+
})),
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
this.lastAlertTime = now;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 读取现有的告警数据
|
|
79
|
+
*/
|
|
80
|
+
async readAlerts() {
|
|
81
|
+
try {
|
|
82
|
+
const content = await readFile(this.errorPath, 'utf-8');
|
|
83
|
+
return JSON.parse(content);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// 文件不存在或损坏,返回空数据
|
|
87
|
+
return { version: STORAGE_VERSION, alerts: [] };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 写入 error.json(保留历史记录,最多 100 条)
|
|
92
|
+
*/
|
|
93
|
+
async writeAlert(alert) {
|
|
94
|
+
try {
|
|
95
|
+
await mkdir(this.alertDir, { recursive: true });
|
|
96
|
+
// 读取现有数据
|
|
97
|
+
const data = await this.readAlerts();
|
|
98
|
+
// 追加新告警
|
|
99
|
+
data.alerts.push(alert);
|
|
100
|
+
// 限制数量(FIFO)
|
|
101
|
+
while (data.alerts.length > MAX_ALERTS) {
|
|
102
|
+
data.alerts.shift();
|
|
103
|
+
}
|
|
104
|
+
await writeFile(this.errorPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error('Failed to write error alert:', error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 生成问题描述
|
|
112
|
+
*/
|
|
113
|
+
generateDescription(errorSummary) {
|
|
114
|
+
return `检测到 ${errorSummary.totalErrors} 个运行时错误`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=alertDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alertDetector.js","sourceRoot":"","sources":["../../src/detector/alertDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BehaviorDetector - 行为检测器
|
|
3
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
4
|
+
*
|
|
5
|
+
* 职责:检测消极的用户交互行为
|
|
6
|
+
*/
|
|
7
|
+
import type { Summary } from '../types';
|
|
8
|
+
export type IssueSeverity = 'critical' | 'warning' | 'info';
|
|
9
|
+
export declare class BehaviorDetector {
|
|
10
|
+
private alertDir;
|
|
11
|
+
private behaviorPath;
|
|
12
|
+
private lastAlertTime;
|
|
13
|
+
/**
|
|
14
|
+
* @param projectRoot 用户项目根目录,告警将写入 <projectRoot>/.agent-aware/alert/
|
|
15
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
16
|
+
*/
|
|
17
|
+
constructor(projectRoot?: string);
|
|
18
|
+
/**
|
|
19
|
+
* 计算严重级别
|
|
20
|
+
*/
|
|
21
|
+
calculateSeverity(summary: Summary): IssueSeverity;
|
|
22
|
+
/**
|
|
23
|
+
* 检测并写入问题
|
|
24
|
+
*/
|
|
25
|
+
checkAndAlert(summary: Summary): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 读取现有的告警数据
|
|
28
|
+
*/
|
|
29
|
+
private readAlerts;
|
|
30
|
+
/**
|
|
31
|
+
* 写入 behavior.json(保留历史记录,最多 100 条)
|
|
32
|
+
*/
|
|
33
|
+
private writeAlert;
|
|
34
|
+
/**
|
|
35
|
+
* 生成问题描述
|
|
36
|
+
*/
|
|
37
|
+
private generateDescription;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=behaviorDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behaviorDetector.d.ts","sourceRoot":"","sources":["../../src/detector/behaviorDetector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAiBvC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAA;AAoB3D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAY;IAEjC;;;OAGG;gBACS,WAAW,GAAE,MAAgC;IAKzD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa;IAoBlD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BpD;;OAEG;YACW,UAAU;IAUxB;;OAEG;YACW,UAAU;IAqBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BehaviorDetector - 行为检测器
|
|
3
|
+
* 基于 SPEC-SRV-005: Detector 架构重构
|
|
4
|
+
*
|
|
5
|
+
* 职责:检测消极的用户交互行为
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
const AGENT_AWARE_DIR = '.agent-aware';
|
|
10
|
+
const ALERT_DIR = 'alert';
|
|
11
|
+
const BEHAVIOR_FILE = 'behavior.json';
|
|
12
|
+
const ALERT_COOLDOWN_MS = 10000; // 10 秒冷却期
|
|
13
|
+
const MAX_ALERTS = 100; // 最多保留 100 条历史记录
|
|
14
|
+
const STORAGE_VERSION = '1.0';
|
|
15
|
+
/**
|
|
16
|
+
* 获取默认的项目根目录
|
|
17
|
+
* 优先级:环境变量 USER_PROJECT_ROOT > process.cwd()
|
|
18
|
+
*/
|
|
19
|
+
function getDefaultProjectRoot() {
|
|
20
|
+
return process.env.USER_PROJECT_ROOT || process.cwd();
|
|
21
|
+
}
|
|
22
|
+
export class BehaviorDetector {
|
|
23
|
+
/**
|
|
24
|
+
* @param projectRoot 用户项目根目录,告警将写入 <projectRoot>/.agent-aware/alert/
|
|
25
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
26
|
+
*/
|
|
27
|
+
constructor(projectRoot = getDefaultProjectRoot()) {
|
|
28
|
+
this.lastAlertTime = 0;
|
|
29
|
+
this.alertDir = join(projectRoot, AGENT_AWARE_DIR, ALERT_DIR);
|
|
30
|
+
this.behaviorPath = join(this.alertDir, BEHAVIOR_FILE);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 计算严重级别
|
|
34
|
+
*/
|
|
35
|
+
calculateSeverity(summary) {
|
|
36
|
+
// Critical: 挫折指数很高
|
|
37
|
+
if (summary.frustrationScore >= 70) {
|
|
38
|
+
return 'critical';
|
|
39
|
+
}
|
|
40
|
+
// Warning: 中等挫折或有问题行为
|
|
41
|
+
if (summary.frustrationScore >= 50) {
|
|
42
|
+
return 'warning';
|
|
43
|
+
}
|
|
44
|
+
if (summary.rageClickCount >= 3) {
|
|
45
|
+
return 'warning';
|
|
46
|
+
}
|
|
47
|
+
if (summary.deadClickCount >= 2) {
|
|
48
|
+
return 'warning';
|
|
49
|
+
}
|
|
50
|
+
return 'info';
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 检测并写入问题
|
|
54
|
+
*/
|
|
55
|
+
async checkAndAlert(summary) {
|
|
56
|
+
const severity = this.calculateSeverity(summary);
|
|
57
|
+
// Info 级别不记录
|
|
58
|
+
if (severity === 'info') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// 检查冷却期
|
|
62
|
+
const now = Date.now();
|
|
63
|
+
if (now - this.lastAlertTime < ALERT_COOLDOWN_MS) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// 写入 behavior.json
|
|
67
|
+
await this.writeAlert({
|
|
68
|
+
timestamp: new Date().toISOString(),
|
|
69
|
+
severity,
|
|
70
|
+
type: 'frustration',
|
|
71
|
+
summary: this.generateDescription(summary),
|
|
72
|
+
details: {
|
|
73
|
+
frustrationScore: summary.frustrationScore,
|
|
74
|
+
rageClickCount: summary.rageClickCount,
|
|
75
|
+
deadClickCount: summary.deadClickCount,
|
|
76
|
+
totalInteractions: summary.totalInteractions,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
this.lastAlertTime = now;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 读取现有的告警数据
|
|
83
|
+
*/
|
|
84
|
+
async readAlerts() {
|
|
85
|
+
try {
|
|
86
|
+
const content = await readFile(this.behaviorPath, 'utf-8');
|
|
87
|
+
return JSON.parse(content);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// 文件不存在或损坏,返回空数据
|
|
91
|
+
return { version: STORAGE_VERSION, alerts: [] };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 写入 behavior.json(保留历史记录,最多 100 条)
|
|
96
|
+
*/
|
|
97
|
+
async writeAlert(alert) {
|
|
98
|
+
try {
|
|
99
|
+
await mkdir(this.alertDir, { recursive: true });
|
|
100
|
+
// 读取现有数据
|
|
101
|
+
const data = await this.readAlerts();
|
|
102
|
+
// 追加新告警
|
|
103
|
+
data.alerts.push(alert);
|
|
104
|
+
// 限制数量(FIFO)
|
|
105
|
+
while (data.alerts.length > MAX_ALERTS) {
|
|
106
|
+
data.alerts.shift();
|
|
107
|
+
}
|
|
108
|
+
await writeFile(this.behaviorPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error('Failed to write behavior alert:', error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 生成问题描述
|
|
116
|
+
*/
|
|
117
|
+
generateDescription(summary) {
|
|
118
|
+
if (summary.frustrationScore >= 70) {
|
|
119
|
+
return `检测到用户挫折行为(挫折指数: ${summary.frustrationScore})`;
|
|
120
|
+
}
|
|
121
|
+
return `检测到用户挫折行为`;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=behaviorDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behaviorDetector.js","sourceRoot":"","sources":["../../src/detector/behaviorDetector.ts"],"names":[],"mappings":"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"}
|
package/dist/httpApi.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP API
|
|
3
|
-
* 基于 SPEC-SRV-001
|
|
3
|
+
* 基于 SPEC-SRV-001 和 SPEC-SRV-005
|
|
4
4
|
*
|
|
5
5
|
* 支持 SDK 上报和 AI 查询
|
|
6
6
|
*/
|
|
7
7
|
import { Hono } from 'hono';
|
|
8
8
|
import type { BehaviorStore } from './store/behaviorStore';
|
|
9
9
|
import type { ErrorStore } from './store/errorStore';
|
|
10
|
-
|
|
10
|
+
import type { BehaviorDetector } from './detector/behaviorDetector';
|
|
11
|
+
import type { AlertDetector } from './detector/alertDetector';
|
|
12
|
+
export declare function createHttpApi(store: BehaviorStore, errorStore?: ErrorStore, behaviorDetector?: BehaviorDetector, alertDetector?: AlertDetector): Hono;
|
|
11
13
|
//# sourceMappingURL=httpApi.d.ts.map
|
package/dist/httpApi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpApi.d.ts","sourceRoot":"","sources":["../src/httpApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"httpApi.d.ts","sourceRoot":"","sources":["../src/httpApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAW7D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,UAAU,CAAC,EAAE,UAAU,EACvB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI,CAoJN"}
|
package/dist/httpApi.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HTTP API
|
|
3
|
-
* 基于 SPEC-SRV-001
|
|
3
|
+
* 基于 SPEC-SRV-001 和 SPEC-SRV-005
|
|
4
4
|
*
|
|
5
5
|
* 支持 SDK 上报和 AI 查询
|
|
6
6
|
*/
|
|
7
7
|
import { Hono } from 'hono';
|
|
8
8
|
import { cors } from 'hono/cors';
|
|
9
|
-
export function createHttpApi(store, errorStore) {
|
|
9
|
+
export function createHttpApi(store, errorStore, behaviorDetector, alertDetector) {
|
|
10
10
|
const app = new Hono();
|
|
11
11
|
// 启用 CORS - 允许所有来源(开发环境)
|
|
12
12
|
// 使用动态 origin 回显请求的 Origin,以支持 credentials 模式
|
|
@@ -25,6 +25,13 @@ export function createHttpApi(store, errorStore) {
|
|
|
25
25
|
const body = await c.req.json();
|
|
26
26
|
const behaviors = body.behaviors || [];
|
|
27
27
|
await store.addBatch(behaviors);
|
|
28
|
+
// 触发行为检测(不阻塞响应)
|
|
29
|
+
if (behaviorDetector) {
|
|
30
|
+
const summary = await store.getSummary();
|
|
31
|
+
behaviorDetector.checkAndAlert(summary).catch((err) => {
|
|
32
|
+
console.error('Behavior detection failed:', err);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
28
35
|
const response = {
|
|
29
36
|
ok: true,
|
|
30
37
|
count: behaviors.length,
|
|
@@ -79,6 +86,13 @@ export function createHttpApi(store, errorStore) {
|
|
|
79
86
|
const body = await c.req.json();
|
|
80
87
|
const errors = body.errors || [];
|
|
81
88
|
await errorStore.addBatch(errors);
|
|
89
|
+
// 触发错误检测(不阻塞响应)
|
|
90
|
+
if (alertDetector) {
|
|
91
|
+
const errorSummary = await errorStore.getSummary();
|
|
92
|
+
alertDetector.checkAndAlert(errorSummary).catch((err) => {
|
|
93
|
+
console.error('Error detection failed:', err);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
82
96
|
const response = {
|
|
83
97
|
ok: true,
|
|
84
98
|
count: errors.length,
|
package/dist/httpApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpApi.js","sourceRoot":"","sources":["../src/httpApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"httpApi.js","sourceRoot":"","sources":["../src/httpApi.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent-aware Server
|
|
3
|
-
*
|
|
2
|
+
* Agent-aware Server 包入口
|
|
3
|
+
* 基于 SPEC-SRV-006: Package Entry Architecture
|
|
4
|
+
*
|
|
5
|
+
* 此文件只导出公共 API,不执行任何代码(无副作用)
|
|
6
|
+
* 服务器启动入口请使用 cli.ts
|
|
4
7
|
*/
|
|
5
|
-
export {};
|
|
8
|
+
export { createHttpApi } from './httpApi';
|
|
9
|
+
export { BehaviorStore } from './store/behaviorStore';
|
|
10
|
+
export { ErrorStore } from './store/errorStore';
|
|
11
|
+
export { BehaviorDetector } from './detector/behaviorDetector';
|
|
12
|
+
export { AlertDetector } from './detector/alertDetector';
|
|
13
|
+
export type { Behavior, Summary, Hotspot, ErrorRecord, ErrorSummary } from './types';
|
|
6
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGxD,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,28 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent-aware Server
|
|
3
|
-
*
|
|
2
|
+
* Agent-aware Server 包入口
|
|
3
|
+
* 基于 SPEC-SRV-006: Package Entry Architecture
|
|
4
|
+
*
|
|
5
|
+
* 此文件只导出公共 API,不执行任何代码(无副作用)
|
|
6
|
+
* 服务器启动入口请使用 cli.ts
|
|
4
7
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const app = createHttpApi(store, errorStore);
|
|
14
|
-
console.log(`[AgentAware Server] Starting on port ${PORT}...`);
|
|
15
|
-
serve({
|
|
16
|
-
fetch: app.fetch,
|
|
17
|
-
port: PORT,
|
|
18
|
-
});
|
|
19
|
-
console.log(`[AgentAware Server] HTTP API listening on http://localhost:${PORT}`);
|
|
20
|
-
console.log(`[AgentAware Server] Endpoints:`);
|
|
21
|
-
console.log(` POST /behaviors - 接收行为数据`);
|
|
22
|
-
console.log(` GET /health - 健康检查`);
|
|
23
|
-
console.log(` DELETE /behaviors - 清空行为数据`);
|
|
24
|
-
console.log(` POST /errors - 接收错误数据`);
|
|
25
|
-
console.log(` GET /errors - 查询错误数据`);
|
|
26
|
-
console.log(` GET /errors/summary - 获取错误摘要`);
|
|
27
|
-
console.log(` DELETE /errors - 清空错误数据`);
|
|
8
|
+
// 核心函数
|
|
9
|
+
export { createHttpApi } from './httpApi';
|
|
10
|
+
// 存储
|
|
11
|
+
export { BehaviorStore } from './store/behaviorStore';
|
|
12
|
+
export { ErrorStore } from './store/errorStore';
|
|
13
|
+
// 检测器
|
|
14
|
+
export { BehaviorDetector } from './detector/behaviorDetector';
|
|
15
|
+
export { AlertDetector } from './detector/alertDetector';
|
|
28
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,KAAK;AACL,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,MAAM;AACN,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BehaviorStore - 行为数据存储
|
|
3
3
|
* 基于 SPEC-SRV-002
|
|
4
|
+
*
|
|
5
|
+
* 更新:存储路径统一到 .agent-aware/detail/ 目录
|
|
4
6
|
*/
|
|
5
7
|
import type { Behavior, QueryOptions, Summary, Hotspot } from '../types';
|
|
6
8
|
export declare class BehaviorStore {
|
|
7
|
-
private
|
|
9
|
+
private detailDir;
|
|
8
10
|
private filePath;
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* @param projectRoot 用户项目根目录,数据将存储在 <projectRoot>/.agent-aware/detail/
|
|
13
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
14
|
+
*/
|
|
15
|
+
constructor(projectRoot?: string);
|
|
10
16
|
/**
|
|
11
17
|
* 添加单条行为
|
|
12
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviorStore.d.ts","sourceRoot":"","sources":["../../src/store/behaviorStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"behaviorStore.d.ts","sourceRoot":"","sources":["../../src/store/behaviorStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,QAAQ,EAER,YAAY,EACZ,OAAO,EACP,OAAO,EACR,MAAM,UAAU,CAAA;AAgBjB,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;IAExB;;;OAGG;gBACS,WAAW,GAAE,MAAgC;IAKzD;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACG,QAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAe5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAwBpC;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiCxD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;YACW,IAAI;IAUlB;;OAEG;YACW,KAAK;CAKpB"}
|
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BehaviorStore - 行为数据存储
|
|
3
3
|
* 基于 SPEC-SRV-002
|
|
4
|
+
*
|
|
5
|
+
* 更新:存储路径统一到 .agent-aware/detail/ 目录
|
|
4
6
|
*/
|
|
5
7
|
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
6
8
|
import { join } from 'node:path';
|
|
9
|
+
const AGENT_AWARE_DIR = '.agent-aware';
|
|
10
|
+
const DETAIL_DIR = 'detail';
|
|
7
11
|
const DATA_FILE = 'behaviors.json';
|
|
8
12
|
const MAX_BEHAVIORS = 1000;
|
|
9
13
|
const STORAGE_VERSION = '1.0';
|
|
14
|
+
/**
|
|
15
|
+
* 获取默认的项目根目录
|
|
16
|
+
* 优先级:环境变量 USER_PROJECT_ROOT > process.cwd()
|
|
17
|
+
*/
|
|
18
|
+
function getDefaultProjectRoot() {
|
|
19
|
+
return process.env.USER_PROJECT_ROOT || process.cwd();
|
|
20
|
+
}
|
|
10
21
|
export class BehaviorStore {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
/**
|
|
23
|
+
* @param projectRoot 用户项目根目录,数据将存储在 <projectRoot>/.agent-aware/detail/
|
|
24
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
25
|
+
*/
|
|
26
|
+
constructor(projectRoot = getDefaultProjectRoot()) {
|
|
27
|
+
this.detailDir = join(projectRoot, AGENT_AWARE_DIR, DETAIL_DIR);
|
|
28
|
+
this.filePath = join(this.detailDir, DATA_FILE);
|
|
14
29
|
}
|
|
15
30
|
/**
|
|
16
31
|
* 添加单条行为
|
|
@@ -119,7 +134,7 @@ export class BehaviorStore {
|
|
|
119
134
|
*/
|
|
120
135
|
async write(data) {
|
|
121
136
|
// 确保目录存在
|
|
122
|
-
await mkdir(this.
|
|
137
|
+
await mkdir(this.detailDir, { recursive: true });
|
|
123
138
|
await writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
124
139
|
}
|
|
125
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviorStore.js","sourceRoot":"","sources":["../../src/store/behaviorStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"behaviorStore.js","sourceRoot":"","sources":["../../src/store/behaviorStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ErrorStore - 错误数据存储
|
|
3
3
|
* 基于 SPEC-SRV-003: Errors API
|
|
4
|
+
*
|
|
5
|
+
* 更新:存储路径统一到 .agent-aware/detail/ 目录
|
|
4
6
|
*/
|
|
5
7
|
import type { ErrorRecord, ErrorQueryOptions, ErrorSummary } from '../types';
|
|
6
8
|
export declare class ErrorStore {
|
|
7
|
-
private
|
|
9
|
+
private detailDir;
|
|
8
10
|
private filePath;
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* @param projectRoot 用户项目根目录,数据将存储在 <projectRoot>/.agent-aware/detail/
|
|
13
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
14
|
+
*/
|
|
15
|
+
constructor(projectRoot?: string);
|
|
10
16
|
/**
|
|
11
17
|
* 添加单条错误
|
|
12
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorStore.d.ts","sourceRoot":"","sources":["../../src/store/errorStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errorStore.d.ts","sourceRoot":"","sources":["../../src/store/errorStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,YAAY,EACb,MAAM,UAAU,CAAA;AAgBjB,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAQ;IAExB;;;OAGG;gBACS,WAAW,GAAE,MAAgC;IAKzD;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAepE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAuBzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;YACW,IAAI;IAUlB;;OAEG;YACW,KAAK;CAKpB"}
|
package/dist/store/errorStore.js
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ErrorStore - 错误数据存储
|
|
3
3
|
* 基于 SPEC-SRV-003: Errors API
|
|
4
|
+
*
|
|
5
|
+
* 更新:存储路径统一到 .agent-aware/detail/ 目录
|
|
4
6
|
*/
|
|
5
7
|
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
6
8
|
import { join } from 'node:path';
|
|
9
|
+
const AGENT_AWARE_DIR = '.agent-aware';
|
|
10
|
+
const DETAIL_DIR = 'detail';
|
|
7
11
|
const DATA_FILE = 'errors.json';
|
|
8
12
|
const MAX_ERRORS = 1000;
|
|
9
13
|
const STORAGE_VERSION = '1.0';
|
|
14
|
+
/**
|
|
15
|
+
* 获取默认的项目根目录
|
|
16
|
+
* 优先级:环境变量 USER_PROJECT_ROOT > process.cwd()
|
|
17
|
+
*/
|
|
18
|
+
function getDefaultProjectRoot() {
|
|
19
|
+
return process.env.USER_PROJECT_ROOT || process.cwd();
|
|
20
|
+
}
|
|
10
21
|
export class ErrorStore {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
22
|
+
/**
|
|
23
|
+
* @param projectRoot 用户项目根目录,数据将存储在 <projectRoot>/.agent-aware/detail/
|
|
24
|
+
* 默认从环境变量 USER_PROJECT_ROOT 读取,如果未设置则使用 process.cwd()
|
|
25
|
+
*/
|
|
26
|
+
constructor(projectRoot = getDefaultProjectRoot()) {
|
|
27
|
+
this.detailDir = join(projectRoot, AGENT_AWARE_DIR, DETAIL_DIR);
|
|
28
|
+
this.filePath = join(this.detailDir, DATA_FILE);
|
|
14
29
|
}
|
|
15
30
|
/**
|
|
16
31
|
* 添加单条错误
|
|
@@ -88,7 +103,7 @@ export class ErrorStore {
|
|
|
88
103
|
*/
|
|
89
104
|
async write(data) {
|
|
90
105
|
// 确保目录存在
|
|
91
|
-
await mkdir(this.
|
|
106
|
+
await mkdir(this.detailDir, { recursive: true });
|
|
92
107
|
await writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
93
108
|
}
|
|
94
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorStore.js","sourceRoot":"","sources":["../../src/store/errorStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errorStore.js","sourceRoot":"","sources":["../../src/store/errorStore.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -92,4 +92,38 @@ export interface ErrorsResponse {
|
|
|
92
92
|
ok: boolean;
|
|
93
93
|
count: number;
|
|
94
94
|
}
|
|
95
|
+
export type IssueSeverity = 'critical' | 'warning' | 'info';
|
|
96
|
+
export type IssueType = 'error' | 'frustration' | 'performance';
|
|
97
|
+
export interface Issue {
|
|
98
|
+
id: string;
|
|
99
|
+
timestamp: string;
|
|
100
|
+
severity: IssueSeverity;
|
|
101
|
+
type: IssueType;
|
|
102
|
+
description: string;
|
|
103
|
+
details: {
|
|
104
|
+
summary?: Summary;
|
|
105
|
+
errorSummary?: ErrorSummary;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export interface IssuesData {
|
|
109
|
+
issues: Issue[];
|
|
110
|
+
summary: {
|
|
111
|
+
total: number;
|
|
112
|
+
critical: number;
|
|
113
|
+
warning: number;
|
|
114
|
+
info: number;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export interface Alert {
|
|
118
|
+
timestamp: string;
|
|
119
|
+
severity: IssueSeverity;
|
|
120
|
+
type: IssueType;
|
|
121
|
+
summary: string;
|
|
122
|
+
details: {
|
|
123
|
+
frustrationScore?: number;
|
|
124
|
+
rageClickCount?: number;
|
|
125
|
+
deadClickCount?: number;
|
|
126
|
+
errorCount?: number;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
95
129
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reskill/agent-aware-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Agent-aware RUM Server - HTTP API for user behavior tracking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsc",
|
|
46
|
-
"dev": "tsx watch src/
|
|
47
|
-
"start": "node dist/
|
|
46
|
+
"dev": "tsx watch src/cli.ts start",
|
|
47
|
+
"start": "node dist/cli.js start",
|
|
48
48
|
"test": "vitest run",
|
|
49
49
|
"test:watch": "vitest",
|
|
50
50
|
"typecheck": "tsc --noEmit"
|